“×Ɗ¡‘ŒP»Ṫ¦209ṗ€3Fd⁴ịØHs3ṢQY
Probieren Sie es online!
Wie es funktioniert
“×Ɗ¡‘
Geben Sie die Codepunkte der Zeichen zwischen den Anführungszeichen in Jellys SBCS an : 0x11 = 17 , 0x91 = 145 und 0x00 = 0 .
ŒP
Konstruiert die Potenzmenge des Arrays von Codepunkten und ergibt
[[], [17], [145], [0], [17, 145], [17, 0], [145, 0], [17, 145, 0]]
Die letzten beiden Einträge entsprechen Kombinationen, die sowohl 80 als auch FF enthalten. Wir müssen sie also verwerfen.
»Ṫ¦209
besteht aus drei Teilen:
Ṫ
(tail) entfernt das letzte Array von Codepunkten, dh [17, 145, 0] .
»209
Nimmt das Maximum jeder Ganzzahl im Rest des Potenzsatzes und 0xD1 = 209 , wobei alle durch 209 ersetzt werden .
¦
(spärlich) iteriert über die Elemente des restlichen Powersets. Wird der entsprechende Index in [17, 145, 0] gefunden , wird das Element durch alle 209 ersetzt . Wenn nicht, bleibt es unberührt.
¦
ist nicht modular, daher wird nur das letzte Array (Index 0 ) im restlichen Powerset geändert. Die Indizes 17 und 145 sind zu groß und haben keine Wirkung.
Das Ergebnis ist wie folgt.
[[], [17], [145], [0], [17, 145], [17, 0], [209, 209]]
ṗ€3
berechnet die dritte kartesische Potenz jedes Arrays, dh das Array aller 3-Tupel von Elementen jedes Arrays.
Fd⁴
verflacht das Ergebnis und berechnet Quotienten und Rest jeder ganzen Zahl geteilt durch 16 .
ịØH
Indizes (Basis 1) in „0123456789ABCDEF , so 0x11 , 0x91 , 0x00 und 0xD1 erhalten abgebildet "00" , "80" , "FF" und "C0" (resp.).
s3ṢQ
Teilt die Zeichenpaare in 3-Tupel auf, sortiert die Tupel und dedupliziert sie.
Schließlich werden Y
die eindeutigen Tupel durch Zeilenvorschübe getrennt.
“0FC8”
, wie wir00
,FF
,C0
, und80
.Python 3,
1341291251089190 BytesIch denke, hier gibt es noch viel zu golfen. Golfvorschläge willkommen!
Edit: -9 Bytes und vielen Dank an Mego für die Hilfe bei der String-Formatierung. -17 Bytes, weil Sie herausgefunden haben, wie Sie die Zeichenfolge besser drucken können. -17 Bytes, weil Sie herausgefunden haben, wie Sie die for-Schleife besser schreiben können. -1 byte dank xnors tipp zu benutzen
i%3//2*"\n"
statt"\n"*(i%3<2)
.Ungolfing
quelle
*
.i%3//2*"\n"
Speichert ein Byte.JavaScript (ES6),
109107 Byte2 Bytes gespart, dank Neil
Dies ist
7 bis9 Byte kürzer als nur die Rückgabe des Rohstrings in Backticks.Prüfung
Code-Snippet anzeigen
quelle
.replace(/./g)
ist die Länge gleich.map().join
,.map(x=>'08CF'[x=n>>x&3]+'000F'[x],n+=+v||21)
spart aber zwei Bytes.PowerShell,
113106 BytesJa, ich habe nichts kürzeres gefunden, als nur den Literal-String zu drucken ...Vielen Dank an @ Martin Smith , der 7 Bytes mit einem einfachen Ersatz (den ich völlig übersehen habe) eingespart hat. Wir sind also mindestens 7 Bytes kürzer als nur das Hardcodieren. Yay!Aber das ist langweilig!
Also stattdessen ...
PowerShell v4, 128 Byte
Der
[system.consolecolor]
Namespace definiert die Konsolenfarben, die (nativ) für die PowerShell-Konsole verfügbar sind . Wenn wir sie über ein ganzzahliges Array wie dieses referenzieren, ist der Standardwert der Name (z. B.Black
oderWhite
oder dergleichen). Wir kombinieren das mit einer Zeichenfolge, die sich-split
auf Leerzeichen befand, und haben jetzt eine Reihe von Zeichenfolgen mit Farbnamen.Wir durchlaufen diese
|%{...}
und ziehen bei jeder Iteration den entsprechenden[system.windows.media.colors]
Wert heraus. Die Standardstringifizierung für diese Objekte ist die Farbe im#AARRGGBB
Format als Hexadezimalwert. Wir nutzen diese Option , indem wir diesen Aufruf in einen String mit einem Skriptblock einkapseln"$(...)"
. Da wir aber weder die Alpha-Werte noch den Hash wollen, nehmen wir das hintere Ende[3..8]
der Zeichenkette und müssen-join
das resultierendechar
-array wieder in eine Zeichenkette umwandeln. Dann einfachSort-Object
in die richtige Reihenfolge bringen.quelle
00
und.Replace(7,'00')
ist <21 Zeichen.-replace
for8
und entspricht80
der Anzahl der Bytes (speichert 12 Nullen, was der-replace8,80
Länge entspricht). DiesFF
ist um zwei Bytes länger, da"FF"
in der-replace2,"FF"
Anweisung Anführungszeichen erforderlich sind .Pyth -
644844 BytesSuper einfache Basiskomprimierung.
Probieren Sie es hier online aus .
quelle
MATL , 39 Bytes
Probieren Sie es online!
quelle
05AB1E , 57 Bytes
Probieren Sie es online!
Was wir ausgeben müssen, ist im Grunde (umgekehrt und aufgeteilt):
Was in Dezimalzahl ist:
Was in Base-214 ist:
Dies ist die einfachste Lösung, die ich mir vorstellen kann, weil ich Dennis auf keinen Fall besiege. Ich habe eine Stunde lang versucht und nichts hat seine Idee übertroffen.
quelle
PHP, 92 Bytes
Probieren Sie es online!
Ersetzen Sie einfach die Ziffern als Schlüssel im Array durch die Werte strtr
quelle
Batch, 137 Bytes
Ja, es ist so langweilig. Vorheriger 148-Byte-Versuch:
Leider können Sie die Ausgabe eines
for
oder einescall:
Befehls nicht weiterleiten , daher muss ich mich rekursiv aufrufen.quelle
Pyke, 42 Bytes
Probieren Sie es hier aus!
quelle
Befunge,
8369 BytesProbieren Sie es online!
Die Farben werden in der Zeichenfolge codiert, die Sie in der ersten Zeile sehen, zwei Bits pro Farbkomponente, wobei ein zusätzliches hohes Bit festgelegt wird, um jeden Wert in den ASCII-Bereich zu zwingen (außer im Fall von 63, der außerhalb des Bereichs von 127 liegt) ).
Die Liste der Farben auf dem Stapel wird dann wie folgt verarbeitet:
quelle
C#, 195 bytes
Sadly this beats, by a huge margin, the more interesting albeit incredibly convoluted (I had tons more fun writing it) C#, 270 bytes
quelle
()=>@"string_here"
(this casts toAction<string>
). I also suggest using a verbatim string (@
) so that you can just put the new lines directly in the string without needing to escape them.C (gcc), 99 bytes
Try it online!
After having made an attempt involving creating a list of numbers and outputting them while sorting, I compared to the naïve solution, which was sobering:
That one clocks in at 140 bytes compared to my try at 200 and change.
The solution was to think of it as text like any other, albeit with a small alphabet. Each colour could be thought of as a triplet of 2-bit indices into the alphabet {0xff, 0xc0, 0x80, 00}. The process of colour -> triplet -> number -> character (with offset +35 to make them all printable and avoid any need for escapes) can be illustrated as such:
Then it's just a matter of iterating over the resulting string and cutting out the appropriate parts of the alphabet string.
quelle