[comp.sys.mac.games] 3 in three clue?

hm0i+@andrew.cmu.edu (H. Scott Matthews) (02/10/91)

Hi netters:

    I'm having a few problems with the "Outside In" puzzle.  Actually,
I'm having alot of problems because I can't solve it!

    Funny thins is, its one of the last I have to do and its one of the
first to appear!

    Also, I can't seem to grasp the "this,that,and the other" puzzle...

    Anybody with clues would be thanked dearly....

thanks,
scott

|====================================================
|H. Scott Matthews     | Carnegie Mellon University |
|Junior        	       | Project: To Graduate       |
|Comp.E/EPP            | Turn-ons include:          |
|(412) 268-4696        |  women who do dishes       |              
=====================================================
|  E-mail to hm0i@andrew.cmu.edu (internet access)  |
=====================================================
|"Give us an example of a modern day paradox, Bart" |
|"How about 'you're damned if you do, you're damned |
|if you don't ? '"                                  |
|                                  --- Bart Simpson |
=====================================================

gousha@cory.Berkeley.EDU (Charles Gousha) (02/12/91)

>    I'm having a few problems with the "Outside In" puzzle.  Actually,
>I'm having a lot of problems because I can't solve it!

This is a tricky one.  One of the keys is that ALL of the windows have
to be closed, including the ones along the outside edge.  Notice that 
there are twelve inside windows, and twelve ouside windows.
Beyond that, there's no real advice.  You *could* map out what each
and every window does, but it gets tiring and too analytical very quickly.
Probably the best idea is just to poke away at it for an hour or two
(like I did), and hope memory serves you right and gets you lucky.

>    Also, I can't seem to grasp the "this,that,and the other" puzzle...

This one slips my memory.  If you could give a basic description, I could
probably give you some pointers on it.

>    Anybody with clues would be thanked dearly....

Always glad to help.

>thanks,
>H. Scott Matthews     | Carnegie Mellon University |

By the way, I there are any of you out there who haven't purchased
3 in Three, and liked The Fool's Errand, GET IT!  It is definiely the
greatest and most entertaining puzzle game since the Fool showed his
face.  Just as many puzzles, a unifying storyline, and in GLORIOUS
256 COLORS! for those that support it.  There is a demo version
available from Miles Computing (I have a copy), and does make for
some good, solid hours of fun puzzle solving.

--------------------------------------------------------------------------
Charles Gousha                 |    "Yes, Star Trek IS a way of life"
gousha@cory.berkeley.edu       |               (my own philosophy)
All normal disclaimers apply, as well as some abnormal ones.

ebert@parc.xerox.com (Robert Ebert) (02/13/91)

In article <11032@pasteur.Berkeley.EDU> gousha@cory.Berkeley.EDUIn article <Ebh5FuG00WBKM1cW8S@andrew.cmu.edu> hm0i+@andrew.cmu.edu (H. Scott Matthews) writes: writes:
>>    I'm having a few problems with the "Outside In" puzzle.  Actually,
>>I'm having a lot of problems because I can't solve it!
>
>This is a tricky one.  One of the keys is that ALL of the windows have
>to be closed, including the ones along the outside edge.  Notice that 
>there are twelve inside windows, and twelve ouside windows.
>Beyond that, there's no real advice.

Well, also observe that each inside window affects ONLY ONE outside window,
and also only one transition of each inside window (open->closed, closed->open)
changes the state of the outside window.  This means that you have to click
on each inside window EXACTLY ONCE, and that there are additional constraints
on when you can click on the inside window.

Even after observing this, I couldn't come up with a solution, so I wrote a 
computer program to simulate the doors and hack out all the solutions.  It
turns out there are something like 65000 (!) sequences that will solve this
puzzle.  (Out of something like 250,000,000 possible sequences...).

Before spending the time to write the computer program, I tried a methodical
search of the path space, taking doors as close to the 1st (upper left) as
possible each time.  It turned out I got within two 'attempts' of the solution
before I gave up and wrote the computer program.

In any case, this puzzle *is* solvable.  To save you the trouble of coming
up with your own program, though, I'll post mine.  You probably don't need
to run it, but just in case.  Also included here is the program I wrote to
solve the second round of the "safety in numbers" puzzle.  (For some reason,
I had a really tough time with that one.)  Note that /usr/dict/words (on SunOS)
wasn't nearly complete enough to solve all of these.  People who want my
larger word list are welcome to mail me.

			--Bob

P.S.  Hmm, I seem to have left the OutsideIn program at home.  (It's a Think C
program)  Here's the SafetyInNumbers part-2 program...  I'll post the OutsideIn program later tonight.

#include <stdio.h>

char table[9][3] = {
        {'a','j','s'},
        {'b','k','t'},
        {'c','l','u'},
        {'d','m','v'},
        {'e','n','w'},
        {'f','o','x'},
        {'g','p','y'},
        {'h','q','z'},
        {'i','r','r'}};

