nash300

Рейтинг
104
Регистрация
04.07.2016
WIKIMEO #:

А теперь запусти свой тетрис ( никому не нужный) по "ее коду".  Скрины начала работ, середины и конца скинешь сюда, посмотрим. 

Что ты мне доказать пытаешься?

Алиса не плохо справляется с кодом, я её использую и вполне доволен.

Вот код который написан мной никуда не смотрел писал сам, переменные специально одной буквой обозначил, что бы ИИ не могли по названию угадать.

что делает этот код
function pager(int $P, int $C, int $N = 2, bool $E = true)
{
        if($C<=2*$N+3) $result = range(1, $C);
        elseif($P-$N>2 && $P+$N<$C-1) $result = array_merge([1, null], range($P-$N, $P+$N), [null, $C]);
        elseif($P-$N>2) $result = array_merge([1, null], range($C-(2*$N+1), $C));
        elseif($P+$N<$C-1) $result = array_merge(range(1, 1+(2*$N+1)), [null, $C]);
        if (!$E) {
                $L = count($result)-1;
                if ($result[$L-1]===null && $result[$L]-$result[$L-2]==2) $result[$L-1] = $result[$L]-1;
                if ($result[1]===null && $result[2]-$result[0]==2) $result[1] = $result[2]-1;
        }
        return $result;
}

ответ алисы

Этот код реализует функцию пагинации (разбиения на страницы) — формирует массив номеров страниц для постраничного вывода с учётом текущего положения и настроек отображения.

Параметры функции
$P (int) — номер текущей страницы (позиция пользователя);

$C (int) — общее количество страниц (capacity);

$N (int, по умолчанию 2) — количество соседних страниц вокруг текущей, которые нужно показать;

$E (bool, по умолчанию true) — флаг, управляющий коррекцией «дыр» (null‑элементов) в последовательности.

Логика работы
1. Базовый случай: мало страниц
Если страниц немного (C≤2N+3), возвращаем полный список от 1 до C:

php
if ($C <= 2*$N + 3) $result = range(1, $C);
Пример: при N=2, C=722+3=7, значит, выведем [1,2,3,4,5,6,7].

2. Средний случай: текущая страница вдали от краёв
Если текущая страница P находится достаточно далеко от начала и конца (P−N>2 и P+N<C−1), показываем:

первую страницу (1);

«дыру» (null) — обозначение пропущенных страниц;

диапазон [P−N,P+N] (текущая ±N страниц);

ещё одну «дыру» (null);

последнюю страницу (C).

php
elseif ($P-$N > 2 && $P+$N < $C-1)
    $result = array_merge([1, null], range($P-$N, $P+$N), [null, $C]);
Пример: P=10, C=20, N=2 → [1, null, 8,9,10,11,12, null, 20].

3. Близко к концу
Если P−N>2, но P+N≥C−1 (страница близка к концу), показываем:

первую страницу (1);

«дыру» (null);

последние 2N+2 страницы.

php
elseif ($P-$N > 2)
    $result = array_merge([1, null], range($C-(2*$N+1), $C));
Пример: P=18, C=20, N=2 → [1, null, 15,16,17,18,19,20].

4. Близко к началу
Если P+N<C−1, но P−N≤2 (страница близка к началу), показываем:

первые 2N+2 страницы;

«дыру» (null);

последнюю страницу (C).

php
elseif ($P+$N < $C-1)
    $result = array_merge(range(1, 1+(2*$N+1)), [null, $C]);
Пример: P=3, C=20, N=2 → [1,2,3,4,5,6, null, 20].

5. Коррекция «дыр» (если $E = false)
Если флаг $E выключен, функция пытается «заполнить» null-элементы, если между соседними числами разрыв всего в 1:

Для последнего null: если предпоследний элемент null, а разница между последним и предпредпоследним равна 2, заменяем null на число между ними.

Для первого null: аналогично, если второй элемент null и разница между третьим и первым равна 2, заменяем null на среднее.

php
if (!$E) {
    $L = count($result)-1;
    if ($result[$L-1] === null && $result[$L] - $result[$L-2] == 2)
        $result[$L-1] = $result[$L] - 1;
    if ($result[1] === null && $result[2] - $result[0] == 2)
        $result[1] = $result[2] - 1;
}
Пример: [1, null, 3, ..., 19, null, 21] → [1, 2, 3, ..., 19, 20, 21].

Итог
Функция возвращает массив номеров страниц для отображения в интерфейсе пагинации, например:

[1, null, 8,9,10,11,12, null, 20] — с «дырами» для пропуска дальних страниц;

[1,2,3,4,5,6, null, 20] — когда текущая близко к началу;

[1, null, 15,16,17,18,19,20] — когда текущая близко к концу.

