공백으로 세로로 구분 된 세 개의 열을 인쇄합니다.


15

직무

  • 공백으로 구분 된 입력 문자열을 가져옵니다.
  • 알파벳순으로 단어를 정렬하십시오.
  • 공백으로 구분 된 3 개의 열에 세로로 인쇄하십시오.

도전

  • 세 열의 높이는 모두 가능한 한 고르게 가중되어야합니다.
  • 세 열 모두 정렬 된 상태로 두어야합니다.

이것은 이므로 가장 짧은 코드가 승리합니다!

입력이 다음과 같은 경우 :

"cat caterpillar pie frog elephant pizza", 

출력은 다음과 같아야합니다.

cat         elephant pie
caterpillar frog     pizza

입력이 다음과 같은 경우에주의하십시오.

"a b c d e f g" 

다음과 같이 인쇄해야합니다.

a c e
b d f
    g

# or

a d f
b e g
c

# and not

a d g
b e
c f

2
또한 엄격한 I / O 요구 사항을 제거하는 것이 좋습니다. 즉, (응답자가 원하는대로) 어떤 형식 으로든 문자열 목록으로 그리고 목록을 취하는 프로그램이나 함수로 입력하십시오.
HyperNeutrino

첫 번째 예제에서 이것을 출력 할 수 있습니까?
caird coinheringaahing

4
@Satendra 질문이 충분히 좋으면 다시 열릴 것입니다. | 샌드 박스 사용을 고려할 수 있습니다.
user202729 2016

3
문제를 메인 사이트에 게시하기 전에 향후 샌드 박스 를 사용 하여 문제에 대한 의견을 얻으십시오.
Mego

1
@Satendra Nice 첫 도전. 가장 좁은 간격으로 단일 공간으로 열을 분리해야하는 경우이를 명시해야합니다.
Adám

답변:


4

껍질 , 24 17 바이트

TmoTT' §CȯmLTC3Ow

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

설명

Husk에는 현재 목록을 지정된 수의 부품으로 나눌 수있는 기본 제공 기능이 없기 때문에 이는 매우 까다로운 문제였습니다.

TmoTT' §CȯmLTC3Ow  Implicit input, say s="bbb a cc ddd e"
                w  Split at spaces: x=["bbb","a","cc","ddd","e"]
             C3    Cut into slices of length 3: [["bbb","a","cc"],["ddd","e"]]
            T      Transpose: [["bbb","ddd"],["a","e"],["cc"]]
         ȯmL       Map length: [2,2,1]
                   These are the correct lengths of the columns.
       §C      O   Sort x and split into these lengths: [["a","bbb"],["cc","ddd"],["e"]]
                   These are the columns of the correct output, without padding.
 mo                For each column,
    T'             transpose and pad with spaces: [["ab"," b"," b"],["cd","cd"," d"],["e"]]
   T               then transpose back: [["a  ","bbb"],["cc ","ddd"],["e"]]
T                  Transpose the whole list: [["a  ","cc ","e"],["bbb","ddd"]]
                   Implicitly join each row by spaces,
                   join the resulting strings by newlines and print.



1

Mathematica, 115 바이트

