Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
35
Task/Hofstadter-Q-sequence/ERRE/hofstadter-q-sequence.erre
Normal file
35
Task/Hofstadter-Q-sequence/ERRE/hofstadter-q-sequence.erre
Normal 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
|
||||
|
|
@ -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
|
||||
14
Task/Hofstadter-Q-sequence/Nim/hofstadter-q-sequence.nim
Normal file
14
Task/Hofstadter-Q-sequence/Nim/hofstadter-q-sequence.nim
Normal 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
|
||||
|
|
@ -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 ;
|
||||
|
|
@ -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
|
||||
|
|
@ -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)}}"
|
||||
|
|
@ -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]}}"
|
||||
|
|
@ -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
|
||||
28
Task/Hofstadter-Q-sequence/jq/hofstadter-q-sequence-1.jq
Normal file
28
Task/Hofstadter-Q-sequence/jq/hofstadter-q-sequence-1.jq
Normal 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(.))")
|
||||
20
Task/Hofstadter-Q-sequence/jq/hofstadter-q-sequence-2.jq
Normal file
20
Task/Hofstadter-Q-sequence/jq/hofstadter-q-sequence-2.jq
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue