Wordenticons 생성


54

식별자 아이콘 은 해시 값을 시각적으로 묘사 한 것으로 종종 기하학적 모양의 대칭 배열로 만들어집니다. 기본 스택 교환 아바타는 ID 아이콘입니다. 이 과제는 소문자 문자열 (예 : 단어)에 적용되는 간단한 텍스트 기반 버전의 아이덴티 콘 인 "wordenticons" 를 만드는 것입니다.

도전

문자열 S를 받아서 wordenticon을 출력하는 프로그램이나 함수를 작성하십시오. S는 비어 있지 않아야하며 소문자 영어 문자 az 만 포함합니다. S에 후행 줄 바꿈이 있다고 가정 할 수도 있습니다.

S의 wordenticon은 2*length(S)공백 ( ), 세로 막대 ( |) 및 가로 막대 ( ) 로 구성된 측면 길이를 가진 텍스트의 사각형 격자입니다 .

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

wordenticon을 완성하려면 단어가 포함 된 불필요한 행과 열을 제거하십시오.

 ――|
|  |
|  |
――― 

그런 다음 전체를 수평으로 미러링

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

마지막으로 다시 수직으로 미러링

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

2*length(S)최종 워드 엔 티콘 인 측면 길이의 텍스트 그리드가 생성됩니다 .

다음은 몇 가지 추가적인 wordenticon 예제입니다. 다른 단어는 동일한 단어 아이콘을 가질 수 있으며 일부 단어 아이콘은 공백으로 완전히 만들 수 있습니다 (불행히도 마크 다운은 렌더링을 원하지 않습니다).

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는 이전 답변으로갑니다.

노트

  • 코드 의 가로 막대 ( )는 실제로 차지하는 3 UTF-8 바이트 대신 1 바이트로 계산 될 수 있습니다. (최대 10 개의 인스턴스)
  • 원하는 경우 -가로 막대 ( ) 대신 일반 대시 ( )를 사용할 수 있습니다 .
  • 단어 모양 아이콘의 선에서 후행 공백을 제거하거나 추가하는 것은 허용되지 않습니다 (모양이 변경되지 않은 경우에도). 정확한 2*length(S)가로 길이 텍스트 사각형 이어야합니다 .
  • 출력 워드 엔 티콘은 선택적으로 단일 후행 개행을 가질 수있다.

입력을 문자 배열로 취할 수 있습니까?
Downgoat

@Downgoat 아니오, 언어에 다른 방법이 없다면 정상적인 문자열이어야합니다.
Calvin의 취미

2
당신은에 대한 예제를 가지고 programming, and그리고 codegolf하지만 당신은 잊었 puzzles...

리더 보드를 추가 할 수 있습니까?
Leaky 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
: O 너는 Dennis를 능가했다!
Downgoat

@Downgoat 이것은 MATL이 Jelly보다 짧은 드문 경우 중 하나입니다!
Suever

부호 기능을 사용하는 것이 좋습니다!
Luis Mendo 2016 년

18

자바, 329 305 264 259 192 바이트

덕분에 :

  • 삼항 연산자 사용을 제안하는 @ Bálint.
  • 직접 문자열을 뒤집을 것을 제안하는 @ user902383
  • 대체 제안에 대한 @Frozn와 @의 user902383 StringBuilder와 함께 String.

골프 :

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

언 골프 드 :

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
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 이것은 매우 좋은 첫 번째 대답입니다. :)
Alex A.

1
을 사용할 필요는 없습니다 \u2015. 원시 코드에 가로 막대 (또는 단순히 대시)를 사용하는 것이 좋습니다.
Calvin의 취미

나는 대답 String대신에 보통을 사용하면 StringBuilder훨씬 더 짧을 수 있다고 확신합니다 (많은 메모리를 차지할지라도)
Leaky Nun

int같은 줄에 모든 s를 선언하면 약간의 바이트를 얻을 수 있습니다.int i,j,l=m.length();for(i=0;i<l;i++){...
Aaron

for 루프를 각 루프마다 변경하면 많은 비용을 절약 할 수 있다고 생각합니다. 당신은 문자를 얻는 것 외에 다른 것에 대한 색인이 필요하지 않습니다.
Frozn

11

하스켈, 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

자바 스크립트 (ES6), 94 바이트

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

Windows에서 일반적으로 SpiderMonkey JS 셸을 실행하기 때문에 대시를 사용하면 그렇게하면 유니 코드가 작동하지 않습니다.


[...s,s].reverse()+1
Downgoat의 훌륭한

5

피스, 31 30

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

테스트 스위트

슬프게도 Q여러 분기로 인해 s를 삭제할 수 없습니다 . 지금까지 꽤 기본적인 알고리즘 인 count는 가로 막대를 1 바이트로 처리합니다.


내 31 문자 솔루션을 게시하기 2 초 전까지
감히

1
@Maltysen 나는 FGITWed 밖으로 피곤했다;) 어쨌든 나는 그것이 더 짧을 수 있다고 확신합니다 ...
FryAmTheEggman

5

하스켈, 66 바이트

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

4

자바 스크립트 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 바이트

@Zgarb 덕분에 6 바이트 .

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

이전 26 바이트 답변

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

Dennis의 답변과 동일한 알고리즘을 사용합니다.

용법:

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

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

( >>입력 의미 (STDIN), <<출력 의미 (STDOUT))


