Універсальний цілісний принтер


93

Напишіть фрагмент коду, який можна виконати щонайменше у трьох різних мовах. Код повинен виводити ціле число 1у мові номер один, 2у мові номер два, 3у мові номер три тощо.

Правила:

  • Вихід повинен бути лише цілим числом, але останніми рядками є нормально.
  • Код не може приймати будь-які дані
  • Різні основні версії однієї мови вважаються унікальними. Отже, ваш код може бути виконаний у Python 2 та Python 3, проте Python 2.5 та Python 2.7 не вважаються унікальними.
  • Ви можете користуватися новою мовою, якщо і лише тоді, коли вона містить статтю esolang / wiki, доступний перекладач та документацію, і вона була використана щонайменше двома користувачами в PPCG до використання її в цьому виклику. Він також повинен дотримуватися цих 4 правил .

Оцінка вашої подачі - це кількість байтів у вашому коді, поділене на кількість мов, які вони можуть працювати в кубиках. Отже, 54-байтне рішення, яке виконується трьома мовами, матиме бал 2:

54 / 3^3 = 2  

Нижчий бал кращий.


Таблиця лідерів


6
@muddyfish Ви могли б принести додатковий номер версії в коді, який потім дасть вам безкоштовні рішення для всіх 2.7.1до 2.7.n. (Насправді, солодкий картопля робить саме це з основними версіями.)
Мартін Ендер

14
Я думаю, що, можливо, найкоротше мовне рішення тут не має сенсу ...: P
FryAmTheEggman

3
@Mego Ні я, тому я залишаю саркастичні коментарі щодо проблеми, щоб інші люди дізналися про неї: P
FryAmTheEggman

12
Я просто хотів привітати вас з тим, наскільки добре збалансований ваш бал. Коли виклики з кодом змішують дві величини в один бал, баланс майже завжди вимикається таким, що найкраща відповідь просто оптимізує один з балів, не враховуючи іншого. Кубічна вага кількості мов тут була ідеальною ... хоча завжди можна було додати іншу мову, це завжди було дуже приємним (але виконаним) завданням зробити це у кількості наявних байтів. :)
Мартін Ендер

20
У цьому виклику PPCG ми спільно будували поліглот. Відтепер у цій проблемі кращий результат, ніж провідні статті, подані на цей виклик, але не було б сенсу копіювати групові зусилля, які постійно вдосконалюються, тому я просто відкидаю згадки в коментарях тут.

Відповіді:


90

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

1. КОРА

COW - похідна Brainfuck з додатковими командами, одна з яких - числовий вихід. Що-небудь недійсне ігнорується, тому виконана програма є просто

MoO OOM

який збільшує клітинку до 1, потім друкує її як число.

2. CoffeeScript (включає перекладача)

CoffeeScript бачить:

# comments
###
multiline comment
###;alert 2# comment

що просто попереджає 2.

(Так, було б, мабуть, краще, якби інша мова взяла цей слот, але я занадто ледачий, щоб переробляти в цей момент: P)

3. Лист звичайний | ідеоне

Звичайний Лісп (клісп) бачить:

#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""

