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)
Звичайний Лісп (клісп) бачить:
#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""
1/5є раціональним і не дорівнює 0.2, тому 3 друкується. Продовження """є синтаксичною помилкою.
Зверніть увагу, що, printздається, виводиться попередній проміжок для нового рядка та пробіл у Common Lisp. Однак, на щастя, writeпрацює як у загальній схемі Lisp, так і в курці.
Введені обмеження : кожен другий рядок, починаючи з першого, повинен бути дійсним регулярним виразом.
Кожна пара рядків утворює етап заміни, замінюючи екземпляри збігів регексу першого рядка другим. Посередині у нас є пара
"" "
який замінює початковий порожній рядок на """. Остаточний порожній рядок, що не є частиною жодної пари, трактується як етап відповідності, підраховуючи кількість збігів регулярного вираження. Є чотири примірники порожнього рядка в """, а саме 1"2"3"4.
Befunge - це двомісна мова, і відповідні інструкції є
# # 15g,@
в першому рядку, і 5в 25рядку. #пропускає наступну інструкцію, 15gотримує знак char у положенні (1, 5)в коді ( рядок 5у 25рядку), ,виводить char та @зупиняється.
Пітон бачить:
# 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 до моменту потрапляння циклу, тому жоден з них ведуться. Виключити обмеження вихідного коду щодо ()введених деяких сторонніх пробілів.
Ця частина (і> <>) працює як відповідь Мартіна . Відповідний код є
# ;n@0ea
Gol> <> - це двомісна мова і #відображає IP, завдяки чому вона рухається вліво. Він обертається навколо, натискайте 10, 14 і 0 до стопки. @потім обертає стек, доводячи 10 до верху, nвиводить його і ;зупиняє програму.
Ця частина також схожа на відповідь Мартіна.
зло ігнорує все, крім малих літер. Ігноруючи ще декілька символів, відповідна частина є
aeeeaeeaww
де aприріст змінної A, eє функцією зла переплетення , яка перемішує біти Aі wвиходів A. Отже, ми виводимо 1двічі, даючи 11.
Але як бути з рештою інструкцій, а особливо wз останнього рядка? Скажімо, що іноді найпростіше просто повозитися з кодом і молитися, він все ще працює у всьому, що, ось, це якось зробило ...
Foo виводить що-небудь між подвійними лапками, тому відповідною частиною є
"12"
на другому рядку. Однак, оскільки пізніше нам потрібні подвійні лапки, ми використовуємо метод, подібний до відповіді Мартіна, щоб усунути помилку Фоо, а саме попередню #-1@. Незрозуміло, чому це працює мовою, якою солдати опиняються перед порожнім стеком та поділом нульовими помилками, але я радий, що це робиться.
Як і Python, Рубі бачить:
# 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 на стек. А +з n >= 5попередніми пробілами проштовхується n-5, тому наступна інструкція натискає 2. ..Потім виводить ці дві цифри у зворотному порядку.
Далі ми маємо +з єдиним попереднім пробілом, який дублюється. Однак стек порожній, тому ми помиляємось.
Єдина відповідна частина для Fission - це
*"12"L
Lпороджує атом, що рухається вліво, "21"друкує 21 і *зупиняється.
Введені обмеження: Ні .до першого[
Для цього потрібен перекладач, який дає 0 на EOF і має 8-бітні комірки. Відповідний код є
,+-[>.>.-+.>,>]-[>+<-----]>-..
Первісне значення -- це зміщення +, і перше [...]не виконується, оскільки комірка дорівнює 0. Далі -[>+<-----]>-встановлюється клітинка char-коду 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. (потім намагається декрементувати неявну порожню рядок у стеці, яка виходить з ладу та вимикає програму.
Схема курятини має той же #| ... |#синтаксис багаторядкових коментарів, що і звичайний Lisp. Однак в
(write(if(= 1/5 .2)26 3))
1/5з плаваючою точкою , який є рівним 0.2, так що 26 виводиться замість цього.
Чт - мова, заснована на переписуванні рядків. Перша відповідна частина -
f::=~27
::=
яка визначає заміну, f -> 27то позначає кінець підстановок на ::=. Самотній fв 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 - це тематичний езоланг, модельований після текстових пригод. Нерозпізнані рядки ігноруються (що дозволяє додавати додатковий текст розповіді / смаку серед фактичних інструкцій з кодом), тому відповідні рядки:
Jo is here.
>Jo, 30
>X Jo
Перший рядок оголошує змінну рядка Jo, використовуючи двобуквене ім’я, оскільки однобуквені імена здаються невдалими. Другий рядок встановлює цей рядок на "30", який виводиться X("вивчити") в третьому рядку.
2.7.1до2.7.n. (Насправді, солодкий картопля робить саме це з основними версіями.)