Hasilkan Wordenticons


54

Identikon adalah penggambaran visual dari nilai hash, sering kali dibuat dari pengaturan simetris bentuk geometris. Avatar Stack Exchange default Anda adalah sebuah identitas. Tantangan ini adalah tentang membuat "wordenticons" , versi sederhana dari identicons berbasis teks yang berlaku untuk string huruf kecil, yaitu kata-kata.

Tantangan

Tulis sebuah program atau fungsi yang mengambil string S dan mengeluarkan kata-katanya. S dijamin tidak kosong dan hanya berisi huruf kecil huruf Inggris az. Anda dapat mengasumsikan S memiliki baris tambahan.

Wordenticon S akan berupa kisi-kisi teks persegi panjang dengan panjang sisi yang 2*length(S)terdiri dari spasi ( ), bilah vertikal, ( |), dan bilah horizontal ( ).

Untuk menghasilkan wordenticon S, bentuk kotak persegi di mana setiap kolom berhubungan dengan huruf S (dalam urutan pembacaan kiri-ke-kanan normal) dan setiap baris berhubungan dengan huruf S (dalam urutan pembacaan normal dari atas ke bawah) ).

Sebagai contoh, jika S adalah foodgrid awal kita terlihat seperti

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

di mana .hanya tempat penampung.

Untuk setiap titik kosong (setiap .) di kisi:

  1. Jika huruf kolom muncul sebelum huruf baris sesuai abjad, ganti .dengan |.
  2. Jika huruf kolom muncul setelah huruf baris secara alfabet, ganti .dengan .
  3. Jika kolom dan huruf baris sama, ganti .dengan (spasi).

Berikut adalah foodcontoh setelah masing-masing langkah ini:

  1. Menambahkan |:

     food
    f...|
    o|..|
    o|..|
    d....
    
  2. Menambahkan :

     food
    f.――|
    o|..|
    o|..|
    d―――.
    
  3. Menambahkan :

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

Untuk menyelesaikan wordenticon, hapus baris dan kolom berlebihan yang berisi kata-kata

 ――|
|  |
|  |
――― 

lalu cermin semuanya secara horizontal

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

dan akhirnya cermin lagi secara vertikal

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

menghasilkan 2*length(S)kotak teks panjang sisi yang merupakan wordenticon akhir.

Contohnya

Berikut adalah beberapa contoh wordenticon tambahan. Perhatikan bahwa kata-kata yang berbeda dapat memiliki wordenticons yang identik dan beberapa wordenticons dapat sepenuhnya dibuat dari spasi (sayangnya markdown tidak ingin menerjemahkannya).

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

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

Mencetak gol

Ini adalah , kode terpendek dalam byte yang menang. Tiebreaker melanjutkan ke jawaban sebelumnya.

Catatan

  • Contoh bilah horizontal ( ) dalam kode Anda dapat dihitung sebagai 1 byte, bukan 3 byte UTF-8 yang sebenarnya diperlukan. (Hingga sepuluh contoh.)
  • Jika diinginkan, Anda dapat menggunakan tanda hubung biasa ( -) sebagai ganti bilah horizontal ( ).
  • Menghapus atau menambahkan spasi tambahan di garis kata kunci tidak diizinkan (bahkan jika bentuknya tidak berubah). Ini harus berupa 2*length(S)persegi panjang sisi teks yang tepat .
  • Output wordenticon secara opsional dapat memiliki satu baris tambahan.

Bisakah kita mengambil input sebagai array karakter?
Downgoat

@Downgoat Tidak, itu harus berupa string normal kecuali sama sekali tidak ada cara lain untuk bahasa Anda.
Calvin Hobbies

2
Anda punya contoh programming, anddan codegolftetapi Anda lupa puzzles...
Neil

Bisakah Anda menambahkan leaderboard?
Leaky Nun

Jadi kami akhirnya mengetahui mengapa Anda bertanya tentang portmanteaus dalam obrolan :)
gcampbell

Jawaban:


21

MATL, 20 15 byte

'-| 'jtPht!-ZS)

Cobalah di MATL Online

Penjelasan

'-| '       % 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, kamu mengalahkan Dennis!
Downgoat