1/5є раціональним і не дорівнює 0.2, тому 3 друкується. Продовження """є синтаксичною помилкою.

Зверніть увагу, що, printздається, виводиться попередній проміжок для нового рядка та пробіл у Common Lisp. Однак, на щастя, writeпрацює як у загальній схемі Lisp, так і в курці.

4. Сітківка | Спробуйте в Інтернеті!

Введені обмеження : кожен другий рядок, починаючи з першого, повинен бути дійсним регулярним виразом.

Кожна пара рядків утворює етап заміни, замінюючи екземпляри збігів регексу першого рядка другим. Посередині у нас є пара

"" "

який замінює початковий порожній рядок на """. Остаточний порожній рядок, що не є частиною жодної пари, трактується як етап відповідності, підраховуючи кількість збігів регулярного вираження. Є чотири примірники порожнього рядка в """, а саме 1"2"3"4.

5. Befunge-93 | Перекладач

Befunge - це двомісна мова, і відповідні інструкції є

# # 15g,@

в першому рядку, і 5в 25рядку. #пропускає наступну інструкцію, 15gотримує знак char у положенні (1, 5)в коді ( рядок 5у 25рядку), ,виводить char та @зупиняється.

6. Пітон 2 | ідеоне

Пітон бачить:

# 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ред.

7. Залізничний | Спробуйте в Інтернеті!

Rail - це двомісна мова, і виконання розпочинається з $основної функції, що йде на південний схід. Таким чином, відповідна частина коду є

$'main'
 7
  o
   J

з oі Jвиходячи з ліній , які використовуються TRANSCRIPT. Після виходу 7 потяг потрапляє до невпізнаної Jінструкції, яка руйнує програму.

8. ЗНО | Спробуйте в Інтернеті!

Введені обмеження: Техніки перед програмою ETA не повинні бути включені etaoinsh.

ETA розпізнає лише літери etaoinshта їх великі версії, тобто код починається з

NSaIeoe

n...eвисуває базове 7 число, виходячи з того, що знаходиться в роздільниках, що для SaIє 624, або 312 у десятковій частині. oпотім виводиться як char, очевидно, після модуля 256, даючи char 8(код 56). eпотім намагається розділити порожній стек, який не вдається.

9. Прелюдія | Спробуйте в Інтернеті!

Введені обмеження: Не більше одного з ()будь-якого стовпця, який ()відповідає читанню стовпця за один раз, без нескінченних циклів, викликаних ().

Для цього потрібен інтерпретатор Python NUMERIC_OUTPUT = True.

Прелюдія - це мова, де кожен рядок виконується окремо. Багато символів виконується, але важливою частиною є

9!

у другому рядку, який виводить 9. ()у Prelude позначають цикл, але завдяки видатності #s (яка спливає зі стека) вершини стеків завжди дорівнює 0 до моменту потрапляння циклу, тому жоден з них ведуться. Виключити обмеження вихідного коду щодо ()введених деяких сторонніх пробілів.

10. Гол> <> | Перекладач

Ця частина (і> <>) працює як відповідь Мартіна . Відповідний код є

#                                      ;n@0ea

Gol> <> - це двомісна мова і #відображає IP, завдяки чому вона рухається вліво. Він обертається навколо, натискайте 10, 14 і 0 до стопки. @потім обертає стек, доводячи 10 до верху, nвиводить його і ;зупиняє програму.

11. злий | Спробуйте в Інтернеті!

Ця частина також схожа на відповідь Мартіна.

зло ігнорує все, крім малих літер. Ігноруючи ще декілька символів, відповідна частина є

aeeeaeeaww

де aприріст змінної A, eє функцією зла переплетення , яка перемішує біти Aі wвиходів A. Отже, ми виводимо 1двічі, даючи 11.

Але як бути з рештою інструкцій, а особливо wз останнього рядка? Скажімо, що іноді найпростіше просто повозитися з кодом і молитися, він все ще працює у всьому, що, ось, це якось зробило ...

12. Фу | Спробуйте в Інтернеті!

Foo виводить що-небудь між подвійними лапками, тому відповідною частиною є

"12"

на другому рядку. Однак, оскільки пізніше нам потрібні подвійні лапки, ми використовуємо метод, подібний до відповіді Мартіна, щоб усунути помилку Фоо, а саме попередню #-1@. Незрозуміло, чому це працює мовою, якою солдати опиняються перед порожнім стеком та поділом нульовими помилками, але я радий, що це робиться.

13. Рубін | ідеоне

Як і Python, Рубі бачить:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

Тим НЕ менше, варто відзначити , що багаторядкова рядок фактично три окремих рядків ( "", "...", "") об'єднується разом. Рядок друку виводиться (4^2+7) = xor(4,2)+7 = 6+7 = 13перед помилкою, намагаючись розділити nilна 2.

14. > <> | Спробуйте в Інтернеті!

Ця частина така ж, як і частина Gol> <>, за винятком @того, що замість них виводиться 14 на вершину, яка виводиться.

15. Брайан і Чак | Спробуйте в Інтернеті!

Brian & Chuck - похідна BF з двома стрічками, де вказівник однієї стрічки - покажчик пам'яті іншої стрічки. За відсутності ```, перші два рядки вихідного коду використовуються для ініціалізації стрічок.

Відповідними символами в перших двох рядках є:

   ?15
#     >.>.

У ?стрічці Брайана переходить контроль до Чака в клітинку, на яку вказують (( #)), це ненульовий характер. Потім Чак виконує >.>., виводячи два знаки після знака питання.

16. Пробіл | Перекладач

Використовуючи STLдля простору, вкладки та каналу рядків, початок програми:

SSSTSSSSL
TL
STL
L
L

Перший рядок підштовхує 16 ( +10000основа 2), попередній TLSTдрукує його як число. Наступні три новинки зупиняють програму.

Зауважте, що ця програма є специфічною для перекладача. Решта синтаксису коду помилки в більшості інтерпретаторів, тому потрібен більш м'який перекладач, як той, що пов'язаний вище.

17. 3вар | Спробуйте в Інтернеті!

З першого рядка виконується низка інструкцій, але відповідні

kkmmao#/

Через обмеження ETA ми використовуємо kдля зменшення змінної B, а не aдля збільшення її. kkзменшення B до -2 та mmквадрати B удвічі до 16, що збільшується до 17 с a. Потім це виводиться за допомогою o.

#потім використовується для скидання B до 0 і /призводить до помилки програми через поділ на 0.

18. Аксо | Спробуйте в Інтернеті!

Введені обмеження: Ніяких інструкцій перед програмою Axo, які змінюють напрямок IP

Ще раз, в першому рядку виконується низка інструкцій, але відповідні

# # 15 ,@            9 9  + {   \

Axo є двовимірною мовою, як Befunge, і #подібним чином є мостом, який пропускає наступну інструкцію, але тільки якщо верхня частина стека дорівнює нулю. 15,натисніть на стек, але стек спорожняється @. 99+потім натискає 18, {виводить і \зупиняє.

19. Лабіринт | Спробуйте в Інтернеті!

Лабіринт - ще одна двовимірна мова, і виконуються інструкції

#|#
 [9!@

#висуває довжину стека, яка дорівнює 0 вперше. |є побітним АБО, нічого не змінюючи, оскільки стек просто має 0 в цій точці, а другий #тепер висуває 1 через нульовий нуль. Ми повертаємо направо через 1, 9перетворюємо цю на 1 1*10+9 = 19, !друкуємо її та @зупиняємо.

Ця програма спирається на той факт, що [наразі не є визнаною інструкцією, і тому вона трактується як стіна.

20. Зоряний | Спробуйте в Інтернеті!

Введені обмеження: Усі +s повинні мати принаймні одне попереднє пробіл

Якщо ми знімемо невпізнані символи, відповідна частина коду є

,       +.. +

,є введенням, але оскільки ми труби з /dev/nullнього немає, натискаємо 0 на стек. А +з n >= 5попередніми пробілами проштовхується n-5, тому наступна інструкція натискає 2. ..Потім виводить ці дві цифри у зворотному порядку.

Далі ми маємо +з єдиним попереднім пробілом, який дублюється. Однак стек порожній, тому ми помиляємось.

21. Розділення | Спробуйте в Інтернеті!

Єдина відповідна частина для Fission - це

*"12"L

Lпороджує атом, що рухається вліво, "21"друкує 21 і *зупиняється.

22. Brainfuck | Спробуйте в Інтернеті!

Введені обмеження: Ні .до першого[

Для цього потрібен перекладач, який дає 0 на EOF і має 8-бітні комірки. Відповідний код є

,+-[>.>.-+.>,>]-[>+<-----]>-..

Первісне значення -- це зміщення +, і перше [...]не виконується, оскільки комірка дорівнює 0. Далі -[>+<-----]>-встановлюється клітинка char-коду 2та ..виводить її двічі.

23. Юлія | Спробуйте в Інтернеті!

Юлія бачить:

# comments
25
print(4^2 +7)/2

Що надруковано 4^2+7 = pow(4,2)+7 = 16+7 = 23, так і програма помиляється, намагаючись розділити їх nothingна 2. Зверніть увагу, що Джулія, здається, не проти того, що решта коду все-таки спричинить синтаксичну помилку.

24. Лілія | Перекладач

Лілі бачить:

# comment
#[
multiline comment
]## comment
print (7/6*24)# comment

7/6*24 = 1*24 = 24 друкується.

25. GolfScript | Спробуйте в Інтернеті!

GolfScript бачить:

# comments
25
print(

GolfScript заснований на стеці, тому 25 висуваються на стек, потім виводяться і друкуються разом із print. (потім намагається декрементувати неявну порожню рядок у стеці, яка виходить з ладу та вимикає програму.

26. Куряча схема | ідеоне

Схема курятини має той же #| ... |#синтаксис багаторядкових коментарів, що і звичайний Lisp. Однак в

(write(if(= 1/5 .2)26 3))

1/5з плаваючою точкою , який є рівним 0.2, так що 26 виводиться замість цього.

27. Чт | Спробуйте в Інтернеті!

Чт - мова, заснована на переписуванні рядків. Перша відповідна частина -

f::=~27
::=

яка визначає заміну, f -> 27то позначає кінець підстановок на ::=. Самотній fв ifпотім замінений 27, який виводиться.

28. Перл 6 | ідеоне

Perl 6 має новий синтаксис коментарів, а саме #`(some bracket)це багаторядковий коментар аж до відповідного дужка. Таким чином, Perl 6 бачить:

# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment

який друкує 7/6*24 = 28.

29. Піколісп | ідеоне

Picolisp бачить:

# comment
#{
multiline comment
}#(prin 29)

який друкує 29. Після цього рядок викликає синтаксичну помилку.

30. ТРАНСКРИПТ | Спробуйте в Інтернеті!

TRANSCRIPT - це тематичний езоланг, модельований після текстових пригод. Нерозпізнані рядки ігноруються (що дозволяє додавати додатковий текст розповіді / смаку серед фактичних інструкцій з кодом), тому відповідні рядки:

Jo is here.
>Jo, 30
>X Jo

Перший рядок оголошує змінну рядка Jo, використовуючи двобуквене ім’я, оскільки однобуквені імена здаються невдалими. Другий рядок встановлює цей рядок на "30", який виводиться X("вивчити") в третьому рядку.


12
Даааааааааанг ...
AdmBorkBork

9
Я підозрюю, що це може бути найнижчий ненульовий бал з будь-якого питання тут.
Морган Трапп

Це ... неймовірно. Я в захваті
Нік Хартлі

2
* позитивні, є кілька негативних балів за короткі відповіді з бонусами.
CalculatorFeline

Порада з майбутнього: ваші вкладки не будуть заплутані, якщо ви оточуєте код у preтегах замість того, щоб використовувати блок-код стилю Markdown.
Якоб

148

15 мов, 68 66 65 байт / 15 ^ 3 = 0,019 ...

Retina , Зоряна , Прелюдія , ETA , Axo , Labyrinth , Hexagony , Foo , Brian & Chuck , Gol> <> , зло , Прогалини , Поділ , > <> і GolfScript .

Після масового переписування мені вдалося вмістити ще чотири мови. Код містить кілька вкладок для Whitespace. Оскільки Stack Exchange перетворює їх у пробіли, я представляв їх \tнижче:

#I5aeeNTH{\?      \t\t + +3;n@"8"ea9
15}7'`--~!@<"31"LSOe.\t
 \teaww`

Я думаю, що я додав мови (хоча додавання лише одного могло б зберегти кілька байт у тому, що я вже маю). Мені цікаво, чи це зіграно головою ... 65 байт на 15 мов - це досить стрибок з 32 байтів для 11 мов, і в мене зараз є принаймні один непотрібний символ, щоб змусити Фоо працювати ..

Відбитки сітківки 1

Спробуйте в Інтернеті.

На щастя, перший рядок - це дійсний регулярний вираз. Однак це регулярно вираження не відповідає порожньому входу, тому перший етап (складається з перших двох рядків) нічого не робить.

Третій рядок є самостійним, тому він трактується як етап відповідності, який за замовчуванням підраховує кількість збігів. Однак, `це роздільник, який повідомляє Retina, що частина перед ним - це конфігураційний рядок (він не знає жодного з наведених там параметрів), а частина після нього - регулярний вираз. Таким чином, регулярний вислів порожній, і Retina знаходить рівно одну відповідність.

Зоряні принти 2

Спробуйте в Інтернеті.

Зоряні ігнорує все , крім пробілів і +*,'`.. Кожна команда є одним із цих символів у поєднанні з пробілами з останнього з цих символів. Тож давайте видалимо весь сторонній код:

       + +'`. `

Сім пробілів, за якими +рухаються натискання a 2. Один простір, за яким його +дублюють. '- умовний стрибок. Він вискакує верхню частину стека, яка є truthy (позитивною), тому вона переходить до відповідної мітки (де мітки позначені `і "відповідне" означає "з однаковою кількістю провідних пробілів"), що є першим `. .без пробілів перед цим друкується верхівка стека як число.

Прелюдія друкує 3

Спробуйте в Інтернеті.

Це передбачає інтерпретатор Python, який використовує числовий вихід. Давайте видалимо всі непридатні:

# 5        ?         + +3    8   9
15 7  -- !   31

Перший голос робить купу матеріалів, але нічого з цього не має значення, оскільки немає жодного результату !для друку. Другий голос натискає а 1, потім а 5, потім а 7. Ми беремо різницю останніх двох, щоб отримати -2, а потім віднімаємо цю від 1отриманої 3. !друкує його. Третій голос має лише відсутність.

ETA відбитки 4

Спробуйте в Інтернеті.

ETA ігнорує все, крім символів ETAOINSH(у будь-якому випадку). Отже, код, який бачить ETA:

IaeeNTHneaSOeea

Iнамагається прочитати вхід, але не може, тому він натискає -1. aвисуває номер поточного рядка плюс 1, який є 2. eє divmod , який замінює тих , хто 0і 1(або -1я на самому ділі не знаю, але це не має значення). Наступний eзамінює обох на 0.

Тепер цікава частина. NTHneє базовим числом 7 буквально. Nі eє лише роздільниками, і три цифри є THN. Тобто 54(де Tє цифра 1, Hє 0і nє 5). ще раз aпідштовхує 2. Sвіднімає його, в результаті чого 52і Oвиводить його як символ ( 4). Тепер eспробує дівмод знову, але стек містить два нулі, тому програма закінчується помилкою (але при цьому не забруднює STDOUT).

Відбитки Axo 5

Спробуйте в Інтернеті.

Ця мова в значній мірі відповідала за перезапис. Я не міг мати }перший рядок, тому що він блокує введення в Axo (див. Історію редагування про те, про що я говорю). Для Axo актуальна лише ця частина коду:

#I5aeeNTH{\

На щастя, Axo також має неявні 0s у нижній частині стека, оскільки #з'являється вершина стека (щоб перевірити, чи слід пропустити наступну інструкцію чи ні). Усі листи букв не мають. Потім 5натискає a 5, {роздруковує його, \припиняє програму. Досить просто, справді.

Лабіринтні відбитки 6

Спробуйте в Інтернеті.

Я трохи обрізую код, тому що правої половини ніколи не досягається, і я також використовую tзамість \t, щоб стовпці вирівнювалися правильно:

#I5aeeNTH{\
15}7'`--~!@
 teaww`

Тепер, коли літери, пробіли та вкладки є стінами в Лабіринті, тому доступний код насправді виглядає так:

# 5      {\
15}7'`--~!@
      `

Покажчик інструкцій автоматично піде за цим шляхом. #висуває глибину основного стека ( 0) і 15перетворює його на a 15. }переміщує його на допоміжний стек, і ми вже не будемо його використовувати. Це зручно робити вершину стека нульовою, щоб IP не повертав ліворуч на 5. 7перетворює нуль у a 7, 'є неоперативним. `Унарна заперечення, так що ми отримуємо -7. Тепер -віднімаємо -7від неявного 0під його складанням 7. Цього разу ІР повертається праворуч до `, що є неоднорідним запереченням, тому ми 7знову отримуємо . ІР потрапляє в тупик і обертається. -Робить те ж саме , як і раніше, так що ми отримуємо7ще раз. Оскільки верхня частина стека зараз позитивна, IP повертає праворуч. Є ще один, -який дає -7знову. Тоді ~побітно НЕ, що дає 6і !друкує його. Це лише підходящий момент для цього, тому що тепер стек знову порожній, щоб IP не повернув ліворуч, {а натомість продовжував прямо вперед, до @чого закінчується програма.

Шестикутні відбитки 7

Спробуйте в Інтернеті.

Розгорнутий код виглядає приблизно так:

     # I 5 a e
    e N T H { \
   ? + + 3 ; n @
  " 8 " e a 9 1 5
 } 7 ' - - ~ ! @ <
  " 3 1 " L S O e
   . e a w w . .
    . . . . . .
     . . . . .

Як правило, це була б жахлива програма шестикутників, але персонажів, які насправді використовуються, не надто багато. Насправді вони майже такі ж, як ті, які використовує Лабіринт, і я вважаю, що я розмежую це 5і 6є досить приємним. :)

Верхній ряд в основному можна ігнорувати. #як правило, переходять на інший IP, але поточний край пам'яті є 0, так що це не так. Листи просто задають фіксовану величину пам'яті, але ми не збираємось її використовувати. Після закінчення першого ряду контрольний потік продовжується в середньому ряду (починаючи з }, рухаючись праворуч). В }переходить до іншого краю пам'яті. 7встановлює цей край на 7. 'повертається туди, звідки ми прийшли. -віднімаємо край, який ми тільки що встановили, 7від невикористаного краю пам'яті ( 0), тому ми отримуємо -7. Наступний -робить те ж саме знову, так що це не-оп. Поки що досить схожий на Лабіринт (крім макета пам’яті). Але тепер~не є побитним НЕ, а єдинарним запереченням у Гексагонії. Тож це дає 7замість 6. !@, як у Лабіринті друкує значення та припиняє програму.

Відбитки Foo 8

Спробуйте в Інтернеті.

Як ми всі знаємо, оскільки вікторина мови програмування друкує речі в Foo досить тривіально, навіть якщо більша частина коду є випадковою сукупністю символів. Жоден із символів не впливає на вихід, крім того, "8"який друкує 8. Ну, є "31"пізніше, але Foo закінчується з помилкою в кінці першого рядка. Я не точно впевнений, чому це відбувається, але для цього потрібно 3(або будь-яка інша цифра) у верхньому рядку, яка ніде більше не використовується.

Принти Brian & Chuck 9

Спробуйте в Інтернеті.

Зробимо це ще раз, коли ми видалимо третій рядок (він ніколи не розбирався) і замінимо всі нерелевантні символи (тобто відсутність вікон або клітинок, які не читаються) пробілами:

         { ?         + +         9
  }   --   <        .

Як нагадування, кожен рядок схожий на Brainfuck, стрічка якого є вихідним кодом іншої програми. Контрольний потік починається з першого рядка (званий Брайан).

Ці {руху стрічки голови весь шлях вліво (де вона вже є), а ?руки контроль над потоком Чаку (друга лінія). Там }пересуваємо головку стрічки праворуч, поки вона не знайде нульову комірку. Це не відбувається до кінця програми, тому головка стрічки закінчується однією коміркою після 9. -декременти цієї клітини, але це не має значення. <переміщує головку стрічки на 9та .друкує її. Чак закінчується програмою і припиняється.

Гол> <> відбитки 10

Тестували тут.

#є дзеркалом, тому IP-адреса негайно пропускається до кінця першого рядка (і йде вліво). 9Можна знехтувати. aштовхає 10, eштовхає 14, "8"висуває код символу 8, @обертає три верхні елементи стека (підтягуючи вгору 10), такі, що nдрукують 10та ;завершують програму.

Завдяки Sp3000 запропонував використовувати @замість !(що зберегло байт).

злі відбитки 11

Завдяки Sp3000 за те, що він надсилав мені кілька команд-списків, змушених генерувати однозначні номери.

Спробуйте в Інтернеті.

зло ігнорує все, крім малих літер, так що код виглядає так:

aeeneaeeaww

Також nвпливає на стан, який нас не хвилює, тому давайте ігнорувати це. Тепер aзбільшується регістр (який починається з 0), і eце магічна операція "плетіння" зла, яка перетворює біти певним чином. aeeeaeeaтрапляється отримати значення, 49яке є символьним кодом 1. wwдрукує його двічі.

Відбитки білого простору 12

Спробуйте в Інтернеті.

Гаразд, ми знаємо, що Whitespace зчитує лише пробіли, вкладки та стрічкові канали, тому нехай записує код, як це бачить Whitespace STL:

SSSSSSTTSSLTLST

Це дві команди:

SSSSSSTTSSL
TLST

Перший штовхає число 12. Зокрема, SSпочинається буквальне число. Наступний S- бітовий знак (позитивний). Тоді все до значення L- це двійкове представлення числа. Є багато тонн нульових нулів, які нам потрібні для Starry, але вони не впливають на кількість. Тоді TTSSs знаходиться 12у двійковій формі. Веселий факт: якби я додавав 16-ту мову, я міг би зберегти тут байт, тому що Зіррі міг би використовувати чотири Sв бінарній репресії 16. Я сумніваюся, що все-таки ...

TLSTПросто друкує вершину стека як число. ( TLпозначає команду як команду вводу-виводу та STдрукує номери.)

Розбиття відбитків 13

Спробуйте в Інтернеті.

Fission бачить лише цю частину коду:

           <"31"L

Lзапускає контрольний потік з лівим атомом. "перемикає режим друку, щоб 31просто друкувати 13. Тоді атом потрапляє в клин <, який припиняє програму.

> <> друкує 14

Тестували тут.

Розрізняти> <> і Gol> <> не так просто, як я думав, тому що Gol> <> майже завжди робить те ж саме, що і> <> для команд, які існують в обох, і команд, які існують лише в Gol> < > причина> <> до збоїв. Однак @обертається в інший бік в напрямку <>, таким чином, що він натискає вниз 7замість того, щоб підтягувати 10, а потім 14надруковується замість 10.

Відбитки GolfScript 15

Спробуйте в Інтернеті.

Це найпростіше: #коментує перший рядок. Потім 15натискає на себе і }є "супер коментарем", який ігнорує всю решту програми. Таким чином 15, друкується в кінці програми.


34
Це справді вражає!
sweepotato

1
@YassinHajaj Дякую, виправлено.
Мартін Ендер

2
Niiice. Чудова робота на 15 мовах!
ev3commander

1
@SnoringFrog Добре, що там.
Мартін Ендер

1
@Eumel Спасибі, але щедрості розроблені спеціально для "звичайних" мов, перелічених у її описі, тому щедрості повинні відповісти на таку відповідь (як дуже приємне рішення Sp3000). Я думаю, що у мене все одно вистачає реп. ;)
Мартін Ендер

42

Python 1.x, 2.x і 3.x, 32 байти / 3 ^ 3 = 1.1851 ...

import sys
print(sys.version[0])

Друкує перший номер версії, який знаходиться 1в Python 1.x, 2у Python 2.x та 3в Python 3.x.

До моменту, коли ми отримаємо Python 9.x, моя оцінка буде славною 0.04389!

: ~)!


10
З чату: Так, це і дешево, і дійсно =) Це є причиною того, що лише основні версії вважалися досить унікальними. Я не знаю, скільки існує версій Python, але ви, мабуть, могли отримати свою оцінку досить низько, використовуючи щось подібне ... Це одне з небагатьох рішень, де я насправді розумію, що відбувається, тому +1 від мене; - )
Стюі Гріффін

6
У python 10.x (коли він існує) він би не друкував, 1тому що це перший символ рядка "10. що б"?
ev3commander

1
@ ev3commander Однак, ця публікація не специфікована для отримання правильного результату в python10.
Тизоїд

Виправлено! Працює над захищеною до майбутнього версією, але Python 1.x не такий зручний для користувачів, як інші: ~)!
sweepotato

1
Все, що мені потрібно зробити, це створити мову, яка має три основні версії. У цих трьох основних версіях при запуску порожнього файлу повертається основний номер версії. Результат був би 0/3 ^ 3 = 0 Ідеально.
Бреден Стеффаняк

32

3 мови, 2 байти / 27 = 0,074

1P

Добре, щонайменше б'є половину подань: P

1. GolfScript

GolfScript ігнорує, видаючи Pлише 1. Спробуйте це в Інтернеті .

2. Абзац

P2-к-влади-оф, тому 1P = 2^1 = 2. Спробуйте в Інтернеті .

3. Серйозно

Pдає n-й простий, нульовий індексований. Ми отримуємо 3, оскільки це другий прем'єр. Спробуйте в Інтернеті .


Примітки

Моєю первинною метою було знайти правильну відповідь в 1 байті. Першою моєю спробу було те, \x12що працює в Bubblegum та gs2 , але для виклику потрібні як мінімум три мови. \x13буде працювати, якщо є мова, на якій виводиться 1.

Отримавши відповідь на 1 байт, я перейшов до двох байтів. 3uце близький виклик, виводиться 1 в Japt , 3 в GolfScript і 4 в серйозно, але важко було знайти мову, яка випустила 2 для заповнення прогалини.

Все це зайняло мені занадто довго: /


20

6 мов - 44 байти / 6 ^ 3 = 0,204 ...

Дякуємо SnoringFrog за економію 10 байт!

Працює в:

  • Befunge
  • Піт
  • Брейнфук
  • Шестикутник
  • Пробіл
  • AniRad v0.2

2# "1",@"-[----->+<]>.*@@@!4<SSTST
T
ST
 >6=

Примітка. Перш ніж спробувати його в Інтернеті, переконайтеся, що замініть S пробілами, а T - вкладками, або перетворіть наступний шістнадцятковий на ASCII

32 23 20 22 31 22 2c 40 22 2d 5b 2d 2d 2d 2d 2d 3e 2b 3c 5d 3e 2e 2a 40 40 40 21 34 3c 20 20 09 20 09 0d 0a 09 0d 0a 20 09 0d 0a 20 3e 36 3d

Я спробую використовувати більше мов програмування :)

Befunge (відбитки 1):

Спробуйте в Інтернеті

2# "1",@"-[----->+<]>.*@@@!4<
2                             # This puts 2 onto the stack
 #                            # Skips the next op (the space)
   "1"                        # Sets the ASCII value of 1 onto the stack
      ,                       # Pop the last item (1)
       @                      # Terminate program

Pyth (відбитки 2):

Спробуйте в Інтернеті

2# "1",@"-[----->+<]>.*@@@!4<
2                             # Prints 2
 #                            # Infinite while loop until an error occurs
   "1"                        # String
      ,@                      # This gives the error and terminates the program

Brainfuck (відбитки 3):

Спробуйте в Інтернеті

2# "1",@"-[----->+<]>.*@@@!4<
2# "1",@"                     # Since these are not brainfuck ops, these will be ignored
         -[----->+<]>         # Puts "3" on the stack
                     .        # Prints the last item (3)     

Шестикутник (відбитки 4):

Спробуйте в Інтернеті

2# "1",@"-[----->+<]>.*@@@!4<   

Більш прочитана версія:

   2 # " 1       # The steps:
  " , @ " -      # 1 (2) - Hexagony starts at the top-left of the hexagon
 [ - - - - -     #       - This immediately puts 2 onto the stack
> + < ] > . *    # 2 (#) - Since the stack is 2, this makes the 2nd pointer the 
 @ @ @ ! 4 <     #       - new current pointer
  > 6 = . .      # 3 (*) - The position of the 2nd pointer is in the left-most
   . . . .       #       - position. This sets the stack to the product
                         - of the two neighbours which is zero
                 # 4 (<) - Changes the pointer direction to west
                 # 5 (4) - Sets the stack to 4
                 # 6 (!) - Outputs the decimal 4
                 # 7 (@) - Terminates the program

Пробіли (відбитки 5):

Спробуйте в Інтернеті

Оскільки інші символи ігноруються, окрім пробілів та вкладок, нам залишається таке:

SSTST                 # This pushes 5 onto the stack
T                     # 
ST                    # This prints the decimal

AniRad версія 0.2 (відбитки 6):

Це якось працює для версії 0.2, але дає помилку для версії 0.4. У мене немає поняття, чому. Ви можете знайти версію 0.2 тут . Щоб виконати це, ви можете скопіювати та вставити код інтерпретатора для repl.it та запустити його. Після цього потрібно лише вставити програму на STDIN і запустити її.

2# "1",@"-[----->+<]>.*@@@!4<      # (#)  Starts at the hashtag (starting point)
                                   #      Direction is down
                                   # (>)  When the pointer gets to the '>', it changes
 >6=                               #      its direction
                                   # (6) Puts 6 onto the stack 
                                   # (=) Pushes the result and terminates

1
Я думаю, що більше мов - це, безумовно, кубічний знаменник справді щедрий, так що не можна надто важко перемогти мою оцінку, коли у вас є 5 або 6 мов.
Мартін Ендер

@ MartinBüttner, Так, хоча я не можу побачити, як додати нову мову
Adnan

2
@Martin так, це щедро. Суть кубічного знаменника полягала в тому, щоб сильно заохочувати більше мов. Я думаю, що 6 мов у 50 байтах повинні бути такими ж, як 5 мов у 30 байтах. :-), безумовно, буде складніше, чим більше мов ви використовуєте.
Стюі Гріффін

Ваш код Whitespace може бути трохи зменшений (і я не думаю, що це вплине на будь-які інші ваші мови. (Використовуючи L для linefeed) SSSSSSSSSSTTSTSTLTLSS, ви можете зробити SSSTSTLTLSTце замість того, який ви маєте зараз . Це натискає буквальну 5 на стек, потім друкується як ціле число.
SnoringFrog

@SnoringFrog Дякую! Я відредагував це
Аднан

14

6 7 мов, 32 37 байт, оцінка 0,148 ... 37/7 3 ≈ 0,107872 ...

#7+!"@\"6.@;n5
print(4--int(-3/2)#"
)

Brainfuck-ng

+приріст поточної комірки, !друкується як ціле число, @виходить. #і "є НОП.

Пітон 2

Перший рядок - це коментар. Використовуючи ціле ділення, обчислює 4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2та друкує результат.

Пітон 3

Те саме, що і попереднє, але з поплавковим поділом. 4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3.

Луа

--починає коментар, а #на першому рядку - коментар, так в основному print(4).

> <>

#відображає IP, 5натискає 5, nдрукує число і ;виходить з нього.

Befunge

#пропускає через +, !логічно заперечує верхню частину стека, "@\"штовхає рядок @\, 6натискає 6, .друкує число і @виходить з ладу.

Піт

#запускає нескінченний цикл, відхиляючи будь-які помилки. 7друкує 7, далі випливає, +!"string")що в основному спричиняє помилку за відсутність двох операндів для +завершення програми.


13

JavaC ++ C, 363/27 = 13,4….

Java друкує 1, C ++ друкує 2, C друкує 3. Не порушуючи тут ніяких записів (тому що Java), але мені дуже подобається розумний, образливий спосіб створення поліглоту на цих мовах, які я виявив.

//\u000a/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*\u002a/
import static java.lang.System.out;
public class P{//*/
/*\u002a/public static void//*/
main(/*\u002a/String[] args//*/
){//\u000a/*
out.print=p;
//\u002a/
out.print(1);}
/*\u002a/}//*/

Це безлад. Ось розбивка того, як це працює. Літералі Unicode ( \u000aінакше відомі як передача ліній та \u002a, інакше відома як *) компілятором Java розширюються на їхні фактичні символи. Отже, ось що бачить компілятор Java:

//
/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/**/
import static java.lang.System.out;
public class P{//*/
/**/public static void//*/
main(/**/String[] args//*/
){//
/*
out.print=p;
//*/
out.print(1);}
/**/}//*/

Усі ці речі на початку ігноруються, оскільки всі вони загорнуті в багаторядковий коментар ( /* ... */). Пізніше ми бачимо, що змішування однорядних та багаторядкових коментарів дозволяє нам контролювати, які саме частини коментуються кожною мовою. В основному методі ми починаємо багаторядковий коментар, а потім маємо //*/. Зазвичай це буде однорядковий коментар, але оскільки ми знаходимося в багаторядковому коментарі, він //нічого не робить, що дозволяє */закрити його.

Це еквівалентний код Java, з коментарями видалено:

import static java.lang.System.out;
public class P{
public static void
main(String[] args
){
out.print(1);}
}

Ось що бачить компілятор C / C ++ (я видалив літерали Unicode, оскільки вони не розширюються компілятором, і тому нічого не роблять):

///*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*/
import static java.lang.System.out;
public class P{//*/
/*/public static void//*/
main(/*/String[] args//*/
){//\/*
out.print=p;
///
out.print(1);}
/*/}//*/

Тут однорядкові коментарі переосмислюють багаторядкові роздільники коментарів на початку, тому всі #defines та #includeget попередньо обробляються. Далі, багаторядкові коментарі використовуються для коментування коду шафи для Java. Це еквівалентний код, із коментарями видалено:

#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
main(
){
out.print=p;
out.print(1);}

Стандартний трюк на поліглот C / C ++ (the #ifdef __cplusplus) використовується для визначення лексеми oяк "2"або "3", залежно від того, чи це компілятор C ++ або компілятор C, який компілює код. Далі ми визначаємо функцію, pяка бере єдиний (ігнорований) intаргумент і викликає printf, використовуючи наш щойно визначений oмаркер. Як завжди, повернене значення залишається поза, оскільки ми не перебуваємо в суворому режимі. Далі ми визначаємо a structз одним членом, покажчик функції, підпис якого збігається pз, і побудуємо єдиний екземпляр з ім'ям out. У головному методі (ми залишаємо, intяк завжди) адреса pприсвоюється out.print(так викликає out.printдзвінки p), і вона називається.

Якщо C ++ не був включений до мов, ми можемо скинути весь код препроцесора та визначити pяк int p(int a){puts("2");}. На жаль, для C ++ потрібен #includeI / O. Якщо C не включений, ми можемо скинути визначення макросу pі #ifdefпрепроцесора, і безпосередньо визначити функцію члена, structзамість того, щоб потрібен вказівник функції. На жаль, C не підтримує функції членів.


12

4 мови, 28 байт / 64 = 0,4375

print((0 and 3^1or 1/2>0)+1)

1. Пітон 2

0є хибним і /є цілим поділом, так

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0 > 0) + 1 = False + 1 = 1

2. Perl (також Python 3)

0є фальшивим і /є поплавковим поділом, так

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0.5 > 0) + 1 = 1 + 1 = 2

3. Рубін

0є truthy та ^бітовим xor, так

(0 and 3^1 or 1/2 > 0) + 1 = xor(3,1) + 1 = 2 + 1 = 3

4. Луа

0є істиною і ^є експоненцією, так

(0 and 3^1 or 1/2 > 0) + 1 = pow(3,1) + 1 = 3 + 1 = 4

Зауважте, що Lua та Ruby не можуть додавати булеві як би цілі числа, отже, згрупування їх разом. На жаль 0and, у Луа не працює, тому ми не можемо зберегти байт там.


Попередня версія 17 байт, яка друкує 1 (Lua), 2 (Ruby), 3 (Python / Perl):

print(2^(0 or 1))

-3 байти завдяки @xnor за цю версію, що робить його набагато акуратніше :)


Було б 2^(0 or 1)працювати?
xnor

@xnor Ага, так, спасибі :)
Sp3000

8

BFSRS> <> funge93thon123, 73/343 ≈ 0,212827 ...

Brainfuck, серйозно ,> <>, Befunge-93, Python 1, Python 2, Python 3

# 4['.]@kX21z-[>+<-----]>--.<;n3
import sys;print(3+int(sys.version[0]))

Містить недруковані вироби, hexdump (з оборотом xxd -ps -r):

2320345b272e5d406b5832317a7f2d5b3e2b3c2d2d2d2d2d5d3e2d2d2e3c
3b6e330a696d706f7274207379733b7072696e7428332b696e7428737973
2e76657273696f6e5b305d2929

Я з часом додаватиму більше мов (і, мабуть, байтів). Мови в заголовку перераховані в порядку їх друку. Передбачає 8-бітові клітинки для обгортки та стрічку, яка не скаржиться на те, що йде Brainfuck зліва від початкового положення (обгортання чи нескінченність).

Brainfuck:

[.]   initial value of first cell is 0, so loop is skipped
-[>+<-----]>--  push 49 (ASCII ordinal of 1)
.     print "1"
<     move to blank cell
[0]   skip loop because cell is 0
      everything else is ignored

Серйозно :

# 4['.]@  does some stuff we don't care about
kX        pop entire stack, push as list, discard (essentially the same as é, but is ASCII so we can use Python)
2         push 2
1z        pop 1 item from stack and print (used instead of . so Brainfuck doesn't print here; same as ü in this scenario, but is ASCII so we can use Python)
0x7f      terminate program
          everything else is ignored

><>:

#    mirror, reverse direction
3n;  push 3, print "3", end (reversed because IP is scanning RTL at this point)
     everything else is ignored

Befunge-93:

#     jump over the space
4['.] push 4, print 4 (brackets and ' do nothing)
@     end program
      everything else is ignored

Python 1 (спасибі каламутна риба):

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+1=5

Пітон 2 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+2=6

Пітон 3 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+3=7

Python 1 також працює. Дивіться codegolf.stackexchange.com/a/65652/32686 . Не додає символів (але змінити 3на 4)
Blue

8

14 мов, 73 байти, оцінка = (73/14 ^ 3) = 0,02660349854

#Y2(3`5n~thneo e        ;n@0d c
#   -[>+<"9"L-----]>+.
14  
print(int(15/2))+3

Я можу додати ще кілька мов, але я думаю, я додам те, що тут маю.

1. Brainbool ; Спробуйте в Інтернеті!

Відповідний код:

    [>+<         ]>+.

               + 

Це справді просто +.+, що дає результат 1.

2. Джольф ; Спробуйте тут!

Зображення (припиняє інтерпретувати вихідний код, тому відновлений код:

#Y2

Це еквівалентно (у JavaScript)

var Y = []; toHex(Y); alert(2);

Які виходи 2.

3. Стихія; Спробуйте в Інтернеті!

Відповідний код:

    3`

Це захоплює 3і друкує.

4. Brainfuck ; Спробуйте в Інтернеті!

Відповідний код:

-[>+<    -----]>+.

  -    -      + 

Це стандартний спосіб генерувати char-код 4 та виводити його, а також деякі інші речі після нього.

5. Ренг; Спробуйте тут!

~ припиняє програму, тому відповідний код тут:

#Y2(3`5n~

#переопределяється Yяк TOS, в цьому випадку 0. 2штовхає 2; (обертає стек N разів, вискакуючи N зі стека; 3`штовхає -3; і нарешті, 5nвідбитки 5.

6. ЗНО; Спробуйте в Інтернеті!

ETA зчитує лише букви E, T, A, O, I, N, S, H, тому код, виконаний лише таким:

       n thneo e         n     


  int int          

Суперрелевантний код:

       n thneo

Або, що те ж саме: nthne o. n...eє базовим-7 буквальним і thnє базовим-7 числом для 54. oвиводить цей символ. Повідомлення помилки виходять, але я не знаю, чому.

7. Пітон 3

Що він бачить:

# comment
# comment
14
print(int(15/2))+3

15/2дає 7,5, як /і поплавковий поділ. int(...)робить число int, яке потім друкується. Програма помиляє, коли +3виникає.

8. Юлія

Юлія бачить:

# comment
# comment
14
print(int(15/2))+3

Замість того, щоб обрізати 15/2, Джулія закріплює її, отримуючи 8. Вона друкує це, а потім виникає помилка при зустрічі +3.

9. Ділення; Спробуйте в Інтернеті!

Відповідний код:

        <"9"L         

Цю ідею я отримав із порції Мартіна Fission (скоріше, як її вкрали). Lпочинається ліва річ, захоплює 9і закінчується с <.

10. Пробіл; Спробуйте тут!

Відповідний код, переклад пробілів на Sта вкладки T:

SSSTSTS
T
ST

Він натискає 10 на стек і виводить його як число ( T\nST).

11. Пітон 2

Python 2 бачить це:

# comment
# comment
14
print(int(15/2))+3

(int(15/2))+3 оцінюється як 11, і це друкується.

12. Гол> <>; Спробуйте тут!

Відповідний код:

#                      ;n@0d c

Для цього використовується хитрість, використана у відповіді Мартіна, що @обертає різні напрямки в> <> і Gol> <>. #дзеркала, cштовхає 12, dштовхає 13, 0штовхає 0 і @підводить cдо вершини стека, після чого виводиться з друку ;n.

13.> <>; Спробуйте в Інтернеті!

Відповідний код:

#                      ;n@0d c

Знову використовуючи це, @обертає різні напрямки в> <> і Gol> <>. #дзеркала, cштовхає 12, dштовхає 13, 0штовхає 0 і @підводить dдо вершини стека, після чого виводиться з друку ;n.

14. Гольфскрипт; Спробуйте в Інтернеті!

Що він бачить:

# comment
# comment
    14
print(-int(-15/2))+3

Це штовхає 14, printтак, і помилки. Викрадено натхненну відповіддю Sp3000 .


7

Subskin , Brainfuck і Fob 27 байт / 3 ^ 3 = 1

0#>&$3#<>$-[----->+<]>-.
31

Підшкір

0
31

Встановлюємо покажчик інструкцій (тут не важливо) 0і реєструємо вихід 31. Якщо вміст реєстру вихідних даних є >= 0, ми виводимо міститься значення у вигляді a char. Усі інші коди ігноруються.

Брейнфук

-[----->+<]>-.

Вкладає 3в реєстр, зменшує значення один раз -і, нарешті, виводить за допомогою ..

Fob

#>&$3#<>$

Це трохи складніше, оскільки Brainfuck також читає <та >інструкції у Fob. Ми входимо в режим виконання за допомогою #та збільшуємо покажчик Brainfuck на один, що полегшує нам згодом. Нам поки що нічого не виконати, тому нічого не виконується.

Ми входимо в режим акумулятора за допомогою $, кидаємо в a 3, знову входимо в режим виконання, висуваємо вміст акумулятора в стек <і, нарешті, виводимо вміст >.

Щоб Brainfuck не закрутив програму, ми знову переходимо в режим накопичення $.


7

7 мов, 55/7 ^ 3 ≈ 0,16035

Працює в PowerShell v1, v2, v3, v4 та v5, Foo та Pyth

#7.q"6""
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]

Цифри 1–5 використовують аналогічну логіку для відповіді підмета . $PSVersionTableСпеціальна змінна була введена в PowerShell v2, і містить повний список збірки, ревізії і т.д. Ось приклад виведення змінної:

PS C:\Tools\Scripts> $PSVersionTable

Name                           Value                                                                                                                           
----                           -----                               
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

У цьому коді ми спочатку зберігаємо його, $pщоб довжина коду була коротшою. Потім ми перевіряємо його існування, використовуючи змінну як індекс у двопозиційному масиві:

  • Якщо змінна не існує, PowerShell буде динамічно створювати його і призначити його $NULL, то !з яких є $TRUE, або 1, що відповідає другому елементу в масиві, який виводить 1.
  • Якщо змінна існує (як це стосується v2 +), то !змінна призводить до $FALSEабо 0, що індексує перший елемент, який виводить номер версії.

Використовуючи Foo for 6, ми використовуємо #коментар у PowerShell, тому це ігнорується під час його виконання в середовищі PS. Однак Foo із задоволенням випхне номер 6і потім продовжить решту програми, яка нічого не робить.

Використовуючи Pyth for 7, ми повертаємося 7, а потім негайно виходимо з .q, так що нескінченний цикл while-true, який почався з, #не має значення. Оскільки у нас залишилось щось, що неявно друкується. Завдяки @ FryAmTheEggman за це доповнення.

Редагувати - Поповнив кілька байтів завдяки Mauris Edit - уточнив пояснення Pyth завдяки Sp3000


Як щодо $p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]? Це працює на моєму Powershell, але, можливо, не на всіх попередніх версіях.
Лінн

7

7 мов, 287/7 ^ 3 = 0,836

Напевно, найнижчий бал, який потрапляє, все одно мені подобаються ці 3 версії поліглота С.

Додано нудне рішення Python, щоб принаймні отримати право на "3 унікальні" мови, щедрості.

Додано Java, зловживаючи C триграфами для різних інтерпретацій коментарів.

Працює в:

  • Пітон 1

  • Пітон 2

  • Пітон 3

  • C89

  • C99

  • C ++

  • Java

версія для гольфу:

/*
*??/
/
#include <stdio.h>
#ifndef __cplusplus
#define true 8/*
import sys
print(sys.version[0])
'''
#*??/
/
#endif
int main(){int a=(true>1)?-6:3;printf("%d",(true//*
+a
//**??/
/+2));}
#define a \
'''
/**\u002f
public class p{public static void main(){System.out.println("7");}}
/**/

Безголовки:

/*
*??/
/

#include <stdio.h>

#ifndef __cplusplus
#define true 8/*

import sys
print(sys.version[0])
'''
#*??/
/
#endif 

int main()
{
    int a = (true > 1) ? -6 : 3;
    printf ("%d", (true//*
    +a
    //**??/
/
    +2));
}
#define a \
'''

/**\u002f
public class p
{
    public static void main()
    {
        System.out.println("7");
    }
}
/**/

Добре, це, мабуть, набридло, і я сподіваюся, що мої навички англійської мови досить хороші, щоб пояснити це звичайним.

Перш за все, я поясню різні коментарі, які використовував для інкапсуляції мовних структур, кожен із них.

Тож давайте взяти перший блок:

/*
*??/
/

Для Java це лише початок багаторядкового коментаря. Але ... в C99 / 89 / ++ це оцінюється до

/*
*/

Оскільки ??/є триграфом на \той час, коли він знаходиться на С, \персонаж є своєрідним послідовним і навіть споживає перерви рядків у своїй командній функціональності. Це призводить до того, що результат \nпросто "відображається" замість розривів лінії. це означає, враховуючи цей байтовий масив, що представляє перший блок: [ /] [ *] [ \n] [ *] [ ?] [ ?] [ /] [ \n] [ /] буде після оцінки триграфа: [ /] [ *] [ \n] [ *] [ \] [ \n] [ /] [ ] Якщо послідовна функціональність \тригерів і "споживає", то \nрешта та остаточність у C langs оцінюються байтами: [ /] [ *] [ \n] [ *] [ /]

Але про все це ява нічого не знає і трактує все, що випливає, як коментар, доки ця хитрість не буде скасована.

(далі буде!)


7

4 мови (Befunge-93, Microscript II, Microscript і Foo), оцінка 7/64 = 0,109

"4"1.@2

Налаштування: Натисніть 4, натисніть 1, надрукуйте 1 та припиніть.

Мікроскрипт II: Створіть рядок "4", відкиньте його, візьміть квадратний корінь з одного, відкиньте його і, нарешті, встановіть х 2. Це потім друкується неявно.

Мікроскрипт: Натисніть 52 на стек (який фактично ніколи не буде використовуватися для решти програми), збільшити регістр (спочатку нуль) на один, потім збільшити регістр на два. Потім це друкується неявно.

Foo: Надрукуйте рядок "4", потім натисніть 2


6

Пітон 1 | 2 | 3, 27 байт / 27 = 1

print(len("\xabc")+(1/2>0))

Вживання номерів версій @ sweerpotato змусило мене замислитись, чи можна відрізнити пітонів за меншими. Ось найкраще, що я знайшов.

Пояснення

Щоб відрізнити Python 3 від попередніх версій, ми використовуємо стандартний цілочисельний поділ проти трюку поділу з плаваючою комою. (1/2>0) == (0>0)повертає 0 до Python 2.3 або Falseвід Python 2.3 і далі, і (1/2>0) == (0.5>0)повертає Trueдля Python 3.

Щоб відрізнити Python 1 від решти, ми візьмемо довжину струни "\xabc", яка є довжиною одна в Python 1 і довжиною дві від Python 2 далі. Чому? Оскільки

Втеча \ x у рядкових літералах тепер має рівно 2 шістнадцяткових цифр. Раніше він би споживав усі шістнадцяткові цифри, що слідують за «x», і отримав найнижчі 8 біт результату, так що \ x123456 було еквівалентно \ x56.

нового в Python 2.0 )


6

Python 3, Ruby, Perl, C, C ++, Objective-C 202 bytes / 6 ^ 3 = 0,935 ...

Насправді це було досить весело, і багато грати з булями.

Усі версії коду можна на наступному сайті , скопіювавши та вставивши код в інтерпретатор.

#include <stdio.h> /*
print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1
"""""
*/
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}/*
"""
#*/

