Data update

This commit is contained in:
Ingy döt Net 2025-02-27 18:35:13 -05:00
parent 8e4e15fa56
commit 72eb4943cb
1853 changed files with 35514 additions and 9441 deletions

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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))

View file

@ -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

View file

@ -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
}
}

View file

@ -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;