n=1000 def fib num ans=[] a=1;b=1;num.times{|i| ans +=[a];c=b+a;a=b;b=c} ans end $fibo=fib(n) def fibc d 1000.times{|i| fc=$fibo[i] if d " nc=[] if fbc[1]>0 while fbc[1]>0 #print fbc[1],">" fbc=fibc(fbc[1]) ii=fbc[0] nc+=[ii] #if isfib(ii) ii=fbc[1] end end nc.each{|j| a[j-1..j-1]="1" } a end def tofibcode d fbc=fibc(d) ans="0"*(fbc[0]-1)+"1" ans[fbc[1]-1]="1"[0] ans+"1" end def bi a v=0 a.length.times{|i| v*=2 v+=a[i..i].to_i } v end def readEliasDTop d,pos /^(0*)1/=~d[pos,d.length] if($1==nil) return [1,1] end n= $1.length s=d[pos+n+1,n] nn=2**n+bi(s) nnn=d[pos+n*2+1,nn-1] #p nnn,bi(nnn) #p $1,s,nn,nnn,2**(nn-1)+bi(nnn) [2**(nn-1)+bi(nnn),n+1+n+nn-1] end while gets n=0 da=$_.chomp #p da dd="" dla="" dnum="" while da.length>n a=readEliasDTop da,n if a[0]==nil;break;end #print fibby(a[0]),"." dnum+=a[0].to_s+"." dd+=fibby(a[0]) dla+=da[n,a[1]]+"." n+=a[1] end puts dd end