nash300

Рейтинг
105
Регистрация
04.07.2016
seodozer #:
Да, будет страшно больно потерять эту нитку, но скорее канат огромного дохода.
Это шутка, сайт приносил хороший доход и ты решил экономить 1$ на хостинге?
Видимо только криптой, а вот менять крипту только на наличку, никаких p2p, но это если сумма нормальная, с копейками вряд ли кто то станет связываться.
TonyBlackberry #:
это называется досудебное урегулирование. и оно обязательно.  а вот если досудебно решить вопрос не получилось, то подается заявление в суд. причем на первой встрече судья предлагает еще раз решить всё досудебно.  а если просить только удалить фотографию, то потеряется смысл соблюдения авторских прав, так как в этом случае наказание - это лишь "требование удалить фотку с сайта". Пока эту фотку авторы найдут, она будет уже не нужна и её удалят. 
Так ваши мусорные фотки и так ни кому не нужны, были бы нужны вы бы на них деньги зарабатывали, а не на вымогательстве.
Genius Ideaing :

Привет!

почему компания Яндекс не создает сервис подобный CloudFlare с бесплатным тарифом...

вот потому и не хотят, какая им выгода, они и так знают что все будут пользоваться бесплатным тарифом
TonyBlackberry #:

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

А ещё очень удобно, что в яндексе показывается, кто то может взять с яндекса себе и на него в суд подать можно, а как иначе денег заработать, на ни кому за деньги не нужных фотографиях.

Artem189 #:

Если у вас есть фотография, на которые у вас есть "авторские права" - поставьте на нее вотемарку и повесьте на стену, а не сливайте ее в интернет в надежде, что она кому-то будет нужна.

не поможет, найдется кто то кто обрежет вотермарк и повесит себе на сайт и её растащут не зная ничего о наличии вотермарка. должно быть так, пишут претензию ты сам решаешь убрать или заплатить, отказался убирать или платить тогда уже суд, а не вымогательство как сейчас.
WIKIMEO #:

Степан, тебе никто ничего доказывать не собирается. 
Женись на Алисе (пользуй ее), и может, тогда она тебе скажет, что необязательно спамить кодами во всю длину на форумах. 



Ну и успокойся тогда Макар. Твоё ничем не обоснованное мнение не интересно.

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()
Всего: 486