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, преобразуем его (биективно) в число, пишем соответствующее количество нулей (или любых других символов), и программа готова.