Generieren Sie Wordenticons

54

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 foodunser 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:

  1. Wenn der Spaltenbuchstabe alphabetisch vor dem Zeilenbuchstaben steht, ersetzen Sie ihn .durch |.
  2. Wenn der Spaltenbuchstabe alphabetisch nach dem Zeilenbuchstaben steht, ersetzen Sie ihn .durch .
  3. Wenn die Spalten- und Zeilenbuchstaben identisch sind, ersetzen Sie die .mit (Leerzeichen).

Hier ist das foodBeispiel nach jedem dieser Schritte:

  1. Hinzufügen von |'s:

     food
    f...|
    o|..|
    o|..|
    d....
    
  2. Hinzufügen von 's:

     food
    f.――|
    o|..|
    o|..|
    d―――.
    
  3. Hinzufügen von 's:

     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 , 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.
Calvins Hobbys
quelle
Können wir die Eingabe als Array von Zeichen verstehen?
Downgoat
@Downgoat Nein, es sollte eine normale Zeichenfolge sein, es sei denn, es gibt absolut keinen anderen Weg für Ihre Sprache.
Calvins Hobbys
2
Sie haben Beispiele bekam für programming, andund , codegolfaber sie vergessen puzzles...
Neil
Könnten Sie eine Rangliste hinzufügen?
Undichte Nonne
Also haben wir irgendwann herausgefunden, warum Sie im Chat nach Portmanteaus gefragt haben :)
gcampbell

Antworten:

21

MATL, 20 15 Bytes

'-| 'jtPht!-ZS)

Probieren Sie es bei MATL Online aus

Erläuterung

'-| '       % String literal defining the replacement characters
j           % Explicitly grab the input as a string
tP          % Duplicate and reverse the input string (row vector of chars)
h           % Horizontally concatenate the input and it's inverse
t!          % Duplicate and turn into a column vector
-           % Subtract the two vectors (converts to ASCII codes) and we automatically
            % broadcast to create a (2N x 2N) matrix where if the column is
            % later in the alphabet (higher ASCII) we get a positive number, if the 
            % column was earlier (lower ASCII) we get a negative number, and if they are
            % the same letter (same ASCII) we get a 0.
ZS          % sign function which yields -1 for negative, 1 for positive, and 0 for 0;
)           % Use this to index (modulus) into the string literal '-| '. MATL uses 1-based
            % indexing so 0 yields ' ', -1 replaced by '|', and 1 replaced by '-'
            % Implicitly display the result
Suever
quelle
9
: O du hast Dennis überrumpelt!
Downgoat
@Downgoat Dies ist einer der seltenen Fälle, in denen MATL kürzer als Jelly ist!
Suever
Gute Idee, die Vorzeichenfunktion zu nutzen!
Luis Mendo
18

Java, 329 305 264 259 192 Bytes

Dank an:

  • @ Bálint für den Vorschlag, ternäre Operatoren zu verwenden.
  • @ user902383 für den Vorschlag, die Zeichenfolge selbst umzukehren
  • @Frozn und @ user902383 zu ersetzen was darauf hindeutet , StringBuildermit String.

Golf gespielt:

String g(String w){char[]a=w.toCharArray();String s="";for(int i=a.length-1;i>=0;s=s+a[i--]);w+=s;a=w.toCharArray();s="";for(char x:a){for(char y:a)s+=(x>y?'|':x<y?'-':' ');s+='\n';}return s;}

Ungolfed:

String g(String w) {
    char[] a = w.toCharArray();
    String s = "";
    for (int i = a.length - 1; i >= 0; s = s + a[i--]);
    w += s;
    a = w.toCharArray();
    s = "";// To keep the output pure (ie. without the input string as well)
    for (char x : a) {
        for (char y : a)
            s += (x > y ? '|' : x < y ? '-' : ' ');
        s += '\n';
    }
    return s;
}

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:

