Die Herausforderung besteht darin, den aufwändigsten Code zu schreiben, der in ASCII-Grafiken eingebettet ist und "DFTBA" liest und druckt. Zum Beispiel lautet das Folgende DFTBA:
oooooooooo. oooooooooooo ooooooooooooo oooooooooo. .o.
`888' `Y8b `888' `8 8' 888 `8 `888' `Y8b .888.
888 888 888 888 888 888 .8"888.
888 888 888oooo8 888 888oooo888' .8' `888.
888 888 888 " 888 888 `88b .88ooo8888.
888 d88' 888 888 888 .88P .8' `888.
o888bood8P' o888o o888o o888bood8P' o88o o8888o
Und das Folgende, in Bash druckt DFTBA
echo "DFTBA"
Die Herausforderung besteht darin, eine zu schreiben, die beides kann.
Gewinnbedingungen
Gültige Antworten (alle Bedingungen nach meinem Ermessen)
- Kann deutlich als DFTBA gelesen werden
- DFTBA drucken, wenn ausgeführt
- Muss ohne Internetverbindung funktionsfähig sein
- Buchstaben gleicher Höhe haben
- darf nicht mehr als 80 Spalten haben
- darf nicht mehr als 10 Zeilen haben
Punkte (höchste Summe gewinnt)
- Zeilen * Spalten / 32
- Lesbarkeit: 25 für lesbar, 50 für sehr klar
- 1 Punkt für jedes verwendete Nicht-Leerzeichen
Beschränkungen
Diese können für etwas verwendet werden, sodass davon ausgegangen wird , dass alle Antworten öffentlich zugänglich sind. Wenn Sie Ihre Antwort nicht oder nicht öffentlich zugänglich machen können: Geben Sie einen Kommentar / eine Antwort auf die ursprüngliche Frage mit dem Titel "Die von mir verfasste und / oder geteilte Antwort wird möglicherweise nicht als gemeinfrei angesehen." .
Nicht gemeinfreie Antworten sind ebenfalls willkommen! Stellen Sie einfach sicher, dass Sie Folgendes angeben :-)
Was ist DFTBA?
Es steht manchmal für "Don't Forget To Be Awesome", aber nicht immer ... Lange Geschichte ... Dieses verwandte Lied könnte helfen, es zu erklären (oder zu verwirren).
Antworten:
(Ich habe eine vollständige Schreib aus hier , wie es ist recht umfangreich , wie ich auf diese beiden Ergebnisse bekam)
Brainfuck, vollständiger ASCII-Bereich 0 bis 255: 80 x 10 = 800/32 = 25 + 25 + 219 = 269
Es gibt eine Linie durch die Mitte dieser oberen, die nicht ganz eng ist, aber das ist nur die Anzeige hier auf CodeGolf. Wenn Sie die Originaldatei über den obigen Link herunterladen und sie beispielsweise im Brainfuck Developer oder Notepad anstelle von Wordpad anzeigen, sieht sie wie folgt korrekt aus .
Brainfuck, Teil ASCII-Bereich 0 bis 127: 80 x 10 = 800/32 = 25 + 25 + 95 = 145
quelle
\s
Regex (Leerzeichen), Zeichenfolge und Array |> eindeutig |> Länge übereinstimmen .Piet, Punktzahl unsicher (153ish)
Ich verstehe, dass dies nicht genau in die Spezifikationen passt (was ASCII-Grafik erfordert), aber der Quellcode bietet einen sehr lesbaren DFTBA. Die Spur ist unten.
Piet ignoriert jede Farbe, die nichts bedeutet. Infolgedessen habe ich Grau als generische "Kommentarfarbe" für Umrisse und dergleichen verwendet. Das Grau wird nicht interpretiert (wie Sie in der Spur sehen werden). Ich wollte klarstellen, welche Pixel im Programm waren und welche nicht.
Ich habe 15 Farben verwendet, das sind 13 ohne Weiß. Es ist 89x32 Pixel, könnte aber mehr komprimiert werden. Ich habe 4 Op-Codes verwendet (subtrahieren, dividieren, pushen und ausgeben). Vielleicht, wenn ich Scoring verwende, wie ich denken würde, 153?
Vermutlich keine Punktzahl, war aber eine interessante Übung. Ich habe Piet noch nie benutzt und noch nie so viel Trial-and-Error-Programmierung gemacht! Ich brauchte npiet ausgiebig und seine Spur. Ich kann immer noch nicht herausfinden, wie die Bewegung des Cursors mit irgendeiner Stabilität funktioniert!
Wie es funktioniert:
quelle
Malbolge (
7180 x 10) / 32 + 25 + 94 =141,1875144Update: Mehr Abstand zwischen den Buchstaben hinzugefügt, um die Punktzahl zu erhöhen.
Getestet mit dem offiziellen Malbolge-Dolmetscher. Natürlich ist es nicht schwer, statischen Text mit Malbolge zu drucken. Die von Malbolge verwendete Codierung garantiert fast, dass Sie den gesamten Satz druckbarer ASCII-Zeichen darin haben.
Erklärung des Codes (Leute sagten, sie hätten ihn nicht verstanden):
(Weitere Informationen zu Malbolge finden Sie unter http://esolangs.org/wiki/Malbolge ).
Lassen Sie uns zunächst den Code auf die auf der obigen Seite angegebenen Operationen normalisieren:
Beachten Sie auch, dass nach jedem Befehlszyklus der ausgeführte Befehl neu codiert wird und der Codezeiger und der Datenzeiger um 1 erhöht werden.
Zu Beginn
C
(Code ptr)= D
(Daten ptr)= 0
. Dies bedeutet[D] = 'b' (98)
und diei
Anweisung wird ausgewählt. Also springen wir zu Adresse 99. (C
wird zuerst auf 98 gesetzt und dann erhöht), der Datenzeiger ist jetzt 1.Bei 98 gibt es eine Reihe von NOPs (
o
). Dies tun die Wirkung haben , dass sie alle wieder codiert und dassC
undD
werden erhöht. Die nächste echte Anweisung (*
) befindet sich an der Adresse 140, also jetztC=140
undD=42
.*
Dreht (oder dividiert durch drei) nach rechts, worauf der Datenzeiger zeigt, und speichert ihn zurück im Speicher und im AkkumulatorA
.[42] = 'x' (120), so A <- [42] <- '(' (40)
.Eine weitere Reihe von NOPs verursacht
C=154 (p)
undD=62 ( [D]='j' (106) )
.p
ist der verrückte Operator . Ich werde die Tabelle hier nicht reproduzieren, aber was passiert, istA = [D] = crazy(A, [D])
.A
ist immer noch 42,[D]
ist 106, was bedeutetcrazy(A, [D]) = 29504
.<
wird ausgegeben. Es gibt den Akkumulator (29504) als ASCII-Zeichen aus.29504 % 256 = 68
, das heißtD
, jetzt haben wir das D.quelle
Javascript (80 x 10) / 32 + 25? + 94 = 144
Code:
Demo: http://jsfiddle.net/4hyyS/3/
Um eine Erklärung hinzuzufügen:
Zuerst ordne ich
Number.prototype.toString
jedem Kleinbuchstaben zu:Dadurch kann ich die Kleinbuchstaben effizient verwenden.
Als nächstes konstruiere ich die Zeichenfolge 'DFTBA', indem ich Zahlen in Zeichen konvertiere, z.
(Ich hätte
fromCharCode
odertoString(36)
für alle Charaktere verwenden können, aber das wäre zu einfach gewesen)Um zusätzliche Zeichen auszufüllen und den Code weiter zu verschleiern, verwende ich einige Tricks, um die Zahlen zu erstellen:
Usw.
Für Zeichen, die im eigentlichen Code nicht verwendet werden, habe ich sie entweder in Kommentarblöcken
/* ... */
oder in Zeichenfolgen abgelegt" ... "
.Ich habe mit einem 80x10-Raster angefangen, das dann auf meine Buchstaben reduziert und dann meinen Code so angepasst (sieht in dieser Schriftart auch besser aus, der letzte
|
ist nur der Cursor):quelle
Perl (75 x 7) / 32 + 25 + 59 ≈ 107,4
Ich würde dir sagen, was es tut, aber das würde das Obfu ruinieren, nicht wahr?
quelle
count_char
und vergessen, Leerzeichen auszuschließen.C #, (71 · 7) / 32 + 25 + 45 = 85,53
Meine erste Antwort auf Programmierpuzzles ! C # ist wirklich nicht sehr gut für diese Spiele ...
quelle
Python, (69 * 7) / 32 + 25 + 49 = 89
In Python ist dies aufgrund von Einrückungen und Leerzeichen nicht einfach. Also habe ich eines von vielen Dingen getan, um die Einrückung legitim zu machen:
Die Lesbarkeit kann noch etwas verbessert werden ...
quelle
C, (55 · 8) / 32 + 25 + 55 = 93,35
Es ist ganz einfach, die Buchstaben zu vergrößern und ein paar weitere Zeichen zu verwenden.
quelle
Java
quelle