Лист звичайний (SBCL), 52 байти
(format`,t"~[Programming Puzzles~;Code~@TGolf~]"0 1)
Друкує Programming Puzzles
(format`,t"~[ProgrammingPuzzles~;Code~@TGolf~]"01)
Друкує Code Golf
Безголівки:
(format t "~[Programming Puzzles~;Code Golf~]" 0 1)
Пояснення:
Трюк в основному походить від того, як #'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
.