สร้าง Wordenticons


54

Identiconsเป็นภาพที่แสดงให้เห็นถึงค่าแฮชซึ่งมักทำจากการจัดสมมาตรของรูปทรงเรขาคณิต สแต็กการแลกเปลี่ยนสแต็กเริ่มต้นของคุณคือตัวระบุ ความท้าทายนี้เกี่ยวกับการสร้าง"wordenticons"ซึ่งเป็นตัวอักษรเวอร์ชันพื้นฐานที่ใช้ข้อความง่าย ๆ ที่ใช้กับสตริงของตัวอักษรตัวพิมพ์เล็กเช่นคำต่างๆ

ท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่รับสตริง S และส่งออก wordenticon S รับประกันว่าจะไม่มีข้อยกเว้นและมีตัวอักษรภาษาอังกฤษตัวพิมพ์เล็กเท่านั้น az คุณอาจเลือกที่จะสมมติว่า S มีการขึ้นบรรทัดใหม่

wordenticon ของ S จะเป็นตารางสี่เหลี่ยมของข้อความที่มีความยาวด้านข้าง2*length(S)ประกอบด้วยช่องว่าง ( ) แถบแนวตั้ง ( |) และแถบแนวนอน ( )

ในการสร้าง wordenticon ของ S ให้สร้างตารางสี่เหลี่ยมที่ทุกคอลัมน์สอดคล้องกับตัวอักษร S (ตามลำดับการอ่านจากซ้ายไปขวาตามปกติ) และทุกแถวสอดคล้องกับตัวอักษร S (ตามลำดับการอ่านจากบนลงล่างถึงล่างปกติ )

ตัวอย่างเช่นถ้า S เป็นfoodกริดเริ่มต้นของเราดูเหมือน

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

ที่.เป็นเพียงตัวยึดตำแหน่ง

สำหรับจุดที่ว่างเปล่า (ทุกจุด.) ในตาราง:

  1. ถ้าตัวอักษรคอลัมน์มาก่อนตัวอักษรแถวตามลำดับตัวอักษรแทนที่ด้วย.|
  2. ถ้าตัวอักษรคอลัมน์มาหลังจากที่ตัวอักษรแถวตามลำดับตัวอักษรแทนที่ด้วย.
  3. หากตัวอักษรคอลัมน์และแถวเหมือนกันให้แทนที่.ด้วย (เว้นวรรค)

นี่คือfoodตัวอย่างหลังจากแต่ละขั้นตอนเหล่านี้:

  1. กำลังเพิ่ม|:

     food
    f...|
    o|..|
    o|..|
    d....
    
  2. กำลังเพิ่ม:

     food
    f.――|
    o|..|
    o|..|
    d―――.
    
  3. กำลังเพิ่ม :

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

ในการกรอกคำให้สมบูรณ์ให้ลบแถวและคอลัมน์ที่มีคำนั้นออก

 ――|
|  |
|  |
――― 

จากนั้นสะท้อนสิ่งทั้งหมดในแนวนอน

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

และในที่สุดก็สะท้อนมันอีกครั้งในแนวตั้ง

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

ส่งผลให้ใน2*length(S)ตารางข้อความความยาวด้านที่เป็น wordenticon สุดท้าย

ตัวอย่าง

นี่คือตัวอย่างของ wordenticon เพิ่มเติม โปรดทราบว่าคำต่าง ๆ สามารถมี wordenticons ที่เหมือนกันและบาง wordenticons สามารถทำขึ้นอย่างสมบูรณ์ของช่องว่าง (น่าเสียดายที่ markdown ไม่ต้องการที่จะแสดงผลเหล่านั้น)

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

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

เกณฑ์การให้คะแนน

นี่คือซึ่งเป็นรหัสที่สั้นที่สุดในหน่วยไบต์ Tiebreaker ไปที่คำตอบก่อนหน้า

