Tạo Wordenticons


54

Nhận dạng là mô tả trực quan của các giá trị băm, thường được tạo ra từ sự sắp xếp đối xứng của các hình dạng hình học. Hình đại diện Stack Exchange mặc định của bạn là một định danh. Thách thức này là về việc tạo ra "wordenticons" , các phiên bản nhận dạng dựa trên văn bản đơn giản áp dụng cho chuỗi các chữ cái viết thường, tức là các từ.

Thử thách

Viết chương trình hoặc hàm lấy chuỗi S và xuất wordenticon của nó. S được đảm bảo là không trống và chỉ chứa các ký tự chữ thường tiếng Anh az. Bạn có thể tùy ý giả sử S có một dòng mới.

Từ wordenticon của S sẽ là một lưới văn bản vuông với độ dài cạnh 2*length(S)bao gồm khoảng trắng ( ), thanh dọc, ( |) và thanh ngang ( ).

Để tạo wordenticon của S, tạo thành một ô vuông trong đó mỗi cột tương ứng với một chữ cái S (theo thứ tự đọc từ trái sang phải bình thường) và mỗi hàng tương ứng với một chữ cái S (theo thứ tự đọc từ trên xuống dưới bình thường ).

Ví dụ: nếu S là foodlưới ban đầu của chúng ta trông giống như

 food
f....
o....
o....
d....

nơi .chỉ là một giữ chỗ.

Đối với mọi điểm trống (mọi .) trong lưới:

  1. Nếu chữ cái cột xuất hiện trước chữ cái theo thứ tự bảng chữ cái, hãy thay thế .bằng |.
  2. Nếu chữ cái cột xuất hiện sau chữ cái theo thứ tự bảng chữ cái, hãy thay thế .bằng .
  3. Nếu các chữ cái cột và hàng giống nhau, thay thế .bằng (dấu cách).

Dưới đây là foodví dụ sau mỗi bước sau:

  1. Thêm |:

     food
    f...|
    o|..|
    o|..|
    d....
    
  2. Thêm :

     food
    f.――|
    o|..|
    o|..|
    d―――.
    
  3. Thêm :

     food
    f ――|
    o|  |
    o|  |
    d――― 
    

Để hoàn thành wordenticon, hãy xóa hàng và cột thừa có chứa các từ

 ――|
|  |
|  |
――― 

sau đó phản chiếu toàn bộ sự vật theo chiều ngang

 ――||―― 
|  ||  |
|  ||  |
―――  ―――

và cuối cùng phản chiếu nó một lần nữa theo chiều dọc

 ――||―― 
|  ||  |
|  ||  |
―――  ―――
―――  ―――
|  ||  |
|  ||  |
 ――||―― 

dẫn đến 2*length(S)lưới văn bản có độ dài bên là wordenticon cuối cùng.

Ví dụ

Dưới đây là một số ví dụ wordenticon bổ sung. Lưu ý rằng các từ khác nhau có thể có các từ giống hệt nhau và một số từ có thể được tạo hoàn toàn bằng khoảng trắng (không may là markdown không muốn hiển thị các từ đó).

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

 ―――――――――――――――――――――――― 
| ―――――――――――――――――――――― |
|| ―――――――――――――――――――― ||
||| ―――――――――――――――――― |||
|||| ―――――――――――――――― ||||
||||| ―――――――――――――― |||||
|||||| ―――――――――――― ||||||
||||||| ―――――――――― |||||||
|||||||| ―――――――― ||||||||
||||||||| ―――――― |||||||||
|||||||||| ―――― ||||||||||
||||||||||| ―― |||||||||||
||||||||||||  ||||||||||||
||||||||||||  ||||||||||||
||||||||||| ―― |||||||||||
|||||||||| ―――― ||||||||||
||||||||| ―――――― |||||||||
|||||||| ―――――――― ||||||||
||||||| ―――――――――― |||||||
|||||| ―――――――――――― ||||||
||||| ―――――――――――――― |||||
|||| ―――――――――――――――― ||||
||| ―――――――――――――――――― |||
|| ―――――――――――――――――――― ||
| ―――――――――――――――――――――― |
 ―――――――――――――――――――――――― 

