Роздрукуйте три стовпчики, вертикально розділені пробілами


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
Також я рекомендую вам зняти сувору вимогу вводу / виводу; тобто приймати введення як список рядків у будь-якій формі (як відповідає відповідь) та як програма чи функція, що приймає список.
HyperNeutrino

Чи прийнятно виводити це для першого прикладу?
caird coinheringaahing

4
@Satendra Не турбуйтеся про "затримане як поза темою ...", коли / якщо питання буде достатньо хорошим, воно буде знову відкрито. | Можна розглянути можливість використання пісочниці.
користувач202729

3
Будь ласка, подумайте про використання пісочниці в майбутньому, щоб отримати зворотній зв'язок щодо ваших проблем, перш ніж надсилати їх на головний сайт.
Мего

1
@Satendra Nice перший виклик. Якщо стовпці повинні бути розділені одним пробілом на найвужчому проміжку, слід вказати так.
Adám

Відповіді:


4

Лушпиння , 24 17 байт

TmoTT' §CȯmLTC3Ow

Спробуйте в Інтернеті!

Пояснення

Це було напрочуд складним завданням, оскільки Хеску в даний час не вистачає вбудованих даних для розбиття списку на задану кількість частин.

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

@DLosc Насправді це теж було перевірено a b c d e f g, і я робив інші обширні тести, тому що в мене теж було таке відчуття спочатку. О, і його стислість походить від вбудованого G(Формат як G rid.) Вбудованого.
Ерік Аутгольфер

Ах, є вбудований. (Чому я здивований?) Це багато що пояснює.
DLosc

2

Python 3 , 148 байт

-6 байт завдяки ов.

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)

Спробуйте в Інтернеті!

Працюючи над цим. Все, що я спробував, робить висновок недоотриманим ...


1
148 байт, використовуючи python 3.
пн

1

Математика, 115 байт

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

спробувати його на пісочниці Wolfram

вставте наступний код і натисніть 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 файли (по одному на кожне N-е слово), обробляючи вхід за один прохід. Потім їх можна було з'єднати та роздрукувати, використовуючи той самий останній рядок.

Змінна теж Nкатегорично не потрібна; за ціною 4 байти, ми економимо скануючи вхід ще 3 рази.


2
Ласкаво просимо до PPCG! Оскільки це проблема з кодовим гольфом, нам потрібні всі відповіді, щоб докласти зусиль, щоб мінімізувати кількість рахунків. Це можна зробити саме тими способами, які ви згадали - видалення пробілів, скорочення викликів тощо. Після цього додайте заголовок до своєї відповіді, вказуючи використану мову та кількість байтів. І не соромтесь тримати під собою свою поточну версію, як "нелітені" рішення.
DLosc

Чому ви також не створюєте сцену з програмою 358 байт?
xyz123
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.