Editor
Joined: 3/10/2010
Posts: 899
Location: Sweden
I am a fan of the professor Layton games. The games have a lot of puzzles, some of which are of the type that I believe that they can be solved by a program. The main candidate for this is the daily puzzles, puzzles that are designed to work even when there are many of the same type as opposed to being unique. As such, I challenge you all to solve the puzzles.

    "Bewitched"
    You are given a 2d grid that represents a city block. Each cell in the grid can be either:
    * An open street
    * A street with a street lamp
    * An obstacle (house/tree)
     
    The goal is to find the configuration with the minimum number of lit lamps that:
    * All streets (lamp or not) are lit
    * No lit street lamp shines on another lit street lamp
     
    Lamps light all streets in a plus shape, that is up, down, left and right, until blocked by either an obstacle or the edge of the map.
     
    0=Open street
    1=Obstacle
    2=Lamp street
     
    maps[0]=new Map(5,5, new <uint> [
                            0,1,0,2,0,
                            2,2,0,0,1,
                            0,0,1,0,2,
                            1,2,0,2,2,
                            0,0,2,1,0
                            ]);
                           
                            maps[1]=new Map(5,5, new <uint> [
                            0,2,0,2,2,
                            1,2,0,2,1,
                            0,2,1,2,2,
                            1,2,0,2,1,
                            2,2,2,2,2
                            ]);
                           
                            maps[2]=new Map(9,9,new <uint> [
                            1,2,0,2,0,2,0,2,1,
                            0,0,1,0,2,0,1,0,2,
                            2,1,2,0,2,1,2,2,0,
                            0,0,0,1,0,2,0,0,1,
                            0,2,1,0,0,0,1,0,0,
                            1,0,0,2,2,1,0,0,0,
                            0,0,2,1,0,2,2,1,2,
                            2,0,1,2,0,0,1,0,0,
                            1,2,0,0,2,0,0,2,1
                            ]);
                           
                            maps[3]=new Map(9,9,new <uint> [
                            2,0,1,2,2,1,2,0,2,
                            0,1,2,0,1,0,0,1,0,
                            0,1,0,1,0,2,0,1,0,
                            0,1,0,0,1,0,0,1,0,
                            0,0,2,2,0,2,2,0,0,
                            0,1,0,0,1,0,0,1,0,
                            0,1,2,2,0,1,0,1,0,
                            0,1,0,0,1,2,0,1,0,
                            2,0,2,1,2,0,1,2,2
                            ]);
                           
                            maps[4]=new Map(9,9,new <uint> [
                            1,2,1,1,2,1,1,2,2,
                            1,0,0,2,0,2,0,0,1,
                            0,2,1,0,1,0,1,0,1,
                            1,0,1,0,1,0,1,2,0,
                            1,0,2,0,0,0,0,2,1,
                            2,2,1,0,1,0,1,0,1,
                            1,0,1,2,1,0,1,0,2,
                            1,2,0,0,0,0,2,0,1,
                            2,0,1,1,2,1,1,2,1
                            ]);
                           
                            maps[5]=new Map(14,9,new <uint> [
                            2,0,1,2,0,0,2,1,0,2,1,0,2,1,
                            0,1,2,0,1,2,1,0,2,0,0,2,0,2,
                            2,0,2,1,0,2,2,2,1,0,1,0,1,0,
                            0,1,0,2,2,1,0,1,0,2,2,1,2,2,
                            1,0,2,1,0,0,2,2,2,0,1,2,0,1,
                            2,2,1,2,0,0,1,0,1,0,2,0,1,0,
                            0,1,2,1,0,1,0,2,2,0,1,2,0,2,
                            2,0,0,2,0,2,0,1,0,1,0,2,1,0,
                            1,2,0,1,2,0,1,0,2,0,2,1,2,2
                            ]);
                           
                            maps[6]=new Map(14,9,new <uint> [
                            0,0,2,0,2,0,0,1,0,0,2,0,0,2,
                            0,1,2,0,1,2,2,0,0,1,0,0,1,0,
                            2,0,1,1,2,0,2,1,2,0,1,0,2,2,
                            2,0,0,0,2,1,0,1,2,2,0,0,1,0,
                            1,0,2,1,1,0,0,0,0,1,1,2,0,1,
                            0,1,0,0,2,2,1,0,1,0,2,0,0,2,
                            2,0,2,1,0,0,1,0,2,0,1,1,0,2,
                            0,1,0,2,1,2,0,2,2,1,2,0,1,0,
                            2,0,0,0,2,0,1,2,0,0,0,2,0,0
                            ]);
                           
                            maps[7]=new Map(9,9,new <uint> [
                            0,0,2,0,0,0,0,0,0,
                            0,1,0,1,2,2,1,0,2,
                            2,0,0,2,0,1,1,1,0,
                            0,1,2,1,0,2,1,2,0,
                            2,0,0,2,0,2,0,0,0,
                            0,2,1,0,2,1,0,1,0,
                            0,1,1,1,2,0,0,0,2,
                            2,0,1,2,0,1,0,1,0,
                            0,2,0,0,0,0,2,0,0
                            ]);
                           
                            maps[8]=new Map(9,9,new <uint> [
                            2,0,1,0,2,2,0,0,2,
                            0,1,0,0,2,1,0,1,0,
                            2,0,2,1,0,0,0,2,2,
                            0,0,0,2,0,1,2,0,1,
                            2,1,2,0,1,0,2,1,0,
                            1,2,0,1,0,0,0,0,2,
                            0,0,2,0,2,1,0,2,2,
                            2,1,0,1,0,0,0,1,0,
                            2,0,2,0,2,2,1,2,2
                            ]);
                           
                            maps[9]=new Map(14,9,new <uint> [
                            2,0,1,2,1,0,2,0,2,0,1,2,0,2,
                            0,1,2,0,2,2,1,0,0,0,2,0,0,2,
                            2,0,2,1,0,1,0,0,2,1,0,0,1,0,
                            0,1,1,0,2,0,2,1,0,0,1,2,0,1,
                            0,2,0,2,0,1,0,2,1,2,2,0,0,2,
                            1,0,2,1,0,0,1,2,0,0,0,1,1,0,
                            0,1,2,2,1,2,0,0,1,0,1,0,2,2,
                            2,0,0,0,2,0,2,1,0,2,2,0,1,0,
                            0,0,2,1,0,2,0,2,0,1,0,1,2,0
                            ]);
                           
                            maps[10]=new Map(14,9,new <uint> [
                            0,2,0,0,0,2,1,2,0,0,2,0,0,2,
                            0,2,1,2,1,0,0,0,1,2,0,0,1,0,
                            0,1,2,0,0,1,2,0,0,1,2,1,2,0,
                            2,0,0,2,0,0,0,1,0,0,2,0,0,2,
                            1,2,0,1,0,0,2,0,2,0,1,0,2,1,
                            0,0,0,2,0,0,1,2,0,0,2,0,0,0,
                            2,0,1,0,1,0,2,0,1,2,0,0,1,0,
                            0,1,2,0,0,1,0,2,0,1,0,1,2,2,
                            0,0,2,0,2,0,0,1,0,0,2,0,0,2
                            ]);
                           
                            maps[11]=new Map(9,9,new <uint> [
                            1,2,0,1,2,0,0,2,1,
                            2,0,0,2,0,0,1,0,0,
                            0,1,0,0,2,1,0,1,2,
                            1,0,2,1,0,0,2,0,2,
                            2,0,1,0,1,2,1,2,0,
                            0,2,0,2,0,1,0,0,1,
                            0,1,2,1,2,0,2,1,0,
                            2,0,1,2,0,0,0,2,2,
                            1,2,0,0,2,1,2,0,1,
                            ]);
                           
                            maps[12]=new Map(9,9,new <uint> [
                            1,2,0,0,1,0,2,0,1,
                            0,0,0,2,0,0,2,0,0,
                            1,0,1,0,2,2,1,0,1,
                            0,2,2,1,0,1,2,2,0,
                            0,1,2,0,1,2,0,1,0,
                            2,2,2,1,0,1,0,2,2,
                            1,0,1,0,0,2,1,0,1,
                            0,2,0,2,2,0,2,0,0,
                            1,2,0,0,1,2,0,2,1
                            ]);
                           
                            maps[13]=new Map(14,9,new <uint> [
                            1,0,2,0,2,1,2,0,0,1,2,2,2,2,
                            2,0,0,1,0,2,2,1,0,0,2,0,1,0,
                            0,1,0,2,2,2,1,2,0,0,1,0,0,0,
                            0,0,0,0,1,2,2,2,1,2,2,2,0,0,
                            1,0,1,2,2,2,2,2,2,2,2,1,0,1,
                            2,2,2,2,2,1,2,2,2,1,2,2,2,0,
                            2,0,0,1,0,0,2,1,0,0,0,0,1,2,
                            0,1,0,0,2,0,1,0,0,2,1,0,2,0,
                            0,0,2,0,1,0,0,2,1,0,0,2,0,1
                            ]);
                           
                            maps[14]=new Map(14,9,new <uint> [
                            2,0,2,0,0,2,0,0,0,0,0,0,0,0,
                            0,0,0,0,2,0,1,0,0,0,0,2,0,2,
                            0,2,0,1,0,2,0,0,0,0,0,0,1,0,
                            1,0,0,0,1,0,0,0,0,1,0,0,0,2,
                            0,2,0,2,0,2,0,2,0,2,0,2,0,0,
                            2,0,2,0,1,0,0,0,0,0,0,0,2,1,
                            0,1,0,0,0,2,0,0,2,0,1,2,0,2,
                            2,0,2,0,2,0,2,1,0,2,0,0,2,0,
                            0,2,0,2,0,2,0,0,2,0,0,2,0,2
                            ]);
                           
                            maps[15]=new Map(14,9,new <uint> [
                            1,0,1,0,2,0,2,0,0,2,0,0,0,2,
                            0,2,2,0,1,2,1,0,1,0,1,2,1,0,
                            0,1,0,2,0,0,0,0,1,0,1,0,1,2,
                            2,2,0,2,1,0,1,2,1,0,2,0,2,0,
                            1,0,1,0,2,0,2,0,2,0,0,1,0,1,
                            0,2,0,2,0,1,0,1,0,1,0,2,0,2,
                            2,1,0,1,2,1,0,2,0,0,2,0,1,2,
                            0,1,0,1,0,1,0,1,2,1,0,0,0,0,
                            2,0,2,0,0,2,0,0,0,2,0,1,2,1
                            ]);
                           
                            maps[16]=new Map(9,9,new <uint> [
                            2,0,0,0,2,1,0,0,2,
                            0,1,0,2,0,1,0,2,0,
                            0,0,2,0,0,0,2,0,2,
                            0,2,1,0,0,2,0,0,1,
                            2,1,2,0,2,0,0,1,0,
                            1,2,0,0,0,2,1,0,2,
                            2,0,0,0,0,0,2,0,0,
                            0,0,0,1,0,2,0,1,0,
                            0,0,0,1,2,0,0,0,2
                            ]);
                           
                            maps[17]=new Map(14,9,new <uint> [
                            1,1,2,0,2,0,0,1,2,0,0,0,1,1,
                            0,1,0,1,0,0,2,2,0,1,0,2,2,1,
                            2,0,2,0,0,1,2,0,0,0,1,2,0,0,
                            0,0,1,0,0,2,1,0,0,2,2,0,0,2,
                            1,2,0,0,1,0,0,2,2,1,2,0,2,1,
                            2,0,0,2,0,0,2,1,0,0,0,1,0,2,
                            2,0,0,1,0,2,0,2,1,2,0,2,0,2,
                            1,2,2,0,1,0,0,0,2,0,1,0,1,0,
                            1,1,2,0,0,2,1,2,0,0,0,2,1,1
                            ]);

    "Alchemy":
    You are given a 2d grid. On the grid are flasks. Each flask is labeled with a number.
     
    Flasks can be connected on empty cells in the grid using straight, non crossing lines. Each connection can be done using one or two pipes. Connections can not cross each other.
     
    The number on each flask is the number of pipes connecting it to the other flasks.
     
    The goal is to connect all the flasks into one graph. That means that any flask should be reachable by any other flask.
     
    40603
    00010
    40300
    00001
    20020
     
    30200
    01003
    50400
    00000
    20303
     
    300005003
    003040020
    000002003
    200000000
    004080040
    000000000
    203001003
    000000000
    304020102
     
    30500203000403
    01000000303000
    00301002020100
    30010200303003
    02004003050020
    00200300300103
    20000000003030
    00303010200000
    30030503003003
    "Fiefdoms"
    You are given a 2d grid that represents a small country. On the grid are castles.
     
    Each castle has a number on it. The number represents the area that it controls.
     
    The goal is to create rectangular, non overlapping, regions with an area so that the single castle in each region has an area exactly matching the number on the castle.
     
    Castles with numbers larger than 9 continue using hexadecimal digits.
     
    90002
    00000
    00000
    00000
    60008
     
    06600400
    00000002
    00004000
    25000000
    00000046
    00050000
    30000000
    00400A30
     
    500005000800
    005080000020
    000000090000
    060000000004
    300000000080
    006000000000
    030000060300
    005000600004

    "Ghouls"
    You are given a 2d grid. Along the borders of the grid are guards and ghouls. Ghouls and Guards are color coded, there is only one each of each color. The inside of the grid is split into regions.
     
    Each region contains one mirror. Mirrors are angled at a perfect 45 degrees angle. Each guard emits a beam towards the grid. The beam reflects at a 90 degrees angle when it hits a mirror. Both sides of a mirror may reflect a beam.
     
    The goal is to reflect the beams so that they hit the matching ghoul in exactly the number of bounces marked on the ghoul.
     
    0A00B0
    01122B
    D11220
    03344A
    B33440
    00CD00
    A=1
    B=1
    C=1
    D=1
     
    0ABBD0
    011220
    C13320
    04335D
    04455A
    000C00
    A=1
    B=2
    C=1
    D=1
     
    0ABCDEFG0H00
    011233455660
    07723345566I
    I8722995aaaH
    D888b99ccdaJ
    0eebbfggcddB
    CeebbfggchhK
    0G0AE00JK0F0
    A=2
    B=1
    C=3
    D=1
    E=4
    F=2
    G=2
    H=1
    I=2
    J=3
    K=5
    "Ducklings"
    You are given a 2d grid. On the grid are ducklings and their mothers.
     
    The each grid cell contains one of:
    * Empty
    * Obstacle
    * Mother duck
    * Numbered duckling
     
    The goal is to form chains consisting of a mother duck followed by four ducklings. You may place additional ducks to do so.
     
    Mothers look in the direction opposite from the location of the first duckling of the chain. Mothers must not see any other chain.
     
    Chains may not touch, diagonals don't count.
     
    000002
    0XX0M0
    0M0X00
    00X0M0
    300XX0
    00M000
     
    X00MXM00X
    010000X00
    3X0X0X000
    00X040X00
    X00MX000X
    00X000X00
    000X0XMXM
    00X0M0020
    X030X000X
     
    0X00M002000000
    0010000XX00002
    40000000000000
    000X00X0010MX0
    X020000000X000
    4000040X000000
    0000000X000000
    4X0000300X000X
    00000000X40004
