Hexadezimaltripel wie #ffffff
(weiß) oder #3764ef
(bläulich) werden häufig zur Bezeichnung von RGB-Farben verwendet. Sie bestehen aus #
sechs hexadezimalen Ziffern (0-f) oder manchmal drei Ziffern, wobei die echte Farbe durch Verdoppeln jeder Ziffer erhalten wird. Zum Beispiel #fff
ist #ffffff
und #1a8
ist #11aa88
.
Leider war die dreistellige Kurzschreibweise die golfiest das Internet zu bieten hatte, bis jetzt .
Schreiben Sie ein Programm oder eine Funktion mit einer Zeichenfolge von 1 bis 7 Zeichen:
- Das erste Zeichen wird immer sein
#
. - Die anderen Zeichen werden immer hexadezimale Ziffern sein:
0123456789abcdef
.
Die Eingabe ist eine Kurzform eines Hex-Tripletts (oder die vollständige Form, wenn 7 Zeichen angegeben sind). Sie müssen ein vollständiges Hex-Triplet ausgeben, das die Eingabekurzform basierend auf den folgenden Mustern erweitert:
Input -> Output
# -> #000000 (black)
#U -> #UUUUUU
#UV -> #UVUVUV
#UVW -> #UUVVWW (usual 3-digit shorthand)
#UVWX -> #UXVXWX
#UVWXY -> #UVWXYY
#UVWXYZ -> #UVWXYZ (not shorthand)
Jede U
, V
, W
, X
, Y
, und Z
kann jede hexadezimale Ziffer sein. Die Ausgabe ist immer 7 Zeichen.
Zum Beispiel:
Input -> Output
# -> #000000
#0 -> #000000
#4 -> #444444
#f -> #ffffff
#a1 -> #a1a1a1
#0f -> #0f0f0f
#99 -> #999999
#1a8 -> #11aa88
#223 -> #222233
#fff -> #ffffff
#1230 -> #102030
#d767 -> #d77767
#bbb5 -> #b5b5b5
#aabbc -> #aabbcc
#00000 -> #000000
#3764e -> #3764ee
#3764ef -> #3764ef
#123456 -> #123456
#f8f8f8 -> #f8f8f8
Anmerkungen
Die Eingabe beginnt immer mit
#
und muss auch die Ausgabe sein.Sie können davon ausgehen, dass alle eingegebenen Buchstaben Kleinbuchstaben (
abcdef
) oder Großbuchstaben (ABCDEF
) sind.Die Buchstaben in der Ausgabe können in beiden Fällen beliebig sein. Sie können sogar Fälle mischen.
Alpha / Transparenz wird hier nicht behandelt (obwohl es hexadezimale Versionen von RGBA-Farben gibt).
Der kürzeste Code in Bytes gewinnt.
quelle
#UVWXY -> #UVWXYY
Eintrag nicht zufrieden, da er eine Einzelwertdarstellung für den blauen Kanal zulässt, aber es gibt keinen ähnlichen Ausdruck für Rot und Grün (z. B. wenn ich wollte,#889071
kann ich nicht abkürzen,#907188
kann aber ... wie#90718
die anderen sein) Alle arbeiten großartig.#UVWX -> #UXVXWX
. Es ist ein so inkonsistentes und willkürliches Verhalten, dass es kaum zu glauben gibt, dass es derzeit nicht einige Browser gibt, die es tatsächlich implementieren.#RGBA
und#RRGGBBAA
, so dass # 1234 alsrgba(17, 34, 51, 0.25)
Antworten:
JavaScript,
868277 BytesFinden Sie heraus, dass rekursive Save 4 Bytes entfernen ...
Idee von @Arnauld spart 4 Bytes, +1 weitere Bytes
quelle
([s,a=0,b=a,c,d,e,f]=x)=>f?x:e?x+e:d?s+a+d+b+d+c+d:c?s+a+a+b+b+c+c:s+a+a+a+b+b+b
für 80 BytesReferenceError: x is not defined
Gelee , 24 Bytes
Ein volles Programm (die Leerzeilen sind eigentlich Leerzeilen).
Probieren Sie es online! oder sehen Sie sich eine Testsuite an *
Wie?
* Das Programm der Testsuite musste geändert werden, indem die Reihenfolge der
Main link
und vertauscht wurdeLink 7
, während die Fußzeile zurMain Link
. Außerdem#
musste das manuell ausgetauscht werden, da das Programm es so wie es ist leitet.quelle
CJam,
454442403635 BytesFührt je nach Länge der Eingabe verschiedene Codefragmente aus.
quelle
<s></s>
PHP 7.1, 88 Bytes
PHP 5,
9088 Bytesquelle
_21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]
?$argn
in21422112233122444113355123456
und wählt die richtige basierend auf Strlen.aa
Füllt die Saite mit mindestens 2 Zeichen auf. Bei der Eingabe#
gibt es keine$argn[1]
so?:0
Ausgänge a0
. Dies funktioniert auch für0
die Zeichenfolge. Eine der besten Antworten, die ich gesehen habe! Leider zahlt es sich nicht zu viel aus (Jörgs Antwort wurde auf 95 herabgesetzt).PHP,
95938987Grundsätzlich hat @ JörgHülsermanns Antwort aber stark nachgelassen, so dass ich mich entschlossen habe, sie als separate Antwort zu posten. Ich würde diese Antwort als eine gemeinsame Anstrengung von mir und Jörg betrachten.
quelle
Python 3,
166162160152 BytesIch
len(x)-1
erstelle eine Liste mit Regex-Ersetzungstupeln für jedes Muster, extrahiere dann das Tupel am Index und zerlege*
es schließlich ( ) in die Argumente vonre.sub
:8 Bytes durch Auswendiglernen gespeichert
r'\1'
(Danke, Gábor Fekete)quelle
r'\1'
als benannter Parameter nicht einige Bytes sparen?o=r'\1'
aberb
in Ihrem Code verwendet: DJava 10,
228227224182 BytesProbieren Sie es online aus.
Erläuterung:
quelle
APL (Dyalog) , 43 Bytes
Benötigt,
⎕IO←0
was auf vielen Systemen Standard ist.Probieren Sie es online!
1↓⍞
lösche das erste Zeichen (den Hash){
Wenden Sie die folgende anonyme Funktion an(≢⍵)⊃
Verwenden Sie die Länge des Arguments, um einen der folgenden sieben Werte auszuwählen:'0'
a Null⍵
das Argument⍵
das Argument2/⍵
zwei (2
) von jedem (/
) des Arguments (⍵
)∊⍵,¨⊃⌽⍵
das abgeflachte (∊
) Argument (⍵
) gefolgt von jedem (,¨
) von dem ersten (⊃
) von das umgekehrte (⌽
) Argument (⍵
)⍵,⌽⍵
das Argument (⍵
) vorangestellt (,
) auf das umgekehrte (⌽
) Argument (⍵
)⍵
das Argument6⍴
Wiederholen Sie die Schritte, bis eine Länge von sechs erreicht ist}
Ende der anonymen Funktion'#',
stellen Sie dem einen Hash voranquelle
Python 2,
167165 Bytes-2 Bytes dank Trelzevir
Es erstellt eine Liste von Zeichenfolgen und wählt basierend auf der Länge der Zeichenfolge.
quelle
z=zip
.Sed, 119 (118 Bytes +
-E
)Einfache Textsubstitution.
quelle
PHP, 87 Bytes
benutze Base 35 Numbers
Probieren Sie es online!
oder verwenden Sie die Basis 33-Nummern
Probieren Sie es online!
PHP, 89 Bytes
Probieren Sie es online!
intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36)
+ 3 Bytes bei 36 BasenPHP, 102 Bytes
Probieren Sie es online!
PHP, 180 Bytes
Probieren Sie es online!
quelle
Netzhaut , 90 Bytes
Probieren Sie es online! Beinhaltet Testfälle.
Erläuterung: Die erste Übersetzung behandelt zwei Ziffern, die zweite drei, die dritte vier und die vierte null. Weder die zweite noch die vierte Übersetzung wiederholen jedoch die (letzte) Ziffer, da dies ohnehin am Ende erfolgt, um alle verbleibenden Fälle abzudecken.
quelle
Haskell ,
13012712211810995 Bytes (von user1472751 )Probieren Sie es online!
quelle
g
.(x:r)!(y:t)=x:y:r!t;e!_=e
kürzer alsa!b=id=<<[[x,y]|(x,y)<-zip a b]
.#
möglich istg(a:t)|l<-last t=a:[ ...
Powershell,
113111 BytesErklärtes Testskript:
Ausgabe:
quelle
JavaScript (ES6), 96 Byte
Code-Snippet anzeigen
quelle
Perl, 61 Bytes
Laufen Sie mit
perl -nE
. Nimmt an, dass die Eingabe genau wie beschrieben ist (führt zu falschen Ergebnissen, wenn die Eingabe eine nachgestellte Newline enthält).Die Zeichenfolge "g + g + ÜRÉ / Â ¥ [[" codiert die 7 16-Bit-Zahlen
11111,11111,21212,12233,42434,23455,23456
als 14 lateinische Zeichen1 . Hier ist ein Hexdump zur Verdeutlichung:quelle
perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'
. Aber wenn ich "#a" eingebe, erhalte ich "# a0a0a0", was ich für falsch halte. Es sollte "#aaaaaa" sein. (Vielleicht habe ich einen Fehler beim Aufruf von pack () gemacht.)perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Es scheint immer noch falsch zu sein, da "#a" immer noch die falsche Antwort von "#a0a0a0" liefert (anstelle von "#aaaaa").-l
Schalter (das „ell“ , wie er in der „Buchstabe L“) mit dem-nE
Schalter, wie folgt aus :perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Jetzt funktioniert es richtig.perl -nE
" in "Ausführen mitperl -lnE
" behoben werden . (Der-l
Teil des Schalters beseitigt für Sie den nachgestellten Zeilenumbruch.)-F
in der Befehlszeile können Sie dies ändern,say+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]
um 5 Bytes im Code zu sparen.Windows Batch,
389 372 362 349231 BytesIch habe den @Neil-Code komplett kopiert ...
quelle
%s:~3,1%%s:~4,1%
kann durch ersetzt werden%s:~3,2%
. Ich bin mir auch nicht sicher, ob das bei einer Eingabe von funktioniert#
.call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%
undfor %%r in (#%1%2%3%4%5%6.%6 #%1%2%3%4%5%5.%5 #%1%4%2%4%3%4.%4 %s%%1%2%3.%3 %s%%1%2%1%2.%2 %s%%1%1%1%1%1.%1 #000000.0)do if not %%~xr.==. echo %%~nr&exit/b
.Pyth, 35 Bytes
Probieren Sie es hier online aus oder überprüfen Sie alle Testfälle hier .
quelle
Python 2 , 99 Bytes
Probieren Sie es online!
quelle
Python 2 - 179 Bytes
Kann mir jemand helfen, ein paar Bytes zu sparen? Alle if-Anweisungen scheinen sich in etwas Kürzeres zu verkürzen, ich weiß nur nicht, was.
quelle
list[len(list)-x]
das gleiche wie beilist[-x]
.if t==1:
inif t<2:
(undif t==2:
nachif t<3:
usw.) konvertieren . Es ist zwar weniger lesbar, aber mehr Code-Golf-fähig!TXR Lisp: 171 Bytes
Eingerückt:
Dies ist eine anonyme Funktion: Das
do
Makro generiert ein(lambda ...)
Formular.Es ist idiomatische codierung stil, geeignet für die produktion; das einzige Golfspiel ist das Quetschen von Leerzeichen:
quelle
Braingolf , 95 Bytes
Probieren Sie es online!
Dies ist praktisch das Äquivalent von Braingolf zu einem Schalter für die Anzahl der Zeichen nach dem
#
in der Eingabe.Erläuterung
Sachen, die immer laufen:
Wenn
#X
:Wenn
#XX
Dieser mag ein bisschen golf sein, ich könnte ihn mir ansehen, wenn ich nach Hause komme
Wenn
#XXX
Du hast die Idee
quelle
Ruby , 127 Bytes
Probieren Sie es online!
quelle
Ruby , 118 Bytes
Probieren Sie es online!
quelle
05AB1E , 24 Byte
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle