Предупреждение: это испытание содержит несколько легких спойлеров для The Secret of Monkey Island.
К концу игры вас через катакомбы ведет волшебная голова навигатора:
Вам нужно его ожерелье из глазного яблока, но Глава не хочет его отдавать. Один из способов получить это просто продолжать просить:
Гайбраш: можно мне это ожерелье?
Руководитель: Нет, но спасибо, что так вежливо спросили.
Гайбраш: О, давай, пожалуйста?
Голова: Вы можете просить все, что хотите, но у вас не может быть этого.
Гайбраш: Довольно, пожалуйста?
Голова: Вы можете просить все, что хотите, но у вас не может быть этого.
Гайбраш: Довольно мило, пожалуйста?
Голова: Вы можете просить все, что хотите, но у вас не может быть этого.
Гайбраш: Довольно, пожалуйста, с сахаром сверху?
Голова: О хорошо, большой ребенок. Ты можешь иметь это. Эй, что хорошего в ожерелье, если у тебя нет плеч?
Соревнование
Напишите полную программу, которая печатает вышеприведенный диалог. Суть в том, что каждый раз, когда программа вызывается, она должна печатать только две строки (одна просьба Гайбраша и ответ руководителя). Например, если ваша заявка написана на Python, использование должно выглядеть следующим образом:
$> python please.py
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.
$> python please.py
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please with sugar on top?
Head: Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?
Вызов программы более 5 раз может привести к неопределенному поведению, так что вы можете либо зацикливаться, продолжать печатать последние две строки, либо программа может даже не работать после 5-го вызова.
Вы можете записать в файл в рабочем каталоге или изменить исходный код самой программы, чтобы отслеживать вызовы. В последнем случае ваша программа не должна зависеть от собственного имени файла. (В первом случае вы можете предположить, что имя файла вашей программы не будет конфликтовать с именами файлов, от которых зависит ваша программа.)
Вы не должны предполагать среду, подобную REPL, или что любые данные хранятся в оперативной памяти между вызовами. Например, если вы отвечаете в Mathematica, вы должны предположить, что я покидаю ядро между вызовами.
Это код гольф, самый короткий ответ (в байтах) выигрывает. Если ваша программа зависит от каких-либо дополнительных файлов, существовавших до первого вызова , добавьте ее имя и содержимое в счетчик байтов.
источник
node please.js
5 разными выходами.Ответы:
Python, 224 + 97 + 1 = 322 символа
Самое простое решение, чтобы начать всех нас. Спасибо gnibbler за помощь в сборе 18 байт!
Требует, чтобы файл
z
присутствовал в том же каталоге (+1 для имени файла, +224 для размера файла):Вы можете создать
z
с помощью следующего:Выход:
источник
line1\nline2|line3\nline4|line5\nline6|line7\nline8|line9\nline10
Теперь вы можете разделить на|
и простоprint D[n]
Common Lisp (SBCL): 659 символов
Пояснения
format
сnil
).Это будет не самое короткое представление, но я подумал, что это хороший подход к проблеме.
Вызов Фирты
Последующие вызовы
источник
C # - 593 + 1 + 1 символов (595)
Изменения: дополнено предложениями Мартина и различными другими оптимизациями
Первый +1 это имя файла. Второй +1 - содержимое этого файла. Без удаления пробелов и разрывов строк, чтобы вы могли прочитать это:
объяснение
Полагается на текстовый файл с именем "x", который будет присутствовать в каталоге. Первоначально должен содержать ноль и используется для хранения прогресса.
Программа извлекает соответствующий элемент из массива строк в соответствии с прогрессом и записывает прогресс в конце. Некоторые строки используются повторно для сокращения длины, следовательно, логика выбора индекса
h+b[(a+5)/6*2+1]
для выбора ответа.Выход
Мой первый гольф-код, вероятно, не самый короткий в C #, но эй - Monkey Island, не удержался!
Раздетый код:
источник
a<1?1:a<8?3:9
, если C # поддерживает истинные целые числа, то тожеa?a<8?3:9:1
. Но вы, возможно, даже можете использовать целочисленное деление, а также сделать(a+5)/6*2
и переместить последнюю строку заголовка, чтобы заменить первую пустую (индекс 5). И попробуйте такие вещи, какusing s=System.String;
. (О, и вы могли бы опустить пространство имен или даже использовать пространство имен,System
чтобы избежатьSystem
во всем использовании.)JS,
488473При обновлении 5 раз страница, содержащая этот код, отображает 5 различных диалогов.
Демо-версия:
http://c99.nl/f/212197.html
источник
Perl - 356 байт
Самомодифицирующийся подход с заменами общих строк.
Пример использования:
источник