หมายเหตุ

  • อินสแตนซ์ใด ๆ ของแถบแนวนอน ( ) ในรหัสของคุณอาจนับเป็น 1 ไบต์แทน 3 UTF-8 ไบต์ที่ใช้จริง (มากถึงสิบอินสแตนซ์)
  • หากต้องการคุณสามารถใช้เครื่องหมายขีดกลาง ( -) แทนแถบแนวนอน ( )
  • ไม่อนุญาตการลบหรือเพิ่มช่องว่างต่อท้ายในบรรทัดของ wordenticon (แม้ว่ารูปร่างจะยังคงไม่เปลี่ยนแปลง) ควรเป็น2*length(S)สี่เหลี่ยมข้อความที่มีความยาวด้านที่แน่นอน
  • wordenticon เอาต์พุตอาจเป็นทางเลือกที่มีบรรทัดใหม่ต่อท้ายเดี่ยว

เราสามารถรับอินพุตเป็นอาร์เรย์ของตัวละครได้หรือไม่?
Downgoat

@Downgoat ไม่ควรเป็นสตริงปกติยกเว้นว่าไม่มีวิธีอื่นในภาษาของคุณ
งานอดิเรกของ Calvin

2
คุณได้มีตัวอย่างสำหรับprogramming, andและcodegolfแต่คุณลืมpuzzles...
นีล

คุณสามารถเพิ่มกระดานผู้นำได้หรือไม่
Leun Nun

ในที่สุดเราก็หาคำตอบว่าทำไมคุณถึงถามถึง
Portmanteaus

คำตอบ:


21

MATL, 20 15 ไบต์

'-| 'jtPht!-ZS)

ลองใช้ที่MATL Online

คำอธิบาย

'-| '       % 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
: โอ้คุณเก่งกว่าเดนนิส!
Downgoat

@Downgoat นี่เป็นหนึ่งในโอกาสที่หายากที่ MATL นั้นสั้นกว่า Jelly!
Suever

ความคิดที่ดีที่จะใช้ฟังก์ชั่นสัญญาณ!
Luis Mendo

18

Java, 329 305 264 259 192 ไบต์

ขอบคุณที่:

  • @ Bálintสำหรับการแนะนำให้ใช้ผู้ประกอบการที่ประกอบไปด้วย
  • @ user902383 สำหรับการแนะนำให้ย้อนกลับสตริงตัวเอง
  • @Frozn และ @ user902383 สำหรับการแนะนำเพื่อแทนที่ด้วยStringBuilderString

แข็งแรงเล่นกอล์ฟ:

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

สนุกอย่างแน่นอน ความพยายามครั้งแรกคือฟังก์ชั่นที่O(n)แต่จบลงด้วยการถูกแทนที่ด้วยแบบฟอร์มที่ง่ายกว่านี้หลังจากที่ฉันผิดหวังมากเกินไป

และเพื่อทดสอบ:

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

2
ยินดีต้อนรับสู่ Programming Puzzles & Code Golf! นี่เป็นคำตอบแรกที่ดีมาก :)
Alex A.

1
\u2015โปรดทราบว่าคุณไม่จำเป็นต้องใช้ ใช้แถบแนวนอน (หรือเพียงแค่เส้นประ) ในรหัสดิบเป็นเรื่องปกติ
งานอดิเรกของ Calvin

ผมค่อนข้างมั่นใจว่าถ้าคุณใช้ปกติStringแทนStringBuilderคำตอบอาจจะสั้นมาก ... (แม้ว่ามันอาจจะขึ้นเป็นจำนวนมากหน่วยความจำเพิ่มเติม)
รั่วนูน

