Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
40
Task/Nth/BCPL/nth.bcpl
Normal file
40
Task/Nth/BCPL/nth.bcpl
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
get "libhdr"
|
||||
|
||||
// Generate ASCII string of number n with ordinal suffix
|
||||
// The string is stored at v.
|
||||
let nth(n, v) = valof
|
||||
$( let sfx = "thstndrd"
|
||||
let c, s = 0, ?
|
||||
// Generate digits
|
||||
$( c := c + 1
|
||||
v%c := n rem 10 + '0'
|
||||
n := n / 10
|
||||
$) repeatuntil n = 0
|
||||
|
||||
// Put digits in correct order
|
||||
for i = 1 to c/2 do
|
||||
$( let d = v%i
|
||||
v%i := v%(c+1-i)
|
||||
v%(c+1-i) := d
|
||||
$)
|
||||
|
||||
// The length of the string is the amount of digits + 2
|
||||
v%0 := c+2;
|
||||
|
||||
// Figure out the proper suffix from the last two digits
|
||||
test v%(c-1)='1' | v%c>'3'
|
||||
then s := 0
|
||||
else s := 2*(v%c - '0')
|
||||
|
||||
v%(c+1) := sfx%(s+1)
|
||||
v%(c+2) := sfx%(s+2)
|
||||
|
||||
resultis v
|
||||
$)
|
||||
|
||||
let start() be
|
||||
$( let buf = vec 10
|
||||
for i = 0 to 25 do writef("%S*N", nth(i, buf))
|
||||
for i = 250 to 265 do writef("%S*N", nth(i, buf))
|
||||
for i = 1000 to 1025 do writef("%S*N", nth(i, buf))
|
||||
$)
|
||||
Loading…
Add table
Add a link
Reference in a new issue