Ihre Aufgabe ist es, ein Programm zu schreiben, das die genaue Zeichenfolge ausgibt Programming Puzzles
(Zeilenumbruch optional). Wenn jedoch alle Leerzeichen, Tabulatoren und Zeilenumbrüche entfernt werden, erfolgt die Ausgabe Code Golf
(Zeilenumbruch optional).
Ihre Byteanzahl ist die Anzahl des ersten Programms, wobei noch Leerzeichen vorhanden sind.
Anmerkungen
Die Leerzeichen in
Code Golf
undProgramming Puzzles
werden im Rahmen der Entfernung entfernt. Planen Sie daher entsprechend.In Codierungen, in denen 0x09, 0x0A und 0x20 keine Tabulatoren, Zeilenumbrüche oder Leerzeichen sind, werden diese Zeichen entfernt.
Wenn Ihr Code ist
42 $@ rw$ @42
dann muss das ausgeben
Programming Puzzles
. Auch in der gleichen Sprache,42$@rw$@42
muss ausgeben
Code Golf
.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes! Viel Glück!
quelle
Code Golf
auch entfernt, was ist mit dem inProgramming Puzzles
.Antworten:
Python 2 , 50 Bytes
Probieren Sie es online!
Wenn alle Leerzeichen entfernt sind:
Versuchen Sie das online!
Danke an Stephen S für 3 Bytes und Erik the Outgolfer für 1
quelle
" ">""
zurückgegebenTrue
, da ein Leerzeichen lexikografisch größer als die leere Zeichenfolge ist. Im zweiten Fall wird"">""
zurückgegebenFalse
, da nichts größer als sich selbst sein kann.True
undFalse
sind eigentlich nur1
und0
jeweils nur in dembool
Datentyp stattint
oderlong
. Im ersten Fall bleiben die Leerzeichen erhalten, sodass das Element bei Index 1"Programming Puzzles"
wörtlich zurückgegeben wird. Im zweiten Fall sind die Leerzeichen weg, daher das\x20
im Element bei Index 0"Code\x20Golf"
, um ein Leerzeichen beizubehalten.Python 2 ,
4847 Bytes-1 Byte dank Erik dem Outgolfer
Probieren Sie es online!
Probieren Sie es online!
quelle
05AB1E , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
C
64625352 BytesProbieren Sie es online!
Verwendet die Tatsache, dass C-Zeichenfolgen mit einem Nullzeichen enden
quelle
CJam , 38 Bytes
Probieren Sie es online! oder mit Leerzeichen entfernt
Erläuterung
Ob sich Leerzeichen im Programm befinden oder nicht, bestimmt, ob die erste Zeichenfolge wahr oder falsch ist.
quelle
:(
"Bncd\x19Fnke":)
verwenden Sie stattdessen fröhlichen Code (Ersetzen\x19
).Jelly , 18 Bytes
Probieren Sie es online!
Erläuterung
In dem Programm, wie es geschrieben wurde, ist die erste Zeile eine Hilfsfunktion, die niemals ausgeführt wird. Die zweite Zeile (die letzte im Programm) ist das Hauptprogramm und die komprimierte Darstellung der Zeichenfolge
"Programming Puzzles"
(die dann implizit gedruckt wird).Wenn Sie den Zeilenumbruch entfernen, wird das Ganze zu einem großen Programm.
“½ċṭ6Ỵ»
ist die komprimierte Darstellung des Strings"Code Golf"
.ḷ
wertet aus, ignoriert jedoch das Argument für die rechte Hand und lässt den gleichen Wert wie vor der Ausführung; Es kann verwendet werden, um Funktionen auf ihre Nebenwirkungen zu untersuchen (was ich zuvor getan habe), aber es kann auch verwendet werden, um wie hier Code effektiv auszukommentieren.Interessanterweise ist die eigentliche Logik hier kürzer als der Eintrag 05AB1E, aber der Code insgesamt wird länger ausgegeben, weil der Stringkomprimierer diese bestimmten Strings weniger gut komprimiert.
quelle
Gelee , 17 Bytes
Probieren Sie es online!
Wie es funktioniert
Wie in der anderen Jelly-Antwort,
Ñ1ɦ+£)G
und½ċṭ6Ỵ
codieren Sie die Zeichenfolgen Programming Puzzles und Code Golf .“
Beginnt ein Zeichenfolgenliteral und trennt eine Zeichenfolge von einer anderen, während»
die Art des Literal (wörterbuchbasierte Komprimierung) ausgewählt wird. Dies ergibt alsoṂ
Nimmt dann das Minimum und ergibt Code Golf .Durch Hinzufügen eines Leerzeichens zwischen
½ċṭ6
und erhaltenỴ
wir jedoch eine völlig andere zweite Zeichenfolge, und das Literal wird zu ausgewertetDa caird coinheringaahing lexikographisch größer ist als Programming Puzzles ,
Ṃ
wird stattdessen die erste Zeichenfolge ausgewählt.quelle
“½ċṭ6Ỵ“Ñ1ɦ +£)G»Ṁ
Javascript,
464342 Bytesquelle
\x20
die erste Zeichenfolge durch ein Leerzeichen ersetzen .;
?;
s werden in JavaScript manchmal nicht benötigt.\x20
mit\40
einem Byte :-) zu speichernWolfram-Sprache, 62 Bytes
Das Leerzeichen in
[[0 1]]
ist implizite Multiplikation, dies ist also äquivalent zu[[0]]
. Ohne Leerzeichen geht01
es einfach1
. Der 0. und 1. Teil dieses Ausdrucks sind die von uns gewünschten Zeichenfolgen.Eine andere Lösung von fraglicher Gültigkeit (44 Bytes, 2 von Kelly Lowder gespeichert):
Das
\.20
wird sofort durch ein Leerzeichen ersetzt, wenn es in eine Mathematica-Umgebung eingegeben wird. Es ist also nicht klar, ob es zusammen mit den anderen Leerzeichen entfernt wird.quelle
\:0020
zu einem Leerzeichen und würde daher entfernt. Daher bin ich mir nicht sicher, ob dies qualifiziert ist. Auch\.20
ist shorter.by zwei Zeichen."Programming Puzzles"["Code"<>FromCharacterCode@32<>"Golf"][[01]]
wird funktionieren.\.20
Vorschlag - wie haben Sie das gefunden? Ich dachte, ich hätte die gesamte Dokumentation\.20
indem ich einen Tippfehler machte. Scheint nur für zweistellige Zeichencodes zu funktionieren. Ich glaube nicht, dass es in der Dokumentation steht.Excel - 56 Bytes
Sehr ähnlich zu den meisten anderen Antworten ... nichts Besonderes.
quelle
Haskell, 48 Bytes
Definiert eine Funktion,
f
die den entsprechenden String zurückgibt.Als Referenz ist die alte Version:
Haskell, 49/47 Bytes
mit Leerzeichen entfernt
Zwei einfache Musterübereinstimmungen.
(_)
stimmt mit allen Mustern überein. Sie können die Version ohne Leerzeichen um ein Byte verbessern, indem Sie das zweite Muster alsf" "=
/ definierenf""=
. Dies gibt jedoch die Warnung "Musterübereinstimmung ist redundant" aus.Alternative Lösung mit gleicher Byteanzahl:
quelle
Ohm ,
3332 BytesVerwendet die CP437-Codierung.
Probieren Sie es online! oder versuchen Sie es ohne Leerzeichen
Erläuterung
Mit Leerzeichen:
Ohne Leerzeichen:
quelle
Code Golf
beim Komprimieren länger wurde. Ich denke, das liegt an den Hauptstädten? In jedem Fall ist es immer noch kürzer als das normale Schreiben, da ich hier kein buchstäbliches Leerzeichen verwenden kann.Japt , 29 Bytes
Mit Leerzeichen:
Probieren Sie es online!
Ohne Zwischenraum:
Probieren Sie es online!
Dies nutzt die Tatsache aus, dass in Japt ein Leerzeichen einen Methodenaufruf schließt. Mit Leerzeichen entspricht der Code ungefähr diesem JavaScript-Code:
Dies wird als JavaScript ausgewertet und das Ergebnis wird an STDOUT gesendet. Da ist der letzte Ausdruck
"Programming Puzzles"
, wird diese Zeichenfolge gedruckt.Ohne Leerzeichen entspricht der Code ungefähr:
(Wenn Sie es bis jetzt noch nicht verstanden haben, ist die
S
Variable ein einzelnes Leerzeichen.).r()
Wenn für eine Zeichenfolge ein Argument angegeben wird, werden alle Instanzen dieses Arguments aus der Zeichenfolge entfernt. Da"Code Golf"
nicht enthalten"ProgrammingPuzzles"
, gibt es"Code Golf"
unverändert zurück, die dann an STDOUT gesendet wird.quelle
Brachylog , 44 Bytes
Probieren Sie es online!
Erläuterung
quelle
auf beiden Seiten zu beheben :)Alice , 44 Bytes
Probieren Sie es online!
Ohne Leerzeichen:
Probieren Sie es online!
Erläuterung
Im ersten Programm
/
leiten die beiden Spiegel den Befehlszeiger auf die zweite Zeile um."selzzuP gnimmargorP"
Drückt die erforderlichen Codepunkte in umgekehrter Reihenfolge,d
drückt die Stapeltiefe und&o
druckt so viele Bytes.@
Beendet das Programm.Ohne das Leerzeichen steht das Programm in einer einzigen Zeile. In diesem Fall kann sich der Anweisungszeiger nicht im Ordinal-Modus bewegen, sodass die Befehle
/
effektiv nicht ausgeführt werden (technisch gesehen bewegt sich die IP nur einen Schritt lang nicht, dieselbe/
wird erneut ausgeführt, und die IP wird wieder im Kardinal-Modus angezeigt ). Wenn wir diese also aus dem Programm streichen, sieht es so aus:Um das Leerzeichen
Code Golf
einzufügen, verwenden wir stattdessen ein Ausrufezeichen und dekrementieren es mitt
. Nachdem wir alle Codepunkte auf dem Stapel haben,#
überspringt der nächste Befehl, der die gesamte zweite Zeichenfolge ist.d&o
Anschließend wird der Stapel erneut gedruckt und@
das Programm beendet.quelle
PHP, 44 Bytes
ternärer Operator
PHP, 51 Bytes
Kommentar
PHP, 57 Bytes
Array-Schalter
quelle
Common Lisp (SBCL), 52 Byte
Druckt
Programming Puzzles
Druckt
Code Golf
Ungolfed:
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
undt
. Ich musste dasformat
Symbol eindeutig beenden, ohne zu ändern, wiet
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.
quelle
,
ist, wird ausgewertet und gespleißt in" Ist das nicht,@
notwendig für das Spleißen?,
wird der nächste Ausdruck ausgewertet und das Ergebnis in die Vorlage aufgenommen, während,@
davon ausgegangen wird, dass der Ausdruck in einer Liste ausgewertet wird und der Inhalt dieser Liste direkt in die Vorlage aufgenommen wird. Traditionell wird in der Lisp-Community,@
"Spleißen" genannt, aber ich bin mir nicht sicher, ob das die naheliegendste Wahl ist. Ich werde versuchen, es ein bisschen neu zu formulieren.Pyth, 37 Bytes
Probieren Sie es hier aus.
Probieren Sie es hier aus.
quelle
C #
88817063 BytesMit Leerzeichen entfernt:
Vielen Dank an BrianJ, der mir gezeigt hat, wie kein Leerzeichen zwischen einem Methodenrückgabetyp und dem Methodennamen steht, PeterTaylor für das Speichern von
7 bis18 Bytes und Patrick Huizinga für das Speichern von 7 Bytes.Gleiche Methode wie alle anderen auch wirklich,
könnte dies technisch ungültig betrachtet werden , da das Verfahren, keinen Rückgabetyp für die Methode angeben , aber es hat zwischen dem Rückgabetyp und dem Methodennamen Leerzeichen sein.quelle
@
, so dass Sievoid@a...
den Kompilierungsfehler "kein Rückgabetyp" haben und vermeiden (fügt jedoch auch Bytes hinzu :().Length<1
spart ein Byte;\u0020
spart sechs, wenn ich richtig gezählt habe; und Sie können eine gültige Antwort geben (und gleichzeitig einige Bytes sparen), indem Sie ein Lambda anstelle einer Funktion der obersten Ebene senden.Func<string>a=()=>...
@
wird hauptsächlich verwendet, wenn Sie ein reserviertes Wort als Variablennamen verwenden müssen (das Äquivalent steht[]
in VB.NET (und MS SQL Server) für "umgeben").=>
stattdessenreturn
verwenden, brauchen Sie keine Leerzeichen. (Und selbst wenn Sie verwendenreturn
, können Siereturn(...)
).Java 8,
745048 Bytesquelle
==
Operator sollte auch funktionieren()=>""==""?"Code\u00A0Golf":"Programming Puzzles"
\u00A0
->\040
für eine 2 Byte Einsparung.Japt , 32 Bytes
Probieren Sie es online!
quelle
PowerShell , 56 Byte
Probieren Sie es online!
Ziemlich einfach würde ich sagen, aber es wird die Arbeit erledigt
quelle
R, 50 Bytes
Ich denke, das ist das gleiche wie diese Javascript-Antwort und im Grunde die gleiche Idee wie alle anderen.
quelle
> <> , 42 Bytes
Mit Leerzeichen
Probieren Sie es online!
Ohne Leerzeichen
Probieren Sie es online!
quelle
dc , 50
Probieren Sie es online aus .
[ ]
definiert einen String -Z
misst seine Länge. Wenn die Länge 19 ist, enthält sie ein Leerzeichen und das im m-Register gespeicherte Makro wird aufgerufen, das gedrucktProgramming Puzzles
und beendet wird. AnsonstenCode Golf
wird gedruckt.quelle
> <> ,
4745 BytesProbieren Sie es online!
Dank Randomra für -2 (kluge zwei
!
s, so dass ich nur eine verwenden kann>o<
.)Der Code ruft "Flog! Flog! Flog!" und ähnelt einem Fisch.
quelle
T-SQL,
96828167 BytesVersuchen Sie es online | Ohne Zwischenraum
Alte Version (96 Bytes):
quelle
iif(len(' x')=2
print
. Ich habe+
stattdessen eine verwendet und es hat funktioniert.Perl 5 ,
4341 BytesProbieren Sie es online!
Verwendet die Tatsache, dass
' '
in Perl wahr und''
falsch ist. Die$"
Variable ist standardmäßig auf ein Leerzeichen gesetzt.Vielen Dank an @NahuelFouilleul für das Entfernen von zwei Bytes.
quelle
"Code$\"Golf"
ist kürzer undCode.$".Golf
auchGolfScript , 38 Bytes
Probieren Sie es online!
quelle
Befunge , 76 Bytes
Probieren Sie es online!
Nicht die kompakteste Lösung, aber es ist ziemlich schwierig, Befunge-Code ohne Leerzeichen zu schreiben.
Ganz am Anfang wird ein Leerzeichen mit 0 verglichen. Wenn es größer ist, wird es in die unterste Zeile verschoben. Wenn dies nicht der Fall ist, bleibt es in der ersten Zeile, wenn Sie Leerzeichen durch nichts ersetzen.
quelle
,
s?>:#,_
wodurch Sie viele Bytes sparen könnten