Common Lisp (SBCL), 52 bajty
(format`,t"~[Programming Puzzles~;Code~@TGolf~]"0 1)
Wydruki Programming Puzzles
(format`,t"~[ProgrammingPuzzles~;Code~@TGolf~]"01)
Wydruki Code Golf
Nie golfowany:
(format t "~[Programming Puzzles~;Code Golf~]" 0 1)
Wyjaśnienie:
Trik polega w zasadzie na tym, jak #'format
działa Common Lisp.
W CL większość białych znaków można pominąć, pod warunkiem, że nie ma dwuznaczności co do tego, gdzie tokeny zaczynają się lub kończą. Pierwszą sztuczką było oddzielenie symboli format
i t
. Musiałem jednoznacznie zakończyć format
symbol bez zmiany sposobu t
interpretacji. Na szczęście `w CL kończy poprzedni token, zanim zostanie przetworzony, i ,
anuluje efekt` (`służy do implementacji szablonów, gdzie następne wyrażenie po nim zostaje„ cytowane ”, ale każde podwyrażenie poprzedzone znakiem,
jest oceniane i wynik zawarty w szablonie, więc `, to prawie brak możliwości).
Trzecim argumentem format
jest ciąg szablonu. format
jest podobny do printf w C, ale ma znacznie potężniejsze dyrektywy formatujące i używa ~, aby je wskazać zamiast%. ~ [i ~] pozwalają wybierać spośród wielu opcji drukowania, za pomocą ~; rozdzielając je. Podany jest dodatkowy argument dotyczący formatu - którego indeks liczbowy chcesz wydrukować. Aby zapewnić przetrwanie „” w Code Golf, użyłem dyrektywy tabelarycznej ~ T, która służy do wstawiania białych znaków, ogólnie do wyrównywania tekstu w kolumnach. ~ @ T to odmiana, która po prostu wstawia określoną liczbę spacji, domyślnie 1.
Wreszcie istnieją dwa argumenty do sformatowania - 0 i 1. Przed usunięciem białych znaków ~ jest używane przez ~ [~; ~] do wybrania „Programowania łamigłówek”, a dodatkowy argument formatujący (1) jest usuwany (jestem Nie jestem pewien, jak standardowe jest usuwanie argumentów dodatkowego formatu, ale działa to na Common Bank Lisp w Steel Bank). Po usunięciu białych znaków jest tylko jeden argument (01), który zamiast tego wybiera „Code Golf”.
Code Golf
również zostanie usunięta, a co z tą wProgramming Puzzles
.