<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 65641; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 31516; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d?\.?\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
2.7.1
к2.7.n
. (На самом деле, sweerpotato делает именно это с основными версиями.)Ответы:
30 языков, 248 байтов, 248/30 ^ 3 = 0,009185
Редактировать: Beatnik удален, так как тестирование простоты в Beatnik может быть невозможно.
В коде есть вкладки (которые обрабатываются Stack Exchange) и завершающий перевод строки, поэтому вот
xxd
:Кроме того, вы можете скопировать и вставить код из этого "Попробуйте онлайн!" ссылка .
Это очень плохо, но я хотел отыграть идею, что, когда у вас будет достаточно языков, количество байтов уже не будет иметь большого значения. Сказав, что есть некоторые языки, которые я мог бы легко добавить (например, Objeck), но в настоящее время они слишком длинные, чтобы быть полезными. Хотя у меня заканчиваются хорошие языки, поэтому я могу на этом остановиться.
Запустите все программы с помощью
</dev/null 2>/dev/null
(т. Е. Пустой ввод, перегруженный STDERR).Объяснение довольно длинное, поэтому вот резюме:
1. корова
COW - это производная от Brainfuck с дополнительными командами, одной из которых является числовой вывод. Все недействительные игнорируются, поэтому исполняемая программа просто
который увеличивает ячейку до 1, затем печатает ее как число.
2. CoffeeScript (включает переводчика)
CoffeeScript видит:
который просто предупреждает 2.
(Да, возможно, было бы лучше, если бы этот слот занял другой язык, но я слишком ленив, чтобы перетасовать его: P)
3. Общий Лисп | ideone
Common Lisp (clisp) видит:
1/5
является рациональным и не равен0.2
, поэтому 3 печатается. Продолжение"""
является синтаксической ошибкой.Обратите внимание, что
print
в Common Lisp , похоже, выводится предыдущий символ новой строки и завершающий пробел. Однако, к счастью,write
работает как в Common Lisp, так и в Chicken Scheme.4. Сетчатка | Попробуйте онлайн!
Введенные ограничения : каждая вторая строка, начиная с первой, должна быть действительным регулярным выражением.
Каждая пара строк образует этап замены, заменяя экземпляры совпадений регулярного выражения первой строки второй строкой. В середине у нас есть пара
которая заменяет исходную пустую строку на
"""
. Последняя пустая строка, не являющаяся частью какой-либо пары, рассматривается как стадия совпадения, считая количество совпадений регулярного выражения. Есть четыре экземпляра пустой строки"""
, а именно1"2"3"4
.5. Befunge-93 | переводчик
Befunge - это двумерный язык, и соответствующие инструкции
в первой строке и
5
в25
строке.#
пропускает следующую инструкцию,15g
получает символ в позиции(1, 5)
кода ( строка5
в25
строке),,
выводит символ и@
останавливается.6. Python 2 | ideone
Python видит:
(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6
, который получаетprint
ред.7. Рельс | Попробуйте онлайн!
Rail - это двумерный язык, и его выполнение начинается с
$
основной функции в юго-восточном направлении. Таким образом, соответствующая часть кодас
o
иJ
исходя из линий, используемых TRANSCRIPT. После вывода 7 поезд попадает в нераспознаннуюJ
инструкцию, что приводит к сбою программы.8. ЭТА | Попробуйте онлайн!
Введены ограничения: не следует вводить символы до программы ETA
etaoinsh
.ETA распознает только буквы
etaoinsh
и их заглавные версии, то есть код начинается сn...e
толкает основную цифру 7 в зависимости от того, что находится внутри разделителей, для которыхSaI
есть624
, или 312 в десятичном виде.o
затем выводит как char, по-видимому, по модулю 256, давая char8
(кодовая точка 56).e
затем пытается разделить с пустым стеком, который терпит неудачу.9. Прелюдия | Попробуйте онлайн!
Введены ограничения: не более одного
()
в любом столбце,()
совпадающих с чтением столбца за раз, без бесконечных циклов, вызванных()
.Это требует, чтобы интерпретатор Python был
NUMERIC_OUTPUT = True
установлен.Прелюдия - это язык, где каждая строка выполняется отдельно. Многие символы выполняются, но важной частью является
во второй строке, которая выводит 9.
()
в Prelude обозначает цикл, но благодаря выдающемуся значению#
s (который вырывается из стека), вершины стеков всегда равны 0 к моменту попадания в цикл, поэтому ни один из них запускаются. Ограничения исходного кода Prelude относительно()
введенных некоторых посторонних мест все же.10. Гол> <> | переводчик
Эта часть (и> <>) работает как ответ Мартина . Соответствующий код
Gol> <> - это двумерный язык, который
#
отражает IP-адрес, что позволяет ему перемещаться влево. Он оборачивается, вставьте 10, 14 и 0 в стек.@
затем вращает стек, выводя 10 наверх,n
выводит его и;
останавливает программу.11. зло | Попробуйте онлайн!
Эта часть также похожа на ответ Мартина.
зло игнорирует все, кроме строчных букв. Игнорируя еще несколько символов, соответствующая часть
где
a
увеличивает значение переменнойA
,e
это функция зла, которая тасует битыA
иw
выводитA
. Следовательно мы выводим1
дважды, давая11
.Но как быть с остальными инструкциями, особенно
w
с последней строкой? Давайте просто скажем, что иногда проще всего связываться с кодом и молиться, чтобы он все еще работал во всем, что здесь, так или иначе, делало ...12. Фу | Попробуйте онлайн!
Foo выводит что-либо между двойными кавычками, поэтому соответствующая часть
на второй линии. Однако, поскольку нам понадобятся двойные кавычки позже, мы используем метод, аналогичный ответу Мартина, чтобы исключить ошибку Foo, а именно предыдущий
#-1@
. Непонятно, почему это работает на языке, который использует пустой стек и деление на ноль ошибок, но я рад, что это так.13. Рубин | ideone
Как и Python, Ruby видит:
Тем не менее, стоит отметить , что многострочная строка фактически три отдельных строк (
""
,"..."
,""
) объединяется вместе.(4^2+7) = xor(4,2)+7 = 6+7 = 13
Вывод строки печати , прежде чем вывести ошибку, пытаясь разделитьnil
на 2.14. > <> | Попробуйте онлайн!
Эта часть такая же, как и часть Gol> <>, за исключением
@
того, что вместо этого 14 выводится наверх, которая выводится.15. Брайан и Чак | Попробуйте онлайн!
Brian & Chuck является производной BF с двумя лентами, где указатель инструкции одной ленты является указателем памяти другой ленты. В отсутствие
```
первых двух строк исходного кода используются для инициализации лент.Соответствующие символы в первых двух строках:
?
В ленте Брайана проходит контроль над Чаку в сота указал (#
) отличен от нуля. Затем Чак выполняет>.>.
, выводя два знака после знака вопроса.16. Пробелы | переводчик
Используя
STL
для пробела, табуляции и перевода строки соответственно, запуск программы:Первая строка нажимает 16 (
+10000
основание 2), предыдущаяTLST
печатает его как число. Следующие три перевода строки останавливают программу.Обратите внимание, однако, что эта программа специфична для интерпретатора. Остальные синтаксические ошибки кода в большинстве интерпретаторов, поэтому требуется более мягкий интерпретатор, такой как приведенный выше.
17. 3вар | Попробуйте онлайн!
Из первой строки выполняется множество инструкций, но соответствующие
Из-за ограничения ETA, мы используем
k
для уменьшения переменной B, а неa
для ее увеличения.kk
уменьшает B до -2 иmm
возводит в квадрат B дважды до 16, что увеличивается до 17 сa
. Это затем выводится сo
.#
затем используется для сброса B на 0 и/
вызывает ошибку программы через деление на 0.18. Аксо | Попробуйте онлайн!
Введены ограничения: нет никаких инструкций перед программой Axo, которые меняют направление IP
Еще раз, множество инструкций выполняется в первой строке, но соответствующие
Axo - это двумерный язык, такой как Befunge, и
#
аналогично мост, пропускающий следующую инструкцию, но только если вершина стека равна нулю.15,
нажмите на стек, но стек очищается@
.99+
затем нажимает 18,{
выводит и\
останавливает.19. Лабиринт | Попробуйте онлайн!
Лабиринт - еще один двумерный язык, и выполненные инструкции
#
толкает длину стека, которая в первый раз равна 0|
является побитовым ИЛИ, ничего не изменяя, так как в этой точке стека просто есть 0, а вторая#
теперь выдвигает 1 из-за одиночного нуля. Мы поворачиваем направо из-за 1,9
преобразовываем это 1 в1*10+9 = 19
,!
печатаем его и@
останавливаем.Эта программа опирается на тот факт, что
[
в настоящее время не является признанной инструкцией, и, следовательно, рассматривается как стена.20. Звездный | Попробуйте онлайн!
Введенные ограничения: Все
+
s должны иметь по крайней мере один предшествующий пробелЕсли мы уберем нераспознанные символы, соответствующая часть кода
,
является входом, но так как мы по конвейеру/dev/null
оттуда нет ни одного, подталкивая 0 в стек. A+
сn >= 5
предыдущими пробелами нажимаетn-5
, поэтому следующая инструкция нажимает 2...
затем выводит эти две цифры в обратном порядке.Далее у нас есть
+
с одним предшествующим пробелом, который дублирует. Тем не менее, стек пуст, поэтому мы делаем ошибку.21. Деление | Попробуйте онлайн!
Единственная важная часть для деления
L
порождает атом, движущийся влево,"21"
печатает 21 и*
останавливается.22. Брейнфук | Попробуйте онлайн!
Введенные ограничения: нет
.
до первого[
Это требует интерпретатора, который дает 0 на EOF и имеет 8-битные ячейки. Соответствующий код
Начальный
-
должны компенсировать+
, и первый[...]
не выполняются , так как клетка равно 0. Следующие-[>+<-----]>-
наборы ячейки полукокса кода2
, и..
выводит его в два раза.23. Юлия | Попробуйте онлайн!
Юля видит:
То, что напечатано
4^2+7 = pow(4,2)+7 = 16+7 = 23
, и программа выдает ошибку, пытаясь разделитьnothing
на 2. Обратите внимание, что Джулия, похоже, не возражает против того факта, что остальная часть кода в любом случае вызовет синтаксическую ошибку.24. Лили | переводчик
Лили видит:
7/6*24 = 1*24 = 24
печатается.25. GolfScript | Попробуйте онлайн!
GolfScript видит:
GolfScript основан на стеке, поэтому 25 помещается в стек, затем извлекается и печатается с помощью
print
.(
затем пытается уменьшить неявную пустую строку в стеке, что приводит к сбою и ошибкам программы.26. Цыпленок Схема | ideone
Куриная схема имеет тот же
#| ... |#
синтаксис многострочных комментариев, что и Common Lisp. Однако в1/5
с плавающей точкой , который является равным0.2
, так что 26 выводится вместо этого.27. чт | Попробуйте онлайн!
Thue - это язык, основанный на перезаписи строк. Первая соответствующая часть
который определяет замену,
f -> 27
затем обозначает конец замен с::=
. Lonef
inif
затем заменяется на27
, который выводится.28. Perl 6 | ideone
В Perl 6 появился новый синтаксис комментариев, а именно
#`(some bracket)
многострочный комментарий вплоть до соответствующей скобки. Таким образом, Perl 6 видит:который печатает
7/6*24 = 28
.29. Пиколисп | ideone
Picolisp видит:
которая печатает 29. Затем строка затем вызывает синтаксическую ошибку.
30. ТРАНСКРИПТ | Попробуйте онлайн!
TRANSCRIPT - это тематический esolang, смоделированный после текстовых приключений. Нераспознанные строки игнорируются (что позволяет добавить дополнительный текст истории / аромата среди фактических инструкций кода), поэтому соответствующие строки:
В первой строке объявляется строковая переменная
Jo
с использованием двухбуквенного имени, поскольку однобуквенные имена кажутся ошибочными. Вторая строка устанавливает эту строку в значение"30"
, которое выводится с помощьюX
«исследовать» в третьей строке.источник
pre
тегами вместо использования блока кода в стиле Markdown.15 языков,
686665 байт / 15 ^ 3 = 0,019 ...Сетчатка , Звездная , Прелюдия , ЭТА , Аксо , Лабиринт , Гексагония , Фу , Брайан и Чак , Гол> <> , зло , Пробел , Деление , > <> и GolfScript .
После масштабной переписки мне удалось уместить еще четыре языка. Код содержит несколько вкладок для пробелов. Так как Stack Exchange преобразует их в пробелы, я представил их
\t
ниже:Я думаю, что я закончил добавление языков (хотя добавление только одного может сэкономить несколько байтов в том, что у меня уже есть). Интересно, можно ли играть в гольф ... 65 байтов для 15 языков - это большой скачок с 32 байтов для 11 языков, и теперь у меня есть хотя бы один бесполезный символ, чтобы заставить Фу работать ...
Сетчатки принты
1
Попробуйте онлайн.
К счастью, первая строка - это правильное регулярное выражение. Однако это регулярное выражение, очевидно, не соответствует пустому вводу, поэтому первый этап (состоящий из первых двух строк) ничего не делает.
Третья строка сама по себе, поэтому она рассматривается как стадия совпадения, которая по умолчанию подсчитывает количество совпадений. Тем не менее,
`
это разделитель, который сообщает Retina, что часть перед ним является строкой конфигурации (она не знает ни одной из приведенных здесь опций), а часть после нее является регулярным выражением. Таким образом, регулярное выражение пусто, и Retina находит ровно одно совпадение.Звездные принты
2
Попробуйте онлайн.
Звездное игнорирует все, кроме пробелов и
+*,'`.
. Каждая команда является одним из этих символов в сочетании с пробелами, начиная с последнего из этих символов. Итак, давайте удалим весь посторонний код:Семь пробелов с последующими
+
нажатиями a2
. Один пробел с последующим+
дублированием.'
это условный прыжок. Он попадает в верхнюю часть стека, что является правдивым (положительным), поэтому он переходит к соответствующей метке (где метки обозначены,`
а «соответствующий» означает «с таким же количеством начальных пробелов»), что является первым`
..
без пробелов перед ним печатается вершина стека как число.Прелюдия принты
3
Попробуйте онлайн.
Предполагается, что интерпретатор Python использует числовой вывод. Давайте удалим все no-ops:
Первый голос делает кучу вещей, но ничего из этого не имеет значения, потому что нет результатов
!
для печати. Второй голос толкает a1
, затем a5
, затем a7
. Мы берем разность последних двух, чтобы получить-2
, а затем вычитаем это из,1
чтобы получить3
.!
печатает это. Третий голос имеет только не-опс.ЭТА печатает
4
Попробуйте онлайн.
ETA игнорирует все, кроме символов
ETAOINSH
(в любом случае). Итак, код, который видит ETA: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
снова пытается выполнить divmod, но стек содержит два нуля, поэтому программа завершается с ошибкой (но при этом не загрязняет STDOUT).Аксо принты
5
Попробуйте онлайн.
Этот язык был в значительной степени единолично ответственен за переписывание. У меня не могло быть
}
первой строки, потому что она заблокировала бы ввод в Axo (см. Историю изменений, о чем я говорю). Для Axo важна только эта часть кода:К счастью, Axo также имеет неявные
0
s в нижней части своего стека, поскольку#
выскакивает вершина стека (чтобы проверить, следует ли пропустить следующую инструкцию или нет). Письма все бездействуют. Затем5
нажимает5
,{
печатает,\
завершает программу. Все очень просто.Лабиринтные принты
6
Попробуйте онлайн.
Я немного усекаю код, потому что правая половина никогда не достигается, и я также использую
t
вместо него\t
, чтобы столбцы выстроились правильно:Теперь, когда буквы, пробелы и символы табуляции являются стенами в Лабиринте, поэтому доступный код на самом деле выглядит следующим образом:
Указатель инструкций будет автоматически следовать по этому пути.
#
толкает глубину основного стека (0
) и15
превращает его в15
.}
перемещает его во вспомогательный стек, и мы больше не будем его использовать. Это удобно делает вершину стека нулевой, так что IP не поворачивается влево на5
.7
превращает ноль в7
,'
это неоперация. Это`
унарное отрицание, поэтому мы получаем-7
. Теперь-
вычитает-7
из неявного0
нижележащего7
. На этот раз IP поворачивается вправо к тому`
, что является унарным отрицанием, так что мы получаем7
снова. IP попадает в тупик и разворачивается. The-
делает то же самое, что и раньше, поэтому мы получаем7
еще раз. Так как вершина стека теперь положительная, IP поворачивается направо. Есть еще один,-
который дает-7
снова. Тогда~
побитовое НЕ, что дает6
и!
печатает его. Это как раз подходящий момент для этого, потому что теперь стек снова пуст, так что IP не поворачивается влево,{
а вместо этого продолжается прямо в том,@
что завершает программу.Гексагональные принты
7
Попробуйте онлайн.
Развернутый код выглядит так:
Обычно это ужасная программа Hexagony, но фактически используемых символов не так уж много. На самом деле они почти так же , как те , которые используются лабиринтом , и я думаю, как я дифференцироваться между
5
и6
весьма приятно. :)Верхний ряд в принципе можно игнорировать.
#
обычно переключается на другой IP, но текущий край памяти равен0
, так что это не так. Буквы просто устанавливают фиксированное значение памяти, но мы не собираемся его использовать. После окончания первого ряда поток управления продолжается в среднем ряду (начиная с}
, направо). В}
переходит к другому краю памяти.7
устанавливает этот край на7
.'
возвращается туда, откуда мы пришли.-
вычитает край памяти, который мы только что установили,7
из неиспользованного края памяти (0
), так что мы получаем-7
. Следующий-
снова делает то же самое, так что это не оперирование. Пока что довольно похоже на Labyrinth (кроме макета памяти). Но сейчас~
это не побитовое НЕ, а унарное отрицание в гексагонии. Так что это дает7
вместо6
.!@
, как в Лабиринте печатает значение и завершает программу.Фу принты
8
Попробуйте онлайн.
Как мы все знаем со времен Викторины «Язык программирования», печать в Foo довольно тривиальна, даже если большая часть кода представляет собой случайный набор символов. Ни один из символов не влияет на вывод, кроме того,
"8"
который печатает8
. Ну, есть"31"
позже, но Foo завершается с ошибкой в конце первой строки. Я не совсем уверен, почему это происходит, но для этого требуется3
(или любая другая цифра) в верхней строке, которая больше нигде не используется.Отпечатки Брайана и Чака
9
Попробуйте онлайн.
Давайте сделаем это снова, когда мы удалим третью строку (она никогда не анализируется) и заменим все нерелевантные символы (например, no-ops или ячейки, которые не читаются) пробелами:
Как напоминание, каждая строка похожа на Brainfuck, и ее лента является исходным кодом другой программы. Поток управления начинается с первой строки (называется Брайан).
Эти
{
движения ленты головы весь путь влево (где она уже есть), а?
руки контроль над потоком Чаку (вторая линия). Там}
перемещает головку ленты вправо, пока не найдет нулевую ячейку. Это не происходит до конца программы, поэтому головка ленты заканчивается на одну ячейку после9
.-
уменьшает эту ячейку, но это не имеет значения.<
перемещает головку ленты на9
и.
печатает ее. Чак выбегает из программы и завершает работу.Гол> <> принты
10
Проверено здесь.
#
является зеркалом, поэтому IP-адрес сразу пропускается до конца первой строки (и идет влево).9
Можно пренебречь.a
толкает10
,e
толкает14
,"8"
толкает код символа8
,@
вращает три верхних элемента стека (подтягивает вверх10
), так чтоn
печатает10
и;
завершает программу.Спасибо Sp3000 за предложение использовать
@
вместо!
(который сохранил байт).злые отпечатки
11
Спасибо Sp3000 за то, что он прислал мне несколько командных списков для создания однозначных чисел.
Попробуйте онлайн.
зло игнорирует все, кроме строчных букв, поэтому код выглядит так:
Кроме того,
n
влияет на состояние, в котором мы не заботимся, поэтому давайте проигнорируем это. Теперьa
увеличивает регистр (который начинается с0
), иe
это волшебная операция «соткать» зла, которая переставляет биты определенным образом.aeeeaeea
случается, чтобы привести к значению,49
которое является кодом символа1
.ww
печатает это дважды.Отпечатки пробелов
12
Попробуйте онлайн.
Хорошо, мы знаем, что Whitespace только читает пробелы, табуляции и переводы строк, поэтому давайте напишем код, который видит Whitespace, с помощью
STL
:Это две команды:
Первый толкает номер
12
. Конкретно,SS
начинается числовой литерал. СледующимS
является знаковый бит (положительный). Тогда все, вплоть доL
двоичного представления числа. Есть тонна ведущих нулей, которые нам нужны для Звездного, но они не влияют на число. ТогдаTTSS
s12
в двоичном. Интересный факт: если бы я добавил 16-й язык, я мог бы сохранить здесь байт, потому что Starry мог бы использовать четыреS
в двоичном представлении16
. Я сомневаюсь, что буду, хотя ...TLST
Просто печатает вершину стека как число. (TL
помечает команду как команду ввода / вывода иST
печатает числа.)Отпечатки деления
13
Попробуйте онлайн.
Fission видит только эту часть кода:
L
начинает управление потоком с левым атомом."
переключает режим печати, так что31
просто печатает13
. Затем атом захватывается в клин<
, который завершает программу.> <> печать
14
Проверено здесь.
Различить> <> и Gol> <> не так просто, как я думал, потому что Gol> <> почти всегда делает то же самое, что и> <> для команд, которые существуют в обоих, и команд, которые существуют только в Gol> < > вызвать> <> сбой. Тем не менее,
@
вращается в обратном направлении в> <>, так что он толкает вниз7
вместо подтягивания вверх10
, а затем14
печатается вместо вместо10
.GolfScript печатает
15
Попробуйте онлайн.
Этот
#
самый простой: комментирует первую строку. Затем15
выдвигает себя и}
представляет собой «супер комментарий», который игнорирует всю остальную часть программы. Таким образом,15
это напечатано в конце программы.источник
Python 1.x, 2.x и 3.x, 32 байта / 3 ^ 3 = 1.1851 ...
Печатает первый номер версии, которая находится
1
в Python 1.x,2
в Python 2.x и3
в Python 3.x.К тому времени, как мы получим Python 9.x, мой счет будет великолепным
0.04389
!: ~)!
источник
1
потому что это первый символ строки «10.whothing»?3 языка, 2 байта / 27 = 0,074
Ну, это бьет половину представлений по крайней мере: P
1. GolfScript
GolfScript игнорирует
P
, выводя только 1. Попробуйте онлайн .2. Пар
P
2 к власти, так1P = 2^1 = 2
. Попробуйте онлайн .3. Серьезно
P
дает n-е простое число, индексированное нулями. Мы получаем 3, так как это второе простое число. Попробуйте онлайн .Примечания
Моей первоначальной целью было найти правильный ответ в 1 байт. Моей первой попыткой было то,
\x12
что работает в Bubblegum и gs2 , но для этого требуется минимум три языка.\x13
будет работать, если есть язык, на котором это выводит 1.Отказавшись от однобайтового ответа, я перешел на два байта.
3u
это близкий вызов, выводящий 1 в Japt , 3 в GolfScript и 4 в Seriously, но было трудно найти язык, который вывел бы 2, чтобы заполнить пробел.Все это заняло у меня слишком много времени: /
источник
6 языков - 44 байта / 6 ^ 3 = 0,204 ...
Спасибо SnoringFrog за сохранение 10 байтов!
Работает в:
Примечание: перед тем, как попробовать онлайн, обязательно замените S пробелами и T на табуляцию или преобразуйте следующий hexdump в ASCII
Я собираюсь попытаться использовать больше языков программирования :)
Befunge (печать
1
):Попробуйте онлайн
Пиф (печатает
2
):Попробуйте онлайн
Brainfuck (отпечатки
3
):Попробуйте онлайн
Гексагония (отпечатки
4
):Попробуйте онлайн
Более читаемая версия:
Пробелы (отпечатки
5
):Попробуйте онлайн
Так как другие символы игнорируются, кроме пробелов и табуляции, нам остается следующее:
AniRad версия 0.2 (печать
6
):Каким-то образом это работает для версии 0.2, но выдает ошибку для версии 0.4. Понятия не имею почему. Вы можете найти версию 0.2 здесь . Для этого вы можете скопировать и вставить код интерпретатора в repl.it и запустить его. После этого вам нужно только вставить программу в STDIN и запустить ее.
источник
SSSSSSSSSSTTSTSTLTLSS
вас есть сейчас, вы можете сделатьSSSTSTLTLST
. Это подтолкнет буквальный 5 на стек, затем печатается как целое число67 языков,3237 байт, оценка0,148 ...37/7 3 ≈ 0,107872 ...Brainfuck-нг
+
увеличивает текущую ячейку,!
печатает как целое число,@
выходит.#
и"
являются NOP.Python 2
Первая строка - комментарий. Используя целочисленное деление, вычисляет
4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2
и печатает результат.Python 3
То же, что и предыдущий, но с делением поплавка.
4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3
,Lua
--
начинается комментарий, а#
в первой строке находится комментарий, так что в основномprint(4)
.> <>
#
отражает IP,5
нажимает 5,n
печатает число и;
выходит.Befunge
#
пропускает+
,!
логически отрицает вершину стека,"@\"
толкает строку@\
,6
толкает 6,.
печатает число и@
выходит.Pyth
#
запускает бесконечный цикл, исключая любые ошибки.7
печатает 7, затем следует,+!"string")
что в основном вызывает ошибку из-за отсутствия двух операндов для+
завершения программы.источник
JavaC ++ C, 363/27 = 13,4 ....
Java печатает 1, C ++ печатает 2, C печатает 3. Не нарушая здесь никаких записей (потому что Java), но мне действительно нравится умный, оскорбительный способ создания полиглота на этих языках, который я обнаружил.
Это беспорядок. Вот разбивка того, как это работает. Литералы Unicode (
\u000a
иначе называемые переводом строки и\u002a
иначе*
) расширяются компилятором Java в их действительные символы. Итак, вот что видит компилятор Java:Все эти вещи в начале игнорируются, потому что все они заключены в многострочный комментарий (
/* ... */
). Позже мы увидим, что смешивание однострочных и многострочных комментариев позволяет нам точно контролировать, какие части закомментированы на каждом языке. В основном методе мы начинаем многострочный комментарий, а затем имеем//*/
. Обычно это был бы однострочный комментарий, но так как мы находимся в многострочном комментарии, он//
ничего не делает, позволяя*/
закрыть его.Это эквивалентный код Java с удаленными комментариями:
Вот что видит компилятор C / C ++ (я удалил литералы Unicode, так как они не раскрываются компилятором и поэтому ничего не делают):
Здесь однострочные комментарии переопределяют многострочные разделители комментариев в начале, поэтому все
#define
s и#include
get предварительно обрабатываются. Далее, многострочные комментарии используются для комментирования кода boiletplate для Java. Это эквивалентный код с удаленными комментариями:Стандартный трюк с полиглотом C / C ++ (the
#ifdef __cplusplus
) используется для определения токенаo
как или,"2"
или"3"
, в зависимости от того, компилятор кода - компилятор C ++ или C. Далее мы определяем функцию,p
которая принимает один (игнорируемый)int
аргумент и вызываетprintf
, используя наш недавно определенныйo
токен. Как обычно, возвращаемое значение не учитывается, поскольку мы не в строгом режиме. Далее мы определяемstruct
с одним членом указатель на функцию, чья подпись соответствуетp
s, и создаем единственный экземпляр с именемout
. В основном методе (мы оставляемint
как обычно), адресp
присваиваетсяout.print
(так называемыеout.print
вызовыp
), и он вызывается.Если бы C ++ не был включен в языки, мы могли бы отбросить весь код препроцессора и определить
p
какint p(int a){puts("2");}
. К сожалению, C ++ требует#include
ввода / вывода. Если C не был включен, мы могли бы отбросить определениеp
и#ifdef
макрос препроцессора и напрямую определить функцию-членstruct
вместо того, чтобы нуждаться в указателе функции. К сожалению, C не поддерживает функции-члены.источник
4 языка, 28 байтов / 64 = 0,4375
1. Python 2
0
является ложным и/
целочисленным делением, так2. Perl (также Python 3)
0
является ложным и/
является делением поплавка, так3. Рубин
0
правдиво и^
поразрядно xor, так4. Луа
0
является правдой и^
возведением в степень, такОбратите внимание, что Lua и Ruby не могут добавлять логические значения, как если бы они были целыми числами, поэтому их можно объединять в группы. К сожалению
0and
, в Lua не работает, поэтому мы не можем сохранить там байт.Предыдущая 17-байтовая версия, которая печатает 1 (Lua), 2 (Ruby), 3 (Python / Perl):
-3 байта спасибо @xnor за эту версию, что делает ее намного аккуратнее :)
источник
2^(0 or 1)
работать?BFSRS> <> funge93thon123, 73/343 ≈ 0.212827 ...
Brainfuck, Серьезно ,> <>, Befunge-93, Python 1, Python 2, Python 3
Содержит непечатные, hexdump (обратимый с
xxd -ps -r
):Я буду добавлять больше языков (и, вероятно, байтов) с течением времени. Языки в заголовке перечислены в порядке их печати. Предполагается 8-битные ячейки обертки и лента, которая не будет жаловаться на то, что она ушла влево от начальной позиции (обтекания или бесконечной) для Brainfuck
Brainfuck:
Серьезно :
><>
:Befunge-93:
Питон 1 (спасибо, мутная рыба):
Python 2 :
Python 3 :
источник
3
на4
)14 языков, 73 байта, оценка = (73/14 ^ 3) = 0,02660349854
Я могу добавить еще несколько языков, но я думаю, что я добавлю то, что у меня есть здесь.
1. Brainbool ; Попробуйте онлайн!
Соответствующий код:
Это действительно просто
+.+
, который выводит 1.2. Джольф ; Попробуй это здесь!
Символ
(
перестает интерпретировать исходный код, поэтому соответствующий код:Это эквивалентно (в JavaScript)
Какие выходы 2.
3. Элемент; Попробуйте онлайн!
Соответствующий код:
Это захватывает
3
и печатает это.4. Brainfuck ; Попробуйте онлайн!
Соответствующий код:
Что является стандартным способом генерации 4-х символьного кода и его вывода, а также некоторых других вещей после него.
5. Ренг; Попробуй это здесь!
~
завершает программу, поэтому соответствующий код здесь:#
Y
в этом случае переопределяется как TOS0
.2
толкает 2;(
вращает стек N раз, выталкивая N из стека;3`
толкает -3; и наконец,5n
печатает5
.6. ЭТА; Попробуйте онлайн!
ETA читает только буквы E, T, A, O, I, N, S, H, поэтому выполняется только следующий код:
Супер-релевантный код:
Или, что то же самое:
nthne o
.n...e
является литералом base-7 иthn
является числом base-7 для 54.o
выводит этот символ. Ошибка представления, но я не знаю почему.7. Питон 3
Что он видит:
15/2
дает 7,5, как/
и деление поплавка.int(...)
делает число int, которое затем печатается. Ошибка программы при+3
обнаружении.8. Юлия
Юля видит:
Вместо усечения 15/2 Джулия округляет ее, получая 8. Она печатает это, затем выдает ошибки при встрече с +3.
9. Деление; Попробуйте онлайн!
Соответствующий код:
Я получил эту идею из части Мартина Fission (больше как украл ее).
L
начинается с левой стороны, захватывает9
и заканчивается<
.10. Пробелы; Попробуй это здесь!
Соответствующий код, перевод пробелов в
S
и табуляции вT
:Он помещает 10 в стек и выводит его как число (
T\nST
).11. Питон 2
Python 2 видит это:
(int(15/2))+3
оценивается как 11, и это напечатано.12. Гол> <>; Попробуй это здесь!
Соответствующий код:
Это использует трюк, использованный в ответе Мартина, который
@
вращает разные направления в> <> и Gol> <>.#
зеркала,c
толкает 12,d
толкает 13,0
толкает 0, и@
приводитc
к вершине стопки, затем выходит наружу и печатается с;n
.13.> <>; Попробуйте онлайн!
Соответствующий код:
Опять же использование этого
@
вращает разные направления в> <> и Gol> <>.#
зеркала,c
толкает 12,d
толкает 13,0
толкает 0, и@
приводитd
к вершине стопки, затем выходит наружу и печатается с;n
.14. Гольфскрипт; Попробуйте онлайн!
Что он видит:
Это толкает
14
,print
S, и ошибки.Украденныйвдохновлен ответом Sp3000 .источник
Subskin , Brainfuck и Fob 27 байтов / 3 ^ 3 = 1
Subskin
Мы устанавливаем указатель инструкции (здесь не имеет значения)
0
и регистр вывода в31
. Если содержимое выходного регистра равно>= 0
, мы выводим содержащее значение какchar
. Весь другой код игнорируется.Brainfuck
Добавляет
3
в регистр, уменьшает значение один раз с-
и, наконец, выводит с.
.надувать
Это немного сложнее, так как Brainfuck также читает
<
и>
инструкции Fob. Мы входим в режим выполнения с#
и увеличиваем указатель Brainfuck на единицу, что облегчает нам позже. Нам пока нечего выполнять, поэтому ничего не выполняется.Мы входим в режим аккумулятора с помощью
$
, добавляем a3
, снова входим в режим выполнения, помещаем содержимое аккумулятора в стек с помощью<
и, наконец, выводим содержимое с помощью>
.Чтобы Brainfuck не прикоснулся к программе, мы снова входим в режим накопления нажатием
$
.источник
7 языков, 55/7 ^ 3 ≈ 0.16035
Работает в PowerShell v1, v2, v3, v4 и v5, Foo и Pyth
Цифры 1-5 используют аналогичную логику для ответа Свирпотато .
$PSVersionTable
Специальная переменная была введена в PowerShell v2, и содержит полный список сборки, ревизии и т.д. Вот пример вывода переменной:В этом коде мы сначала сохраняем его
$p
так, чтобы длина кода была меньше. Затем мы проверяем его существование, используя переменную как индекс в массиве из двух элементов:$NULL
, значение!
которой равно$TRUE
или1
, что соответствует второму элементу в массиве, который выводится1
.!
переменная приводит к$FALSE
или0
, который указывает на первый элемент, который выводит номер версии.Используя Foo для 6, мы используем этот
#
комментарий в PowerShell, поэтому он игнорируется при его выполнении в среде PS. Тем не менее, Foo с удовольствием выплюнет номер6
и затем продолжит выполнение остальной части программы, которая ничего не делает.Используя Pyth для 7, мы возвращаемся
7
, а затем немедленно завершаем работу.q
, поэтому бесконечный цикл while-true, который начался с,#
не имеет значения. Так как у нас есть что-то, что неявно печатается. Спасибо @ FryAmTheEggman за это дополнение.Редактировать - Гольф несколько байтов благодаря Mauris Редактировать - разъяснение Pyth объяснение благодаря Sp3000
источник
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]
? Это работает на моем Powershell, но, возможно, не на всех предыдущих версиях.7 языков, 287/7 ^ 3 = 0,836
Вероятно, самый низкий балл, который я получаю, так или иначе, мне нравятся эти 3 версии полиглота C.Добавлено скучное решение Python, чтобы хотя бы претендовать на награду «3 уникальных» языка.
Добавил Java, использовав триграфы C для разных интерпретаций комментариев.
Работает в:
Python 1
Python 2
Python 3
C89
C99
C ++
Ява
версия для гольфа:
Ungolfed:
Хорошо, это, наверное, немного устало, и я надеюсь, что мои знания английского достаточно хороши, чтобы объяснить это обычным путем.
Прежде всего я объясню различные виды комментариев, которые я использовал для инкапсуляции языковых структур, каждый из которых имеет свои собственные.
Итак, давайте возьмем первый блок:
Для Java это только начало многострочного комментария. Но ... в C99 / 89 / ++ это оценивается как
Так
??/
как это триграф, в\
то время как в C\
символ является своего рода непротиворечивым и даже использует разрывы строк в своей командной функциональности. Это приводит к тому, что результат «\n
просто отображается» вместо разрыва строки. это означает, что данный байтовый массив, представляющий первый блок: [/
] [*
] [\n
] [*
] [?
] [?
] [/
] [\n
] [/
] будет после оценки триграфа: [/
] [*
] [\n
] [*
] [\
] [\n
] [/
] Там, где согласованная функциональность\
триггеров и «потребляет»,\n
оставшиеся и финальные в C langs оцененные байты: [/
] [*
] [\n
] [*
] [/
]Но обо всем этом ява ничего не знает и рассматривает все, что следует, как комментарий, пока этот трюк не будет отменен.
(продолжение следует!)
источник
4 языка (Befunge-93, Microscript II, Microscript и Foo), оценка 7/64 = 0,109
Предостережение: нажмите 4, нажмите 1, напечатайте 1 и завершите.
Microscript II: создайте строку «4», отбросьте ее, возьмите квадратный корень из одного, отбросьте ее и, наконец, установите x в 2. Затем она будет напечатана неявно.
Microscript: толкнуть 52 в стек (который фактически никогда не будет использоваться для оставшейся части программы), увеличить регистр (изначально ноль) на единицу, затем увеличить регистр на два. Это тогда напечатано неявно.
Foo: выведите строку «4», затем нажмите 2
источник
Python 1 | 2 | 3, 27 байт / 27 = 1
Использование @ 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 и далее. Почему? Потому что(Из того, что нового в Python 2.0 )
источник
Python 3, Ruby, Perl, C, C ++, Objective-C 202 байта / 6 ^ 3 = 0,935 ...
На самом деле это было довольно весело, и много играть с булевыми значениями.
Вы можете просмотреть все версии кода на следующем сайте , скопировав и вставив код в интерпретатор.
Python 3, печать
1
Хитрость заключается в следующем:
Это напечатает
1
Рубин, принты
2
Интерпретированный код для Ruby:
Так что это печатает
2
Perl, печать
3
Интерпретированный код для Perl:
Прежде всего,
__DATA__
токен сообщает компилятору Perl, что компиляция завершена. Все после игнорируется.И печатает
3
С, печать
4
Интерпретированный код сильно отличается от других:
Это просто напечатает символ
4
.C ++, печать
5
Такой же, как код С
Это напечатает символ
5
.Objective-C, печать
6
Такой же, как код С
Это напечатает символ
6
.источник
5 языков, 18 байт / 5 ^ 3 = 0,144
Работает в Brainbool , Mathematica , Foo , > <> и Befunge-93 .
Brainbool
Brainbool похож на Brainfuck, но он работает только с битами, а его вход и выход состоит исключительно из
0
и1
.Mathematica
В Mathematica все является выражением и имеет значение.
Print@2
печатает2
и возвращает символNull
. После этого код выполняет некоторые символические вычисления, но ничего не печатает.Foo
"3"
3. Я не знаю, что делают другие части.> <>
Befunge
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 и > <> .
источник
6 языков, 38/6 ^ 3 = 0,17592̅5̅9̅
Пробелы , Брейнфук, Рубин, Лабиринт , Фу, Серьезно
Условные обозначения:
£
: вкладка•
: пространство§
: 0x7fЭто содержит непечатаемые символы, поэтому вот hexdump:
7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a
Объяснение:
Пробелы
Попробуйте онлайн. (Примечание: моя программа пропускает закрывающие три перевода строки, чтобы завершить программу, я написал / протестировал это на Whitelips, и это дает правильный вывод там, но не на Try It Online, поэтому в связанной программе эти два символа добавлены. как я могу сказать, некоторые интерпретаторы позволяют вам это делать, другие застревают в бесконечном цикле без явного завершения)
(без учета игнорируемых символов)
spacespacespacetabenter: вставьте 1 в стек
tabenterspacetab: вывести вершину стека
Рубин
Не нужно объяснять. Prints 2, обрабатывает оставшуюся часть этой строки (ergo, программа brainfuck) как комментарий, рассматривает остальную часть файла как пустую.
Brainfuck
Попробуйте онлайн.
Требуется переводчик, который поддерживает underflow. Недополняет первую ячейку до 255, а затем использует ее для счетчика цикла, чтобы сгенерировать 51, что является кодом ASCII для 3.
Лабиринт
Попробуйте онлайн.
(пропуская последние две строки для удобочитаемости, потому что они никогда не достигаются)
Foo
Попробуйте онлайн.
Единственное, что влияет на вывод, это «5», который печатает 5.
Шутки в сторону
Попробуйте онлайн.
источник
5 языков, Chaîne , Minkolang , Foo , Brainf ** к-нг и Vitsy , 21/5 ^ 3 = 0,168
Brainf ** к-нг
Chaîne
Foo
Minkolang
Vitsy
Я, вероятно, могу добавить> <> или что-то.
источник
Craneflak , Brain-Flak Classic , Rain-Flak , BrainHack , Brain-Flueue , Miniflak , miniHack : .1020
Попробуйте онлайн!
объяснение
Первое, что здесь происходит, заключается в том, что существует разница в способе чтения комментариев между интерпретаторами BrainHack, CraneFlak и Rain-Flak. Craneflak не имеет комментариев, в Rain-Flak
#
комментирует остальную часть строки, а в BrainHack#{...}
- внутренности.Итак, вот что читает каждый язык:
Следующее - это разница между мозговыми мозгами и минифлаками. И Rain-Flak, и BrainHack поддерживают минифлаки, где все лишние операции просто удаляются. Это означает, что они теряют
[]
и<...>
Далее у нас есть разница между Brain-Flak и Brain-Flak Classic. В Классике
[]
есть-1
вместо высоты дымовой трубы, а это значит , что наш результат 1 меньше , чем в обычном Дожде-Flak, что делает его 2.Наконец, у нас есть разница между мозговыми змеями и мозговыми отходами. В потоке мозга вместо стека используется очередь. Обычно мозговые затычки толкают 3, затем 5 и отбрасывают 5, но при потоке мозга поп избавляется от 3, а не от 5.
источник
Млечный Путь 1.0.2 , CJam и STXTRM , 20 байтов / 3 ^ 3 = 0,741
Я думаю, что есть по крайней мере еще один язык, который я мог бы добавить.
объяснение
Млечный Путь ,
1
В Млечном Пути строки обозначаются только парами двойных кавычек. Одиночная кавычка читает ввод из командной строки; если его нет, он выдвигает пустую строку. Знаки больше чем и меньше повернут весь стек вправо и влево соответственно. Наконец, точка с запятой заменяет два верхних элемента стека.
Вот визуализация стека (показанный стек является результатом перечисленной операции после того, как она произошла):
CJam ,
2
В CJam строки также обозначаются двойными кавычками. Одиночная кавычка выдвигает код символа следующего символа. Когда код символа выводится, он выводится как соответствующий ему символ. Знаки «больше» и «меньше» действуют как ожидалось, оценивая порядок двух верхних элементов стека. Наконец, точка с запятой отбрасывает верхний элемент стека. По завершении программы содержимое стека выводится.
Вот визуализация стека (показанный стек является результатом перечисленной операции после того, как она произошла):
STXTRM ,
3
В MSM все, что не является оператором, помещается в стек как символ. Точка с запятой дублирует верхний элемент стека. Программа продолжается до тех пор, пока не останется больше операторов или пока в стеке не будет одного элемента.
Последний символ в стеке
3
, который дублируется последним оператором.3
это самый верхний элемент в конце программы, поэтому он выводится.источник
5 языков, 18 байтов / 5 ^ 3 = 0,144
Уроборос , Пип , QBasic, Foo и Pyth
1. Уроборос
Каждая строчка программы представляет собой змею, которая ест свой хвост.
Змея 1
Push
5
,'
это неоперация, push52
(код ASCII"4"
).(
заставляет змею сунуть число и съесть столько символов своего хвоста. Так как это приводит к проглатыванию указателя инструкции (и всей змеи), выполнение останавливается.Змея 2
Нажмите
1
, нажмите случайное число (?
), нажмите3
,'
это не работает.@
поворачивает1
верхнюю часть стека иn
выводит его как число, оставляя3
верхнюю часть стека. Затем(
съедает столько символов с конца змеи, проглатывая указатель инструкций и останавливаясь.Вы можете запустить эту программу онлайн в интерпретаторе Stack Snippet здесь .
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 не вызовет синтаксическую ошибку перед выполнением.источник
4 языка, 24 байта, 24/4 ^ 3 = 0,375
1. PHP
PHP выполняет,
print(1);
который равен 12. Луа
Lua выполняет,
print(1//0.5);
который равен 23. Python 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 (деление поплавка)источник
Brainfuck-ng, Foo,> <>, 9 байт / 3 ^ 3 = 0,333 ...
Brainfuck-нг
Единственные персонажи он признает это
+
и!
:Печать
1
Foo
Печатает все в кавычках.
Печать
2
> <>
#
Зеркально отображает точку слева,3
помещает 3 в стек,n
выводит его как целое число,;
останавливает программу.источник
3 языка,
8283/3 ^ 3 = 3,074 ...Работает в ??? , Пробел и битник . Вернее, он должен работать на этих языках, но я не смогу протестировать их в течение нескольких дней. Во всяком случае, вот код:
1. ???
??? в основном брейкфак, но он использует обычные знаки препинания в качестве команд вместо традиционных символов.
.
увеличивает текущую ячейку памяти, что делается 49 раз.!
принимает текущую ячейку памяти и выводит его как символ, здесь1
.2. Пробелы
Пробел - это язык, который игнорирует все непробельные символы. Здесь я преобразовал это в легко читаемую форму. Первая строка помещается
2
в стек, а вторые две строки здесь печатают верхнюю часть стопки как число2
.Обратите внимание, что в объединенном коде я заменил вкладки четырьмя пробелами из-за технических ограничений.
3. Битник
Beatnik - это язык, в котором каждое слово конвертируется в его оценку по скрэбблу, тогда эти оценки интерпретируются как команды. Первая строка помещается
17
в стек. Вторая строка дублирует вершину стека дважды, а третья строка добавляет вершину к элементам стека дважды, эффективно увеличивая17
в три раза51
. Последняя строка печатает символ на вершине стека, здесь3
.Обратите внимание, что я использую Beatnik по номинальной стоимости, предполагая, что в исходной спецификации Beatnik нет ошибок. Также обратите внимание, что я использую североамериканскую систему оценки английского скрэббла.
Если сейчас это неясно, каждый из этих языков принимает только определенный тип символов (знаки препинания, пробелы и буквы соответственно), поэтому написание этого полиглота было так же просто, как написание отдельных программ. Единственный реальный трюк - использование пробельного кода для отделения слов от битника. Кроме того, отдельные программы не перекрываются вообще.
источник
5 языков, 175/5 ^ 3 = 1,4
Я решил опубликовать другой ответ, так как щедрость изменяет требования таким образом, что я чувствую себя неуверенно с моим первым ответом (но который все еще удовлетворяет меня на пути общего вызова!)
Итак, вот мое решение, которое подходит для конкурса щедрости:
Компилируется в
источник
3 языка, 15 байтов, оценка 0,555 ...
Позже добавлю больше языков.
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.источник
4 языка, 97 байт, 0.37890625
Рубин
Это устанавливает
s
для"1"
, сопоставляется с использованием=~
против-3
в пустом контексте, пытается разделить2
на/2;'''/.to_s.ord
то начинает новую строку , содержащую=;print 4; __DATA__ =1;
, ударяется комментарий, тоprint
s ,s
который до сих пор1
.питон
Наборы
s
до ,"1"
как указано выше, а затем устанавливает его снова~-3
который2
. Мы выполняем целочисленное деление2//2
, затем есть строка документации/.to_s.ord;"=;print 4; __DATA__ =1; ";#
, за которой следует комментарий, наконец,print
ings
, который все еще2
.JavaScript
Наборы
s
для"1"
затем устанавливает его снова ,~-3
как указано выше, то есть2
на линии с последующим комментарием. Затем мы устанавливаем переменную__DATA__
в1
. Есть короткая строка, содержащая;#'''#
определение функции,print
которая жестко закодирует вывод в 3, который вызывается на следующей строке.Perl
Запускает замену, эквивалентную
s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/
,print
s,4
а остальная часть строки маскируется за__DATA__
идентификатором.источник
QBasic, QBIC и> <>, 18 байт / 3 ^ 3 языка = 0,66666 балла
Сломать:
1. QBasic ( получить IDE )
2. QBIC ( получить переводчика )
3.> <> ( попробуйте онлайн )
источник
JavaScript, HTML и PHP, 72 байта / 3 ^ 3 = 2,67
В HTML это выведет первую 1, игнорируя
<!window?2:2//>
тег, а остальное - HTML-комментарий.В JavaScript он оценивает
1<!window?2:2
и выводит 2 (это нужно запустить в консоли), а остальное - комментарий.В PHP следующее выводится с сервера:
1<!top?2:2//><!----><script>document.body.innerHTML=3</script>
заменяющий языка HTML1
с3
.источник