supercalifragilisticexpialidocious
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
| |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
-- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
--- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
--|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
----- |----|------- ----|---- -------- ----|---- -------|----| -----
------ ---- ------------ ------------------ ------------ ---- ------
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-||-- -|-------||---|--|-|--------|-|--|---||-------|- --||-|---
--|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
------ ---- ------------ ------------------ ------------ ---- ------
---|-||--|-| ------||---|--|-|--------|-|--|---||------ |-|--||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
|-||||||||||||||| |||-||||||||||-||-||||||||||-||| |||||||||||||||-|
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
----- |----|------- ----|---- -------- ----|---- -------|----| -----
--- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
||||||||||||||||||||| |||||||||||||||||||||||| |||||||||||||||||||||
-- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
------ ---- ------------ ------------------ ------------ ---- ------
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
-----||----|-------|----|-- -|--------|- --|----|-------|----||-----
---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
----- |----|------- ----|---- -------- ----|---- -------|----| -----
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
| |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
| |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
----- |----|------- ----|---- -------- ----|---- -------|----| -----
---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
-----||----|-------|----|-- -|--------|- --|----|-------|----||-----
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
------ ---- ------------ ------------------ ------------ ---- ------
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
-- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
||||||||||||||||||||| |||||||||||||||||||||||| |||||||||||||||||||||
--- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
----- |----|------- ----|---- -------- ----|---- -------|----| -----
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
|-||||||||||||||| |||-||||||||||-||-||||||||||-||| |||||||||||||||-|
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-||--|-| ------||---|--|-|--------|-|--|---||------ |-|--||-|---
------ ---- ------------ ------------------ ------------ ---- ------
--|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
---|-||-- -|-------||---|--|-|--------|-|--|---||-------|- --||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
------ ---- ------------ ------------------ ------------ ---- ------
----- |----|------- ----|---- -------- ----|---- -------|----| -----
--|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
--- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
-- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
| |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||-  
Zymus
quelle
2
Willkommen bei Programming Puzzles & Code Golf! Dies ist eine sehr schöne erste Antwort. :)
Alex A.
1
Beachten Sie, dass Sie nicht verwenden müssen \u2015. Die Verwendung der horizontalen Leiste (oder einfach des Bindestrichs) im Rohcode ist in Ordnung.
Calvins Hobbys
Ich bin mir ziemlich sicher, dass, wenn Sie normal Stringanstelle StringBuilderder Antwort verwenden, viel kürzer sein könnte ... (obwohl es viel mehr Speicher in Anspruch nehmen kann)
Undichte Nonne
Sie könnten einige Bytes gewinnen, indem Sie alle ints in derselben Zeile deklarieren :int i,j,l=m.length();for(i=0;i<l;i++){...
Aaron
Ich denke, Sie könnten viel sparen, wenn Sie die for-Schleifen für jede Schleife ändern. Sie brauchen die Indizes nur, um die Zeichen zu erhalten.
Frozn
11

Haskell, 93 Bytes

r=reverse
h x=unlines$(++)<*>r$zipWith(++)<*>map r$(<$>x).((("- |"!!).fromEnum).).compare<$>x

Anwendungsbeispiel:

*Main> putStr $ h "food"
 --||-- 
|  ||  |
|  ||  |
---  ---
---  ---
|  ||  |
|  ||  |
 --||-- 

Wie es funktioniert (Anmerkung: (f <*> g) xist definiert als f x (g x)):

((("- |"!!).fromEnum).).compare       -- a function that finds the replacement char
                                      -- for two given chars
   (<$>x).(    )<$>x                  -- map this function for every char in the
                                      -- input over each char. Now we have the
                                      -- first quadrant as a list of strings
zipWith(++) <*> map r                 -- append to each line a reversed copy of itself
(++) <*> r                            -- append a reversed copy of the whole list
unlines                               -- turn into a single string

Alternative Version: Die Funktion "Ersatz finden" ((("- |"!!).fromEnum).).comparekann bei gleicher Byteanzahl auch als a#b|a<b='-'|a>b='|'|1<2=' 'und über aufgerufen werden (#).

nimi
quelle
8

Gelee , 16 Bytes

Om©0_'®Ṡị“-| ”j⁷

Probieren Sie es online!

Wie es funktioniert

Om©0_'®Ṡị“-| ”j⁷  Main link. Argument: s (string)

O                 Ordinal; replace the characters of s with their code points.
 m 0              Concatenate the result with a reversed copy.
  ©               Copy the result to the register.
      ®           Yield the list in the register.
    _'            Perform spawned difference of the character codes.
       Ṡ          Apply the sign function.
        ị“-| ”    Index into that string (indices 1, -1, 0).
              j⁷  Join, separating by linefeeds.
Dennis
quelle
8

JavaScript (ES6), 94 Byte

s=>[...s,s].reverse().join``.replace(/./g,(c,_,t)=>t.replace(/./g,d=>d<c?`|`:d>c?`-`:` `)+`
`)

Die Verwendung eines Bindestrichs, da ich normalerweise die SpiderMonkey-JS-Shell unter Windows ausführe und Unicode sonst nicht funktioniert.

Neil
quelle
Geniale Idee mit dem [...s,s].reverse()+1
Downgoat
5

Pyth, 31 30

js_BsM_BMclQsm@" |―"._-FCMd*QQ

Test Suite

Leider kann ich das Qs wegen der mehreren Gabelungen nicht fallen lassen . Der bisher recht einfache Algorithmus count behandelt den horizontalen Balken als 1 Byte.

FryAmTheEggman
quelle
verdammt noch
mal
1
@Maltysen Ich war es leid, FGITWed zu sein;) Wie auch immer, ich bin sicher, es kann kürzer sein ...
FryAmTheEggman
5