@Downgoat Ini adalah salah satu kesempatan langka yang MATL lebih pendek dari Jelly!
Suever

Ide bagus untuk menggunakan fungsi tanda!
Luis Mendo

18

Java, 329 305 264 259 192 byte

Terimakasih untuk:

  • @ Bálint karena menyarankan untuk menggunakan operator ternary.
  • @ user902383 untuk menyarankan untuk membalikkan string sendiri
  • @Frozn dan @ user902383 karena menyarankan untuk mengganti StringBuilderdengan String.

Golf:

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

Tidak Disatukan:

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

Pasti yang menyenangkan. Upaya pertama adalah fungsi yang O(n)akhirnya diganti dengan bentuk yang lebih sederhana ini setelah saya terlalu frustrasi.

Dan, untuk menguji:

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

2
Selamat Datang di Programming Puzzles & Code Golf! Ini jawaban pertama yang sangat bagus. :)
Alex A.

1
Perhatikan bahwa Anda tidak harus menggunakan \u2015. Menggunakan bilah horizontal (atau cukup dash) dalam kode mentah tidak masalah.
Calvin Hobbies

Saya cukup yakin bahwa jika Anda menggunakan normal, Stringalih-alih StringBuilderjawabannya bisa jauh lebih pendek ... (walaupun mungkin membutuhkan lebih banyak memori)
Leaky Nun

Anda bisa memenangkan beberapa byte dengan mendeklarasikan semua ints pada baris yang sama:int i,j,l=m.length();for(i=0;i<l;i++){...
Aaron

Saya pikir Anda bisa menghemat banyak jika Anda mengubah loop untuk untuk setiap loop. Anda tidak perlu indeks untuk hal lain selain mendapatkan char.
Frozn

11

Haskell, 93 byte

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

Contoh penggunaan:

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

Cara kerjanya (catatan: (f <*> g) xdidefinisikan sebagai 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

Versi alternatif: fungsi "temukan penggantian" ((("- |"!!).fromEnum).).comparejuga dapat ditulis sebagai a#b|a<b='-'|a>b='|'|1<2=' 'dan dipanggil melalui (#)untuk jumlah byte yang sama.


8

Jelly , 16 byte

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

Cobalah online!

Bagaimana itu bekerja

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?`-`:` `)+`
`)

Menggunakan tanda hubung karena saya biasanya menjalankan shell SpiderMonkey JS pada Windows dan Unicode tidak berfungsi jika saya melakukannya.


Ide cemerlang dengan [...s,s].reverse()+1
Downgoat

5

Pyth, 31 30

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

Test Suite

Sayangnya tidak dapat menjatuhkan Qkarena beberapa bifurcate. Algoritma yang cukup mendasar sejauh ini, hitungan memperlakukan bilah horizontal sebagai 1 byte.


Sialan, 2 detik sebelum saya memposting solusi 31 char saya; P
Maltysen

1
@Maltysen Aku bosan keluar FGITWed;) Ngomong-ngomong aku yakin ini bisa lebih pendek ...
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`
`

sebagian besar kode adalah pantulan / pembalikan


4

J, 26 20 byte

6 byte berkat @Zgarb .

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

Jawaban 26 byte sebelumnya

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

Menggunakan algoritma yang sama dengan jawaban Dennis.

Pemakaian:

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

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

( >>input makna (STDIN), <<output makna (STDOUT))