Chấm điểm

Đây là , mã ngắn nhất tính bằng byte thắng. Tiebreaker đi đến câu trả lời trước đó.

Ghi chú

  • Bất kỳ trường hợp nào của thanh ngang ( ) trong mã của bạn có thể được tính là 1 byte thay vì 3 byte UTF-8 mà nó thực sự chiếm. (Tối đa mười trường hợp.)
  • Nếu muốn, bạn có thể sử dụng dấu gạch ngang thông thường ( -) thay cho thanh ngang ( ).
  • Không được phép xóa hoặc thêm dấu cách trong các dòng của wordenticon (ngay cả khi hình dạng không thay đổi). Nó phải là một 2*length(S)hình vuông chính xác chiều dài văn bản.
  • Từ đầu ra có thể tùy chọn có một dòng mới duy nhất.

Chúng ta có thể lấy đầu vào là một mảng các ký tự không?
Hạ cấp

@Downgoat Không, nó phải là một chuỗi bình thường trừ khi hoàn toàn không có cách nào khác cho ngôn ngữ của bạn.
Sở thích của Calvin

2
Bạn đã có ví dụ cho programming, andcodegolfnhưng bạn quên puzzles...
Neil

Bạn có thể thêm một bảng thành tích?
Leaky Nun

Vì vậy, cuối cùng chúng tôi đã tìm ra lý do tại sao bạn hỏi về portmanteaus trong trò chuyện :)
gcampbell

Câu trả lời:


21

MATL, 20 15 byte

'-| 'jtPht!-ZS)

Dùng thử tại MATL Online

Giải trình

'-| '       % 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

9
: O bạn đã vượt qua Dennis!
Hạ cấp

@Downgoat Đây là một trong những dịp hiếm hoi mà MATL ngắn hơn Jelly!
Suever

Ý tưởng tốt để sử dụng chức năng dấu hiệu!
Luis Mendo

18

Java, 329 305 264 259 192 byte

Nhờ vào:

  • @ Bálint cho đề xuất sử dụng toán tử ternary.
  • @ user902383 để đề xuất tự đảo ngược chuỗi
  • @Frozn và @ user902383 để đề xuất thay thế StringBuilderbằng String.

Chơi gôn

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;}

Ung dung:

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;
}

Chắc chắn là một niềm vui. Nỗ lực đầu tiên là một chức năng O(n)nhưng cuối cùng lại bị thay thế bằng hình thức đơn giản hơn này sau khi tôi quá nản lòng.

Và, để kiểm tra:

supercalifragilisticexpialidocious
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
| |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
-- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
--- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
--|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
----- |----|------- ----|---- -------- ----|---- -------|----| -----
------ ---- ------------ ------------------ ------------ ---- ------
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-||-- -|-------||---|--|-|--------|-|--|---||-------|- --||-|---
--|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
------ ---- ------------ ------------------ ------------ ---- ------
---|-||--|-| ------||---|--|-|--------|-|--|---||------ |-|--||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
|-||||||||||||||| |||-||||||||||-||-||||||||||-||| |||||||||||||||-|
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
----- |----|------- ----|---- -------- ----|---- -------|----| -----
--- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
||||||||||||||||||||| |||||||||||||||||||||||| |||||||||||||||||||||
-- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
------ ---- ------------ ------------------ ------------ ---- ------
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
-----||----|-------|----|-- -|--------|- --|----|-------|----||-----
---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
----- |----|------- ----|---- -------- ----|---- -------|----| -----
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
| |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
| |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
----- |----|------- ----|---- -------- ----|---- -------|----| -----
---|-|||||-|||||--|||--||||| || ---- || |||||--|||--|||||-|||||-|---
-----||----|-------|----|-- -|--------|- --|----|-------|----||-----
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
------ ---- ------------ ------------------ ------------ ---- ------
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
-- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
||||||||||||||||||||| |||||||||||||||||||||||| |||||||||||||||||||||
--- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
----- |----|------- ----|---- -------- ----|---- -------|----| -----
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
|-||||||||||||||| |||-||||||||||-||-||||||||||-||| |||||||||||||||-|
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||- 
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-||--|-| ------||---|--|-|--------|-|--|---||------ |-|--||-|---
------ ---- ------------ ------------------ ------------ ---- ------
--|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
---|-||-- -|-------||---|--|-|--------|-|--|---||-------|- --||-|---
---|-||- |-|| - -- ||-- |- |-| ------ |-| -| --|| -- - ||-| -||-|---
---|-|| ||-||| |--|||--|| ||-||------||-|| ||--|||--| |||-|| ||-|---
------ ---- ------------ ------------------ ------------ ---- ------
----- |----|------- ----|---- -------- ----|---- -------|----| -----
--|| ||||| |||||--|||-||||||||||----||||||||||-|||--||||| ||||| ||--
--- -||----|-------| ---|--|-|--------|-|--|--- |-------|----||- ---
-- |-|||||-|||||--|||- |||||||||----||||||||| -|||--|||||-|||||-| --
| |||||||||||||||||||-|||||||||| || ||||||||||-||||||||||||||||||| |
 -|||||||||||||| -|||-||||||||||-  -||||||||||-|||- ||||||||||||||-  

