Data update
This commit is contained in:
parent
35bcdeebf8
commit
74c69a0df6
2427 changed files with 31826 additions and 3468 deletions
10
Task/Align-columns/APL/align-columns.apl
Normal file
10
Task/Align-columns/APL/align-columns.apl
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
align←{
|
||||
left ← {⍺↑⍵}
|
||||
right ← {(-⍺)↑⍵}
|
||||
center ← {⍺↑(-⌊(≢⍵)+(⍺-≢⍵)÷2)↑⍵}
|
||||
text ← ⊃⎕NGET⍵
|
||||
words ← ((≠∘'$')⊆⊣)¨(~text∊⎕TC)⊆text
|
||||
sizes ← 1+⌈⌿↑≢¨¨words
|
||||
method ← ⍎⍺
|
||||
↑,/↑(⊂sizes)method¨¨↓↑words
|
||||
}
|
||||
|
|
@ -10,7 +10,7 @@ proc read . .
|
|||
.
|
||||
.
|
||||
.
|
||||
call read
|
||||
read
|
||||
#
|
||||
proc out mode . .
|
||||
for inp$ in inp$[]
|
||||
|
|
@ -40,11 +40,11 @@ proc out mode . .
|
|||
print ""
|
||||
.
|
||||
.
|
||||
call out 1
|
||||
out 1
|
||||
print ""
|
||||
call out 2
|
||||
out 2
|
||||
print ""
|
||||
call out 3
|
||||
out 3
|
||||
#
|
||||
input_data
|
||||
Given$a$text$file$of$many$lines,$where$fields$within$a$line$
|
||||
|
|
|
|||
58
Task/Align-columns/MiniScript/align-columns.mini
Normal file
58
Task/Align-columns/MiniScript/align-columns.mini
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
Alignment = {"left": -1, "center": 0, "right": 1}
|
||||
|
||||
Align = {}
|
||||
Align.load = function(contents)
|
||||
self.lines = contents.split(char(13))
|
||||
self.rows = []
|
||||
self.numColumns = 0
|
||||
for line in self.lines
|
||||
columns = line.split("$")
|
||||
if columns.len > self.numColumns then self.numColumns = columns.len
|
||||
self.rows.push(columns)
|
||||
end for
|
||||
|
||||
self.widths = []
|
||||
for col in range(0, self.numColumns - 1)
|
||||
maxWidth = 0
|
||||
for line in self.rows
|
||||
if col > line.len - 1 then continue
|
||||
if line[col].len > maxWidth then maxWidth = line[col].len
|
||||
end for
|
||||
self.widths.push(maxWidth)
|
||||
end for
|
||||
end function
|
||||
|
||||
Align.__getField = function(word, width, alignment)
|
||||
if alignment == Alignment.left then return (word + " " * width)[:width]
|
||||
if alignment == Alignment.right then return (" " * width+word)[-width:]
|
||||
if alignment == Alignment.center then
|
||||
leftMargin = floor((width - word.len) / 2)
|
||||
return (" " * leftMargin + word + " " * width)[:width]
|
||||
end if
|
||||
end function
|
||||
|
||||
Align.output = function(alignment)
|
||||
for line in self.rows
|
||||
for c in range(0, line.len - 1)
|
||||
print self.__getField(line[c], self.widths[c], alignment) + " ", ""
|
||||
end for
|
||||
print
|
||||
end for
|
||||
end function
|
||||
|
||||
txt = "Given$a$text$file$of$many$lines,$where$fields$within$a$line$" + char(13)
|
||||
txt += "are$delineated$by$a$single$'dollar'$character,$write$a$program" + char(13)
|
||||
txt += "that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$" + char(13)
|
||||
txt += "column$are$separated$by$at$least$one$space." + char(13)
|
||||
txt += "Further,$allow$for$each$word$in$a$column$to$be$either$left$" + char(13)
|
||||
txt += "justified,$right$justified,$or$center$justified$within$its$column."
|
||||
|
||||
Align.load(txt)
|
||||
print "Left alignment:"
|
||||
Align.output(Alignment.left)
|
||||
print
|
||||
print "Right alignment:"
|
||||
Align.output(Alignment.right)
|
||||
print
|
||||
print "Centered: "
|
||||
Align.output(Alignment.center)
|
||||
34
Task/Align-columns/SETL/align-columns.setl
Normal file
34
Task/Align-columns/SETL/align-columns.setl
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
program align;
|
||||
magic := false; $ turn off regexp matching in GNU SETL
|
||||
read_file;
|
||||
|
||||
ncols := max/[#line : line in lines];
|
||||
sizes := [1+max/[#(line(col) ? "") : line in lines] : col in [1..ncols]];
|
||||
|
||||
loop for line in lines do
|
||||
print(+/[align(line(col), sizes(col)) : col in [1..#line]]);
|
||||
end loop;
|
||||
|
||||
read_file::
|
||||
f := open(command_line(1), "r");
|
||||
lines := [];
|
||||
loop doing geta(f, line); while line /= om do
|
||||
lines with:= split(line, "$");
|
||||
end loop;
|
||||
close(f);
|
||||
|
||||
proc align(s, n);
|
||||
case command_line(2) of
|
||||
("r"): return lpad(s, n);
|
||||
("l"): return rpad(s, n);
|
||||
("c"): return center(s, n);
|
||||
end case;
|
||||
end proc;
|
||||
|
||||
proc center(s, n);
|
||||
padding := n - #s;
|
||||
l := " " * ceil(padding/2);
|
||||
r := " " * floor(padding/2);
|
||||
return l + s + r;
|
||||
end proc;
|
||||
end program;
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import "io" for File
|
||||
import "/fmt" for Fmt
|
||||
import "./fmt" for Fmt
|
||||
|
||||
var LEFT = 0
|
||||
var RIGHT = 1
|
||||
|
|
|
|||
57
Task/Align-columns/XPL0/align-columns.xpl0
Normal file
57
Task/Align-columns/XPL0/align-columns.xpl0
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
string 0;
|
||||
def LF=$0A, CR=$0D;
|
||||
def Left, Right, Center;
|
||||
|
||||
proc AlignCols(S); \Display string S with its columns aligned
|
||||
char S, C, Field(80), ColWidth(80);
|
||||
int I, J, N, Just;
|
||||
|
||||
proc Justify;
|
||||
int T;
|
||||
|
||||
proc SpOut(M); \Output M space characters
|
||||
int M, K;
|
||||
for K:= 0 to M-1 do ChOut(0, ^ );
|
||||
|
||||
proc FieldOut; \Output Field of N characters
|
||||
int K;
|
||||
for K:= 0 to N-1 do ChOut(0, Field(K));
|
||||
|
||||
[case Just of
|
||||
Left: [FieldOut(N); SpOut(ColWidth(J)-N+1)];
|
||||
Right: [SpOut(ColWidth(J)-N+1); FieldOut(N)];
|
||||
Center:[T:= ColWidth(J)-N+1;
|
||||
SpOut(T/2); FieldOut(N); SpOut(T/2 + rem(0))]
|
||||
other [];
|
||||
];
|
||||
|
||||
[\Get width (in characters) of each column
|
||||
for J:= 0 to 80-1 do ColWidth(J):= 0;
|
||||
I:= 0; J:= 0; N:= 0;
|
||||
loop [repeat C:= S(I); I:= I+1 until C # CR;
|
||||
if N > ColWidth(J) then ColWidth(J):= N;
|
||||
case C of
|
||||
0: quit;
|
||||
^$: [N:= 0; J:= J+1];
|
||||
LF: [N:= 0; J:= J+1; J:= 0]
|
||||
other N:= N+1;
|
||||
];
|
||||
for Just:= Left to Center do
|
||||
[I:= 0; J:= 0; N:= 0;
|
||||
loop [repeat C:= S(I); I:= I+1 until C # CR;
|
||||
case C of
|
||||
0: [Justify(Just); CrLf(0); quit];
|
||||
^$: [Justify(Just); N:= 0; J:= J+1];
|
||||
LF: [Justify(Just); CrLf(0); N:= 0; J:= 0]
|
||||
other [Field(N):= C; N:= N+1];
|
||||
];
|
||||
CrLf(0);
|
||||
];
|
||||
];
|
||||
|
||||
AlignCols("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.")
|
||||
Loading…
Add table
Add a link
Reference in a new issue