Common Lisp (SBCL), 52 Byte
(format`,t"~[Programming Puzzles~;Code~@TGolf~]"0 1)
Druckt Programming Puzzles
(format`,t"~[ProgrammingPuzzles~;Code~@TGolf~]"01)
Druckt Code Golf
Ungolfed:
(format t "~[Programming Puzzles~;Code Golf~]" 0 1)
Erklärung:
Der Trick kommt im Grunde davon, wie #'format
in Common Lisp funktioniert.
In CL können die meisten Leerzeichen weggelassen werden, vorausgesetzt, es besteht keine Unklarheit darüber, wo Token beginnen oder enden. Der erste Trick war das Trennen der Symbole format
und t
. Ich musste das format
Symbol eindeutig beenden, ohne zu ändern, wie t
es interpretiert wurde. Glücklicherweise beendet `in CL das vorhergehende Token, bevor es verarbeitet wird, und ,
hebt den Effekt von` (`auf, um das Templating zu implementieren, wobei der nächste folgende Ausdruck" in Anführungszeichen "gesetzt" wird, wobei jedoch jedem Unterausdruck ein vorangestelltes a vorangestellt wird,
ausgewertet wird und Das in der Vorlage enthaltene Ergebnis ist also so gut wie ein No-Op.
Das dritte Argument für format
ist die Vorlagenzeichenfolge. format
ähnelt printf in C, hat jedoch viel leistungsstärkere Formatierungsanweisungen und verwendet ~, um sie anstelle von% anzugeben. Mit ~ [und ~] können Sie zwischen mehreren Druckoptionen wählen, mit ~; sie trennen. Ein zusätzliches Argument wird an format übergeben - der numerische Index, von dem Sie einen ausdrucken möchten. Um sicherzustellen, dass das "" in Code Golf erhalten bleibt, habe ich die Tabellierungsanweisung ~ T verwendet, mit der Leerzeichen eingefügt werden, um im Allgemeinen Text in Spalten auszurichten. ~ @ T ist eine Variation, die nur eine bestimmte Anzahl von Leerzeichen einfügt, standardmäßig 1.
Schließlich gibt es zwei Argumente für Format-0 und 1. Bevor das Leerzeichen entfernt wird, wird die 0 von ~ [~; ~] verwendet, um "Programming Puzzles" auszuwählen, und das zusätzliche Format-Argument (die 1) wird fallengelassen (I'm Ich bin mir nicht sicher, wie es Standard ist, zusätzliche Formatargumente zu löschen, aber dies funktioniert bei Steel Bank (Common Lisp). Nachdem das Leerzeichen entfernt wurde, gibt es nur ein Argument (01), das stattdessen "Code Golf" auswählt.
Code Golf
auch entfernt, was ist mit dem inProgramming Puzzles
.