FizzBuzz code

And no, it’s not to be taken seriously.
package com.w_wins.fizzbuzz;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

/**
 * @author W
 */
public class Main {
    public static void main(String[] args) {
        try {
            fizzbuzz1();
            fizzbuzz2();
            fizzbuzz3();
            fizzbuzz4();
            fizzbuzz5();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    public static void fizzbuzz1() {
        final String[] fizzBuzz=new String[15];
        fizzBuzz[0]="FizzBuzz";
        for(int t=1;t<5;++t)fizzBuzz[t*3]="Fizz";
        for(int t=1;t<3;++t)fizzBuzz[t*5]="Buzz";
        for(int t=1;t<=100;++t)System.out.println(fizzBuzz[t%15]==null?Integer.toString(t):fizzBuzz[t%15]);
    }
    
    public static void fizzbuzz2() {
        for(int t=1;t<=100;++t){
            boolean number=true;
            if(t%3==0){
                number=false;
                System.out.print("Fizz");
            }
            if(t%5==0){
                number=false;
                System.out.print("Buzz");
            }
            System.out.println(number?t:"");
        }
    }
    
    public static void fizzbuzz3() {
        for(int t=1;t<=100;++t){
            switch(t%15){
                case 1:
                case 2:
                case 4:
                case 7:
                case 8:
                case 11:
                case 13:
                case 14:
                    System.out.println(t);
                    break;
                case 3:
                case 6:
                case 9:
                case 12:
                    System.out.println("Fizz");
                    break;
                case 0:
                    System.out.print("Fizz");
                case 5:
                case 10:
                    System.out.println("Buzz");
                    break;
            }
            
        }
    }
    
    public static void fizzbuzz4() throws InterruptedException, ExecutionException {
        final ExecutorService service=Executors.newCachedThreadPool();
        final Map> futures=new HashMap>(100);
        for(int d=1;d<=100;++d){
            final int t=d;
            final FutureTask future=new FutureTask(new Callable() {
                public String call() throws Exception {
                    if(t%15==0)return ”FizzBuzz”;
                    if(t%3==0)return ”Fizz”;
                    if(t%5==0)return ”Buzz”;
                    return Integer.toString(t);
                }
            });
            service.submit(future);
            futures.put(t,future);
        }
        for(int t=1;t<=100;++t){
            System.out.println(futures.get(t).get());
        }
        final boolean isEmpty=service.shutdownNow().isEmpty();
        assert(isEmpty);
    }

    public static enum FizzBuzz{
        FIZZBUZZ(true,true,false){
            protected boolean matches(final int t){
                return t%15==0;
            }
        },FIZZ(true,false,false){
            protected boolean matches(final int t){
                return t%3==0;
            }
        },BUZZ(false,true,false){
            protected boolean matches(final int t){
                return t%5==0;
            }
        },NUMBER(false,false,true){
            protected boolean matches(final int t){
                return true;
            }
        };
        private final boolean fizz,buzz,number;
        protected abstract boolean matches(int t);
        FizzBuzz(final boolean fizz,final boolean buzz,final boolean number){
            this.fizz=fizz;
            this.buzz=buzz;
            this.number=number;
        }
        
        public void printNumber(final int t){
            if(fizz)System.out.print("Fizz");
            if(buzz)System.out.print("Buzz");
            if(number)System.out.print(t);
            System.out.println();
        }
        
        public static FizzBuzz getFizzBuzz(final int t){
            for(FizzBuzz fizzBuzz:FizzBuzz.values()){
                if(fizzBuzz.matches(t)){
                    return fizzBuzz;
                }
            }
            throw new Error("Can't happen");
        }
    }
    
    public static void fizzbuzz5() {
        for(int t=1;t<=100;++t){
            FizzBuzz.getFizzBuzz(t).printNumber(t);
        }
    }
}

fizzbuzz4() 52.4ms, fizzbuzz5() 29.0ms, fizzbuzz3() 25.7ms, fizzbuzz2() 19.6ms, fizzbuzz1() 19.5ms

Leave a Reply

You must be logged in to post a comment.