Как известно ,
Чак Норрис считал до бесконечности. Дважды
Чак Норрис может считать до бесконечности задом наперед.
Кроме того, хотя, возможно, менее известный, Чак Норрис может говорить немного по-испански в дополнение к английскому.
Соревнование
Напишите программу (или функцию), которая может быть запущена на двух разных языках. На одном языке программа должна вывести последовательность
1, 1, 2, 2, 3, 3, 4, 4, ...
и на другом языке это должно произвести последовательность (включая ведущие нули)
1, 2, ..., 9, 01, 11, 21, 31, ..., 89, 99, 001, 101, 201, ...
правила
- Программы или функции разрешены на любом языке программирования . Стандартные лазейки запрещены.
- Разные версии одного и того же языка (например, Python 2/3) не считаются разными языками. Связанные языки (такие как C / C ++ или Matlab / Octave) считаются разными.
- Вход не будет принят.
- Программа должна продолжать выводить условия последовательности, пока пользователь не остановит ее. Поскольку программа не остановится сама по себе, вывод не может быть произведен в конце. Он должен создаваться во время работы программы, либо непрерывно, либо партиями.
- Вывод может использовать STDOUT или эквивалентный, или может отображаться в графическом окне. Разрешается использовать любой нечисловой разделитель между членами последовательности, если каждый член может быть четко отделен от соседних терминов. Также допустимо, если экран очищается между терминами.
- Любая последовательность может начинаться
0
вместо1
. В этом случае в последовательности «дважды»0
следует повторить, как и другие числа. - Ведущие нули значимы в последовательности «назад». Так , например, термин десятый
01
; ни то,1
ни другое не001
приемлемо. - Если два языка используют разные кодировки символов, программа определяется ее байтами , а не символами. То есть байты должны быть одинаковыми на двух языках.
- Самый короткий код в байтах побеждает.
Ответы:
05AB1E / Желе ,
1413 байт-1 байт благодаря Аднану (избегайте трехкратного дублирования с не всплывающей печатью)
Необработанные байты (шестнадцатеричные):
В 05AB1E «S кода-странице :
Попробуйте онлайн!
В Jelly «S кода-странице :
Попробуйте онлайн!
Как?
Программа 05AB1E печатает двойной счет с каждой записью, разделенной новыми строками :
Программа Jelly печатает обратный счет с каждой записью, разделенной новыми строками.
Парсер будет обрабатывать действительный литерал между
[
и]
как вложенный литерал, в противном случае эти байты являются неопределенными токенами и, как таковые, становятся эквивалентными токенам, разделяющим код на строки.==>
не анализируется как литерал, поэтому код эффективен:источник
Ð,,
на==
.Python 2 / C (лязг) ,
10910710084958889888784 байтаPython: попробуйте онлайн!
C: Попробуйте онлайн!
L в коде Python является частью разделителя.
Объяснение:
В коде C сначала устанавливается значение i, равное 0. Затем начинается комментарий (
#
это допустимый код в C для#include
операторов), куда идет код Python. В конце комментария он определяет функцию, которая навсегда увеличивает переменную и печатает ее дважды, разделив пробелом. Затем начинается комментарий.В коде Python
i=0;
устанавливает i в ноль. Python игнорирует следующую строку, потому что#
начинает однострочный комментарий. Затем он всегда увеличивает его на единицу, превращает в длинное число и печатает его перевернутое строковое представление. «L» от длинного является частью разделителя. После этого он запускает многострочную строку для комментария к коду C, который заканчивается позже.-2 байта благодаря @LuisMendo. -7 байт благодаря @ZacharyT. -6 больше байтов благодаря @ZacharyT. +11 байт, чтобы исправить ошибку благодаря @ mbomb007. -7 байт благодаря @ Doorknob. +1 байт, чтобы исправить ошибку благодаря @ Doorknob. -1 байт благодаря @yoann. -1 байт благодаря @yoann. -3 байта благодаря @Cyoce.
источник
a(i){printf("%i %i ",i,i);a(i+1)}
while
цикл для кода C?`i`
вместоstr(i)
for(;;)printf("%i %1$i ",i++);
чтобы сохранить один байт.1$
Является позиционным аргументом , который говорит ,printf
чтобы отобразить первый аргумент (после строки формата).Желе / пит, 15 байт
Непечатные файлы искажаются программным обеспечением SE, поэтому вот hexdump:
Беги с
jelly f file
иpyth file
соответственно.объяснение
Сначала идет часть Pyth.
.V
запускает бесконечный цикл по возрастающей последовательности, начиная со своего входа, который здесь1
. Затем мы обращаемся (_
) к`
циклу stringified ( ) index (b
) и неявно выводим его. Он;
предназначен для завершения цикла, и"
он необходим для обработки остальной части программы как строкового литерала, чтобы синтаксический анализатор не подавился им.Часть Jelly будет объяснена первым переводом оставшейся части программы с кодовой страницы Jelly:
¶
Выступает в качестве корма линии, эффективно игнорируя первую часть программы, сделав его ссылку , которая никогда не называется. Затем мы запускаем1
и запускаем цикл while (¿
), который используетṄṄ$
(печатает дважды) в качестве условия и увеличивает (‘
) значение в качестве тела цикла.Кстати, заменив часть Pyth с
1[DR,>]
бы создать действительное представление Желе / 05AB1E в 14 байт, но в настоящее время interpeter содержит ошибку , которая предотвращает это.источник
Perl / JavaScript, 87 байт
Perl
Механизм Я использовал много полиглотов JS / Perl является злоупотребление тот факт , что замена может принимать почти любой разделитель, с помощью
=
средства можно использовать начальные бессмысленные замены (первый замена0;print
сconsole.log;m
с флагом/s
в$_
, который в настоящее времяundef
) , то установка$_
в результате заменыs
сs
в режиме многострочного (/m
), который является0
. Теперь$_
есть0
и я начинаюwhile
цикл, это те приращения$_
. Затем я вызываюprint
, передавая соответствующее регулярное выражение (из-за того, что||
в конце совпадает с пустой строкой), и использую&&
оператор, чтобы затем отправить обратную$_
конкатенацию с символом новой строки ($/
предварительно инициализирован в"\n"
). Это считается до бесконечности в обратном направлении.JavaScript
Здесь много переменных назначений, замаскированных в
s///
вызовах Perl . Я создал переменныеs
и ,m
как0
, псевдонимconsole.log
дляprint
, запустить некоторое бессмысленное деление, набор$_
для0
и начатьwhile
цикл увеличивающийся$_
, вызовprint
проходит в0
(m/s
это запускает вызовm
в Perl, но рассматриваются как стандартное разделение в JS) , и наша целевая строку ($_+"\n"+$_
) через оператор запятой, который возвращает последний элемент в списке. Я избегаю последнего фрагмента кода Perl (&&reverse.$/
), потому что$_+"\n"+$_
он будет правдивым, и поэтому я могу использовать его||
для созданияRegExp
объекта, содержащего конец кода Perl, который никогда не обрабатывается.Протестировано с использованием Perl 5 и Node 6.
источник
NodeJS / PHP,
131106 байт-25 байт благодаря @Titus
Использование NodeJS вместо браузера JS для лучшего форматирования вывода и лучшей обработки бесконечного цикла.
Попробуйте JavaScript онлайн
Попробуйте PHP онлайн
Обратите внимание, что выход TIO обрезается после 128 КБ.
источник
<!--←printf=(_,i)=>process.stdout.write(i),strrev=i=i>>1//--><?←for($i=0;;)printf("%s ",strrev($i++));
. 84 байта (но не в два раза лучше, чем ваш подход):<!--←for(i=1;;)process.stdout.write(i+" "+i+++" ")//--><?for(;;)echo strrev(++$i),_;
или<!--←for(i=1;;)process.stdout.write((++i>>1)++" ")//--><?for(;;)echo strrev(++$i),_;
.i>>1
повторением числа, но мне пришлось изменить его,write(i)
чтобы включить пробел, и потомуwrite()
что не принимает число. И у вас была опечатка (strrev=i=i>>1
->strrev=i=>i>>1
), которая добавила еще один байт. Закончилось тем, что сделать корочеwrite(i+i)
иstrrev=i=>i+" "
.V / Brain-flak Classic ,
27, 26 байтовHexDump:
Попробуйте онлайн! в V (слегка изменено, чтобы завершить его, чтобы вы могли видеть выходные данные. На TIO V выводит только в случае завершения программы)
Попробуйте онлайн! в классическом стиле
Это не самый интересный из полиглотов, так как код V не влияет на классику мозговых атак, и наоборот, однако очень интересно использовать оба моих собственных языка для испытаний, и эти два решения довольно интересны самостоятельно.
V Объяснение:
Объяснение BFC:
источник
Retina / Python 2, 61 байт
Сетчатка | Python 2
источник
str()
на ``, но, видимо, нарушил код Retina. Не знаю почему?str
, иначе вы получитеL
результаты. Но это на самом деле делает работу в сетчатке. Должно быть, вы изменили больше, чем вы сказали, например, перенесли что-то на другую линию.R / Octave ,
83807871 байт-3 байта благодаря Луису Мендо
#{ }#
является комментарием к блоку Octave, и#
именно так происходит с комментарием для R. Интерпретатор R видит следующую строку только как телоwhile
цикла, а интерпретатор Octave пропускает код Octave прямо вперед.Часть R печатает пары чисел, начинающихся с 1, а часть Octave печатает обратные числа, начинающиеся с 0.
Я полностью ожидаю, что меня обойдут (даже при той же комбинации языков); Я недавно написал так много кода Matlab и R, что решил попробовать.
Попробуйте онлайн! - Октавная ссылка
источник
i=i+1
?+=
не работает в R, так что да, так и должно быть.end
необходимо?while(1)
), вы можете сохранить эти байты.Ruby / Python2:
6864 байтаРубиновая перспектива
простая инициализация переменной:
"#{}"
синтаксис для интерполяции строк Я использую его для выполнения выражения вместо.p
это сокращение дляputs
.loop
создает бесконечный цикл.Затем есть
exec
вещь, но она никогда не оценивается, поскольку бесконечный цикл по определению бесконечен. Необходимоexec
не поддаться синтаксической ошибкой с кодом Python.Перспектива Python
С точки зрения Python, есть общее
i=0
. Далее, Python имеет другой синтаксис для интерполяции строк, поэтому эта строка просто отбрасывается. Далее идет бесконечный цикл, аналогичный тому, что опубликовали другие.источник
Bash / Check ,
5028 байтСпасибо @Doorknob за сохранение нескольких байтов при переходе с Python на Bash
Чтобы Bash:
Это всего лишь некоторые комментарии, которые игнорируются.
Начните последовательность, идущую от 1 до бесконечности, затем передайте результат в
rev
.Проверять:
Это сразу переключается в 2D режим, идем направо.
>
направляет права IP, что не имеет никакого эффекта. Он переносится к началу строки и#
снова попадает в режим 2D. Затем он попадает>
в 1D режим, который толкает 0 в стек. Поскольку он находится в режиме 1D, IP переносится на следующую строку.#
снова переключает IP в режим 2D иv
направляет его вниз.Первый
#
снова переключается в режим 1D.p
выводит TOS как число (но не выдает его), а затем<
печатает новую строку. Это делается дважды, а затем число увеличивается на)
.#
снова переключается в режим 2D, поэтому IP переносится в начало строки, нажимается#
для переключения в режим 1D и т. д.источник
#
для комментариев и может выполнить «обратные числа» задачу очень легко:seq 1 inf|rev
.i=1;loop{puts i.to_s.reverse;i+=1}
на один байт корочеCJam /> <>,
2723 байтаДля CJam:
Попробуйте онлайн! - обратите внимание, что вам нужно подождать до 60 секунд, чтобы увидеть вывод, но он работает в автономном режиме.
Это определяет многострочный строковый литерал, который никогда не используется.
Вторая строка выглядит так:
К> <>:
Начинается строковый литерал.
Содержимое строкового литерала. Каждый из кодов символов индивидуально помещается в стек.
IP оборачивается, чтобы достичь
"
снова, что завершает строковый режим.l
берет длину стека,a
толкает 10 и,
делит. Это дает нам длину стека / 10.:
дублирует,n
печатает как число,a
нажимает 10, иo
печатает как код символа (новая строка).То же самое. Напечатайте число, сопровождаемое новой строкой. Стек снова теперь имеет длину 10 (содержимое исходного строкового литерала находится в стеке).
Затем IP оборачивается
"
снова, что приводит к добавлению еще 10 элементов. В следующий разl
возвращает 20, поэтому печатается 2 и т. Д.Вторая строка никогда не затрагивается IP.
источник
Röda / C (gcc) , 90 байт
Рёда: Попробуйте онлайн!
C: Попробуйте онлайн!
объяснение
Это злоупотребляет тем фактом, что
//
int divison в Röda, но строчный комментарий в C.На обоих языках
main(){}
обозначает основную программу, и они оба вызывают функциюf
с фиктивным аргументом0
.Роды,
a=1//1
делает Int деления и присваивает результат1
кa
. C видитa=1
и делает то же самое, но все после этого присваивания является комментарием для C. Оттуда два языка разветвляются.Röda
У нас есть бесконечный цикл с
while[]
( пустое условие верно ). Внутри этого` $a`
преобразует целое числоa
в строку (с начальным пробелом), после чего[::-1]
переворачивает его (и выводит с завершающим пробелом). Затем значениеa
увеличивается на единицу.Вне цикла while многострочный комментарий начинается
/*
и заканчивается непосредственно перед концом функции.С
Игнорируя оставшуюся часть строки, программа переходит ко второй строке. Мы начинаем с точки с запятой, потому что
a=1
оператор должен быть завершен. После этого мы сталкиваемся с простым циклом for, который печатает итерационную переменнуюa
, дважды на каждую итерацию.Вне цикла for,
/*
он просто игнорирует заключительный*/
комментарий Röda .источник
QBIC / QBasic 4.5 , 58 байт
Это сильно нарушает тот факт, что все строчные буквы воспринимаются интерпретатором QBIC как буквальный код QBasic и поэтому просто передаются на уровень QBasic QBIC. Как оба языка видят этот код рядом:
источник
laserLANG / > <> , 163 байта
В первый раз играю в гольф, поэтому она немного больше, чем могла бы быть. Я хотел использовать> <>, но так как несколько человек уже использовали его для создания второй последовательности, я решил, что хочу попробовать создать первую последовательность.
Попробуйте> <> онлайн!
Для LaserLANG, чтобы попробовать его, нужен автономный переводчик. Это можно найти здесь .
laserLANG
выполнение начинается с
!
которого полностью игнорируется. затем он достигает\
и начинает проходить мимо нескольких символов, которые он полностью игнорирует. Наконец-то доходит до другого\
и начинается самое интересное. Я в основном взял идею за "Привет, мир!" зацикливаться и сгущать это как мог. Это была небольшая проблема, связанная с тем фактом, что LaserLANG только собирается уменьшить / увеличить счетчик памяти, когда счетчик программ перемещается влево / вправо соответственно. Я чувствую, что большинство байтов можно сохранить, выполнив некоторые трюки, о которых я даже не думал.> <>
Выполнение начинается с того,
!
что заставляет его пропустить\
. Затем он продолжается, как будто кода LaserLANG там не было. Я не знал, что> <> имел поддержку только для деления с плавающей запятой, поэтому короткое и простое усечение поначалу немного сбивало с толку.источник
Befunge-98 / > <> , 32 байта
Написал это до того, как увидел, сколько
><>
ответов было. Немного предыстории:\
это оператор изменения направления в> <>, в данном случае это нажатие вниз, в то время как в Befunge это меняет два верхних элемента в стеке. Код Befunge выглядит так:Попробуйте онлайн!
Распечатывает обратные числа, разделенные переводом строки. Befunge печатает пробел автоматически после каждого числа, поэтому каждая цифра разделяется пробелами. Повторно получает последнюю цифру, печатает ее и делит число на 10, пока не станет 0. Затем увеличьте и повторите.
Код> <> сразу переходит ко второй строке.
Попробуйте онлайн!
И это довольно просто. Получите длину стека, напечатайте дважды с новыми строками и оставьте копию длины в стеке для следующего цикла.
источник
Ruby / Stacked , 37 байтов
Попробуйте онлайн!
Это печатает
1 1 2 2
... в Ruby и1 2 3 ... 01 11 21...
в Stacked.объяснение
В рубине:
После удаления комментария это становится:
Единственная соответствующая строка здесь - последняя.
p
возвращает аргумент, поэтомуp p
печатает аргумент дважды.$.
начинается с0
, поэтому$.+=1
увеличивается$.
, возвращая увеличенное значение. Следовательно, каждый номер печатается1
дважды.В сложенном:
Это эквивалентно следующим токенам:
Первые два не имеют отношения (в основном, преобразование
0
в сокращение f Unction). Затем0
помещается в стек. После этого функция[1+:tostr rev out]
помещается в стек.loop
выскакивает эту функцию и выполняет ее бесконечно.Внутренняя часть функции увеличивает вершину стека (
1+
), дублирует ее (:
), преобразует в строку (tostr
), инвертирует (rev
) и выводит (out
). Этот процесс повторяется бесконечно. Поскольку цикл бесконечен, все, что идет после этого токена, по существу игнорируется интерпретатором.источник
> <> / Желе , 37 байт (25 в кодовой странице желе)
Попробуйте> <> онлайн!
Попробуйте желе онлайн!
> <> печатает последовательность в бесконечность дважды, желе считает в обратном направлении.
> <> касается только верхней строки:
И спасибо @ Challenger5 за сохранение некоторых байтов здесь, в переводе строки
Jelly выполняет свой код снизу вверх. Только последние 2 строки актуальны.
источник
><>
коде, имеют кодовые точки ASCII, которые соответствуют кодовой странице Jelly. Я не знаю слишком много об этом бизнесе кодовых страниц, но я думаю, что это привело бы к тем же самым байтам, используемым для представления кода. Символы в нижних строках игнорируются,><>
поэтому не имеет значения, совпадают ли они между кодовыми страницами. Количество байтов было взято из><>
ссылки TIO.","
просто помещает значение ASCII,
в стек, так что вы можете использоватьa
вместо него разделитель новой строки.C (gcc) / PHP ,
1028680 байтВыводит двойную последовательность в C и обратную последовательность в PHP.
Попробуйте это в C!
Попробуйте это на PHP!
Пояснения
С
В C
#
формы препроцессора вещи. Я не очень много знаю о Си, но он не жалуется, когда есть пустая строка для этого материала.//
Формирует линию комментария. A\
в конце строки, по сути, "экранирует" новую строку и делает две строки обработанными как одну. Это также работает для комментариев к строке, поэтому вторая строка рассматривается как комментарий на языке C. Третья строка выполняет вывод чисел с помощью простого цикла for. После этого есть просто комментарий.PHP
В PHP
#
формирует строковый комментарий, поэтому первая строка полностью игнорируется. Во второй строке выводятся числа, поменяемые местами в цикле for, и разделяются ими с помощью\nint main(i){for(;;i++)printf("%d %d ",i,i);}//
(код C, заключенный в строку).источник