Whose Tile Is It Anyway? ("Whose Tile" for short)

You are given a grid with open and closed cells and a set of blocks.
All blocks are straight lines. The blocks may be rotated on 90 degree angles.
Each block is composed of colored cells and align with the grid when placed in the grid.

The goal is to position all the blocks inside the open cells of the grid so that all overlapping parts of the blocks have the same color as the corresponding position of the other blocks.

Zero indicates open cells and ones indicate closed cells.

00000
01011
00000
01101
00001
BBBBB
RRRR
BBBRR
BBB
BRBRB
RRR

01000010
00011000
01000010
01011010
00000000
01110101
RBYGRBYG
RGBG
RBRBRB
YBYB
YYRGY
BYG
RGYRG
BYY
BBGGB
RB
YR

00000010
01010110
01000000
00010110
01100000
00001110
RRBBBR
BYGO
RRRGGG
GYBR
GGGYYY
GGO
BBYYGY
BR
BGGGO
BOOOG

000000
101010
000010
101000
001101
100000
RBYGYR
RBBY
BGRBYO
GYBR
OBGYR
GRYB
RBY
BGY
BY

01000001
00010110
10100000
00001010
10100010
00001000
GGPOY
YOBY
BYRPO
YROY
GGPGO
GOGO
GPGOG
GYGY
YBY
PBP
OBO
GBG
OY
GY

00000000
10101010
00001010
01010000
01010110
00000000
YYBRGYBR
GYGY
GYBRGYBB
GYRR
BRGYBR
YGGY
RRYB
GGYY
YBY
GBG
RBR
Joined: 7/2/2007
Posts: 3960
The first three puzzles you linked are also known as Light Up, Bridge, and Nurikabe. I don't recognize the other two offhand.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Editor
Joined: 3/10/2010
Posts: 899
Location: Sweden
I don't think Light Up and Nurikabe is the same. They certainly are similar, but not the same.
Skilled player (1887)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
Bewitched interested me, so I wrote a program that seems to solve most maps I've thrown at it. Interestingly, it looks for the only possible solution rather than a possible solution. So if there is another solution to this map I would be interested to see it (and would need to investigate why my program rejected it). Here is my program's solution to map 17 using 19 lamps.
Editor
Joined: 3/10/2010
Posts: 899
Location: Sweden
Heh, I did the same myself. But somehow my code fails to reach a conclusion in a few spots for a few maps. I guess I missed a rule somewhere.