This took a while, but it is pretty readable.

       Jos=:(1 }. ] |.~ [: <: [)^:(1 < [: # ])^:_ [: i. ]
   4 Jos 38
37
   Josephus2 =: 4 :'(|x&+)/i.->:y' 
   4 Josephus2 38
37
   
   type <'Jos'
-----┐
│verb│
L-----
   type <'Josephus2'
-----┐
│verb│
L-----
   4!:0 <'Jos'
3
   4!:0 <'Josephus2'
3
   
   Jos
(1 }. ] |.~ [: <: [)^:(1 < [: # ])^:_ ([: i. ])
   Josephus2
4 : '(|x&+)/i.->:y'
   

Since both verbs are dyadic, what is the meaning of  4 :  in Josephus2 ?

Linda   

-----Original Message-----
Fyrom: [email protected]
[mailto:[email protected]] On Behalf Of km
Sent: Friday, May 03, 2013 12:39 PM
To: [email protected]
Subject: Re: [Jprogramming] rosettacode

Skip, you can probably put together a tacit version using {.@[ for x(0) ,
{:@[ for x(1), and the equivalence of g and h below, described in the second
page of the vocabulary entry for Power ^:

http://www.jsoftware.com/docs/help701/dictionary/d202v.htm

g=: u ^: p ^: _
 h=: 3 : 't=. y while. p t do. t=. u t end.'

--But when you have finished, you may prefer your explicit version!


Kip Murray

Sent from my iPad


On May 3, 2013, at 2:41 AM, Skip Cave <[email protected]> wrote:

> A generalized version of the Josephus problem would be to allow any 
> skip number, and any number of survivors. This would require three 
> variables input to the verb.
> 
> 1. The number of people in the line (n) 2. The number skipped for each 
> step (s) 3. The number of people left to go free at the end (r)
> 
> Given these three integers, what positions will be left at the end of 
> the process?
> 
> usage:  s r jose n
> where s = the number skipped, r = the number remaining, and n = the 
> number in line.
> 
> Here's an explicit function to solve the problem:
> 
> jose=: 4 : 0
> f =. i.0              NB. Initialize output vector
> s =. <:0{x         NB. x(0) is the skip number
> r =. 1{x             NB. x(1)  is the number left
> I =. y                NB. y  is the total positions
> L =. 1+i. y        NB. L is the position list
> whilst. I =. I-1 do.
>    L =. s |. L
>    f =. f, {. L
>    L =. }. L
> end.
> (r-y) {. f     NB. Take the last r positions
> )
> 
> Examples:
> 
>   3 4 jose 20  NB. Skip 3, leave 4, out of 20
> 8 2 13 20
> 
>   5 1 jose 200  NB. Skip 5, leave 1, out of 200
> 113
> 
> I have been trying to make this tacit, but no luck so far. I'm still 
> pretty much of a novice with tacit functionality.
> 
> Skip
> 
> --
> Skip Cave
> Cave Consulting LLC
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to