Python 3, друкує 1

Хитрість полягає в наступному:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Це надрукується 1

Рубін, принти 2

Інтерпретований код для Ruby:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Так це друкує 2

Perl, принти 3

Інтерпретований код для Perl:

print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1

Перш за все, __DATA__маркер повідомляє компілятору Perl, що компіляція закінчена. Все після цього ігнорується.

print ((("0"+"0"==0)and 3) or (0and 2or 1));

І відбитки 3

С, відбитки 4

Інтерпретований код сильно відрізняється від інших:

#include <stdio.h>
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}

Це просто надрукує графік 4.

C ++, відбитки 5

Те саме, що і код С

Це надрукує графік 5.

Objective-C, відбитки 6

Те саме, що і код С

Це надрукує графік 6.


5

5 мов, 18 байт / 5 ^ 3 = 0,144

Працює в Brainbool , Mathematica , Foo , > <> та Befunge-93 .

4!<n;+Print@2"3".5

Brainbool

Brainbool схожий на Brainfuck, але він працює лише на бітах, а його введення та вихід складається виключно з 0та 1.

4!<n;+Print@2"3".5
  <                   move the pointer to the left
     +                logic not
                .     print the current cell

Математика

У Mathematica все є виразом і має значення. Print@2друкує 2та повертає символNull . Після цього код виконує деякі символічні обчислення, але нічого не друкує.

