RosettaCodeData/Task/Align-columns/Uiua/align-columns.uiua
2024-10-16 18:07:41 -07:00

16 lines
880 B
Text

# Split the text at $ and then justify each word 3 ways
N ← {"Given$a$text$file$of$many$lines,$where$fields$within$a$line$"
"are$delineated$by$a$single$'dollar'$character,$write$a$program"
"that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$"
"column$are$separated$by$at$least$one$space."
"Further,$allow$for$each$word$in$a$column$to$be$either$left$"
"justified,$right$justified,$or$center$justified$within$its$column."}
Ls ← ≡⍚(⊜□≠@$.) # Get the word arrays.
PadC ← ↻:⊙(⌊÷2-)⊃(⬚@ ↙|⊙⧻) # Pad centre.
Pad! ← ≡/◇⊂⍉≡≡⍚^! # Apply a padding function to all.
Prep ← (
≡◇⬚""↙/↥≡◇⧻. # Pad each row to same length.
+1≡◇(/↥≡◇⧻).⍉ # Find required length for each column.
)
≡(&p/$"_\n_")[⊃(Pad!⬚@ ↙|Pad!(⬚@ ↙¯)|Pad!PadC)] Prep Ls N