คุณสามารถชนะ bytes บางโดยการประกาศทั้งหมดintในบรรทัดเดียวกัน:int i,j,l=m.length();for(i=0;i<l;i++){...
Aaron

ฉันคิดว่าคุณสามารถประหยัดได้มากถ้าคุณเปลี่ยนการวนรอบเป็นการวนซ้ำแต่ละครั้ง คุณไม่ต้องการดัชนีสำหรับสิ่งอื่นนอกจากรับถ่าน
Frozn

11

Haskell, 93 ไบต์

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

ตัวอย่างการใช้งาน:

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

มันทำงานอย่างไร (หมายเหตุ: (f <*> g) xหมายถึง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

รุ่นทางเลือก: ฟังก์ชัน "ค้นหาการแทนที่" ((("- |"!!).fromEnum).).compareยังสามารถเขียนเป็นa#b|a<b='-'|a>b='|'|1<2=' 'และเรียกผ่าน(#)สำหรับจำนวนไบต์เดียวกัน


8

เยลลี่ขนาด 16 ไบต์

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

ลองออนไลน์!

มันทำงานอย่างไร

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 ไบต์

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

การใช้เส้นประเพราะฉันมักจะเรียกใช้ SpiderMonkey JS เชลล์บน Windows และ Unicode ไม่ทำงานถ้าฉันทำเช่นนั้น


ความคิดที่ยอดเยี่ยมด้วย[...s,s].reverse()+1
Downgoat

5

Pyth, วันที่ 31 30

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

ชุดทดสอบ

น่าเศร้าที่หยดไม่ได้Qเพราะมีแฉกหลายอัน อัลกอริทึมพื้นฐานที่น่ารักจนถึงปัจจุบันนับถือว่าแถบแนวนอนเป็น 1 ไบต์


ก่อนหน้านี้มัน 2 วินาทีก่อนที่ฉันจะโพสต์คำตอบของฉัน 31 char; P
Maltysen

1
@Maltysen ผมเบื่อการออก FGITWed;) อย่างไรก็ตามผมมั่นใจว่ามันสามารถจะสั้น ...
FryAmTheEggman


4

JavaScript ES6, 138 126 123 ไบต์

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

ส่วนใหญ่ของรหัสคือการสะท้อน / พลิก


4

J, 26 20 ไบต์

6 ไบต์ขอบคุณที่@Zgarb

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

คำตอบขนาด 26 ไบต์ก่อนหน้า

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

ใช้อัลกอริทึมเดียวกับคำตอบของเดนนิส

การใช้งาน:

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

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

( >>หมายถึงอินพุต (STDIN), <<หมายถึงเอาต์พุต (STDOUT))


1
ด้วยการปรับโครงสร้างบางอย่างคุณสามารถรับได้ถึง 20 ไบต์:' |-'{~3*@-/~@u:[,|.
Zgarb

นั่นคือการใช้งานที่ดีของงา ...
รั่วนูน

3

Mathematica, 124 110 104 102 ไบต์

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

ฟังก์ชั่นไม่ระบุชื่อ อักขระ Unicode เป็น U + F3C7 \[Transpose]สำหรับ


3

Javascript 146 142 132 130 124 ไบต์

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

ชุดทดสอบ:

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

ขอบคุณสำหรับ @HelkaHomba ที่ช่วยในการลบอย่างน้อย 50 ไบต์และ @Downgoat เป็นเวลา 3 ไบต์!


1
โดยปกติคุณสามารถแทนที่ => {... } ด้วย => (... ) และแทนที่เครื่องหมายอัฒภาคทั้งหมดภายในเครื่องหมายจุลภาคในเวลานั้น
Downgoat

คำตอบนี้เกือบจะเหมือนกับของ Downgoat ฉันสาบานฉันไม่ได้ดูเขาเลย
Bálint

3

ที่จริงแล้ว 53 ไบต์

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

อีกครั้งความสามารถในการประมวลผลสตริงที่แย่จริง ๆ แล้วคือ kryptonite มันยังสั้นกว่าชวาดังนั้นฉันมีสิ่งนั้นเพื่อฉันซึ่งเป็นสิ่งที่ดี

ลองออนไลน์!

คำอธิบาย:

รหัสสามารถแบ่งออกเป็น 3 ส่วนที่ต่างกัน: รหัสการแปลรหัสการประมวลผลและรหัสการมิเรอร์ เพื่อความสะดวกในการอ่านฉันจะอธิบายแต่ละส่วนแยกกัน

รหัสการแปล (เริ่มต้นด้วยสตริงอินพุตs, บนสแต็ก):

;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

รหัสการประมวลผล (เริ่มต้นด้วยรายชื่อn**2ตัวละครที่สอดคล้องกับมุมล่างขวา):

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

โค้ดการทำมิรเรอร์ (เริ่มต้นด้วยn**2+nสตริง -length โดยมีจุดที่ทำหน้าที่เป็นบรรทัดใหม่)

'.@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 ไบต์

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

อินพุตคือผ่าน STDIN ลองออนไลน์!

ชี้แจง:

อินพุตที่อ่านและมิร์เรอร์บนบรรทัดแรก สำหรับอินพุตabcdสิ่งนี้จะทิ้งdcbaabcdไว้บนสแต็ก แต่ละครึ่งจะถูกมิร์เรอร์ให้abcddcba(บรรทัด 2) จากนั้นแต่ละองค์ประกอบจะทำซ้ำและทิ้งไว้ในสแต็กของตัวเองในทางกลับกัน (บรรทัดที่ 3 และ 4) หลังจากกระบวนการนี้สแต็คของกองมีลักษณะเช่นนี้เล็กน้อย:

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

สำหรับแต่ละสแต็กจะมีการเปรียบเทียบค่าแถว (ด้านล่างของสแต็ก) กับค่าคอลัมน์ (ด้านบนของสแต็ก) เลือกอักขระที่เหมาะสมจาก- |และเขียนไปยัง STDOUT จากนั้นค่าคอลัมน์จะหมุนเพื่อให้คอลัมน์ถัดไปอยู่ที่ด้านบนสุดของสแต็ก (บรรทัด 6)

เมื่อพิจารณาคอลัมน์ทั้งหมดแล้วค่าแถวจะถูกลบทิ้งบรรทัดใหม่ที่พิมพ์และค่าคอลัมน์ที่ใส่ลงในสแต็กก่อนหน้า (บรรทัดที่ 7) เพื่อให้กระบวนการเอาต์พุตเริ่มต้นอีกครั้ง

]คำสั่งที่นอกเหนือไปจาก popping สแต็คของสแต็คที่เทกองในปัจจุบันถ้ามันเป็นเพียงคนเดียวที่เหลือ เงื่อนไขสิ้นสุดของโปรแกรมคือถ้าสแต็กว่างเปล่าเนื่องจากแถวทั้งหมดได้รับการประมวลผล (บรรทัดที่ 5)


3

C #, 169 150 ไบต์

ขอบคุณ 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);
        }

    }