2
Chào mừng bạn đến với Câu đố lập trình & Code Golf! Đây là một câu trả lời đầu tiên rất tốt đẹp. :)
Alex A.

1
Lưu ý rằng bạn không phải sử dụng \u2015. Sử dụng thanh ngang (hoặc đơn giản là dấu gạch ngang) trong mã thô là tốt.
Sở thích của Calvin

Tôi khá chắc chắn rằng nếu bạn sử dụng bình thường Stringthay vì StringBuildercâu trả lời có thể ngắn hơn nhiều ... (mặc dù nó có thể chiếm nhiều bộ nhớ hơn)
Leaky Nun

Bạn có thể giành được một số byte bằng cách khai báo tất cả các ints trên cùng một dòng:int i,j,l=m.length();for(i=0;i<l;i++){...
Aaron

Tôi nghĩ bạn có thể tiết kiệm rất nhiều nếu bạn thay đổi các vòng lặp thành từng vòng. Bạn không cần các chỉ số cho bất cứ điều gì khác ngoài việc lấy char.
Frozn

11

Haskell, 93 byte

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

Ví dụ sử dụng:

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

Cách thức hoạt động (lưu ý: (f <*> g) xđược định nghĩa là 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

Phiên bản thay thế: chức năng "tìm thay thế" ((("- |"!!).fromEnum).).comparecũng có thể được viết a#b|a<b='-'|a>b='|'|1<2=' 'và gọi thông qua (#)cho cùng một số byte.


8

Thạch , 16 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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.

8

JavaScript (ES6), 94 byte

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

Sử dụng dấu gạch ngang vì tôi thường chạy trình bao SpiderMonkey JS trên Windows và Unicode không hoạt động nếu tôi làm điều đó.


Ý tưởng tuyệt vời với [...s,s].reverse()+1
Downgoat

5

Bình thường 31 30

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

Phòng thử nghiệm

Đáng buồn là không thể bỏ Qs vì một số phân nhánh. Thuật toán khá cơ bản cho đến nay, đếm xử lý thanh ngang là 1 byte.


chết tiệt, 2 giây trước khi tôi đăng giải pháp 31 char của mình; P
Maltysen

1
@Maltysen Tôi cảm thấy mệt mỏi khi ra khỏi FGITWed;) Dù sao tôi cũng chắc chắn rằng nó có thể ngắn hơn ...
FryAmTheEggman

5

Haskell, 66 byte

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

4

JavaScript ES6, 138 126 123 byte

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

hầu hết các mã là phản ánh / lật


4

J, 26 20 byte

6 byte nhờ @Zgarb .

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

Câu trả lời 26 byte trước đó

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

Sử dụng thuật toán tương tự như câu trả lời của Dennis.

Sử dụng:

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

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

( >>có nghĩa là đầu vào (STDIN), <<nghĩa là đầu ra (STDOUT))


1
Với một số cấu trúc lại, bạn có thể nhận được tới 20 byte:' |-'{~3*@-/~@u:[,|.
Zgarb

Đó là một cách sử dụng tốt của dĩa ...
Leaky Nun

3

Toán học, 124 110 104 102 byte

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

Chức năng ẩn danh. Ký tự Unicode là U + F3C7 cho \[Transpose].


3

Javascript 146 142 132 130 124 byte

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

Bộ kiểm tra:

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!"));

Cảm ơn @HelkaHomba, vì đã giúp loại bỏ ít nhất 50 byte và @Downgoat trong 3 byte!


1
bạn thường có thể thay thế => {...} bằng => (...) và thay thế tất cả các dấu chấm phẩy trong dấu phẩy thời gian đó
Downgoat

Câu trả lời này gần giống với câu trả lời của Downgoat, tôi thề, tôi đã không nhìn vào câu trả lời của anh ấy.
Bálint

3

Trên thực tế, 53 byte

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

Một lần nữa, khả năng xử lý chuỗi kém của Kryptonite. Nó vẫn ngắn hơn Java, vì vậy tôi có cái đó phù hợp với tôi, thật tuyệt.

Hãy thử trực tuyến!

Giải trình:

Mã có thể được tách thành 3 phần riêng biệt: mã dịch, mã xử lý và mã phản chiếu. Để dễ đọc, tôi sẽ giải thích riêng từng phần.

Mã dịch (bắt đầu bằng chuỗi đầu vào s, trên ngăn xếp):

;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

Mã xử lý (bắt đầu bằng danh sách các n**2ký tự, tương ứng với góc dưới bên phải):

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

Mã phản chiếu (bắt đầu bằng n**2+nchuỗi-chiều dài, với các khoảng thời gian đóng vai trò là dòng mới)

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

3

> <> , 109 byte

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

Đầu vào là thông qua STDIN. Hãy thử trực tuyến!

Giải thích:

Đầu vào nó đọc và nhân đôi trên dòng đầu tiên. Đối với đầu vào abcd, điều này để lại dcbaabcdtrên ngăn xếp. Mỗi nửa sau đó được nhân đôi để đưa ra abcddcba(dòng 2). Sau đó, mỗi phần tử được nhân đôi và lần lượt để lại trên ngăn xếp của chính nó (dòng 3 và 4). Sau quá trình này, chồng các ngăn xếp trông giống như thế này:

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

Đối với mỗi ngăn xếp lần lượt, giá trị hàng (dưới cùng của ngăn xếp) được so sánh với giá trị cột (đỉnh của ngăn xếp). Ký tự phù hợp được chọn từ - |và được viết thành STDOUT. Các giá trị cột sau đó được xoay để cột tiếp theo nằm ở đầu ngăn xếp (dòng 6).

Khi tất cả các cột đã được xem xét, giá trị hàng sẽ bị loại bỏ, một dòng mới được in và các giá trị cột được đặt vào ngăn xếp trước đó (dòng 7), để quá trình đầu ra bắt đầu lại.

Các ]lệnh, ngoài popping từ đống đống, đổ chồng hiện tại nếu nó là duy nhất còn lại. Điều kiện kết thúc của chương trình là nếu ngăn xếp trống, vì tất cả các hàng đã được xử lý (dòng 5).


3

C #, 169 150 byte

cảm ơn 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);}

