|
| 1 | +class ZebraPuzzle { |
| 2 | + construct new() { |
| 3 | + _waterDrinker = "" |
| 4 | + _zebraOwner = "" |
| 5 | + solve |
| 6 | + } |
| 7 | + |
| 8 | + drinksWater { _waterDrinker } |
| 9 | + ownsZebra { _zebraOwner } |
| 10 | + |
| 11 | + rightOf(a, b) { a + 1 == b } |
| 12 | + nextTo(a, b) { rightOf(a, b) || rightOf(b, a) } |
| 13 | + |
| 14 | + solve { |
| 15 | + var HOUSES = [1,2,3,4,5] |
| 16 | + var FIRST = 1 |
| 17 | + var MIDDLE = 3 |
| 18 | + |
| 19 | + var permutations = [ |
| 20 | + [1,2,3,4,5], [1,2,3,5,4], [1,2,4,3,5], [1,2,4,5,3], [1,2,5,3,4], [1,2,5,4,3], |
| 21 | + [1,3,2,4,5], [1,3,2,5,4], [1,3,4,2,5], [1,3,4,5,2], [1,3,5,2,4], [1,3,5,4,2], |
| 22 | + [1,4,2,3,5], [1,4,2,5,3], [1,4,3,2,5], [1,4,3,5,2], [1,4,5,2,3], [1,4,5,3,2], |
| 23 | + [1,5,2,3,4], [1,5,2,4,3], [1,5,3,2,4], [1,5,3,4,2], [1,5,4,2,3], [1,5,4,3,2], |
| 24 | + [2,1,3,4,5], [2,1,3,5,4], [2,1,4,3,5], [2,1,4,5,3], [2,1,5,3,4], [2,1,5,4,3], |
| 25 | + [2,3,1,4,5], [2,3,1,5,4], [2,3,4,1,5], [2,3,4,5,1], [2,3,5,1,4], [2,3,5,4,1], |
| 26 | + [2,4,1,3,5], [2,4,1,5,3], [2,4,3,1,5], [2,4,3,5,1], [2,4,5,1,3], [2,4,5,3,1], |
| 27 | + [2,5,1,3,4], [2,5,1,4,3], [2,5,3,1,4], [2,5,3,4,1], [2,5,4,1,3], [2,5,4,3,1], |
| 28 | + [3,1,2,4,5], [3,1,2,5,4], [3,1,4,2,5], [3,1,4,5,2], [3,1,5,2,4], [3,1,5,4,2], |
| 29 | + [3,2,1,4,5], [3,2,1,5,4], [3,2,4,1,5], [3,2,4,5,1], [3,2,5,1,4], [3,2,5,4,1], |
| 30 | + [3,4,1,2,5], [3,4,1,5,2], [3,4,2,1,5], [3,4,2,5,1], [3,4,5,1,2], [3,4,5,2,1], |
| 31 | + [3,5,1,2,4], [3,5,1,4,2], [3,5,2,1,4], [3,5,2,4,1], [3,5,4,1,2], [3,5,4,2,1], |
| 32 | + [4,1,2,3,5], [4,1,2,5,3], [4,1,3,2,5], [4,1,3,5,2], [4,1,5,2,3], [4,1,5,3,2], |
| 33 | + [4,2,1,3,5], [4,2,1,5,3], [4,2,3,1,5], [4,2,3,5,1], [4,2,5,1,3], [4,2,5,3,1], |
| 34 | + [4,3,1,2,5], [4,3,1,5,2], [4,3,2,1,5], [4,3,2,5,1], [4,3,5,1,2], [4,3,5,2,1], |
| 35 | + [4,5,1,2,3], [4,5,1,3,2], [4,5,2,1,3], [4,5,2,3,1], [4,5,3,1,2], [4,5,3,2,1], |
| 36 | + [5,1,2,3,4], [5,1,2,4,3], [5,1,3,2,4], [5,1,3,4,2], [5,1,4,2,3], [5,1,4,3,2], |
| 37 | + [5,2,1,3,4], [5,2,1,4,3], [5,2,3,1,4], [5,2,3,4,1], [5,2,4,1,3], [5,2,4,3,1], |
| 38 | + [5,3,1,2,4], [5,3,1,4,2], [5,3,2,1,4], [5,3,2,4,1], [5,3,4,1,2], [5,3,4,2,1], |
| 39 | + [5,4,1,2,3], [5,4,1,3,2], [5,4,2,1,3], [5,4,2,3,1], [5,4,3,1,2], [5,4,3,2,1] |
| 40 | + ] |
| 41 | + |
| 42 | + for (colours in permutations) { |
| 43 | + var blue = colours[0] |
| 44 | + var green = colours[1] |
| 45 | + var ivory = colours[2] |
| 46 | + var red = colours[3] |
| 47 | + var yellow = colours[4] |
| 48 | + |
| 49 | + if (rightOf(green, ivory)) { |
| 50 | + |
| 51 | + for (nations in permutations) { |
| 52 | + var en = nations[0] |
| 53 | + var es = nations[1] |
| 54 | + var ja = nations[2] |
| 55 | + var no = nations[3] |
| 56 | + var uk = nations[4] |
| 57 | + |
| 58 | + var nationalities = ["","","","","",""] |
| 59 | + nationalities[en] = "English" |
| 60 | + nationalities[es] = "Spanish" |
| 61 | + nationalities[ja] = "Japanese" |
| 62 | + nationalities[no] = "Norwegian" |
| 63 | + nationalities[uk] = "Ukranian" |
| 64 | + |
| 65 | + if (en == red && no == FIRST && nextTo(no, blue)) { |
| 66 | + |
| 67 | + for (drinks in permutations) { |
| 68 | + var coffee = drinks[0] |
| 69 | + var tea = drinks[1] |
| 70 | + var milk = drinks[2] |
| 71 | + var juice = drinks[3] |
| 72 | + var water = drinks[4] |
| 73 | + |
| 74 | + if (coffee == green && uk == tea && milk == MIDDLE) { |
| 75 | + |
| 76 | + for (hobbies in permutations) { |
| 77 | + var dance = hobbies[0] |
| 78 | + var paint = hobbies[1] |
| 79 | + var read = hobbies[2] |
| 80 | + var chess = hobbies[3] |
| 81 | + var football = hobbies[4] |
| 82 | + |
| 83 | + if (paint == yellow && football == juice && ja == chess) { |
| 84 | + |
| 85 | + for (pets in permutations) { |
| 86 | + var horse = pets[0] |
| 87 | + var fox = pets[1] |
| 88 | + var snail = pets[2] |
| 89 | + var dog = pets[3] |
| 90 | + var zebra = pets[4] |
| 91 | + |
| 92 | + if (es == dog && dance == snail && nextTo(read, fox) && nextTo(paint, horse)) { |
| 93 | + |
| 94 | + _waterDrinker = nationalities[water] |
| 95 | + _zebraOwner = nationalities[zebra] |
| 96 | + return |
| 97 | + } |
| 98 | + } |
| 99 | + } |
| 100 | + } |
| 101 | + } |
| 102 | + } |
| 103 | + } |
| 104 | + } |
| 105 | + } |
| 106 | + } |
| 107 | + } |
| 108 | +} |
0 commit comments