Haskell, 66 Bytes

u s|e<-s++reverse s=unlines[["- |"!!min(length[a..b])2|a<-e]|b<-e]
Lynn
quelle
4

JavaScript ES6, 138 126 123 Bytes

s=>(a=(p=[...s]).map(l=>(b=p.map(i=>i<l?"|":i>l?"-":" ").join``)+[...b].reverse().join``)).concat([...a].reverse()).join`
`

Der größte Teil des Codes ist das Reflektieren / Spiegeln

Downgoat
quelle
4

J, 26-20 Bytes

6 Bytes dank @Zgarb .

' |-'{~3*@-/~@u:[,|.

Vorherige 26-Byte-Antwort

({&' |-')@*@-/~@(3&u:)@,|.

Verwendet den gleichen Algorithmus wie Dennis 'Antwort.

Verwendungszweck:

>> f =: ' |-'{~3*@-/~@u:[,|.
>> f 'food'
<<  --||-- 
   |  ||  |
   |  ||  |
   ---  ---
   ---  ---
   |  ||  |
   |  ||  |
    --||-- 

>> f 'supercalifragilisticexpialidocious'
<<  -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
   | |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
   -- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
   --- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
   --|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
   ----- |----|------- ----|---- -------- ----|---- -------|----| -----
   ------ ---- ------------ ------------------ ------------ ---- ------
   ---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ---|-||-- -|-------||---|--|-|--------|-|--|---||-------|- --||-|---
   --|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
   ------ ---- ------------ ------------------ ------------ ---- ------
   ---|-||--|-| ------||---|--|-|--------|-|--|---||------ |-|--||-|---
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
    -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
   |-||||||||||||||| |||-||||||||||-||-||||||||||-||| |||||||||||||||-|
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ----- |----|------- ----|---- -------- ----|---- -------|----| -----
   --- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
   ||||||||||||||||||||| |||||||||||||||||||||||| |||||||||||||||||||||
   -- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ------ ---- ------------ ------------------ ------------ ---- ------
   ---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   -----||----|-------|----|-- -|--------|- --|----|-------|----||-----
   ---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
   ----- |----|------- ----|---- -------- ----|---- -------|----| -----
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
   | |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
    -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
    -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
   | |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
   ---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ----- |----|------- ----|---- -------- ----|---- -------|----| -----
   ---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
   -----||----|-------|----|-- -|--------|- --|----|-------|----||-----
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
   ------ ---- ------------ ------------------ ------------ ---- ------
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   -- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
   ||||||||||||||||||||| |||||||||||||||||||||||| |||||||||||||||||||||
   --- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
   ----- |----|------- ----|---- -------- ----|---- -------|----| -----
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   |-||||||||||||||| |||-||||||||||-||-||||||||||-||| |||||||||||||||-|
    -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ---|-||--|-| ------||---|--|-|--------|-|--|---||------ |-|--||-|---
   ------ ---- ------------ ------------------ ------------ ---- ------
   --|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
   ---|-||-- -|-------||---|--|-|--------|-|--|---||-------|- --||-|---
   ---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
   ---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
   ------ ---- ------------ ------------------ ------------ ---- ------
   ----- |----|------- ----|---- -------- ----|---- -------|----| -----
   --|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
   --- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
   -- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
   | |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
    -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 

( >>Bedeutung Eingang (STDIN), <<Bedeutung Ausgang (STDOUT))

Undichte Nonne
quelle
1
Mit einigen Umstrukturierungen können Sie auf 20 Bytes kommen:' |-'{~3*@-/~@u:[,|.
Zgarb
Das ist eine nette Verwendung von Gabeln ...
Undichte Nonne
3

Mathematica, 124 110 104 102 Bytes

a=Join[#,Reverse@#]&;#<>"
"&/@a@a@Table[{"|"," ","-"}[[c~Order~d+2]],{c,b=Characters@#},{d,b}]<>""&

Anonyme Funktion. Das Unicode-Zeichen ist U + F3C7 für \[Transpose].

LegionMammal978
quelle
3

Javascript 146 142 132 130 124 Bytes

n=>(e=(a=[...n]).map(b=>(d=a.map(c=>c<b?"|":c>b?"-":" ")).concat([...d].reverse()).join``)).concat([...e].reverse()).join`
`

Testsuite:

f=n=>{a=n.split``;e=a.map(b=>a.map(c=>c<b?"|":c>b?"-":" ")).map(d=>d.concat([...d].reverse()).join``);alert(e.concat([...e].reverse()).join`
`)}

f(prompt("Enter string!"));

Vielen Dank für @HelkaHomba, dass Sie mitgeholfen haben, mindestens 50 Bytes zu entfernen, und für 3 Bytes an @Downgoat!

Bálint
quelle
1
Sie können normalerweise => {...} durch => (...) ersetzen und alle Semikolons innerhalb dieser Zeit durch Kommas ersetzen
Downgoat
Diese Antwort ist fast identisch mit der von Downgoat, ich schwöre, ich habe seine nicht angeschaut.
Bálint
3

Eigentlich 53 Bytes

;l╗;∙`♂O♂ii-s3@%" |-"E`MW╜`d@`nkd@Σ'.o@WX'.@s;R+;♂R¥i

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,, sauf dem Stapel):

;l╗;∙`♂O♂ii-s3@%" |-"E`M
;l╗                       push len(s) to reg0 (needed for processing step; we'll call this n)
   ;∙                     cartesian product of s with itself
     `♂O♂ii-s3@%" |-"E`M  map:
      ♂O♂ii                 get a pair of ordinals for the characters
           -s               subtract, signum
             3@%            mod by 3 because element access with negative indices isn't working
                " |-"E      get corresponding string

Verarbeitungscode (beginnt mit einer Liste von n**2Zeichen in der rechten unteren Ecke):

W╜`d@`nkd@Σ'.o@WX
W╜`d@`nkd@Σ'.o@W   while loop (while top of stack is truthy):
 ╜`d@`n              remove n characters from the list
       kd@Σ'.o       concatenate those n characters, and append a period
                X  discard the empty list

Code spiegeln (beginnt mit einer n**2+n-langen Zeichenfolge, wobei Punkte als Zeilenumbrüche fungieren)

'.@s;R+;♂R¥i
'.@s          split on periods
    ;R+       add the reverse list (vertical mirror)
       ;♂R    make a copy of the list with each string reversed (horizontal mirror)
          ¥   concatenate each pair of strings in the two lists (zip-concat)
           i  flatten list
              (implicitly print each stack item, separated by newlines)
Mego
quelle
3

> <> 109 Bytes

i:0(?\:}
,[r]l\~l2,[r]rl2
1-:?!\$:}l1-[}
~]\  \
&r\l:?!;1-
?!\$:@@:@$:@@:@)}(}"- |"{?$@{?$o~~$}&1-:&
4.>~ao]2

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 abcddies dcbaabcdauf dem Stapel. Jede Hälfte wird dann gespiegelt, um zu ergeben abcddcba(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:

aabcddcba  <-- top of the stack of stacks
b
c
d
d
c
b
a          <-- bottom of the stack of stacks

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).

Sok
quelle
3

C #, 169.150 Bytes

danke FryAmTheEggman

void f(string s){s+=new string(s.Reverse().ToArray());foreach(char c in s){var t="";foreach(char k in s)t+=c==k?" ":c>k?"|":"-";Console.WriteLine(t);}

ungolfed:

    public static void f(string s)
    {
        s += new string(s.Reverse().ToArray());
        foreach (char c in s)
        {
            var t="";
            foreach (char k in s)
            t+=c==k?" ":c>k?"|":"-";

            Console.WriteLine(t);
        }

    }

mehr Golfratschläge erwünscht

downrep_nation
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ären forLoops kürzer ist.
FryAmTheEggman
Diese Antwort hat das gleiche Problem, das meine ursprüngliche C # -Antwort darin hatte, dass beide Reverse()und ein ToArray()Teil davon sind, System.Linqweshalb eine using-Anweisung erforderlich ist.
Phaeze
3

C # 166 143 Bytes,

using System.Linq;s=>string.Join("\n",(s+=string.Concat(s.Reverse())).Select(x=>s.Aggregate("",(c, y)=>c+"- |"[Math.Sign(x.CompareTo(y))+1])));

Erläuterung:

using System.Linq;

s=>                                     // Expression bodied member allows for implicit return
  string.Join("\n",                     // Join the generate lines into the final output
    (s+=string.Concat(s.Reverse()))     // Combine s and its reverse inline so aggregate has the whole line
        .Select(x=>                     // For each character in the line run the aggregate to generate its row
            s.Aggregate("",             // Empty string is required to cooerce the output type from char
                (c, y)=>                // c is the generated string so far, y is the next character
                        c+
                                        // Compare the two letters here (row to column)
                                        // Then take the sign of the result to collapse to -1, 0, or 1
                                        // Finally add 1 to line it up with the indexes of the constant string;                                             
                        "- |"[Math.Sign(x.CompareTo(y))+1]
)));

Prüfung:

Wordenticons

 |||||||||||||||||||||| 
- -|||-|| |--| ||-|||- -
-| |||-||||--||||-||| |-
--- ----|------|---- ---
---| ---|------|--- |---
---|| -||- -- -||- ||---
-||||| |||||||||| |||||-
---||-- |------| --||---
-------- ------ --------
- -|||-|| |--| ||-|||- -
---|| -||- -- -||- ||---
-|||||-||||  ||||-|||||-
-|||||-||||  ||||-|||||-
---|| -||- -- -||- ||---
- -|||-|| |--| ||-|||- -
-------- ------ --------
---||-- |------| --||---
-||||| |||||||||| |||||-
---|| -||- -- -||- ||---
---| ---|------|--- |---
--- ----|------|---- ---
-| |||-||||--||||-||| |-
- -|||-|| |--| ||-|||- -
 |||||||||||||||||||||| 
Phaeze
quelle
Ich war mir nicht sicher, ob die Methode nur akzeptabel war, wenn nicht, lass es mich wissen und ich werde meine Antwort entsprechend anpassen
Phaeze
@ Downgoat Danke für die Bearbeitung, ich war nicht sicher, die richtige Methode, um die # zu entkommen.
Phaeze
Was anscheinend nur in der Vorschau durcheinander gebracht wurde, ist gut zu wissen
Phaeze
Seit String-Implementierungen können IEnumerable<char>Sie einige Bytes einsparen, indem Sie .Reverse()direkt auf den String .ToCharArray()
klicken und
Sie können auch zu wechseln var a = new[] { '-', ' ', '|' };, var a = "- |"; weil Sie die Indizierung für Zeichenfolgen verwenden können
grabthefish
2

CJam, 20 Bytes

l_W%+_ff{-g" |―"=}N*

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.

Martin Ender
quelle
2

Clojure, 171 Bytes

(fn[w](let[f concat r reverse p(map #(f %(r %))(partition(count w)(for[x w y w :let[c(compare x y)]](if(neg? c)\-(if(pos? c)\|\ )))))](run! #(apply println %)(f p(r p)))))

ungolfed:

(fn [w]
  (let [n (count w)
        a (for [x w y w
                :let [c (compare x y)]]
            (if (neg? c)
              \-
              (if (pos? c)
                \|
                \ )))
        p (map #(concat % (reverse %))(partition n a))
        p (concat p (reverse p))]
    (run! #(apply println %) p))))
Kennzeichen
quelle
2

J, 75-70 Bytes

5 Bytes gespart dank Dennis.

3 :'(],.|:@|.@|:)(],|.)''- |''{~]([:-.@*(,~@#$])-(,~@#$(##])@]))3 u:y'

Ich werde später daran arbeiten, es in ein implizites Verb umzuwandeln.

Conor O'Brien
quelle
2

Oktave, 39 Bytes

@(x)'| -'(sign([x,y=flip(x)]-[x y]')+2)

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 zugewiesen y, um die Antwort zu verkürzen [x, y = flip(x)]. Wir haben dann einen Spaltenvektor der gleichen Sache schaffen durch die Kombination xund yund 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 verwenden signentweder -1, 0oder 1und addieren 2, um gültige 1-basierte Indexwerte zu erhalten. Wir verwenden diese dann, um in die Anfangszeichenfolge zu indizieren '| -'.

Suever
quelle
2

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:

f(s)=join([join([r>c?'|':r<c?'―':' 'for c=s])for r=s*=reverse(s)],"
")

Probieren Sie es online!

Ungolfed:

function wordenticon(word::AbstractString)
    word*=reverse(word)
    join([
        join([
            if r>c
                '|'
            elseif r<c
                '―'
            else
                ' '
            end
            for c in word
        ])
        for r in word]
        ,"\n"
    )
end

Ich denke, es könnte wahrscheinlich kürzer gemacht werden. Dieser Code speichert die Zeichen des Wortsymbols in einer Matrix:

f(s)=[r>c?'|':r<c?'―':' 'for r=s*=reverse(s),c=s]

Leider konnte ich mit der Matrix nicht die gewünschte Ausgabe erzeugen.

Tim B.
quelle
Hallo und willkommen bei PPCG! Danke für den Beitritt zu uns!
NoOneIsHere
1

Jolf, 42 Bytes

Kaum Golf gespielt. Ich vergesse wahrscheinlich eine Matrix, die Jolf eingebaut hat.

ΆΖR~mGiEd+γR~mGiEΨ."| -"hmA-~@ά~@HE_γSSZiζ

Probieren Sie es hier aus! Dieser Code verwendet eine Pfeilfunktion ( Ψ) für die Matrixzuordnung.

Conor O'Brien
quelle
1

Javascript, 303 Bytes

function w(o){function r(o){var r=Array.prototype.slice.call(o).reverse();console.log(o.join("")+r.join(""))}var e,n,c,h=[],s=o.length;for(e=0;s>e;e++){for(h.push([]),n=0;s>n;n++)c=o.charCodeAt(n)-o.charCodeAt(e),0===c?h[e].push(" "):0>c?h[e].push("|"):h[e].push("-");r(h[e])}for(e=s-1;e>=0;e--)r(h[e])}

Ungolfed

function w(s) {
    var arr = [],
        l = s.length, r, c, x;
    for (r = 0; r < l; r++) {
        arr.push([]);
        for (c = 0; c < l; c++) {
            x = s.charCodeAt(c) - s.charCodeAt(r);
            if (0 === x) {
                arr[r].push(' ');
            } else if (x<0) {
                arr[r].push('|');
            } else {
                arr[r].push('-');
            }
        }
        out(arr[r]);
    }
    for (r = l - 1; r>=0; r--) {
        out(arr[r]);
    }
    function out(r){
        var rev = Array.prototype.slice.call(r).reverse();
        console.log(r.join('') + rev.join(''));
    }
}

Keine ecma 2015 Phantasie hier

Chris O'Kelly
quelle
Sie können überprüfen, ob ein Buchstabe in alphabetischer Reihenfolge vorangestellt ist, indem Sie einfach "a" <"b"
Bálint
Sie müssen sich nicht darum kümmern var x = 1, tun Sie es einfach x = 1. Beim Code-Golf kümmert sich niemand um die Einhaltung von Best Practices. :)
Gcampbell
1

Python 2, 126 Bytes

def f(s):x=[''.join(" -|"[cmp(ord(a),ord(b))]for a in s)for b in s];y=[a+b[::-1]for a,b in zip(x,x)];print'\n'.join(y+y[::-1])

Dies ist im Wesentlichen ein Port meiner tatsächlichen Lösung .

Probieren Sie es online aus

Erläuterung:

x=[''.join(" -|"[cmp(ord(a),ord(b))]for a in s)for b in s] # get the correct character for each pair of characters in the Cartesian product of s with itself, and concatenate the characters in each line
y=[a+b[::-1]for a,b in zip(x,x)] # mirror each line horizontally
print'\n'.join(y+y[::-1]) # mirror vertically and print
Mego
quelle
1

Python 3.5, 250 223 175 Bytes:

def H(o):O=ord;G=len(o);p=[[' ―'[O(i)<O(g)],'|'][O(i)>O(g)]for i in o for g in o];u='\n'.join([''.join(p[i:G+i]+p[i:G+i][::-1])for i in range(0,len(p),G)]);print(u+'\n'+u[::-1])

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:

def H(o):
    O=ord
    G=len(o)
    p=[[' ―'[O(i)<O(g)],'|'][O(i)>O(g)]for i in o for g in o]
    u='\n'.join([''.join(p[i:G+i]+p[i:G+i][::-1])for i in range(0,len(p),G)])
    print(u+'\n'+u[::-1])
  1. p=[[' ―'[O(i)<O(g)],'|'][O(i)>O(g)]for i in o for g in o]

    Erstellen Sie eine Liste, pin 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.

  2. u='\n'.join([''.join(p[i:G+i]+p[i:G+i][::-1])for i in range(0,len(p),G)])

    Erstellen Sie uaus der Liste eine verbundene Newline-Zeichenfolge, pindem 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:

     ――||―― 
    |  ||  |
    |  ||  |
    ―――  ―――
    
  3. print(u+'\n'+u[::-1])

    Schließlich ufolgt die Ausgabe einer neuen Zeile und wird uumgekehrt, um die erste Hälfte für die zweite Hälfte vertikal zu spiegeln. Dies ist Ihr fertiges Wordenticon, das für den Testfall foodendlich lauten würde:

     ――||―― 
    |  ||  |
    |  ||  |
    ―――  ―――
    ―――  ―――
    |  ||  |
    |  ||  |
     ――||―― 
    
R. Kap
quelle
0

R 101 Bytes

101 Bytes seit ich benutze (was ich denke sieht besser aus als -).

function(s)write(c("|"," ","―")[sign(outer(g<-c(r<-utf8ToInt(s),rev(r)),g,"-"))+2],"",2*nchar(s),,"")

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:

function(s){
 r <- utf8ToInt(s)               # turn to vector of ints (charcodes)
 g <- c(r, rev(r))               # concatenate r and its reverse
 idx <- sign(outer(g,g,"-")) + 2 # compute all differences and their signs.
                                 # -1=>less than, 0=>equal, +1=>greater than
                                 # add 2 to make them 1-based indices into the vector
 write(c("|"," ","―")[idx],"",2*nchar(s),,"")
     # write the vector of characters to stdout "" with line width 2*nchar(s)
     # and no separator
}
Giuseppe
quelle
0

C (gcc) , 202 Bytes

f(c,i,j,s,t,a,v)char*c,*v;{v=malloc((a=strlen(c)*2)*a);for(j=0;t=c[j];j++)for(i=0;s=c[i];i++)v[j*a+i]=v[j*a+a+~i]=v[a*(a+~j)+i]=v[a*(a+~j)+a+~i]="- |"[(s<t)-(s>t)+1];for(;*v;v+=a)write(1,v,a),puts("");}

Probieren Sie es online!

Arbeiten Sie, indem Sie die einzelnen Zeichen durchlaufen und anschließend das resultierende Zeichen (und dessen Reflexionen) aktualisieren.

Conor O'Brien
quelle
0

05AB1E (Vermächtnis) , 20 22 21 Byte

Ǹ˜ãε… |-s`.Sè}sgôJ∞∊

+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:

Ç             # Push the unicode values of the characters of the (implicit) input-string
 ¸˜           # Wrap this into a list and flatten (workaround for single-char inputs,
              #  since `Ç` will then result in a single value instead of a list of values..)
   ã          # Create each possible pair
ε             # Map each pair to:
  |-         #  Push string " |-" (note: `… |―` cannot be used here, since it will
              #   incorrectly act as a dictionary string)
 s            #  Swap to take the current map-pair
  `           #  Push both values seperated to the stack
   .S         #  Compare them with each other (-1 if a<b; 0 if a==b; 1 if a>b)
 è            #  Use it to index into the string " |―" (-1 will wraparound to the tail)
      }s      # After the map: swap to get the (implicit) input-string again
        gô    # Get its length, and split the mapped list into parts of that size
          J   # Join each character in the inner lists together to a string
           ∞∊ # Mirror both horizontally and vertically (which implicitly joins by newlines
              #  in the legacy version of 05AB1E)
              # (and output the result implicitly)
Kevin Cruijssen
quelle