vô dụng:

    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);
        }

    }

thêm lời khuyên chơi golf đánh giá cao


t+=c==k?" ":c>k?"|":"-";nên làm việc. Tôi chưa chơi gôn C # nhiều, nhưng hoàn toàn có thể sử dụng các forvòng lặp thông thường sẽ ngắn hơn.
FryAmTheEggman

Câu trả lời này có cùng một vấn đề mà câu trả lời C # ban đầu của tôi đã làm trong đó cả hai Reverse()ToArray()là một phần của System.Linqcâu lệnh sử dụng là bắt buộc.
Phaeze

3

C # 166 143 byte,

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])));

Giải trình:

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]
)));

Kiểm tra:

Wordenticons

 |||||||||||||||||||||| 
- -|||-|| |--| ||-|||- -
-| |||-||||--||||-||| |-
--- ----|------|---- ---
---| ---|------|--- |---
---|| -||- -- -||- ||---
-||||| |||||||||| |||||-
---||-- |------| --||---
-------- ------ --------
- -|||-|| |--| ||-|||- -
---|| -||- -- -||- ||---
-|||||-||||  ||||-|||||-
-|||||-||||  ||||-|||||-
---|| -||- -- -||- ||---
- -|||-|| |--| ||-|||- -
-------- ------ --------
---||-- |------| --||---
-||||| |||||||||| |||||-
---|| -||- -- -||- ||---
---| ---|------|--- |---
--- ----|------|---- ---
-| |||-||||--||||-||| |-
- -|||-|| |--| ||-|||- -
 |||||||||||||||||||||| 

