/////////////////////////////////////////////////////////////////////////////// // // Title: Signing Off // Author: Scott Marley // Publication: Dell Logic Puzzles // Issue: April, 1998 // Page: 37 // Stars: 4 // // Compass County contains 10 small towns, as shown in the map below. The towns // (named Kuhery, Layton, Mungle, Nicket, Pravil, Quabba, Ridder, Skoque, Tudora, // and Vydorf) are linked by roads which are mostly north-south and east-west, // complicated somewhat by three bends as shown ("the + signs"). Ten new // directional signs have been painted, one to be placed in each town. Each sign // tells how to get to one or two other towns, in each case by traveling along a // single road -- provided that if you reach one of the road bends, you follow it // and then continue in the new direction. For example, a sign in town C might // direct you east to town D or E, or it might direct you north to town A, B, H, // or J. The woman in charge of erecting the signs has them all stacked in the // back of her pickup truck and is ready to go, but unfortunately she was given a // map that doesn't show which sign belongs to each town, or even which town is // which. // Can you help her out by matching each lettered town on the map with its // name and sign? // // Road map: // // + -- A -- B ---+ // | | | | N // C -- D -- E | W E // | | | S // F -- G -- H // | | | // + -- I -- J // // | is a north-south road // -- is an east-west road // + is a bend in the road, not a town // // (view with a non-proportional font) // // Signs: // 1. NORTH TO KUHERY // WEST TO TUDORA // // 2. NORTH TO LAYTON // EAST TO VYDORF // // 3. NORTH TO NICKET // SOUTH TO SKOQUE // // 4. NORTH TO QUABBA // WEST TO KUHERY // // 5. EAST TO LAYTON // EAST TO NICKET // // 6. NORTH TO MUNGLE // // 7. NORTH TO SKOQUE // // 8. EAST TO VYDORF // // 9. SOUTH TO RIDDER // // 10. WEST TO PRAVIL // /////////////////////////////////////////////////////////////////////////////// // // Query: // all SigningOff(sign,town) // /////////////////////////////////////////////////////////////////////////////// // // Result: // // sign = [ {Kuhery} 5, {Layton} 4, {Mungle} 8, {Nicket} 10, {Pravil} 2, // {Quabba} 1, {Ridder} 7, {Skoque} 9, {Tudora} 6, {Vydorf} 3] // // town = [ {Kuhery} A, {Layton} J, {Mungle} D, {Nicket} B, {Pravil} C, // {Quabba} H, {Ridder} Y, {Skoque} G, {Tudora} F, {Vydorf} E] // /////////////////////////////////////////////////////////////////////////////// // // Note: The letter "I" is reserved, so we use "Y" instead. // /////////////////////////////////////////////////////////////////////////////// local Town = Kuhery | Layton | Mungle | Nicket | Pravil | Quabba | Ridder | Skoque | Tudora | Vydorf local Letter = A | B | C | D | E | F | G | H | Y | J // Y instead of I local Towns = Town->>Letter local Signs = Town->>[1..10] pred SigningOff(sign::Signs,town::Towns) iff // 1. NORTH TO KUHERY // WEST TO TUDORA sign(x1) = 1 & town(x1) = y1 & North(town(Kuhery),y1) & West(town(Tudora),y1) & // 2. NORTH TO LAYTON // EAST TO VYDORF sign(x2) = 2 & town(x2) = y2 & North(town(Layton),y2) & East(town(Vydorf),y2) & // 3. NORTH TO NICKET // SOUTH TO SKOQUE sign(x3) = 3 & town(x3) = y3 & North(town(Nicket),y3) & South(town(Skoque),y3) & // 4. NORTH TO QUABBA // WEST TO KUHERY sign(x4) = 4 & town(x4) = y4 & North(town(Quabba),y4) & West(town(Kuhery),y4) & // 5. EAST TO LAYTON // EAST TO NICKET sign(x5) = 5 & town(x5) = y5 & East(town(Layton),y5) & East(town(Nicket),y5) & // 6. NORTH TO MUNGLE sign(x6) = 6 & town(x6) = y6 & North(town(Mungle),y6) & // 7. NORTH TO SKOQUE sign(x7) = 7 & town(x7) = y7 & North(town(Skoque),y7) & // 8. EAST TO VYDORF sign(x8) = 8 & town(x8) = y8 & East(town(Vydorf),y8) & // 9. SOUTH TO RIDDER sign(x9) = 9 & town(x9) = y9 & South(town(Ridder),y9) & // 10. WEST TO PRAVIL sign(x10) = 10 & town(x10) = y10 & West(town(Pravil),y10) /////////////////////////////////////////////////////////////////////////////// // t is East of x. (x cannot be E,H,J) // // + -- A -- B ---+ // | | | | N // C -- D -- E | W E // | | | S // F -- G -- H // | | | // + -- I -- J // local pred East(t::Letter,x::Letter) iff (x = A & (t = B | t = H | t = J)) | // one bend (x = B & (t = H | t = J)) | // one bend (x = C & (t = D | t = E)) | (x = D & t = E) | (x = F & (t = G | t = H)) | (x = G & t = H) | (x = Y & t = J) /////////////////////////////////////////////////////////////////////////////// // t is West of x. (x cannot be C,F) // // + -- A -- B ---+ // | | | | N // C -- D -- E | W E // | | | S // F -- G -- H // | | | // + -- I -- J // local pred West(t::Letter,x::Letter) iff (x = A & t = C) | (x = B & (t = A | t = C)) | (x = D & t = C ) | (x = E & (t = C | t = D)) | (x = G & t = F) | (x = H & (t = F | t = G))| (x = Y & (t = F | t = D | t = A)) | // bend (x = J & (t = Y | t = F | t = D | t = A)) // bend /////////////////////////////////////////////////////////////////////////////// // t is North of x (x cannot be A,B) // // + -- A -- B ---+ // | | | | N // C -- D -- E | W E // | | | S // F -- G -- H // | | | // + -- I -- J // local pred North(t::Letter,x::Letter) iff (x = C & (t = A | t = B | t = H | t = J)) | (x = D & t = A) | (x = E & t = B) | (x = F & (t = D | t = A)) | (x = G & (t = E | t = B)) | (x = H & (t = A | t = B | t = C)) | // two bends (x = Y & (t = G | t = E | t = B)) | (x = J & (t = H | t = B | t = A | t = C)) // two bends /////////////////////////////////////////////////////////////////////////////// // t is South of x (x cannot be C,I,J) // // + -- A -- B ---+ // | | | | N // C -- D -- E | W E // | | | S // F -- G -- H // | | | // + -- I -- J // local pred South(t::Letter,x::Letter) iff (x = A & (t = D | t = F | t = Y | t = J)) | // one bend (x = B & (t = E | t = G | t = Y)) | (x = D & (t = F | t = Y | t = J)) | (x = E & (t = G | t = Y)) | (x = F & (t = Y | t = J)) | // one bend (x = G & t = Y) | (x = H & t = J)
This page was created by F1toHTML