Common Lisp (SBCL), 52 байта
(format`,t"~[Programming Puzzles~;Code~@TGolf~]"0 1)
Печать Programming Puzzles
(format`,t"~[ProgrammingPuzzles~;Code~@TGolf~]"01)
Печать Code Golf
Ungolfed:
(format t "~[Programming Puzzles~;Code Golf~]" 0 1)
Explaination:
Хитрость в основном заключается в том, как #'format
работает в Common Lisp.
В CL большая часть пробелов может быть опущена при условии, что нет никакой двусмысленности относительно того, где токены начинаются или заканчиваются. Первый трюк отделяя format
и t
символы. Мне пришлось однозначно закончить format
символ, не меняя t
интерпретации. К счастью, `в CL завершает предыдущий токен до его обработки и ,
отменяет действие` (`используется для реализации шаблонов, где следующее выражение, следующее за ним, получает" в кавычках ", но любое подвыражение с префиксом a ,
вычисляется и результат, включенный в шаблон, так что `, почти не используется).
Третий аргумент format
- это строка шаблона. format
похож на printf в C, но имеет гораздо более мощные директивы форматирования и использует ~, чтобы указать их вместо%. ~ [и ~] позволяют выбирать между несколькими вариантами печати с помощью ~; отделяя их. Дополнительный аргумент предоставляется для формата - числовой индекс, который вы хотите напечатать. Чтобы «» в Code Golf сохранилось, я использовал директиву табуляции ~ T, которая используется для вставки пробелов, как правило, для выравнивания текста по столбцам. ~ @ T - это вариант, который просто вставляет заданное количество пробелов, по умолчанию 1.
Наконец, есть два аргумента для форматирования - 0 и 1. Перед удалением пробела ~ [~; ~] используется 0 для выбора «Пазлы программирования», а дополнительный аргумент формата (1) отбрасывается (я не знаю, как стандартно отбрасывать дополнительные аргументы формата, но это работает на Steel Bank Common Lisp). После удаления пробела появляется только один аргумент (01), который выбирает «Код Гольф».
Code Golf
также будет удалено, как насчет одного вProgramming Puzzles
.