Коммунистический массив

Я тут в мемах, которые кинули бывшие коллеги, увидел «коммунистическую сортировку» — она каждому присваивает среднее значение, и не смог пройти мимо. Написал «коммунистический массив»:

class CommunistArray extends \ArrayObject
{
    public function __construct(array $array = [])
    {
        parent::__construct(self::createCommunistArray($array));
    }

    public function offsetSet(mixed $key, mixed $value): void
    {
        parent::offsetSet($key, $value);
        $this->redistribute();
    }

    public function offsetUnset(mixed $key): void
    {
        $first = $this->getIterator()->key();

        if ($first !== null) {
            $this[$first] += $this[$key];
            parent::offsetUnset($key);
            $this->redistribute();
        }
    }

    private static function createCommunistArray(array $array): array
    {
        if ($array) {
            $avg = array_sum($array) / sizeof($array);
            return array_fill_keys(array_keys($array), $avg);
        }

        return [];
    }

    private function redistribute(): void
    {
        (void) $this->exchangeArray(self::createCommunistArray((array) $this));
    }
}

Он делает всех равными и перераспределяет блага автоматически:

$comrades = new CommunistArray([0b1, 0o0, 3e1, 0x45]);

print_r($comrades); # 25, 25, 25, 25

$comrades[2] = 4;
print_r($comrades); # 19.75, 19.75, 19.75, 19.75

unset($comrades[0]);
print_r($comrades); # 24.6875, 24.6875, 24.6875

8 комментариев

Семидесятипятилетнее вино

Папе в марте исполнилось 75 лет — юбилей и довольно значительная дата. Поэтому хотелось поздравить его как-то небанально. Они с мамой всегда в начале мая приезжают к нам в гости из Лениногорска, и мы с братишкой хотели по приезде чем-нибудь его удивить, но всю голову сломали.

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

Хорошо, что у нас есть интернет! Искомое нашлось на одном из сайтов, правда там ничего не было сказано про доставку, но после звонка и почти двухчасового обсуждения всех деталей по «Телеграму» вино было упаковано и в тот же день поехало в Казань.

Я сильно переживал как оно доедет — консультант в магазине сказал, что не все бутылки могут пережить транспортировку, поскольку в некоторых бывают трещины. Он выбрал без видимых трещин и тщательно упаковал, но я всё равно волновался.

Доехало всё шикарно, в целостности и сохранности. Сегодня подарок вручили, надеюсь и до Лениногорска он доберётся без эксцессов.

Открытая деревянная коробка с набором винных аксессуаров и бутылкой вина Barolo 1951 года на светлом деревянном полу.
Бутылка вина Mirafiore Barolo с этикеткой «Tenimenti di Barolo e Serralunga d’Alba», производитель Mirafiore Canelli (Италия), на деревянном фоне.
Бутылка шампанского с синей фольгой и этикеткой, на которой видна маркировка «МГ 030682», на фоне деревянной коробки с аксессуарами.

6 комментариев