Data update

This commit is contained in:
Ingy döt Net 2025-08-11 18:05:26 -07:00
parent 4d5544505c
commit 4924dd0264
3073 changed files with 55820 additions and 4408 deletions

View file

@ -0,0 +1,20 @@
uses console
int n, k
n = 41 'prisoners
k = 3 'order of execution
function Josephus(n as int, k as int, m as int) as int
int lm, i
lm = m
for i = m + 1 to n
lm = (lm + k) mod i
next
return lm
end function
printl "n = " n chr(9) "k = " k chr(9) "final survivor = " Josephus(n, k, 0)
printl cr "Enter ..."
waitkey

View file

@ -0,0 +1,34 @@
local fmt = require "fmt"
local function josephus(n, k, m)
if k <= 0 or m <= 0 or n <= k or n <= m then
error("one or more parameters are invalid")
end
local killed = {}
local survived = {}
for i = 1, n do survived[i] = i - 1 end
local start = k
while true do
local finish = #survived
local i = start
local deleted = 0
while i <= finish do
killed:insert(survived:remove(i - deleted))
if #survived == m then return {survived, killed} end
++deleted
i += k
end
start = i - finish
end
return {survived, killed}
end
local triples = { {5, 2, 1}, {41, 3, 1}, {41, 3, 3} }
for triples as triple do
local [n, k, m] = triple
print($"Prisoners = {n}, Step = {k}, Survivors = {m}")
local sk = josephus(n, k, m)
print($"Survived : {fmt.swrite(sk[1])}")
print($"Kill order : {fmt.swrite(sk[2])}")
print()
end

View file

@ -0,0 +1,15 @@
josephus(N, K, Survivors) :- josephus(N, K, 1, Survivors).
:- table josephus/4.
josephus(N, K, M, Survivors) :-
K > 0,
N > 0,
N0 is N - 1,
( M = N
-> numlist(0, N0, Survivors)
; josephus(N0, K, M, Survivors0),
findall(Survivor, (
member(Survivor0, Survivors0),
Survivor is (Survivor0 + K) mod N
), Survivors)
).

View file

@ -0,0 +1,5 @@
?- josephus(41, 3, Survivors).
Survivors = [30].
?- josephus(41, 3, 5, Survivors).
Survivors = [3, 15, 21, 30, 34].

View file

@ -1,12 +1,14 @@
FUNCTION josephus (n, k, m)
lm = m
FOR i = m + 1 TO n
lm = (lm + k) MOD i
NEXT i
josephus = lm
END FUNCTION
DECLARE FUNCTION josephus! (n!, k!, m!)
n = 41
k = 3
PRINT "n = "; n, "k = "; k, "final survivor = "; josephus(n, k, 0)
END
FUNCTION josephus (n, k, m)
lm = m
FOR i = m + 1 TO n
lm = (lm + k) MOD i
NEXT i
josephus = lm
END FUNCTION

View file

@ -0,0 +1,16 @@
n = 41
k = 3
print "n = "; n; " k = "; k; " final survivor = "; josephus(n, k, 0)
end
function josephus(n, k, m)
lm = m
for i = m + 1 to n
' In Run BASIC there is no MOD operator
lm = lm + k
lm = lm - int(lm / i) * i
' In Just Basic / Liberty BASIC it could be used
'lm = (lm + k) mod i
next i
josephus = lm
end function

View file

@ -24,7 +24,7 @@ for (triple in triples) {
var n = triple[0]
var k = triple[1]
var m = triple[2]
System.print("Prisoners = %(n), Step = %(m), Survivors = %(m)")
System.print("Prisoners = %(n), Step = %(k), Survivors = %(m)")
var sk = josephus.call(n, k, m)
System.print("Survived : %(sk[0])")
System.print("Kill order : %(sk[1])")

View file

@ -0,0 +1,21 @@
PROGRAM "Josephus problem"
VERSION "0.0000"
DECLARE FUNCTION Entry ()
DECLARE FUNCTION Josephus (n, k, m)
FUNCTION Entry ()
n = 41 'prisoners
k = 3 'order of execution
PRINT "n = "; n, "k = "; k, "final survivor = "; Josephus(n, k, 0)
END FUNCTION
FUNCTION Josephus (n, k, m)
lm = m
FOR i = m + 1 TO n
lm = (lm + k) MOD i
NEXT
RETURN lm
END FUNCTION
END PROGRAM