Showing posts with label reddit. Show all posts
Showing posts with label reddit. Show all posts

Saturday, November 7, 2015

[2015-10-28] Challenge #238 [Intermediate] Fallout Hacking Game : dailyprogrammer



[2015-10-28] Challenge #238 [Intermediate] Fallout Hacking Game : dailyprogrammer
The popular video games Fallout 3 and Fallout: New Vegas have a computer "hacking" minigame where the player must correctly guess the correct password from a list of same-length words. Your challenge is to implement this game yourself.
The game operates similarly to the classic board game Mastermind. The player has only 4 guesses and on each incorrect guess the computer will indicate how many letter positions are correct.
For example, if the password is MIND and the player guesses MEND, the game will indicate that 3 out of 4 positions are correct (M_ND). If the password is COMPUTE and the player guesses PLAYFUL, the game will report 0/7. While some of the letters match, they're in the wrong position.
Ask the player for a difficulty (very easy, easy, average, hard, very hard), then present the player with 5 to 15 words of the same length. The length can be 4 to 15 letters. More words and letters make for a harder puzzle. The player then has 4 guesses, and on each incorrect guess indicate the number of correct positions.
Here's an example game:
Difficulty (1-5)? 3  SCORPION  FLOGGING  CROPPERS  MIGRAINE  FOOTNOTE  REFINERY  VAULTING  VICARAGE  PROTRACT  DESCENTS  Guess (4 left)? migraine  0/8 correct  Guess (3 left)? protract  2/8 correct  Guess (2 left)? croppers  8/8 correct  You win!  
You can draw words from our favorite dictionary file: enable1.txt. Your program should completely ignore case when making the position checks.
There may be ways to increase the difficulty of the game, perhaps even making it impossible to guarantee a solution, based on your particular selection of words. For example, your program could supply words that have little letter position overlap so that guesses reveal as little information to the player as possible.

    public static void main(String[] args) throws Exception {
        List<String> wordList = Files.readAllLines(Paths.get("enable1.txt"), StandardCharsets.UTF_8);
        Scanner sc = new Scanner(System.in);
        Random rng = new Random();
        System.out.print("Difficulty? (1-5) ");
        int d = sc.nextInt();
        int len = d*2+2;
        List<String> words = new ArrayList<>();

        // Generate and display words
        for (int i = 0; i < d*2+3; i++) {
            int n;
            String w;
            do {
                n = rng.nextInt(wordList.size());
                w = wordList.get(n);
            } while (w.length() != len);
            wordList.remove(n);
            System.out.println(w.toUpperCase());
            words.add(w);
        }

        // Game
        String pass = words.get(rng.nextInt(words.size()));
        for (int g = 4; g > 0; g--) {
            String guess;
            do {
                System.out.printf("Guess (%d left)? ", g);
                guess = sc.next();
                if (guess.length() != len)
                    System.out.printf("Guess must have length of %d.%n", len);
            } while (guess.length() != len);
            System.out.print(numCorrect(guess, pass));
            if (guess.equals(pass)) {
                System.out.print("You win!");
                System.exit(0);
            }
        }
        System.out.println("You lose. The password was " + pass + ".");
    }

    // Given two strings, returns the number of characters they have in common.
    public static String numCorrect(String g, String p) {
        int c = 0;
        for (int i = 0; i < g.length(); i++)
            if (g.charAt(i) == p.charAt(i))
                c++;
        return c + "/" + g.length() + " correct" + "\n";
    }


