Input device of the kind I used in 1978 http://blogs.laprensagrafica.com/litoibarra/?p=2808 |

I know that Fortran is less elegant than, say, the Wolfram language, but

(a) I like it, and

(b) I am quite good in wiriting small sample codes.

The third reason will be given below.

The code reads as (everything hard coded)

logical status (0:78,0:78,0:78)

integer i,j,k,animals, count

do i=0,78

do j=0,78

do k=0,78

status (i,j,k)=.false.

end do

end do

end do

c

c status (i,j,k) will be set to true if a forest with i goats, j wolves and k is reached.

c

status (17,55,6)=.true.

count=0

do animals= 78,1,-1

do i=0,animals

do j=0,animals-i

k=animals-i-j

if(status(i,j,k))then

c

c count counts all possible forests

c

count=count+1

c ------------------------------------------------------------

c the following lines print possible final states

c

if(i. eq. 0 .and. j .eq. 0)then

write (*,*)i,j,k

end if

if(i. eq. 0 .and. k .eq. 0)then

write (*,*)i,j,k

end if

if(j. eq. 0 .and. k .eq. 0)then

write (*,*)i,j,k

end if

c------------------------------------------------------------

c in the sequel: Possible meals

c

if(i*j .ne. 0)then

status (i-1,j-1,k+1)=.true.

end if

if(i*k .ne. 0)then

status (i-1,j+1,k-1)=.true.

end if

if(j*k .ne. 0)then

status (i+1,j-1,k-1)=.true.

end if

c

end if

end do

end do

end do

write(*,*) "count= ",count

end

It turns out that with the specific example, 4208 different states of forests can be obtained, and it takes less than one second to calculate them (compiled with the free G95 compiler and executed on one core of my i5 desktop computer).

The above code is not memory efficient at all, and memory allocation needs quite a portion of elapsed time,

Like in finite elements for a transient diffusion equations, we do not need a three-dimensional array but two (old and new) two-dimensional ones would be sufficient.

When we increase the number of initial animals to (117, 155, 106) (yielding 223 lions at the maximal final forest), the Fortran program still performs in less than 2 seconds and calculates 985508 possible forests. Can a functional language do this as well?