Tôi không chắc liệu phương pháp đó có được chấp nhận hay không, nếu không cho tôi biết và tôi sẽ điều chỉnh câu trả lời của mình cho phù hợp
Phaeze

@Downgoat cảm ơn bạn đã chỉnh sửa, tôi không chắc phương pháp thích hợp để thoát #.
Phaeze

Mà dường như chỉ bị rối trong bản xem trước, điều tốt cần biết
Phaeze

kể từ khi chuỗi thực hiện, IEnumerable<char>bạn có thể lưu một số byte bằng cách sử dụng .Reverse()trực tiếp trên chuỗi bỏ qua.ToCharArray()
lấy từ

bạn cũng có thể thay đổi var a = new[] { '-', ' ', '|' };để var a = "- |"; vì bạn có thể sử dụng lập chỉ mục trên dây
grabthefish

2

CJam, 20 byte

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

Kiểm tra nó ở đây.

Sử dụng cách tiếp cận rõ ràng của việc tính toán một sản phẩm bên ngoài và sử dụng sự khác biệt và sgn để tính toán ký tự trong mỗi ô.


2

Clojure, 171 byte

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

vô dụng:

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

2

J, 75 70 byte

5 byte được lưu nhờ Dennis.

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

Tôi sẽ làm việc để chuyển đổi nó thành một động từ ngầm sau này.


2

Octave, 39 byte

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

Tạo một chức năng ẩn danh có thể được chạy bằng cách sử dụng ans('string').

Bản giới thiệu

Giải trình

Giải pháp này kết hợp chuỗi đầu vào ( x) và flip(x)sử dụng nghịch đảo ( ) [x, flip(x)]. Nghịch đảo được chỉ định yđể rút ngắn câu trả lời , [x, y = flip(x)]. Sau đó chúng tôi tạo ra một vector cột của điều tương tự bằng cách kết hợp xyvà lấy transpose: [x,y]'. Sau đó, chúng tôi lấy sự khác biệt sẽ tự động phát để tạo ra một mảng 2D khác biệt giữa bất kỳ biểu diễn ASCII nào của các chữ cái trong chuỗi. Chúng tôi sử dụng signđể thực hiện những một trong hai -1, 0hoặc 1và sau đó thêm 2để có được giá trị chỉ số 1 dựa trên hợp lệ. Sau đó chúng tôi sử dụng chúng để lập chỉ mục vào chuỗi ban đầu '| -'.


2

Julia, 70 byte

Đây là nỗ lực đầu tiên của tôi tại môn đánh gôn và tôi chưa từng sử dụng Julia trước đây, vì vậy hãy nói cho tôi biết bạn nghĩ gì:

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

Hãy thử trực tuyến!

Ung dung:

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

Tôi nghĩ rằng nó có thể được thực hiện ngắn hơn. Mã này lưu trữ các ký tự của wordicon trong một ma trận:

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

Thật không may, tôi không thể quản lý để tạo ra đầu ra mong muốn bằng cách sử dụng ma trận.


Xin chào, và chào mừng đến với PPCG! Cảm ơn đã tham gia cùng chúng tôi!
NoOneIsHãy

1

Jolf, 42 byte

