А теперь запусти свой тетрис ( никому не нужный) по "ее коду". Скрины начала работ, середины и конца скинешь сюда, посмотрим.
Что ты мне доказать пытаешься?
Алиса не плохо справляется с кодом, я её использую и вполне доволен.
Вот код который написан мной никуда не смотрел писал сам, переменные специально одной буквой обозначил, что бы ИИ не могли по названию угадать.
что делает этот код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:phpif ($C <= 2*$N + 3) $result = range(1, $C);Пример: при N=2, C=7 → 2⋅2+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).phpelseif ($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 страницы.phpelseif ($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).phpelseif ($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 на среднее.phpif (!$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-функция для построения пагинации (списка номеров страниц с «…»), обычно для вывода вида:1 … 4 5 6 … 20Разберём по шагам.Сигнатура функции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]Чтобы не показывать ..., если можно показать число.
Хуже всех справился чатжпт и допустил ошибки, дипсик получше но тоже с ошибками.
Алиса одна справилась без ошибок и все понятно объяснила.
Так что сначала сам попользуйся алисой, а потом мнение свое объективное высказывай, а так это не мнение а фантазии.
около тридцати лет назад, без модных нейросетей.
получается и боинг 747 братья Райт построили?
Не накодила, а нашла чужой код.
именно накодила, не плохо в нем разбирается и может прекрасно вносить правки которые ты просишь, это уже не просто найти чужой код
Вы утверждали, что сплошная халтура. Но нет, та же алиса не халтура и не плохо справляется со своими задачами, так что утверждение ваше сомнительно.
Что бы сравнить возможности Алисы и того же чатжпт в честных условиях, нужно обучить и запустить модели на сопоставимом оборудовании, думаю нашим разработчикам это не доступно. Но даже на том что есть, получилось вполне не плохо.
Вот Алиса тетрис накодила, вполне рабочий для первой версии уже не плохо, только скорость слишком высокая
import pygameimport random# Инициализация pygamepygame.init()# КонстантыSCREEN_WIDTH = 800SCREEN_HEIGHT = 600GRID_SIZE = 30GRID_WIDTH = 10GRID_HEIGHT = 20FPS = 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()
не согласен, спросил тоже самое у Алисы, она без проблем поняла вопрос, ответила правда что 3200 чайников, что соответствует 6,4 МВт и в 1000 раз меньше правильного ответа, но она поняла вопрос и расчет сделала, только не правильно перевела мега в кило
Учитывая, что Алиса задолго появилась до того же чатжпт, то яндекс тоже кое что может. И уж алису халтурой я точно не назвал бы.
Данный вопрос лучше задавать не в поиске, а в чате или напрямую колонке, в поиске написано, что результат на основе источников, если в источниках нет ответа, то результат будет нулевым, а вот чат с алисой или колонка могут сами генерировать результат.
ну это так кажется, это же не отзывы типа - окей, круто , классный продукт
Я беру английский текст и перевожу его на русский, перевод на пятерочку, я его отлично понимаю проблем нет, я не верю что русский язык такой особенный, что с ним ии справляется, а вот в обратную сторону ну никак, кроме того мне по работе пишут на английском в том числе и мы отлично друг друга понимаем.
Можно перевести какие то объемы и нанять носителя что бы прочитал и узнать его мнение и можно сделать окончательный вывод.
Бурж больше всего трафика италия, франция, испания, штаты, германия, турция но и по всем остальным тоже есть. сайт не коммерц. по индексу вроде все как и было.