1
일부 구조 조정을 통해 20 바이트를 얻을 수 있습니다.' |-'{~3*@-/~@u:[,|.
Zgarb

그것은 포크를 잘 사용합니다 ...
Leaky Nun

3

매쓰, 124 110 104 102 바이트

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

익명의 기능. 유니 코드 문자는 U + F3C7입니다 \[Transpose].


3

자바 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 바이트를 제거하고 3 바이트 동안 @Downgoat에 감사드립니다!


1
당신은 일반적으로 대체 할 수있다 => {...}와 => (...) 그 때 쉼표 내의 모든 세미콜론을 대체
Downgoat

이 대답은 Downgoat와 거의 동일합니다. 맹세합니다. 나는 그의 대답을 보지 않았습니다.
Bálint

3

실제로 53 바이트

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

다시 한번, 실제로 열악한 문자열 처리 능력은 크립토나이트입니다. 그것은 여전히 ​​Java보다 짧습니다. 그래서 저를 위해 가고 있습니다.

온라인으로 사용해보십시오!

설명:

코드는 번역 코드, 처리 코드 및 미러링 코드의 세 부분으로 구분 될 수 있습니다. 가독성을 위해 각 섹션을 개별적으로 설명하겠습니다.

번역 코드 ( 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마침표가 개행으로 작동 하는 길이 문자열로 시작 )

'.@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을 통해 이루어집니다. 온라인으로 사용해보십시오!

설명 :

첫 번째 행에서 읽고 입력 한 입력입니다. input의 경우 스택에 abcd남습니다 dcbaabcd. 그런 다음 각 절반을 미러링하여 abcddcba2 번 줄 을줍니다 . 그런 다음 각 요소가 복제되어 자체 스택에 차례로 남아 있습니다 (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 행)에 넣습니다.

]는 단 하나의 왼쪽 인 경우 명령은 스택의 스택에서 터지는뿐만 아니라, 현재 스택을 비 웁니다. 프로그램의 종료 조건은 모든 행이 처리되었으므로 스택이 비어있는 경우입니다 (행 5).


3

C #, 169150 바이트

감사합니다 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);}

언 골프 :

    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 2016 년

3

C # 166143 바이트,

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

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

방법 만 받아 들일 수 있을지 모르겠지만,
알려주지 않으면

@Downgoat 편집 해 주셔서 감사합니다. #를 이스케이프 처리하는 올바른 방법을 확신하지 못했습니다.
Phaeze

미리보기에서 엉망
이었던

문자열을 구현하기 때문에 IEnumerable<char>당신은 사용하여 일부 바이트를 저장할 수 있습니다 .Reverse()건너 뛰는 문자열에 직접.ToCharArray()
grabthefish

당신은 또한 변경 될 수 있습니다 var a = new[] { '-', ' ', '|' };var a = "- |"; 당신이 문자열에 대한 색인을 사용할 수 있기 때문에
grabthefish


2

클로저, 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)))))

언 골프 :

(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 바이트

Dennis 덕분에 5 바이트가 절약되었습니다.

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그리고 트랜스를 복용 : [x,y]'. 그런 다음 문자열의 ASCII 문자 표현 사이에 2D 차이 배열을 만들기 위해 자동으로 브로드 캐스트 할 차이점을 취합니다. 우리는 sign이것들을 -1, 0또는 1만든 다음 2유효한 1 기반 인덱스 값을 얻기 위해 추가하는 데 사용합니다. 그런 다음이를 사용하여 초기 문자열로 색인합니다 '| -'.


2

줄리아, 70 바이트

이것은 코드 골프에 대한 첫 번째 시도이며 Julia를 사용하지 않은 적이 있으므로 어떻게 생각하는지 알려주세요.

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

온라인으로 사용해보십시오!

언 골프 드 :

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의 문자를 행렬에 저장합니다.

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

불행히도 매트릭스를 사용하여 원하는 출력을 생성 할 수 없었습니다.


안녕하세요, PPCG에 오신 것을 환영합니다! 참여해 주셔서 감사합니다!
NoOneIsHere 여기

1

줄프, 42 바이트

거의 골프를 치지 않았다. Jolf에 내장 된 매트릭스 내장을 잊어 버렸을 것입니다.

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

여기 사용해보십시오! 이 코드는 Ψ행렬 맵에 화살표 기능 ( )을 사용합니다.


1

자바 스크립트, 303 바이트

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

언 골프

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 공상 없음


문자가 알파 헤타에서 앞에 오면 간단히 "a"< "b"
Bálint

당신은 귀찮게 할 필요가 없습니다 var x = 1만 수행합니다 x = 1. 코드 골프에서는 아무도 모범 사례를 고수하는 것을 신경 쓰지 않습니다. :)
gcampbell

1

파이썬 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

파이썬 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하는 어디 |열 문자의 유니 코드 포인트 값이 행 문자의 값보다 작하는 경우 추가 열 문자의 유니 코드 포인트 값이 행 문자의 값보다 더 많은 경우 추가, 또는 두 경우 값이 같습니다.

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

온라인으로 사용해보십시오!

string문제 가 있음에도 불구하고 대칭과 R의 행렬을 이용하여 경쟁이 치열한 답변을 얻을 수 있기 때문에 이전에 R 답변이 없다는 것에 놀랐습니다 .

풀리지 않은 설명 :

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.