Time for an 2014 update…
This commit is contained in:
parent
372c577f83
commit
09687c4926
2520 changed files with 34227 additions and 7318 deletions
37
Task/Josephus-problem/AWK/josephus-problem.awk
Normal file
37
Task/Josephus-problem/AWK/josephus-problem.awk
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# syntax: GAWK -f JOSEPHUS_PROBLEM.AWK
|
||||
# converted from PL/I
|
||||
BEGIN {
|
||||
main(5,2,1)
|
||||
main(41,3,1)
|
||||
main(41,3,3)
|
||||
exit(0)
|
||||
}
|
||||
function main(n,k,s, dead,errors,found,i,killed,nn,p,survived) {
|
||||
# n - number of prisoners
|
||||
# k - kill every k'th prisoner
|
||||
# s - number of survivors
|
||||
printf("\nn=%d k=%d s=%d\n",n,k,s) # show arguments
|
||||
if (s > n) { print("s>n"); errors++ }
|
||||
if (k <= 0) { print("k<=0"); errors++ }
|
||||
if (errors > 0) { return(0) }
|
||||
nn = n # wrap around boundary
|
||||
p = -1 # start here
|
||||
while (n != s) { # until survivor count is met
|
||||
found = 0 # start looking
|
||||
while (found != k) { # until we have the k-th prisoner
|
||||
if (++p == nn) { p = 0 } # wrap around
|
||||
if (dead[p] != 1) { found++ } # if prisoner is alive increment found
|
||||
}
|
||||
dead[p] = 1 # kill the unlucky one
|
||||
killed = killed p " " # build killed list
|
||||
n-- # reduce size of circle
|
||||
}
|
||||
for (i=0; i<=nn-1; i++) {
|
||||
if (dead[i] != 1) {
|
||||
survived = survived i " " # build survivor list
|
||||
}
|
||||
}
|
||||
printf("killed: %s\n",killed)
|
||||
printf("survived: %s\n",survived)
|
||||
return(1)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue