Какие общие советы у вас есть для игры в гольф на языке программирования Шекспира? Я ищу идеи, которые могут быть применены к задачам кода-гольфа и которые, по крайней мере, несколько специфичны для SPL (например, «удалить комментарии» - это не ответ).
Пожалуйста, оставьте один совет за ответ.
Ответы:
(Ну ... так как это мой принятый язык 1 , я чувствую, что обязан что-то здесь добавить)
Используйте короткие имена переменных
Да, да, да, это довольно стандартно для code-golf, вы просто используете имена переменных длиной в одну букву, здесь нет новостей. Или есть? Потому что парни, которые создали SPL, были достаточно дурацкими, чтобы не допустить какого-либо имени для переменных их языка: они должны происходить из пьес Шекспира, что, с точки зрения длины символа, является болью в королевской туше - но, если вы кодируете в SPL Вы уже знаете это. Поэтому я бы посоветовал использовать персонажей с короткими именами, таких как Аякс , Форд , Пейдж или Пак , вместо архиепископа Кентерберийского .
Боюсь, это все, что у меня есть.
1 - так как мои навыки Java эквивалентны таковым у новорожденного.
источник
(после предыдущего я просто вспомнил несколько вещей)
Тщательно выбирайте код
Пример, чтобы попытаться объяснить, что это значит.
а также
дать точно такой же результат, то есть заставить говорящего персонажа принять значение 64 (поскольку, если вы читаете мою долгую битву с SPL , вы знаете, что обе строки эквивалентны 2 * 2 * 2 * 2 * 2 * 2 * 1); тем не менее, первый имеет 59 байтов, а второй имеет байтовый счет 107.
Тем не менее, никто не будет настолько безумен, чтобы принять участие в состязании по коду для игры в гольф с SPL, так что ...
источник
a big big big big big big cat
, сохранить еще 4 байта? Я знаю, что это разрушает артистизм ... но в конце концов это кодовый гольф. ;)Любая римская цифра является действительным номером сцены
Это означает, что вместо:
Ты можешь сделать:
источник
D
действительной римской цифрой? IIRC, это 500 (но я не уверен, что он действителен в SPL)Удалить ненужные слова
Посмотрите на это (вставка новых строк и пробелов для удобства чтения):
Выглядит довольно гольф, а? Вот еще более урезанная неразборчивая форма:
Для справки вот список легко удаляемых слов из кода:
big cat
, в противном случае вам все еще нужно «есть»Условные обозначения:
X
иY
являются постоянными, какcat
,I
илиyou
[op]
Являются ли операции, какnicer
,the sum of
Если я найду другие, я добавлю их в список.
Для дополнительной информации вот кратчайший заголовок для запуска программы:
Попробуйте онлайн!
При необходимости добавьте Page и Ford в качестве дополнительных символов.
источник
Используйте короткие слова
Итак, вот они:
a
вместоan
илиthe
, кроме выраженийthe sum of
и аналогичных, так как они не будут работать сa
.am
,be
илиis
вместоare
илиart
.I
вместоme
илиmyself
.you
вместоthee
,thou
,thyself
илиyourself
.big
для прилагательных.cat
для положительных чисел.pig
для отрицательных чисел.zero
для нуля.worse
дляA < B
(вместоsmaller
илиpunier
).nicer
дляA > B
(вместоbetter
,bigger
,fresher
,friendlier
илиjollier
).источник
«Давайте вернемся к сцене X» можно использовать, даже если персонаж, с которым разговаривают, находится вне сцены. Так что вместо:
Ты можешь сделать:
источник
Удалить лишние пробелы
Помимо тривиальных (два соседних пробела, рядом с пунктуацией, рядом с новой строкой, в конце) (за некоторыми исключениями), пробел после следующих токенов может быть удален:
the sum of
let us
the ghost
( как это ) (но кто бы использовал этот персонаж в любом случае)if so
иif not
(удалить,
после этого и не нужно добавлять пространство Пример:.if solet usact I
)listen to
(такlisten tothy
работает, вот так )Примечание. Это не работает с интерпретатором Perl . Вероятно, это просто непреднамеренный эффект, вызванный синтаксическим анализом Flex. «Стандартный язык» не ясно об этом.
источник
Вам не нужно переключать людей в условных выражениях.
Например,
длиннее чем
источник
Вместо вычитания добавьте константы
длиннее чем
источник
Прыжки могут быть короче
Вы можете использовать,
return to
даже если сцена впереди, и наоборот. На самом деле, переводчику даже не важно, пропустите ли вы его полностью. Это означает, что эти три утверждения на 100% эквивалентны:источник
Let usscene X
достаточно .Используйте только одну сцену
Обычно вы не можете повторно использовать первую сцену акта, так как она всегда имеет
[Enter Ajax and Puck]
первое. Однако вы можете предвосхитить это,[Exeunt]
чтобы иметь возможность повторно использовать первую сцену пьесы.[Exeunt]
на один байт короче, чем объявление новой сцены, а переход к действию на два байта меньше, чем переход к сцене.Например: простая программа для кошек
Попробуйте онлайн!
Для того, чтобы:
Попробуйте онлайн!
источник
Используйте более короткие слова
Примеры:
Thy
иthyself
корочеyour
иyourself
.Is
короче чемare
.и больше...
источник
Используйте умные условия
Например, не используйте
Скорее,
источник
If (so|not)
не нужно сразу следить за сравнением.источник
If so
секунд. Это может помочь избежать повторяющихся сравнений!Используйте константы для хранения больших чисел
Например, если у вас есть
Вы можете просто объявить другого человека на вершине
и измените свой код на
источник
Gotos - не единственные команды, которые можно использовать с
If (so|not)
источник
Все новые строки игнорируются
источник
Используйте
<
или>
вместо==
Не применимо к любой ситуации, но это немного короче:
Шайба == Аякс
Шайба <Аякс или шайба> Аякс
4 байта короче для обоих!
источник
Вам не нужен конец
.
или!
.Попробуйте онлайн!
Это также может быть использовано до
[
. (спасибо jimmy23013)Примеры:
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Open mind[Exeunt]
Не работает в:
,.Ajax,.Page,.Act I:.Scene I:[Enter Ajax]
(сразу послеScene {number}:
) (однако это работает, я не знаю почему),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen to your heart
(и более короткие варианты),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Let us return to scene I
(и более короткие варианты),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Recall
(только после того, как пустойRecall
,Recall x
илиRecall@
т.п. работ),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy
(безmind
)источник
Speak thy
илиLet us Scene I
Используйте «дважды» и свойство распределения
Вместо того:
Использование:
Это экономит 2 байта на каждый,
twice
так как 2 использованияbig
составляют 8 байтов (с пробелом) иtwice
только 6 байтов.источник