Sailors, coconuts and a monkey problem: Difference between revisions

no edit summary
m (→‎{{header|R}}: Syntax highlighting.)
No edit summary
Line 1,726:
Sailor #6 takes 15624, giving 1 to the monkey and leaving 78120
In the morning each sailor gets 13020 nuts
</pre>
 
=={{header|Picat}}==
< lang Picat>main ?=>
between(2,9,N), % number of sailors
once s(N),
fail.
main => true.
 
s(N) =>
next_candidate(N+1,N,C), % original number of coconuts
divide(N,N,C,Cr), % Cr remainder
Cr > 0,
Cr mod N == 0,
printf("%d: original = %d, remainder = %d, final share = %d\n",N,C,Cr,Cr div N).
 
next_candidate(From,_Step,X) ?=> X = From.
next_candidate(From,Step,X) => next_candidate(From+Step,Step,X).
 
divide(N,0,C,Cr) => Cr = C.
divide(N,I,C,Cr) =>
(C-1) mod N == 0,
Q = (C-1) div N,
C1 = Q*(N-1),
divide(N,I-1,C1,Cr).
</lang>
{{out}}
<pre>
2: original = 11, remainder = 2, final share = 1
3: original = 25, remainder = 6, final share = 2
4: original = 765, remainder = 240, final share = 60
5: original = 3121, remainder = 1020, final share = 204
6: original = 233275, remainder = 78120, final share = 13020
7: original = 823537, remainder = 279930, final share = 39990
8: original = 117440505, remainder = 40353600, final share = 5044200
9: original = 387420481, remainder = 134217720, final share = 14913080
</pre>
 
Anonymous user