In ba cột cách nhau theo không gian theo chiều dọc


15

Bài tập

  • Lấy chuỗi đầu vào cách nhau bởi khoảng trắng.
  • Sắp xếp các từ theo thứ tự abc.
  • In chúng ra theo chiều dọc trong 3 cột cách nhau bởi khoảng trắng.

Thử thách

  • Tất cả các chiều cao của ba cột phải có trọng số càng lớn càng tốt.
  • Tất cả ba cột phải được căn trái.

Đây là , vì vậy mã ngắn nhất sẽ thắng!

Thí dụ

Nếu đầu vào là:

"cat caterpillar pie frog elephant pizza", 

Đầu ra phải là:

cat         elephant pie
caterpillar frog     pizza

Xin hãy cẩn thận với các trường hợp, nếu đầu vào là:

"a b c d e f g" 

Nên được in là:

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
Ngoài ra, tôi khuyên bạn nên loại bỏ yêu cầu I / O nghiêm ngặt; nghĩa là lấy đầu vào làm danh sách các chuỗi dưới bất kỳ hình thức nào (như người trả lời muốn) và như một chương trình hoặc hàm lấy danh sách.
HyperNeutrino

Có thể chấp nhận đầu ra này cho ví dụ đầu tiên?
caird coinheringaahing

4
@Satendra Đừng lo lắng về việc "tạm dừng là ngoài chủ đề ...", khi / nếu câu hỏi đủ tốt, nó sẽ được mở lại. | Bạn có thể xem xét sử dụng hộp cát.
dùng202729

3
Vui lòng xem xét việc sử dụng Sandbox trong tương lai để nhận phản hồi về các thách thức của bạn trước khi đăng chúng lên trang web chính.
Mego

1
@Satendra Thử thách đầu tiên tốt đẹp. Nếu các cột phải được phân tách bằng một khoảng trắng ở khoảng cách hẹp nhất, bạn nên nêu rõ như vậy.
Adám

Câu trả lời:


4

Husk , 24 17 byte

TmoTT' §CȯmLTC3Ow

Hãy thử trực tuyến!

Giải trình

Đây là một thử thách khó khăn đáng ngạc nhiên, vì Husk hiện thiếu một bản dựng để chia danh sách thành một số phần nhất định.

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

Thạch , 6 byte

Ṣœs3ZG

Hãy thử trực tuyến!


@DLosc Nó thực sự đã được thử nghiệm với a b c d e f gtrường hợp này và tôi đã làm các xét nghiệm mở rộng khác vì tôi cũng có cảm giác đó trước tiên. Ồ, và sự ngắn gọn của nó đến từ nội dung G(Định dạng như G thoát.).
Erik the Outgolfer

À, có một tích hợp. (Tại sao tôi ngạc nhiên?) Điều đó giải thích rất nhiều.
DLosc

2

Python 3 , 148 byte

-6 byte nhờ vào các lò nướng.

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)

Hãy thử trực tuyến!

Làm việc với nó. Tất cả mọi thứ tôi đã thử làm cho đầu ra bị mất ...


1
148 byte sử dụng python 3.
ovs

1

Toán học, 115 byte

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

Hãy thử nó trên hộp cát wolfram

dán đoạn mã sau và nhấn shift + enter

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

1
@HalvardHummel đã sửa
J42161217



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

Than , 65 64 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Lưu 2 byte nếu tôi không phải xử lý trường hợp ít hơn 3 từ. Có lẽ tôi nên sử dụng một "eval" sắp xếp ... Giải thích:

≔⪪θ η

Tách đầu vào trên không gian.

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

Sắp xếp mảng.

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

Vòng lặp trên ba lát xấp xỉ bằng nhau của mảng. ( I1nên thực sự là vậy ¦¹.)

P⪫ι¶

Tham gia lát cắt với dòng mới và in nó mà không di chuyển con trỏ.

¿ιM⊕⌈EιLκ→

Nếu lát cắt không trống thì di chuyển sang phải nhiều hơn độ dài của từ dài nhất trong lát.


0

358 byte của mã hóa tối thiểu:

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



0

GNU sed , 92 + 1 = 93 byte

+1 byte cho -r cờ.

Tôi đã không đánh golf cái này chút nào, nhưng hóa ra nó đơn giản hơn tôi tưởng rất nhiều.

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

Hãy thử trực tuyến!


-1

Vỏ Bourne, 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

Nó dễ đọc hơn nếu được định dạng theo quy ước:

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

Ở mức giá quét đầu vào một lần trên mỗi cột, nó không sử dụng mảng nào. Một chương trình awk phức tạp hơn có thể mở 3 tệp (một cho mỗi từ thứ N), xử lý đầu vào trong một lần. Sau đó, chúng có thể được nối và in bằng cách sử dụng cùng một dòng cuối cùng.

Biến Ncũng không thực sự cần thiết; với giá 4 byte, chúng tôi tiết kiệm quét thêm 3 lần nữa.


2
Chào mừng đến với PPCG! Vì đây là một thử thách golf mã, chúng tôi yêu cầu tất cả các câu trả lời để nỗ lực giảm thiểu số lượng người chơi. Bạn có thể làm điều đó theo chính xác những cách bạn đã đề cập - xóa khoảng trắng, rút ​​ngắn các yêu cầu, v.v. Và hãy thoải mái giữ phiên bản hiện tại của bạn bên dưới như một giải pháp "không có căn cứ".
DLosc

Tại sao bạn không thực hiện một cảnh về chương trình 358 byte?
xyz123
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.