Foo

"3" принти 3. Я не знаю, що роблять інші частини.

> <>

4!<n;+Print@2"3".5
4                     push 4
 !                    skip the next command
   n                  pop and print it as a number
    ;                 end the program

Befunge

4!<n;+Print@2"3".5
4                     push 4
 !                    logical not
  <                   makes the program counter travel to the right
 !                    logical not
4                     push 4
                 5    push 5
                .     pop and print it as a number
             "3"      push the string "3"
            2         push 2
           @          end the program

12 мов, 35 байт / 12 ^ 3 = 0,0202546 ...

Використовуючи хитрість ласощі , дешево, але потужно.

Працює в Brainbool , Mathematica 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 та 10.0 , Foo та > <> .

cn;+"11".Print@Floor@$VersionNumber


5

6 Мови, 38/6 ^ 3 = 0,17592̅5̅9̅

Whitespace , Brainfuck, Ruby, Labyrinth , Foo, серйозно

Легенда:

£: вкладка

: простір

§: 0x7f

puts•2;#4!@•-[>+<-----]>6.§"5"•£    
£
•£

Він містить символи, що не друкуються, ось ось шістнадцятковий:

7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a

Пояснення:

Пробіл

Спробуйте в Інтернеті. (Примітка: моя програма не дозволяє закрити три канали ліній, щоб припинити програму. Я написав / протестував це на Whitelips, і це дає належний висновок там, але не на Try it Online, тому до пов'язаної програми додано ці два символи. Наскільки це як я можу сказати, деякі перекладачі дозволяють вам це робити, інші застрягають у нескінченному циклі без явного припинення)

(пропускаючи ігноровані символи)

spacespacespacetabenter: натисніть 1 на стек

tabenterspacetab: вивести верхню частину стека

Рубін

Не потрібно пояснювати. Друкує 2, розглядає решту цього рядка (ерго, програма "мозговий ебан") як коментар, решту файлу трактує як порожню.

Брейнфук

Спробуйте в Інтернеті.

Потрібен інтерпретатор, який підтримує underflow. Перша комірка переповнює 255, а потім використовує цю для лічильника циклу для генерації 51, що є кодом ascii для 3.

Лабіринт

Спробуйте в Інтернеті.

(опускаючи останні два рядки для розбірливості, оскільки вони ніколи не досягаються)

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•                            skipped
     2                           push 2 onto stack
      ;                          pop 2 from stack
       #                         push current stack depth (0) to stack
        4                        push 4 to stack
         !                       print top of stack as integer
          @                      program terminates

Foo

Спробуйте в Інтернеті.

Єдине, що впливає на вихід, - це "5", яке друкує 5.

Серйозно

Спробуйте в Інтернеті.

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•2;#4!@ -[>+<-----]>           assorted stack manipulation that doesn't affect this program
                        6          push 6 to the stack
                         .         output top of the stack
                          §        (0x7f) terminate program

5

5 мов, Chaîne , Minkolang , Foo , Brainf ** k-ng та Vitsy , 21/5 ^ 3 = 0,168

2|<«+!@"3".N+m

5N»

Brainf ** k-ng

2|<«+!@"3".N+m

5N»
  <            go left (should still be ok)
    +!         output 1
      @        halt execution

Chaîne

2|<«+!@"3".N+m

5N»
2              «add 2 to the current string»
 |<            «take off and put on the string (no op)»
   «           «comment»

  »
               «implicit output»

Foo

2|<«+!@"3".N+m

5N»
       "3"     print three

Мінколанг

2|<«+!@"3".N+m

5N»
2              C push 2 to the stack [2] C
 |             C mirror C
2              C push 2 to the stack [2,2] C
             m C ignored C
            +  C add top two [4] C
           N   C output C
          .    C terminate program C

Віті

2|<«+!@"3".N+m

5N»
2              push 2
 |             mirror
2              push 2
             m pop 2, goto line 2
5              push 5
 N             output 5
  »            ignored

Можливо, я можу додати> <> або щось таке.


1
Знаєте, я ніколи не знаходив корисного дзеркала. xD
Addison Crump

5

Craneflak , Brain-Flak Classic , Rain-Flak , BrainHack , Brain-Flueue , miniflak , miniHack : .1020

(([]()()()<()()()>)()()){}#{}({}())

Спробуйте в Інтернеті!

Пояснення

Перше, що тут відбувається - це різниця в тому, як читаються коментарі між перекладачами BrainHack, CraneFlak та Rain-Flak. Craneflak не має коментарів, Rain-Flak #коментує решту рядка, а BrainHack #{...}коментує нутрощі.

Тож ось що читає кожна мова:

Rain-Flak: (([]()()()<()()()>)()()){}         -> 3
BrainHack: (([]()()()<()()()>)()()){}({}())   -> 4
Craneflak: (([]()()()<()()()>)()()){}{}({}()) -> 1

Наступна річ - різниця між мозковими лусками та мініфлаксами. І Rain-Flak, і BrainHack підтримують miniflak, де всі додаткові операції просто видаляються. Це означає, що вони втрачають []і<...>

Rain-Flak: (()()()()()())         -> 6
BrainHack: (()()()()()())({}())   -> 7

Далі ми маємо різницю між Brain-Flak та Brain-Flak Classic. У Classic []є-1 замість висоти димової труби, а це значить , що наш результат 1 менше , ніж в звичайному Дощі-Flak, що робить його 2.

Нарешті, ми маємо різницю між мозком-Flak та мозковим диханням. У мозковому димоході черга використовується замість стека. Зазвичай мозок-спалах виштовхує 3, а потім 5, і вискакує 5, однак у дихальному мозку поп позбувається 3, а не 5.


4

Чумацький Шлях 1.0.2 , CJam і STXTRM , 20 байт / 3 ^ 3 = 0.741

Я думаю, що є хоча б ще одна мова, яку я міг би додати.

'2"3""1"1<<1>;;"2"3;

Пояснення


Чумацький Шлях ,1

У Чумацькому шляху рядки позначаються лише парами подвійних лапок. Єдина цитата зчитує вхід з командного рядка; якщо такої немає, вона висуває порожню рядок. Більше та менше, ніж знаки, повертатимуть увесь стек праворуч і ліворуч відповідно. Нарешті крапкою з комою підміняються два верхні елементи стека.

Ось візуалізація стека (показаний стек є результатом переліченої операції після її проведення):

["", 0]                                             #  default stack

["", 0, ""]                                 #   '   #  read input from command line
["", 0, "", 2]                              #   2   #  push 2 to the stack
["", 0, "", 2, "3"]                         #  "3"  #  push "3" to the stack
["", 0, "", 2, "3", "1"]                    #  "1"  #  push "1" to the stack
["", 0, "", 2, "3", "1", 1]                 #   1   #  push 1 to the stack
[0, "", 2, "3", "1", 1, ""]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0, 1]              #   1   #  push 1 to the stack
[1, "", 2, "3", "1", 1, "", 0]              #   >   #  rotate the stack rightward
[1, "", 2, "3", "1", 1, 0, ""]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0, "", 2]       #  "2"  #  push 2 to the stack
[1, "", 2, "3", "1", 1, "", 0, "", 2, "3"]  #   3   #  push "3" to the stack
[1, "", 2, "3", "1", 1, "", 0, "", "3", 2]  #   ;   #  swap the top two stack elements

