Wordenticons üret


54

Eşikler , genellikle geometrik şekillerin simetrik düzenlemelerinden yapılan karma değerlerin görsel tasviridir. Varsayılan Stack Exchange avatarınız bir özdeşliktir. Bu zorluk, " küçük harflerin dizeleri için geçerli olan sözcüklerin basit metin temelli sürümleri olan " wordenticons " kelimelerinin oluşturulmasıdır.

Meydan okuma

S dizesini alan ve wordenticon'unu çıkaran bir program veya işlev yazın. S'nin boş olmadığı garanti edilir ve yalnızca küçük harf İngilizce az karakterleri içerir. İsteğe bağlı olarak S'nin yeni bir hattı olduğunu varsayabilirsiniz.

S kelimesi, yan uzunlukları 2*length(S)boşluk ( ), dikey çubuklar ( |) ve yatay çubuklardan ( ) oluşan kare bir metin ızgarası olacaktır .

S kelimesini oluşturmak için, her sütunun S harfine karşılık gelen (normal soldan sağa okuma sırası) ve her satırın S harfine karşılık gelen (normal yukarıdan aşağıya okuma sırası ile) bir kare ızgara oluşturun. ).

Örneğin, eğer S foodbizim başlangıç ​​ağımıza benziyor

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

.sadece bir yer tutucu nerede .

.Izgaradaki her boş nokta için (her biri ):

  1. Sütun mektup alfabetik sıralı harfinden önce gelirse, değiştirin .ile |.
  2. Sütun mektup alfabetik sıralı harfinden sonra gelirse, değiştirin .ile .
  3. Sütun ve satır harfleri aynıysa, (boşluk) .ile değiştirin .

İşte foodbu adımların her birinin arkasındaki örnek:

  1. Ekleme |:

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

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

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

Wordenticon'u tamamlamak için gereksiz satırı ve kelimeleri içeren sütunu kaldırın.

 ――|
|  |
|  |
――― 

sonra her şeyi yatay olarak yansıtın

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

ve sonunda tekrar dikey olarak yansıtır.

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

2*length(S)final wordenticon olan yan uzunluktaki metin ızgarasıyla sonuçlanır.

Örnekler

İşte bazı wordenticon örnekleri. Farklı kelimelerin aynı kelimelere sahip olabileceğini ve bazı kelimelerin tamamen boşluklardan oluşabileceğini unutmayın (maalesef markdown bunları yapmak istemez).

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

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

puanlama

Bu , bayt cinsinden en kısa kod kazanır. Tiebreaker önceki cevaba gider.

notlar

  • Kodunuzdaki herhangi bir yatay çubuk ( ) örneği, gerçekte aldığı 3 UTF-8 baytı yerine 1 bayt olarak sayılabilir. (On örneğe kadar.)
  • İsterseniz -yatay çubukların ( ) yerine düzenli çizgiler ( ) kullanabilirsiniz .
  • Bir wordenticon satırlarında iz bırakan boşlukların kaldırılması veya eklenmesi yasaktır (şekil değişmeden kalsa bile). Tam 2*length(S)kenar uzunluğu metin karesi olmalıdır.
  • Çıktı wordenticon isteğe bağlı olarak tek bir izleyen yeni hatta olabilir.

Girişi karakter dizisi olarak alabilir miyiz?
Downgoat

@Downgoat Hayır, diliniz için kesinlikle başka bir yol yoksa normal bir dize olmalı.
Calvin'in Hobileri

2
Aşağıdakiler için örnekler var programming, andve codegolffakat unuttum puzzles...
Neil

Büyük afiş ekler misiniz?
Sızdıran Rahibe

Sonunda sohbette portmanteaus hakkında neden sorduğunu
öğrendik

Yanıtlar:


21

MATL, 20 15 bayt

'-| 'jtPht!-ZS)

MATL Online'da deneyin

açıklama

'-| '       % 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
: Ey Dennis'i aştın!
Downgoat

@Downgoat Bu, MATL'nin Jelly'den daha kısa olduğu nadir durumlardan biridir!
Suever

İşaret işlevini kullanmak iyi fikir!
Luis Mendo