Такой подход экономит место и улучшает UX, показывая только релевантные номера страниц.

Ответ дипсик

Функция возвращает массив чисел (и null в качестве разделителя), который показывает, какие кнопки страниц отображать, чтобы пагинатор не был слишком длинным.

Параметры:
$P — текущая страница (Page)

$C — общее количество страниц (Count)

$N — сколько страниц показывать слева и справа от текущей (по умолчанию 2)

$E — разрешать "дырки" с двух сторон (Ellipsis), по умолчанию true

Логика работы:
Случай 1: Если страниц немного ($C <= 2*$N+3)
Просто показываем все страницы от 1 до $C

Пример ($C=5, $N=2): [1, 2, 3, 4, 5]

Случай 2: Если текущая страница где-то в середине (отделена с двух сторон)
Показываем: 1, дырка (null), несколько страниц вокруг текущей, дырка, последняя страница

Пример ($C=100, $P=50, $N=2): [1, null, 48, 49, 50, 51, 52, null, 100]

Случай 3: Если текущая страница близко к началу
Показываем: первые страницы, дырка, последняя страница

Пример ($C=100, $P=3, $N=2): [1, 2, 3, 4, 5, null, 100]

Случай 4: Если текущая страница близко к концу
Показываем: первая страница, дырка, последние страницы

Пример ($C=100, $P=97, $N=2): [1, null, 96, 97, 98, 99, 100]

Особенность с параметром $E = false:
Если $E = false, функция "заполняет дырки", когда рядом с ними должны быть последовательные числа.

Пример работы $E = false:

Было бы: [1, null, 48, 49, 50, 51, 52, null, 100]

Но если дырка рядом с последовательными числами (например [1, null, 3, 4, 5]), то null заменяется на 2

Результат: [1, 2, 3, 4, 5] (дырка исчезает)

Ответ чатжпт

Это PHP-функция для построения пагинации (списка номеров страниц с «…»), обычно для вывода вида:

14 5 620

Разберём по шагам.

Сигнатура функции
public function pager(int $P, int $C, int $N = 2, bool $E = true)


Параметры:

$P — текущая страница (Page)

$C — общее количество страниц (Count)

$N — сколько страниц показывать слева и справа от текущей (Neighbors), по умолчанию 2

$E — показывать ли «разрывы» (null → обычно рисуют как ...), по умолчанию true

Что возвращает

Функция возвращает массив номеров страниц, где:

числа — реальные страницы

null — пропуск (обычно отображается как ...)

Основная логика
1️⃣ Если страниц мало — показываем все
if ($C <= 2*$N + 3)
    $result = range(1, $C);


📌 Например:
C = 7 → [1,2,3,4,5,6,7]

2️⃣ Текущая страница где-то в середине
elseif ($P-$N > 2 && $P+$N < $C-1)


📌 Результат:

[1, null, P-N ... P+N, null, C]


Пример:

pager(5, 10)


Результат:

[1, null, 3, 4, 5, 6, 7, null, 10]

3️⃣ Ближе к концу
elseif ($P-$N > 2)


📌 Показывает последние страницы:

[1, null, C-(2N+1) ... C]


Пример:

[1, null, 6, 7, 8, 9, 10]

4️⃣ Ближе к началу
elseif ($P+$N < $C-1)


📌 Показывает первые страницы:

[1, 2, 3, 4, 5, null, C]

Логика $E = false

Если $E === false, функция убирает null, когда пропуск равен всего одной странице.

Например:

[1, null, 3]


превратится в:

[1, 2, 3]


Чтобы не показывать ..., если можно показать число.

Хуже всех справился чатжпт и допустил ошибки, дипсик получше но тоже с ошибками.

Алиса одна справилась без ошибок и все понятно объяснила.

Так что сначала сам попользуйся алисой, а потом мнение свое объективное высказывай, а так это не мнение а фантазии.

Artisan #:
Алису вырастили не яндексоиды, а другие люди,

около тридцати лет назад, без модных нейросетей.

получается и боинг 747 братья Райт построили?


Artisan #:

Не накодила, а нашла чужой код.

именно накодила, не плохо в нем разбирается и может прекрасно вносить правки которые ты просишь, это уже не просто найти чужой код

WIKIMEO #:

Важно не то, сколько лет Алисе в сравнении с GPT-чатом, а то, что она умеет на сегодня, и соответствует ли реалиям 2025-2026. 

К сожалению (или нет), Алиса, Маруся, Гигачаты и прочие - не конкуренты гигантам буржа.

Вы утверждали, что  сплошная халтура. Но нет, та же алиса не халтура и не плохо справляется со своими задачами, так что утверждение ваше сомнительно.