คำแนะนำเพิ่มเติมเกี่ยวกับการเล่นกอล์ฟชื่นชม


t+=c==k?" ":c>k?"|":"-";ควรทำงาน. ฉันไม่ได้เล่นกอล์ฟ C # มาก แต่เป็นไปได้มากที่การใช้forลูปปกติจะสั้นกว่า
FryAmTheEggman

คำตอบนี้มีปัญหาเดียวกันกับคำตอบ C # ดั้งเดิมของฉันในทั้งสองReverse()และToArray()เป็นส่วนหนึ่งของSystem.Linqคำสั่งที่ใช้
Phaeze

3

C # 166 143 ไบต์

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

คำอธิบาย:

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

ทดสอบ:

Wordenticons

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

ฉันไม่แน่ใจว่าวิธีการนี้เป็นที่ยอมรับเท่านั้นหรือไม่ถ้าไม่แจ้งให้ฉันทราบและฉันจะปรับคำตอบของฉันตามนั้น
Phaeze

@ Downgoat ขอบคุณสำหรับการแก้ไขฉันไม่แน่ใจว่าวิธีที่เหมาะสมในการหลบหนี #
Phaeze

ซึ่งเห็นได้ชัดว่าสับสนในการแสดงตัวอย่างเท่านั้นรู้ดี
Phaeze

