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,35 @@
PROGRAM HOFSTADER_Q
!
! for rosettacode.org
!
DIM Q%[10000]
PROCEDURE QSEQUENCE(Q,FLAG%->SEQ$)
! if FLAG% is true accumulate sequence in SEQ$
! (attention to string var lenght=255)
! otherwise calculate values in Q%[] only
LOCAL N
Q%[1]=1
Q%[2]=1
SEQ$="1 1"
IF NOT FLAG% THEN Q=NUM END IF
FOR N=3 TO Q DO
Q%[N]=Q%[N-Q%[N-1]]+Q%[N-Q%[N-2]]
IF FLAG% THEN SEQ$=SEQ$+STR$(Q%[N]) END IF
END FOR
END PROCEDURE
BEGIN
NUM=10000
QSEQUENCE(10,TRUE->SEQ$)
PRINT("Q-sequence(1..10) : ";SEQ$)
QSEQUENCE(1000,FALSE->SEQ$)
PRINT("1000th number of Q sequence : ";Q%[1000])
FOR N=2 TO NUM DO
IF Q%[N]<Q%[N-1] THEN NN+=1 END IF
END FOR
PRINT("Number of Q(n)<Q(n+1) for n<=10000 : ";NN)
END PROGRAM

View file

@ -0,0 +1,23 @@
(define RECURSE_BUMP 500) ;; minimum of chrome:500 safari:1000 firefox:2000
;; count flips
(define (flips N)
(for/sum ((n (in-range 2 (1+ N))))
#:when (< (Q n) (Q (1- n))) 1))
(cache-size 120000)
(define (Q n)
;; prevent browser stack overflow at low-cost
(when (zero? (modulo n RECURSE_BUMP)) (for ((i (in-range 0 n RECURSE_BUMP ))) (Q i)))
(+ (Q (- n (Q (1- n)))) (Q (- n (Q (- n 2))))))
(remember 'Q #(1 1 1)) ;; memoize and init
;; first call : check stack OK
(Q 100000) → 48157
(for ((i 11)) (write (Q i)))
1 1 1 2 3 3 4 5 5 6 6
(Q 1000) → 502
(flips 100000) → 49798

View file

@ -0,0 +1,14 @@
var q = @[1, 1]
for n in 2 .. <100_000: q.add q[n-q[n-1]] + q[n-q[n-2]]
echo q[0..9]
assert q[0..9] == @[1, 1, 2, 3, 3, 4, 5, 5, 6, 6]
echo q[999]
assert q[999] == 502
var lessCount = 0
for n in 1 .. <100_000:
if q[n] < q[n-1]:
inc lessCount
echo lessCount

View file

@ -0,0 +1,8 @@
: QSeqTask
| q i |
ListBuffer newSize(100000) dup add(1) dup add(1) ->q
0 3 100000 for: i [
q add(q at(i q at(i 1-) -) q at(i q at(i 2 -) -) +)
q at(i) q at(i 1-) < ifTrue: [ 1+ ]
]
q left(10) println q at(1000) println println ;

View file

@ -0,0 +1,8 @@
n = 20
aList = list(n)
aList[1] = 1
aList[2] = 1
for i = 1 to n
if i >= 3 aList[i] = ( aList[i - aList[i-1]] + aList[i - aList[i-2]] ) ok
if i <= 20 see "n = " + string(i) + " : "+ aList[i] + nl ok
next

View file

@ -0,0 +1,8 @@
func Q(n) is cached {
n <= 2 ? 1
: Q(n - Q(n-1))+Q(n-Q(n-2))
}
say "First 10 terms: #{10.of {|n| Q(n) }.dump }"
say "Term 1000: #{Q(1000)}"
say "Terms less than preceding in first 100k: #{2..100000->count{|i|Q(i)<Q(i-1)}}"

View file

@ -0,0 +1,8 @@
var Q = [0, 1, 1];
100_000.times {
Q << (Q[-Q[-1]] + Q[-Q[-2]])
}
say "First 10 terms: #{Q.ft(1, 10).dump}"
say "Term 1000: #{Q[1000]}"
say "Terms less than preceding in first 100k: #{2..100000->count{|i|Q[i]<Q[i-1]}}"

View file

@ -0,0 +1,28 @@
LOCAL p As Integer, i As Integer
CLEAR
p = 0
? "Hofstadter Q Sequence"
? "First 10 terms:"
FOR i = 1 TO 10
?? Q(i, @p)
ENDFOR
? "1000th term:", Q(1000, @p)
? "100000th term:", q(100000, @p)
? "Number of terms less than the preceding term:", p
FUNCTION Q(n As Integer, k As Integer) As Integer
LOCAL i As Integer
LOCAL ARRAY aq[n]
aq[1] = 1
IF n > 1
aq[2] = 1
ENDIF
k = 0
FOR i = 3 TO n
aq[i] = aq[i - aq[i-1]] + aq[i-aq[i-2]]
IF aq(i) < aq(i-1)
k = k + 1
ENDIF
ENDFOR
RETURN aq[n]
ENDFUNC

View file

@ -0,0 +1,28 @@
# For n>=2, Q(n) = Q(n - Q(n-1)) + Q(n - Q(n-2))
def Q:
def Q(n):
n as $n
| (if . == null then [1,1,1] else . end) as $q
| if $q[$n] != null then $q
else
$q | Q($n-1) as $q1
| $q1 | Q($n-2) as $q2
| $q2 | Q($n - $q2[$n - 1]) as $q3 # Q(n - Q(n-1))
| $q3 | Q($n - $q3[$n - 2]) as $q4 # Q(n - Q(n-2))
| ($q4[$n - $q4[$n-1]] + $q4[$n - $q4[$n -2]]) as $ans
| $q4 | setpath( [$n]; $ans)
end ;
. as $n | null | Q($n) | .[$n];
# count the number of times Q(i) > Q(i+1) for 0 < i < n
def flips(n):
(reduce range(3; n) as $n
([1,1,1]; . + [ .[$n - .[$n-1]] + .[$n - .[$n - 2 ]] ] )) as $q
| reduce range(0; n) as $i
(0; . + (if $q[$i] > $q[$i + 1] then 1 else 0 end)) ;
# The three tasks:
((range(0;11), 1000) | "Q(\(.)) = \( . | Q)"),
(100000 | "flips(\(.)) = \(flips(.))")

View file

@ -0,0 +1,20 @@
$ uname -a
Darwin Mac-mini 13.3.0 Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu-2422.110.17~1/RELEASE_X86_64 x86_64
$ time jq -r -n -f hofstadter.jq
Q(0) = 1
Q(1) = 1
Q(2) = 1
Q(3) = 2
Q(4) = 3
Q(5) = 3
Q(6) = 4
Q(7) = 5
Q(8) = 5
Q(9) = 6
Q(10) = 6
Q(1000) = 502
flips(100000) = 49798
real 0m0.562s
user 0m0.541s
sys 0m0.011s