พิมพ์สามคอลัมน์แยกตามแนวตั้งด้วยช่องว่าง


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

3
โปรดพิจารณาใช้แซนด์บ็อกซ์ในอนาคตเพื่อรับข้อเสนอแนะเกี่ยวกับความท้าทายของคุณก่อนโพสต์ลงในเว็บไซต์หลัก
Mego

1
@Satendra ความท้าทายแรกที่ดี หากคอลัมน์จะต้องคั่นด้วยช่องว่างเดียวที่ช่องว่างแคบที่สุดคุณควรระบุ
Adám

คำตอบ:


4

Husk , 24 17 ไบต์

TmoTT' §CȯmLTC3Ow

ลองออนไลน์!

คำอธิบาย

นี่เป็นความท้าทายที่น่าประหลาดใจอย่างมากเนื่องจาก Husk ขาด builtin ในการแบ่งรายชื่อออกเป็นหลายส่วน

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.

2

เยลลี่ขนาด 6 ไบต์

Ṣœs3ZG

ลองออนไลน์!


@DLosc จริง ๆ แล้วมันก็ถูกทดสอบกับa b c d e f gเคสด้วยและฉันก็ทำการทดสอบอื่น ๆ อย่างกว้างขวางเพราะฉันมีความรู้สึกนั้นเป็นอย่างแรก โอ้และความสั้นของมันมาจากG(รูปแบบเป็นG rid.) ในตัว
Erik the Outgolfer

อ่ามีบิ้วอิน (ทำไมฉันถึงประหลาดใจ?) นั่นอธิบายได้มากมาย
DLosc


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

Javascript 181 175 ไบต์

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κ→

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด บันทึก 2 ไบต์ถ้าฉันไม่ต้องจัดการกับกรณีที่น้อยกว่า 3 คำ อาจมีการเรียงลำดับ "eval" ฉันควรใช้ ... คำอธิบาย:

≔⪪θ η

แยกอินพุตบนช่องว่าง

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

เรียงลำดับอาร์เรย์

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

วนซ้ำประมาณสามเท่าของอาร์เรย์ ( I1ควรเป็นจริง¦¹)

P⪫ι¶

เข้าร่วมส่วนด้วยการขึ้นบรรทัดใหม่และพิมพ์โดยไม่ต้องเลื่อนเคอร์เซอร์

¿ιM⊕⌈EιLκ→

หากชิ้นส่วนนั้นไม่ว่างเปล่าให้เลื่อนไปทางขวามากกว่าความยาวของคำที่ยาวที่สุดในชิ้น


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


-1

เชลล์เป้าหมาย, 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 ไฟล์ (หนึ่งไฟล์สำหรับทุกคำที่ Nth) โดยประมวลผลอินพุตในหนึ่งรอบ จากนั้นพวกเขาสามารถตัดแบ่งและพิมพ์โดยใช้บรรทัดสุดท้ายเดียวกัน

ตัวแปรNไม่จำเป็นอย่างเคร่งครัดเช่นกัน; สำหรับราคา 4 ไบต์เราบันทึกการสแกนอินพุตอีก 3 ครั้ง


2
ยินดีต้อนรับสู่ PPCG! เนื่องจากนี่เป็นความท้าทายของการเล่นกอล์ฟเราจึงต้องการคำตอบทั้งหมดเพื่อพยายามลดจำนวน bytecount คุณสามารถทำได้ในวิธีที่คุณพูดถึง - การลบช่องว่างการย่อการขอร้อง ฯลฯ เมื่อคุณทำเสร็จแล้วให้เพิ่มส่วนหัวในคำตอบของคุณโดยให้ภาษาที่ใช้และจำนวนไบต์ และอย่าลังเลที่จะรักษาเวอร์ชันปัจจุบันของคุณไว้ข้างใต้ในฐานะที่เป็น "ungolfed"
DLosc

ทำไมคุณไม่สร้างฉากเกี่ยวกับโปรแกรม 358 ไบต์เช่นกัน?
xyz123
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.