2.
    public static final Random rand = new Random();
    public static final int GUESSES = 4;

    public static void main(String[] args) throws IOException {
        try (Scanner scanner = new Scanner(System.in)) {
            List<String> lines = Util.getLinesFromFile(Util.WORDLIST);
            Collections.shuffle(lines);

            System.out.print("Choose a difficulty (0-4): ");
            int difficulty = getWordLengthFromDifficulty(scanner.nextInt());

            List<String> words = lines
                .stream()
                .filter(line -> line.length() == difficulty)
                //.sorted((s1, s2) -> Integer.compare(rand.nextInt(), rand.nextInt())) not transitive :(
                .collect(Collectors.toList())
                .subList(0, 10);

            String password = words.get(rand.nextInt(words.size()));
            System.out.println(String.join("\n", words));

            int length = password.length();
            for (int tries = 0; tries < GUESSES; ++tries) {
                System.out.print("Guess (%d left): ", GUESSES - tries);
                String guess = scanner.next().toLowerCase();

                long correct = guess(password, guess);
                if (correct == length) {
                    System.out.print("You win!");
                    return;
                }

                System.out.printf("%d/%d correct.\n", correct, length);
            }

            System.out.printf("You lose, the word was %s.", password);
        }
    }

    public static int getWordLengthFromDifficulty(int difficulty) {
        switch (difficulty) {
        case 0: return rand.nextInt(5 - 4) + 4;
        case 1: return rand.nextInt(8 - 6) + 6;
        case 2: return rand.nextInt(10 - 9) + 9;
        case 3: return rand.nextInt(12 - 11) + 11;
        case 4: return rand.nextInt(15 - 13) + 13;
        default: return -1;
        }
    }

    public static long guess(String password, String guess) {
        return IntStream.range(0, password.length()).filter(n -> password.charAt(n) == guess.charAt(n)).count();
    }

       
Read full article from [2015-10-28] Challenge #238 [Intermediate] Fallout Hacking Game : dailyprogrammer

[2015-10-19] Challenge #237 [Easy] Broken Keyboard : dailyprogrammer



[2015-10-19] Challenge #237 [Easy] Broken Keyboard : dailyprogrammer
Help! My keyboard is broken, only a few keys work any more. If I tell you what keys work, can you tell me what words I can write?
(You should use the trusty enable1.txt file, or /usr/share/dict/words to chose your valid English words from.)

Input Description

You'll be given a line with a single integer on it, telling you how many lines to read. Then you'll be given that many lines, each line a list of letters representing the keys that work on my keyboard. Example:
3  abcd  qwer  hjklo  

Output Description

Your program should emit the longest valid English language word you can make for each keyboard configuration.
abcd = bacaba  qwer = ewerer  hjklo = kolokolo

X. Using Regular Expression
public static String find(List<String> dict, String keyboard) {
    return dict.stream()
            .filter(word -> word.matches("[" + keyboard + "]+"))
            .max(new Comparator<String>() {
                @Override public int compare(String arg0, String arg1) {
                    return Integer.compare(arg0.length(), arg1.length());
                }
            }).get();
}

public static Optional<String> find(String keyboard) throws IOException {
    try (Stream<String> dict = Files.lines(Paths.get("enable1.txt"))) {
        return dict
          .filter(word -> word.matches("[" + keyboard + "]+"))
          .max(Comparator.comparing(String::length));
    }
}

            List<String> li = Files.readAllLines(new File("enable1.txt").toPath(), Charset.forName("UTF-8"));
            String[] keys = {"abcd", "qwer", "hjklo"};
            for (String str: keys) {
                Pattern pat = Pattern.compile("^([" + str + "]+)$");
                String out = li.stream()
                        .filter((s) -> pat.matcher(s).find())
                        .reduce("", (a, b) -> a.length() >= b.length() ? a : b);
                System.out.printf("Keys %s -> %s\n", str, out);

X. not efficient
    public static void main(String[] args) {
        File dictFile = new File(filePath);
        try {
            dictArray = Files.readAllLines(dictFile.toPath());
        } catch (IOException e) {
            e.printStackTrace();
        }

        for (String key : keys) {
            for (String words : dictArray) {
                String temp = words;
                char[] charArray = key.toCharArray();
                for (char chars : charArray)
                    temp = temp.replace(Character.toString(chars), "");
                if (temp.equals(""))
                    if (found.length() < words.length())
                        found = words;
            }
            foundArray.add(found);
            found = "";
        }
        System.out.println(foundArray);
    }
Read full article from [2015-10-19] Challenge #237 [Easy] Broken Keyboard : dailyprogrammer

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts