Цель этого кода golf - создать интерпретатор для языка программирования HQ9 +.
В этом языке программирования есть 4 команды:
- H - печатает "Привет, мир!"
- Q - печатает исходный код программы
- 9 - печатает текст песни "99 бутылок пива"
- + - увеличивает аккумулятор
Правила:
- Поскольку аккумулятор не определен, вы можете игнорировать команду +
- Ваша программа должна запросить ввод (этот ввод будет исходным кодом) или исходный код читается из файла
- Вы не можете помещать текст «99 бутылок пива» в файл и читать текст из файла.
- Вам не разрешается использовать алгоритм сжатия, такой как GZip или BZip, для сжатия текста песни: вы должны создать свой собственный алгоритм сжатия. Это не должен быть сложный алгоритм, но постарайтесь максимально сжать текст (помните: это код-гольф, код с наименьшим количеством байтов выигрывает)
- Если исходный код содержит символ, который не является H , Q , 9 или + , выведите «Исходный код содержит недопустимые символы» перед выполнением любых команд! Это означает, что, если исходный код,
H1
например, не выводитсяHello, world!
до выводаSource code contains invalid characters
. Нет, сразу выводSource code contains invalid characters
- Если ваш переводчик принимает символы как в верхнем, так и в нижнем регистре, то вы получите -8 к вашему количеству символов
Удачи!
code-golf
interpreter
hq9+
ProgramFOX
источник
источник
Ответы:
APL (Dyalog) (326 - 8 = 318)
Вставьте его в окно редактора и позвоните
H
. Ввод взят с клавиатуры.источник
Mathematica,
349 346341 символисточник
If[StringMatchQ[3, "a"], x, y]
C
599587487481467 символовЯ уверен, что это можно победить. Я использую C в конце концов. Есть причина, по которой вы не видите много выигрышных записей о гольфе, написанных на C. Это теперь 467 символов благодаря преступному злоупотреблению
#define
.Укажите исходный файл HQ9 + в качестве аргумента командной строки.РЕДАКТИРОВАТЬ: теперь принимает источник из стандартного ввода, а не файл. Запустите программу, начните вводить код, CTRL- Cкогда закончите, чтобы запустить ее.
Он компилируется как минимум в MinGW / GCC с:
gcc -o hq9+.exe hq9+.c
Должно работать в MSVC, но я не хотел создавать целое решение только для этого. :)
Или:
источник
C
и пару раньшеR;
. Можно также сбрить 8 символов сp[s++]=0;
после цикла ввода, чтобы упростить печатьp
.Python 2 -
452453443 байтаBLEH. Это было уже плохо, но потом я обнаружил ошибку, которая стоила мне одного байта, чтобы ее исправить. BLEH.
(Раньше я не включал
+
в вывод дляQ
. ВходQ+++
далQ
, например, выход .)Спасли некоторые символы, не выходя при неверном вводе, как я и думал.
Разъясненная версия в ближайшее время.Я сдался. Я едва понимаю, как работает это чудовище. Если есть спрос, я сделаю еще один шаг, но пока этого не произойдет.источник
exit
используете недопустимый символ, просто отображаете сообщение, чтобы вы могли сохранить там 7 символов.99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *99* bottles of beer on the wall.
он должен сказать:99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *98* bottles of beer on the wall.
+
. Вы должны игнорировать+
, а не давать ошибкуHQHH
надо сказатьHello World!HQHHHelloWorld!Hello World!
Perl, 325 - 8 = 317
Expanded:
источник
Рубин,
364360 - 8 = 352Все еще есть много возможностей для улучшения. Код 99 бутылок, украденный отсюда .
источник
No more bottles of beer on the wall
после1 bottle
раздела. тогда этоGo to the store...
1 bottle of beer on the wall, 1 bottle of beer on the wall, take one down, pass it around, no more bottles of beer on the wall. No more bottles of beer on the wall, no more bottles of beer, go to the store, buy some more, 99 bottles of beer on the wall.
Хаскелл, 298
это довольно просто.
%
возвращает вывод команды (учитывая исходный код для использованияQ
).d
по соображениям игры в гольф возвращает песню «99 бутылок» с ненужной строкой. все обернуто в интерактив (вы можете использоватьg
вместоmain
тестирования)источник
<interactive>:8:5: parse error on input ‘=’
.let
для вставки определений (это разрывается при вставке нескольких определений, не разделенных;
) или запустить код из файла.main
, он говорит, что исходный код содержит недопустимые символы, когда я пытаюсь выполнитьH
. Когда я пытаюсь запуститьg
вместоmain
, он сразу выдает ошибку.main
не работает, потому что добавленная новая строка не является допустимой командой. Вот почему я рекомендовал использоватьg
вместо этого. Что касаетсяg
,putStrLn $ g "H"
не работает должным образом?J - 444 байта
Номер мне понравился, поэтому перестал играть в гольф. Вот, пожалуйста, функция с одним выражением!
Примеры:
источник
Фортран 528
470481Требуется компиляция с-fpp
флагом (+3 для оценки) 1, чтобы использовать директивы предварительной обработки (что экономит более 3 символов, так что я полностью согласен с этим). Это также нечувствительно к регистру, так что есть -8: D. Сохранено 5 символов, так как они не были предварительно обработаныendif
так, как это используется один раз .Требует, чтобы файл имел
.F90
расширение (имеет смысл называть егоhq9+.F90
), чтобы компилятор принудительно выполнял предварительную обработку. Код чувствителен к регистру; добавление без учета регистра добавляет что-то вроде 16 символов, так что экономить 8 символов не стоит. Мой предыдущий ответ не учитывал изменение множественного числа вbottles
for9
; эта версия исправляет это (и, к сожалению, добавляет гораздо больше символов).Выглядит намного лучше, если не обрабатывать и не обрабатывать (возможно, потому что вы можете видеть, что происходит):
источник
.cc
чтобы не нуждался в-lstdc++
флаге.Python 2, 340 - 8 = 332
источник
Луа 443 - 8 = 435
464 - 8 = 456Мне удалось сохранить 21 символ, используя несколько
if-end
s вместоif-elseif-end
. У меня также было несколько лишних пробелов, плавающих вокруг после нескольких)
.Я довольно доволен этим, хотя он не намного короче, чем мой ответ на Фортране . Код 99 бутылок пива был изменен из этого ответа Алессандро . У нас нет
источник
if s in'Hh'
in
предназначен для итераторов цикла for, а не для сравнения; вы получите ошибку, если вы вставите это туда. Здесь есть три варианта: (1) использоватьmatch
в каждой строке, (2) пользовательs=='h'or s=='H'
в каждой строке, (3) сделать так, как я это сделал. Ясно, что (3) короче (1) и (2).Юлия, 362
источник
Tcl, 515
Просто немного в гольфе, все еще меньше, чем C, и правильные 99 бутылок пива заканчиваются стихами.
источник
regexp
. Вы можете получить мой гольф из 99 сортов пива на codegolf.stackexchange.com/a/109818/29325JavaScript (ES6), 385
Не выбирать без учета регистра, стоило бы слишком много символов. Даже близко не к некоторым другим записям, но, тем не менее, было весело!
JavaScript, 344
Я сделал версию с менее полной версией песни:
но, увидев другие записи (и посмотрев текст песни, который знал!), я подумал, что это что-то вроде полицейского!
источник
Go to the store, buy some more, *99* bottles of beer on the wall
, нет*No more* bottles of beer on the wall
Q
не работает для меня.Q
предполагалось сделать это время и предоставил исходный код функции вместо ввода ... Это было изначально моей причиной для этого в JS эта часть была бы легкой, однако теперь я знаю, что это совсем не то, что требуется!C 562 байта
Как полная программа. Первый аргумент - это программа HQ9 +. С реальным аккумулятором. Я бросил вызов себе, чтобы не использовать определения утверждений.
Безголовая версия:
источник
Java, 546 байт
Это моя первая подача кода в гольф. Я уверен, что мы могли бы сделать больше с этим. Он читает входные данные как аргумент командной строки. Пивной кодекс "позаимствован" из java ответа "99 бутылок пива" (креативное достояние)
Дайте мне знать, если аргументы командной строки не приемлемы. Это было очень весело!
источник
Excel VBA, 489 байт
отступ:
(отступ для удобства чтения)
Переименуйте стандартный вызов Module1 в M
с помощью.
h "+++++++++Your Code"
Это также будет работать в других офисных приложениях, изменяя ActiveWorkbook на соответствующий тип документа.
источник
For n=1 To
вFor n=1To
(удаление пробелов доTo
) и 4 байта, преобразовав все экземплярыDebug.? 2;
вDebug.?2;
(удаление пробелов после?
ключевого слова)