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
. (Насправді, солодкий картопля робить саме це з основними версіями.)