1
Dengan beberapa restrukturisasi, Anda dapat mencapai 20 byte:' |-'{~3*@-/~@u:[,|.
Zgarb

Itu penggunaan garpu yang bagus ...
Leaky Nun

3

Mathematica, 124 110 104 102 byte

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

Fungsi anonim. Karakter Unicode adalah U + F3C7 untuk \[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`
`

Test suite:

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

Terima kasih untuk @HelkaHomba, karena membantu menghapus setidaknya 50 byte, dan @Downgoat selama 3 byte!


1
Anda biasanya dapat mengganti => {...} dengan => (...) dan mengganti semua titik koma dalam koma waktu itu
Downgoat

Jawaban ini hampir identik dengan jawaban Downgoat, aku bersumpah, aku tidak melihatnya.
Bálint

3

Sebenarnya, 53 byte

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

Sekali lagi, kemampuan pemrosesan string yang buruk adalah kryptonite-nya. Ini masih lebih pendek dari Jawa, jadi saya punya itu untuk saya, yang bagus.

Cobalah online!

Penjelasan:

Kode dapat dipisahkan menjadi 3 bagian berbeda: kode terjemahan, kode pemrosesan, dan kode mirroring. Untuk keterbacaan, saya akan menjelaskan setiap bagian secara terpisah.

Kode terjemahan (dimulai dengan string input s,, pada tumpukan):

;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

Memproses kode (dimulai dengan daftar n**2karakter, sesuai dengan sudut kanan bawah):

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

Kode mirroring (dimulai dengan n**2+nstring -length, dengan periode yang bertindak sebagai baris baru)

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

Masukan melalui STDIN. Cobalah online!

Penjelasan:

Input yang dibacanya dan dicerminkan pada baris pertama. Untuk input abcd, ini meninggalkan dcbaabcdtumpukan. Setiap setengah kemudian dicerminkan untuk memberi abcddcba(baris 2). Kemudian, setiap elemen digandakan dan dibiarkan pada tumpukannya sendiri pada gilirannya (baris 3 dan 4). Setelah proses ini, tumpukan tumpukan terlihat sedikit seperti ini:

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

Untuk setiap tumpukan secara bergantian, nilai baris (bagian bawah tumpukan) dibandingkan dengan nilai kolom (bagian atas tumpukan). Karakter yang sesuai dipilih dari - |dan ditulis ke STDOUT. Nilai kolom kemudian diputar sehingga kolom berikutnya berada di atas tumpukan (baris 6).

Setelah semua kolom dipertimbangkan, nilai baris dibuang, baris baru dicetak, dan nilai kolom dimasukkan ke tumpukan sebelumnya (baris 7), agar proses keluaran dimulai lagi.

The ]perintah, selain bermunculan dari tumpukan tumpukan, mengosongkan stack saat ini jika itu adalah satu-satunya kiri. Kondisi akhir program adalah jika tumpukan kosong, karena semua baris telah diproses (baris 5).


3

C #, 169 150 byte

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

    }

saran golf lebih dihargai


t+=c==k?" ":c>k?"|":"-";harus bekerja. Saya belum banyak bermain C #, tapi sangat mungkin menggunakan forloop reguler lebih pendek.
FryAmTheEggman

Jawaban ini memiliki masalah yang sama dengan jawaban C # asli saya dalam hal keduanya Reverse()dan ToArray()merupakan bagian dari System.Linqpernyataan penggunaan.
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])));

Penjelasan:

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

Uji:

Wordenticons

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

Saya tidak yakin apakah metode hanya dapat diterima, jika tidak beri tahu saya dan saya akan menyesuaikan jawaban saya
Phaeze

@Downgoat terima kasih untuk hasil edit, saya tidak yakin metode yang tepat untuk menghindari #.
Phaeze

Yang tampaknya hanya kacau dalam pratinjau, baik untuk mengetahui
Phaeze

karena string mengimplementasikan IEnumerable<char>Anda dapat menyimpan beberapa byte dengan menggunakan .Reverse()langsung pada string melewatkan.ToCharArray()
grabthefish

Anda juga bisa mengubah var a = new[] { '-', ' ', '|' };ke var a = "- |"; karena Anda dapat menggunakan pengindeksan pada string
grabthefish

2

CJam, 20 byte

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

Uji di sini.

Menggunakan pendekatan yang jelas menghitung produk luar dan menggunakan perbedaan dan sgn untuk menghitung karakter di setiap sel.


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

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 byte

5 byte disimpan berkat Dennis.

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

Saya akan berusaha mengubahnya menjadi kata kerja diam-diam nanti.


2

Oktaf, 39 byte

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

Menciptakan fungsi anonim yang dapat dijalankan menggunakan ans('string').

Demo

Penjelasan

