Вчора подивився ролик, який починається з quine — програми, яка виводить власний текст. І згадав давній осадочек.
Про quine я дізнався ще в школі і, як трушний програміст, кілька разів сідав таку написати. Не вийшло. Взагалі.
Писав я тоді на Basic (не Visual, а звичайному, з номерами рядків і goto), потім на Pascal. На умовному Python чи JavaScript, де є eval, це робиться доволі просто. А в олдскульних мовах — нєа, ніяк. Завжди питання, як вивести той самий
print() верхнього рівня.Тому перше, шо я подумав після ролика: а чи зможе АІшка? Виявилось, може. І на Pascal, і на Basic. Не з першого разу, кілька ітерацій, але в результаті — текст, який друкує сам себе. Сюди його не вставлятиму, самі можете перевірити 🙂
Так що для мене цей гештальт закритий. Не так, як хотілось би. Сумно, звісно, шо я до цього не додумався сам, зате бездушна залізяка робить те, шо колись було справжнім челенджем.
Але я почав про відос. Там через самокопіювальні програми і віруси сюжет якось дійшов до Game of Life. Завдяки йому я дізнався, шо Life виросла з питання фон Неймана ще з 40-х: який мінімальний набір інструкцій потрібен машині, щоб зібрати робочу копію самої себе.
Фон Нейман придумав під це клітинний автомат на 29 станів і десь 200 тисяч клітин. А Конвей у 1970 поцікавився, наскільки простіші можуть бути правила. Так і вийшла Game of Life.
До речі, реалізувати Game of Life теж така собі історія. Спочатку проста: правила на скінченному полі пишуться за вечір. Проте якщо додати, шо поле нескінченне, а зум можна крутити як завгодно, стає трохи веселіше.
А саме це і треба, щоб зібрати Game of Life всередині Game of Life. В ролику це з 5:57 до 6:23, без слів, просто зум. Подивіться, воно того варте.
Розкажіть в коментах, чи пробували ви таке написати. І лайк, якщо у вас теж не вийшло (так, лайків хочу більше) 🙂