The   Fibonacci Word   may be created in a manner analogous to the   Fibonacci Sequence   as described here:

    Define   F_Word1   as   1
    Define   F_Word2   as   0
    Form     F_Word3   as   F_Word2     concatenated with   F_Word1    i.e.:   01
    Form     F_Wordn   as   F_Wordn-1   concatenated with   F_wordn-2



Task

Perform the above steps for     n = 37.

You may display the first few but not the larger values of   n.

{Doing so will get the task's author into trouble with them what be (again!).} 

Instead, create a table for   F_Words   1   to   37   which shows:

   The number of characters in the word
   The word's Entropy


Related tasks
 
   Fibonacci word/fractal
   Entropy
   Entropy/Narcissist


import java.util.*;
 
public class FWord {
    private /*v*/ String fWord0 = "";
    private /*v*/ String fWord1 = "";
 
    private String nextFWord () {
        final String result;
 
        if ( "".equals ( fWord1 ) )      result = "1";
        else if ( "".equals ( fWord0 ) ) result = "0";
        else                             result = fWord1 + fWord0;
 
        fWord0 = fWord1;
        fWord1 = result;
 
        return result;
    }
 
    public static double entropy ( final String source ) {
        final int                        length = source.length ();
        final Map < Character, Integer > counts = new HashMap < Character, Integer > ();
        /*v*/ double                     result = 0.0;
 
        for ( int i = 0; i < length; i++ ) {
            final char c = source.charAt ( i );
 
            if ( counts.containsKey ( c ) ) counts.put ( c, counts.get ( c ) + 1 );
            else                            counts.put ( c, 1 );
        }
 
        for ( final int count : counts.values () ) {
            final double proportion = ( double ) count / length;
 
            result -= proportion * ( Math.log ( proportion ) / Math.log ( 2 ) );
        }
 
        return result;
    }
 
    public static void main ( final String [] args ) {
        final FWord fWord = new FWord ();
 
        for ( int i = 0; i < 37;  ) {
            final String word = fWord.nextFWord ();
 
            System.out.printf ( "%3d %10d %s %n", ++i, word.length (), entropy ( word ) );
        }
    }
}