글자로 단어 개요


14

단어를 "개요"하는 현재의 과제의 목적 상, 단어는 마지막 글자부터 시작하여 자신의 글자로 연속해서 둘러싸고 마지막으로 중앙의 원래 단어를 공백으로 바꾸는 것을 의미합니다.

       oooooo 
       onnnno 
on ->  on  no 
       onnnno
       oooooo

직무:

소문자 및 / 또는 대문자 영어 문자로만 구성된 단어 목록이 제공되면 각 단어의 개요를 표시하고 모든 결과 블록을 가로로 나란히 표시하고 단일 공백으로 구분하여 블록 중앙에 수직으로 정렬합니다.

전체 프로그램 또는 함수를 작성할 수 있습니다.

입력:

단어 목록 또는 원하는 경우 공백 또는 다른 기호로 구분 된 문자열

산출:

개요 단어에 대한 블록의 ASCII 표현. 선행 / 후행 공백이 허용됩니다.

테스트 사례 :

Input 1: ["code", "golf"] (or "code golf")
Output 1:

    cccccccccccc gggggggggggg
    cooooooooooc goooooooooog
    coddddddddoc gollllllllog
    codeeeeeedoc golfffffflog
    code    edoc golf    flog
    codeeeeeedoc golfffffflog
    coddddddddoc gollllllllog
    cooooooooooc goooooooooog
    cccccccccccc gggggggggggg

Input 2: ["I", "am", "just", "a", "man"]  (or "I am just a man")
Output 2: 

           jjjjjjjjjjjj
           juuuuuuuuuuj     mmmmmmmmm
    aaaaaa jussssssssuj     maaaaaaam
III ammmma justtttttsuj aaa mannnnnam
I I am  ma just    tsuj a a man   nam  
III ammmma justtttttsuj aaa mannnnnam
    aaaaaa jussssssssuj     maaaaaaam 
           juuuuuuuuuuj     mmmmmmmmm 
           jjjjjjjjjjjj

우승 기준 :

각 언어에서 가장 짧은 바이트 코드가 이깁니다. 코드와 접근 방식에 대해 언급 / 설명해 주시면 대단히 감사하겠습니다.


단어가 하나 이상 있다고 가정 할 수 있습니까?
PurkkaKoodari

@ Pietu1998 네, 항상 적어도 한 단어가 있습니다
Galen Ivanov

1
@ 케빈 크루이 센 전치사?
Galen Ivanov

답변:


7

캔버스 , 22 20 바이트

l *;±21*{;l└*e⟳} ]r⤢

여기 사용해보십시오!

설명:

{                 ]    map over the inputs
 l *                     array of length spaces - the canvas of the current word
    ;                    get the word back on top
     ±                   reverse it
      21*                repeat each character twice
         {      }        for each character
          ;l└              push the height of the item below (the canvas)
             *             repeat the character that many times vertically
              e            and encase the canvas in that char column
               ⟳           and rotate it clockwise for encasing the next time
                 ∙      push another space as the separator of words
                   r   center the words
                    ⤢  and transpose the final output (as everything was built vertically)

5

, 35 바이트

FA«≔LιθMθ↑Fθ«B⁻׳θ⊗κ⊕⊗⁻θκ§ικ↘»M⊕⊗θ→

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

FA«

입력 목록을 반복합니다.

≔Lιθ

현재 단어의 길이를 구하십시오.

Mθ↑

결과 아웃 라인의 왼쪽 상단으로 이동하십시오.

Fθ«

각 문자마다 한 번씩 반복하십시오.

B⁻׳θ⊗κ⊕⊗⁻θκ§ικ

적절한 높이, 너비 및 문자의 상자를 그립니다.

↘»

다음 상자의 왼쪽 상단으로 이동하십시오.

M⊕⊗θ→

다음 개요로 이동하십시오.


4

하스켈 , 188 183 174 171 167 바이트

Laikoni 덕분에 -9 -13 바이트 .

