fib frog
DESCRIPTION
fibfrog solution codilityTRANSCRIPT
public class fibfrog{
static int f(int n, int [] A){
if (n<=2) return 1;//moze se odmah skociti
int[] dostupan = new int[n];
dostupan[0] = A[0];
dostupan[1] = A[1];
int d = 26;//dovoljno je prvih 26 clanova fibonacijevog
int[] niz = new int[d];
niz[0] = 0;
niz[1] = 1;
for(int i = 2;i<d;i++){
niz[i] = niz[i-1]+niz[i-2];//formiramo niz
if (niz[i]-1 == n) return 1;//ako se odmah sa lijeve
obale moze skociti na desnu
if((niz[i]-1<n)&&(A[niz[i]-1]==1))//moze se
skociti na list koji se nalazi na mjestu niz[i]-1 odmah sa obale
dostupan[niz[i]-1] = 1;
}
//for(int i = 0; i < n; i++)System.out.println(dostupan[i]);
int min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++){
if (dostupan[i] == 0) //ne moze se doci do nje
continue;
// System.out.println("DFDFD "+i+"dostupan> "+dostupan[i]);
for(int j = 2; j < d;j++){
int sljedeca = i+niz[j];//sljedeca pozicija od i=-te
if (sljedeca == n){//stigao je na drugu obalu
if(dostupan[i]+1<min)//ako je blizi od prethodnog
najblizeg
min = dostupan[i] + 1;
// System.out.println("DFDFD "+i+"min> "+min);
break;
}
if (sljedeca > n || A[sljedeca] == 0)//ako smo
presisali n, ili ako ce nagaziti tamo gdje nije list
{
continue;
}
if (dostupan[sljedeca] == 0 || //pretpostavka je da je
A[sljedeca] = 1
dostupan[sljedeca] > niz[i] + 1)//ako nikad nije bio na
toj poziciji ili se do te pozicije moglo doci sa vise koraka nego
niz[i]+1
{
dostupan[sljedeca] = dostupan[i] + 1;
}
}
}
if(min == Integer.MAX_VALUE) //nije nista nasao
return -1;
else return min;
}
public static void main(String[] args){
int[] A = {0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0};
int n = 11;
System.out.println(f(n,A));
}
}