Что бы сравнить возможности Алисы и того же чатжпт в честных условиях, нужно обучить  и запустить модели на сопоставимом оборудовании, думаю нашим разработчикам это не доступно. Но даже на том что есть, получилось вполне не плохо.

Вот Алиса тетрис накодила, вполне рабочий для первой версии уже не плохо, только скорость слишком высокая

import pygame
import random

# Инициализация pygame
pygame.init()

# Константы
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
GRID_SIZE = 30
GRID_WIDTH = 10
GRID_HEIGHT = 20
FPS = 60

# Цвета
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
CYAN = (0, 255, 255)
MAGENTA = (255, 0, 255)
YELLOW = (255, 255, 0)
ORANGE = (255, 165, 0)

COLORS = [RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW, ORANGE]

# Фигуры (в виде матриц 4x4)
SHAPES = [
    [[1, 1, 1, 1]],  # I
    [[1, 1], [1, 1]],  # O
    [[1, 1, 1], [0, 1, 0]],  # T
    [[1, 1, 1], [1, 0, 0]],  # L
    [[1, 1, 1], [0, 0, 1]],  # J
    [[0, 1, 1], [1, 1, 0]],  # S
    [[1, 1, 0], [0, 1, 1]]   # Z
]

class Tetromino:
    def __init__(self, x, y, shape_idx):
        self.x = x
        self.y = y
        self.shape = SHAPES[shape_idx]
        self.color = COLORS[shape_idx]
        self.rotation = 0

    def rotate(self):
        # Поворот матрицы на 90 градусов
        rows = len(self.shape)
        cols = len(self.shape[0])
        rotated = [[0] * rows for _ in range(cols)]
        for r in range(rows):
            for c in range(cols):
                rotated[c][rows - 1 - r] = self.shape[r][c]
        return rotated

    def get_rotated_shape(self):
        if self.rotation == 0:
            return self.shape
        elif self.rotation == 1:
            return self.rotate()
        elif self.rotation == 2:
            return self.rotate().rotate()
        else:
            return self.rotate().rotate().rotate()

