Add tasks for all the new languages

This commit is contained in:
Tina Müller 2016-12-05 23:44:36 +01:00
parent 9dc3c2bb62
commit bba7bfd280
13208 changed files with 134745 additions and 0 deletions

View file

@ -0,0 +1,11 @@
(define (FFR n)
(+ (FFR (1- n)) (FFS (1- n))))
(define (FFS n)
(define next (1+ (FFS (1- n))))
(for ((k (in-naturals next)))
#:break (not (vector-search* k (cache 'FFR))) => k
))
(remember 'FFR #(0 1)) ;; init cache
(remember 'FFS #(0 2))

View file

@ -0,0 +1,8 @@
(define-macro m-range [a .. b] (range a (1+ b)))
(map FFR [1 .. 10])
→ (1 3 7 12 18 26 35 45 56 69)
;; checking
(equal? [1 .. 1000] (list-sort < (append (map FFR [1 .. 40]) (map FFS [1 .. 960]))))
→ #t

View file

@ -0,0 +1,33 @@
var cr = @[1]
var cs = @[2]
proc extendRS =
let x = cr[cr.high] + cs[cr.high]
cr.add x
for y in cs[cs.high] + 1 .. <x: cs.add y
cs.add x + 1
proc ffr(n): int =
assert n > 0
while n > cr.len: extendRS()
cr[n - 1]
proc ffs(n): int =
assert n > 0
while n > cs.len: extendRS()
cs[n - 1]
for i in 1..10: stdout.write ffr i," "
echo ""
var bin: array[1..1000, int]
for i in 1..40: inc bin[ffr i]
for i in 1..960: inc bin[ffs i]
var all = true
for x in bin:
if x != 1:
all = false
break
if all: echo "All Integers 1..1000 found OK"
else: echo "All Integers 1..1000 NOT found only once: ERROR"

View file

@ -0,0 +1,21 @@
tvar: R
ListBuffer new 1 over add R put
tvar: S
ListBuffer new 2 over add S put
: buildnext
| r s current i |
R at ->r
S at ->s
r last r size s at + dup ->current r add
s last 1+ current 1- for: i [ i s add ]
current 1+ s add ;
: ffr(n)
while ( R at size n < ) [ buildnext ]
n R at at ;
: ffs(n)
while ( S at size n < ) [ buildnext ]
n S at at ;

View file

@ -0,0 +1,35 @@
var r = [nil, 1]
var s = [nil, 2]
func ffsr(n) {
while(r.end < n) {
r << s[r.end]+r[-1];
s << [(s[-1]+1 .. r[-1]-1)..., r[-1]+1].grep{ s[-1] < _ }...
}
return n;
}
func ffr(n) { r[ffsr(n)] }
func ffs(n) { s[ffsr(n)] }
printf(" i: R(i) S(i)\n");
printf("==============\n");
10.of { |i|
printf("%3d: %3d %3d\n", i, ffr(i), ffs(i))
}
printf("\nR(40)=%3d S(960)=%3d R(41)=%3d\n", ffr(40), ffs(960), ffr(41));
var seen = Hash()
40.of { |i| seen{ffr(i)} := 0 ++ }
960.of { |i| seen{ffs(i)} := 0 ++ }
if (seen.count {|k,v| (k.to_i >= 1) && (k.to_i <= 1000) && (v == 1) } == 1000) {
say "All occured exactly once.";
}
else {
var missed = (1..1000 -> grep { !seen.has_key(_) })
var dupped = seen.grep { |_, v| v > 1 }.keys.sort;
say "These were missed: #{missed}";
say "These were duplicated: #{dupped}";
}