18

Java, 329 305 264 259 192 bayt

Sayesinde:

  • @ Üçlü operatörleri kullanmayı önerdiğiniz için @ Bálint.
  • @ user902383, dizeyi kendim çevirmeyi önerdiğim için
  • Yerine öne için @Frozn ve @ user902383 StringBuilderile String.

golfed:

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

Kesinlikle eğlenceli bir tane. İlk girişim, O(n)çok sinirlendikten sonra bu basit formla değiştirilen ancak biten bir fonksiyondu .

Ve test etmek için:

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

2
Programlama Bulmacaları ve Kod Golf'üne Hoş Geldiniz! Bu çok güzel bir ilk cevap. :)
Alex A.

1
Kullanmak zorunda olmadığınızı unutmayın \u2015. Ham kodda yatay çubuk (veya sadece tire) kullanmak iyidir.
Calvin'in Hobileri

Cevap Stringyerine normal kullandıysanız StringBuilderçok daha kısa olacağından eminim ... (çok daha fazla hafıza gerektirse de)
Leaky Nun

Tüm intsatırları aynı satırda ilan ederek bazı baytları kazanabilirsiniz :int i,j,l=m.length();for(i=0;i<l;i++){...
Aaron

Her döngü için for döngüsünü değiştirirseniz çok tasarruf edebileceğinizi düşünüyorum. Karakterleri almaktan başka indekslere ihtiyacınız yok.
Frozn

11

Haskell, 93 bayt

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

Kullanım örneği:

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

Nasıl çalışır (not: (f <*> g) xolarak tanımlanmıştır 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

Alternatif sürüm: "değiştirme bul" işlevi ((("- |"!!).fromEnum).).comparede aynı bayt sayısı için yazılabilir a#b|a<b='-'|a>b='|'|1<2=' 've çağrılabilir (#).


8

Jöle , 16 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

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

Bir çizgi kullanarak, çünkü genellikle SpiderMonkey JS kabuğunu Windows'ta çalıştırıyorum ve bunu yaparsam Unicode çalışmıyor.


[...s,s].reverse()+1
Downgoat

5

Pyth, 31 30

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

Test odası

Ne yazık ki Q, birkaç bifürkat nedeniyle s'yi düşüremez. Şimdiye kadar oldukça basit bir algoritma, sayı yatay çubuğu 1 bayt olarak kabul ediyor.



1
@Maltysen FGITWed dışında olmaktan yoruldum;) Neyse daha kısa olabileceğinden eminim ...
FryAmTheEggman

5

Haskell, 66 bayt

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

4

JavaScript ES6, 138 126 123 bayt

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

Kodun çoğu yansıtan / çeviren


4

J, 26 20 bayt

@Zgarb sayesinde 6 bayt .

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

Önceki 26 baytlık cevap

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

Dennis'in cevabıyla aynı algoritmayı kullanır.

Kullanımı:

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

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

( >>anlam girişi (STDIN), <<anlam çıkışı (STDOUT))


1
Bazı yeniden yapılandırmalarla, 20 bayta kadar:' |-'{~3*@-/~@u:[,|.
Zgarb

Bu çatalların güzel bir kullanımı ...
Leaky Nun

3

Mathematica, 124 110 104 102 bayt

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

Anonim işlev Unicode karakteri, U + F3C7'dir \[Transpose].


3

Javascript 146 142 132 130 124 bayt

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

Test odası:

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 için, en az 50 baytın kaldırılmasına yardımcı olduğunuz ve 3 bayt için @Downgoat için teşekkürler!


1
genellikle => {...} ile => (...) karakterini değiştirebilir ve o zaman içindeki tüm noktalı virgülleri virgüllerle değiştirebilirsiniz
Downgoat

Bu cevap Downgoat'ınkiyle neredeyse aynı, yemin ederim, ona bakmadım.
Bálint

3

Aslında, 53 bayt

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

Bir kez daha, aslında zayıf string işleme yetenekleri onun kriptonitleri. Hala Java'dan daha kısa, bu yüzden benim için böyle devam ediyor, bu da güzel.

Çevrimiçi deneyin!

Açıklama:

Kod 3 ayrı bölüme ayrılabilir: çeviri kodu, işlem kodu ve yansıtma kodu. Okunabilmesi için her bölümü ayrı ayrı açıklayacağım.

Çeviri kodu ( syığındaki girdi dizesiyle başlar ):

;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

İşlem kodu ( n**2sağ alt köşeye karşılık gelen bir karakter listesiyle başlar ):

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

Yansıtma kodu ( n**2+nyeni çizgiler gibi davranan periyotlarla, bir uzunluklu dizeyle başlar )

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

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

Giriş STDIN üzerinden yapılır. Çevrimiçi deneyin!

Açıklama:

İlk satırda oku ve yansıtılmış giriş. Giriş için abcd, bu dcbaabcdyığında bırakır . Her iki yarım da vermek üzere yansıtılır abcddcba(2. satır). Daha sonra, her bir eleman kopyalanır ve sırayla kendi yığınında bırakılır (satır 3 ve 4). Bu işlemden sonra, yığın yığını buna biraz benziyor:

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

Sırasıyla her yığın için, satır değeri (yığının altı) sütun değeri (yığının üstü) ile karşılaştırılır. Uygun karakter seçilir - |ve STDOUT'a yazılır. Sütun değerleri daha sonra döndürülür, böylece bir sonraki sütun yığının en üstünde olur (satır 6).

Tüm sütunlar göz önüne alındığında satır değeri atılır, yeni bir satır yazdırılır ve sütun değerleri, çıkış işleminin yeniden başlaması için önceki yığına (satır 7) konur.

]Sadece tek bir sol ise komut, istiflerin istiften haşhaş ek olarak, mevcut yığın boşaltır. Programın bitiş koşulu, tüm satırlar işlendiği gibi yığın boşsa (satır 5).


3

C #, 169 150 bayt

teşekkürler 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);
        }

    }

