30 языков, 248 байтов, 248/30 ^ 3 = 0,009185
#|#?15g,@ kkmNmSaIeoe99+{\#/-;n@0ea
#[9!@>.>.eeaww#-1@*"12" L
#{
###
#`{
25
print(4^2 +7)/2
"""
Jo is here.
$'main'MoO OOM
7
>Jo, 30
>X Jo
f::=~27
::=]##}#(prin 29)
print (7/6*24)###;alert 2#-[>+<-----]>-.|#(write(if(= 1/5 .2)26 3))"""
Редактировать: Beatnik удален, так как тестирование простоты в Beatnik может быть невозможно.
В коде есть вкладки (которые обрабатываются Stack Exchange) и завершающий перевод строки, поэтому вот xxd
:
00000000: 237c 233f 3135 672c 4020 2020 0920 2020 #|#?15g,@ .
00000010: 206b 6b6d 4e6d 5361 4965 6f65 3939 2b7b kkmNmSaIeoe99+{
00000020: 5c23 2f2d 3b6e 4030 6561 0a23 5b39 2140 \#/-;n@0ea.#[9!@
00000030: 3e2e 3e2e 6565 6177 7723 2d31 402a 2231 >.>.eeaww#-1@*"1
00000040: 3222 094c 0a23 7b20 090a 2323 230a 2360 2".L.#{ ..###.#`
00000050: 7b0a 3235 0a70 7269 6e74 2834 5e32 202b {.25.print(4^2 +
00000060: 3729 2f32 0a0a 0a22 2222 0a4a 6f20 6973 7)/2...""".Jo is
00000070: 2068 6572 652e 0a24 276d 6169 6e27 4d6f here..$'main'Mo
00000080: 4f20 4f4f 4d0a 2037 0a3e 4a6f 2c20 3330 O OOM. 7.>Jo, 30
00000090: 0a3e 5820 4a6f 0a66 3a3a 3d7e 3237 0a3a .>X Jo.f::=~27.:
000000a0: 3a3d 5d23 237d 2328 7072 696e 2032 3929 :=]##}#(prin 29)
000000b0: 0a70 7269 6e74 2028 372f 362a 3234 2923 .print (7/6*24)#
000000c0: 2323 3b61 6c65 7274 2032 232d 5b3e 2b3c ##;alert 2#-[>+<
000000d0: 2d2d 2d2d 2d5d 3e2d 2e7c 2328 7772 6974 -----]>-.|#(writ
000000e0: 6528 6966 283d 2031 2f35 202e 3229 3236 e(if(= 1/5 .2)26
000000f0: 2033 2929 2222 220a 3))""".
Кроме того, вы можете скопировать и вставить код из этого "Попробуйте онлайн!" ссылка .
Это очень плохо, но я хотел отыграть идею, что, когда у вас будет достаточно языков, количество байтов уже не будет иметь большого значения. Сказав, что есть некоторые языки, которые я мог бы легко добавить (например, Objeck), но в настоящее время они слишком длинные, чтобы быть полезными. Хотя у меня заканчиваются хорошие языки, поэтому я могу на этом остановиться.
Запустите все программы с помощью </dev/null 2>/dev/null
(т. Е. Пустой ввод, перегруженный STDERR).
Объяснение довольно длинное, поэтому вот резюме:
No. Lang. Non-esolang? 2D esolang? BF/BF-deriv?
--------------------------------------------------------------------------
1 COW ✓
2 CoffeeScript ✓
3 Common Lisp ✓
4 Retina
5 Befunge-93 ✓
6 Python 2 ✓
7 Rail ✓
8 ETA
9 Prelude
10 Gol><> ✓
11 evil
12 Foo ✓
13 Ruby ✓
14 ><> ✓
15 Brian & Chuck ✓
16 Whitespace
17 3var
18 Axo ✓
19 Labyrinth ✓
20 Starry
21 Fission ✓
22 Brainfuck ✓
23 Julia ✓
24 Lily ✓
25 GolfScript
26 Chicken Scheme ✓
27 Thue
28 Perl 6 ✓
29 Picolisp ✓
30 TRANSCRIPT
COW - это производная от Brainfuck с дополнительными командами, одной из которых является числовой вывод. Все недействительные игнорируются, поэтому исполняемая программа просто
MoO OOM
который увеличивает ячейку до 1, затем печатает ее как число.
2. CoffeeScript (включает переводчика)
CoffeeScript видит:
# comments
###
multiline comment
###;alert 2# comment
который просто предупреждает 2.
(Да, возможно, было бы лучше, если бы этот слот занял другой язык, но я слишком ленив, чтобы перетасовать его: P)
Common Lisp (clisp) видит:
#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""
1/5
является рациональным и не равен 0.2
, поэтому 3 печатается. Продолжение """
является синтаксической ошибкой.
Обратите внимание, что print
в Common Lisp , похоже, выводится предыдущий символ новой строки и завершающий пробел. Однако, к счастью, write
работает как в Common Lisp, так и в Chicken Scheme.
Введенные ограничения : каждая вторая строка, начиная с первой, должна быть действительным регулярным выражением.
Каждая пара строк образует этап замены, заменяя экземпляры совпадений регулярного выражения первой строки второй строкой. В середине у нас есть пара
«»»
которая заменяет исходную пустую строку на """
. Последняя пустая строка, не являющаяся частью какой-либо пары, рассматривается как стадия совпадения, считая количество совпадений регулярного выражения. Есть четыре экземпляра пустой строки """
, а именно 1"2"3"4
.
Befunge - это двумерный язык, и соответствующие инструкции
# # 15g,@
в первой строке и 5
в 25
строке. #
пропускает следующую инструкцию, 15g
получает символ в позиции (1, 5)
кода ( строка 5
в 25
строке), ,
выводит символ и @
останавливается.
Python видит:
# comments
25
print(4^2 +7)/2
"""
multiline string
"""
(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6
, который получает print
ред.
Rail - это двумерный язык, и его выполнение начинается с $
основной функции в юго-восточном направлении. Таким образом, соответствующая часть кода
$'main'
7
o
J
с o
и J
исходя из линий, используемых TRANSCRIPT. После вывода 7 поезд попадает в нераспознанную J
инструкцию, что приводит к сбою программы.
Введены ограничения: не следует вводить символы до программы ETA etaoinsh
.
ETA распознает только буквы etaoinsh
и их заглавные версии, то есть код начинается с
NSaIeoe
n...e
толкает основную цифру 7 в зависимости от того, что находится внутри разделителей, для которых SaI
есть 624
, или 312 в десятичном виде. o
затем выводит как char, по-видимому, по модулю 256, давая char 8
(кодовая точка 56). e
затем пытается разделить с пустым стеком, который терпит неудачу.
Введены ограничения: не более одного ()
в любом столбце, ()
совпадающих с чтением столбца за раз, без бесконечных циклов, вызванных ()
.
Это требует, чтобы интерпретатор Python был NUMERIC_OUTPUT = True
установлен.
Прелюдия - это язык, где каждая строка выполняется отдельно. Многие символы выполняются, но важной частью является
9!
во второй строке, которая выводит 9. ()
в Prelude обозначает цикл, но благодаря выдающемуся значению #
s (который вырывается из стека), вершины стеков всегда равны 0 к моменту попадания в цикл, поэтому ни один из них запускаются. Ограничения исходного кода Prelude относительно ()
введенных некоторых посторонних мест все же.
Эта часть (и> <>) работает как ответ Мартина . Соответствующий код
# ;n@0ea
Gol> <> - это двумерный язык, который #
отражает IP-адрес, что позволяет ему перемещаться влево. Он оборачивается, вставьте 10, 14 и 0 в стек. @
затем вращает стек, выводя 10 наверх, n
выводит его и ;
останавливает программу.
Эта часть также похожа на ответ Мартина.
зло игнорирует все, кроме строчных букв. Игнорируя еще несколько символов, соответствующая часть
aeeeaeeaww
где a
увеличивает значение переменной A
, e
это функция зла, которая тасует биты A
и w
выводит A
. Следовательно мы выводим 1
дважды, давая 11
.
Но как быть с остальными инструкциями, особенно w
с последней строкой? Давайте просто скажем, что иногда проще всего связываться с кодом и молиться, чтобы он все еще работал во всем, что здесь, так или иначе, делало ...
Foo выводит что-либо между двойными кавычками, поэтому соответствующая часть
"12"
на второй линии. Однако, поскольку нам понадобятся двойные кавычки позже, мы используем метод, аналогичный ответу Мартина, чтобы исключить ошибку Foo, а именно предыдущий #-1@
. Непонятно, почему это работает на языке, который использует пустой стек и деление на ноль ошибок, но я рад, что это так.
Как и Python, Ruby видит:
# comments
25
print(4^2 +7)/2
"""
multiline string
"""
Тем не менее, стоит отметить , что многострочная строка фактически три отдельных строк ( ""
, "..."
, ""
) объединяется вместе. (4^2+7) = xor(4,2)+7 = 6+7 = 13
Вывод строки печати , прежде чем вывести ошибку, пытаясь разделить nil
на 2.
Эта часть такая же, как и часть Gol> <>, за исключением @
того, что вместо этого 14 выводится наверх, которая выводится.
Brian & Chuck является производной BF с двумя лентами, где указатель инструкции одной ленты является указателем памяти другой ленты. В отсутствие ```
первых двух строк исходного кода используются для инициализации лент.
Соответствующие символы в первых двух строках:
?15
# >.>.
?
В ленте Брайана проходит контроль над Чаку в сота указал ( #
) отличен от нуля. Затем Чак выполняет >.>.
, выводя два знака после знака вопроса.
Используя STL
для пробела, табуляции и перевода строки соответственно, запуск программы:
SSSTSSSSL
TL
STL
L
L
Первая строка нажимает 16 ( +10000
основание 2), предыдущая TLST
печатает его как число. Следующие три перевода строки останавливают программу.
Обратите внимание, однако, что эта программа специфична для интерпретатора. Остальные синтаксические ошибки кода в большинстве интерпретаторов, поэтому требуется более мягкий интерпретатор, такой как приведенный выше.
Из первой строки выполняется множество инструкций, но соответствующие
kkmmao#/
Из-за ограничения ETA, мы используем k
для уменьшения переменной B, а не a
для ее увеличения. kk
уменьшает B до -2 и mm
возводит в квадрат B дважды до 16, что увеличивается до 17 с a
. Это затем выводится с o
.
#
затем используется для сброса B на 0 и /
вызывает ошибку программы через деление на 0.
Введены ограничения: нет никаких инструкций перед программой Axo, которые меняют направление IP
Еще раз, множество инструкций выполняется в первой строке, но соответствующие
# # 15 ,@ 9 9 + { \
Axo - это двумерный язык, такой как Befunge, и #
аналогично мост, пропускающий следующую инструкцию, но только если вершина стека равна нулю. 15,
нажмите на стек, но стек очищается @
. 99+
затем нажимает 18, {
выводит и \
останавливает.
Лабиринт - еще один двумерный язык, и выполненные инструкции
#|#
[9!@
#
толкает длину стека, которая в первый раз равна 0 |
является побитовым ИЛИ, ничего не изменяя, так как в этой точке стека просто есть 0, а вторая #
теперь выдвигает 1 из-за одиночного нуля. Мы поворачиваем направо из-за 1, 9
преобразовываем это 1 в 1*10+9 = 19
, !
печатаем его и @
останавливаем.
Эта программа опирается на тот факт, что [
в настоящее время не является признанной инструкцией, и, следовательно, рассматривается как стена.
Введенные ограничения: Все +
s должны иметь по крайней мере один предшествующий пробел
Если мы уберем нераспознанные символы, соответствующая часть кода
, +.. +
,
является входом, но так как мы по конвейеру /dev/null
оттуда нет ни одного, подталкивая 0 в стек. A +
с n >= 5
предыдущими пробелами нажимает n-5
, поэтому следующая инструкция нажимает 2. ..
затем выводит эти две цифры в обратном порядке.
Далее у нас есть +
с одним предшествующим пробелом, который дублирует. Тем не менее, стек пуст, поэтому мы делаем ошибку.
Единственная важная часть для деления
*"12"L
L
порождает атом, движущийся влево, "21"
печатает 21 и *
останавливается.
Введенные ограничения: нет .
до первого[
Это требует интерпретатора, который дает 0 на EOF и имеет 8-битные ячейки. Соответствующий код
,+-[>.>.-+.>,>]-[>+<-----]>-..
Начальный -
должны компенсировать +
, и первый [...]
не выполняются , так как клетка равно 0. Следующие -[>+<-----]>-
наборы ячейки полукокса кода 2
, и ..
выводит его в два раза.
Юля видит:
# comments
25
print(4^2 +7)/2
То, что напечатано 4^2+7 = pow(4,2)+7 = 16+7 = 23
, и программа выдает ошибку, пытаясь разделить nothing
на 2. Обратите внимание, что Джулия, похоже, не возражает против того факта, что остальная часть кода в любом случае вызовет синтаксическую ошибку.
Лили видит:
# comment
#[
multiline comment
]## comment
print (7/6*24)# comment
7/6*24 = 1*24 = 24
печатается.
GolfScript видит:
# comments
25
print(
GolfScript основан на стеке, поэтому 25 помещается в стек, затем извлекается и печатается с помощью print
. (
затем пытается уменьшить неявную пустую строку в стеке, что приводит к сбою и ошибкам программы.
Куриная схема имеет тот же #| ... |#
синтаксис многострочных комментариев, что и Common Lisp. Однако в
(write(if(= 1/5 .2)26 3))
1/5
с плавающей точкой , который является равным 0.2
, так что 26 выводится вместо этого.
Thue - это язык, основанный на перезаписи строк. Первая соответствующая часть
f::=~27
::=
который определяет замену, f -> 27
затем обозначает конец замен с ::=
. Lone f
in if
затем заменяется на 27
, который выводится.
В Perl 6 появился новый синтаксис комментариев, а именно #`(some bracket)
многострочный комментарий вплоть до соответствующей скобки. Таким образом, Perl 6 видит:
# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment
который печатает 7/6*24 = 28
.
Picolisp видит:
# comment
#{
multiline comment
}#(prin 29)
которая печатает 29. Затем строка затем вызывает синтаксическую ошибку.
TRANSCRIPT - это тематический esolang, смоделированный после текстовых приключений. Нераспознанные строки игнорируются (что позволяет добавить дополнительный текст истории / аромата среди фактических инструкций кода), поэтому соответствующие строки:
Jo is here.
>Jo, 30
>X Jo
В первой строке объявляется строковая переменная Jo
с использованием двухбуквенного имени, поскольку однобуквенные имена кажутся ошибочными. Вторая строка устанавливает эту строку в значение "30"
, которое выводится с помощью X
«исследовать» в третьей строке.
2.7.1
к2.7.n
. (На самом деле, sweerpotato делает именно это с основными версиями.)