Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
46
Task/Align-columns/Picat/align-columns.picat
Normal file
46
Task/Align-columns/Picat/align-columns.picat
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
import util.
|
||||
|
||||
main =>
|
||||
Text =
|
||||
"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.",
|
||||
Lines = split(Text,"\n"),
|
||||
Lines = [Line1|_],
|
||||
N = len(split(strip(Line1,"$ "), "$")), % number of columns
|
||||
WidthArr = {0 : _ in 1..N},
|
||||
foreach (Line in Lines)
|
||||
Words = split(strip(Line,"$ "), "$"),
|
||||
foreach ({I,Word} in zip(1..N, Words))
|
||||
WidthArr[I] := max(WidthArr[I], len(Word))
|
||||
end
|
||||
end,
|
||||
foreach (I in 1..N)
|
||||
WidthArr[I] := WidthArr[I]+1 % separate cols by at least one space
|
||||
end,
|
||||
foreach (Align in [left, right, center])
|
||||
output_lines(Lines,N,WidthArr,Align),
|
||||
nl,nl
|
||||
end.
|
||||
|
||||
output_lines(Lines,N,WidthArr,Align) =>
|
||||
foreach (Line in Lines)
|
||||
Words = split(strip(Line,"$ "), "$"),
|
||||
foreach ({I,Word} in zip(1..N, Words))
|
||||
output_word(Word,WidthArr[I],Align)
|
||||
end,
|
||||
nl
|
||||
end.
|
||||
|
||||
output_word(Word,Width,left) =>
|
||||
printf("%-*s",Width,Word).
|
||||
output_word(Word,Width,right) =>
|
||||
printf("%*s",Width,Word).
|
||||
output_word(Word,Width,_) =>
|
||||
Pad = len(Word)-Width,
|
||||
Pad1 is Pad div 2,
|
||||
Pad2 is Pad-Pad1,
|
||||
printf("%*s%s%*s",Pad1,"",Word,Pad2,"").
|
||||
Loading…
Add table
Add a link
Reference in a new issue