Niemand ist sich ganz sicher, was das Emoticon darstellen >:U
soll, aber viele Gelehrte glauben, dass es wie eine wütende Ente aussieht . Nehmen wir an, das ist der Fall.
Aufgabe
Geben Sie eine ganze Zahl n zwischen 0 und einschließlich 3 aus oder geben Sie sie zurück
quack
wenn n = 0,
>:U
wenn n = 1,
U U
> : U U
> U U
> : U U
UUU
wenn n = 2 oder
>:U >:U
>:U >:U >:U
>:U >:U >:U >:U
>:U >:U >:U
>:U >:U >:U
>:U >:U >:U
>:U >:U >:U >:U
>:U >:U >:U
>:U>:U>:U
wenn n = 3.
Sie können davon ausgehen, dass die Eingabe immer gültig ist. Die Ausgabe sollte keinen führenden Speicherplatz enthalten, der nachfolgende Speicherplatz ist jedoch in Ordnung. Enten (mit der möglichen Ausnahme von @cobaltduck) haben keine Toleranz für Schlupflöcher. Kürzester Code in Bytes gewinnt.
Antworten:
CJam,
1089085 BytesBeachten Sie, dass einige Zeichen nicht druckbar sind. Probieren Sie es online!
Hintergrund
Die ersten beiden Ausgänge sind in CJam inkompressibel.
Das Komprimieren der letzten Ausgabe ist unkompliziert. Nachdem alle Zeilenvorschübe entfernt wurden, können wir die resultierende Zeichenfolge bei Auftreten von aufteilen
>:U
und die Länge jeder resultierenden Zeichenfolge von Leerzeichen berechnen.Das ergibt das Array
Diese können wir effizient speichern, indem wir sie von der Basis 22 in die Basis 269 umwandeln und die Ziffern erhalten
Da jede Ziffer kleiner als 256 ist , können wir sie als einzelnes Byte speichern.
Schließlich wird das Komprimieren der dritten Ausgabe einfacher, wenn wir Zeilen und Spalten transponieren:
Wenn wir noch einmal die Leerzeichen zwischen Nicht-Leerzeichen zählen, erhalten wir das Array
was wird
wenn von der Basis 22 zur Basis 269 transkodiert.
Wie es funktioniert
quelle
:D
zwischen den beiden Saiten.Java,
303286 Bytes17 Bytes gespart dank @VoteToClose!
Eigentlich nicht als die kürzeste gedacht, ich dachte nur, es würde Spaß machen, es in Java zu versuchen.
Erstellt eine Liste von Zeichenfolgenvariablen, die gemeinsame Zeichenfolgen darstellen, erstellt dann ein Array aller Ausgaben und druckt dann die richtige aus.
Ungolfed:
Dies ist meine erste Antwort auf dieser Seite. Bitte teilen Sie mir mit, wenn ich etwas falsch gemacht habe.
quelle
D+A
als ob undC+B
häufig genug, um in zwei neue Variablen unterteilt zu werden. Ich habe auch das geringste Gefühl, dass die Verwendung eines Arrays mit einer for-Schleife helfen könnte, aber ich habe noch nicht herausgefunden, wie ...05AB1E ,
162159157 BytesCode
Verdammt, viel zu lang, aber es ist wenigstens etwas:
Probieren Sie es online!
Erläuterung
Der erste Teil des Codes besteht aus
">:U"V
, derY
auf diesen String gesetzt wird. Danach prüfen wir nur, ob die Eingabe gleich 3 ist. Das wird amI3Qi
Teil gemacht. Wenn gleich, drucken wir die Riesenelster:N = 3
Es beginnt damit,
ð16×
dass nur 16 Leerzeichen gedrückt werden. Danach gibt es eine Nummer7166b
. Dies deckt den">:U "
Teil mit ein wenig Hilfe von Retina ab :). Ich habe dieses Skript verwendet , um den String in eine Binärzahl umzuwandeln. Danach kommen wir zu dem1ð:0Y:
Teil, der jedes1
durch ein Leerzeichen und jedes0
durch dasY
, was gesetzt wurde, ersetzt>:U
. DanachD
duplizieren wir diesen String, speichern ihn inX
usingU
undJ
fügen ihn in den Stack ein. Wir setzen dies mit ein,
, wodurch die gesamte Zeichenkette mit einem Zeilenumbruch gedruckt wird. Alle anderen danach basieren alle auf demselben Prinzip. Die if-Anweisung endet mit der Sekunde}
.Die vollständige Konvertierung finden Sie hier .
N = 2
Wir prüfen nun, ob die Eingabe gleich 2 ist. Dies erfolgt am
¹2Qi
Teil. Danach drücken wir, falls gleich, das Leerzeichen viermal mitð4×
. Danach schieben wir die" U U"
Schnur und speichern sie mit©
(Idee, die Jelly offensichtlich gestohlen hat: p). WirJ
setzen uns wieder in den Stapel und drucken dies mit einer neuen Zeile. Danach schieben wir den"> :"
String, holen den" U U"
using- Befehl®
,J
fügen ihn in den Stack ein,D
duplizieren diesen String und drucken beide in dieselbe Zeile.Kurzes Quiz, was bringt das
" > "?®,
?Nach dem Drucken der obigen Zeichenfolge erhalten wir das Duplikat der zweiten Zeile des Gesichts und drucken dieses aus (da es dasselbe wie die zweite Zeile ist).
Der letzte Teil, der in diesem Fall behandelt wird, ist:
N = 1
Dieser ist einfacher zu erklären:
N = 0
quelle
Vitsy ,
172171159 BytesOh mein Gott. Wenn ich etwas wollte, um die Kraft der Methoden zu demonstrieren, dann habe ich es verstanden.
Probieren Sie es online!
Wie dies funktioniert, ist durch Aufrufen verschiedener Methoden in sich. Die Erklärung ist unten:
Dieser Code ist lächerlich. Die ausführliche Form lautet:
quelle
JavaScript (ES6), 163 Byte
Erläuterung
Verwendet meine automatische Komprimierung mit JavaScript: Lauflängencodierung. Die Ziffern
1
, die9
auf so viele Felder abgebildet werden sollen, die0
Abbildungen auf das Gesicht der wütenden Ente und alle anderen Zeichen bleiben gleich.quelle
Japt,
1161051029996 BytesEnthält eine nicht druckbare. Online testen!
Wie es funktioniert
Die ersten beiden Zeichenfolgen werden überhaupt nicht komprimiert. Die dritte wird einfach komprimiert, indem die einzelnen Leerzeichenfolgen durch ihre Länge und dann
" U3U"
durch ersetzt werden"z"
. Der letzte ist komplexer:>:U
durch1
.191\n
durch4
. (4
Wird nirgendwo anders in der Zeichenfolge verwendet.)10
-255
oder0A
-FF
) das Zeichen mit diesem Zeichencode zu.Die resultierende Zeichenfolge ist nur
21 bis19 Byte lang, die Dekomprimierung nimmt jedoch weitere31 bis29 Byte in Anspruch .Nachdem wir die Strings dekomprimiert haben, nehmen wir einfach das Item an der Position
U
, die Eingabe. (Das Array ist angeordnet,[0,3,2,1]
weil es einen Fehler gibt, der es vom Ende des Arrays anstelle des Anfangs zählen lässt.)quelle
MATL ,
283182 Bytes101 Bytes gespart dank @Adnan!
Dies verwendet Dezimalzahlen, um Indizes
0
...3
zu den vier Zeichen für die Fälle 2 und 3 zu codieren . Die Dezimalzahlen könnten möglicherweise unter Verwendung der Base-64-Codierung komprimiert werden, aber quaken Sie!Für den Fall 3 wird ein von @Adnan vorgeschlagener sehr netter Trick verwendet: Definieren Sie Binärsequenzen, um jede Zeile zu codieren, wobei
0
und1
entsprechend Leerzeichen und>:U
.Probieren Sie es online!
quelle
1
durch Leerzeichen und der0
mit der>:U
Zeichenfolge. Ich weiß nicht, ob das helfen würde.Zimtgummi, 76 Bytes
Nicht konkurrierend, da Zimtgummi nach dieser Herausforderung hergestellt wurde.
Probieren Sie es online aus.
Erläuterung
Das erste Byte
l
gibt den Modus an: In diesem Fall weist es Cinnamon Gum an, in den Nachschlagetabellenmodus zu wechseln. Cinnamon Gum dekomprimiert dann den Rest der Saite (mit der komprimiert wurdezopfli --deflate
) in diese:Anschließend wird durch geteilt
;
, jedes Schlüssel-Wert-Paar (mit&
Trennzeichen) in ein Wörterbuch eingefügt und ausgegebendictionary[input]
.quelle
JavaScript ES6,
232223203188 BytesGespeichert
2944 Byte dank ETHproductions!Probieren Sie es aus!
Code-Snippet anzeigen
quelle
1
und0
in eine trinäre Zahl verwandeln?r+g+g+g+r
,g+g+g+r
indem Sie die Zeichenfolge entsprechend ändern und anpassen.GML, 265 Bytes
Ein Port von @ kittycat3141s hervorragender Antwort, mit dem Vorschlag, ihn mit zwei neuen Variablen (die ich G und H nannte) von @VoteToClose weiter zu verbessern. Ich habe es auch geschafft, es mit der relativ losen GML-Syntax weiter zu verkürzen.
quelle