Problem Statement
It's feeding time in the pig pen, where a trough is divided into n stalls to accommodate n piglets. The rude piglets immediately rush to the trough and distribute themselves arbitrarily among the stalls. After them come the fastidious piglets one at a time, at one-minute intervals.
A fastidious piglet doesn't want to feed in just any stall, since he doesn't like to be sandwiched between two piglets. As the trough fills up, however, a piglet who hasn't managed to occupy an end stall will eventually have a neighbor on each side. It is the fastidious piglet's goal to delay this sandwiching as long as possible. Among multiple stalls that afford the same delay, he prefers the leftmost. He makes his selection in the knowledge that all subsequent piglets arriving at the trough will choose a stall according to the same criteria.
Given a
Definition
- Class:
- Piglets
- Method:
- choose
- Parameters:
- String
- Returns:
- int
- Method signature:
- int choose(String trough)
- (be sure your method is public)
Notes
- A fastidious piglet will take a stall at the very end of the trough if possible, preferring the left end to the right end.
- All currently empty stalls will eventually be occupied by fastidious piglets.
Constraints
- trough contains between 1 and 15 characters, inclusive.
- Each character in trough is either '-' or 'p'.
Examples
"--p--"
Returns: 0
An end stall lets the piglet avoid sandwiching altogether.
"p-p-p"
Returns: 1
The piglet is forced to choose a stall that is already sandwiched. As always in the case of a tie, he prefers the leftmost.
"p--p"
Returns: 1
Whichever stall the next piglet chooses, he will be sandwiched by the piglet who follows one minute later.
"p---p"
Returns: 2
If the piglet takes stall 1, he will be sandwiched in one minute. Stalls 2 and 3 allow him a two-minute delay.
"ppp"
Returns: -1
"p----p"
Returns: 3
"p-------------p"
Returns: 12
"p---p---------p"
Returns: 12
"p---------p---p"
Returns: 12
"p--p------p---p"
Returns: 12
"p-"
Returns: 1
"p"
Returns: -1
"-"
Returns: 0
"p-------p-----p"
Returns: 12
"pp---p-------pp"
Returns: 11
"pp-pp---------p"
Returns: 12
"p------pp-----p"
Returns: 12
"p--------pp-p-p"
Returns: 7
"ppp--p-------pp"
Returns: 11
"p------p-----pp"
Returns: 11
"p----------pppp"
Returns: 9
"p-------p-----p"
Returns: 12
"p------p-p--p-p"
Returns: 10
"p-----p--p-p--p"
Returns: 12
"p--pp---------p"
Returns: 12
"p-p-----------p"
Returns: 12
"p--pp-p---p---p"
Returns: 12
"p---p---------p"
Returns: 12
"p-pp---p---p--p"
Returns: 12
"p------pp-p-p-p"
Returns: 5
"pp----pp-pp---p"
Returns: 12
"pp--p---p-----p"
Returns: 12
"p-p--p-----pp-p"
Returns: 9
"p-ppp---------p"
Returns: 12
"pp---p--p-----p"
Returns: 12
"p-p-----------p"
Returns: 12
"p-p-p--p-----pp"
Returns: 11
"p-------p-----p"
Returns: 12
"p----p-p-p----p"
Returns: 12
"p-p-ppp--p----p"
Returns: 12
"p--p------p-p-p"
Returns: 8
"p---------p-p-p"
Returns: 8
"p---p--p-ppp--p"
Returns: 12
"p-----p-pp----p"
Returns: 12
"p-----p-p-p---p"
Returns: 12
"p-p-----p--p--p"
Returns: 12
"p----p---p-p--p"
Returns: 12
"p------p--p-p-p"
Returns: 8
"p---pp-p----p-p"
Returns: 10
"p------------pp"
Returns: 11
"pp---------p--p"
Returns: 12
"pp---p-p----p-p"
Returns: 10
"p------p-p----p"
Returns: 12
"p-------------p"
Returns: 12
"-"
Returns: 0
"--"
Returns: 0
"p"
Returns: -1
"-p"
Returns: 0
"pp"
Returns: -1
"p---p-p--p"
Returns: 7
"p----p"
Returns: 3
"p-------------p"
Returns: 12
"p-----------p-p"
Returns: 10
"p------p------p"
Returns: 12
"p------p"
Returns: 5
"p-p"
Returns: 1
"p---p------p---"
Returns: 14
"p---p------p"
Returns: 9
"p----p-"
Returns: 6
"p---pp-p--p"
Returns: 8
"p-p-p------p"
Returns: 9
"p----"
Returns: 4
"p-------p----p"
Returns: 11
"p-----p-----p"
Returns: 10
"p----p--p"
Returns: 6
"p-p--p"
Returns: 3
"p-p-p-p-p-p---p"
Returns: 12
"ppp--p"
Returns: 3
"p---p----p--p"
Returns: 10
"ppp--------ppp-"
Returns: 14
"p----pp-pppppp"
Returns: 3
"p---p--p"
Returns: 5
"p-p-p-"
Returns: 5
"p---p----p----p"
Returns: 12
"p-----p---p"
Returns: 8
"p---p----p---p"
Returns: 11
"p----p--p----p"
Returns: 11
"p--p--p"
Returns: 4
"p---p-p---p"
Returns: 8
"p----------p--p"
Returns: 12
"pp---pp--"
Returns: 8
"p-----p------pp"
Returns: 11
"p---p---p--p"
Returns: 9
"pp-"
Returns: 2
"p-----p--p"
Returns: 7
"pp-----p-"
Returns: 8
"-p--"
Returns: 0
"pp---pp--p"
Returns: 7
"p------------p"
Returns: 11
"-p---p---p---p-"
Returns: 0
"p--"
Returns: 2
"p---pp----p--p"
Returns: 11
"p---pp-"
Returns: 6
"p"
Returns: -1
"p--p-"
Returns: 4
"p--------"
Returns: 8
"-p-------------"
Returns: 0