Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- J(7,1) = 7 // people are counted out in order 1 2 3 4 5 6 [7]
- J(7,2) = 7 // people are counted out in order 2 4 6 1 5 3 [7]
- J(7,3) = 4 // see above
- J(7,11) = 1
- J(77,8) = 1
- J(123,12) = 21
- {{@+)%}+,*)}:f;
- { # Function declaration
- # Stack: n k
- { # Stack: g(i-1,k) i-1 k
- @+)% # Stack: g(i,k)
- }+ # Add, giving stack: n {k block}
- ,* # Fold {k block} over [0 1 ... n-1]
- ) # Increment to move from 0-based to 1-based indexing
- }:f;
- J=lambda n,k:n<2or(J(n-1,k)+k-1)%n+1
- >>> J(7,3)
- 4
- >>> J(77,8)
- 1
- >>> J(123,12)
- 21
- 1~f~_=1
- n_~f~k_:=Mod[f[n-1,k]+k,n,1]
- j(n,k){return n>1?(j(n-1,k)+k-1)%n+1:1;}
- j(n,k,c,i,r){char o[999];memset(o,1,n);for(c=k,i=0;r;++i)(c-=o[i%=n])||(o[i]=!r--,c=k);
- return i;}
- [d1-d1<glk+r%1+]dsg?1-skrxp
- # comment shows what is on the stack and any other effect the instructions have
- [ # n
- d # n, n
- 1- # n-1, n
- d # n-1, n-1, n
- 1<g # g(n-1), n ; g is executed only if n > 1, conveniently g(1) = 1
- lk+ # g(n-1)+(k-1), n; remember, k register holds k-1
- r% # g(n-1)+(k-1) mod n
- 1+ # (g(n-1)+(k-1) mod n)+1
- ]
- dsg # code for g; code also stored in g
- ? # read user input => k, n, code for g
- 1- # k-1, n, code for g
- sk # n, code for g; k-1 stored in register k
- r # code for g, n
- x # g(n)
- p # prints g(n)
- j=.[:{.@{:]([:}.]|.~<:@[|~#@])^:(<:@#)>:@i.@[
- j=.1:`(1+[|1-~]+<:@[$:])@.(1<[)
- 7 j 3
- 4
- 123 j 12
- 21
- :k;0:^;(,{))^k+%:^;}/^)
- {1$1>{1$(1$^1$(+2$%)}1if@@;;}:^;
- def j(n,k){n>1?(j(n-1,k)+k-1)%n+1:1}
- j n=q$cycle[0..n]
- q l@(i:h:_)k|h/=i=q(drop(k-1)$filter(/=i)l)k|1>0=i
- J=function(n,k)ifelse(n<2,1,(J(n-1,k)+k-1)%%n+1)
- def?(n:Int,k:Int):Int=if(n<2)1 else(?(n-1,k)+k-1)%n+1
- j(n,k){
- int i=0,c=k,r=n,*p=calloc(n,8);
- for(;p[i=i%n+1]||--c?1:--r?p[i]=c=k:0;);
- return i;
- }
- 1&|.&.#:
- 1&|.&.#: 10
- 5
- 1&|.&.#: 69
- 11
- 1&|.&.#: 123456
- 115841
- 1&|.&.#: 123245678901234567890x NB. x keeps input integral
- 98917405212792722853
- All credit to Roger Hui, co-inventor of J and all-round uber-genius
- www.jsoftware.com for free j software across many platforms
- Explanation
- (J works right-to-left)
- #: convert input to binary
- &. a&.b <=> perform b, perform a, perform reverse of b
- 1&|. rotate bitwise one bit left
- So
- 1&|.&.#: 10
- a. #: convert input (10) TO binary -> 1 0 1 0
- b. 1&|. rotate result 1 bit left -> 0 1 0 1
- c. due to the &. perform convert FROM binary -> 5 (answer)
- f:{$[x=1;1;1+mod[;x]f[x-1;y]+y-1]}
- q)f .'(7 1;7 2;7 3;7 11;77 8;123 12)
- 7 7 4 1 1 21
- J=->n,k{n<2?1:(J(n-1,k)+k-1)%n+1}
- 1#_=1
- n#k=mod((n-1)#k+k-1)n+1
- function f(a,b){return a<2?1:(f(a-1,b)+b-1)%a+1}
- f=(a,b)=>a<2?1:(f(a-1,b)+b-1)%a+1
- L[Dg#²<FÀ}¦
- L # Range 1 .. n
- [Dg# # Until the array has a length of 1:
- ²<F } # k - 1 times do:
- À # Rotate the array
- ¦ # remove the first element
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement