import sraja.lib.java.*; import java.util.*; class HTcounter { int nHead=0, nTail=0; public String toString () { return "[H: " + nHead + " T: " + nTail + "]"; } } class Memory { private Hashtable store = new Hashtable (); char retrieve (ShiftBuffer sb) { String key = sb.toString(); if (store.containsKey (key)) { HTcounter ht = (HTcounter) store.get(key); return (ht.nHead > ht.nTail ? 'h' : 't'); } else { return (Math.random() > 0.5) ? 'h' : 't' ; } } void store (ShiftBuffer sb, char guess) { String key = sb.toString(); if (store.containsKey (key)) { HTcounter ht = (HTcounter) store.get(key); if (guess == 'h') ht.nHead++; else ht.nTail++; } else { HTcounter ht = new HTcounter (); if (guess == 'h') ht.nHead++; else ht.nTail++; store.put(key,ht); } } public String toString () { return "Memory:\n" + store; } public static void main (String[] args) { Memory mem = new Memory (); Stdio.println (mem.toString()); ShiftBuffer sb = new ShiftBuffer (4); mem.store(sb,'h'); sb.shift('t'); mem.store(sb,'h'); mem.store(sb,'h'); System.out.println (mem); } }