int clues[9][11] = {
        {1,5,1,3,7,2,9,3,1,3,0},
        {1,5,9,4,9,3,5,0,0,0,0},
        {1,3,6,5,5,0,0,0,0,0,0},
        {9,5,4,5,1,2,0,0,0,0,0},
        {1,9,2,9,1,2,9,3,0,0,0},
        {4,9,4,9,5,5,0,0,0,0,0},
        {3,5,9,6,7,0,0,0,0,0,0},
        {5,6,7,3,6,9,2,0,0,0,0},
        {6,5,3,3,6,5,1,8,9,7,0}};

char solution[11];
char word[256];
FILE *dict;


void
match (clue, level)
        int clue;
        int level;
{
        int i, m;

        if (clues[clue][level] == 0)
        {
                solution[level] = '\0';
                if (strcmp(word, solution) == 0) 
                        printf("%s\n",solution);
                return;
        };
        for (i=0; i<3; i++)
        {
                solution[level] = table[ clues[clue][level]-1 ][i];
                while ((m = strncmp(word, solution, level+1)) < 0)
                        fscanf(dict, "%s\n",word);
                if (m == 0)
                        match(clue, level+1);
        };
};


int 
main(argc, argv)
        int argc;
        char *argv[];
{
        int i;

        dict = fopen("/usr/dict/words","r");
        for (i=0; i < 9; i++)
        {
                fscanf(dict, "%s\n", word);
                match(i,0);
                printf("---------------\n");
                rewind(dict);
        };
        fclose(dict);
};

  You *could* map out what each
>and every window does, but it gets tiring and too analytical very quickly.
>Probably the best idea is just to poke away at it for an hour or two
>(like I did), and hope memory serves you right and gets you lucky.
>
>>    Also, I can't seem to grasp the "this,that,and the other" puzzle...
>
>This one slips my memory.  If you could give a basic description, I could
>probably give you some pointers on it.
>
>>    Anybody with clues would be thanked dearly....
>
>Always glad to help.
>
>>thanks,
>>H. Scott Matthews     | Carnegie Mellon University |
>
>By the way, I there are any of you out there who haven't purchased
>3 in Three, and liked The Fool's Errand, GET IT!  It is definiely the
>greatest and most entertaining puzzle game since the Fool showed his
>face.  Just as many puzzles, a unifying storyline, and in GLORIOUS
>256 COLORS! for those that support it.  There is a demo version
>available from Miles Computing (I have a copy), and does make for
>some good, solid hours of fun puzzle solving.
>
>--------------------------------------------------------------------------
>Charles Gousha                 |    "Yes, Star Trek IS a way of life"
>gousha@cory.berkeley.edu       |               (my own philosophy)
>All normal disclaimers apply, as well as some abnormal ones.

ebert@parc.xerox.com (Robert Ebert) (02/13/91)

In article <1991Feb13.015916.21973@parc.xerox.com> ebert@parc.xerox.com (Robert Ebert) writes:
>In article <11032@pasteur.Berkeley.EDU> gousha@cory.Berkeley.EDUIn article <Ebh5FuG00WBKM1cW8S@andrew.cmu.edu> hm0i+@andrew.cmu.edu (H. Scott Matthews) writes: writes:
>>>    I'm having a few problems with the "Outside In" puzzle.  Actually,
>>>I'm having a lot of problems because I can't solve it!
>>
>P.S.  Hmm, I seem to have left the OutsideIn program at home.  (It's a Think C
>program)  Here's the SafetyInNumbers part-2 program...  I'll post the 
>OutsideIn program later tonight.

As promised, here's the outside in program.  Interpreting it may be almost as
hard as solving the puzzle for yourself, so I'll try to explain.  The legal
array contains information about which transition affects the outside door,
otherwise the outside doors are not represented.  1 indicates the outside
door changes when the inside door goes from closed to open, 0 indicates the
outside door changes when the inside door goes from open to closed.  The
changes array lists which inside doors are affected by the LEGAL transition
of a particular door.  That is, since legal[0] is 1, doors 0, 7, and 10 change
state when door 0 is clicked on in it's closed state.  The other transition
is not represented (as it will never yield an optimal solution.)

moves is an array, each element is set to 1 as the door is manipulated.  This
implement the "each door exactly once" constraint.  Checkmove is a recursive
routine which makes an available move.  If we ever reach level 12 (all doors
are manipulated) then we've reached a solution, so it's printed.  Note that
when printing, I print 1 for the upper-left inside door, but internally this
is represented as door 0.  Also note that the doors are numbered from left to
right, top to bottom.

#include    <stdio.h>           /* printf etc           */
#include    <strings.h>         /* strcat, strcpy, etc  */
#include    <ctype.h>           /* isalnum, etc         */

#define     DEBUG   0

int legal[12] = {
	1,1,0,0,
	1,1,1,0,
	0,1,1,0};

int changes[12][3] = {
	{0,7,10},	{1,5,8},	{2,4,11},	{3,5,10},
	{1,4,11},	{0,5,8},	{4,6,9},	{2,7,9},
	{1,6,8},	{0,2,9},	{1,7,10},	{1,6,11}};
	
int list[12];
long solutions = 0;
FILE *out;

int
checkmove(state, moves, level)
	int state[12];
	int moves[12];
	int level;
{
	int i, j;

	if (level == 12)
	{
		for (i=0; i<12; i++)
		  fprintf(out,"%d ",list[i]+1);
		fprintf(out,"\n");
		printf("*");
		if ((++solutions % 10) == 0)
		  printf("\n\n");
		return(1);
	};
	for (i = 0; i < 12; i++)
		if (!moves[i] && (state[i] == legal[i]))
		{
			int newstate[12];
			int newmoves[12];
			
			for (j = 0; j < 12; j++)
			{
				newstate[j] = state[j];
				newmoves[j] = moves[j];
			};
			newmoves[i] = 1;
			list[level] = i;
			
			for (j = 0; j < 3; j++)
				newstate[changes[i][j]] = !newstate[changes[i][j]]; 
			checkmove(newstate, newmoves, level+1);
		};
	return(0);
};


int
main()
{
	int state[12];
	int moves[12];
	int i;
	
	for (i = 0; i < 12; i++)
		state[i] = moves[i] = 0;
	out = fopen("Hard Disk:New Stuff:3Three solutions","w");
	checkmove(state, moves, 0);
	printf("\nDone.\n");
	fclose(out);
} /* MAIN */

musante@tdw248.ed.ray.com (02/13/91)

In article <11032@pasteur.Berkeley.EDU> gousha@cory.Berkeley.EDUIn article <Ebh5FuG00WBKM1cW8S@andrew.cmu.edu> hm0i+@andrew.cmu.edu (H. Scott Matthews) writes: writes:
>>    I'm having a few problems with the "Outside In" puzzle.  Actually,
>>I'm having a lot of problems because I can't solve it!
>
>This is a tricky one.  One of the keys is that ALL of the windows have
>to be closed, including the ones along the outside edge.  Notice that 
>there are twelve inside windows, and twelve ouside windows.
>Beyond that, there's no real advice.  You *could* map out what each
>and every window does, but it gets tiring and too analytical very quickly.
>Probably the best idea is just to poke away at it for an hour or two
>(like I did), and hope memory serves you right and gets you lucky.

 You *should* map out what each and every window does.  That's how I solved it
 without "poking away at it for an hour or two."  The solution presents itself
 quite nicely when you determine which inside window controls which outside
 window, and whether the outside window closes upon closing the inside window,
 or upon opening the inside window.

 Here's a quick way to figure everything:

 **************** SPOILERS BELOW *********************

------------------------------------------------------------------------------
  There happens to be a very simple solution.  As was pointed out, there are
  twelve outside windows and twelve inside windows.  It stands to reason (to
  coin a phrase) that each inside window controls one and only one outside
  window.  This is, in fact, the case.  All you have to do, then, is:

	1. Number the outside windows 1 to 12 starting from the lower right and
	   working your way counterclockwise.

	2. Then pick an inside window and click on it until it changes the
	   state of an outside window.  Write down the number of the outside
	   window that you changed.

	3. Repeat step 2 for the remaining 11 inside windows.

	4. Starting from 1 and working your way to 12, click on each inside
	   window as you numbered it from step 2.

	5. Volia`!

>--------------------------------------------------------------------------
>Charles Gousha                 |    "Yes, Star Trek IS a way of life"
>gousha@cory.berkeley.edu       |               (my own philosophy)
>All normal disclaimers apply, as well as some abnormal ones.




-- 
mjm
--
                                                      musante@tdw248.ed.ray.com
                                                      musante@sud509.ed.ray.com
						      olorin@world.std.com
                                                      73757.2623@compuserve.com

conrad@brahms.udel.edu (Jon Conrad) (02/14/91)

Bob, I'm in awe of your effort, but it's not that hard (I actually found
this the easiest of the "open/close the gates" puzzles).  As you say,
you must click on each of the 12 inner doors exactly once; some you must
click when open, some when closed.  Each affects one and only one outer
door.  Click 4 times on each inner door (once to see what it reverses
when open, once for same when closed, twice to restore), and write down
the OUTER door it effects (any numbering ID scheme that works for you),
and whether you must be opening or closing to do it.  This will give you
a list of the 12 inner doors, in two columns for OPEN and CLOSE.  Once
you have this list, ANY order of these 12 clicks will work, as long as
it's possible to do all 12 (i.e., you can't leave yourself with all
closed doors when you need a particular open one).  And you must finish
with a closing motion, of course.  Once I wrote down my list, I zipped
through it in one go.  Just alternate fairly regularly between the two
columns (there will be 5 in one, 7 in the other).

Jon Alan Conrad