Задача проста. Написать переводчика для языка * .
Есть только три действительные * программы:
*
Принты "Hello World"*
Печатает случайное число от 0 до 2 147 483 647*+*
Работает вечно.
Третий случай должен быть бесконечным циклом согласно спецификациям в этом вопросе
Входные данные:
- Ввод может быть выполнен любым приемлемым методом ввода по нашим стандартным правилам ввода / вывода.
- Это всегда будет одна из вышеперечисленных программ
Выход:
- Первый случай должен быть напечатан точно
Hello World
, с разрывом задней строки или без него. - Во втором случае, если целочисленный максимум вашего языка меньше 2 147 483 647, используйте целочисленный максимум вашего языка
- Первый и второй случаи могут выводить на любой приемлемый вывод по нашим стандартным правилам ввода / вывода.
- Третий случай не должен давать никакого вывода.
Подсчет очков:
Поскольку это код-гольф , самый короткий ответ, в байтах, выигрывает.
code-golf
interpreter
code-golf
array-manipulation
sorting
code-golf
halting-problem
code-golf
javascript
code-golf
algorithm
code-golf
arithmetic
code-golf
math
counting
code-golf
math
code-golf
decision-problem
radiation-hardening
code-golf
conversion
bitwise
code-golf
number
decision-problem
code-golf
string
decision-problem
code-golf
random
game
code-golf
ascii-art
graphical-output
code-golf
decision-problem
binary-tree
tree-traversal
code-challenge
array-manipulation
code-challenge
graphical-output
path-finding
test-battery
algorithm
code-golf
integer
factorial
code-golf
binary-tree
code-golf
grid
graph-theory
code-golf
regular-expression
quine
code-golf
encoding
code-golf
king-of-the-hill
javascript
TheOnlyMrCat
источник
источник
0
и2,147,483,647
», это всеохватывающее или исключительное? (Например,0
действительный вывод?)-1
от меня.Ответы:
* 0 байт
Поскольку * не имеет способа чтения ввода, правила по умолчанию позволяют указать, что ввод должен быть дан путем объединения его с программой .
(... Я думаю. Есть условие "по крайней мере вдвое больше голосов, чем голосов", что у меня нет представителя для проверки).
источник
R 69 байт
Попробуйте онлайн!
switch
пытается сопоставить именованные аргументы и, если совпадений нет, выбирает первый безымянный после первого, что в данном случае является бесконечным цикломrepeat{}
.источник
Желе ,
2120 байтМонадическая ссылка, принимающая список символов.
Попробуйте онлайн!
vL’...
также работает (см. ниже).Как?
альтернатива
источник
C (gcc) ,
6663 байтаСпасибо attinat за -3 байта.
Мне нужно только проверить второй символ: если установлен LSB, это
+
(то есть программа "*+*
"), и программа зацикливается. После этого, если этоNUL
, программа была "*
" и мы показываемHello World
; в противном случае он отображает случайное значение («*
», единственная оставшаяся опция.)Попробуйте онлайн!
источник
f(char*s){*++s&1?f(s-1):printf(*s?"%d":"Hello World",rand());}
rand
не гарантируется возвращение достаточно большого значения;RAND_MAX
иINT_MAX
не гарантируется быть одинаковым (и не на реальных компиляторов, например , Visual Studio,RAND_MAX
является32767
, в то время какINT_MAX
это [на современных x86 системах , основанных] на2147483647
значение , указанное в вопросе , что ОП в).Python 2 ,
103938987 байтЯ объединил мой предыдущий ответ с Чес Браунами игрового ответом и получил что - то несколько байт короче.
Случайное число будет между 0 и 2 ** 31-1 включительно.
Попробуйте онлайн!
Предыдущие версии:
103 байта
93 байта
источник
randint(0,2**31-1)
наrandrange(2**31)
.while'*'<i
сохраняет 2randrange(2**31)
наgetrandbits(31)
(последний возвращаетlong
,int
ноprint
не печатаетstr
форму, а неrepr
форму, поэтому конечного результатаL
не будет).i=input()
работает, только если входные данные заключены в кавычки, если вы просто введете обычный*/ * /*+*
, он умрет сSyntaxError
(потому чтоinput
включает в себя неявныйeval
); вам нужно будет ввести'*'/' * '/'*+*'
(или эквивалент вместо двойных кавычек). Я не видел ничего очевидного в стандартных правилах ввода-вывода , которые позволили бы это, а это могло бы означать, что вам нужно было бы использоватьraw_input()
, что стоило бы четыре байта.input()
принимает строку в качестве входных данных и оценивает ее. Я на самом деле не добавляю к вводу, я просто беру строку как ввод, а строки имеют кавычки. Это довольно стандартно, точно так же, как я могу взять массив,[1,2,3]
а не как строку с разделителями, которую я затем должен разделить и проанализировать. Цель сайта не в том, чтобы сделать ввод строгим, а в том, чтобы упростить ввод-вывод, чтобы мы могли сфокусировать код на задаче.Keg ,
-lp
,-ir
302625242019 байт-1 байт с использованием флагов
Попробуйте онлайн!
История ответов
Попробуйте онлайн!
Сокращен
Hello World
до словарной строкиПопробуйте онлайн!
Я никогда не переставал удивляться силе Кег. Кредиты пользователю EdgyNerd для другого сохраненного байта.
Предыдущие версии
Попробуйте онлайн!
Кредит пользователю A__ за сохраненный дополнительный байт.
Старая версия
По сути, принимает входную программу и:
Затем неявно выведите стопку.
4 байта сохранены благодаря тому, что hello world не нуждается в пунктуации.
Попробуйте онлайн! Старая версия
Попробуйте онлайн! Новая версия
источник
Befunge-93 , 54 байта
Попробуйте онлайн!
Аннотированный:
Случайность не однородна. При каждом увеличении существует 50% шанс прекратить увеличение.
источник
Japt , 22/25 байт
Первое решение предназначено для исходной спецификации, имеющей
*<space>
в качестве второй программы, а другое - для обновленной спецификации, которая произвольно изменила ее<space>*</space>
, благодаря EoI за предложенное «исправление».Оба выдают ошибку переполнения при входе в бесконечный цикл третьей программы, но, теоретически, с достаточным объемом памяти (что мы можем предположить для целей кода-гольфа ), будет работать вечно.
Попробуйте программу 1
Попробуйте программу 2
Попробуйте программу 3
Попробуйте программу 1
Попробуйте программу 2
Попробуйте программу 3
источник
*<space>
. У меня нет времени на обновление.UÌ>S
вместо¢
второго троичногоJavaScript (ES7), 66 байт
Попробуйте онлайн! (Привет, мир)
Попробуйте онлайн! (случайный номер)
Попробуйте онлайн! (бесконечная петля)
источник
x=(z=>x())&&x()
будет работать на -1 байт из кода бесконечного цикла, если предположить, что браузер не имеет максимального размера стека вызовов?Желе ,
2321 байтПопробуйте онлайн!
Монадическая ссылка, принимающая один аргумент и возвращающая
Hello World
, случайное 31-битное целое число или бесконечный цикл согласно спецификации.Все варианты:
*
*
*+*
объяснение
источник
Java (JDK) , 83 байта
Попробуйте онлайн!
источник
Python 2 ,
918988 байтПопробуйте онлайн!
2 байта благодаря Джонатану Аллану ; 1 байт спасибо ShadowRanger .
источник
while'*'<p
сохраняет 2getrandbits(31)
сохраняет байты надrandrange(2**31)
.PowerShell,
60, 56 байтДовольно тупая версия, единственная техника игры в гольф здесь опущена
Get-
вGet-Random
.UPD. Урезан до 56 байт, удалив кавычки, благодаря вескам !
источник
Perl 5
-p
,4339 байтПопробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 71 байт
Попробуйте онлайн!
источник
Рубин
-n
, 47 байтовПопробуйте онлайн!
источник
Wolfram Language (Mathematica) , 65 байт
Попробуйте онлайн!
источник
Древесный уголь , 30 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Злоупотребляет стандартным форматом ввода Charcoal, который разделяется на пробелы, если есть только одна строка, поэтому ввод случайных чисел фактически выглядит как три ввода. Объяснение:
Повторите, пока первый вход содержит
*
.Если первый вход
*
только ...... затем замените его на
Hello World
, таким образом, цикл завершится.*+*
не заменяется, что приводит к бесконечному циклу.Если первый вход не пустой, выведите его.
Но если оно пустое, выведите случайное целое число в нужном диапазоне.
источник
Добавить ++ , 78 байт
Попробуйте онлайн!
объяснение
источник
Брахилог ,
2623 байтаПопробуйте онлайн!
Принимает программу как строку через входную переменную и игнорирует выходную переменную. В значительной степени используется гарантия того, что ввод является только одной из трех допустимых программ: любой ввод длины три будет вести себя как один из них
" * "
или в"*+*"
зависимости от того, является ли первый символ пробелом, и любой другой ввод будет вести себя как"*"
.источник
PHP , 51 байт
Попробуйте онлайн! (Привет, мир)
Попробуйте онлайн! (Случайный номер)
Попробуйте онлайн! (Бесконечная петля)
Принимает второй символ ввода, который может быть
''
,'*'
или'+'
. В случае, если'+'
значение'*'<'+'
true, и цикл будет бесконечным, в противном случае после цикла отображается «Hello World» или случайное число.rand()
Автоматически выводит число между 0 иgetrandmax()
который использует определенныхRAND_MAX
в стандартной библиотеке C и по умолчанию находится2147483647
на большинстве платформ / сред, в том числе TIO.источник
05AB1E , 21 байт
Попробуйте онлайн. (ПРИМЕЧАНИЕ: случайное построение довольно медленно с большими списками, поэтому может потребоваться некоторое время, прежде чем будет получен результат.)
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как пользоваться словарем? ), Чтобы понять, почему
”Ÿ™‚ï
это так"Hello World"
.источник
Pyth , 32 байта
Попробуйте онлайн!
Пояснение (Python-ish)
источник
hC*4\ÿ
является^2 32
, но для того , чтобы решение правильным, вы должны использовать^2 31
вместо этого. Кроме того, используйтеz
вместоJw
, сохраняет еще 1 байт. И ваше объяснение пропускает строкуt
прямо перед этимlJ
.+
символ, сохраняет 1 байт, потому что вам не нужно уменьшать его.APL (Dyalog Unicode) , 39 байт SBCS
Анонимный префикс лямбда.
Попробуйте онлайн!
{
"DFN";⍵
это аргумент:'+'∊⍵:
если плюс является членом аргумента:∇⍵
Хвост рекурсивный по аргументу' '∊⍵
если пробел является членом аргумента:?0
случайное плавание (0–1)2E31×
масштаб до (0–2³¹)⌊
пол'Hello World'
еще вернуть строкуисточник
Commodore BASIC (VIC-20, C64, TheC64Mini и т. Д.) - 170 токенов BASIC
Я думаю, чтобы сделать это более точно, мне придется углубиться в странный мир языка ассемблера 6502, но это первый проект.
Первая точка
INPUT
ключевое слово в Commodore BASIC игнорирует пробелы, поэтому подпрограмма в строке9
- это быстрый и грязный способ принимать записи клавиатуры, включая пробелы.Во-вторых, целые числа Commodore BASIC имеют диапазон 16-битной подписи, поэтому от -32768 до +32767 источника - поэтому я сохранил случайное число, сгенерированное до 0 - 32767 включительно
источник
Крапивник ,
143135 байтЯ не хороший игрок в гольф ... ГСЧ генерирует одно и то же значение каждый раз, потому что это генератор псевдослучайных чисел.
Попробуйте онлайн!
источник
JavaScript, 63 байта, нет бесконечной рекурсии
плохая сеть, поэтому нет ссылки TIO
источник