ตั้งแต่สตริงดำเนินการIEnumerable<char>คุณสามารถบันทึกไบต์โดยใช้.Reverse()โดยตรงบนสตริงข้าม.ToCharArray()
grabthefish

คุณสามารถเปลี่ยนvar a = new[] { '-', ' ', '|' };เป็นvar a = "- |"; เพราะคุณสามารถใช้การจัดทำดัชนีในสตริง
grabthefish

2

CJam, 20 ไบต์

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

ทดสอบที่นี่

ใช้วิธีการที่ชัดเจนในการคำนวณผลิตภัณฑ์ด้านนอกและการใช้ความแตกต่างและsgnเพื่อคำนวณอักขระในแต่ละเซลล์


2

Clojure 171 ไบต์

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

2

J, 75 70 ไบต์

บันทึก 5 ไบต์ด้วย Dennis

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

ฉันจะแปลงมันให้เป็นคำกริยาโดยปริยาย


2

อ็อกเทฟ 39 ไบต์

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

สร้างฟังก์ชั่นที่ไม่ระบุชื่อที่สามารถใช้งานans('string')ได้

การสาธิต

คำอธิบาย

การแก้ปัญหานี้รวมสายป้อน ( x) และก็ผกผัน ( flip(x)) [x, flip(x)]โดยใช้ ส่วนกลับถูกกำหนดyให้ย่อคำตอบให้สั้นลง, [x, y = flip(x)]. จากนั้นเราจะสร้างเวกเตอร์คอลัมน์ของสิ่งเดียวกันโดยการรวมxและyและการ transpose [x,y]'นี้: จากนั้นเราก็รับความแตกต่างซึ่งจะออกอากาศโดยอัตโนมัติเพื่อสร้างอาร์เรย์ของความแตกต่างระหว่างการแสดง ASCII ของตัวอักษรในสตริง เราใช้signเพื่อให้เหล่านี้อย่างใดอย่างหนึ่ง-1, 0หรือ1แล้วเพิ่ม2ที่จะได้รับค่าดัชนีความถูกต้อง 1-based '| -'จากนั้นเราจะใช้เหล่านี้เพื่อดัชนีลงในสตริงเริ่มต้น


2

จูเลีย 70 ไบต์

นี่เป็นความพยายามครั้งแรกของฉันที่การตีกอล์ฟและฉันไม่เคยใช้ Julia มาก่อนดังนั้นโปรดบอกฉันว่าคุณคิดอย่างไร:

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

ลองออนไลน์!

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

ฉันคิดว่ามันน่าจะสั้นกว่านี้ รหัสนี้เก็บอักขระของ wordicon ใน matrix:

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

น่าเสียดายที่ฉันไม่สามารถจัดการกับผลลัพธ์ที่ต้องการได้โดยใช้เมทริกซ์


สวัสดีและยินดีต้อนรับสู่ PPCG! ขอบคุณที่ร่วมงานกับเรา!
NoOneIsHere

1

Jolf, 42 ไบต์

ไม่ค่อยเล่นกอล์ฟ ฉันอาจลืมเกี่ยวกับเมทริกซ์ในตัวที่ Jolf มี

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

ลองที่นี่! รหัสนี้ใช้ฟังก์ชั่นลูกศร ( Ψ) สำหรับแมทริกซ์แมป


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

ไม่มี ecma 2015 ความเพ้อฝันที่นี่


คุณสามารถตรวจสอบหากมีจดหมายมาก่อนใน alphahet โดยเพียงแค่การทำ "เป็น" < "B"
Bálint

คุณไม่จำเป็นต้องกังวลกับเพียงแค่ทำvar x = 1 x = 1ในการตีกอล์ฟไม่มีใครสนใจเกี่ยวกับการปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด :)
gcampbell