Solusi ini menggabungkan string input ( x) dan menggunakan invers ( flip(x)) [x, flip(x)]. Pembalikan ditugaskan yuntuk mempersingkat jawaban [x, y = flip(x)],. Kami kemudian membuat vektor kolom dari hal yang sama dengan menggabungkan xdan ydan mengambil transpos: [x,y]'. Kemudian kami mengambil perbedaan yang akan disiarkan secara otomatis untuk membuat array perbedaan 2D antara representasi surat ASCII dalam string. Kami menggunakan signuntuk membuat ini baik -1, 0atau 1dan kemudian menambahkan 2untuk mendapatkan nilai indeks berbasis 1 valid. Kami kemudian menggunakan ini untuk mengindeks ke string awal '| -'.


2

Julia, 70 byte

Ini adalah upaya pertama saya di golf kode dan saya belum pernah menggunakan Julia, jadi katakan padaku apa yang Anda pikirkan:

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

Cobalah online!

Tidak Disatukan:

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

Saya pikir itu mungkin bisa dibuat lebih pendek. Kode ini menyimpan karakter dari wordicon dalam matriks:

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

Sayangnya, saya tidak dapat mengatur untuk menghasilkan output yang diinginkan menggunakan matriks.


Halo, dan selamat datang di PPCG! Terima kasih telah bergabung dengan kami!
NoOneIsHere

1

Jolf, 42 byte

Tidak bermain golf. Saya mungkin lupa tentang matriks bawaan yang dimiliki Jolf.

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

Coba di sini! Kode ini menggunakan fungsi panah ( Ψ) untuk peta matriks.


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

Tidak disatukan

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

Tidak ada fantasi 2015 di sini


Anda dapat memeriksa, jika sebuah surat datang sebelumnya dalam huruf, dengan hanya melakukan "a" <"b"
Bálint

Anda tidak perlu repot var x = 1, cukup lakukan x = 1. Dalam kode golf tidak ada yang peduli tentang mengikuti praktik terbaik. :)
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])

Ini pada dasarnya adalah port dari solusi Sebenarnya saya .

Cobalah online

Penjelasan:

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

Cobalah secara Online! (Ideone) (Dua case uji terakhir tidak akan muncul di output karena hanya berupa baris kosong. Program saya sedang memprosesnya, yang menegaskan fakta bahwa ada 10 case input, tetapi hanya 8 output yang muncul.)

Tidak dikumpulkan diikuti oleh Penjelasan:

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]

    Buat daftar,, di pmana a |ditambahkan jika Nilai Titik Unicode huruf kolom kurang dari nilai huruf baris, a ditambahkan jika Nilai Titik Unicode huruf kolom lebih dari nilai huruf baris, atau jika keduanya nilainya sama.

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

    Buat string bergabung dengan baris baru u,, dari daftar pdengan membaginya menjadi segmen string yang bergabung, masing-masing terdiri dari jumlah panjang input karakter baik maju dan mundur, sehingga masing-masing memiliki panjang 2 kali berapa banyak karakter yang ada dalam input. Ini adalah bagian atas dari kata kunci Anda. Jadi, dalam hal input Anda food, ini akan kembali:

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

    Akhirnya, output udiikuti oleh baris baru dan kemudian udibalik untuk secara vertikal mencerminkan paruh pertama untuk babak kedua. Ini adalah wordenticon lengkap Anda, yang pada foodakhirnya akan menjadi:

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

0

R , 101 byte

101 byte karena saya menggunakan (yang saya pikir terlihat lebih baik daripada -).

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

Cobalah online!

Saya terkejut tidak ada jawaban R sebelumnya karena kita dapat mengeksploitasi simetri dan matriks R untuk mendapatkan jawaban yang cukup kompetitif, meskipun ini menjadi stringmasalah.

Penjelasan Tidak Dikunci:

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

Cobalah online!

Bekerja dengan mengulang-ulang setiap karakter, kemudian memperbarui karakter yang dihasilkan (dan refleksi daripadanya).


0

05AB1E (warisan) , 20 22 21 byte

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

+2 byte sebagai perbaikan bug untuk input char-tunggal ..
-1 byte dengan menggunakan tanda hubung biasa, -bukan , karena kita dapat menggunakan … |-alih-alih "… |―"(karena … |―akan bertindak sebagai string kamus)

Menggunakan versi lama 05AB1E, karena secara implisit bergabung dengan baris baru saat mirroring, yang membutuhkan tambahan eksplisit »dalam versi baru.

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

Ç             # 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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.