Khó chơi golf. Có lẽ tôi đã quên mất một ma trận dựng sẵn mà Jolf có.

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

Hãy thử nó ở đây! Mã này sử dụng hàm mũi tên ( Ψ) cho bản đồ ma trận.


1

Javascript, 303 byte

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])}

Ung dung

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(''));
    }
}

Không có ecma 2015 fanciness ở đây


Bạn có thể kiểm tra, nếu một chữ cái xuất hiện trước trong bảng chữ cái, chỉ bằng cách thực hiện "a" <"b"
Bálint

Bạn không cần phải bận tâm var x = 1, chỉ cần làm x = 1. Trong mã golf, không ai quan tâm đến việc tuân thủ các thực hành tốt nhất. :)
gcampbell

1

Python 2, 126 byte

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

Đây thực chất là một cổng của giải pháp Thực tế của tôi .

Dùng thử trực tuyến

Giải trình:

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

1

Python 3.5, 250 223 175 byte:

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

Dùng thử trực tuyến! (Ý) (Hai trường hợp thử nghiệm cuối cùng sẽ không hiển thị ở đầu ra vì chúng chỉ là các dòng trống. Chương trình của tôi đang xử lý chúng, điều này được xác nhận rằng có 10 trường hợp đầu vào, nhưng chỉ có 8 đầu ra xuất hiện.)

Ungolfed theo sau là một Giải thích:

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]

    Tạo một danh sách, ptrong đó a |được thêm nếu Giá trị điểm Unicode của chữ cái cột nhỏ hơn giá trị của chữ cái hàng, a được thêm vào nếu Giá trị điểm Unicode của chữ cái cột nhiều hơn giá trị của chữ cái hàng hoặc cả hai các giá trị bằng nhau.

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

    Tạo một chuỗi kết nối dòng mới u, từ danh sách pbằng cách chia chuỗi thành các chuỗi chuỗi đã nối, mỗi chuỗi bao gồm số ký tự có độ dài đầu vào cả trước và sau, dẫn đến mỗi chuỗi có độ dài gấp 2 lần số lượng ký tự có trong đầu vào. Đây là nửa trên của wordenticon của bạn. Vì vậy, trong trường hợp đầu vào của bạn food, điều này sẽ trả về:

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

    Cuối cùng, đầu ra utheo sau là một dòng mới và sau đó uđảo ngược để phản chiếu theo chiều dọc nửa đầu cho nửa thứ hai. Đây là wordenticon hoàn thành của bạn, mà đối với trường hợp thử nghiệm foodcuối cùng sẽ là:

     ――||―― 
    |  ||  |
    |  ||  |
    ―――  ―――
    ―――  ―――
    |  ||  |
    |  ||  |
     ――||―― 
    

0

R , 101 byte

101 byte kể từ khi tôi đang sử dụng (mà tôi nghĩ có vẻ tốt hơn -).

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

Hãy thử trực tuyến!

Tôi đã rất ngạc nhiên khi không có câu trả lời R trước đây vì chúng ta có thể khai thác ma trận đối xứng và ma trận của R để có được câu trả lời khá cạnh tranh, mặc dù đây là một stringvấn đề.

Giải thích bất đắc dĩ:

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
}

0

C (gcc) , 202 byte

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("");}

Hãy thử trực tuyến!

Hoạt động bằng cách lặp qua từng ký tự, sau đó cập nhật ký tự kết quả (và các phản xạ của chúng).


0

05AB1E (di sản) , 20 22 21 byte

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

+2 byte dưới dạng sửa lỗi cho các đầu vào char đơn ..
-1 byte bằng cách sử dụng dấu gạch ngang thông thường -thay vì , vì sau đó chúng ta có thể sử dụng … |-thay vì "… |―"(kể từ… |― sẽ hoạt động không chính xác như một chuỗi từ điển)

Sử dụng phiên bản kế thừa của 05AB1E, vì nó hoàn toàn tham gia bởi các dòng mới khi phản chiếu, đòi hỏi một sự rõ ràng bổ sung »trong phiên bản mới.

Dùng thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

Ç             # 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.