Einfache Herausforderung: Versuchen Sie, den folgenden Text in so wenigen Bytes wie möglich auszugeben:
the answer
toli fetheuniv
ersea nde ver
ything the ans
wer tol ife the
uni ver sean
dev ery thin
gth ean swer
tolifetheuni ver
seandeveryth ing
the ans wer
tol ifetheuniver
sea ndeverything
Die Originalzeichnung enthält 332 Zeichen.
Regeln
- Keine Eingabe oder eine nicht verwendete Eingabe.
- Die Ausgabe kann in jedem vernünftigen Format erfolgen (Zeichenfolge, Liste der Zeichenfolgen, Zeichenmatrix usw.).
- Sie können für die Zeichnung Großbuchstaben anstelle von Kleinbuchstaben verwenden, wenn Sie dies bevorzugen.
- Leerzeichen und Zeilenumbrüche dürfen nachgestellt werden.
- Das ist Code-Golf , also kann das kürzeste Programm / die kürzeste Funktion für jede Sprache gewinnen!
Anmerkungen
- Dies wurde als mögliches Duplikat von Wir sind kein Fremder, wenn es darum geht, Golf zu kodieren. Sie kennen die Regeln, und ich auch . Bei dieser Frage ging es um das Suchen und Ersetzen von Text. Hier muss anhand eines vorgegebenen Textes eine Form gezeichnet werden, und mindestens zwei der aktuellen Antworten zeigen, dass Golfsprachen in diesem Fall einfache Kompressionsalgorithmen übertreffen können.
42
mit zeichen gezeichnet habe*
und sie dann durch den text ersetzt habe, der perfekt passt. Ich musste die ursprüngliche Zeichnung nicht modifizieren, um den Satz passend zu machen. Zufall?Antworten:
Python 3 ,
224 220 219 215 211194 Bytes15 Bytes:if(j%27<1)*j
stattif j*(j%27<1)
und vereinfachte Druckanweisung .7*'0'
Probieren Sie es online!
Erläuterung:
Verwendet Base-36-Komprimierung zum Komprimieren dieser Binärzahl (ohne Zeilenumbruch)
Wir haben grundsätzlich zwei Zähler
i
undj
. Bei der Begegnung mit einem1
drucken wir ein Leerzeichen; Andernfalls0
drucken wir den nächsten Buchstaben aus der Zeichenfolge und erhöhen ihni
.j
erhöht sich für jeden0 or 1
. Wir drucken auch neue Zeilen, wann immer dies erforderlich ist, dh wann esj%27<1
wahr wird.quelle
if j*(j%27<1):
aufif(j%27<1)*j:
Python 2 ,
235218213 BytesProbieren Sie es online!
Auf eine Basis 36 umgeschaltet, die int der Buchstabenpositionen codiert, wie in der Frage angedeutet.
Ersetzt jedes Zeichen einzeln.
Edit: Es scheint, als hätte officialaimm die Basis 36 vor mir benutzt.
quelle
Bubblegum , 125 Bytes
Probieren Sie es online!
quelle
05AB1E ,
837974 Bytes-4 Bytes dank Erik dem Outgolfer
Gibt eine Liste von Zeichenfolgen aus, um ein Byte zu speichern.
Probieren Sie es online!
Erläuterung
2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm
ist die Basis-255-Darstellung der Dezimalzahl:Das codiert Läufe von
1
s bzw.0
s, wobei sogar Indizes das1
s und ungerade das0
s sind. Dies ergibt die Binärzahl:Code
quelle
"ÔAo îιË3š1ĆRÕ₃FWš{ÓÛÏ.!XµM§&¶ñD°3PŸ{óNι2Ðbмh"253ö
mit•—."Ôq‚Ā0Ál0j¿«ªžé¨0õ₄7“Ÿ!½ÏiæÆø-δq–Å05q½Yñá+•
für -4.•
sind :)Python 2 ,
220 213212 Bytes-1 Byte durch Umschalten
()*4
für%39
von @officialaimmProbieren Sie es online!
Dies ist ein anderer Ansatz als die anderen Python-Antworten. Ich verwende eine
hexadezimaleBase-36- Codierung (7 Bytes gespeichert) für einePNG-artigeRLE-artige Codierung des Bildes (eine Ziffernfolge, die die Anzahl der aufeinanderfolgenden wiederholten Pixel angibt).Die Ziffernfolge lautet :
Dann durchlaufe ich diese Ziffern und drucke abwechselnd die Anzahl von '' s oder Zeichen aus der Palette ('theanswer ...'). Wenn mehr als 9 Zeichen wiederholt werden, füge ich einfach eine 0 und dann den Rest hinzu.
quelle
"theanswertolifetheuniverseandeverything"[w%39]
TIOSOGL V0.12 , 74 Bytes
Probieren Sie es hier aus!
quelle
Gestatten Sie mir, meine eigene Frage zu beantworten ...
Charcoal ,
140 126112 BytesProbieren Sie es online!
Sie haben hier einen Link zur nächsten ausführlichen Version.
Erklärung (Details siehe ausführliche Version):
)%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.
Zeichenfolge (68 Bytes, 48 Bytes komprimiert) ist eine Darstellung der RLE-Codierung der Zeichnung. Jeder Zeichencode minus 34 ist die Anzahl der Leerzeichen (gerade Positionen) oder die Anzahl der Textzeichen (ungerade Positionen), die nacheinander gedruckt werden sollen.gtheanswertolifetheuniverseandeverythin
jedes Mal, wenn ein Nicht-Leerzeichen-Zeichen geschrieben werden muss , das nächste Zeichen der Zeichenfolge (39 Byte, 27 Byte komprimiert). Wenn ich die Länge einer Liste überprüfe, um das nächste Zeichen zu erhalten, und diese Liste mit einem Element beginnt, wird das letzte Zeichen der Zeichenfolge an der ersten Position geschrieben.Danksagung
quelle
Assign(Minus(1, c), c);
dann verwenden, können Sie nur verwendenif (c) { ... } else Print(" ");
.for (68)
undAtIndex("...", i)
dann verwenden, können SieModulo(i, 2)
stattdessen verwenden und Sie brauchenc
überhaupt nicht.if (Not(Modulo(Length(PushOperator(u, w)), 27)))
dann verwenden, brauchen Sie auch nichta
.AtIndex
macht eine automatischeModulo
soModulo(b, 39)
kann es eben seinb
.u
ist eine vordefinierte Variable, die nur ein leeres Array ist (spart mitA⟦⟧υ
). Jedes Mal, wenn Sie etwas darauf drücken, erhöht sich seine Länge um 1. Dies ist kürzer als eine explizite Zuweisung zum Inkrementieren.JavaScript (ES6),
207205203 BytesGibt ein Array von Zeichenfolgen mit Leerzeichen zurück.
quelle
Retina , 183 Bytes
Probieren Sie es online! Erläuterung: Die erste Stufe fügt die RLE-Codierung der Zellenbitmap und des Texts hinzu, die die zweite Stufe dann auf die richtige Länge dupliziert, während die dritte Stufe die RLE-Codierung decodiert. Die vierte Stufe verschiebt dann den Text in die Zellen.
quelle
Jelly , 83 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Add ++ , 1398 Bytes
Probieren Sie es online!
Es sieht aus wie Hardcoding, es ist der kürzeste Weg (zumindest in Add ++)
quelle
Vim, 239 Tastenanschläge
Zeilenumbrüche für "Lesbarkeit" hinzugefügt
Erläuterung
Die erste Zeile ruckelt
life, the universe and everything
an einer Hilfeseite , die ein Byte kürzer ist als das einfache Ausfüllen . Das macht es dann so:Die zweite Zeile unterteilt die Zeichenfolge in:
Und dann rückt die letzte Zeile ein:
quelle
Jelly , 76 Bytes
Probieren Sie es online!
quelle
Netzhaut , 185 Bytes
Probieren Sie es online!
quelle
JavaScript, 215 Byte
Lösung basierend auf guest44851
quelle
Ruby , 216 Bytes
Probieren Sie es online!
Erläuterung Ähnlich wie bei den Python-Lösungen, aber vor der Konvertierung in Basis 36 habe ich die Lauflängencodierung verwendet. Die Datenzeichenfolge besteht also nur aus 54 Zeichen anstelle von 68.
Aber es endete immer noch länger, hoffentlich kann es weiter golfen werden.
quelle
Ein Port meiner Charcoal-Antwort :
C # (.NET Core) , 229 Byte
Probieren Sie es online!
quelle
C (gcc) ,
220219217213210 Bytes-1 Byte danke an ceilingcat
-3 Bytes dank Jerry Jeremiah
Probieren Sie es online!
quelle
JavaScript,
265237219 BytesDank @tsh ein paar Bytes weniger.
JSFiddle
quelle
join
Pyth , 121 Bytes
Dies enthielt zu viele Bytes, die ich nicht in TIO anzeigen konnte. Hier ist ein Hexdump:
Probieren Sie es online!
Sie können dem
wc
oderxxd
im Bash-Skript einen Aufruf hinzufügen , um die Bytelänge oder den Hexdump anzuzeigen, den ich oben erstellt habe.Interessanterweise zeigt dieses Programm einen kleinen Fehler (?) In Pyth. Alle Wagenrücklaufbytes (0x0d) werden in String-Literalen als Zeilenumbruchbytes (0x0a) gelesen. Das zwingt mich, 6 Bytes hinzuzufügen:
X ... ]T]13
um die falschen zehn durch dreizehn zu ersetzen.Ansonsten war die Idee hinter diesem Code recht einfach: Notieren Sie sich jede Position, an der eine Leerzeichenfolge auftritt. Verbinden Sie dann jeden dieser Indizes mit der Anzahl der Leerzeichen in diesem Lauf. Stellen Sie dann die ursprüngliche Zeichenfolge wieder her, indem Sie die Phrase viermal wiederholen und dann an den richtigen Stellen einfügen. Wenn die Anzahl der aufgezeichneten Leerzeichen Null war, wird stattdessen eine neue Zeile eingefügt.
quelle
Java (OpenJDK 8) ,
258252251 BytesProbieren Sie es online!
Es ist eine ziemlich naive Implementierung. Zuerst eine Maske für die gedruckten Zeichen, dann einen Rollover über den Text, bis der Vorgang abgeschlossen ist.
quelle
int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}
.Javascript, ungefähre Zeichnung. 319 Bytes
^ Für das, was es wert ist, nicht viel, aber bevor ich den fehlgeschlagenen Code lösche.
quelle