e=[]:e
c#a=k c<$>k(c<$a!!0)a
k c s=c:s++[c]
f w=foldr(#)[p w]w
p=(' '<$)
s w=unlines.map unwords.foldr(zipWith(:))e$until(\a->all((p a>=).p)$f<$>w)(k=<<p.head)<$>f<$>w

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


\a->and[p a>=p x|x<-f<$>w]할 수 \a->all((p a>=).p)$f<$>w있고 k c=(++[c]).(c:)할 수 있습니다 k c s=c:s++[c].
Laikoni

3

Pyth, 34 33 바이트

Jsm+;uCjR*2HG_.iddm\ dQjCm.[lJd;J

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

여분의 공백을 모두 버리지 만 도전은 허용합니다.

설명

  • m… 입력의 Q각 단어 d에 대해 다음을 수행합니다 Q.

    • m\ d와 단어를 매핑하여 x => " "기본적으로 [" ", ..., " "]단어에 글자 수만큼의 항목 이 포함 된 목록 을 만듭니다 .
    • .idd단어를 두 번 반복하여 단어 자체를 인터리브합니다. _이 문자열을 반대로 바꿉니다. word됩니다 ddrrooww.
    • uwith G= 공백 배열로 시작 하고 인터리브 된 문자열의 각 문자에 다음을 적용합니다 H.
      • *2H 문자를 두 번 반복합니다.
      • jR… 한 쌍의 문자 사이 G에 각 문자열을 넣습니다 G.
      • C행과 열을 바꿉니다. 에서 동일한 문자를 사용 H하여이 세 단계를 두 번 수행 G하면 해당 문자와 ​​함께 줄이 표시 됩니다.
    • 이제 개요 단어에 대한 열이 d있습니다. +;공백 열 앞에 추가합니다.
  • s각 단어에 대한 열 배열을 평평하게하여 J변수에 저장합니다 J.
  • mJ출력의 각 열에 대해 다음을 수행합니다.
    • .[lJd;열의 길이가 열의 수와 같도록 열의 양쪽을 공백으로 채 웁니다. 이것은 세로로 정렬하기 위해 항상 충분한 패딩입니다.
  • C열을 행으로 바꾸고 j행을 개행으로 결합합니다.

대체 솔루션, 33 바이트

j.tsm.[L\ l+dsQ+;uCjR*2HG_.iddm\ 

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

후행 공백이 있습니다. 상단의 열만 채운 다음 공간 채우기로 조옮김을 제외하고는 거의 동일한 알고리즘입니다.


3

R , 189 바이트

function(x,S=32,`+`=rbind,`*`=cbind)cat(intToUtf8(Reduce(`+`,Map(function(s,K=utf8ToInt(s),o=S-!K){for(i in rev(K))o=i+i*o*i+i
for(j in(0:(max(nchar(x))-nchar(s)))[-1])o=S*o*S
o+S},x))+10))

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

채팅에서 digEmAll과 나와의 협업 .

function(x){
 S <- 32			# space
 `+` <- rbind			# alias for rbind
 `*` <- cbind			# alias for cbind
 outlineWord <- function(s){	# function to construct the outline for each word
  chars <- utf8ToInt(s)		# convert to code points
  output <- S - !chars		# replace each char with 32 (space)
  for(i in rev(chars))
   o <- i + i * o * i + i	# o <- rbind(i,cbind(i,o,i),i)
  for(j in(0:(max(nchar(x))-nchar(s)))[-1])
   o <- S * o * S		# pad with spaces
   o + S}			# return with an additional row of spaces between words
 outlines <- Map(outlineWord,x)	# apply outlineWord to each element of x
 outlines <- Reduce(`+`,outlines)# reduce by rbind
 outlines <- outlines+10	# add row of newlines
 cat(intToUtf8(outlines))	# convert back to strings and print
}

명백한 별명을 가진 187
J.Doe

@ J.Doe 커뮤니티 위키이므로 :-)에서 자유롭게 편집하십시오.
Giuseppe



1

05AB1E , 46 바이트

εg©;ò<Uyη央∍«®>∍}y𫩪®Xиª˜».º.∊}¶«».C.B€SζJ»

그것에 대해 너무 행복하지는 않지만 작동하고있어 기쁩니다.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

ε                             # Map `y` over the (implicit) input-list
 g                            #  Take the length of the current item
  ©                           #  Store it in the register (without popping)
   ;                          #  Halve it
    ò                         #  Ceil and cast to integer at the same time
     <                        #  Decrease it by 1
      U                       #  Pop and store it in variable `X`
 yη                           #  Take the prefixes of the current string `y`
   ε       }                  #  Map over these prefixes:
    ¤                         #   Take the last character of the string
     ®×                       #   Increase it to a size equal to the length from the register
       «                      #   Append it to the current prefix
        ®>                    #   Take the length from the register, and add 1
                             #   Shorten the string to that size
 y                            #  Push the string `y` again
  ð«                          #  Append a space
    ©                         #  Store it in the register (without popping)
     ª                        #  Append it at the end of the list of modified prefixes
      ®                       #  Push the string with space from the register again
       Xи                     #  Repeat it `X` amount of times
         ª                    #  Append them to the list
          ˜                   #  Flatten to remove the empty appended list if `X` was 0
           »                  #  Join by newlines
            .º.∊              #  Intersect mirror both horizontally and vertically
                }             # Close outer map
                 ¶«           # Append a newline after each (for the space delimiters)
                   »          # Join everything by newlines
                    .C        # Centralize it horizontally
                              # (too bad a centralize vertically isn't available..)
                      .B      # Split on newlines again
                        S    # Convert each line to a list of characters
                          ζ   # Zip, swapping rows/columns (with space filler by default)
                           J  # Join the loose characters of every line to a string again
                            » # Join the lines by newlines (and output implicitly)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.