class Game:
    def __init__(self):
        self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
        pygame.display.set_caption("Tetris")
        self.clock = pygame.time.Clock()
        self.grid = [[0 for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]
        self.current_piece = self.new_piece()
        self.game_over = False
        self.score = 0
        self.font = pygame.font.SysFont(None, 36)

    def new_piece(self):
        shape_idx = random.randint(0, len(SHAPES) - 1)
        return Tetromino(GRID_WIDTH // 2 - 2, 0, shape_idx)

    def valid_position(self, piece, dx=0, dy=0, rotated=False):
        shape = piece.get_rotated_shape() if rotated else piece.shape
        for y, row in enumerate(shape):
            for x, cell in enumerate(row):
                if cell:
                    new_x = piece.x + x + dx
                    new_y = piece.y + y + dy
                    if (new_x < 0 or new_x >= GRID_WIDTH or
                        new_y >= GRID_HEIGHT or
                        (new_y >= 0 and self.grid[new_y][new_x])):
                        return False
        return True

    def merge_piece(self):
        shape = self.current_piece.get_rotated_shape()
        for y, row in enumerate(shape):
            for x, cell in enumerate(row):
                if cell and self.current_piece.y + y >= 0:
                    self.grid[self.current_piece.y + y][self.current_piece.x + x] = self.current_piece.color

    def clear_lines(self):
        lines_cleared = 0
        for y in range(GRID_HEIGHT):
            if all(self.grid[y]):
                del self.grid[y]
                self.grid.insert(0, [0 for _ in range(GRID_WIDTH)])
                lines_cleared += 1
        self.score += lines_cleared * 100

    def update(self):
        if not self.game_over:
            if self.valid_position(self.current_piece, 0, 1):
                self.current_piece.y += 1
            else:
                self.merge_piece()
                self.clear_lines()
                self.current_piece = self.new_piece()
                if not self.valid_position(self.current_piece):
                    self.game_over = True

    def handle_input(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT and self.valid_position(self.current_piece, -1, 0):
                    self.current_piece.x -= 1
                elif event.key == pygame.K_RIGHT and self.valid_position(self.current_piece, 1, 0):
                    self.current_piece.x += 1
                elif event.key == pygame.K_DOWN and self.valid_position(self.current_piece, 0, 1):
                    self.current_piece.y += 1
                elif event.key == pygame.K_UP:
                    rotated_shape = self.current_piece.rotate()
                    if self.valid_position(self.current_piece, 0, 0, True):
                        self.current_piece.shape = rotated_shape
                        self.current_piece.rotation = (self.current_piece.rotation + 1) % 4
        return True

    def draw_grid(self):
        for y in range(GRID_HEIGHT):
            for x in range(GRID_WIDTH):
                pygame.draw.rect(self.screen, self.grid[y][x] or BLACK,
                                 (x * GRID_SIZE, y * GRID_SIZE, GRID_SIZE, GRID_SIZE), 0)
                pygame.draw.rect(self.screen, WHITE,
                                 (x * GRID_SIZE, y * GRID_SIZE, GRID_SIZE, GRID_SIZE), 1)

    def draw_piece(self):
        shape = self.current_piece.get_rotated_shape()
        for y, row in enumerate(shape):
            for x, cell in enumerate(row):
                if cell:
                    pygame.draw.rect(self.screen, self.current_piece.color,
                                     ((self.current_piece.x + x) * GRID_SIZE,
                                      (self.current_piece.y + y) * GRID_SIZE,
                                      GRID_SIZE, GRID_SIZE), 0)
                    pygame.draw.rect(self.screen, WHITE,
                                     ((self.current_piece.x + x) * GRID_SIZE,
                                      (self.current_piece.y + y) * GRID_SIZE,
                                      GRID_SIZE, GRID_SIZE), 1)

    def draw_text(self):
        score_text = self.font.render(f"Счёт: {self.score}", True, WHITE)
        self.screen.blit(score_text, (GRID_WIDTH * GRID_SIZE + 20, 20))

        if self.game_over:
            game_over_text = self.font.render("GAME OVER", True, RED)
            text_rect = game_over_text.get_rect(center=(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2))
            self.screen.blit(game_over_text, text_rect)

    def run(self):
        running = True
        while running:
            self.screen.fill(BLACK)

            running = self.handle_input()

            self.update()

            self.draw_grid()
            self.draw_piece()
            self.draw_text()

            pygame.display.flip()
            self.clock.tick(FPS)

        pygame.quit()

# Запуск игры
if __name__ == "__main__":
    game = Game()
    game.run()
Vladimir #:
Назвал бы халтурой не чатжпт или Алису, а информационники из которых эти ИИ берут информацию
Ну второе, пробел не у ИИ, а у вас - учитесь составлять промты
Просто Яндекс поисковик, поэтому именно такое решение мне кажется более честным с его стороны, чем решение гугла, яндекс ищет по источникам и с помощью ии генерирует быстрый ответ, а гугл генерирует напрямую, функции поска тут уже нет. 
WIKIMEO #:
В точку) У Яндекса ничего нет нормального. Сплошная халтура. 

не согласен, спросил тоже самое у Алисы, она без проблем поняла вопрос, ответила правда что 3200 чайников, что соответствует 6,4 МВт и в 1000 раз меньше правильного ответа, но она поняла вопрос и расчет сделала, только не правильно перевела мега в кило

Учитывая, что Алиса задолго появилась до того же чатжпт, то яндекс тоже кое что может. И уж алису халтурой я точно не назвал бы.

Данный вопрос лучше задавать не в поиске, а в чате или напрямую колонке, в поиске написано, что результат на основе источников, если в источниках нет ответа, то результат будет нулевым, а вот чат с алисой или колонка могут сами генерировать результат.

png 3pjxumvtcx.png
Mik Foxi #:
кнопки "поделиться в соц сетях" - это атавизм, его просто уже не должно быть на сайте, лишние бесполезные тормоза от js, никто ими не пользуется. 
за декабрь 5721 раз поделились, в процентах от общего числа за месяц это мизер, но все же.
У пешеходов нет осаго, но дтп с их участием оформляют.
Vladimir SEO #:

ну это так кажется, это же не отзывы типа - окей, круто , классный продукт

в буквальном смысле "вроде бы" , а когда копнуть глубже то нативы не так пишут  

Я беру английский текст и перевожу его на русский, перевод на пятерочку,  я его отлично понимаю проблем нет, я не верю что русский язык такой особенный, что с ним ии справляется, а вот в обратную сторону ну никак, кроме того мне по работе пишут на английском в том числе и мы отлично друг друга понимаем.

Можно перевести какие то объемы и нанять носителя что бы прочитал и узнать его мнение и можно сделать окончательный вывод.

С Гуглом точно что то происходит, на прошлой неделе понедельник и вторник минус 40%, со среды все вернулось даже немного в плюс, на этой неделе во вторник минус где то 40%. За несколько лет, такое первый раз. Посмотрел выдачу внимательно в прошлый раз, в тематике нерелевантная фигня а не выдача, в этот раз еще не смотрел.
Vladimir SEO #:
тематика регион тип сайта ? индекс как ( хотя бы по оператору site ) 

Бурж больше всего трафика италия, франция, испания, штаты, германия, турция но и по всем остальным тоже есть. сайт не коммерц. по индексу вроде все как и было.

Всего: 479