daha fazla golf tavsiyesi


t+=c==k?" ":c>k?"|":"-";çalışmalı. C # ile pek golf oynamamıştım ancak normal fordöngüler kullanmanın daha kısa sürmesi de oldukça mümkün .
FryAmTheEggman

Bu cevabım, orijinal C # cevabımın ikisinde de yaptığı Reverse()ve ToArray()aynı System.Linqşekilde bir use ifadesi gerektiren bir sorundur .
Phaeze

3

C # 166 143 bayt,

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

Açıklama:

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

Ölçek:

Wordenticons

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

Metodun sadece kabul edilebilir olup olmadığından emin değildim, bilmeme izin
vermediysem

@Downgoat düzenleme için teşekkürler, # 'dan kaçmanın doğru yönteminden emin değildim.
Phaeze

Görünüşe göre sadece önizlemede berbat, bilmek güzel
Phaeze

dize uyguladığından beri IEnumerable<char>bazı baytları .Reverse()doğrudan atlama ipini kullanarak kaydedebilirsiniz.ToCharArray()
grabthefish

Ayrıca , dizelerde endeksleme kullanabildiğiniz var a = new[] { '-', ' ', '|' };için de değişiklik var a = "- |";yapabilirsiniz
grabthefish

2

CJam, 20 bayt

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

Burada test et.

Dış ürünü hesaplamak ve fark kullanmak için açık bir yaklaşım kullanır ve hesaplamak ve her hücrede karakteri hesaplamak için sgn .


2

Clojure, 171 bayt

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

Dennis sayesinde 5 bayt kurtarıldı.

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

Sonradan bir fiili fiili haline getirmeye çalışacağım.


2

Octave, 39 bayt

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

Kullanılarak çalıştırılabilecek anonim bir işlev oluşturur ans('string').

gösteri

açıklama

Bu çözüm giriş dizesini ( x) ve bunun tersini flip(x)kullanarak birleştirir [x, flip(x)]. yCevap kısaltmak için tersi verilir [x, y = flip(x)]. Daha sonra birleştirerek aynı şeyin bir sütun vektörü oluşturmak xve yve devrik alarak: [x,y]'. Daha sonra dizgilerdeki harflerin herhangi bir ASCII gösterimi arasında bir 2B farklılık dizisi oluşturmak için otomatik olarak yayınlanacak farkı alırız. Biz kullanmak signya Bunları yapmak için -1, 0ya da, 1daha sonra eklemek 2geçerli 1 tabanlı dizin değerlerini alır. Daha sonra bunları ilk dizgiye indekslemek için kullanırız '| -'.


