Рассмотрим вопрос, написанный на простом английском языке, ответ на который включает два достаточно точных (но потенциально умных) слова или фразы, которые можно разделить словом «и»:
Q: Каковы две стороны монеты? A: головы и хвосты
В: Каковы лучшие способы путешествовать? A: самолет и реактивный ранец
В: Почему ворон похож на письменный стол? A: потому что есть «b» в обоих и «n» ни в
Цель
Напишите программу, которая при нормальном запуске выдает такой вопрос.
Когда все остальные символы удаляются из программы, начиная со второго символа, и результат повторяется, результат должен быть таким, какой есть слева от «и» в ответе.
Когда все остальные символы удаляются из программы, начиная с первого символа, и результат повторяется, результат должен быть таким, который находится справа от «и» в ответе.
(Само «и» не выводится.)
пример
Если программа
A1B2C3D4E5F6G7H8I9
и его вывод
What are the two sides of a coin?
Тогда вывод ABCDEFGHI
должен быть heads
, а вывод 123456789
должен быть tails
.
Правила о вопросах и ответах
- Вы можете использовать мои примеры вопросов, но я призываю вас придумать свои.
- Вопрос и две части ответа:
- все должны быть разными
- должен быть общий грамматический смысл английский
- может содержать только печатные ASCII (от 20 до 7E)
- В идеале вопрос должен быть написан с заглавной буквы и пунктуации (но ответы не должны быть).
- Вопрос должен быть длиной не менее 30 символов и иметь энтропию выше или равную 3,5. (Введите строку, нажмите « Рассчитать» , найдите последнюю букву H (X) .)
[space]and[space]
Каждая из двух частей ответа (не считая между ними) должна содержать не менее 5 символов с энтропией выше или равной 2.- Слово «и» может появиться в любой части ответа.
Правила о коде
- Ни один из 3 фрагментов кода не может:
- содержать комментарии или что-либо еще, что традиционно игнорируется компилятором / интерпретатором (не беспокойтесь о том, чтобы добавить лишнюю или две точки с запятой, но если вы думаете, что это комментарий, вероятно, так оно и есть)
- выйти из программы в середине исполнения
- Код может содержать любые символы, включая Unicode и непечатаемый ASCII.
- Может иметь нечетное или четное количество символов.
- Вывод идет в стандартный вывод или файл или что-то кажется разумным. Там нет ввода.
счет
Поскольку я не хочу поощрять ответы в гольфе, но хочу еще больше поощрять умные ответы, выигрыш будет чем-то средним между соревнованием по коду и популярностью:
Оценка = (upvotes - downvotes) - floor((bytes in code that outputs question) / 3)
Самый высокий балл побеждает.
(Используйте http://mothereff.in/byte-counter в качестве счетчика байтов.)
источник
x0=00;;
. Отличный вызов!00;
компилятор традиционно игнорирует ее ...It may have an odd or even number of characters
Есть ли количество символов, которые не являются четными или нечетными?Ответы:
Javascript (148 байт)
Создает несколько бессмысленных литералов с побочным эффектом создания предупреждения * для вопроса. (Сплиты делают аналогично, но создают оповещения * для каждого из ответов).
расколы:
а также
Вопрос:
What is the ideal breakfast???
Ответы:
bacon
иscrambled eggs
источник
Brainfuck (437 символов)
Я должен признаться, что это моя первая программа, которая на самом деле делает что-то значимое. Программа высоко оптимизирована для систем с малым объемом памяти, поскольку она использует только 4 области памяти.
Вопрос:
What are the two main groups of trees?
Ответы:
conifers
иbroadleafs
Основной цикл
Программа состоит из основного цикла (который на самом деле не является циклом, поскольку все [] -блоки выполняются только один раз) и двух секций.
Если вы хотите протестировать разделы независимо, вы должны принять во внимание основной цикл. Расположение 0 содержит -1 в четном ответе, 1 в нечетном ответе и 2 в разделе вопросов.
Раздел ответов
Четный ответ (удалены нечетные инструкции):
Нечетный ответ (четные инструкции удалены):
Раздел вопросов
Я решил сохранить место для отдельного места, потому что его значение резко отличается от других символов. Это позволяет печатать пространство просто с
<.>
.Окончательное обновление
В моем последнем обновлении я оптимизировал умножения так, чтобы использовались минимальные инструкции. Кроме того, включение 'l' во вторую группу символов в разделе нечетных ответов оказалось огромным улучшением. Односимвольная экономия в нечетном ответе в основном означала два символа из всей программы, так как это также уменьшает отступ от четного ответа. Я также удалил пару ненужных инструкций здесь и там, и я не думаю, что смогу оптимизировать код дальше.
источник
Партия - 84
Я очень горжусь этим
Полная программа: Каковы две стороны медали? (приставка)
Только вечерние: головы (файл 'c')
Только шансы: хвосты (файл 'x')
Работает путем перенаправления вывода ошибок в файл в обоих случаях.
источник
Питон -
10496 (гольф: 76)Мое решение довольно простое (и как-то читаемое):
Выход:
Честно говоря, я нашел идею для первой строки в ответе bitpwner.
Еще более удобочитаемая альтернатива: -
11310597Еще более короткая альтернатива: -
8676источник
zebra
. И это хорошо вписывается в «гольф» версию с вопросом ровно 30 символов. Таким образом, я немного изменил свое решение. :)Rebmu : 79 символов ИЛИ (37 + длина (p1) + 2 * max (длина (p2), длина (p3)))
Сначала я дам 79-символьное решение, которое спрашивает, какие языки вы должны изучать? (энтропия 4.0, 30 букв не включая
?
) и предлагает вам рекомендации Ребола и [Красного] :Доступная здесь уникальная тактика, отсутствующая на других языках, основана на использовании того факта, что фигурные скобки являются асимметричным разделителем строк, который может юридически вкладываться:
Это позволило мне создать обобщенное решение, которое может легко работать с любой программой, которая не использует escape-последовательности. Версия из 79 символов была достаточно простой для быстрого доступа, но для правильного размещения произвольного исходного кода для программ p2 и p3 вам понадобится полный шаблон. Если бы мы использовали это, это было бы 87 символов:
Шаблон для использования этого общего вида является то , что если у вас есть три исходных текстов последовательных символов длины переменных (давайте использовать пример , как
AAA
,BBBBB
,CCCCCCC
) вы можете кодировать их как - то вдоль линий:(Примечание. Хотя этот шаблон не будет работать без настройки программ, использующих escape-символы, это не является фатальным недостатком. Для получения непревзойденной левой фигурной скобки в строке, разделенной фигурными скобками, требуется что-то вроде
{Foo ^{ Bar}
..., но вы можете легко переписать это, используя альтернативная нотация строк"Foo { Bar"
и комбинированные падежи могут управляться путем склеивания смеси неэкранированных строк.)Итак ... как насчет примера? Как только общая форма стала доступна, эта 573-символьная программа была собрана всего за пару минут из 3 предыдущих решений для гольфа:
Если вы не модифицируете программу, это Hourglass Solution .
Если вы возьмете только нечетные символы и запустите его, то он напечатает 99 бутылок пивного стихотворения.
Только четные символы сделают небольшое преобразование римской цифры для вас.
Если кто-то хочет попробовать написать эту программу на своем языке и думает, что может побить 573, дайте мне знать. Я дам вам большое количество репутации, если вы это сделаете - если предположить, что ваш язык не Rebmu, потому что я знаю, что эти программы не минимальны. :-)
То «расточительное» расстояние, которое вы получаете в конце, - это то, что происходит, когда p2 и p3 имеют несбалансированную длину. Но в этом случае все 3 программы имеют разный размер, поэтому для p2 / p3 не существует особой подходящей пары. (Я выбрал их, потому что не было никаких внешних данных в качестве входных данных, таких как лабиринт или что-то еще, а не то, что они были одинаковой длины. Хотя я мог бы написать новые программы, которые были бы более оптимальными, я потратил достаточно времени, и смысл был ты не нужно писать новые программы ...)
Как это работает
(Примечание: я начал с более «креативного» подхода, который был не таким обтекаемым, а более интересным. Я переместил его в запись в своем блоге. поскольку описание этого подхода уже давно.)
Ключевым моментом здесь является хитрость «eval code as a string», как и в некоторых других записях, у нее просто есть козырь асимметричного разделителя строк. Я начну с объяснения работы случая из 80 символов.
Вот «целая» программа, настраивающая пробел для удобства чтения этого случая:
Здесь мы заканчиваем установку DD в качестве синонима DO (он же «eval»). Но хитрость заключается в том, что когда запускаются пополам программы, они запускают код, единственным эффектом которого является определение D для безобидного литерала 1.
Вот что делает код odd-chars, пробелы снова корректируются:
А вот код четных символов:
Это на самом деле так, что для не разделенной на две части программы
dd {dd {(arbitrary code)qt}}
будет выполняться любой код, который вы хотите. Однако есть два вызова для оценки вместо одного. Дело в том, что хотя вложенные скобки прекрасно работают в чередующемся коде, они портят поведение DO. Потому что:Будет загружать строку как программу, но эта программа в конечном итоге будет просто строковой константой
{print "Hello"}
. Таким образом, хитрость, которую я здесь использую, заключается в том, чтобы взять мой DD (содержащий то же значение функции, что и DO) и запустить его дважды. Полуфабрикаты жуют разные части строки, но они не жуют оба, если четность / нечетность правильны для содержимого, и потому что то, что осталось вне строки после деления пополам, является просто интегральной константойd
они безвредны.С этим шаблоном нетрудно написать поведение программы, когда оно не разрезано пополам - вы можете вставить что угодно, если длина кода четна (нечетно, если вы считаете QT, то есть QUIT). Если вам нужно получить четное число из нечетного, добавьте пробел (так что в моей формуле на самом деле есть +1 на p1 для нечетных длин программ p1) . Казалось бы, уловка заключается в том, чтобы впоследствии написать этот код с чередованием, который должен пройти синтаксический анализатор, если это не так. разделен пополам. (Он не будет запущен из-за QT, но он должен быть загружаемым, прежде чем он будет выполнен.)
Этот случай тривиален;
pp
прекрасно загружается как символ, даже если он не определен, и разбивается на частиp
для печати в каждой половине программы. Но мы можем сделать еще один трюк, просто снова используя строковый литерал. Половинные программы по-прежнему определены нормально, поэтому мы могли бы просто сказать:Имея единственную часть, подобранную синтаксическим анализатором во всем случае, быть символическим словом
ddoo
и строковым литералом, мы можем затем чередовать любые две программы, которые мы хотим, внутри этого строкового литерала и не раздражать синтаксический анализатор. Половинные версии просто скажут:..а также...
Как я уже сказал, эта часть выглядит знакомой другим решениям, которые рассматривают программы как строки и оценивают их. Но в случае соревнования, когда программы, которые вы упаковываете, содержат вложенные строки, это добавляет ключи для них. Здесь единственные вещи, которые доставят вам неприятности, - это использование выхода через carets (
^
) ..., которое можно легко обойти.(Небольшое «читерское» примечание: я добавил QT для «QUIT» в ответ на эту проблему. На самом деле, я целенаправленно удалил аббревиатуру для Quit раньше ... потому что почему-то я думал, что это хорошо только для консольного использования и просто взялся за двухбуквенный пробел, если его не было в REPL. Я добавляю его, потому что вижу, что был неправ, не добавляя его в этом конкретном случае. Тем не менее, до этого изменения он был бы на 2 символа длиннее. Когда я впервые опубликовал решение, в Rebmu была ошибка, которая не позволяла ему работать, хотя он должен был ... теперь это работает.)
источник
Perl
186139135Каковы лучшие вещи в жизни?
сокрушить своих врагов
услышать плач своих женщин
Используя менее длинные ответы:
Perl
7972What are my preferred weapons?
(30 байт, H (X) = 3,76)swords
(H (X) = 2,25) иmaces
(H (X) = 2,32)источник
Питон -
139103What are the ingredients for success?
->Unicorns
иRainbows
Тест:
Старая версия:
источник
Хаскелл, 117
Необходимость работать с функциональной парадигмой Haskell означает, что все должно быть присвоено переменной или закомментировано с помощью строчных
--
или блочных{- -}
комментариев; запуск бессмысленных функций без присваивания отсутствует. Поэтому, чтобы оставаться в здравом уме, я держал вопрос и ответы настолько короткими, насколько позволяют правила.Вопрос: Чего мне не хватает?
«Обувь» и «пирожные»:
NB Появление
crank
под "Что мне может не хватать?" не должны рассматриваться как значимые.источник
Wa
находится в комментарии к блоку, так что нет, на самом деле это не anpttLWa.Лисп (76 символов)
Вопрос из 31 символа, 6 символов в каждом ответе ⟹ длина - полезная нагрузка = 33
Я хотел использовать «Какой ваш любимый цвет?», Но даже простирался до британского правописания, он только достиг минимума в 30 символов для длины вопроса, и мне нужен был вопрос нечетной длины, чтобы сбалансировать двойные кавычки.
Они говорят, что Common Lisp многословен, но вы не подумали бы так, если бы пошли на эту строчку. Это даже не очень запутано, вам нужно только вставить немного пробела, чтобы увидеть, что цитируется и что выполняется.
Многие реализации Lisp будут выкрикивать цвета, потому что они переводят символы в верхний регистр. Если это вас беспокоит, измените
''fmuacghesnitaa
на""fmuacghesnitaa""
.источник
СТАТА 295
Вопрос: Какие десерты лучше всего испечь прямо сейчас? Ответ: пирожные и печенье.
Объяснение: Команды в STATA разделены новыми строками.
"//" - это комментарий в STATA, "///" указывает компилятору перейти к следующей строке и включить его содержимое в текущую команду.
Команды в STATA часто могут быть сокращены до такой степени, что они считаются достаточно уникальными, чтобы их можно было дифференцировать (таким образом, «generate» становится «g», «global» становится «gl» или «glo», «capture» становится «cap», » дисплей "становится" ди "и т. д.). Команда display отображает текст на экране. Команда capture захватывает все ошибки (включая синтаксические), поэтому эта программа компилируется правильно.
Я предполагаю, что если вы хотите привередничать, компилятор игнорирует любые дополнительные "/" после первых 3 последовательных строк. Также в программе "Домовые", технически + "" есть комментарий. Но я утверждаю, что это все еще имеет значение, потому что команда захвата все равно сделала бы это неуместным, даже если бы это не был комментарий.
Спасибо за чтение моего действительно длинного объяснения. Теперь код:
«Какие самые лучшие десерты выпекать сейчас?»
«домовые»
"печенье"
источник
Кш (82 символа)
35-символьный вопрос, 5 символов в каждом ответе ⟹ длина - полезная нагрузка = 37
Я злоупотребляю синтаксисом определения функции за пределами POSIX. Тире и bash не могут принять это, но ksh (общественное достояние или ATT) может.
Ничего примечательного не происходит, только немного эха. Не тратьте, не хотите.
источник
PowerShell 88
Какое мое любимое оборудование? (30 символов, H (X) = 4,0314)
меч (5 символов, H (X) = 2.32193)
щит (5 символов, H (X) = 2,58496)
В полной программе он перенаправляет пустые строки в несуществующую переменную
${x}
(кавычки для этих пустых строк используются для формирования бессмысленной строки, которая перенаправляется либо в пустой блок{}
либо в несуществующую переменную$x
в четных / нечетных версиях), затем печатает вопрос и объявляет 2 неиспользуемые переменные (которые печатаются и помещаются рядом с другой неиспользуемой переменной$XXXXXX
или$XXXXXXX
в разных случаях).источник
GolfScript, 51 байт
Выход
Как это работает
.;
дублирует строку и удаляет копию.""
толкает пустую строкуthaeialdss
не определено, поэтому ничего не делает.Нечетные символы
Выход
Как это работает
;
удаляет первую строку из стека.Четные символы
Выход
Как это работает
Wihaetesdso
иon
нупс..
дублирует пустую строку в стеке.источник