1

Python 2, 126 ไบต์

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

นี้เป็นหลักพอร์ตของฉันแก้ปัญหาจริง

ลองออนไลน์

คำอธิบาย:

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 ไบต์:

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

ลองออนไลน์! (Ideone) (กรณีทดสอบสองกรณีสุดท้ายจะไม่ปรากฏในเอาต์พุตเนื่องจากเป็นเพียงบรรทัดว่างโปรแกรมของฉันกำลังประมวลผลแม้ว่าจะได้รับการยืนยันความจริงที่ว่ามีอินพุต 10 ราย แต่มีเอาต์พุตเพียง 8 รายการเท่านั้น)

Ungolfed ตามด้วยคำอธิบาย:

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]

    สร้างรายการโดยpที่ a |ถูกเพิ่มถ้าค่า Unicode Point ของตัวอักษรคอลัมน์น้อยกว่าค่าของตัวอักษรแถว a จะถูกเพิ่มหากค่า Unicode Point ของตัวอักษรคอลัมน์นั้นมากกว่าค่าของตัวอักษรแถวหรือถ้าทั้งคู่ ค่าเท่ากัน

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

    สร้างสายอักขระการรวมบรรทัดใหม่uจากรายการpโดยแยกออกเป็นส่วนสตริงที่รวมแต่ละอันประกอบด้วยจำนวนความยาวของอักขระทั้งไปข้างหน้าและข้างหลังทำให้แต่ละอันมีความยาว 2 เท่าของจำนวนอักขระที่มีอยู่ในอินพุต นี่คือครึ่งบนของ wordenticon ของคุณ ดังนั้นในกรณีที่ข้อมูลของคุณถูกต้องfoodสิ่งนี้จะกลับมา:

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

    ในที่สุดผลลัพธ์uตามด้วยบรรทัดขึ้นบรรทัดใหม่จากนั้นuกลับด้านเพื่อสะท้อนครึ่งแรกของแนวตั้งสำหรับครึ่งหลัง นี่คือ wordenticon ที่สมบูรณ์ของคุณซึ่งfoodในที่สุดกรณีทดสอบจะเป็น:

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

0

R , 101 ไบต์

101 ไบต์ตั้งแต่ฉันใช้(ซึ่งฉันคิดว่าดูดีกว่า-)

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

ลองออนไลน์!

ฉันประหลาดใจที่ไม่มีคำตอบ R มาก่อนเนื่องจากเราสามารถใช้ประโยชน์จากสมมาตรและเมทริกซ์ของ R เพื่อรับคำตอบที่ค่อนข้างแข่งขันแม้จะเป็นstringปัญหาก็ตาม

คำอธิบายไม่ดี

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 ไบต์

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

ลองออนไลน์!

ทำงานโดยการวนซ้ำตัวอักขระแต่ละตัวจากนั้นอัปเดตอักขระที่เป็นผลลัพธ์ (และการสะท้อนกลับ)


0

05AB1E (ดั้งเดิม) , 20 22 21 ไบต์

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

+2 ไบต์เป็นตัวแก้ไขข้อผิดพลาดสำหรับอินพุตแบบถ่านเดียว ..
-1 ไบต์โดยใช้เครื่องหมายขีดกลางปกติ-แทนเนื่องจากเราสามารถใช้… |-แทน"… |―"(เนื่องจาก… |―จะทำหน้าที่เป็นสตริงพจนานุกรมอย่างไม่ถูกต้อง)

ใช้เวอร์ชันดั้งเดิมของ 05AB1E เนื่องจากมีการขึ้นบรรทัดใหม่โดยปริยายเมื่อทำการมิเรอร์ซึ่งต้องการการเพิ่มเติมเพิ่มเติม»ในเวอร์ชันใหม่โดยปริยาย

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

Ç             # 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.