
-----------------------------------
isaiahk9
Tue Oct 14, 2008 6:58 am

Fibonacci's Rabbits Problem
-----------------------------------
This was a problem several years ago in a programming competition.  Since I've done all my work, my teacher put me to this :

----------------------------------------------------------------------------------------------------------------------------------------------------
The well known Fibonacci sequence 1,1,2,3,5,8,13,21,... is based on the proposition that, given that any pair of rabits will produce a new pair of rabits every month for ever, except in the first month after their birth.  The sequence gives the number of pairs of rabits that there would be in any given month.

That is :
 - starting with 1 newborn in month one
 - which would be 1 pair of rabbits in month two
 - which would be two pairs of rabits in month three (since this pair would produce a new pair in month three)
 - which would be three pairs of rabits in month 4 (since the first pair would produce a new pair)
 - which would be 5 pairs in month 5 (since the first two pairs would produce a new pair . . .
 - etc.

But suppose that, instead of living forever, and reproducing each rabit could only live for 5 months, and therefore only produce 3 new pairs before they died.  The sequence would then run like : 1,1,2,3,5,6,10,14...

And if each pair would only live for 3 months, the sequence would become : 1,1,2,1,2,1,2...

DATA.txt contains 5 lines of two positive integers, A and B.  The integer A represents the number of months each rabit lives, 2 < A < 101.  The integer B, 2 < B < 101, represents the number of months that have passed when the count of the number of pairs of rabits occurs.  A and B will have values such that the number of pairs rabits will never exceed 999 999 999.

Output should be on a cleared screen or window, and will state the number of rabit pairs in each of the 5 cases.  Output should appear as below.

SAMPLE INPUT         SAMPLE OUTPUT
5 10                        in problem #1 there are 30 rabit pair(s).
30 30                      in problem #2 there are 832040 rabbit pair(s).
12 40                      in problem #3 there are 95539192 rabbit pair(s).
4 40                        in problem #4 there are 65657 rabbit pair(s).
6 49                        in problem #5 there are 740444619 rabbit pair(s).

----------------------------------------------------------------------------------------------------------------------------------------------------

Here is the code I've got to make the fibonacci numbers :

----------------------------------------------------------------------------------------------------------------------------------------------------

% open and read file
var fileName : string := "DATA11.txt"   % Name of file
var fileNo : int                        % Number of file
var input : string (100)
open : fileNo, fileName, get

% declare variables
var lifespan : int
var numMonths : int
var numRabbits1 : int
var numRabbits2 : int
var temp : int

% loop through five problems
for i : 1 .. 5

    % get problem
    get : fileNo, input : *

    % get lifespan
    lifespan := strint (input (1 .. index (input, " ") - 1))

    % get numMonths
    numMonths := strint (input (index (input, " ") + 1 .. *))

    % Calculate numRabbit pairs
    % loop for number of months
    numRabbits1 := 1  
    numRabbits2 := 1
    
    for j : 1 .. numMonths
        
        % calculate number rabbits without deaths      
        temp := numRabbits2
        numRabbits2 := numRabbits1 + numRabbits2
        numRabbits1 := temp
        
        % calculate number of deaths
        
        
    end for
    
    % output
    put "in problem #", i, " there are ", numRabbits1, " pairs"


end for

close : fileNo

----------------------------------------------------------------------------------------------------------------------------------------------------

So, to find which rabbits to kill off, I've come up with this general idea :

When the fibbonnacci numbers are calculated, they are assigned a number for their generation (1 = generation1, 1 = generation2, 2 = generation3, 3 = generation4, 5 = generation5, 8 = generation6, etc.)  Everytime the for loop goes through, there is another variable called currentgeneration which increases by one everytime.  Then, if currentgeneration - generation > lifespan, the number of rabbits is minused one.

But how would I do that?  I don't really know if an array would help, and string to variable conversion would work I think. . . So what do you think is the best way to go at this?
thanx

-----------------------------------
S_Grimm
Tue Oct 14, 2008 7:30 am

RE:Fibonacci\'s Rabbits Problem
-----------------------------------
a whole pile of "if else" statements. like if lifespan < age then ...

-----------------------------------
isaiahk9
Tue Oct 14, 2008 12:57 pm

RE:Fibonacci\'s Rabbits Problem
-----------------------------------
yeah, but how do I tag the age number to the generation?  that's the actual question.

-----------------------------------
Euphoracle
Tue Oct 14, 2008 3:30 pm

RE:Fibonacci\'s Rabbits Problem
-----------------------------------
You could use a record:

type Bunny :
record
    age, generation : int
end record

var q : Bunny
q.age := 35
q.generation := 2

put "Age:   ", q.age
put "Generation:    ", q.generation

-----------------------------------
isaiahk9
Tue Oct 14, 2008 4:32 pm

RE:Fibonacci\'s Rabbits Problem
-----------------------------------
thanx Euphoracle - that looks like what I need, although I can't check it for a while

-----------------------------------
zylum
Wed Oct 15, 2008 3:40 am

RE:Fibonacci\'s Rabbits Problem
-----------------------------------
You only need to keep track of how many rabbits of each age there are:

const A := 6
const B := 49

var a : array 1 .. A + 1 of int
var n : int

for i : 2 .. A
    a (i) := 0
end for
a (1) := 2

for : 1 .. B
    n := 0
    for decreasing i : A .. 1
        n += a (i)
        a (i + 1) := a (i)
    end for

    %new rabbits = 2 * number of reproducing pairs
    %reproducing pairs = 

-----------------------------------
isaiahk9
Wed Oct 15, 2008 4:37 am

RE:Fibonacci\'s Rabbits Problem
-----------------------------------
thanx, zylum that looks perfect.  Credit will go to you and Euphoracle for help. 

. . . why did you respond to this at 4:40 am?

-----------------------------------
ecookman
Wed Oct 15, 2008 10:52 am

RE:Fibonacci\'s Rabbits Problem
-----------------------------------
probally different timezone

-----------------------------------
Ultrahex
Wed Oct 15, 2008 12:08 pm

Re: Fibonacci's Rabbits Problem
-----------------------------------
Some of us also have sleeping problems and caffeine addictions which is a good reason why we would reply at weird hours. Also some of us just like coding at weird times of the day. Remeber not everyone works 9 to 5 jobs :)

-----------------------------------
isaiahk9
Wed Oct 15, 2008 3:57 pm

RE:Fibonacci\'s Rabbits Problem
-----------------------------------
Yeah, I would be one of them who  doesn't.
oh, well.  thanx everyone for help with this problem, it is now officially solved (I took zylum's code, my code, and some new stuff and mashed it together to get the final product).

-----------------------------------
zylum
Thu Oct 16, 2008 3:18 am

Re: RE:Fibonacci\'s Rabbits Problem
-----------------------------------
thanx, zylum that looks perfect.  Credit will go to you and Euphoracle for help. 

. . . why did you respond to this at 4:40 am?

Why did you respond at 5:37am?  :lol: 

To answer your question though, I am working on a contract for a client in the Netherlands thus their business hours are between 2am and 10am. I needed to have a chat with them and didn't feel like waking up  :wink: I usually have weird sleeping habits anyways..
