Identicons sind visuelle Darstellungen von Hash-Werten, die häufig aus symmetrischen Anordnungen geometrischer Formen bestehen. Ihr Standard-Stack Exchange-Avatar ist ein Identicon. Bei dieser Herausforderung geht es darum, "wordenticons" zu erstellen , einfache textbasierte Versionen von Identicons, die für Zeichenfolgen aus Kleinbuchstaben, dh Wörtern, gelten.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge S aufnimmt und deren Wortsymbol ausgibt. S ist garantiert nicht leer und enthält nur englische Kleinbuchstaben az. Sie können optional annehmen, dass S eine nachgestellte Newline hat.
Das Wortsymbol von S ist ein quadratisches Textraster mit Seitenlängen, 2*length(S)
die aus Leerzeichen (
), vertikalen Balken ( |
) und horizontalen Balken ( ―
) bestehen.
Bilden Sie ein quadratisches Gitter, in dem jede Spalte einem Buchstaben von S (in normaler Lesereihenfolge von links nach rechts) und jede Zeile einem Buchstaben von S (in normaler Lesereihenfolge von oben nach unten) entspricht, um das Wortentikon von S zu erzeugen ).
Wenn zum Beispiel S food
unser anfängliches Gitter ist, sieht es so aus
food
f....
o....
o....
d....
Wo .
ist nur ein Platzhalter.
Für jeden leeren Punkt (jeden .
) im Raster:
- Wenn der Spaltenbuchstabe alphabetisch vor dem Zeilenbuchstaben steht, ersetzen Sie ihn
.
durch|
. - Wenn der Spaltenbuchstabe alphabetisch nach dem Zeilenbuchstaben steht, ersetzen Sie ihn
.
durch―
. - Wenn die Spalten- und Zeilenbuchstaben identisch sind, ersetzen Sie die
.
mit
Hier ist das food
Beispiel nach jedem dieser Schritte:
Hinzufügen von
|
's:food f...| o|..| o|..| d....
Hinzufügen von
―
's:food f.――| o|..| o|..| d―――.
Hinzufügen von
food f ――| o| | o| | d―――
Entfernen Sie die überflüssige Zeile und Spalte mit den Wörtern, um das Wortentikon zu vervollständigen
――|
| |
| |
―――
dann spiegel das ganze horizontal
――||――
| || |
| || |
――― ―――
und zum Schluss wieder senkrecht spiegeln
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
2*length(S)
Daraus ergibt sich das Textraster mit der Seitenlänge, das das letzte Wort-Symbol ist.
Beispiele
Hier sind einige zusätzliche Beispiele für Wordenticons. Beachten Sie, dass verschiedene Wörter identische Wordenticons haben können und einige Wordenticons vollständig aus Leerzeichen bestehen können (diese möchten markdown leider nicht rendern).
food
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
mood
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
foof
―― ――
| || |
| || |
―― ――
―― ――
| || |
| || |
―― ――
fool
――――――
| || |
| || |
|―― ――|
|―― ――|
| || |
| || |
――――――
a [2*2 grid of spaces]
to
||
― ―
― ―
||
it
――
| |
| |
――
tt [4*4 grid of spaces]
abc
――――
| ―― |
|| ||
|| ||
| ―― |
――――
and
――――
| || |
|― ―|
|― ―|
| || |
――――
but
――――
| || |
|― ―|
|― ―|
| || |
――――
you
||||
― ―― ―
―| |―
―| |―
― ―― ―
||||
bob
― ―
| || |
― ―
― ―
| || |
― ―
cat
|――|
― ―― ―
|| ||
|| ||
― ―― ―
|――|
cart
|――――|
― ―――― ―
|| ―― ||
||| |||
||| |||
|| ―― ||
― ―――― ―
|――――|
todo
||||||
― | | ―
―― ―― ――
― | | ―
― | | ―
―― ―― ――
― | | ―
||||||
mice
||||||
― |||| ―
―― ―― ――
――| |――
――| |――
―― ―― ――
― |||| ―
||||||
zyxw
||||||
― |||| ―
―― || ――
――― ―――
――― ―――
―― || ――
― |||| ―
||||||
banana
|―|―||―|―|
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|―|―||―|―|
codegolf
――――――――――――――
| ||| |||| ||| |
|― ―――――――――― ―|
|―| ―――――――― |―|
|―|| ――||―― ||―|
| ||| |||| ||| |
|―|||― || ―|||―|
|―||――― ―――||―|
|―||――― ―――||―|
|―|||― || ―|||―|
| ||| |||| ||| |
|―|| ――||―― ||―|
|―| ―――――――― |―|
|― ―――――――――― ―|
| ||| |||| ||| |
――――――――――――――
programming
―||―||||||||||||―||―
| || |||||||||||| || |
―― |―||||||||||||―| ――
――― ―|―――― ――――|― ―――
| || |||||||||||| || |
――――― ―――――――――― ―――――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
―――|―|―― ―||― ――|―|―――
―――|―|||| || ||||―|―――
――― ―|―――― ――――|― ―――
――― ―|―――― ――――|― ―――
―――|―|||| || ||||―|―――
―――|―|―― ―||― ――|―|―――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
――――― ―――――――――― ―――――
| || |||||||||||| || |
――― ―|―――― ――――|― ―――
―― |―||||||||||||―| ――
| || |||||||||||| || |
―||―||||||||||||―||―
abcdefghijklm
――――――――――――――――――――――――
| ―――――――――――――――――――――― |
|| ―――――――――――――――――――― ||
||| ―――――――――――――――――― |||
|||| ―――――――――――――――― ||||
||||| ―――――――――――――― |||||
|||||| ―――――――――――― ||||||
||||||| ―――――――――― |||||||
|||||||| ―――――――― ||||||||
||||||||| ―――――― |||||||||
|||||||||| ―――― ||||||||||
||||||||||| ―― |||||||||||
|||||||||||| ||||||||||||
|||||||||||| ||||||||||||
||||||||||| ―― |||||||||||
|||||||||| ―――― ||||||||||
||||||||| ―――――― |||||||||
|||||||| ―――――――― ||||||||
||||||| ―――――――――― |||||||
|||||| ―――――――――――― ||||||
||||| ―――――――――――――― |||||
|||| ―――――――――――――――― ||||
||| ―――――――――――――――――― |||
|| ―――――――――――――――――――― ||
| ―――――――――――――――――――――― |
――――――――――――――――――――――――
Wertung
Dies ist Code-Golf , der kürzeste Code in Bytes gewinnt. Tiebreaker geht auf die frühere Antwort ein.
Anmerkungen
- Jede Instanz von horizontaler Leiste (
―
) in Ihrem Code wird möglicherweise als 1 Byte anstelle der 3 UTF-8-Bytes gezählt, die sie tatsächlich belegt. (Bis zu zehn Instanzen.) - Falls gewünscht, können Sie
-
anstelle der horizontalen Balken (―
) reguläre Bindestriche ( ) verwenden. - Das Entfernen oder Hinzufügen von nachgestellten Leerzeichen in den Zeilen eines Wordenticons ist nicht zulässig (auch wenn die Form unverändert bleibt). Es sollte ein genaues
2*length(S)
Seitenlängentextquadrat sein. - Das Ausgabewortenticon kann optional eine einzelne nachgestellte Newline haben.
programming
,and
und ,codegolf
aber sie vergessenpuzzles
...Antworten:
MATL,
2015 BytesProbieren Sie es bei MATL Online aus
Erläuterung
quelle
Java,
329305264259192 BytesDank an:
StringBuilder
mitString
.Golf gespielt:
Ungolfed:
Auf jeden Fall ein Spaß. Der erste Versuch war eine Funktion, die
O(n)
jedoch durch diese einfachere Form ersetzt wurde, nachdem ich zu frustriert war.Und zum Testen:
quelle
\u2015
. Die Verwendung der horizontalen Leiste (oder einfach des Bindestrichs) im Rohcode ist in Ordnung.String
anstelleStringBuilder
der Antwort verwenden, viel kürzer sein könnte ... (obwohl es viel mehr Speicher in Anspruch nehmen kann)int
s in derselben Zeile deklarieren :int i,j,l=m.length();for(i=0;i<l;i++){...
Haskell, 93 Bytes
Anwendungsbeispiel:
Wie es funktioniert (Anmerkung:
(f <*> g) x
ist definiert alsf x (g x)
):Alternative Version: Die Funktion "Ersatz finden"
((("- |"!!).fromEnum).).compare
kann bei gleicher Byteanzahl auch alsa#b|a<b='-'|a>b='|'|1<2=' '
und über aufgerufen werden(#)
.quelle
Gelee , 16 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6), 94 Byte
Die Verwendung eines Bindestrichs, da ich normalerweise die SpiderMonkey-JS-Shell unter Windows ausführe und Unicode sonst nicht funktioniert.
quelle
[...s,s].reverse()
+1Pyth,
3130Test Suite
Leider kann ich das
Q
s wegen der mehreren Gabelungen nicht fallen lassen . Der bisher recht einfache Algorithmus count behandelt den horizontalen Balken als 1 Byte.quelle
Haskell, 66 Bytes
quelle
JavaScript ES6,
138126123 BytesDer größte Teil des Codes ist das Reflektieren / Spiegeln
quelle
J,
26-20Bytes6 Bytes dank @Zgarb .
Vorherige 26-Byte-Antwort
Verwendet den gleichen Algorithmus wie Dennis 'Antwort.
Verwendungszweck:
(
>>
Bedeutung Eingang (STDIN),<<
Bedeutung Ausgang (STDOUT))quelle
' |-'{~3*@-/~@u:[,|.
Mathematica,
124110104102 BytesAnonyme Funktion. Das Unicode-Zeichen ist U + F3C7 für
\[Transpose]
.quelle
Javascript
146142132130124 BytesTestsuite:
Vielen Dank für @HelkaHomba, dass Sie mitgeholfen haben, mindestens 50 Bytes zu entfernen, und für 3 Bytes an @Downgoat!
quelle
Eigentlich 53 Bytes
Auch hier ist das Kryptonit die schlechte Fähigkeit von Actually, Saiten zu verarbeiten. Es ist immer noch kürzer als Java, also habe ich das, was schön ist.
Probieren Sie es online!
Erläuterung:
Der Code kann in drei verschiedene Teile unterteilt werden: den Übersetzungscode, den Verarbeitungscode und den Spiegelungscode. Zur besseren Lesbarkeit erkläre ich jeden Abschnitt separat.
Übersetzungscode (beginnt mit der Eingabezeichenfolge,,
s
auf dem Stapel):Verarbeitungscode (beginnt mit einer Liste von
n**2
Zeichen in der rechten unteren Ecke):Code spiegeln (beginnt mit einer
n**2+n
-langen Zeichenfolge, wobei Punkte als Zeilenumbrüche fungieren)quelle
> <> 109 Bytes
Die Eingabe erfolgt über STDIN. Probieren Sie es online!
Erklärung:
Die Eingabe wird in der ersten Zeile gelesen und gespiegelt. Bei der Eingabe verbleibt
abcd
diesdcbaabcd
auf dem Stapel. Jede Hälfte wird dann gespiegelt, um zu ergebenabcddcba
(Zeile 2). Dann wird jedes Element dupliziert und der Reihe nach auf einem eigenen Stapel belassen (Zeilen 3 und 4). Nach diesem Vorgang sieht der Stapel der Stapel ungefähr so aus:Für jeden Stapel wird der Zeilenwert (der Boden des Stapels) mit dem Spaltenwert (der Oberseite des Stapels) verglichen. Das entsprechende Zeichen wird ausgewählt
- |
und in STDOUT geschrieben. Die Spaltenwerte werden dann so gedreht, dass sich die nächste Spalte oben im Stapel befindet (Zeile 6).Nachdem alle Spalten berücksichtigt wurden, wird der Zeilenwert verworfen, eine neue Zeile gedruckt und die Spaltenwerte in den vorherigen Stapel (Zeile 7) eingefügt, damit der Ausgabeprozess erneut gestartet werden kann.
Der
]
Befehl löscht nicht nur den Stapel, sondern leert auch den aktuellen Stapel, wenn er der einzige ist, der noch übrig ist. Die Endbedingung des Programms ist, wenn der Stapel leer ist, da alle Zeilen verarbeitet wurden (Zeile 5).quelle
C #,
169.150Bytesdanke FryAmTheEggman
ungolfed:
mehr Golfratschläge erwünscht
quelle
t+=c==k?" ":c>k?"|":"-";
sollte arbeiten. Ich habe nicht viel C # gespielt, aber es ist gut möglich, dass die Verwendung von regulärenfor
Loops kürzer ist.Reverse()
und einToArray()
Teil davon sind,System.Linq
weshalb eine using-Anweisung erforderlich ist.C #
166143 Bytes,Erläuterung:
Prüfung:
quelle
IEnumerable<char>
Sie einige Bytes einsparen, indem Sie.Reverse()
direkt auf den String.ToCharArray()
var a = new[] { '-', ' ', '|' };
,var a = "- |";
weil Sie die Indizierung für Zeichenfolgen verwenden könnenCJam, 20 Bytes
Teste es hier.
Verwendet den offensichtlichen Ansatz, ein äußeres Produkt zu berechnen und Differenz und SGN zu verwenden, um den Charakter in jeder Zelle zu berechnen.
quelle
Clojure, 171 Bytes
ungolfed:
quelle
J,
75-70Bytes5 Bytes gespart dank Dennis.
Ich werde später daran arbeiten, es in ein implizites Verb umzuwandeln.
quelle
Oktave, 39 Bytes
Erstellt eine anonyme Funktion, die mit ausgeführt werden kann
ans('string')
.Demo
Erläuterung
Diese Lösung kombiniert die Eingabezeichenfolge (
x
) und die Verwendung von inverse (flip(x)
)[x, flip(x)]
. Das Inverse wird zugewieseny
, um die Antwort zu verkürzen[x, y = flip(x)]
. Wir haben dann einen Spaltenvektor der gleichen Sache schaffen durch die Kombinationx
undy
und nehmen die Transponierung:[x,y]'
. Dann nehmen wir den Unterschied, der automatisch gesendet wird, um ein 2D-Array von Unterschieden zwischen ASCII-Darstellungen von Buchstaben in den Zeichenfolgen zu erstellen. Wir verwendensign
entweder-1
,0
oder1
und addieren2
, um gültige 1-basierte Indexwerte zu erhalten. Wir verwenden diese dann, um in die Anfangszeichenfolge zu indizieren'| -'
.quelle
Julia, 70 Bytes
Dies ist mein erster Versuch, Code Golf zu spielen, und ich habe Julia noch nie benutzt. Sagen Sie mir also, was Sie denken:
Probieren Sie es online!
Ungolfed:
Ich denke, es könnte wahrscheinlich kürzer gemacht werden. Dieser Code speichert die Zeichen des Wortsymbols in einer Matrix:
Leider konnte ich mit der Matrix nicht die gewünschte Ausgabe erzeugen.
quelle
Jolf, 42 Bytes
Kaum Golf gespielt. Ich vergesse wahrscheinlich eine Matrix, die Jolf eingebaut hat.
Probieren Sie es hier aus! Dieser Code verwendet eine Pfeilfunktion (
Ψ
) für die Matrixzuordnung.quelle
Javascript, 303 Bytes
Ungolfed
Keine ecma 2015 Phantasie hier
quelle
var x = 1
, tun Sie es einfachx = 1
. Beim Code-Golf kümmert sich niemand um die Einhaltung von Best Practices. :)Python 2, 126 Bytes
Dies ist im Wesentlichen ein Port meiner tatsächlichen Lösung .
Probieren Sie es online aus
Erläuterung:
quelle
Python 3.5,
250223175 Bytes:Probieren Sie es online! (Ideone) (Die letzten beiden Testfälle werden in der Ausgabe nicht da es sich nur um leere Zeilen handelt. Mein Programm verarbeitet sie jedoch, was die Tatsache bestätigt, dass 10 Fälle eingegeben wurden, aber nur 8 Ausgaben angezeigt wurden.)
Ungolfed gefolgt von einer Erklärung:
p=[[' ―'[O(i)<O(g)],'|'][O(i)>O(g)]for i in o for g in o]
Erstellen Sie eine Liste,
p
in der a|
hinzugefügt wird, wenn der Unicode-Punktwert des Spaltenbuchstabens kleiner als der Wert des Zeilenbuchstabens ist, a–
hinzugefügt wird, wenn der Unicode-Punktwert des Spaltenbuchstabens größer als der Wert des Zeilenbuchstabens ist, oder a,wenn beides zutrifft Werte sind gleich.
u='\n'.join([''.join(p[i:G+i]+p[i:G+i][::-1])for i in range(0,len(p),G)])
Erstellen Sie
u
aus der Liste eine verbundene Newline-Zeichenfolge,p
indem Sie sie in verbundene Zeichenfolgensegmente aufteilen, die jeweils aus der Länge der eingegebenen Zeichen in Vorwärts- und Rückwärtsrichtung bestehen. Dabei hat jedes Zeichen die doppelte Länge der in der Eingabe enthaltenen Zeichen. Dies ist die obere Hälfte Ihres Wordenticons. Also, im Falle Ihrer Eingabefood
würde dies also Folgendes zurückgeben:print(u+'\n'+u[::-1])
Schließlich
u
folgt die Ausgabe einer neuen Zeile und wirdu
umgekehrt, um die erste Hälfte für die zweite Hälfte vertikal zu spiegeln. Dies ist Ihr fertiges Wordenticon, das für den Testfallfood
endlich lauten würde:quelle
R 101 Bytes
101 Bytes seit ich benutze
―
(was ich denke sieht besser aus als-
).Probieren Sie es online!
Ich war überrascht, dass es vorher keine R-Antwort gab, da wir die Symmetrie und die R-Matrizen ausnutzen können, um eine ziemlich wettbewerbsfähige Antwort zu erhalten, obwohl dies eine ist
string
Problem ist.Ungolfed Erklärung:
quelle
C (gcc) , 202 Bytes
Probieren Sie es online!
Arbeiten Sie, indem Sie die einzelnen Zeichen durchlaufen und anschließend das resultierende Zeichen (und dessen Reflexionen) aktualisieren.
quelle
05AB1E (Vermächtnis) ,
202221 Byte+2 Bytes als Bugfix für Single-Char-Eingaben.
-1 Bytes durch Verwendung von regulären Bindestrichen
-
anstelle von―
, da wir dann… |-
anstelle von"… |―"
(since) verwenden können… |―
fälschlicherweise als Dictionary-String fungieren würde)Verwendet die ältere Version von 05AB1E, da beim Spiegeln implizit Zeilenumbrüche auftreten, für die ein zusätzlicher expliziter Befehl erforderlich ist
»
in der neuen Version .Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle