Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
|
|
@ -1,24 +1,16 @@
|
|||
#!/usr/local/bin/a68g --script #
|
||||
|
||||
INT n = 100000;
|
||||
main:
|
||||
(
|
||||
INT flip;
|
||||
[n]INT q;
|
||||
BEGIN
|
||||
[100000]INT q;
|
||||
|
||||
INT flips := 0;
|
||||
q[1] := q[2] := 1;
|
||||
|
||||
FOR i FROM 3 TO n DO
|
||||
q[i] := q[i - q[i - 1]] + q[i - q[i - 2]] OD;
|
||||
FOR i FROM 3 TO UPB q DO
|
||||
q[i] := q[i - q[i - 1]] + q[i - q[i - 2]];
|
||||
IF q[i] < q[i - 1] THEN flips +:= 1 FI
|
||||
OD;
|
||||
|
||||
FOR i TO 10 DO
|
||||
printf(($g(0)$, q[i], $b(l,x)$, i = 10)) OD;
|
||||
print((whole(q[i],0), IF i = 10 THEN newline ELSE space FI)) OD;
|
||||
|
||||
printf(($g(0)l$, q[1000]));
|
||||
|
||||
flip := 0;
|
||||
FOR i TO n-1 DO
|
||||
flip +:= ABS (q[i] > q[i + 1]) OD;
|
||||
|
||||
printf(($"flips: "g(0)l$, flip))
|
||||
)
|
||||
print((whole(q[1000],0), newline));
|
||||
print(("flips: ", whole(flips,0), newline))
|
||||
END
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
_limit = 100000
|
||||
|
||||
Long Q(_limit), i, count = 0
|
||||
|
||||
Q(1) = 1
|
||||
Q(2) = 1
|
||||
For i = 3 To _limit
|
||||
Q(i) = Q(i-Q(i-1)) + Q(i-Q(i-2))
|
||||
If Q(i) < Q(i-1) Then count += 1
|
||||
Next i
|
||||
|
||||
Print "First 10 elements:";
|
||||
For i = 1 To 10
|
||||
Print str$(Q(i)) + " ";
|
||||
Next i
|
||||
Print
|
||||
Print "Q(1000) is "; Q(1000)
|
||||
Print "There were" + str$(count) + " inversions"
|
||||
handleevents
|
||||
|
|
@ -1,21 +1,13 @@
|
|||
import Data.Array
|
||||
douglasHofstadter :: Int -> [Int]
|
||||
douglasHofstadter m = reverse (dSeqEffect [1,1] 2 m)
|
||||
where
|
||||
dSeqEffect xs n m | n > m = xs
|
||||
| otherwise = dSeqEffect (((xs !! (xs !! (n - 1))) + (xs !! (n - (xs !! (n - 1)))) ) : xs) (n + 1) m
|
||||
|
||||
qSequence n = arr
|
||||
where
|
||||
arr = listArray (1,n) $ 1:1: map g [3..n]
|
||||
g i = arr!(i - arr!(i-1)) +
|
||||
arr!(i - arr!(i-2))
|
||||
-- main
|
||||
getIntArg :: IO Int
|
||||
getIntArg = fmap (read . head) getArgs
|
||||
|
||||
gradualth m k arr -- gradually precalculate m-th item
|
||||
| m <= v = pre `seq` arr!m -- in steps of k
|
||||
where -- to prevent STACK OVERFLOW
|
||||
pre = foldl1 (\a b-> a `seq` arr!b) [u,u+k..m]
|
||||
(u,v) = bounds arr
|
||||
|
||||
qSeqTest m n = let arr = qSequence $ max m n in
|
||||
( take 10 . elems $ arr -- 10 first items
|
||||
, gradualth m 10000 $ arr -- m-th item
|
||||
, length . filter (> 0) -- reversals in n items
|
||||
. _S (zipWith (-)) tail . take n . elems $ arr )
|
||||
|
||||
_S f g x = f x (g x)
|
||||
main = do
|
||||
args <- getIntArg
|
||||
print (douglasHofstadter args)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,21 @@
|
|||
Prelude Main> qSeqTest 1000 100000 -- reversals in 100,000
|
||||
([1,1,2,3,3,4,5,5,6,6],502,49798)
|
||||
(0.09 secs, 18879708 bytes)
|
||||
import Data.Array
|
||||
|
||||
Prelude Main> qSeqTest 1000000 100000 -- 1,000,000-th item
|
||||
([1,1,2,3,3,4,5,5,6,6],512066,49798)
|
||||
(2.80 secs, 87559640 bytes)
|
||||
qSequence n = arr
|
||||
where
|
||||
arr = listArray (1,n) $ 1:1: map g [3..n]
|
||||
g i = arr!(i - arr!(i-1)) +
|
||||
arr!(i - arr!(i-2))
|
||||
|
||||
gradualth m k arr -- gradually precalculate m-th item
|
||||
| m <= v = pre `seq` arr!m -- in steps of k
|
||||
where -- to prevent STACK OVERFLOW
|
||||
pre = foldl1 (\a b-> a `seq` arr!b) [u,u+k..m]
|
||||
(u,v) = bounds arr
|
||||
|
||||
qSeqTest m n = let arr = qSequence $ max m n in
|
||||
( take 10 . elems $ arr -- 10 first items
|
||||
, gradualth m 10000 $ arr -- m-th item
|
||||
, length . filter (> 0) -- reversals in n items
|
||||
. _S (zipWith (-)) tail . take n . elems $ arr )
|
||||
|
||||
_S f g x = f x (g x)
|
||||
|
|
|
|||
|
|
@ -1,16 +1,7 @@
|
|||
q = qq (listArray (1,2) [1,1]) 1 where
|
||||
qq ar n = (arr!n) : qq arr (n+1) where
|
||||
l = snd (bounds ar)
|
||||
step n =arr!(n - (fromIntegral (arr!(n - 1)))) +
|
||||
arr!(n - (fromIntegral (arr!(n - 2))))
|
||||
arr :: Array Int Integer
|
||||
arr | n <= l = ar
|
||||
| otherwise = listArray (1, l*2)$
|
||||
([ar!i | i <- [1..l]] ++
|
||||
[step i | i <- [l+1..l*2]])
|
||||
Prelude Main> qSeqTest 1000 100000 -- reversals in 100,000
|
||||
([1,1,2,3,3,4,5,5,6,6],502,49798)
|
||||
(0.09 secs, 18879708 bytes)
|
||||
|
||||
main = do
|
||||
putStr("first 10: "); print (take 10 q)
|
||||
putStr("1000-th: "); print (q !! 999)
|
||||
putStr("flips: ")
|
||||
print $ length $ filter id $ take 100000 (zipWith (>) q (tail q))
|
||||
Prelude Main> qSeqTest 1000000 100000 -- 1,000,000-th item
|
||||
([1,1,2,3,3,4,5,5,6,6],512066,49798)
|
||||
(2.80 secs, 87559640 bytes)
|
||||
|
|
|
|||
|
|
@ -1,21 +1,16 @@
|
|||
import Data.Array
|
||||
import Data.Int (Int64)
|
||||
q = qq (listArray (1,2) [1,1]) 1 where
|
||||
qq ar n = (arr!n) : qq arr (n+1) where
|
||||
l = snd (bounds ar)
|
||||
step n =arr!(n - (fromIntegral (arr!(n - 1)))) +
|
||||
arr!(n - (fromIntegral (arr!(n - 2))))
|
||||
arr :: Array Int Integer
|
||||
arr | n <= l = ar
|
||||
| otherwise = listArray (1, l*2)$
|
||||
([ar!i | i <- [1..l]] ++
|
||||
[step i | i <- [l+1..l*2]])
|
||||
|
||||
q = qq [listArray (1,2) [1,1]] 1 where
|
||||
qq a n = seek aa n : qq aa (1 + n) where
|
||||
aa | n <= l = a
|
||||
| otherwise = listArray (l+1,l*2) (take l $ drop 2 lst):a
|
||||
where
|
||||
l = snd (bounds $ head a)
|
||||
lst = seek a (l-1):seek a l:(ext lst (l+1))
|
||||
ext (q1:q2:qs) i = (g (i-q2) + g (i-q1)):ext (q2:qs) (1+i)
|
||||
g = seek aa
|
||||
seek (ar:ars) n
|
||||
| n >= fst (bounds ar) = ar ! n
|
||||
| otherwise = seek ars n
|
||||
|
||||
-- Only a perf test. Task can be done exactly the same as above
|
||||
main = print $ sum qqq
|
||||
where
|
||||
qqq :: [Int64]
|
||||
qqq = map fromIntegral $ take 3000000 q
|
||||
main = do
|
||||
putStr("first 10: "); print (take 10 q)
|
||||
putStr("1000-th: "); print (q !! 999)
|
||||
putStr("flips: ")
|
||||
print $ length $ filter id $ take 100000 (zipWith (>) q (tail q))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
import Data.Array
|
||||
import Data.Int (Int64)
|
||||
|
||||
q = qq [listArray (1,2) [1,1]] 1 where
|
||||
qq a n = seek aa n : qq aa (1 + n) where
|
||||
aa | n <= l = a
|
||||
| otherwise = listArray (l+1,l*2) (take l $ drop 2 lst):a
|
||||
where
|
||||
l = snd (bounds $ head a)
|
||||
lst = seek a (l-1):seek a l:(ext lst (l+1))
|
||||
ext (q1:q2:qs) i = (g (i-q2) + g (i-q1)):ext (q2:qs) (1+i)
|
||||
g = seek aa
|
||||
seek (ar:ars) n
|
||||
| n >= fst (bounds ar) = ar ! n
|
||||
| otherwise = seek ars n
|
||||
|
||||
-- Only a perf test. Task can be done exactly the same as above
|
||||
main = print $ sum qqq
|
||||
where
|
||||
qqq :: [Int64]
|
||||
qqq = map fromIntegral $ take 3000000 q
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
fun Q(n: Int): List<Int> {
|
||||
val mem = mutableMapOf<Int, Int>().also {
|
||||
it[1] = 1
|
||||
it[2] = 1
|
||||
}
|
||||
q(n, mem)
|
||||
return mem.values.toList()
|
||||
}
|
||||
|
||||
private fun q(n: Int, mem: MutableMap<Int, Int>): Int {
|
||||
if (!mem.containsKey(n)) {
|
||||
mem[n] =
|
||||
q(n - q(n - 1, mem), mem) + q(n - q(n - 2, mem), mem)
|
||||
}
|
||||
return mem[n]!!
|
||||
}
|
||||
|
||||
fun main() {
|
||||
val n = 1000
|
||||
Q(n).also { qList ->
|
||||
println("Q[1..10] = ${qList.take(10)}")
|
||||
println("Q($n) = ${qList[1000 - 1]}") // 502
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
##
|
||||
var q := |1, 1|.ToList;
|
||||
for var n := 2 to 100_000 do
|
||||
q.add(q[n - q[n - 1]] + q[n - q[n - 2]]);
|
||||
|
||||
q.take(10).println;
|
||||
assert(q.Take(10).SequenceEqual(|1, 1, 2, 3, 3, 4, 5, 5, 6, 6|));
|
||||
|
||||
q[999].println;
|
||||
assert(q[999] = 502);
|
||||
|
||||
var lessCount := 0;
|
||||
for var n := 1 to 100_000 do
|
||||
if q[n] < q[n - 1] then
|
||||
lessCount += 1;
|
||||
lessCount.Println;
|
||||
Loading…
Add table
Add a link
Reference in a new issue