Puggeprogram

May 22nd, 2009

Et lite program som kan brukes til å pugge (f.eks. XP prinsipper og Design Smells). Bare lag filer med file ekstensjonen pugg i samme folder.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
 
public class Pugge {
 
	public static void main(String[] args) throws IOException {
 
		Map<String, Map<String,Boolean>> wordLists = new HashMap<String, Map<String,Boolean>>();
 
		File f = new File(".");
		for(String filen : f.getCanonicalFile().list()) {
			if(filen.endsWith(".pugg"))
				wordLists.put(filen, getWords(filen));
		}
 
		System.out.println("Velkommen! Hva vil du pugge?\n");
		int tell = 1;
		for(String s : wordLists.keySet()) {
			System.out.println(tell++ + ". " + s.substring(0, s.length()-5));
		}
		Scanner inn = new Scanner(System.in);
 
		System.out.print("\nSkriv inn valg: ");
		String tema =  (String) wordLists.keySet().toArray()[Integer.parseInt(inn.nextLine())-1];
		String temaEase =  toProperCase(tema.substring(0, tema.length()-5));
 
		Map<String,Boolean> ord = wordLists.get(tema);
 
		System.out.println("Da skal vi pugge " + temaEase + ". Vi har " + ord.size() + " ord i listen vår!\n");
 
		int hints = 0;
		int forsok = 0;
 
		long startTid = System.currentTimeMillis();
 
		while(true) {
			System.out.println("Ord du har klart til nå:");
 
			// Skriver hvilke ord du har fått til
			int klart = 0;
			for (String ordet : ord.keySet())
				if(ord.get(ordet)) {
					System.out.println(" - " + toProperCase(ordet));
					klart ++;
				}
 
			// Skriver ut status
			if(klart == ord.size()) {
				System.out.println("\nGrattis! Det gikk fint. \"Bare\" " + hints + " hint og " +
						forsok + " forsøk i løpet av " + (int)((System.currentTimeMillis() - startTid)/1000) +
						" sekunder.");
				break;
			}
			else
				System.out.println("\nDu har klart " + klart + " av " + ord.size() + "\n");
 
			// input
			System.out.print("$ ");
			String linje = inn.nextLine().toLowerCase();
 
			// Om det er en kommando
			if(linje.equals("/h")) {
				for (String ordet : ord.keySet()) {
					if(!ord.get(ordet)) {
						int start = (int)(Math.random()*(ordet.length()-1));
						int stopp = (int)(Math.random()*(ordet.length()-start)) + start+1;
						System.out.println(ordet.substring(start, stopp));
						hints++;
						break;
					}
				}
				continue;
			}
			else if(linje.equals("/q"))
				break;
 
			// Riktig eller galt
			if(ord.get(linje) != null)
				ord.put(linje, true);
			else
				System.out.println("Fant ikke den...");
 
			forsok++;
 
		}
	}
	private static String toProperCase(String inputString) {
		StringBuilder ff = new StringBuilder();
 
		for(String f: inputString.split(" ")) {
			if(ff.length()>0)
				ff.append(" ");
 
			ff.append(f.substring(0,1).toUpperCase()).append(f.substring(1,f.length()).toLowerCase());
		}
 
		return ff.toString();
	}
 
	private static HashMap<String,Boolean> getWords(String filename) throws FileNotFoundException {
 
		Scanner s = new Scanner(new File(filename));
		Map<String,Boolean>  ord  = new HashMap<String,Boolean>();
 
		// Leser inn ord. Et per linje
		while(s.hasNextLine()) {
			ord.put(s.nextLine().toLowerCase().trim(), false);
		}
		return (HashMap<String, Boolean>) ord;
 
	}
 
}

Related posts:

  1. Tjeld på taket

Categories: Annet Masterrelatert, Norwegian

Tags: , , Leave a comment

Leave a comment

Feed

http://truben.no/journal / Puggeprogram

-