Mercurial > repo
comparison interps/c-intercal/pit/ins.doc @ 996:859f9b4339e6
<Gregor> tar xf egobot.tar.xz
author | HackBot |
---|---|
date | Sun, 09 Dec 2012 19:30:08 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
995:6883f5911eb7 | 996:859f9b4339e6 |
---|---|
1 "Intersections & Splats" is an INTERCAL implementation of one of my | |
2 favorite games, "Cows & Bulls," now more commonly known by the | |
3 commercial version, "Mastermind." | |
4 | |
5 Rules of the Game | |
6 | |
7 The idea of the game is that one person selects a "code" in the form | |
8 of a short string of digits, typically four. ("Mastermind" used colors | |
9 in place of numbers.) The other person has a limited number of chances | |
10 to guess what the code is. Every move consists of submitting a guess, | |
11 and the first player replying with a score. Each scoring reveals a | |
12 little more information about the code. A guess is scored by giving a | |
13 certain number of cows and a certain number of bulls. These correspond | |
14 to Mastermind's white pegs and black pegs, respectively - and, in this | |
15 program, intersections (+) and splats (*). | |
16 | |
17 This game is perfect for a computer because the person who makes the | |
18 code has nothing to do but score the other player's guesses - a | |
19 mechanical task. | |
20 | |
21 Here's how the scoring works. For every number in the code that is | |
22 matched by the same number in the same position in the guess, a splat | |
23 is scored. And for every number in the code that is matched by the | |
24 same number in the guess, but in the wrong position, an intersection, | |
25 is scored. | |
26 | |
27 For example: with a code of "3451" and a guess of "2465", one splat | |
28 and one intersection would be earned. The splat is for the 4, and the | |
29 intersection is for the 5. Of course, the player making the guesses | |
30 isn't told which numbers earned what - that's what they have to | |
31 deduce. A guess of "6152" gets exactly the same score, even though the | |
32 intersection and splat correspond to completely different digits. | |
33 | |
34 The game continues until the code is discovered or the player runs out | |
35 of guesses. | |
36 | |
37 Note that there can be some confusion about how the scoring works with | |
38 repeated digits. In absence of a better standards body, I have stuck | |
39 with the version described in the Mastermind rules, which is that a | |
40 digit in the guess can match up with more than one digit in the code. | |
41 Another example is in order. Say the code is "2412". A guess of "2544" | |
42 would earn one splat and two intersections. The splat is for having a | |
43 2 in the guess in the right position, and one of the intersections is | |
44 also for having a 2 in the guess, but now in the wrong position. The | |
45 final intersection is earned by having a 4 in the guess, again in the | |
46 wrong position. The second 4 in the guess, however, does not affect | |
47 the scoring. | |
48 | |
49 Here is an algorithmic description of how scoring is done. The player | |
50 looks at each digit in the code in turn. If the digit under | |
51 consideration is matched by the same digit in the same place, a splat | |
52 is earned. Otherwise, if any other digit in the guess is the same, an | |
53 intersection is earned. | |
54 | |
55 For those conversant in C, here is an even more algorithmic | |
56 description: | |
57 | |
58 for (i = 0 ; i < digits ; ++i) | |
59 if (guess[i] == code[i]) | |
60 ++splats; | |
61 else | |
62 for (j = 0 ; j < digits ; ++j) | |
63 if (guess[j] == code[i]) { | |
64 ++intersections; | |
65 break; | |
66 } | |
67 | |
68 For those conversant in INTERCAL, consult the source code. | |
69 | |
70 Anyway, enough of this. Play the game a few times; you'll get the idea. | |
71 | |
72 How To Play | |
73 | |
74 At each move the board is displayed, which shows you all of your | |
75 previous guesses. Above each guess are the intersections and splats | |
76 that they earned. Here is an example of a game in progress: | |
77 | |
78 + | |
79 * + + * * | |
80 (1) (5) (2) ( ) ( ) ( ) ( ) ( ) ( ) ( ) (?) | |
81 (2) (4) (4) ( ) ( ) ( ) ( ) ( ) ( ) ( ) (?) | |
82 (4) (4) (3) ( ) ( ) ( ) ( ) ( ) ( ) ( ) (?) | |
83 (2) (6) (5) ( ) ( ) ( ) ( ) ( ) ( ) ( ) (?) | |
84 | |
85 The first guess "1242" earned one splat and one intersection. The | |
86 third guess "2435" earned two splats and one intersection. The player | |
87 has seven more guesses left. Guesses are typed in at the "MOVE:" | |
88 prompt. | |
89 | |
90 At the end of the game, the questions marks at the right are replaced | |
91 with the code. You are then prompted with "[CNQ]". Enter N to start a | |
92 new game, Q to quit playing, or C to configure the game (see below). N | |
93 is the default, so if you just hit enter, or type anything except C or | |
94 Q, it has the same effect. You can also use any of these commands at | |
95 the "MOVE:" prompt, if you wish to abandon the current game. In | |
96 addition, R can be entered during a game to redraw the board. | |
97 | |
98 Configuring the Game | |
99 | |
100 The game is set up originally to have ten guesses in a game, four | |
101 digits in the code, and to use the digits 1 through 6. (This matches | |
102 the setup of the "Mastermind" game.) The C command can be used to | |
103 modify these settings, so as to change the difficulty of the game. | |
104 | |
105 When you enter the C command, you are first prompted for the X | |
106 setting, the number of guesses allowed; then the Y setting, which is | |
107 the number of digits in the code; and finally the N setting, the | |
108 number of digits used in the game. Each number is entered using | |
109 standard INTERCAL numeric entry. (Yes, I could have used my own numio | |
110 routines here, but the program is big enough as it is. Besides, I | |
111 didn't want you to completely forget that you were using an INTERCAL | |
112 program.) You can enter ZERO at any three prompts to abort the | |
113 configuration and return to the current game. If any values are higher | |
114 than ONE FIVE, the value modulo 16 will be used instead. Note that | |
115 while you can enter a value higher than NINE for the number of digits, | |
116 you may need to have an ASCII chart handy. (By the way, if anyone | |
117 wants an EBCDIC version, drop me a line.) | |
118 | |
119 Other Versions | |
120 | |
121 I enjoyed writing this program so much, that I created two others | |
122 based on it. First, there is a colorized version, which requires a | |
123 VT100/ANSI color terminal, or something compatible. And second, there | |
124 is a CGI script version that plays this game. A package containing all | |
125 three versions is available at ftp.muppetlabs.com under | |
126 /pub/intercal/ins.tar.gz. In addition, you can play the CGI script at | |
127 http://www.muppetlabs.com/~breadbox/intercal/ins/insstart.html. | |
128 | |
129 Coda | |
130 | |
131 That's it. Have fun. Questions, comments, and concerns for my mental | |
132 health can be directed to breadbox@muppetlabs.com. |