50 оттенков Brainfuck
Brainfuck, хоть и весьма минималистичный (8 односимвольных команд), изначально задумывался как язык, для которого можно сделать минимальный компилятор (уже вторая версия была 240 байт, а на современном железе можно уложиться в 100).
Если же минимизировать количество команд — то легко уложиться в 2 простые команды (можете поиграться тут), или в одну посложнее.
А если минимизировать количество различных символов? Если отбросить эзотерику, одним из первых тут стал JSFuck, который выразил весь JS через 6 символов: +!()[]. А потом код-гольфисты продолжили:
- JS дожали до 5 символов —
[]+=`. Как и в JSFuck — приколы типизации. - Ожидаемо нашлись варианты для Python (
exc="%\n) и Perl (<>^es), но там скучныйexec/eval. - Внезапно для Haskell надо всего 4 символа —
()=;, разумеется, не обошлось без λ-исчисления, точнее, SKI. - Для Си есть решение за 5 символов —
+1;=$, в котором напрямую прописываются машинные коды. - В java унылые
02367?\abcdeitu, по сути просто обычный исходник, написанный через юникод-последовательности\u0a23, с гимнастикой для снижения количества нужных цифр. - В bash — аналогичный подход с
01456\$ ', zsh чуть интереснее с$#< (){}. - В PHP — 5 символов,
(^.9), подходы похожи с JS: делаем числа, из них буквы, потом имена функций и т.д..
Если вернуться к эзотерике, то стоит упомянуть Whitespace, где нужны только \t \n. Но победителем будет бесспорно Unary с прикольной идеей: берем код на Brainfuck, преобразуем его (биективно) в число, пишем соответствующее количество нулей (или любых других символов), и программа готова.