Angenommen, eine Codegolf-Challenge zählt keine Leerzeichen in der Länge Ihres Programms. Betrügen Sie dieses System, indem Sie Ihr Skript in Leerzeichen kodieren, und spielen Sie ein Skript an, das eingebettete Leerzeichen dekodiert und ausführt.
Beispiel
Meine Lösung JBernardo ‚s Meta Golf Challenge war zu kodieren Sage (oder Python) Code in Leerzeichen und Golf der Decoder.
s = ' '
for c in '<lots of whitespace>'.split(s):
s+=chr(len(c))
exec s
Bei der Kodierung wird ein Skript erstellt, eine neue Zeile vorangestellt und für jedes Zeichen c
im Skript werden Ausgaberegisterkarten ord(c)
gefolgt von einem Leerzeichen angezeigt . Das Voranstellen einer neuen Zeile ist erforderlich, da ich Python verwende und das Skript s
mit einem Leerzeichen starte .
Wertung
Eine vollständige Lösung enthält eine Beschreibung der von Ihnen verwendeten Codierung (wenn es kompliziert ist, stellen Sie ein Skript bereit) und ein Skript zum Decodieren und Ausführen. Ihre Punktzahl ist die Anzahl der Nicht-Leerzeichen im Decode-and-Execute-Skript.
Leerzeichen (die Sprache) sind verboten
Darüber hinaus ist jede Sprache, die einen vollständigen Satz von Operatoren enthält, die nur Leerzeichen verwenden, nicht zulässig: Ich akzeptiere die niedrigste Punktzahl ungleich Null.
quelle
.n/{,}%+~
würde das auch funktionieren.CPAN, 16
CPAN hat alles. Oder zumindest genau das richtige Modul.
quelle
Perl, 29
Darin
s///
befindet sich ein Tabulator und dann ein Leerzeichen. Die Kodierung ist eine ultra-grundlegende Kodierung mit Leerzeichen, denen Tabulatoren vorangestellt sind.Versuchen Sie dies in der Befehlszeile:
Bearbeiten: Nun, lol, ich kann keinen richtigen Weg finden, um den Tab / Space-Mix zu kopieren und einzufügen. Glauben Sie mir, es funktioniert zu Hause :)Update: dort, dort, verschlüsselt mittr
quelle
\t
und wir werden glauben, es funktioniert mit Leerzeichen ...\t
von der shell interpretieren lassen und habe tatsächlich das verdammte ding nachweislich funktionieren lassen. Mach das in ein paar Stunden.JavaScript
Ersetzen Sie
\t
durch einen Tabulator, um die Anzahl der veröffentlichten Zeichen zu erhalten.Standard (64 Zeichen)
Pfeilfunktion (49 Zeichen)
Encoderprogramm für beide
quelle
(s)=>...
in ders=>...
" t " [ 1 ]
"t")eval("".replace(/ +/g,s=>' []+!()'[s.length]))
Yabasic (88 Zeichen)
Verwenden Sie dasselbe Encoderprogramm wie für meine C-Lösung, entfernen Sie jedoch nicht das erste Zeichen. Ihr ursprünglicher Code muss in Form einer Unterroutine vorliegen
a()
, zum Beispiel:quelle
C (99 Zeichen)
Getestet nur mit (und funktioniert vielleicht nur mit) GCC.
Entsprechendes Encoderprogramm (erstes Zeichen manuell aus der Ausgabe entfernen):
quelle
D (101 Zeichen)
gleiche Kodierung wie in der Frage (kein Zeilenumbruch nötig)
quelle
Bash (nur Builtins, 44 Zeichen)
Entsprechendes Encoder-Skript:
quelle
man
ein bisschen aufstehen, um das zu schüren.K5, 12 Bytes
Führe (
.
) die Zeichenkette aus, die aus den ASCII-Werten (`c$
) gebildet wird, die durch die Differenz zwischen jedem Paar (-':
) der Indizes gegeben sind, wobei (&
) die Eingabe ein Tabulator ist (9=" "
) ist.Die Eingabe besteht aus einer Folge von Tabulator- und Nicht-Tabulator-Zeichen. Die Zeichenwerte werden in der Anzahl der Nicht-Tabulatoren (Leerzeichen oder Zeilenumbrüche) zwischen den einzelnen Tabulatoren codiert. Ein Beispiel für einen Encoder:
Führen Sie einen laufenden Join durch, der mit einem Leerzeichen über (
" ",/
) x Leerzeichen (x#" "
) beginnt, die mit einem Tabulator (,"\t"
) verbunden sind, wobei X jeweils{...}'
eins minus den Zeichenwerten der Eingabezeichenfolge ist (-1+
) ist.In Aktion:
quelle
Rubin, 43
Sehr einfach: Beim Kodieren werden x Leerzeichen pro Zeile eingefügt, wobei x der ASCII-Wert des Zeichens ist. Das Dekodieren erfolgt in umgekehrter Reihenfolge.
Das folgende Skript ist nur ein Unary-to-ASCII-Konverter und funktioniert auch dann, wenn andere Dinge als Leerzeichen frei sind:
Ersetzen Sie einfach die leere Zeichenfolge durch das Programm, das Ihnen gefällt.
Das Ding in einem wiederverwendbareren Format:
quelle