Schreiben Sie das kürzeste Programm, das den gesamten Text von "Never Gonna Give You Up" von Rick Astley druckt .
Regeln:
- Die Texte müssen genau so ausgegeben werden, wie sie im obigen Pastebin * erscheinen. Hier ist der Raw-Dump: http://pastebin.com/raw/wwvdjvEj
- Kann sich nicht auf externe Ressourcen verlassen - alle Texte müssen mit / im Code eingebettet sein.
- Keine Verwendung vorhandener Komprimierungsalgorithmen (z. B. gzip / bzip2), es sei denn, Sie fügen den vollständigen Algorithmus in Ihren Code ein.
- Verwenden Sie eine beliebige Sprache, der kürzeste Code gewinnt.
Update, 1. Juni 2012:
Bei Lösungen mit Nicht-ASCII-Text wird die Größe Ihrer Lösung in Byte basierend auf der UTF-8-Codierung gezählt. Wenn Sie Codepunkte verwenden, die in UTF-8 nicht codiert werden können, wird Ihre Lösung nicht als gültig bewertet.
Update, 7. Juni 2012:
Vielen Dank für Ihre großartigen Lösungen! Ich werde morgen nachmittag die kürzeste Antwort annehmen. Gerade jetzt, Peter Taylor GolfScript Antwort gewinnt, so erhalten auf einige Verbesserungen Knacken , wenn man ihn schlagen wollen! :)
* Es gibt einen Tippfehler im Pastebin (Zeile 46, "know" sollte "known" sein). Sie können es nach eigenem Ermessen replizieren oder nicht.
quelle
Antworten:
Ruby
576 557556 (552) Zeichen && PHP 543 ZeichenEine weitere Lösung zum Suchen und Ersetzen. Beachten Sie, dass diese Form der Lösung ist im Wesentlichen eine Grammatik-basierte Kompressionscode http://en.wikipedia.org/wiki/Grammar-based_code Check out http://www.cs.washington.edu/education/courses/csep590a/07au /lectures/lecture05small.pdf für ein einfach zu verstehendes Beispiel für die Komprimierung.
Ich habe die Ersetzungsregeln so geschrieben, dass das Startzeichen für jede Ersetzung berechnet wird (sie sind in sequentieller ASCII-Reihenfolge). es muss nicht in den Übergangsdaten vorhanden sein.
Implementierungshinweise
ältere Implementierung
Diese ältere Implementierung hat 576 Zeichen und begann mit Substitutionsregeln aus der bash / sed-Implementierung von ugoren. Abgesehen von der Umbenennung der Substitutionsvariablen sind meine ersten 28 Substitutionen genau die gleichen wie die, die in Ugorens Programm durchgeführt wurden. Ich habe ein paar mehr hinzugefügt, um die Gesamtbytezahl zu senken. Dies ist möglich, weil meine Regeln effizienter dargestellt werden als die in der Implementierung von ugoren.
Ich habe nicht versucht, die Ersetzungsregeln in dieser zu optimieren.
Wettbewerbsnotizen
Das Dekomprimierungsschema "Suchen und Ersetzen" eignet sich gut für diesen Wettbewerb, da die meisten Sprachen über vorgefertigte Routinen verfügen, die dies ermöglichen. Komplexe Dekomprimierungsschemata scheinen bei einer derart geringen zu erzeugenden Textmenge keine realisierbaren Gewinner zu sein.
Ich habe nur ASCII-Text verwendet und auch nicht druckbare ASCII-Zeichen vermieden. Mit diesen Einschränkungen kann jedes Zeichen in Ihrem Code nur bis zu 6,6 Bit an Informationen darstellen. Dies ist ganz anders als bei echten Komprimierungstechniken, bei denen Sie alle 8 Bits verwenden. In gewissem Sinne ist es nicht "fair", mit der Codegröße von gzip / bzip2 zu vergleichen, da diese Algorithmen alle 8 Bits verwenden. Ein besserer Dekomprimierungsalgorithmus ist möglicherweise möglich, wenn Sie traditionell nicht druckbare ASCII-Zeichen in Ihre Zeichenfolgen aufnehmen UND jedes nicht druckbare Zeichen weiterhin als einzelnes Byte in Ihren Code geschrieben wird.
PHP-Lösung
Die obige Lösung nimmt das PHP von "a sad dude" und kombiniert es mit meinen Substitutionsregeln. Die PHP-Antwort hat den kürzesten Dekomprimierungscode. Siehe http://ideone.com/XoW5t
quelle
sed
Lösung kann es mit Sicherheit nicht übertreffen. Ich arbeite an etwas, das hoffentlich eine Chance hat - Sie haben 75 Byte Overhead, vielleicht werde ich es reduzieren (nicht in Ruby).Bash / Sed,
705650588582 ZeichenLogik :
Die Grundidee ist einfaches Ersetzen. Anstatt zum Beispiel zu
Never gonna give you up\nNever gonna let you down
schreiben, schreibe ichXgive you up\nXlet you down
und ersetze allesX
durchNever gonna
.Dies wird erreicht, indem
sed
mit einer Reihe von Regeln in der Form ausgeführt wirds/X/Never gonna /g
.Ersetzungen können verschachtelt werden. Zum Beispiel
Never gonna
ist üblich, aber auchgonna
in anderen Kontexten. Ich kann also zwei Regeln anwenden:s/Y/ gonna/g
unds/X/NeverY/g
.Beim Hinzufügen von Regeln werden Teile der Liedtexte durch einzelne Zeichen ersetzt, sodass sie kürzer werden. Die Regeln werden länger, aber wenn die ersetzte Saite lang und häufig ist, lohnt es sich.
Der nächste Schritt besteht darin, die Wiederholung aus den
sed
Befehlen selbst zu entfernen . Die Sequenzs/X/something/g
ist ziemlich repetitiv.Um es kürzer zu machen, ändere ich sed-Befehle so, dass sie aussehen
Xsomething
. Dann verwandle ichsed
dies in einen normalensed
Befehl. Der Codesed 's#.#s/&/#;s#$#/g;#
macht es.Das Endergebnis ist ein
sed
Befehl, dessen Argumente von einem anderensed
Befehl in Anführungszeichen gesetzt werden.Eine ausführlichere Erklärung finden Sie unter diesem Link .
Code:
Hinweise:
Die Dekomprimierungsengine ist nur 40 Zeichen lang. Die anderen 543 sind die Übersetzungstabelle und der komprimierte Text.
bzip2
komprimiert den Song auf 500 Bytes (natürlich ohne die Engine), so dass es Raum für Verbesserungen geben muss (obwohl ich nicht sehe, wie ich die Huffman-Codierung oder so etwas billiges hinzufügen würde).<<Q
(oder<<_
) wird verwendet, um bis zu einem bestimmten Zeichen zu lesen. Das Ende des Skripts (oder des Backquote-Ausdrucks) ist jedoch gut genug. Dies führt manchmal zu einer Warnung.Ältere und einfachere Lösung, 666 Zeichen:
quelle
\0
mit&
.&
macht es 5.Leerzeichen - 33115 Zeichen
StackExchange hat meine Antwort bestätigt. Hier ist die Quelle: https://gist.github.com/lucaspiller/2852385
Nicht großartig ... Ich denke, ich kann es ein bisschen verkleinern.
(Wenn Sie nicht wissen, was Whitespace ist: http://en.wikipedia.org/wiki/Whitespace_(programming_language) )
quelle
JavaScript,
590588 BytesAbhängig davon, wie der String "gedruckt" wird.
https://gist.github.com/2864108
quelle
if(g.indexOf(g[i])!=-1)
Vorher hinzufügene=
, um das Problem zu beheben.with(f.split(g[i]))f=join(pop())
in derfor..in
Schleife speichert ein ByteC #
879816789 ZeichenDer erste Versuch bei CodeGolf ist also definitiv kein Gewinner, ziemlich sicher, dass es gültig ist, obwohl es böse ist.
quelle
var s1="a";var s2="b";
versuchen Sie es mitstring s1="a",s2="b"
; Wenn Sie mehr als 2 Erklärungen haben, ist es kürzer.!
und es an anderen Stellen entfernen.Python,
597589 BytesEs kann möglich sein, ein paar weitere Bytes herauszudrücken:
quelle
BrainFuck - 9905
Ich bin mir ziemlich sicher, dass ich ein bisschen besser werden kann, wenn ich es stimme, aber das ist im Moment ziemlich gut. Vorausgesetzt, Sie haben kein Problem damit, dass dies viel größer ist als der ursprüngliche Text.
quelle
Scala, 613 Bytes
Dies ist ein Textdekomprimierungsalgorithmus, der die
~stuff~ blah ~ ~
zu konvertierende Regel rekursiv anwendetstuff blah stuff stuff
(dh, wenn Sie zum ersten Mal ein unbekanntes Symbolpaar sehen, werden die zu kopierenden Elemente begrenzt; danach geben Sie den Wert ein, wenn Sie ihn sehen).Hinweis: Je nachdem, wie Sie zählen, kann es am Ende zu einem zusätzlichen Wagenrücklauf kommen. Wenn dies nicht zulässig ist, können Sie den letzten in das Anführungszeichen setzen (ein Zeichen speichern) und die Aufteilung
split(" ",-1)
für 615 Byte in (3 Zeichen ausgeben ) ändern .quelle
N
Wiederholungen der Länge verwendenL
SieL+N+1
Zeichen, während ich verwendeL+N+2
. Aber Ihr Dekomprimierungscode ist 102 Zeichen, während meins 40 ist.589, C (nur Bibliotheksfunktion ist Putchar)
Tabelle der Substitutionsregeln, in der Zeichen im Bereich -.._ (45..90) angeben, welche Regel angewendet werden soll. Daher müssen 48 Regeln (45, c-45> U48 im Code) und andere Zeichen gedruckt werden
Regeln werden durch das Zeichen '&' begrenzt (38 im Code, n wird bis zur Null dekrementiert und somit zeigt s auf die richtige Regel)
Regel 0 gibt an, dass das nächste Zeichen in Großbuchstaben geschrieben werden soll (indem k = 32 im Code festgelegt wird). Dadurch wird mehr Platz frei, um einen größeren fortlaufenden Zeichenbereich für Regeln hinzuzufügen
main (..) wird mit 1 aufgerufen (gemäß der C-Programmkonvention mit Nullargumenten), und daher ist Regel 1 die Stammregel
Entwicklung des Codes
dank ugorens vorschlag wurden weitere 9 bytes gespart
Sie haben weitere 36 Bytes gespart, indem Sie die Tabelle algorithmisch und nicht manuell erstellt haben
Sie haben weitere 15 Bytes gespart, indem Sie die Tabelle von einem Zeichen * [] in eine einzelne Zeichenfolge geändert haben, in der '&' Teile abgrenzt
dank mehr tipps von ugoren nochmal 19 bytes rasiert
31 Bytes wurden durch Hinzufügen weiterer Regeln gespart, und es wurde eine Sonderregel zur Großschreibung erstellt, die mehr Platz für Regelindizes bietet.
10 Bytes weniger dank weiterer Tipps von Urinoren und leichtem Regeln-Tweaken
quelle
*p>>4^3?putchar(*p):e(r[*p-48])
"\'"
Übersetzung wird nicht benötigt."We're"
ist eine gültige Zeichenfolge.ing
ist ein besserer Kandidat.d(int n)
->d(n)
. Ändern*s=='~'
auf*s-'~' and reverse the
?:, also saving parenthesis around
! N? ..: 0. Using 126 instead of
'~' 'ist nutzlos, aber warum~
?main
rekursiv. Der erste Anruf findetmain(1)
stattd(0)
, kann aber erledigt werden (möglicherweise ein Leading~
Ins
). Die beste Alternative zu~
ist ein Tabulator (ASCII 9 - einstellige Zahl).Perl,
724714883 BytesDie Änderung der Regeln, die die Verwendung von Latin-1 benachteiligten, tötete meine Lösung. Es ist ein Ansatz, der anders ist, als ich es hasse, ihn nur zu löschen. Deshalb gibt es hier eine eingeschränkte Version, die nur 7-Bit-ASCII verwendet, gemäß den neuen Regeln und mit einer enormen Vergrößerung.
Natürlich sind die Steuerzeichen hier immer noch entstellt, daher möchten Sie weiterhin die Base64-Codierung verwenden:
Da ich denke, dass es trotz DQ noch sichtbar sein sollte, ist hier die ursprüngliche Lösung:
Die Base64-Codierung des Skripts:
quelle
Python
781731605579 ZeichenEs gibt viel mehr und viel bessere Antworten, als ich das zum ersten Mal gesehen habe, aber ich habe viel Zeit mit meinem Python-Skript verschwendet, also werde ich es auf jeden Fall posten. Es wäre großartig, Vorschläge zu sehen, um es weiter zu verkürzen.
Edit: dank Ed Hs Vorschlägen, 2 Zeichen zu schneiden, um weiter zu gehen, muss ich möglicherweise eine Menge Dinge hier umstrukturieren, was einige Zeit in Anspruch nehmen wird
Nachdem ich die Zeichenfolge zum ersten Mal manuell erstellt hatte (sehr langwierig), schrieb ich eine Funktion, mit der ich rekursiv das profitabelste Ersetzen von Mustern fand. Dies gab mir eine Lösung, führte jedoch zu einer Vergrößerung um 10 Zeichen.
Also habe ich meinen Algorithmus ein wenig weniger gierig gemacht, indem ich die endgültige Rangfolge nicht nur nach "Zeichen reduziert", sondern nach einer Funktion von "Zeichen reduziert", "Länge des Musters" und "Anzahl der Muster" vorgenommen habe.
Musterlänge = Länge Anzahl = Anzahl
Dann fragte ich meinen armen Laptop unendlich zu laufen, Zuweisen von Zufallswerten zu
lengthWeight
undcountWeight
und verschiedene Endkompression Größen zu erhalten, und die Daten für minimale Kompressions Größen in einer DateiIn einer halben Stunde oder so kam es zu der obigen Zeichenfolge (ich habe versucht, daran weiter zu basteln, um zu sehen, ob ich den Code verkürzen kann), und sie wird nicht niedriger ausfallen, ich vermute, ich vermisse hier etwas.
Hier ist mein Code dafür, der auch
max_pattern
sehr langsam ist.quelle
\n
würde 5 Zeichen kosten und 9 sparenin (g,l..)
. 3.join(..)
funktioniert genauso gut wiejoin([..])
(zumindest in 2.7).Malbolge, 12735 Bytes
Probieren Sie es online aus.
Hier mit den Tools generiert .
quelle
JavaScript 666 Bytes
Inspiriert von der Lösung von tkazec .
Schauen Sie sich den Blog-Beitrag an, den ich darüber geschrieben habe. Er enthält alle Quellen und erklärt, wie ich diesen Code erstellt habe.
Sie können den Code kopieren und in die Konsole Ihres Browsers einfügen. Oder versuchen Sie es unter http://jsfiddle.net/eikes/Sws4g/1/
quelle
Perl,
584578577576575571564554553540Diese Lösung folgt dem gleichen grundlegenden Ansatz wie die meisten anderen: Führen Sie bei einer vorgegebenen Anfangszeichenfolge wiederholte Ersetzungen wiederholter Textteile durch.
Die Substitutionsregeln werden durch ein einzelnes Zeichen angegeben, vorzugsweise eines, das nicht im Ausgabetext vorkommt. Eine Regel mit der Länge L und N-maligem Auftreten spart also ungefähr N * LNL-1 (N * L ist die ursprüngliche Länge aller Vorkommen, aber Das Substitutionszeichen kommt N-mal vor, und der Literaltext selbst hat die Länge L, und die Regeln werden durch ein Trennzeichen getrennt.) Wenn die Substitutionszeichen explizit angegeben werden, werden die Einsparungen auf N * LNL-2 reduziert. Da die meisten Sprachen ein Zeichen mit chr () oder einem ähnlich kurzen Code berechnen können, ist der erste Ansatz in der Regel überlegen.
Die Berechnung des Substitutionszeichens hat einige Nachteile, von denen das Erfordernis eines kontinuierlichen Bereichs von ASCII-Zeichen am bedeutendsten ist. In der Ausgabe werden meist Kleinbuchstaben verwendet, es sind jedoch genügend Großbuchstaben und Satzzeichen vorhanden, um entweder ein Zeichen durch sich selbst zu ersetzen, einige Zeichen in einer Korrekturphase nachträglich neu zuzuordnen oder die Regeln so anzuordnen, dass problematische Zeichen früher ersetzt werden. Die Verwendung einer Sprache, die die Verwendung regulärer Ausdrücke ersetzt, bedeutet auch, dass es Fallstricke für Zeichen gibt, die innerhalb einer regulären Ausdrücke eine besondere Bedeutung haben:
.
+
*
\
?
Mein ursprünglicher Ansatz hatte 63 Bytes im Decoder und 521 in den Regeln. Ich habe viel Zeit damit verbracht, die Regeln zu optimieren, was insbesondere bei den kurzen Regeln schwierig sein kann, da sie sich überschneiden können. Ich habe die Dekodierung auf 55 Bytes und die Regeln auf 485 reduziert, indem ich die Formel ein wenig betrogen habe. Normalerweise würde eine 2-Zeichen-Regel, die dreimal vorkommt, oder eine 3-Zeichen-Regel, die zweimal vorkommt, eigentlich keine Länge sparen, aber es gibt eine Lücke, durch die auch Wörter erfunden werden können, die nicht Teil der Ausgabe sind. ).
In dieser Lösung werden Steuerzeichen verwendet, daher wird die Lösung hier base64-codiert bereitgestellt.
Und hier handelt es sich um eine etwas besser lesbare (aber weniger ausführbare) Version.
Ich vermute jedoch, dass dies immer noch nicht das Minimum ist, da Ed H. darauf hinweist, dass die PHP-Dekodierung mit 44 Bytes am kürzesten ist und ich Raum für Verbesserungen in den von ihm verwendeten Regeln gesehen habe. Ich habe zwar einen 52-Byte-Decoder in Perl, aber ich konnte ihn für diese Lösung nicht verwenden, da ich den Bereich in umgekehrter Reihenfolge durchlaufen musste.
quelle
PHP
730707 Zeichenquelle
$s="Never gonna give...
kann mit gekürzt werden$n
.Perl -
589 588 583 579576 BytesJede Regel besteht aus einem Zeichenkopf, einem Textkörper und einem Unterstrich. Solange Regeln am Anfang abgeschnitten werden können, wird der Kopf der Regel im restlichen Text durch den Hauptteil ersetzt. Der Kopf der ersten Regel wird angegeben, die Köpfe aller folgenden Regeln werden aus der Variablen $ i generiert.
Da der Kopf für die nächste Regel durch die vorherige Regel am Anfang des Texts platziert wird, wird durch die letzte Regel ein Zeichen erstellt, das nicht mehr entfernt wird. Ich musste eine Reihe von Namen auswählen, bei denen das letzte "W" lautete, damit ich das ursprüngliche "W" vom Anfang der Texte entfernen und es durch die Regelersetzung ersetzen ließ.
Die Kodierung wurde mit einem Python-Skript unter Verwendung eines einfachen Hillclimbing-Algorithmus durchgeführt.
Hier ist der Perl-Code:
(Ich finde es bemerkenswert, dass der komprimierte Text "hearBach" enthält: D)
Und hier der Python-Code, der es generiert:
quelle
while
für die Schleife zu verwenden. Auf diese Weise können Sie sowohl auf die Klammern als auch auf die Klammern verzichten. Eine andere Idee: Finde heraus, wie man die Ausgabe macht,say
anstatt sieprint
zu verwenden.Python 2.7,
975803 BytesNicht die größte - ich wünschte (jetzt), Python hätte Formatierungserweiterungen wie diese durchgeführt. Leider nicht.
Bearbeiten: Simulierte Erweiterung mit alternativer Formatierungssyntax (Art von ..)
quelle
Clojure
720 Bytes / Zeichen:
(Hier mit zusätzlichen Leerzeichen wiedergegeben, damit Sie die Formatierung sehen können.)
quelle
C # - 605 Zeichen | T-SQL - 795 Zeichen | C # - 732 Zeichen | C # - 659 Zeichen
Die Inspiration dafür lieferte das sed-Beispiel. Die einzige große Änderung, die ich daran vorgenommen habe, war, die Suche nach aufeinanderfolgenden ASCII-Zeichen durchzuführen, damit sie nicht deklariert werden mussten. Leider ist es C #, daher weiß ich nicht, wie ich es verkleinern soll. Ich habe den gleichen Ersatztext genommen und den Code in T-SQL mithilfe einer temporären Tabelle erstellt.
T-SQL
Zweiter Versuch Dies war ein anderer Versuch. Die Komprimierung wurde vollständig vom Computer durchgeführt, der nach den besten Ersatzteilen suchte. Die Suchvorgänge sind sequenziell und nach Größe geordnet, sodass keine begrenzten Suchvorgänge erforderlich sind. Der Code für die Suche war jedoch weniger effizient als ich dachte, sodass er insgesamt 127 Zeichen mehr kostete! Lebe und lerne.
3. Versuch bei C #. Diesmal bin ich mit \ b, \ r, \ t Zeichen abgegangen. Sie können \ rN \ n verwenden, um das erste Zeichen in der Zeile durch ein großes N zu ersetzen, es wurden jedoch keine Zeichen gespeichert. Ich habe \ b Aliase erstellt, um den Cursor zurück zu bewegen und dann über vorhandenen Text zu schreiben. Aber nichts davon sparte Platz, und am Ende ging es mir immer noch schlechter als einer einfachen Strategie zum Suchen und Ersetzen.
quelle
REPLACE
Ansatz, vor allem mit dem dynamischen SQL, aber es gibt viele Möglichkeiten, mehr@
als das Golf zu spielen: Verwenden Sie als Variable anstatt@s
, machen Sie es zu einer permanenten Tabellet
anstatt#t
(Sie müssen nicht nach sich selbst aufräumen), Beseitigen Sie die 29-stellige Anweisung COLLATE und setzen Sie einfach voraus, dass sie auf einem Server / einer Datenbank mit der richtigen Sortierung, Verwendungvarchar(999)
odervarchar(max)
Tonnen unnötigen Leerraums um Gleichheitszeichen und Kommas usw. ausgeführt wird.PHP,
591585568564 Bytesquelle
Ruby, 1014 Bytes
Ich lerne gerade Programmieren, also werde ich hier keine Rekorde brechen. Aber das war eine lustige Aufgabe.
quelle
GolfScript (511 Bytes)
Dies verwendet eine Änderung der Basis, um die Bits einzupacken, so dass Zeichen enthalten sind, die nicht in ASCII sind. Es ist jedoch nicht angebracht, diese Zeichen nach ihrer UTF-8-Codierung zu bewerten, da der Interpreter das Programm als ISO-8859-1 behandelt. Aus diesem Grund habe ich die Länge eher in Bytes als in Zeichen angegeben.
Base-64 kodiert:
Hex-Dump (Ausgabe von
xxd
):Wie die meisten der besten Lösungen wird hier ein grammatikalischer Ansatz mit Zeichenfolgenteilen und -verknüpfungen verwendet, um die Grammatik zu erweitern. Die Grammatik hat 30 Regeln und wurde durch eine gierige Suche gefunden.
quelle
JavaScript, 854 Zeichen (neue Zeilen für "Lesbarkeit" hinzugefügt)
quelle
Naives sh / echo - 810 Bytes
quelle
JavaScript 789 Zeichen
Mein Javascript (druckt mit "document.write ()"):
Ich ändere einige gebräuchliche Wörter und Phrasen mit kyrilischen Buchstaben und ändere sie dann mit der Funktion replace () zurück.
Nachdem ich die Texte gekürzt habe, habe ich mein Programm mit der gleichen Methode gekürzt und den Code mit eval () ausgeführt.
quelle
Ruby,
741678657627619 BytesDies ist eine iterative Symbolerweiterung. Für jedes der 28 Zeichen der Zeichenfolge im ersten Argument bis
gsub!
werden alle Vorkommen dieses Zeichens in_
durch den entsprechenden Abschnitt der zweiten Zeichenfolge ersetzt (durch+
Zeichen getrennt ).quelle
Python, 573 Zeichen
Meine
sed
Lösung wird nicht weiter gehen und wurde von mehreren Leuten geschlagen, also habe ich mich für einen neuen Ansatz entschieden.Leider ist es nur gut genug für den
2.3. Platz (bis jetzt) - Ed H. ist noch viel vor mir .Anmerkungen :
Die Hauptidee wurde von Ed H. entlehnt - indem aufeinanderfolgende Zeichen zum Ersetzen verwendet wurden, anstatt sie in jeder Ersetzungsregel anzugeben.
Ich gehe
andersmit Charakteren um, die in dem Song vorkommen,alsmit denenvon Ed.Ich übersetze sie einfach für sich selbst (und wenn immer etwas folgt, füge es hinzu, was nur funktioniert hatW
).Der Code wird von einem Skript generiert, das nach guten Übersetzungen sucht. Zuerst habe ich einen gierigen Algorithmus verwendet, der einfach den verwendet, der die beste Reduktion ergibt. Dann habe ich festgestellt, dass es ein wenig besser ist, wenn man es zwickt, um längere Saiten zu bevorzugen. Ich denke, es ist immer noch nicht optimal.
quelle
Golfscript,
708702699691 Bytesquelle
" I'm feeling":i;
?j
zuzuweisen, habe ich drei verkettete Zeichenfolgen zugewiesen (gelöscht{
und zur Verkettung}
hinzugefügt++
). Dies ermöglichte es miri
, beim Verfassen der Inhalte von Inline zu deklarierenj
.g
und für den Chor mit einer einzelnen Zeichenfolge mit Zeilenumbrüchen ziehen und dannn/g*
g
da es auch gegen Ende verwendet wird (eigentlich möglich, hätte aber am Ende 1 Zeichen mehr gekostet). Der Split / Fold-Ansatz zum Einfügen von g am Anfang jeder Zeile ist jedoch ein großartiger Zeichenschoner.Java, 858 Bytes
Beeindruckend. Ich hätte nicht wirklich gedacht, dass ich das so stark komprimieren könnte.
UngolfedIn einer für Menschen lesbaren Form:quelle
String foo; String bar;
beim Ungolfing mochte.JavaScript,
14281451883 * ZeichenAuf jeden Fall nicht die kürzeste Lösung, aber hier geht es.
Lösungslogik ist ziemlich einfach:
* Natürlich wird die Lösung viel kürzer, wenn eindeutige Zeilen anstelle eindeutiger Wörter verwendet werden.
quelle