Cetak tiga kolom secara vertikal dipisahkan oleh spasi

15

Tugas

  • Ambil string input yang dipisahkan oleh ruang.
  • Urutkan kata-kata berdasarkan abjad.
  • Cetak secara vertikal dalam 3 kolom yang dipisahkan oleh spasi.

Tantangan

  • Ketinggian tiga kolom harus seberat mungkin.
  • Ketiga kolom harus dibiarkan rata.

Ini adalah , jadi kode terpendek menang!

Contoh

Jika inputnya adalah:

"cat caterpillar pie frog elephant pizza", 

Outputnya harus:

cat         elephant pie
caterpillar frog     pizza

Waspadai kasus, jika inputnya adalah:

"a b c d e f g" 

Harus dicetak sebagai:

a c e
b d f
    g

# or

a d f
b e g
c

# and not

a d g
b e
c f
Satendra
sumber
2
Juga, saya akan merekomendasikan Anda menghapus persyaratan I / O yang ketat; yaitu, mengambil input sebagai daftar string dalam bentuk apa pun (seperti yang diinginkan penjawab) dan sebagai program atau fungsi yang mengambil daftar.
HyperNeutrino
Apakah dapat diterima untuk menampilkan ini sebagai contoh pertama?
caird coinheringaahing
4
@ Satendra Jangan khawatir tentang "tunggu sebentar di luar topik ...", ketika / jika pertanyaannya cukup bagus itu akan dibuka kembali. | Anda dapat mempertimbangkan menggunakan kotak pasir.
user202729
3
Silakan pertimbangkan menggunakan Sandbox di masa depan untuk mendapatkan umpan balik tentang tantangan Anda sebelum mempostingnya ke situs utama.
Mego
1
@ Satat Tantangan pertama yang bagus. Jika kolom harus dipisahkan oleh spasi tunggal di celah tersempit, Anda harus menyatakannya.
Adám

Jawaban:

4

Sekam , 24 17 byte

TmoTT' §CȯmLTC3Ow

Cobalah online!

Penjelasan

Ini adalah tantangan yang sangat sulit, karena Husk saat ini tidak memiliki builtin untuk memecah daftar menjadi sejumlah bagian tertentu.

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.
Zgarb
sumber
2

Jeli , 6 byte

Ṣœs3ZG

Cobalah online!

Erik the Outgolfer
sumber
@Dosc itu sebenarnya sudah diuji dengan a b c d e f gkasus ini, dan saya melakukan tes ekstensif lainnya karena saya juga punya perasaan itu. Oh, dan kependekannya berasal dari G(Format as G rid.) Builtin.
Erik the Outgolfer
Ah, ada builtin. (Mengapa saya terkejut?) Itu menjelaskan banyak hal.
DLosc
2

Python 3 , 148 byte

-6 byte berkat ovs.

l=sorted(input().split())
n=-~len(l)//3
f=lambda l:[i.ljust(max(map(len,l)))for i in l+['']]
for i in zip(f(l[:n]),f(l[n:n*2]),f(l[n*2:])):print(*i)

Cobalah online!

Mengkhawatirkannya. Semua yang saya coba membuat hasilnya miring ...

benar-benar manusiawi
sumber
1
148 byte menggunakan python 3.
ovs
1

Mathematica, 115 byte

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

coba di wolfram sandbox

rekatkan kode berikut dan tekan shift + enter

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

Perl 5 , 134 +1 ( -a) = 135 byte

$.=(sort{$b=~y///c-length$a}(@F=sort@F))[0]=~y///c;@a=splice@F,0,@F/3;@b=splice@F,0,@F/2;printf"%-$.s "x3 .$/,shift@a,shift@b,$_ for@F

Cobalah online!

Xcali
sumber
Apa artinya?
xyz123
1

05AB1E , 8 byte

#{.B3äζ»

Cobalah online!


#        | Split on spaces.
 {       | Sort aphabetically.
  .B     | Pad to max string length.
    3ä   | Split into columns.
      ζ  | Transpose.
       » | Print with newlines.
Guci Gurita Ajaib
sumber
1

Javascript 181 175 byte

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`

*/

DanielIndie
sumber
0

J , 73 byte

,.@(' ',"1[:>|:)@((](s,(s=.]{.1:),(1:{.~[-2*]))([:<.0.5+%&3))@#];.1])@/:~

Saya bisa menjelaskan kekacauan ini nanti jika seseorang tertarik.

Cobalah online!

Galen Ivanov
sumber
0

Arang , 65 64 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Simpan 2 byte jika saya tidak harus menangani kasus kurang dari 3 kata. Mungkin ada "eval" penyortiran yang harus saya gunakan ... Penjelasan:

≔⪪θ η

Pisahkan input pada spasi.

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

Sortir susunannya.

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

Ulangi lebih dari tiga irisan array yang kira-kira sama. ( I1seharusnya benar-benar ¦¹.)

P⪫ι¶

Gabungkan irisan dengan baris baru dan cetak tanpa menggerakkan kursor.

¿ιM⊕⌈EιLκ→

Jika irisan tidak kosong maka gerakkan ke kanan dengan satu lebih dari panjang kata terpanjang dalam irisan.

Neil
sumber
0

358 byte JS yang diperkecil:

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

jamespgilbert
sumber
@StephenLeppik np
jamespgilbert
0

GNU sed , 92 + 1 = 93 byte

+1 byte untuk -r bendera.

Saya belum bermain golf ini sama sekali, tetapi ternyata jauh lebih sederhana dari yang saya harapkan.

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

Cobalah online!

Yordania
sumber
-1

Bourne shell, 172 byte

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

Lebih mudah dibaca jika diformat secara konvensional:

#! /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

Pada harga pemindaian input sekali per kolom, ia tidak menggunakan array. Program awk yang lebih kompleks dapat membuka 3 file (satu untuk setiap kata ke-N), memproses input dalam satu pass. Kemudian mereka dapat digabungkan dan dicetak menggunakan baris terakhir yang sama.

Variabel Ntidak benar-benar dibutuhkan; untuk harga 4 byte, kami menyimpan pemindaian input 3 kali lebih banyak.

James K. Lowden
sumber
2
Selamat datang di PPCG! Karena ini adalah tantangan kode golf, kami memerlukan semua jawaban untuk berupaya meminimalkan bytecount. Anda dapat melakukannya persis seperti yang Anda sebutkan - menghapus spasi, mempersingkat permintaan, dll. Setelah melakukannya, tambahkan header ke jawaban Anda dengan memberikan bahasa yang digunakan dan jumlah byte. Dan jangan ragu untuk menyimpan versi Anda saat ini di bawahnya sebagai solusi "ungolfed".
DLosc
Mengapa Anda juga tidak membuat keributan tentang program 358 byte?
xyz123