CJam ,2

У CJam рядки також позначаються подвійними парами цитат. Одинарна цитата підштовхує код символу наступного символу. Коли виводиться код символу, він виводиться як його відповідний символ. Знаки з більшим та меншим рівнем дії, як очікувалося, оцінюють порядок двох верхніх елементів укладання. Нарешті, крапка з комою відкидає верхній елемент стеки. Після закінчення програми виводиться вміст стека.

Ось візуалізація стека (показаний стек є результатом переліченої операції після її проведення):

[]                         #  default stack

['2]               #  '2   #  push the character code of "2" to the stack
['2, "3"]          #  "3"  #  push "3" to the stack
['2, "3", "1"]     #  "1"  #  push "1" to the stack
['2, "3", "1", 1]  #   1   #  push 1 to the stack
['2, "3", "1"]     #   <   #  leave the greater of the top two stack elements on the stack
['2, 0]            #   <   #  leave the greater of the top two stack elements on the stack
['2, 0, 1]         #   1   #  push 1 to the stack
['2, 1]            #   >   #  leave the lesser of the top two stack elements on the stack
['2]               #   ;   #  pop the top stack value
[]                 #   ;   #  pop the top stack value
['2]               #  "2"  #  push the character code of "2" to the stack
['2, "3"]          #   3   #  push "3" to the stack
['2]               #   ;   #  pop the top stack item

STXTRM ,3

У MSM все, що не є оператором, висувається в стек як символ. Точка з комою дублює верхній елемент стека. Програма триває до тих пір, поки не буде більше операторів або не буде єдиного елемента на стеку.

Остаточний символ у стеці є 3, який дублюється кінцевим оператором. 3є найвищим елементом в кінці програми, тому він виводиться.


4

5 мов, 18 байт / 5 ^ 3 = 0,144

Ouroboros , Pip , QBasic, Foo та Pyth

5'"4"()"
1?3'@n()2

1. Уроборос

Кожен рядок програми являє собою змію, яка їсть свій хвіст.

Змія 1

Push 5, 'є безперервним натисканням 52(ASCII код "4"). (змушує змія вискакувати число і з'їдає стільки символів свого хвоста. Оскільки це призводить до ковтання вказівника інструкції (і всієї змії), виконання зупиняється.

Змія 2

Push 1, push випадкове число ( ?), push 3, 'є неоперативним. @обертається на 1вершину стека і nвиводить його як число, залишаючи 3верхню частину стека. Потім (з’їдає це багато символів з кінця змії, ковтаючи вказівник інструкції і зупиняючись.

Ви можете запустити цю програму онлайн в Інтерпретаторі фрагмента стека тут .

2. Піп

Більшість програми складається з виразів, які оцінюються та відкидаються:

  • 5
  • '" (літера буква)
  • 4
  • "()"
  • 1?3'@ (потрійний вираз)
  • n (змінна, = новий рядок)
  • () (нуль)

Нарешті, 2друкується останній вираз ,.

3. QBasic

Все після '- це коментар. Перший рядок, таким чином, зводиться до 5номера рядка. На другому рядку 1- номер рядка і ?3це ярлик для PRINT 3.

(Мабуть, виведення порядкових номерів не є проблемою, хоча це було б легко виправити, якби це було.)

4. Фу

Практично все - ні. "4"відбитки 4. Дужки (x2) - це цикл, який працює, поки поточна комірка масиву не дорівнює нулю, що відповідає дійсності негайно і цикл виходить. @, якщо не супроводжується числом, приймає значення поточної комірки масиву (ініціалізовано до 0) і висуває її до стеку.

Я не зовсім впевнений, як "слід поводитися з другою, неперевершеною . онлайн версія , здається, додати новий рядок виводу, що правила доступу допоможуть.

5. Піт

5є вихід. Потім програма стикається '"4", яка намагається прочитати з файлу з іменем 4. Поки такого файлу не існує, я думаю, що це має припинити програму з помилкою. (В інтернет-версії написано - я name 'open' is not definedприпускаю, оскільки відкриття файлів не дозволяється в Інтернеті.)

Збіг "в кінці рядка 1 гарантує, що рядок 2 не викликає синтаксичної помилки перед виконанням.



@Dennis Дякую! Сторінка Esolangs не мала посилання на цього перекладача.
DLosc

Ось індекс доступних на даний момент мов. Якщо ви коли-небудь хочете, щоб я додав його, просто пінг мені в чаті.
Денніс

4

4 мови, 24 байти, 24/4 ^ 3 = 0,375

print(1//0.5--1+1/2*2
);

1. PHP

PHP виконує print(1); що дорівнює 1

2. Луа

Луа страчує print(1//0.5); що дорівнює 2

3. Пітон 2

Python 2 виконує, print(1//0.5--1+1/2*2);що дорівнює 3 (ціле ділення)

4. Пітон 3

Python 3 виконує, print(1//0.5--1+1/2*2);що дорівнює 4 (поплавковий поділ)


Приємна відповідь, мені подобаються відповіді на звичайних мовах :-) сподіваюся, вам буде весело грати в гольф на ppcg :-), будь ласка, спробуйте будь-який з моїх попередніх проблем, якщо ви вважаєте, що вони цікаві :-) деякі трохи хитрі, а інші - більше основні :-)
Стюі Гріффін

Можливо, вас зацікавить відкритий виграш на 100 осіб, описаний у виклику. Outgolf Sp3000 (28 байт, 4 мови), використовуючи лише звичайні мови (визначені за посиланням), і це ваше :-), на жаль, python 2 і 3 не вважаються унікальними у виграші.
Стюі Гріффін

3

Brainfuck-ng, Foo,> <>, 9 байт / 3 ^ 3 = 0,333 ...

#+!"2";n3

Brainfuck-ng

Єдині персонажі він визнає це +і !:

+ Increment cell by one
! Print as integer

Друкує 1

Foo

Друкує все в лапках.

"2"

Друкує 2

> <>

#Дзеркало точки вліво, 3штовхає 3 до стека, nвиводить його як ціле число, ;зупиняє програму.

#      ;n3

2

3 мови, 82 83/3 ^ 3 = 3.074 ...

Працює в ??? , Whitespace та Beatnik . А точніше, вона повинна працювати на цих мовах, але я не збираюся їх перевірити протягом декількох днів. У всякому разі, ось код:

K... Jax... Jy... Jy...   ...
My...    My...
... ...     ......................XO!

1. ???

.................................................!

??? в основному є епізодом, але він використовує загальні розділові знаки як команди замість традиційних символів. .приріст поточної комірки пам'яті, що робиться 49 разів. !приймає поточну комірку пам'яті і друкує її як символ 1.

2. Пробіл

[Space][Space][Space][Tab][Line Feed]
[Tab][Line Feed]
[Space][Tab]

Пробіл - це мова, яка ігнорує всіх символів, які не є пробілами. Тут я перетворив його на легко читабельну форму. Перший рядок висувається 2на стек, а другі два рядки друкують тут верхню частину стека як номер 2.
Зауважте, що в комбінованому коді я замінив вкладки з чотирма пробілами через технічні обмеження.

3. Бітник

K Jax
Jy Jy
My My
XO

Beatnik - це мова, де кожне слово перетворюється на свою оцінку Scrabble, тоді ці оцінки інтерпретуються як команди. Перший рядок висувається 17на стек. Другий рядок дублює верхню частину стека двічі, а третій додає верхівку до елементів стека разом двічі, ефективно збільшуючись 17у три рази 51. Останній рядок друкує символу на верхній частині стека тут 3.
Зауважте, що я використовую Beatnik за номінальною вартістю, якщо припустити, що в початковій специфікації Beatnik помилки немає. Також зауважте, що я використовую північноамериканську англійську систему Scrabble.

Якщо наразі не зрозуміло, кожна з цих мов приймає лише певний тип символів (розділові знаки, пробіли та літери відповідно), тому написання цього поліглоту було таким же простим, як і написання окремих програм. Єдиний справжній «трюк» - використання коду Whitespace для відокремлення слів від Beatnik. Крім того, окремі програми нічим не перетинаються.


2
3 ^ 3 = 27 ==> 82/27 = 3.037037037037037 ...
AdmBorkBork

1
Ваш код Whitespace друкує 0, а не 2. Випробувано тут і тут .
Денніс

@Dennis Спасибі, я пропустив біт знака.
Майк Буфардечі

2

5 мов, 175/5 ^ 3 = 1,4

Я вирішив опублікувати іншу відповідь, оскільки щедрість змінює вимоги таким чином, що я змусив себе почувати себе незадоволеним моєю першою відповіддю (але це все ще задовольняє мене на шляху загального виклику!)

Тож ось моє рішення, яке кваліфікується для виклику щедрості:

Вона компілюється в

  • C99
  • objC90
  • C ++ 0x
  • Рубін
  • Perl
#if __cplusplus
#define x\
=begin\
=pod
#endif
int a=
#ifndef x
1//**/
+1
#else
3
#endif
;int main(){printf("%d",a);}
#ifdef f
=end
puts 5;
=begin
=cut
print"4";
=end
#endif

2

3 мови, 15 байт, оцінка 0,555 ...

Додамо більше мов пізніше.

2//1+1#😅😨

1. Емотиномікон

Emotinomicon майже ігнорує будь-який текст, який не є рядком. 😅натискає 1 на стек і 😨виводить TOS як число.

2. Javascript

Коментарі в Javascript починаються з //, тому 2виконується лише частина.

3. Python 2/3 REPL

Коментарі в Python починаються з #, тому 2//1+1виконується лише частина. //це ціле ділення в Python 3, і це те саме, що і /в Python 2. 2, розділене на 1, є 2, плюс 1 - 3.


2

4 мови, 97 байт, 0,37890625

s="1";s=~-3;2//2;'''/.to_s.ord;"=;print 4;
__DATA__
=1;
";#'''#";print=s=>console.log(3)
print(s)

Рубін

Це встановлює sдля "1", зіставляється з використанням =~проти-3 в недійсному контексті, намагається розділити 2на /2;'''/.to_s.ordпотім запускає нову рядок, що містить =;print 4; __DATA__ =1;, потрапляє в коментар, потім prints, sякий є нерухомим 1.

Пітон

Набори sдля , "1"як зазначено вище, а потім встановлює його знову , ~-3який є2 . Ми виконуємо ціле ділення 2//2, тоді є доктрина, що містить /.to_s.ord;"=;print 4; __DATA__ =1; ";#, а потім коментар, нарешті, printing s, який все ще є 2.

JavaScript

Набори sдля "1"потім встановлює його знову , ~-3як зазначено вище, тобто2 на лінії з'явиться коментар. Потім встановлюємо змінну __DATA__на 1. Існує короткий рядок, що містить ;#'''#визначення функції, printяка жорстко кодує висновок 3, який викликається в наступному рядку.

Perl

Запускає заміщення , еквівалентні s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/, printз 4і іншою частиною рядка маскуються за __DATA__ідентифікатором.


2

QBasic, QBIC і> <>, 18 байт / 3 ^ 3 мови = 0,66666 балів

1:?v+1'-5`
''`>3n;

Зламатися:

1. QBasic ( Отримати IDE )

1:          Line number 1
  ?         Print
   v+1      undefined var v = 0 + 1 = 1
'-5`        The rest of theis code is a QBasic comment
''`>3n;     As is this

2. QBIC ( Знайдіть перекладача )

1     inserts a 1 in the code - mostly harmless
:     Reads from the cmd line. Nothing there, creates an empty variable a
?     Print
v+1   v is initialised to 6, +1 = 7
'     Code Literal: everything till the ` is passed to QBasic without processing
 -5`  7-5 = 2

''`>3n; Code literal with the first literal being a ': comment in QBasic

3.> <> ( Спробуйте в Інтернеті )

1:  Push a 1 on the stack, duplicate stack
?   Pop top off the stack and skip next instruction if that's a 0
v   Move downwards - rest of the line is ignored

>   move to the right
3   Push 3 onto the stack
n   Print the top of the stack as a number
;   End the program

1
Я думаю, ви хочете порізати кількість мов у вашій оцінці (тобто 18 / (3 ^ 3))
математика наркоман

1

JavaScript, HTML і PHP, 72 байти / 3 ^ 3 = 2,67

1<!top?2:2//><!--<?='--'.'><script>document.body.innerHTML=3</script>'?>

У HTML це буде надрукувати провідний 1, ігнорувати <!window?2:2//> тег, а решта - коментар HTML.

У JavaScript він оцінює 1<!window?2:2 та виводить 2 (це потрібно запустити в консолі), а решта - коментар.

У PHP наступне виводиться з сервера: 1<!top?2:2//><!----><script>document.body.innerHTML=3</script>замінює мови HTML 1з 3.


1
Ласкаво просимо на PPCG.SE! Чудовий перший пост! Дві речі: нам зазвичай не подобаються відповіді на основі REPL (програма Javascript). Крім того, схоже, що PHP-код не працює, коли я вкладаю його в Інтернет-інтерпретатор , як саме працює PHP?
GamrCorps

Дякую! Ну, це технічно PHP + HTML (тобто, якщо це вихідний код для code.php, відвідування сайту / code.php в браузері відображає 3.
cuniculus

Спробуйте тут: mowbl.com/se.php .
кунікулу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.