# 4"16" 3//v\(@#/;\D"14"<;n4
#/*`3 afaaZ">;[77*,68*,@;'1,'1,q)(22)S# ␉␉␉␉ (
#yy␉;36!@
#`<` ␉
#=␉x
#<]+<[.>-]>[
#␉<
###xR+++++[D>+++++++L+++<-][<<<]>+.---.>][
#px%>~~~+␉+~*ttt*.x
#D>xU/-<+++L)
#R+.----.R␉>]|
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#|␉
print((eval("1\x2f2")and(9)or(13 ) )-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
###; console.log 39
""""#//
=begin␉//
#*/
#define␉z sizeof 'c'-1?"38":"37"
#include<stdio.h>
int main() /*/
#()`#`\'*/{puts(z);}/*'``
$'main'␉//
#-3o4o#$$$
<>"3"O.<␉>//
#
=end #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a>>>
#>27.say# /7Jn~15o|
#8␛dggi2␛`␉|1|6$//''25 =#print(17) ###^_^_LEintnd"3"z!]/}23!@/*///Z222999"26
␉
- буквальна вкладка, ␛
буквальний символ ESC; В іншому випадку Stack Exchange маніпулює програмою. Рекомендую скопіювати програму з поля "введення" посилання TIO нижче, якщо ви хочете працювати над нею.
Спробуйте в Інтернеті!
VIP-оцінка (універсальний принтер цілочисел): 0,01329
Спуститися
Ця програма роздруковує 41 у brainf ***, 40 у Minimal-2D, 39 у CoffeeScript, 38 у C, 37 у C ++, 36 у Лабіринті, 35 у INTERCAL, 34 у Rail, 33 у Інциденті, 32 у вихорі, 31 у Модульний SNUSP, 30 у Whitespace, 29 у триггері, 28 у Brain-Flak, 27 у Perl 6, 26 у 05AB1E, 25 у Pip, 24 у Thutu, 23 у шестикутнику, 22 у Underload,21в Nim, 20 в прелюдії, 19 в Reng, 18 в Кардинал, 17 в Julia, 16 в Pyth, 15 в Хейстек, 14 в Turtlèd, 13 в Ruby, 12 в діленні, 11 в Befunge-98, 10 в Befunge-93 , 9 у Perl 5, 8 у Retina, 7 у Japt, 6 у SMBF, 5 у Python 2, 4 у> <>, 3 у Minkolang, 2 у V / Vim та 1 у Python 3.
Перевірка
Більшість мов тестується драйвером, показаним вище. Ви можете протестувати Reng тут і модульний SNUSP тут ; вони виводять відповідно 19 та 31 відповідно.
Тестовий драйвер було оновлено, щоб включити Tokenizer, нарешті. Весь код C зберігається як аргумент з точки зору Bash Script. Я також змінив вихід, щоб обернутись горизонтально з проміжком після кожного маркера, а не вертикально. Це було лише моїм уподобанням, щоб він відповідав виходу Whitespace. Але будь-хто інший може змінити це, якщо відчує, що це занадто заплутано.
Я також здійснив коригування тест-драйвера для обробки міжрядкових інтервалів для позначки UFT8 Turtlèd в переході. Та нерівність зводила мене з глузду! "Виправлення" є досить злому, оскільки воно просто шукає è та змінює ширину стовпця для цього випадку, але це робить роботу.
Пояснення
По- перше, я хочу сказати , як дивовижний @ SnoringFrog в універсальний Integer принтер Score Зведення фрагмента коду з останнього поста був. Я певний час обчислював відповіді, перш ніж розміщувати повідомлення, і це надихнуло мене тримати це маленьким. Я думаю, що ми можемо перемогти відповідь @ sp3000 в підсумку.
Тому я почав працювати над цією відповіддю, намагаючись розіграти те, що міг, і я був досить успішним. У мене навіть була відповідь іншою мовою, загальна кількість байтів менша за # 40. Але коли я намагався переграти Minimal-2D, мені довелося навчитися BF, щоб я міг краще працювати з його похідними, і в процесі я знайшов рекорд @ Примо, побивши привіт, світ! . Я закохався в елегантність.
Мінімальний-2D виявився недостатньо ефективним, щоб використовувати техніку ініціалізації стрічки, яку використовує @Primo, але я зараз вважаю, що це, мабуть, буде занадто важким байтом. Ми лише намагаємося надрукувати ціле число. Але @Primo все-таки направив мене на шлях до того, як навчитися розмножуватися в BF, і я привів код Minimal-2D.
Потім, після всього цього, я перечитав коментар @ SnoringFrog про те, як включити BF, і зрозумів, що не тільки я можу це зробити, але і міг би використовувати багато коду Minimal-2D, на який я відповів у відповідь BF. Тож я заглибився, щоб відповісти з BF, і ось ми.
Ще одна річ, перш ніж я вникну в деталі. Було кілька змін, які я вніс із причин, що не стосуються гольфу. По-перше, я перемістив основну частину коду, який @SnoringFrog додав трохи нижче 2D-мов у декількох верхніх рядках. Для мене, це довгостроковий стратегічний крок, щоб не допустити 2D-langs пройти по центру поліглоту, щоб запобігти майбутнім помилкам, де це можливо. Для цього ходу байт був низьким, тому я пішов на це.
По-друге, під час різних рефакторів я дізнався, що Begunges та Minkolang виводять простір після числових виходів і що це було причиною нульових байтів, які ми бачили в тестовому драйвері для цих мов. Я виправив їх, вивівши значення стека у вигляді коду ascii (який не включав функцію проміжного простору), а не безпосередньо. Для цієї зміни був також невеликий хіт на байт, але тепер вихід тест-драйвера настільки рівномірний. Як я не міг?
SM / BF
Давайте швидко перейдемо до основ. Це єдині дійсні команди для SMBF та BF:
> Move the pointer to the right
< Move the pointer to the left
+ Increment the memory cell under the pointer
- Decrement the memory cell under the pointer
. Output the character signified by the cell at the pointer
, Input a character and store it in the cell at the pointer
[ Jump past the matching ] if the cell under the pointer is 0
] Jump back to the matching [ if the cell under the pointer is nonzero
В обох мовах є стрічка пам'яті, де зберігаються та змінюються значення. Єдина відмінність SMBF полягає в тому, що який би код не виконувався, він також зберігається на стрічці пам'яті зліва від початкової точки. Як зазначав @SnoringFrog, отримання SMBF та BF для отримання різних результатів залежить від переміщення вказівника пам'яті зліва від місця початку. У інтерпретаторі BF Тіо вказівник пам'яті здатний рухатися ліворуч від початкового коду і знайде 0 замість кодів ascii Поліглота, які бачить SMBF. Ось приклад, який можна запустити як у SMBF, так і в BF для прикладу різниці.
На початку поліглоту Befunges вимагає, щоб >
другий рядок був запущений до завершення, і Perl6 вимагає, щоб кожному >
передував a <
. Таким чином, SM / BF починають з того, <>
щоб залишити вказівник пам’яті на початок, а потім натисніть a, [
який переходить деякі образливі символи для обох мов ]
на 6-й ряд.
Далі ми збільшуємо комірку пам’яті початків для обох мов і переміщуємо вказівник пам’яті вліво за допомогою +<
. (Для розмовної конвенції ми будемо називати комір пам'яті початку як клітинку 0, комірки праворуч від джерела 1, 2, ... І комірки зліва -1, -2,…). В комірці -1 міститься код asci останнього символу в поліглоті в SMBF та 0 в BF, тому при наступному [
зустрічі лише BF переходить до наступного, ]
поки SMBF переходить у код.
По мірі переходу SMBF [.>-]
він друкує 6, знайдені в кінці поліглоту, а потім переміщує вказівник пам'яті назад на комірку 0, встановлюючи її значення назад до нуля, щоб вийти з поля ]
. Для перегляду, стрічки цього пінту: негативні клітини SMBF містять поліглот, і це 0, а позитивні клітини - нуль. Негативні та позитивні клітини BF мають нуль, тоді як клітина походження має 1.
Далі >
переміщуємо SMBF до клітинки 1, а BF - назад до комірки 0, що дозволяє BF ввести його приватний блок коду: [<+++++[>++++++++++<-][<<<]>+.---.>]
(Я видалив з цього не символи, що не належать до BF). Тут ми повертаємося до клітинки -1 і ініціалізуємо нашу змінну керування циклом (комірка -1) до значення 5. Потім вводимо цикл, де додаємо 10 у комірку 0 та зменшення комірки -1 п'ять разів, перш ніж виходити з циклу, де ми будемо вказувати на клітинку -1 зі значенням 0.
Далі ми стикаємося [<<<]
, вказуючи на нуль, тому BF не проходить через це. Мета полягає в тому, щоб збалансувати число >
'з попередніми <
', тому Perl6 не помиляється.
У цій точці клітинка 0 оцінюється в 51. Значення Ascii 4 дорівнює 52, тому ми переміщуємо вказівник на комірку 0 додати 1, а потім роздруковуємо значення. І, нарешті, ми повертаємо комірку 0 назад до символу ascii 1 і друкуємо ще раз перед тим, як встановити вказівник пам'яті на комірку 1 (значення 0), щоб вийти з-за меж ]
.
SMBF і BF обидва потрапляють останніми [
в рядку 8 наступного, в той час як обидва відпочивають на значення 0. Тож обидва стрибають повз залишився мінімальний 2D-код, поки не з'явиться ]
рядок 11. Але це недовго, оскільки рядок 12 починається з іншої, [
яка переносить обидві мови майже до кінця поліглоту, де подальших інструкцій не зустрічається.
Рефактори
Мінімальний-2D
Переписування Minimal-2D здебільшого полягало в тому, щоб зберегти кілька байтів таким чином, як трюк множення BF. Однак у Minimal-2D немає символів [
та ]
символів для керування циклом. Натомість у неї є такі команди:
/ Skips next instruction if the data pointer is set to 0.
U Tells the program to switch to the up direction of processing instructions.
D Tells the program to switch to the down direction of processing instructions.
L Tells the program to switch to the left direction of processing instructions.
R Tells the program to switch to the right direction of processing instructions.
Вони можуть бути використані для створення тієї ж логічної структури, хоча і в двовидовій садибі, як і BF. Наприклад, коефіцієнт BF ++++++[>++++++<-]>.
еквівалентний цьому в Minimal-2D.
Ось спрощена версія коду Minimal-2D в поліглоті, при цьому всі сторонні коди вилучені та замінені всі символи, що займають місця #
.
###################D
###R+++++[D>+++++++L
###>
D>#U/-<+++L)
R+.----.R
D
У рядку 1 посилає покажчик інструкції вниз до L
в 8 -ої рядку поліглота , який посилає покажчик вліво. Тут ми встановлюємо змінну управління циклом (комірка 0) на 7, переміщуємо вказівник пам’яті на комірку 1 і вводимо цикл. У циклі ми додаємо 3 до комірки 1, комірка декременту 0, а потім перевіряємо, чи значення 0 для комірки 0 дорівнює нулю. Якщо ні, ми додаємо ще 8 до комірки 1, а потім декремент і ще раз перевіряємо. Результатом цього циклу є значення клітинки 1, встановлене на 51 в кінці циклу (6 * 8 + 3).
Ми виходимо з циклу, перестрибуючи U
, переміщуючи вказівник пам’яті на комірку 1 і спускаючись потім праворуч по лінії 11 поліглота. І нарешті, ми збільшуємо значення до значення ascii для 4, а потім зменшуємо до значення ascii для 0, перш ніж бігти праворуч, щоб закінчити програму.
Сітківка
У Retina було багато вимог, з якими було важко працювати для всіх похідних BF. Це не подобається послідовним +
чи невідповідним ()
або []
. Але це справді просто вимоги до кожного іншого рядка, тому багато роботи для BF, SMBF та Minimal-2D розгорнулося навколо того, щоб розмістити основну частину коду на парних рядках.
Один байт, |
присвоєний виключно сітці, хоча є в кінці рядка 11. Цитувати @ ais523 «більшість реджексів, що закінчуються на | відповідатиме що завгодно ». Без цього Retina повертає 0. Чому це це виправляє, я не знаю. Мені не довелося занадто сильно копатись у Retina, напевно, тому, що я уникав довгої лінії. Але, як і Прелюдія, я виявив, що мені не потрібно це розуміти настільки, як мені потрібно, щоб зрозуміти, як його налагодити, що в цьому випадку здебільшого полягало у видаленні рядків (у кратних розмірах 2), поки я не знайшов рядок це змушує його зламатися. Я здогадався про це виправлення, грунтуючись на коментарі @ ais523, і отримав винагороду. Я думаю, я занадто крутий до школи.
Кардинал
Мені випадково подобалося розміщення @ SnoringFrog Minimal-2D щодо коду Кардинала. Це гарне місце, враховуючи, що Кардинал не засмучує Retina, і, здавалося, це дозволило переплестися з Minimal-2D. Тож коли я вирішив пересадити Minimal-2D на 2D землю, я привів кардинала на поїздку. У Кардинала було кілька косметичних змін. По-перше, я кинув >
майже на початку своєї заяви #p x%>~~~+ +~*ttt*.x
для Minimal-2D, щоб змінити покажчики пам’яті в її циклі / По-друге, я перемістив все на один символ праворуч, щоб дати мінімальній 2D-кімнаті, щоб вийти з циклу витончено. У p
цьому жалі для цього персонажа прокладка.
Befunge / 98
Справді, Befunges - це те, де я почав намагатися переграти поліглот, оскільки рефактор C ++ змінив усі інші 2D-язикові коди, крім цього. Намагаючись дізнатися, що WTF відбувається в цьому коді, я знайшов це в документації на Begunge:
.
Команди з'явиться значення з стека і виводити їх у вигляді десяткового цілого числа, а потім пробіл , кілька як Форт. ,
з'явиться значення, інтерпретує його як значення ASCII символу та виведе цей символ ( не супроводжується пробілом. )
Святий моле! Ми можемо очистити нульові байти на виході. Після цього все було лише питанням з'ясування способів введення більших значень asci та розділенням коду. У Befunge-98 був код стрибка;
, кажучи його пропустити через [77*,68*,@
ін ;[77*,68*,@;'1,'1,q
, який дав нам сегрегацію.
Befunge-98 також мав команду ( '
) взяти код ascii наступного символу. Отже, '1,
бере код коду asci для символу 1
, ставить його в стек і потім друкує символ ascii для найвищого значення на стеку з,
. Просто потрібно зробити це двічі, щоб надрукувати 11 і випустити q
граціозно, щоб вийти.
Налаштування Befunge трохи менш зручно, але тільки справедливо. Тут ми повинні виконати обчислення, щоб поставити потрібний код у стек. На щастя, наші коди були легко помножені з 7 * 7 і 6 * 8 перед тією ж командою виводу ,
. Тоді ми виходимо з Бефунджа@
тим, щоб код його старшого брата забруднив вихід.
Мінколанг
Після пошуку виправлення для проміжків простору Befunge я дуже розчулився ідеєю знайти виправлення Minkolang і в документації Minkolang сказано, що команда виводу, яка використовувалася до цього моменту, працювала так само, як і Befunge Interpreter. O
траплялося задокументовано як іншу команду виводу, яку не описали як спільну подію цього Begunge-ness, тому я просто зробив знімок у темряві і спробував вивести рядок"3"
. Бездоганна перемога.
> <>
Однією з перших речей, на які я звернув увагу при переміщенні коду Minimal-2D, було підтвердження того, що я можу переміщуватися разом із ним. Якщо я збирався мати справу з трансверсалізмом двогранного поліглоту, я збирався мати справу з усіма переступами. Я, по суті, пощастило пропустити собі рішення про те, щоб поставити ;n4
в кінці рядка 1 і перемістити \D
далі в рядок 1. До речі, я не знав, що> <> можна спрямувати вниз до відповіді 40, оскільки він так добре міститься . Я хотів би подумати, що це може бути використане пізніше для того, щоб відійти від іншого подібної мови.
Perl6
Я говорив про деякі Perl6 <>
балансування інших місцях, тому не збираюся переглядати це ще раз. Але я хочу зазначити, що я перейшов #>27.say#
на другий до останнього рядка. У цій відповіді це не має функціонального призначення. Я фактично зробив цей крок, щоб задовольнити іншу відповідь, що в кінцевому підсумку я не використав цей раунд. Я вирішив просто залишити його, оскільки я планую опублікувати цю відповідь при наступній моїй можливості, і я не хотів турбувати скасування та повторне виконання.
Виправлення помилок
05as1e
05as1e, безумовно, не сподобався новий код Begunge так само, як стара версія. Я б припустив, що це ,
s, оскільки це єдиний революційний персонаж. У будь-якому випадку, мені довелося перенестись "
назад, у другий рядок, щоб приховати наступаючі команди, і я знав, що потрібно "
було пройти до шляху коду Бефунге, оскільки це "
було так в обох мовах. (Я можу просто скласти такі терміни, як "так", правильно?) <
Двомірність 2-го рядка досить жорстка, але мені вдалося змістити попередній шлях коду Бегунджа з "
. <
Однак була вимога Perl6. (Це повинно бути <
попереднім всім >
s.) Мені вдалося <
перекинути рядок у місце, яке визначається інстинктом та передбаченням, що вирішує 05ab1e та незгоду Perl6.
Вир
Зміни Befunge на лінії 2 додали додаткового 1
поліглоту до лінії Incident / Whirl. Це додатково 1
змусило Whirl почати вказувати на неправильні вказівки на колесі. Першою 1
в директиві препроцесора C / C ++ була лише посилання на номер рядка в коді, і це могло так само легко бути будь-яким іншим номером рядка, тому я довільно змінив це, 4
щоб задовольнити Whirl.
Інцидент
На даний момент детокенізуюча рядок в кінці поліглоту добре відома, тому я не буду в неї вступати. Я вийняв із рядка все, що міг, і додав потрібні нові жетони. Є два символи детокенізації, які не входять до цього рядка, хоча, що я повинен зазначити. По- перше, другий R
в #R+.----.R >]|
необхідності тут , тому що це Fusion відправною точкою, і це було безпечніше на цій лінії , тому що вже була точка заголовка Fusion відправним в тому ж напрямку. По-друге, x
in #= x
- це видалити маркер, що бере участь у ␉␊#
шаблоні, який став більш поширеним.
Інші
У шестикутниках, пробілах та прелюдіях всі мали звичайні незначні корективи, але нічого особливого не варто говорити.
Фінальні думки
Це все, що я маю за цю відповідь. Для тих, хто шукає вихідного пункту для наступної відповіді, я б запропонував зло. Це здається працездатним, хоча я не надто уважно придивився до цього, але я підозрюю, що інтегрувати його було б не надто важко. Я знаю, що в ньому є команда стрибка, яка повинна допомогти пропустити повз основну частину поліглоту. Удачі.