2

Julia, 70 bayt

Bu benim ilk kod golf denemem ve daha önce Julia'yı kullanmadım, bu yüzden bana ne düşündüğünü söyle:

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

Çevrimiçi deneyin!

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

Bence muhtemelen daha da kısa yapılabilir. Bu kod, wordicon karakterlerini bir matriste depolar:

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

Maalesef, matrisi kullanarak istenen çıktıyı başaramadım.


Merhaba, PPCG'ye hoş geldiniz! Bize katıldığınız için teşekkürler!
NoOneIsHere

1

Jolf, 42 bayt

Neredeyse golf oynadım. Muhtemelen Jolf'un sahip olduğu bir matris hakkında unutacağım.

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

Burada dene! Bu kod Ψmatris haritası için bir ok işlevi ( ) kullanır .


1

Javascript, 303 Bayt

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 fantezisi yok burada


Bir mektup önce alfabe gelirse, sadece "a" <"b" yaparak kontrol edebilirsiniz
Bálint

Rahatsız etmene gerek var x = 1yok, sadece yap x = 1. Kodda golf hiç kimse en iyi uygulamalara bağlı kalmayı umursamıyor. :)
gcampbell

1

Python 2,126 bayt

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

Bu aslında benim çözümümün bir limanı .

Çevrimiçi deneyin

Açıklama:

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

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

Çevrimiçi Deneyin! (Ideone) (Son iki test durumu çıktıda görünmüyor, çünkü bunlar sadece boş satırlar. Programım bunları işleme koyuyor ancak 10 vaka girişi olduğu doğrulandı, ancak sadece 8 çıktı görünüyor.)

Ungolfed ardından bir Açıklama:

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]

    Bir liste oluşturun, pbir yerde |sütun mektup Unicode Puan Değeri satır mektubun değerinden düşük bir ise ilave edilmektedir sütun mektup Unicode Puan Değeri satır mektubun değerden fazla olması durumunda ilave edilir ya da bir ikisi ise değerler eşittir.

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

    uListeden pher biri hem ileri hem de geri giriş uzunluğu karakterlerinden oluşan birleştirilmiş dize segmentlerine bölerek yeni bir satır dizgisi oluşturun . Bu senin wordenticon'un ilk yarısı. Yani, girişiniz olması durumunda food, bu geri dönecekti:

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

    Sonunda çıktı, uardından yeni bir satır izler ve ardından uikinci yarının ilk yarısını dikey olarak yansıtmak için ters çevrilir. Bu sizin tamamladığınız wordenticon, ki bu test durumu foodiçin sonunda:

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

0

R , 101 bayt

Kullandığımdan beri 101 bayt (sanırım daha iyi görünüyor -).

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

Çevrimiçi deneyin!

Simetriden ve R'nin matrislerinden faydalanabildiğimiz için daha önce bir R cevabı olmadığına şaşırdım, bu stringsorun olmasına rağmen oldukça rekabetçi bir cevap almak için .

Ungolfed Açıklama:

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 bayt

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

Çevrimiçi deneyin!

Her bir karaktere ilmek vererek, sonra elde edilen karakteri (ve bunların yansımasını) güncelleyerek çalışır.


0

05AB1E (eski) , 20 22 21 bayt

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

Tek karakter girişi için hata-düzeltme + 2 bayt ..
-1 bayt normal çizgi kullanılarak -yerine o zaman kullanabilir, çünkü … |-yerine "… |―"yana (… |― hatalı bir sözlük dize olarak hareket edecektir)

05AB1E'nin eski sürümünü kullanır, çünkü yansıtma yapılırken yeni satırlara dolaylı olarak katılır, bu da ek bir açık gerektirir » , yeni sürümde .

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

Ç             # 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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.