Grid[Transpose@PadRight@TakeList[#,Last@IntegerPartitions[Tr[1^#],3]]&@Sort@StringSplit@#/. 0->"",Alignment->Left]&

Wolfram Sandbox 에서 사용해보십시오

다음 코드를 붙여 넣고 Shift + Enter를 누릅니다.

Grid[Transpose@PadRight@TakeList[#,Last@IntegerPartitions[Tr[1^#],3]]&@Sort@StringSplit@#/. 0->"",Alignment->Left]&["cat caterpillar pie frog elephant pizza"]

1
@HalvardHummel 고정
J42161217



1

자바 스크립트 181175 바이트

f=a=>(a=a.split` `).sort().map(c=>(t[y]=[...t[y]||[],c],M[x]>(l=c.length)?0:M[x]=l,a[++y*3+x]?y:y=x++*0),M=[t=[x=y=0]])&&t.map(x=>x.map((c,y)=>c.padEnd(M[y])).join` `).join`
`

console.log(f("cat caterpillar pie frog elephant pizza"))
console.log("-------------------")
console.log(f("cat caterpillar pie frog frog123123 pizza"))
console.log("-------------------")
console.log(f("a b c d e f g"))
console.log("-------------------")
console.log(f("a b c d e f"))
console.log("-------------------")
console.log(f("a b c d e"))
console.log("-------------------")
console.log(f("a b c d"))

/*
f=a=>(a=a.split` `).sort().map(c=>((t[y] =t[y]||[])[x]=c,M[x]>(l=c.length)?0:M[x]=l,++y*3+x<a.length?0:y=x++*0),M=[t=[x=y=0]])&&t.map(x=>x.map((c,y)=>c.padEnd(M[y])).join` `).join`\n`

f=a=>(a=a.split` `).sort().map(c=>(t[y]=[...t[y]||[],c],M[x]>(l=c.length)?0:M[x]=l,++y*3+x<a.length?0:y=x++*0),M=[t=[x=y=0]])&&t.map(x=>x.map((c,y)=>c.padEnd(M[y])).join` `).join`\n`

*/



0

, 65 64 바이트

≔⪪θ ηFη«⊞υ⌊η≔⟦⟧ηF⪪θ ¿¬№υκ⊞ηκ»FE³✂υ÷×ιLυ³÷×⊕ιLυ³I1«P⪫ι¶¿ιM⊕⌈EιLκ→

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 3 워드 미만의 경우를 처리 할 필요가 없으면 2 바이트를 절약하십시오. 아마도 사용해야 할 정렬 "평가"가있을 수 있습니다 ... 설명 :

≔⪪θ η

공백으로 입력을 분할하십시오.

Fη«⊞υ⌊η≔⟦⟧ηF⪪θ ¿¬№υκ⊞ηκ»

배열을 정렬하십시오.

FE³✂υ÷×ιLυ³÷×⊕ιLυ³I1«

대략 같은 배열의 세 조각을 반복합니다. ( I1정말 있어야합니다 ¦¹.)

P⪫ι¶

줄 바꿈으로 슬라이스를 결합하고 커서를 움직이지 않고 인쇄하십시오.

¿ιM⊕⌈EιLκ→

슬라이스가 비어 있지 않으면 슬라이스에서 가장 긴 단어의 길이보다 1 배 이상 오른쪽으로 이동하십시오.


0

358 바이트의 축소 된 JS :

function f(b){let d=[,,,],e=b.split(" ").sort(),g=[],h=[];for(var j in e){var k=Math.min(2,Math.floor(j/Math.floor(e.length/3)));d[k]||(d[k]=[],g[k]=e[j].length),d[k].push(e[j]),2==k&&h.push(""),g[k]=Math.max(e[j].length,g[k])}for(var o in g)for(var p=0;p<g[o]+1;p++)for(var q in h)h[q]+=q>=d[o].length||p>=d[o][q].length?" ":d[o][q][p];return h.join("\n")}

function f(b){let d=[,,,],e=b.split(" ").sort(),g=[],h=[];for(var j in e){var k=Math.min(2,Math.floor(j/Math.floor(e.length/3)));d[k]||(d[k]=[],g[k]=e[j].length),d[k].push(e[j]),2==k&&h.push(""),g[k]=Math.max(e[j].length,g[k])}for(var o in g)for(var p=0;p<g[o]+1;p++)for(var q in h)h[q]+=q>=d[o].length||p>=d[o][q].length?" ":d[o][q][p];return h.join("\n")}

console.log(f("cat caterpillar pie frog elephant pizza"));
console.log(f("a b c d e f g"));


@StephenLeppik np
jamespgilbert

0

GNU sed , 92 + 1 = 93 바이트

에 +1 바이트 -r플래그의 경우

나는 이것을 전혀 골퍼하지 않았다. 그러나 그것은 내가 예상했던 것보다 훨씬 더 간단한 것으로 판명되었다.

s/$/ /
s/(\S+ ){1,3}/:&\n/g
:
s/:(\S)/\1:/g
/:\S/!bZ
s/: / &/g
t
:Z
s/: / :/g
t
s/ *:.*$//gm

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


-1

Bourne 쉘, 172 바이트

F=/tmp/t
<$1 tr \  \\n|sort>$F
N=$(wc -w $F|awk '{print $1/3}')
for i in 0 1 2
do
awk 'NR%N==C {print}' N=$N C=$i $F 
done|awk '{printf "%s%s",$1,NR%3?" ":"\n"}'|column -t

일반적으로 형식을 지정하면 더 읽기 쉽습니다.

#! /bin/sh
F=/tmp/t
<$1 tr \  \\n | sort > $F
N=$(wc -w $F | awk '{print $1/3}')

for i in 0 1 2
do    
    awk -v N=$N -v C=$i 'NR % N == C {print}' $F 
done |
    awk '{printf "%s%s", $1, NR % 3 == 0? "\n" : " " }' | column -t

열당 한 번 입력을 스캔하는 가격으로 배열을 사용하지 않습니다. 보다 복잡한 awk 프로그램은 3 개의 파일 (N 번째 단어마다 하나씩)을 열어 한 번에 입력을 처리 할 수 ​​있습니다. 그런 다음 동일한 마지막 줄을 사용하여 연결하고 인쇄 할 수 있습니다.

변수 N 도 꼭 필요한 것은 아닙니다. 4 바이트 가격으로 입력 스캔을 3 번 더 저장합니다.


2
PPCG에 오신 것을 환영합니다! 이것은 코드 골프 챌린지이므로 바이트 수를 최소화하기 위해 모든 답변이 필요합니다. 공백을 제거하고, 호출을 단축하는 등의 방법으로 정확하게 수행 할 수 있습니다. 일단 그렇게 한 후에는 사용 된 언어와 바이트 수를 제공하는 응답에 헤더를 추가하십시오. 현재 버전을 "비 고정"솔루션으로 유지하십시오.
DLosc

왜 358 바이트 프로그램에 대한 장면을 만들지 않습니까?
xyz123
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.