Надоев надежностью флэш-памяти, вы решили хранить все свои программы на одной из этих старых добрых 1440-килобайтных дискет. Однако после копирования даже 3000 программ диск был заполнен. Как это вообще возможно? Будучи опытным в искусстве игры в гольф кода, большинство ваших программ имеют длину не более 100 байт, поэтому должно быть достаточно места ...
Спросив об этом в Super User, вы обнаружите, что вас обидел размер кластера файловой системы - злой заговор разработчиков FAT12, который оставляет значительную часть вашей дискеты неиспользованной и вынуждает вас покупать больше, чем вам действительно нужно.
Купить больше дискет? Никогда! Размер кластера станет меньшей проблемой, если мы просто сохраним несколько программ в одном файле, что возможно, потому что разные компиляторы / интерпретаторы будут вести себя по-разному для одного и того же исходного кода.
задача
Напишите полиглот, который помещается в один кластер (512 байт или меньше) и решает как можно больше из следующих задач.
Прочитайте все входные данные и распечатайте их.
Распечатать Привет, мир! ,
Считайте строку / аргумент ( имя ) в качестве ввода и напечатайте Happy Birthday, [name]! ,
Прочитайте все входные данные и напечатайте вкладки «Я люблю» если он содержит один или несколько табуляторов (0x09) и я ненавижу пробелы! если это не так.
Прочитайте две строки / аргумента и выведите истинное значение, если второе является подстрокой первого, и ложное значение, если нет.
Прочитайте строку / аргумент и выведите истинное значение, если его символы находятся в строго возрастающем порядке, и ложное значение, если нет.
Прочитайте строку / аргумент и символ и напечатайте индексы всех вхождений этого символа.
Прочитайте строку / аргумент и напечатайте любой из символов с наибольшим количеством вхождений.
Прочитайте два целых числа от 0 до 255 и выведите их сумму.
Прочитайте одно целое число от 0 до 255 и выведите частное и остаток от деления на 7 .
Прочитайте одно целое число от 1 до 255 и выведите истинное значение, если оно является составным числом (ни 1, ни простое число), и ошибочным значением, если нет.
Прочитайте одно целое число от 1 до 255 и выведите истинное значение, если оно является степенью 2, и ложное значение, если нет.
Прочитайте два целых числа от 0 до 255 и выведите большее.
Считайте десятичное целое число от 0 до 255, напечатайте его шестнадцатеричное представление.
Прочитайте одно целое число от 0 до 255 и выведите его вес Хэмминга (число 1-бит).
Считайте одно целое число n от 1 до 13 и выведите F n , n- е число Фибоначчи .
Например, для ввода
13
напечатайте233
.
Прочитайте строку / аргумент ввода и создайте его.
Например, для ввода
Programming Puzzles & Code Golf
выведите это:+---------------------------------+ | Programming Puzzles & Code Golf | +---------------------------------+
Прочитайте прямоугольный блок символов и поверните его на четверть оборота по часовой стрелке.
Например, для ввода
tye xll epb tma id sa s e i r hsn Tiu
распечатать это:
This text is simply unreadable
Прочитайте целое число от 1 до 40 и напечатайте ромб этой длины стороны.
Например, для ввода
3
выведите это:/\ / \ / \ \ / \ / \/
Распечатать это:
....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@....
счет
Ответ, который позволяет объединить наибольшее количество программ в одном файле, который помещается в один 512-байтовый кластер, выигрывает. Связи разбиты по количеству байтов (чем ниже, тем лучше).
Дополнительные правила
Для каждой задачи, за которую вы претендуете на ваш счет, один и тот же файл (байт на байт) должен составлять полную программу на выбранном вами языке, которая решает эту конкретную задачу.
Каждая задача должна быть решена на другом языке.
Языки считаются разными, если они не являются разными версиями одного и того же языка. Например, есть только один JavaScript, один Python и один TI-BASIC, но C, C ++, Octave и MATLAB - это четыре разных языка.
Выбранный язык для каждой задачи должен удовлетворять нашему обычному определению языка программирования .
Кроме того, язык должен быть опубликован и внедрен до 9 сентября 2015 года.
Ваш компилятор / интерпретатор может не требовать каких-либо нестандартных флагов для получения ожидаемого поведения.
Исключения из этого правила включают флаги, необходимые для указания конкретного языка, для чтения программы из (одного) файла или для подавления баннера.
Входные данные для каждой задачи будут состоять из печатных символов ASCII (от 0x20 до 0x7E) и перевода строки (0x0A), и его длина не будет превышать 255 байтов.
Все целые числа могут быть прочитаны в десятичном или унарном виде, если в задании не указано иное.
Поведение для неверного ввода не определено.
Вы можете читать ввод из STDIN (или его ближайшей альтернативы) или в качестве аргументов командной строки.
Если задача требует чтения двух частей ввода, вы можете прочитать их - в любом порядке - разделенные однобайтовым разделителем по вашему выбору, как отдельные аргументы командной строки или один из STDIN, а другой как аргумент командной строки.
Если один из входных фрагментов является строкой, единственным возможным разделителем является перевод строки.
Распечатайте вывод в STDOUT (или ближайшую альтернативу). Все выходные данные в STDERR будут игнорироваться.
Для каждой задачи применяются стандартные правила игры в гольф .
В частности, это включает в себя лазейки, которые по умолчанию запрещены , за исключением жесткого кодирования выходных данных , что явно разрешено для этой задачи.
2>/dev/null
и получаем правильный вывод в stdout, это нормально? Просто чтобы быть уверенным.Ответы:
12 языков, 418 байт
Это веселый вызов. Становится трудно вписать больше языков, но с этим большим количеством оставленных байтов я, вероятно, мог бы сделать еще один.
Делает безвозмездное использование 2D-языков. Обратите внимание , что символ на между
[ ]
на@-[ ]e<
линии вкладки. Кроме того,\n
для работы TRANSCRIPT требуются окончания строк.Прелюдия (Задание 1 / Кошка)
?(!?)
это просто прямой перевод,[.,]
в БФ.()
Циклы Prelude действуют как[]
циклы BF , поэтому все, начиная(
с крайнего левого столбца и заканчивая тем, что)
не была выполнена основная программа.Синтаксические правила Prelude означают, что скобки должны совпадать (чтение слева направо по столбцам), и в каждом столбце может быть только одна скобка. Кроме этого, это довольно простой язык для встраивания.
Убедитесь, что
NUMERIC_OUTPUT
установлено значение,False
если вы используете интерпретатор Python.ТРАНСКРИПТ (Задание 2 / Привет, мир)
TRANSCRIPT - это тематический esolang, основанный на интерактивной художественной литературе. Линии, не распознаваемые TRANSCRIPT, игнорируются, что облегчает их установку.
Tr is here.
объявляетTr
строковую переменную, а вторая строка устанавливает содержимое переменной вHello, World!
.X Tr
(X
для проверки) затем выводит строку.Хотя в TRANSCRIPT очень легко вписаться, это довольно многословный язык, поэтому я заставил его принять самый простой вызов.
Деление (Задание 3 / День рождения)
который печатает первую часть, следит за входом с помощью небольшого 2D-цикла, а затем выводит завершающий восклицательный знак. Это
R
означает, что здесь начинается движение атома вправо, что полезно, поскольку эту программу можно перемещать куда угодно.Rail (Задача 4 / Вкладки)
Как и Fission, Rail - это двумерный язык, который имеет преимущество в том, что его можно перемещать куда угодно. Выполнение начинается с
$
отmain
функции, направляясь на юго - восток.Сначала мы направляемся вниз по
\
s, поворачиваем налево на-
, нажимая,[<tab>]
что толкает вкладку.e<
затем ветви на основе EOF - если EOF, мы идем вниз и печатаем"I hate spaces!"
перед остановкой, иначе мы идем вверх. Если мы направляемся вверх, мы читаем следующий символ и сравниваем его с вкладкой, снова разветвляясь - если вкладка поднимается и печатается"I love tabs!"
до остановки, в противном случае снижается и продолжает цикл ввода.Эта программа довольно дорогая, но так как TRANSCRIPT взял Hello World, было трудно выбрать подходящую задачу для Rail.
> <> (Задание 6 / По возрастанию)
Печатает,
1
если строго по возрастанию, в0
противном случае.> <> - это другой двумерный язык, и его выполнение начинается слева вверху.
"..."
является строковым режимом, выдвигая внутренние символы по одному. После первой строки#
, которую мы нажимаем , которая отражает IP влево, толкая больше строк и оборачивая (> <> тороидально), прежде чем нажать\
, зеркало, которое отражает нас вверх.В нижней части программы находится
.91<
телепортирующая нас туда(9, 1)
, где находится основная программа. После этого0[
удаляет весь мусор из строк,0
нажимает ноль для представления последнего прочитанного символа, и после этого он просто читает символы по одному за раз, убедившись, что мы все еще поднимаемся.Вероятно, лучше не перемещать основную программу, а не телепортироваться, но я буду иметь дело с этим позже, если это необходимо.
Befunge (Задание 9 / Дополнение)
Проверено с переводчиком, найденным здесь . Это довольно простая программа, начинающая толкать бесполезную строку и
#
перепрыгивать через пространство. После этого это просто основная программа&&+.@
.Лабиринт (Задание 10 / Дивмод на 7)
Удобно,
'
и"
есть NOPs в Лабиринте, которые действуют как пройденный путь в лабиринте. Я пропущу беспорядочную навигацию, но в основном происходит много поворотов и блужданий, прежде чем мы начнем с того?
, что является началом основной программы.Программа не совсем скрыта, чтобы учесть Prelude (например
?
, чтение ввода в Prelude).Python 2 (задание 14 / шестнадцатеричное)
В
xxx
s представляет несоответствующие части закомментированных от многострочных строк или комментариев. В промежуткеprint hex(input())
, основной прогам. Это выводит с опережением0x
, но я предполагаю, что все в порядке (если нет, то это легко исправить в любом случае).Первая строка - это строка,
"1\"# &&+.@\""
за которой следуют два" "
с. Эти три строки объединяются парсером и остаются неиспользованными (эта первая строка работает аналогично для Руби и Джулии позже).GolfScript (задача 15 / вес Хэмминга)
Первая строка содержит три строки, а вторая - комментарий.
''''
выдвигает еще две строки, затем<<
выполняет два сравнения (s
игнорируется). Наконец,""'("'
толкает еще две строки.Все это мусор затем удаляется, оборачивая его в массив и получая первый элемент (
]0=
), который изначально является входом в стек. Затем мы оцениваем ввод с помощью~
, превращаем в двоичный файл с2base
суммированием битов{+}*
. Следующий не}
имеет себе равных, и комментирует остальную часть программы.Юлия (задание 16, Фибоначчи)
#=
начинает многострочный комментарий и=#
заканчивает многострочный комментарий. Основная программа использует матричное возведение в степень для вычисления чисел Фибоначчи (взято из Розетты ).Рубин (Задание 17 / кадр ASCII)
Эта программа предполагает, что ввод не заканчивается завершающим переводом строки.
У нас есть бесполезная строка, комментарий, другая бесполезная строка, а затем heredoc, который комментирует большую часть программы. После этого идет основная программа, за которой следует однострочный
#
комментарий.CJam (задание 19 / Diamond)
Две пробелы в конце первой строки должны удовлетворять CJam, так как
#=
это два бинарных оператора. Я не буду вдаваться в подробности этого, но в основном это беспорядок, с основной программой, являющейся простыммежду.
Ключевым отличием между GolfScript и CJam является то, что в CJam одиночная кавычка
'
не начинается и не завершает строки, а вместо этого помещает следующий символ в стек. Это означает, что в CJampushes a
(
затем начинает строку с"
(первый символ которого равен'
), тогда как приведенное выше является простой единственной строкой в GolfScript.Попробуйте онлайн .
1>
используется вместо того,(
чтобы учитывать Prelude.Здесь 12 языков, 373 байта . Некоторые задачи были перемещены, TRANSCRIPT был удален (это сделало Rail слишком дорогим), и была добавлена схема (курица). Это всего лишь мое поле для игры в гольф для будущих обновлений, поскольку обновление основного поста занимает вечность.
Я мог бы сохранить несколько байтов для Джулии, так как неоконченные многострочные комментарии приводят к ошибке STDERR.
источник
;)
я откладываю изменения в моем ответе из-за длинного описания. LOL78910 языков,398431447507 байтЭто, пожалуй, самое лучшее, что я могу уместить в текущем решении.
Последняя строка содержит код Whitespace, закодированный так, чтобы SE его не съел. Чтобы запустить код, замените все
S
пробелами,T
символами табуляции иN
переводами строки.С89, задание 16
Вот что видит компилятор:
Все остальное разделено как комментарии или внутри
#if 0
.C ++, задача 14
Я использовал трюк, украденный отсюда, чтобы провести различие между C89 и C ++.
Луа, задание 2
Вот основная структура.
Brainfuck, задача 1
Я просто должен был убедиться, что нет бесконечных петель или бродяг
.,
не найдены. Многострочные комментарии Lua также удваиваются как комментарии BF. Все, кроме первых 2 символов, представляет собой большой цикл NOP.Python, задание 6
Опять же, я использую специфичные для языка функции, чтобы NOP или закомментировать другой код.
Pyth, задание 17
Пиф хорош для этой вещи. Он принимает первый
#
какwhile True:
цикл, который молча завершается при ошибке . Итак, я просто делаю большую часть кода строкой (чтобы избежать;
преждевременного завершения цикла), затем просто завершаю цикл, выхожу из другого, созданного комментарием Python, и выполняю задачу. Вот со всеми непустыми строками, замененными на" string "
, это все еще функционально эквивалентно:> <>, задание 3
Это очень интересно. Выполнение отскакивает в коде, используя прыжки, где необходимо, чтобы обойти препятствия. Соответствующие части:
звездный , задание 9
Здесь мне пришлось начать переходить к языкам «отбросить все символы, кроме». Что-то еще вырезано, это выглядит так:
Код пропускает большую часть пунктуации с переходом, чтобы избежать трудного времени, просто используя начало и конец кода. Код функционально эквивалентен
Befunge-98, задание 10
Работает аналогично> <>. К счастью,
#
это зеркало в> <> и пропуск в Befunge, поэтому мы можем реализовать другое поведение. Также0/0 == 0
.Пробел , задача 13
Это было последнее, что мне пригодилось. Первые несколько строк просто помещают нули в стек, так как они содержат только пробелы и символы новой строки из «нормального» кода. Код закодирован; заменить все
S
пробелом,T
табуляцией иN
переводом строки.источник
17 различных версий Pip, 383 байта (неверно)
Пока этот вопрос был в песочнице, я просмотрел все ревизии моего языкового пипа и придумал полиглот, используя 17 из них. К сожалению, версии одного и того же языка запрещены правилами конкурса, но с разрешения Денниса и отказа от ответственности я все равно публикую свою работу.
Необработанный код
Стратегия
В Пипе строчные буквы являются переменными. Прописные буквы более сложны: они разбиты на серии максимум из двух символов, которые могут быть операторами или переменными. Если токен верхнего регистра не определен как переменная или оператор, предполагается, что это неопределенная переменная, которая оценивается как ноль.
Итак, чтобы различать две версии Pip, мне просто нужно найти переменную или алфавитный оператор, который был добавлен в более новую из двух. В старшем это будет ноль вместо этого. Код
v:uIN[...]
собирает большой список, содержащий одну из этих проверок для каждой версии, которую я хочу протестировать, выясняет, сколько nils содержится в этом списке (u
переменная явно инициализируется как nil), и сохраняет число вv
(для «версии») ,После некоторых других вычислений есть еще один большой список, который вычисляет результаты для 17 задач из задачи и использует их
v
для выбора на основе того, какая это версия.Версии и задачи
0.15.09.04
Диагностика:
(oTM0,0i)
(исправлена ошибка с операторомT
ri,M
когда обрезка 0 символов с каждого конца строки давала вместо этого пустую строку; индексирование в пустую строку дает ноль)Задача 18:
Iv<2W##YqlPBy
(настройка: чтение всех строк из stdin, если значениеv
меньше 2), затем((J_M ZRVl)|0)Jn
(обратный список строк, транспонирование и объединение обратно в строку)0.15.08.06
Диагностика:
EN1
(добавленEN
умеральный оператор)Задача 1:
Iv<2W##YqlPBy
(тот же установочный код, что и выше), затемl?lJnl
(присоединиться к новым строкам)0.15.08.03
Диагностика:
1N1
(добавленоN
как краткая версияIN
оператора)Задача 20:
c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0
(настройка: создать список, содержащий верхнюю и нижнюю половины шахматной доски и сохранить в нейc
), затемcJn
(присоединиться к новой строке)0.15.08.01
Диагностика:
Y1
(добавленY
оператор ank)Задача 19:
Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}
(настройка: еслиv
равен 3, построить верхнюю половину алмазаd
) с последующимd.n.RVd
(повернуть вспять для нижней половины и присоединиться к новой строке)0.15.06.19
Диагностика:
RCk
(добавленоR
C
оператор andom hoice)Задача 17:
m:'+.'-X#a+2.'+.n."| "
(настройка: сборка+----+\n|
строкиm
) с последующимm.a.RVm
(завершение ввода вm
и обратноеm
)0.15.06.12
Диагностика:
k
(предварительно инициализированаk
", "
предварительно переменная to ; ранее она была неопределенной и, следовательно, ноль)Задача 16:
Iv=5La{i+:oSio}
(еслиv
5, сгенерировать число Фибоначчи вi
) с последующимi
0.15.06.08 (примечание: номер версии не изменялся до следующего коммита)
Диагностика:
w
(предварительно инициализированаw
переменная до`\s+`
)Задача 15:
h:$+TBa
(преобразовать входные данные в двоичные и суммы сумм; сохранить результатh
для задачи 12 позже)0.15.05.29
Диагностика:
(hR`1.+0``&2o`)@>3@AB0
Эта версия добавлена
&
в качестве шаблона замены для всей совпавшей строки в замене регулярного выражения (вдохновлено sed). Приведенный выше код беретh
(100
) и заменяет его на`&2o`
(т.е."1002o"
в более новых версиях, но просто"&2o"
в более старых версиях). Затем он нарезает все символы после 3-го ("2o"
в более новых версиях,""
в более старых версиях) и пытается проиндексировать эту строку. Индексирование в пустую строку дает ноль.Задача 7:
j:ak:b
(настройка: копии Локальные переменнаяa
,b
к глобальному Варсуj
,k
так что они будут доступны внутри функции) , а затем({j@aEQk}FI0,#a).s
(фильтр для индексов вa
где соответствующих равных символовb
, и присоединиться в пространстве)0.15.05.26
Диагностика:
`u`
(добавлен тип шаблона; в предыдущих версиях обратные метки игнорировались как нераспознанные символы, а выражение оценивается какu
как ноль)Задача 14:
aTB16
(конвертироватьT
оB
аза 16)0.15.05.24
Диагностика:
rZ4
(созданаr
специальная переменная, которая возвращает случайное значение от 0 до 1 каждый раз, когда на нее ссылаются; ранее она была неопределенной и, таким образом, выражение оценивалось как ноль)Задача 13:
a>b?ab
(троичное выражение)0.15.05.12
Диагностика:
rZ4
(добавленZ
оператор ip)Задача 12:
h=1
(сумма битов из задачи 15 должна быть равна 1)0.15.05.11
Диагностика:
AB6
(добавленоAB
оператор значения)Задача 11:
Pv=11?a>1&0INa%(2,a)[...]@v
(еслиv
равно 11, выведите,1
если input больше 1, а меньшее число делит его точно, в0
противном случае; еслиv
что-то еще, используйтеv
в качестве индекса списка, чтобы решить, что выводить)0.15.05.02
Диагностика:
({a}V7)
(добавленV
оператор; когдаV
он не был определен, это отправляло аргументы nil и 7 в функцию{a}
которая возвращает свой первый аргумент)Задача 10:
a//7.s.a%7
(входные данные делятся на 7 и мод 7, через пробел)0.15.04.26
Диагностика:
BN8
(добавленоB
itwiseN
оператор )Задача 9:
a+b
0.15.04.23
Диагностика:
AZ
(предварительно инициализированаAZ
переменная в верхний регистр алфавита)Задача 5:
bINa
(IN
дает количество вхождений)0.15.04.20
Диагностика: с
m@0:0
последующим9@m
m
Переменная preinitialized до 1000. В этой фиксации, то@
оператор был установлен для возврата lvalues; ранее, назначив,m@0
дал предупреждение и ничего не сделал. Таким образом, после исправления ошибок, первый оператор устанавливаетm
в0000
, который является юридическим индексом9
; pre-bugfix,m
остается1000
, что не является легальным индексом. (Индексы еще не были циклическими.)Задача 3:
"Happy Birthday, ".a.'!
0.15.04.18
Вся предыдущая диагностика приводит к тому, что в список диагностики добавляется ноль.
Задача 2:
"Hello, World!"
Большая часть кода - это твики, которые мне пришлось сделать, чтобы избежать ошибок в разных версиях. Этот пост уже слишком длинный, поэтому, если вы хотите узнать о чем-то, чего я не объяснил, давайте перенесем обсуждение в чат эзотерических языков .
источник
6 языков, 226 байтов (229 в зависимости от того, как
\x1b
принято!)Итак, я не думаю, что я сделал лучший выбор языков, и я думаю, что это не особенно конкурентно, но тем не менее я нашел это интересным испытанием! В целом, не так много испытаний завершено, но я мог бы, вероятно, решить проблему в пустом пространстве или что-то подобное, но это то, что я имею до сих пор:
1. Brainfuck
Протестировано на http://copy.sh/brainfuck/ и http://brainfuck.tk/ .
После удаления всех игнорируемых символов, вышеприведенная программа - это все, что у нас осталось, это просто пример программы cat с некоторыми дополнительными пустыми циклами, чтобы обойти использование символов другими языками.
2. Рубин
Использование:
Выше приведен код после удаления всех комментариев. Первая строка совершенно бесполезна в Рубине , как мы определим некоторые регулярные выражения , чтобы содержать Befunge-93 и Brainfuck код, а затем мы создаем массив , чтобы содержать
Hello
иWorld
и распечатать его с помощьюprintf
(добавить,
и!
).3. Perl
Использование:
Очень похоже на Ruby, за исключением того, что, поскольку мы храним ссылку на массив
$a
, когда мы пытаемся получить доступ к$a[0]
нему, он пуст, поэтому мы можем заменить его текстом для вызова 3Happy Birthday
иpop
(который показывает последний аргумент для программы командной строки ).4. JavaScript
Использование: вставьте в консоль браузера и запустите.
Как и в Ruby и Perl, первая строка по существу создает бесполезные
RegExp
объекты, затем мы сохраняем бесполезный массив$a
и создаем две бесполезные строки, одна из которых содержит код Ruby / Perl, а другая содержит символ новой строки и a#
, затем мыprompt()
вводим иalert()
ожидаемый результат большинством людей для вызова 4. Мы заканчиваем с другой бесполезнойRegExp
объектом, чтобы замкнуть петлю мозгового штурма.9. Befunge-93
Протестировано на http://www.quirkster.com/iano/js/befunge.html .
Насколько я понимаю,
/
делит стек и помещает результат, который не имеет побочных эффектов, кроме нажатияNaN
на вышеуказанный сайт,&
запрашивает ввод целого числа, поэтому мы читаем оба числа, необходимые для вызова 9, в стек,#
гарантируя, что мы пропускаем[
который предназначен для brainfuck,+
затем добавляет два верхних числа в стек,.
выводит их,#]
снова для brainfuck и@
завершает работу.13. PHP (работает в Bash)
Использование:
В PHP все, что не включено в
<?
теги, выводится дословно, поэтому здесь выводится код Befunge-93 и brainfuck, поэтому мыdie()
сразу же в коде выводим screen clear (\x1bc
), а затемmax()
первый из двух аргументов.источник
the first character in the first string literal is the byte ASCII 27
); ваш счет 226..match'\x09'
(где «есть»), может быть, я посмотрю, смогу ли я добавить еще что-нибудь!6 языков,
450404 байтаbash, brainfuck, C, gawk4, JavaScript и Minimal-2D
Обновление: Гольф это немного вниз. Все еще не уверен, что еще добавить, и я не уверен, что участники соревнования будут думать обо мне, используя свои языки для различных задач. Пытаюсь объяснить алгоритм бредфука.
Ну, это был / был мой первый опыт полиглота, так что мне пришлось учить все с нуля. Я думаю, что начинать с awk было не самой умной идеей, потому что это относительно неумолимо. Поскольку количество выполненных задач является релевантным, я сначала начал с самых простых. Не уверен, что это был умный ход. Это не очень много в гольфе, потому что у меня были проблемы с тем, чтобы эти шесть работали вместе, но я сделал все, что мог, чтобы это было коротким.
Вот языки и что они делают в алфавитном порядке. Я покажу простой способ проверить их все ниже. Поскольку некоторые из них могут зависеть от версии, я дам вам номера версий инструментов, которые я использовал.
Баш, задача 3
Ну, очевидно, что я использовал sed. Я попытался каким-то образом вставить скрипт sed, но я не смог заставить его работать, поэтому я пошел по пути bash. То, как я это делаю, находится внутри комментария C, и awk оценивает его
False
.sed --version
даетsed (GNU sed) 4.2.2
bash --version
даетGNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Итак, часть sed сводится к
Он группирует ввод, вставляет его в новую строку и печатает результат. Довольно распространенный материал.
бред, задание 20
Ну, это всегда довольно легко скрыть, я думаю. Строка, начинающаяся с
#//
, игнорируется C и awk. Или, по крайней мере, они могут жить с мусором за этим.bf
даетbf - a Brainfuck interpreter version 20041219
Это сокращенный код. Первая строка - это только мусор с других языков.
Я постараюсь объяснить, как это работает
это упорядочивает ленту и указатель на это
ячейка 8 содержит глобальный счетчик для следующего цикла,
это количество раз, когда 3 одинаковые строки напечатаны
устанавливает
C1
3, количество одинаковых строкустанавливает
C2
в 4 число «....@@@@
» в строке (в начале)печатает полную строку, уменьшающуюся
C2
в процессе,когда
C2
ноль, она печатает новую строку и декрементыC1
.если
C1
ноль, магия случается46 перемещается за 64
на 10 и глобальный счетчик перемещается на один вправо
тогда глобальный счетчик уменьшается
если он равен нулю, программа выходит
С, задача 2
Я исчерпал каждую последнюю маленькую способность C здесь, печатая «Hello, World!». Ну, кто-то должен был сделать работу ...
gcc --version
даетgcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
Фактический код C
#define func
сделать awk хорошо с этим. Он думает, что это функция awk. Аббревиатура от func - это особенность gawk.gawk4, задача 18
Так как я использовал awk почти для всего, что было здесь, я решил, что это должно быть в этом.
awk --version
даетGNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
awk видит это
Шаблоны поиска в том числе
\t
оцениватьfalse
. Я выбрал вкладку здесь, потому что я думаю, что она не может быть на входе.sed
оценивает доfalse
."the string"&&0
оценивается как ложное. Функция в порядке. Программа выполняется, если сопоставляется пустой шаблон, что и для любого ввода.Это делает это
вход
Выход
Вы должны убедиться, что все входные строки имеют одинаковую длину. Используйте пробелы, чтобы заполнить их.
JavaScript, задача 9
Я не уверен, что это законно, потому что это было слишком легко. Если вы дадите файлу программы окончание html и откроете его в браузере (я использовал Firefox 40.0.3 и chrome 45.0.2454.85), он попросит вас ввести данные. Вы должны ввести два числа, разделенных пробелом, и это предупредит сумму этих.
Минимальная 2D , задача 1
Это было довольно легко вписать в строки комментариев. Я использовал переводчик , который работает на Python, чтобы проверить это. Он печатает ввод на вывод. Программа выглядит так
RUDL вправо, вверх, вниз и влево. Таким образом, он начинает работать правильно, читает символ из стандартного ввода в память и добавляет его. Косая черта пропускает следующую команду, если память имеет значение 0. Это конец. Если символ со значением -1 читается, ввод закончился. Так что, если -1 читается, он пропускает D и завершается. Если что-то еще прочитано, оно идет вниз влево, добавляет это 1 обратно в память и печатает символ в стандартный вывод. Затем он идет влево и вверх и начинается снова.
тестирование
Отказ от ответственности: я не буду нести никакой ответственности за любой ущерб, нанесенный вашей системе с этим.
Предполагается, что у вас есть bash & co, gawk (по крайней мере версия 4, потому что здесь используются многомерные массивы), gcc, python, bf в качестве интерпретатора brainfuck и установленный Firefox.
Для простоты скопируйте исходный код программы в файл с именем
cluster.html
. Сделайте этот файл исполняемым для задачи bash. Скопируйте и вставьте интерпретатор для Minimal-2d в файл с именемminimal2D.py
в том же каталоге. Затем скопируйте и вставьте следующий скрипт в файл скрипта и поместите его в тот же каталог, сделайте его исполняемым и запустите ... ну, с кем я говорю. Если вы читаете это, вам, вероятно, не нужно много объяснений, и вы все равно заставите его работать.Там же вы найдете команду для запуска тестов по отдельности.
Повеселись!
источник