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

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.

2

Jeli , 6 byte

Ṣœs3ZG

Cobalah online!


@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 ...


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"]

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!


Apa artinya?
xyz123


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`

*/


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!


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.


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


@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!


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.