Initial commit

This commit is contained in:
Rory Healy 2021-10-11 12:24:40 +11:00
commit ae85d7dbff
62 changed files with 58194 additions and 0 deletions

51
Makefile Normal file
View file

@ -0,0 +1,51 @@
##
## EPITECH PROJECT, 2017
## Makefile
## File description:
## Makefile
##
#CC = gcc -Wall -Wextra -O3 -g
CC = gcc -Wall -Wextra -g
RM = rm -f
NAME = sokoban
SRC = src/main.c \
src/helper.c \
src/key_check.c \
src/loose_check.c \
src/find_player.c \
src/map_check.c \
src/map_reading.c \
src/movement.c \
src/play.c \
src/win_check.c \
src/zone_check.c \
lib/my_putchar.c \
lib/my_putstr.c \
src/ai/utils.o \
src/ai/priority_queue.o \
src/ai/hashtable.o \
src/ai/ai.o \
CFLAGS += -I./include/
OBJ = $(SRC:.c=.o)
all: $(NAME)
$(NAME): $(OBJ)
$(CC) -o $(NAME) $(OBJ) -lncurses
clean:
$(RM) $(OBJ)
fclean: clean
$(RM) $(NAME)
re: fclean all
.PHONY: all clean fclean re

3
README.md Normal file
View file

@ -0,0 +1,3 @@
# Deadlock and Optimizations
Explain your optimizations if applicable

13
include/libmy.h Normal file
View file

@ -0,0 +1,13 @@
/*
** EPITECH PROJECT, 2017
** libmy.h
** File description:
** Contain all the prototypes of function in libmy
*/
#include <stdarg.h>
#ifndef LIBMY_H
#define LIBMY_H
void my_putchar(char c);
int my_putstr(char const *str);
#endif

49
include/sokoban.h Normal file
View file

@ -0,0 +1,49 @@
/*
** EPITECH PROJECT, 2017
** bsq.h
** File description:
** Contain all the prototypes needed for BSQ
*/
#ifndef BSQ_H
#define BSQ_H
typedef struct sokoban {
char *buffer;
char **map;
char **map_save;
int lines;
int player_x;
int player_y;
char const *base_path;
int win;
int case_number;
int num_chars_map;
} sokoban_t;
int helper(void);
char *read_map(int reading);
char *open_map(char const *path);
sokoban_t make_map(char const *path, sokoban_t sokoban);
int play(char const *path);
sokoban_t count_lines(sokoban_t sokoban);
int count_columns(sokoban_t sokoban, int position);
sokoban_t check_if_player(sokoban_t sokoban, int y, int x);
sokoban_t find_player(sokoban_t sokoban);
sokoban_t key_check(sokoban_t sokoban, int key);
sokoban_t move_right(sokoban_t sokoban);
sokoban_t move_left(sokoban_t sokoban);
sokoban_t move_up(sokoban_t sokoban);
sokoban_t move_down(sokoban_t sokoban);
void win_check(sokoban_t sokoban);
int count_storage_zone(int y, int x, sokoban_t sokoban);
int count_storage_won(int y, int x, sokoban_t sokoban);
sokoban_t check_zone_reset(sokoban_t sokoban);
sokoban_t reset_zone(int y, int x, sokoban_t sokoban);
void loose_check(sokoban_t sokoban);
void storage_loose_check(int y, int x, sokoban_t sokoban);
void map_check(sokoban_t sokoban);
int count_case_number(int y, int x, sokoban_t sokoban);
int count_player(int y, int x, sokoban_t sokoban);
sokoban_t game_management(sokoban_t sokoban);
int check_tile(int y, int x, sokoban_t sokoban);
int is_goal_cell(int y, int x, sokoban_t sokoban);
#endif

14
lib/my_putchar.c Normal file
View file

@ -0,0 +1,14 @@
/*
** EPITECH PROJECT, 2017
** my_putchar
** File description:
** put char
*/
#include "../include/libmy.h"
#include <unistd.h>
void my_putchar(char c)
{
write(1, &c, 1);
}

19
lib/my_putstr.c Normal file
View file

@ -0,0 +1,19 @@
/*
** EPITECH PROJECT, 2017
** my_putstr
** File description:
** Display one by one the characters of a string.
*/
#include "../include/libmy.h"
int my_putstr(char const *str)
{
int i = 0;
while (str[i] != '\0') {
my_putchar(str[i]);
i++;
}
return (0);
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,712 @@
;These levels are made GRIGoRusha
;You always can find these levels, and as many new levels
;of this author on his home page: http://grigr.narod.ru
;You may write to the author email: grigr@yandex.ru
;I done not interested with my CopyRights !!!
;You may do everything with these levels, that want.
;I shall be pleased, if you place them in the program or on the site.
;Do not ask me the sanction.
;101
#####
# #########
# $ ## #
##$#... #
## ##$#### ##
# ##..+ # #
# $ # $ #
# ###$### #
##### ##
# ####
#####
Author: GRIGoRusha
Title: Double choice #101
Comment:
color green
Comment-End:
;102
########
# # ###
## $ #
# ##$# #
# $ #..# ##
###$#..# #
#@$.. #
#$# # #
# ####
#####
Author: GRIGoRusha
Title: Wake up #102
Comment:
color blue
Comment-End:
;103
#########
### # #
# *.* # #
# * *@* # #
# # .*. # #
# $ $ $ #
## #######
####
Author: GRIGoRusha
Title: Colobok #103
Comment:
color yellow
Comment-End:
;104
######
# ####
# # $ #
# *#* #
##$.@.$##
# *.* #
# # # # #
# # #
#########
Author: GRIGoRusha
Title: Red star #104
Comment:
color red
Comment-End:
;105
#########
# #@ #
# **#$##
### # #
# $$**#.# #
# # # . #
# ##. ##
## .#$#
# ## #
#########
Author: GRIGoRusha
Title: Kruchok #105
Comment:
color green
Comment-End:
;106
####
# ####
## $ ###
# ##$.. #
# $@# . #
## #$$$# ##
# . # #
# .. ## #
### ##
#### #
####
Author: GRIGoRusha
Title: Anchor #106
Comment:
color purple
Comment-End:
;107
#####
###### ##
# $ $ #
# # ###$#@#
# # $ ##
##.... #$$ #
# #.### # #
# . #
## ######
#####
Author: GRIGoRusha
Title: Return #107
Comment:
color yellow
Comment-End:
;108
###########
# # # #
#@ $ #
# ##*## #
## ##.## ##
# #... ##
# #$##.# #
# $ $$ #
##### # #
#######
Author: GRIGoRusha
Title: Contra #108
Comment:
color blue
Comment-End:
;109
####
### ###
# $$ ##
# # #
# # #* #
# # $#. #
## #$@#*.#
# $#..#
# # .* #
####### #
####
Author: GRIGoRusha
Title: Krasotka #109
Comment:
color green
Comment-End:
;110
#####
## #########
# ## ##
## #$#...$ $# #
## #*#.#. $ #
# #$$$#+#***# #
# $ # #*#. . ##
# #$ $...#$# ##
## ## #
######### ##
#####
Author: GRIGoRusha
Title: Father diode #110
Comment:
color red
for David Holland
Comment-End:
;111
########
# # #
# ##
## ## #
# *..#$#
# *.. ##
##$### #
# $$@#
# ## #
#########
Author: GRIGoRusha
Title: Aniska #111
Comment:
color purple
Comment-End:
;112
##########
# ## #
# $ #
##.#*## ##
# ..* @ ##
# *** # #
###.# # #
# #$$ #
# $ ###
# # #
#######
Author: GRIGoRusha
Title: Serpik #112
Comment:
color blue
Comment-End:
;113
####
# #
####. ####
# . ###
# .$.$$*.* #
### $@$ #
####$.####
# #
####
Author: GRIGoRusha
Title: My heart #113
Comment:
color red
thank Serg Belyaev
Comment-End:
;114
#####
# ######
# #$## #
# $ #
###$ ##$##
# ... #
#$ .#$#
## ... #
# $#.#$#
# @ #
# # ##
#######
Author: GRIGoRusha
Title: Kuterma #114
Comment:
color yellow
Comment-End:
;115
####
# #######
# $@# #
# #**. #
##$# .# #
# # *# ##
# * ##
# # ## #
### #
# ####
#####
Author: GRIGoRusha
Title: Trevoga #115
Comment:
color green
Comment-End:
;116
#####
##### #####
# # #$# #
# # ... # #
# $ #.#*# $ #
###$###.. ###
# $ #
# #@###$# #
# # # #
##### #####
Author: GRIGoRusha
Title: Sheriff #116
Comment:
color blue
Comment-End:
;117
####
## ###
#### #
# #*.*# #
# .#.# #
# #*.* #
## # $##
# $@# ##
## #$# #
# $ #
# ## #
#########
Author: GRIGoRusha
Title: Dreams #117
Comment:
color purple
Comment-End:
;118
#####
##### #
# #$# #
# $ $ #
##$#@## #
# # #
# $##$# ##
# # .# #
## ... #
###..# #
#######
Author: GRIGoRusha
Title: Irka #118
Comment:
color red
Comment-End:
;119
########
#### # #
# # #
# $ ##$##
# ## ## ###
## .**## #
# *+* # #
## #### #
# ###
########
Author: GRIGoRusha
Title: Zagar #119
Comment:
color yellow
Comment-End:
;120
#### #####
# ##### #
# $ @ $ #
# # ...# ##
##$##.#.# ##
# $.#*# ##
# # $$ #
######### #
## #
####
Author: GRIGoRusha
Title: Depth #120
Comment:
color green
Comment-End:
;121
##### ####
# #### #
# $$ #
##$##### #
# #.. $ ##
# ...## #
# #.. #$@#
#### # #
##$#### ##
# $ #
# ## #
##########
Author: GRIGoRusha
Title: Honour #121
Comment:
color blue
Comment-End:
;122
#######
# # ###
### $# . #
# $.$. #
# .$.$.###
## $.$.$#
# .$.$@#
###.$###
# #
####
Author: GRIGoRusha
Title: Marazm #122
Comment:
color green
Comment-End:
;123
#########
# ## #
# $ ###
# ##$ # #
## # $$@#
# *. ## #
# #.###$##
#$#*## #
# ..# #
##.. ##
# #####
####
Author: GRIGoRusha
Title: KUB #123
Comment:
color purple
Comment-End:
;124
#### #####
# ## ## #
# ### $ #
# $$ $ ##
## ####$##
## . $ #
# # ... #
##$##**###
# $ ...#
# ##+#
########
Author: GRIGoRusha
Title: Pryanik #124
Comment:
color yellow
Comment-End:
;125
####
##### ## #
# ### #
# $@$ #
## $#$# ##
# ...# ###
# #**#$$ #
# ... # #
## # #
#########
Author: GRIGoRusha
Title: Svadba #125
Comment:
color red
Comment-End:
;126
####
#######@ #
# #.*.$ #
# .#.$ #
# #.*.$##
## $# ##
# ## #
##$ # #
# $ ### #
# ## ####
#####
Author: GRIGoRusha
Title: Blue Eye #126
Comment:
color blue
Comment-End:
;127
#####
## #########
# ## ##
## #$#...$ $# #
## .#$#.#. $ #
# #$$*#+#*$*# #
# $ #.#$#. . ##
# #$ $...#$# ##
## ## #
######### ##
#####
Author: GRIGoRusha
Title: Ziko-City #127
Comment:
color purple
Comment-End:
;128
#######
### # #
# $@ #
# # #..#
# $$##..#
#### .**#
# $$.# ##
# # ## #
#### $ #
# # #
########
Author: GRIGoRusha
Title: Uspex #128
Comment:
color green
Comment-End:
;129
####
###### #
# #.. $#
### #..$ #
# $ $ .# $###
# $ #+ $ $ #
### $..# #
#$ ..# ###
# ######
####
Author: GRIGoRusha
Title: Perekrestok #129
Comment:
color purple
Comment-End:
;130
#####
## #
# #####
##$# ## #
#@ # $ #
# $.*.* ###
# $.*. #
## # * #
##### #
####
Author: GRIGoRusha
Title: for Paul #130
Comment:
color red
Comment-End:
;131
#####
##### ## #
# ### $ #
# $ ##
###### ### #$##
# #..... # ###
#@# $.###.$# #
# #.###.$ # #
### #....$## #
## $ $ ######
## ####$##
# $$ $ #
# ### #
# ## #####
####
Author: GRIGoRusha
Title: Nadejda #131
Comment:
color blue
Comment-End:
;132
####
### ########
# $ .+.# #
# $ #$#*. #
###$##...# #
## # $$$ ##
# # # ## #
# #
# ########
####
Author: GRIGoRusha
Title: Flying idea #132
Comment:
color red
Comment-End:
;133
########
#### # #
# #.#. #
# ***# #
# #... ##
### ##$## ##
# $# $ ##
# $ @## #
## $##### #
# # #####
####
Author: GRIGoRusha
Title: Sambist #133
Comment:
color purple
Comment-End:
;134
##### #####
# ### #
# $ $ #
## #...# ##
# $***$ ##
## ...# #
#@ #$$ #
## ####
#####
Author: GRIGoRusha
Title: Rogalik #134
Comment:
color yellow
Comment-End:
;135
#### #####
# #### #
# $ #
# #$###$##
## .*.*..#
## ## # ##
# $ #
# ##@ #
##########
Author: GRIGoRusha
Title: Mekom #135
Comment:
color blue
Comment-End:
;136
########
# #@ #
# $ ####
# $#.## #
## ... # #
# ##.. $ #
##$##.#$# #
# $ $ #
# #######
#####
Author: GRIGoRusha
Title: Oberon #136
Comment:
color green
Comment-End:
;137
##########
# ## #
# $ @ $ #
## #### ##
# ..## #
# $.*. $#
# #.## #
### # #
# $#
# # #
# #####
####
Author: GRIGoRusha
Title: SokoSutra #137
Comment:
color red
Comment-End:
;138
#####
# #######
# $ #
## ##... #
##$##$##$##
# ...## ##
# $@$ #
####### #
#####
Author: GRIGoRusha
Title: Suriken #138
Comment:
color yellow
Comment-End:
;139
####
# ### #####
# $ ### #
# $ $@$ #
##$# ...#$##
## ##.#. ##
# # # #
# #.*.$ #
######### #
####
Author: GRIGoRusha
Title: Mad Dog #139
Comment:
color purple
Comment-End:
;140
#####
# #########
# $ ##
##$### # $...#
# $ ## $ .#
## # ..# $#.#
#..##.## $ #
#. $ ## $###
# # $$@# #
##### ####
#####
Author: GRIGoRusha
Title: Juravli #140
Comment:
color green
Comment-End:

View file

@ -0,0 +1,634 @@
;GrigrSpecial01
#####
# #########
# $ ## #
##$#.. #
## ##*#### ##
# ##. @ # #
# $.. # $ #
# ###$### #
## #####
#### #
#####
Author: GRIGoRusha
Title: Krutoy Povorot
;GrigrSpecial02
##########
# .## ##
# $@$# #
##$#.#. $ #
# #*$*# #
## #. . ##
# .#$# ##
# #
#### ##
#####
Author: David Holland and GRIGoRusha
Title: Jump in Depth
Comment:
remodel DH Bagatelle 10
Comment-End:
;GrigrSpecial03
####
######## @#
# $ $ $ $#
# #*. .# ##
# . #. #
##$### . #
# #####
#######
Author: Aymeric du Peloux and GRIGoRusha
Title: New hairdress
Comment:
remodel MicroCosmos 37
Comment-End:
;GrigrSpecial04
#####
# ####
# $.$ ##
##$#@# #
# ... #
##$#.# ##
# $ #
# # #
#########
Author: Aymeric du Peloux and GRIGoRusha
Title: Hybrid
Comment:
remodel NaboKosmos 32
Comment-End:
;GrigrSpecial05
#####
## ####
# # #
## # ## #
# # #
# $**** ##
# $ ..* #
##@ # * #
##### #
####
Author: GRIGoRusha
Title: The Dancer
Comment:
Only for Paul and with help Paul
Comment-End:
;GrigrSpecial06
#########
# ## #
# $ #
## #*#$ #
# *.# ##
##$#@*. ###
# .*.# #
# $ # # #
# ## #
## ######
#####
Author: GRIGoRusha
Title: SkyFlier
;GrigrSpecial07
##########
# ## #
# # $ #
# #*# ##
### *+* #
##$***$ #
# #..###
# #
# # # #
#### #
#####
Author: Betepok
Title: Znaki
;GrigrSpecial08
#####
#@ #
###$# #
# $ #
# .*.###
#$.*.$ #
# .*. #
## #$# ##
# $ #
# # #
#########
Author: GRIGoRusha
Title: Right way
;GrigrSpecial09
####
## #
## $ ###
# $@* #
# * #.#
##* * #
# . . #
# #$###
# #
#####
Author: Aymeric du Peloux and GRIGoRusha
Title: SnowFall
Comment:
remodel PicoKosmos 20
Comment-End:
;GrigrSpecial10
#####
## #
# # ##
##*. #
# *.# #
#@#*$ #
# *. # #
##$# # ##
# $ #
# # #
#########
Author: GRIGoRusha
Title: Kiborg
Comment:
for Fred, with many Thanks for You
Comment-End:
;GrigrSpecial11
#####
## #
# .#$#
## * @#
## ***##
# * #
# # # # #
# # #
#########
Author: Kevin B. Reilly and GRIGoRusha
Title: Slider from Game Life
Comment:
design some level from Kevin levels sets
Comment-End:
;GrigrSpecial12
########
# * #
#@ * * #
##$$*$* #
# $ * . #
# # . ###
# . . #
#######
Author: YASGen, Brian Damgaard and GRIGoRusha
Title: Impossible Way
Comment:
for Brian Damgaard
design some level from YASGen level set
Comment-End:
;GrigrSpecial13
####
#### #
# $ #
# $# ###
# @# # #
# ## $ #
#.* # #
#.*..* ##
## ### ##
# $ #
# # #
#########
Author: GRIGoRusha
Title: Soldafon
;GrigrSpecial14
#####
### ##
# #
# #..# ##
#$#****.#
# #
## #### ##
#@$$ #
# ## #
##########
Author: Nakamiya and GRIGoRusha
Title: Lost Hunter
Comment:
for Nakamiya
Comment-End:
;GrigrSpecial15
##### #####
# ### #
# @ $ #
##$##$$#$##
# #..# #
#$ #... #
# #..# #
## ##$####
# ## #
# #
# ## #
########
Author: GRIGoRusha
Title: Roga i Kopita
Comment:
for York Shen !!!
Comment-End:
;GrigrSpecial16
#########
# # #
# $ #
#### #$# ##
# # #
# $##@# #
## *..*# #
# *..*. #
#$# #$###
# #
#######
Author: GRIGoRusha
Title: Matros
;GrigrSpecial17
######
# * #
### ##
# *.@** #
# $* #
### ####
# #
####
Author: Dries De Clercq and GRIGoRusha
Title: Wanderer
;GrigrSpecial18
#####
# ###
# .$. #
###$.$@ #
# . .$###
# $. #
## ##$#
# #
######
Author: Lee J Haywood and GRIGoRusha
Title: The Rain
;GrigrSpecial19
########
# # #
# $ @#$#
# # #
## . .$#
## ##. ##
# ##. #
# $.$.$ #
# ######
####
Author: GRIGoRusha
Title: Russian Beauty
;GrigrSpecial20
####
### @####
# $$$ #
# #.*.# #
# .* # #
## #*.# ##
# $ #
# ## #
##########
Author: GRIGoRusha
Title: Brave Heart
;GrigrSpecial21
####
# #
####. ###
# $$$@ #
# .. # #
##$$$ #
#...####
## #
####
Author: GRIGoRusha
Title: Light Draft
Comment:
for Monry
Comment-End:
;GrigrSpecial22
####
# ###
# ##
### # #
# $.@# #
# .$.$. #
##.$##$##
# #
#######
Author: GRIGoRusha
Title: Assol
;GrigrSpecial23
####
# ####
# * #
### ....#
# $*$$ #
# . ###
###$*$@#
# #
######
Author: GRIGoRusha
Title: Elki-Palki
;GrigrSpecial24
#####
# + #
#$.$#
# * #
# * #
# * ######
## * $ #
# * **.*.#
# $ #
## #######
####
Author: GRIGoRusha
Title: Duble Hanoy
Comment:
for Aymeric
Comment-End:
;GrigrSpecial25
####
# ###
# #
### # #
#@****.#
# # *.##
# # #
## #$# ##
# $ #
# # #
#########
Author: GRIGoRusha
Title: Ribolov
;GrigrSpecial26
########
# @ ###
## ## # #
# ## $ #
# $##$## ##
# $ .$.$$#
##$..... #
# .#$#.$#
# ..$.. #
##### $$#
# #
#####
Author: GRIGoRusha
Title: The Temple
Comment:
for Hir
Comment-End:
;GrigrSpecial27
#####
# #####
# #
##$#$$$@#
# # ####
## ## $ #
#.... . #
# ### #
##### ####
Author: GRIGoRusha
Title: Gambit
Comment:
date: 02.01.05
Comment-End:
;GrigrSpecial28
#########
# # #
# $$@#
## ### ##
# .. #
## ## #
#.**##$##
# #
##### #
#####
Author: GRIGoRusha
Title: Baton
Comment:
date: 02.01.05
Comment-End:
;GrigrSpecial29
#####
# #
## # ###
# * $ #
# *** #
#.* * @#
# * #
########
Author: GRIGoRusha
Title: Vilka
Comment:
date: 07.03.05
Comment-End:
;GrigrSpecial30
####
#@ #
##$ ###
# * #
### * #
# * *###
# * #
### . #
#####
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Turn
Comment:
date: 23.03.05
Comment-End:
;GrigrSpecial31
####
# #
##### ###
# **$ #
# .* #
# # * ###
#### @##
####
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Trap
Comment:
date: 23.03.05
Comment-End:
;GrigrSpecial32
####
# ###
# $ #
###* * #
# * . #
# #* #
## * @##
# ###
####
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Rain
Comment:
date: 23.03.05
Comment-End:
;GrigrSpecial33
####
### @#
# $ ###
#.$.$ #
# .$. #
#.$#$###
# . #
# ###
####
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Cell
Comment:
date: 29.03.05
Comment-End:
;GrigrSpecial34
#####
# ##
# $. #
##$. #
# . #
#$.$###
#@.$ #
#$.$. #
# ###
#####
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Line
Comment:
date: 30.03.05
Comment-End:
;GrigrSpecial35
####
# ###
# #
#.* ###
# *# #
# *@$ #
# ** ###
### #
####
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Hook
Comment:
date: 02.04.05
Comment-End:
;GrigrSpecial36
####
#@ #
##.$###
# $ $ #
# .$. ##
# $.$ #
##.#. #
# ###
#####
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Tree
Comment:
date: 03.04.05
Comment-End:
;GrigrSpecial37
####
# #
### *####
# $ . #
# * *#
###@* * #
## * #
### #
####
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Vamp
Comment:
date: 04.04.05
Comment-End:
;GrigrSpecial38
####
# ##
#$. #
#.$ ####
## .$.@ #
# $.$ #
# $. ####
# .$ #
######
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Tool
Comment:
date: 05.04.05
Comment-End:
;GrigrSpecial39
####
# ##
# #
# * #
#*@*#
# * ##
### * #
# *$ #
# . ##
#######
Author: Dries De Clercq and GRIGoRusha
Title: Unfinished Fish
Comment:
date: 06.04.05
Comment-End:
;GrigrSpecial40
#####
### #
## #
# *** ##
# @* #
# ** ##
### #
# #
####
Author: Aymeric du Peloux and GRIGoRusha
Title: Finish
Comment:
date: 15.04.05
For Erim Sever
for play in this level in normal style load NaboKosmos 40a from RemodelClub
Comment-End:

1279
maps_suites/Holland_81.xsb Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

1841
maps_suites/Microban_155.xsb Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,892 @@
; Sasquatch II (50 puzzles, released August, 1999)
; 1
#####
# #####
# $ $ $ #
### # # #
# # #
## ### ##
# .....@#
# $ $ #
# ### ###
# #
#######
; 2
####
######..#
# . #
# # ..#
# ## ###
# $ ##
# # #$ @#
# # $ $ #
# ## $ ##
##### #
#####
; 3
#####
## ##
# ##
# @ #
############ #. #
# #.##
# ############.#
# .#
##$#$#$#$#$#$#.#
# .#
###############
; 4
#####
### #
#### # $$ ####
# ### $ # #
# ###$$ $ #
# *# @ ## # #
## ##### #..# ##
# ## #..# #
## $ # #.. #
# ## $ # ..####
# ## # #
# #### ##
# #####
; 5
#####
#### #
# . # ###
# $. $ $ #
# #.## $ #
###@#..#$ #
# ##.# ##
# $ $ .# $#
## ###.## #
# #
##### ###
####
; 6
#####
## ######
# @ # #
# # $ * #
#### ###$#. #
#.....# .##
#.....# #$#. ###
### . ## #
# ## ##$ ### ####
# # # $ $ #
# $$$# # $ $ #
##### # ###### #
#$ # ####
## $ # #
# $ #
# ###
######
; 7
#####
########## #
#. ........ .##
# #### # ##
## $ # # ##
# $ # # # ##
# $ $ # # # #
# $ $ # @ #
# $ $$ # #
# $## ###########
# # #
# ##
######
; 8
#########
##### #
## #### #
# $ # @ *..*###
# # # #.... #
# #$# #.... #
# $# # ##$### #
# #$ ##
## $ $# ####
## $ ####
### $$ # #
# # ###
######
; 9
####
#### ## ###
#### $ # #*# ####
######## $ $ # ### # #
# $ $ $ $ ## # # ##
## $ $ #### $ ####### #
# $$ ##### $ ## # #
# ## ## $ $ # #
#.# $ # $ $ #### ## ## #
#.# $ $ $ #### # #
#.#.# $ # # #
#.#. ### # ######## #
#.#.###@#### ## # ##
#............. # ###### #
# .########### ## # ####
##### # #
######
; 10
####
##### ##### ##
## ### ##
## * * . $ # @ ##
# ## * ## ### # #
# ## * # # $ # #
# # * # # # #
## # ## # # ### #
# ## # #. $ .## ##
# #.# ## ## #.# ##
# # $ #. $ .$ ##
# #* $.# . ##
##### ## ## # ##
# # $ # #
# # # ##
# #$## #
## ##
########
; 11
####
# ####
# $ #########
# .# $ ## #
# $# .## $ ##
#### .### #$$ #
## ## # .. # $$ #
# $ ...# $ #
# $ #####... # ##
# $# # .**@####
### # # # #
##### #### # #
## ##
########
; 12
# ###
## ##
#*.$ #
# .$.$ .##
# $.$.$ #
# $.@.$ #
# $.$.$ #
##. $.$. #
# $.*#
## ##
### #
; 13
#####
# #####
# # # #
# # #
#####.# ...#####
# .$$ ###$# #
# #.# $. # #
# .# $$$ # #
### # $@$ # ###
# # $$$ #. #
# # .$ #.# #
# #$### $$. #
#####... #.#####
# # #
# # # #
##### #
#####
; 14
#######
# ###
# ###$ ##
#....$ #
### ## # #
###@.$ # # ##
# .*.$ ## #
# $.$ #.$$#
# ## ## #
##### # ###
### $ #
## #
#####
; 15
#####
# #####
# $$# #####
# . $ # #####
### ## . $ # #####
# ##.### ....$ # #####
# $$# ###.##. # $ # #
# # $ # .##.### .$$ #
### ## .$$$# ###.## #
# ##.### #$$$. ## ###
# $$. ###.##. # $ # #
# # $ # .##.### #$$ #
##### # $.... ###.## #
##### # $ . ## ###
##### # $ . #
##### #$$ #
##### @#
#####
; 16
#############
# #
# .$.$.$.$. #
# $.$.$.$.$ #
# .$.$.$.$. #
# $.$.$.$.$ #
# .$.$@$.$. #
# $.$.$.$.$ #
# .$.$.$.$. #
# $.$.$.$.$ #
# .$.$.$.$. #
# #
#############
; 17
#############################
# #
# .$.$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$@$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$.$. #
# #
#############################
; 18
#####################
## # # #
# $ $ $ #$ $ $ $ $###
# $##### $$ $## ## $ #
# # ..# # # # #
##$ ... # # ...#$ ##
## $ ... #$ # ...$ ##
# $####..# ##...##$ #
# *.*..$$@$$..*.* #
# $##...## #..####$ #
## $... # $# ... $ ##
## $#... # # ... $##
# # # # #.. # #
# $ ## ##$ $$ #####$ #
###$ $ $ $ $# $ $ $ #
# # # ##
#####################
; 19
##### #####
# # # #
# #.####.# #
# .. .. #
##### ### #### ###
# # # # #
# # ## # #@## #
# $ ## # # # ###
## $ ## # $ $.. #
## $ ### # #.# #
## $ ## ## # #
## $ # # #####
## $ $ ##
##### ##
####
; 20
#########
#### # #
#### # # $ #
# # ####.# #
# $ $ .#### #
# $#$## #.#....#
### # $ # #.#....#
# $ $ # #..*....#
# # ## $ # #### #
# $ # # $# ##
## $ # ######
## $ # $$$#
## $$@## #
## ##
########
; 21
#############
# # #
# $ $ $ $ $ #
### ##### ###
####.$ $ $.####
# ...# $ # $ #... #
# $##*#.#.#*##$ #
## . . @ . . ##
# $##*#.#.#*##$ #
# ...# $ # $ #... #
####.$ $ $.####
### ##### ###
# $ $ $ $ $ #
# # #
#############
; 22
##########
## #
## ### #######
# $$ # $# # #
# ### #$$ #
# $$ # #$$#
# # #### #$ #
## # ###.*. # ## #
## *.*.#..*.## ###
# ***...**.### $$ #
# #....#...# # # #
# ## ##.*. $ # ### #
## # $ ..## $ # #
## # $$### $#$$ # #
# @ # $ # #
##### ##$#### ##
###### ##
########
; 23
############## #######
# # #
#.########## #$##### #
# # # #
#*######## # ###### # #
# # # # #
#*###### # ####### # # #
# # # # # #
#*#### # ######## # # # #
# # # # # # #
#*## # ######### # # # # #
# # # # # # # #
#$ # ########## # # # # # #
# # # # # # # # #
# # ########### # # # # # # #
#. @ $ * * * * * . #
##############################
; 24
####
####### #
# $ ##
######## # ..## $ #
## ##.# # #
####### #.# $ $###
### #######.# # ##
# ## # $. $$ #
# ## #.# #@# #.# ## #
# $$ .$ # ## #
## # #.####### ###
###$ $ #.# #######
# # #.## ##
# $ ##.. # ########
## $ #
# #######
####
; 25
######
## ###########
# $ $ $ # * ######
# .*.#..*.# .$ ##
# * # $ $ * $#*.$ #
## #### # . # * #
# $ #########.## .$ #
#.*.. * #### ##
#$ $ #$#.$$.*# # #
# # #*.$$.#$# $ $#
## #### * ..*.#
# $. ##.######### $ #
# * # . # #### ##
# $.*#$ * $ $ # .$ #
## $. #.*..# * @#
###### * # $ *.$ #
########### ##
######
; 26
###### #######
# ..# # # #
# ..###### $# #
## #. $ ## $ #
# $$$ # ##$##
#.#. #$ $ # #
#.#.## ## $ #
#.# $ # # #
#. ## @# ##$#
#. #### #
#. $ $# #
#. ######## #
#### #####
; 27
################
# # ## # #
# .$. $ # . . #
## ### # $ #$ #
# . # ### ##.##
# $ .$ #. # #
### ## # $ $ #
## # ### ## #
# ## ### # ##
# $ $ # ## ###
# # .# $. $ #
##.## ### # . #
# $# $ # ### ##
# . . #@ $ .$. #
# # ## # #
################
; 28
##########
# # #
# $ # # #### #####
### $$ ####### #### #
## $ $ ### ## $ #
# $ ### # # ## ##### ###
# #$# ..### ## # #
# # #.# #.. # # $ $ #
### $ $ #.# #.. # # ## ##
# # #.# #### #### ## #
########.# # $ $ #
# .. #.# ###### # # #
#.$$$$.#.# # # #### ####
#.$ @$.#.# # # # $ #
#.$$$$.#.# # # #### #
# .. . # #### #####
############
; 29
#####
####### # #####
###### #.### #
## # ### #. * #
# ###### ## # ### ##
# ## $ ..$ # $ ## #
# # $ *.$@##### # ##
# # ..$ # $ # ##
#####$#######$## # . #
# $ . #### ####
# $$# #########$## . #
# # . .# . # $$*$$ #
# . # $.$.# #... ...#
##### $ # ## ##### $$*$$ #
#.# # . #
######################
; 30
####
##### ##########
# # # #
# # .. ## $###
# # ##.#. # $$$@ #
# #. # $ # #
# ######## $ # #
### $ ## #
#.############ #
#. ##
################
; 31
#####
## # ####
# ### #
# # @# #
##$#### ######
# ... ## ##
# ... # ## #
#### # ##### # ##
# # $# #
# # $ $ $$ # #
# ##### # #
## # # #
###### ### #
## ##
#######
; 32
#
## ##
# #
# .$. #
## $.$ ##
# .$.$.$. #
# $.$+$.$ #
# .$.$.$. #
## $.$$ ##
# .$. #
# # # #
## ## #
# ###
; 33
#####
# ##
# $ #####
## $ # #
## $ # $###########
## $ $ $ $ #
#####$ # # # # #
# # #
# #######$#######
## #@# #
# # # ## # #
#..*.*.*...... #
########## # ##
#### #
#####
; 34
##### #####
# #### #
## #$.*.$ # #
# $.@.$ #
# # $.*.$# ##
# #### #
##### #####
; 35
#####
########## #
# $ $$$ #
# $## # # # #
# $ # # # #
##$## .#. #
# ..... # #
#$ ##.@.## $#
# # ..... #
# .#. ##$##
# # # # $ #
# # # # ##$ #
# $$$ $ #
# ##########
#####
; 36
####### #######
## . ### ##
# $$.$$ # .$.$. #
# $ . $ # $.$.$ #
#...#... .$@$. #
# $ . $ # $.$.$ #
# $$.$$ # .$.$. #
## . ### ##
### ### ### ###
## ### ##
# .$.$. # .$$$. #
# $.$.$ # $...$ #
# .$ $. $.#.$ #
# $.$.$ # $...$ #
# .$.$. # .$$$. #
## ### ##
####### #######
; 37
#####
##### #####
##### # $ # #####
##### # $$ $$ # #####
# #$$ . ##$## . $$# #
# $$. ##### . ##### .$$ #
# ##### ##.## ##### #
##$ # #.... . ....# # $##
# . $ . # @ # . $ . #
##$ # #.... . ....# # $##
# ##### ##.## ##### #
# $$. ##### . ##### .$$ #
# #$$ . ##$## . $$# #
##### # $$ $$ # #####
##### # $ # #####
##### #####
#####
; 38
##### #####
# ################### #
# # $ $ $ $ $ $ $ $ $ $ # #
# $ # # # # $ #
## #.###.#.###.#.###.# ##
#$ # . # * # . # $#
# . # . # . # . #
#$###.#.###.@.###.#.###$#
# . # . # . # . #
#$ # . # * # . # $#
## #.###.#.###.#.###.# ##
# $ # # # # $ #
# # $ $ $ $ $ $ $ $ $ $ # #
# ################### #
##### #####
; 39
#################
# #
##$#.#.#.#.#.#.#$##
# $.$.$.$.$.$.$ #
# #$#$ $@$ $#$# #
# $.$.$.$.$.$.$ #
##$#.#.#.#.#.#.#$##
# #
#################
; 40
#####
############### ########
## $ $ $ $ $ $ $ $ $ $ ##
### # # ###
# #.##.#.##.#.##.#.##.#.## #
# $# .$ $ $# .$ $ $# .$ #
# . #$ $ $. #$ $ $. # #
# $##.#.##.#.##.#.##.#.##.#$ #
## . # @ . # ##
## # . # . ##
# $#.##.#.##.#.##.#.##.#.##$ #
# # .$ $ $# .$ $ $# . #
# $. #$ $ $. #$ $ $. #$ #
# ##.#.##.#.##.#.##.#.##.# #
### # # ###
## $ $ $ $ $ $ $ $ $ $ ##
######## ###############
#####
; 41
###########
## # ##
# $$*.$.*$$ #
#... ...#
# $$*.$.*$$ #
## * ##
# $$*.$.*$$ #
#... @ ...#
# $$*.$.*$$ #
## # ##
###########
; 42
###########
# #
# $## ### ## #####
# # $ $ $ ##### ###
# $ # # $. . #
# ##$###$## # #...# #
# $ # # #. .# ##
## # $ $ $## # #...# #
# ## ### #. # #. . # #
# $ # # # #
# @######## ### # #
#### # ### #
# #### # ##
# ## ###
##### ##
######
; 43
#######
######## #. #
# $ * #####
# ## ## #. # # ####
### # $ $$#$#. # # ######## #
# $# # $ * #...... #
# $ ### $#. # #### #
## # #$$ # $ .# # # ## #
# # $ @## # ## ## ##
# ## $$$ # ## ### #####
## #.##.### #
## #*$.*... ## #
# # ## ## ##
### ###########
#####
; 44
#######
# @ #
###### ### ######
# # $ # #
# $ # $ #
##$###*###*###$##
# $ # $ #
# # * # #
##$###*###*###$##
# # $ # #
# ..*...#...*.. #
###### ### ######
# #
#######
; 45
####
#### .#
#### # .####
### #### ##.. ##
# $ # #$ #... #
# # # # #... #
# #$ # $ $ # #
#### $ # # @##
# # #$$##### ##
# $ $ # # #####
###### # #
#### #
####
; 46
#### ####
# ### #
#### $ $ #######
# $ #$ ## ####
# ### ### # #
## $ ###### # #
# $ # ## ##### #
# # # # # $$ # ## ###
# # #$.## $ #
# ###### $ # ### ##
#....*.**.# # # # ##
#### # ##### #####
##$## ###$#
## # $ #
####### # $ #############
# $ ###### ## @ #
# ......... #
##############################
; 47
#####
# . #
##### . #####
# $ . $ #
# $ ##.## $ #
# # $ # #
###$## ##$###
# # *** # #
#....$ *@* $....#
# # *** # #
###$## ##$###
# # $ # #
# $ ##.## $ #
# $ . $ #
##### . #####
# . #
#####
; 48
#
# #
## ##
# $.$ #
# . . #
## $.$.$.$ ##
# . # # . #
# $.$# $ #$.$ #
# . . $@$ . . #
# $.$# $ #$.$ #
# . # # . #
## $.$.$.$ ##
# . . #
# $.$ #
## ##
# #
#
; 49
####
# ######
# $ $ ### ####
# $ # ## #
#####*#*#$$$ # ## $ #
# $ $ $ # ## #
# #$ $ $##### $$ ##
## # #### .....# ##
# # $ **.## ###
# # # $$ #.##. #
## # #.#+* # #
# ######.##..$ #
####### # $..##.####
# # *..*.#
# .#. #
######$# #
# #
#####
; 50
#############################
#. . . . . .#
# ## # # # # # # # ## #
# ## $ # $ # $ # $ # $ ## #
# ##$$$#$$$#$$$#$$$#$$$## #
# $...$...$...$...$...$ #
# $$.#.$.#.$.#.$.#.$.#.$$ #
# $...$...$...$...$...$ #
#.###$$$#$$$#$@$#$$$#$$$###.#
# $...$...$...$...$...$ #
# $$.#.$.#.$.#.$.#.$.#.$$ #
# $...$...$...$...$...$ #
# ##$$$#$$$#$$$#$$$#$$$## #
# ## $ # $ # $ # $ # $ ## #
# ## # # # # # # # ## #
#. . . . . .#
#############################

View file

@ -0,0 +1,849 @@
; Sasquatch (50 puzzles, released January, 1999)
; This is my first set. Scott Lindhurst describes them as generally of just the right
; difficulty to be fun: not too easy, but (usually) not so hard that you get frustrated.
; 1
###
## # ####
## ### #
## $ #
# @$ # #
### $### #
# #.. #
## ##.# ##
# ##
# ##
#######
; 2
## #####
## ## . #
# ## $. #
## $ #
## $@ ###
# $ ##
#.. ## ##
# # ##
##### #
; 3
#####
## #
# #
#### # $ ##
# ####$ $#
# $ $ #
## ## $ $ $#
# .# $ $ #
# .# #
##### #########
#.... @ #
#.... #
## ######
####
; 4
###########
## # @#
### $ $$# #
# ##$ $$ #
# # $ # #
###### ######
#.. ..$ #*##
# .. ###
# ..#####
#########
; 5
###########
## # ##
### $ $#$ $ ###
# #$ $ # $ $# #
# $ ..#.. $ #
# $...#...$ #
# $ .. * .. $ #
###### @ ######
# $ .. .. $ #
# $...#...$ #
# $ ..#.. $ #
# #$ $ # $ $# #
### $ $#$ $ ###
## # ##
###########
; 6
###########
###. .$. .###
## $ $ $ ##
## ..$.. ##
##$#$#$##
#.$ $.#
# @ #
### ###
## $ $ ##
#. $ .#
### . ###
#####
; 7
######
#### ## #
### # # ## ###
### #### # $ #
# $ @ ...*.. $ #
# $ $ ## ### ###
### ### # #####
# ###
# ####
#####
; 8
#######
# ##
##### ### ##
# # ##
#@$***. ##$ #
# # ## .#
## ## # $ #
## ####.$.#
## #
###### ##
####
; 9
#########
#. . #
#.$. . #
## ###@ #
# $ ##
# $$ ##
# $ #
# ###
####
; 10
######
# #
# @ ###
#### # #
# ####..#.#$#####
# $ $ ##... #
# .....#$$ #
###### ##$## #####
# $ #
#### ####
# #
# #####
### $ #
# $ $ #
# #$# ####
# #
#######
; 11
####
### ####
# @ ##
# #. .#.###
# $$$ $$$ #
###.#.#.# #
## #
#### ###
####
; 12
#####
# #
##### # #######
# ##### # ..... #
##### # ## # # # # #
# $ $ $ $ $ # ## ## $ #
# # ##......#### ### $$ ###
# ## * # # # $$ #
##########+$$ ## # #
#.$ $# # ########
#.## #
########
; 13
#######
### ##
# ### #
# # #
###$#@ # #
# ##### #
# # *. #
##$$# *.##
# *..#
#### #...##
# #$$$ #
# $ #
##### #
####
; 14
#######
## # #
# *.$.#
# *.#.###
# #$@$$ #
# ## # #
###### #
#####
; 15
####
#@ #
## ##
# .$#####
#$. # #
###..$# # #
# ..$ $ #
# $ $ # ###
##### # #
# #
###.#
###
; 16
######
## # ###
## # # ##
# # $.# #
## $ $.# #
# #####. ##
# $. @#
# $. ####
### # #*# # ###
#### .$ #
# .$ #
## .##### #
# #.$ $ ##
# #.$ # #
## # # ##
### # ##
######
; 17
###########
## . . . . ###
# $$ $ $ $ #
# ######## # #####
#### ## $ # # #
# # $ $ # ### # #
## # # #### $ #
#... ##### $ #### ###
#... @ $ # #
#...############ $ $ #
##### ##### #
####
; 18
####
##### #
# #
#$ $ $ #
#.*.*.*#
#*.*.*.#
# $ $ $#
#......#
#.*.*.*#
#$ $ $ #
# $ $ $#
#$ $ $ #
# #
#@ #####
####
; 19
#####
# #######
# $ ##
## ###### ##
# # # # ########
# # ## $ ##
# #. #@###### $ ##
# #.# ### ## $ ##
# #. # ## $ ##
# #.# # ## ## $ ##
## #.# ## ### ## $ #
# #.# # #*## ## #
# .# # # ##*## #####
###### # ######
#####
; 20
####
# #
######$.#
# $ $.#
# $@$...#
# $$$..##
# $ ..#
########
; 21
##### ########
# ### . $ #
# $ *.. #$ ##
## $# ..* $ @#
# $ . ### #
######## #####
; 22
##### ####
#@ .### ###
#### $$ $ #
# # . . ## #
# $ # . . ## #
## . $ $$ # #
# # ###. # #
# #### ##### #
# # #
####### # ####
# .$ #
#### #
## #####
###
; 23
#######
###### ######
# . ..$#$.. . #
# $ $ . $ $ #
###$####@####$###
# $ $ . $ $ #
# . ..$#$.. . #
###### ######
#######
; 24
######
# ##
####### $ #
# $ $ $ #$ #
# #. $ #
####.#.# $###
# ..... #
# $ ..##$#
### ## .. #
# $.#$ # $#
# $ # #
##@ # ####
## ####
####
; 25
#####
##### #####
# .#$ $ #
# #. $$$ @ ##
# .#$ $ #
###.# $ $ #
#. ##$ ###
#######*###.$ #
# $ ....####
## #$#$$....#
# $ $ #..#
# $ #..#
# ##########
#####
; 26
####
########### #
# $ $ $ $ ##
# # # # # #$##
##. . . . . .#
#$# # # # #$####
###. . . . . . #
###$# # # # # @ #
# $ $ $ $ ###
# ###########
####
; 27
########
###### ##########
## $ ### ##
# $ $ ## # ######### #
# $ # # #
# $ $ # # ######### # #
# $ # # #. . . . # #
# $ $ # # . . . .## #
# $ # # # . . . . # #
##$ $## # #### # # ##
# #@ # # ####
###### ##### # #
## # # #
##### ## ##
## ##
######
; 28
######
# ###
##### $ $ #
#### #.# ##
# $ #$#.##$#####
# $$. .#.$ ##
# $.#.#.##### ####
## ....... @# #
####$ #.### #$###$##
## $ . # $ $ $ #
# $ ### #
# # ############
#####
; 29
####
# # ####
# ######## ####### #
# ### ## $ #
##.###### ... #. #
#.# # .# # $ #
#$$$$#$$$ #.# ##. #
#.# $ $ #.. ##
#.# $ $ # # ##
# # $$ # #####
#. ##$ ######
#. # $. #
##. @ ###.#$ #
# # # #
# ## ######
######
; 30
#####
# #
# # ######
### ## ##### # ###
# # ## #$$ #
##$ ########## $ $ #
### ## ..........$ #$$@#
# # $$# ####### $ #
# $ #...# ### ####
# # $ ### ## ####
######## #
# #
# #
######
; 31
#####
# #####
# $$# ######
###. . $ # #
# .##.####### #
# $. . # # #
##.##$$$$#$$$ ######
#... . # #
#..##.####.### ##@#
## # $ $ $ # $ $ #
# # # ###
# #.##.#.###### #
# $ # $. $ #
# ###.## ###$##
###### # #
##########
; 32
#####
# #
######### $ #
###### # # # #
# # # $ $ #@#
### ## #### ### ## ###
# $ $ # # #
# $ $ # #$ # $$ $$ #
###### $ # # # #
## ## ###############
# .# $ # #
#.. # ######
#...#### #
#....# ####
#....#
######
; 33
#######
## ##
# ### #
# ## $ ####
# # .# $.####
# # * *###.$ #
# # *# ### #####
# # @ * * # # #
# # ### #*# * #
# ## # * *.# # #######
# # # ....$ $ #
# # ## $# $####$ #
###* * # #######
# ########## ####
# #
## ############
####
; 34
#####
# ..########
# ......# #
#.. ##$$ $#
#####.## $ #
# ....# $ $$#
##### ## # .. .#$ $ #
# # # ##.### $$ $###
# ### # ## # $ # #
# @ #### # # # ###$ # #
# # $ $ #
# #### ### ####$$##
# ## #### # #
# # ## ###### #
#### ## # # $ #
## # # #
###### #####
; 35
#####
# #
## # #####
# ## #######
# # $ ####
# #### $ $$ # #
##### # $$$ $ #$ #
# $ $ $ $ ######
###$ #$ $ $ #
# $ $$ ### @ ##
# $ $$$$####... #
# $ $ #. .#...#
### $$$$ ...... #
# ##..#.....#
###### ##.....####
# .....# #
##########
; 36
#####
#### # ######
# # # $ $ #
# #### # $##$ ###
# ######### # $ $ #
# ..........# $ #
###### ##....@### # $$ #
# # #####.## # ## $ #
# # #$ $$ $ #
#### # ##### # # $ # #
# # # # ### ####
# # # # #####
# # #####
##### #
#######
; 37
##### #########
# # # #
### #$### ##### # # # #####
# $. . # # . . . . #
# # # #$### # # # # # # #$#
# . . . . $ $ $ $ . . #
###$# # #$###########$# #$#
# . . ## # . #
###$# #$####### # #$# #$###
# . .$ $ $ # # . . #
#$# # # # # #####$# # # #
# . . . . . $ . . . #
### # # # # # # # # # # #
# $ $. . .$ $ $ $ $ $ #
##### # # #############
# @ #
#######
; 38
####
#### ######## #
###@ ## # # #
# # # ### $ $ #
# ....########## # #..#
# . # ## $ $ $# # #..#
### # $ $$$ # # $ $ #
# ...# $ $$ # # # #
# ..# $ $ $ # # ## #
##...# $ $$ $ #$# #####
# ## $ $ $ # #
### ###### ### # ###
# . ## #### . . #
## . # # #.#.# #
# . # # # # # #
# . #### #########
# ##
####
; 39
#### #####
# ####### #### #
# @ $ #### $ #
# ###.# # $$ #
###.## $ #$ # # ##
# ..# $ ...# ### ##
# $ ...$##.## ##
##.###$ $.. $$ ##
#. #. .### $ $ #
# $...## ## # #
## ###### # ##
## ## #####
# $$ #
# $ #
### $ #
# ##
####
; 40
#######
#### # #
# ### $$$ #
# ....$ #####
# ..# $ # @#
###$##$#### # ######
#.*....$ $ ### #####
# ..##### ## $ $ #
#....*.... # $$ # $ #
########## #$$ ## # #
# $.### $ ##
# $###$# # #
##### $ $ ####
#### ####
######
; 41
#####
# #
### ########
## *** # # #
# * * ## # #####
## *** ## # ## ##
### #### # # # #
# # # # ####$ $###
## ## # ## $...$ ##
##### # ## .@. #
# # # $...$ ##
########$ $###
# #
#####
; 42
####
# ######
# ####
# $ $ # #####
##### ### $ #
# # $ # #
# ##$######
# $### # ...# #
## #@#$ ##.#.# #
# # #...# #
# $ ##$ $#...#####
### ## #... #
# # $ $ $ # # #
# $### ###### # #
# # #
############# #
#####
; 43
####
## #############
## .......... #
## # ####$### ##
# # # # ##
# # # $$$ # # #####
##### # . .# ### . . . ##
# $. .# # $$ $ $ @#
####### ### # #######
# $ $ # ## ###
# $ $ # # ## # ####
# $### #### # # # ## ####
# $ $$$ # ## # ## #
## # ## #### $$$ #
## ####### ..... #####
# $ ###### #
# ###### ## ####
##### ####
; 44
#############
## # ###
# $ $$$$$ #
### $ $ ### #
# $ $ $### # #
## $ ## # ###
#### #### #
### # ###
#### #### #
#@ $ ### #.# #####
# $ $ ## # .... #
# $$ ## ####..... #
## $ # #..#.## #
# $ $ ## #...... #
# $ $ # # . ..# ##
## $ # ## ##.# #
# ## # #
###### ########
; 45
#### ########
# ##### ## # #
# $ ### $ $ #
# $ # ## $ ####
### # # ###$## #
##### ### #### $ #
# # $ $$## .. ##$ #
# $$ # $ ##
## # $## #### # ####
### # ##$ ###..#..#
# ###.. # .....###
# # *.### # #.. #
##$$# *.##@ # # #
# *. #### ### #
###### # # #
##### ## ###
# ###
####
; 46
#### ###################
##### ### .$ #
### $. #####$#### # #
# $. #### # . ### .#
# $ $.### ## # #### # $.# $#
### $.## # # # # # # $ # #
###### # ## #$ $ ## #. # #
##### #.#. # ### # #
##### # # ### ### # #
##*## # .# # #$$* ##
#*### ### ## ## ## # .#. ##
###*# # .$ .# $.$.## ### #
##*## # #.#### # $. ##
#*### # $$ ### ### ## ##
###*# # # . $@$ #######. #
##### # ### ####.# $ #
# # ########### #
####### ####
; 47
#########
# # ######
# $ ###### ###
# #$#$ $ $ # $ #
# $ $@$ $ $ $ $$ #
# $ $# $ # $$$ #
# $ $ ####### #####
## ###....##### ..#
###$$# $$$$ #...* ..#
# ## #.. #
# # #$###....##*##
# ##..$. .... #
### .* .#....# #
##################
; 48
#### ####
## # # # #######
### ###$ ## # ###
# $ $ ### #
# $ $ ###$ # # #
### ### # # # #
# $ # ## ### # ###
# $ # #@ ##
# $# # ### ### # #
# $ # # $ $ # # # #
## # $ # #. #
## # # ## #.. ###
## # # ## #... ##
### # #### #....##
# $.*.##
############..##
####
; 49
'Parallel Logic'
#########################
# # # # # # # # #
# $#$ # $#$ # $#$ # $#$ #
# # # # # # # # #
## # ### # ### # ### # ##
# # # # # # # # #
# # # # #
## ### # ### # ### # ### ##
# # # # # # # # #
# # # @ # # #
## # ### # ### # ### # ##
# . . . . . . . . #
#########################
; 50
'Particle Theory'
# # # # # # # # # # # #
# # # # # # # # # # # # #
# .$ . $. . $ .$ #
# $# #$# # # #$# # # # #
# . . $. . .$ . . #
# #$# # # # #$#$ $# #$# #
# . .$ .$ . $. . #
# $# # # # #@# # # # #$ #
# . .$ . $. $. . #
# #$# #$ $#$# # # # #$# #
# . . $. . .$ . . #
# # # # #$# # # #$# #$ #
# $. $ . .$ . $. #
# # # # # # # # # # # # #
# # # # # # # # # # # #

View file

@ -0,0 +1,915 @@
; Sasquatch III (50 puzzles, released June, 2000)
; This set ranges in difficulty from medium to very hard. Thirty one of these levels explore
; some form of design symmetry. It is interesting (to me at least) to solve levels in which
; sections are reversed or rotated. Each transformation often suggests different approaches
; to the solution. However, sometimes the confusion created requires that each section be
; solved from scratch.
;
; Sometimes, I find levels in my earlier sets which I would do differently today.
; Included here are improved versions of two previous levels.
; Sasquatch III (41) = Mas Sasquatch (46)
; Sasquatch III (48) = Sasquatch (49)
;
; 1
#######
# * #
# @ #
##$#.##
# # #
# $#. #
# # #
## ## ##
# * * #
# * #
### ##
#####
; 2
####
####### #
# * .##
# $$# * ##
# $@ #* * ##
## $ # * * #
### #. * * #
# . # .#
# # #####
########
; 3
####
######### #
# #
# #*### # #
# $ # # #
#*#*## # #
# $ # # #
# *# # # #
# $ # # # ##
###$. . . . #
#@####### #
# #
###########
; 4
#############
## #
## #########@###
## # * #
# ## ########*# #
# # $ $ $ $ # #
# #$.. . . ..$# #
# # .#######. # ##
# $.#######.$# #
### . . . . . # #
# $ $ $ $ $ # #
######### ## #
# $ $ #
# #
#######
; 5
###########
## #
# #######$##
# # $ ###
# #...***.*.@ #
# # $ # #
# #######$# #
## $ ##
######## ##
#####
; 6
####
######### ###
# . . . . #
# $$.$# #$.$ #
## . .# #. . #
# $ $# $ $ #
# $ #* #####
##### # ##
# @ #
## # #####
##### *# $ #
# $ $ #$ $ #
# . .# #. . ##
# $.$# #$.$$ #
# . . . . #
### #########
####
; 7
#####
# #####
### # ##
# * #### #
# * ## # #
# * ** # #
# # # #
#@#** * ## #
### #$ # #
# .$ .* # #
# # # #
## # ##
#########
; 8
####
########@ #
# ...#$ #
# $ $ $ * #
##### . #
##$#$. #
###. # .##
# .$#$ #
# .$ #
###.$# #
# ####
####
; 9
#
###########
# # # #
# $ #$ $ #
#$.*.*.#* #
# . $. #
#$.$#. .$#
## .$ #* ##
# .#.*##. #
# $ $ $ #
### # # #####
##@ #
######
; 10
#
# # #
# # ## ##
# . # # .$. #
# $.$ # .$ $. #
# * @ $ * $ #
# $.$ # .$ $. #
# . # # .$. #
# # ## ##
# # #
#
; 11
#
# #
## ##
# . # #
## $.$.$ ## # #
# $.$.$.$ # # . #
# .$.$.$. # $.$ #
# .$.$@$.$. * #
# .$.$.$. # $.$ #
# $.$.$.$ # # . #
## $.$.$ ## # #
# . # #
## ##
# #
#
; 12
########
# . . #
# $.$. #
##$#$# ##
# . . #
#$#$# @#
# . . #
##$#$# ##
# . . #
# $#$# ###
## . . #
###$#$# #
# . #
#$# ###
# #
#####
; 13
####
######## #
#@ $ $ $$ ###
# ....*.* #
## ### ..*# #
#$$ # .* #
# # $ #.*# #
# $ #.. #
## $ ###
### #$#.#
# $ $ #
# ##
#######
; 14
#####
######### #
### $ $ $ $. #
# .$.$ $.$.# #
# #.*..@..*.# #
# #.$.$ $.$. #
# .$ $ $ $ ###
# #########
#####
; 15
#####
############ #######
# # # ## # # # #
# # #$ $ # .$ $ # ##
# ..*.** *@* **.*.. #
## # $ $. # $ $# # #
# # # # ## # # #
####### ############
#####
; 16
#########
## * ##
# # # # #
# #.$.$.# #
# $.$.$ #
#*#.$@$.#*#
# $.$.$ #
# #.$.$.# #
# # # # #
## * ##
#########
; 17
#
# #####
##### ####
# ..$$ # #
# $ $ .#@#$ ##
#### # *## #
# # * #$.#
## $## . . #
# $.**.#.**.$ #
# . . ##$ ##
#.$# * # #
# ##* # ####
## $# #. $ $ #
# # $$.. #
#### #####
##### #
#
; 18
#############
## # # ##
# .##$$ $ . #
# ...#.#.#.# #
## # $ $ .# #
# $. # # #$.$ #
# # $ $ #$##
# .$# @ #$. #
##$# $ $ # #
# $.$# # # .$ #
# #. $ $ # ##
# #.#.#.#... #
# . $ $$##. #
## # # ##
#############
; 19
#############
## * ##
# ##.# ##.# #
# # $ $ $ $ # #
# .$. ## .$# #
# # # . # . #
# #$ $.$ #$# #
#* #..@..# *#
# #$# $.$ $# #
# . # . # # #
# #$. ## .$. #
# # $ $ $ $ # #
# #.## #.## #
## * ##
#############
; 20
### ### ###
## # @ # ##
# $#$ $#$ #
# . . . . . #
##$#$ $#$##
# . . . . . #
# $ $#$ $ #
# . . . . . #
##$#$ $#$##
# . . . . . #
# $#$ $#$ #
## # # ##
### ### ###
; 21
### ###
# ### #
# # #
## $$$.$$$ ##
# .# . . #. #
# . # $ # . #
# .$ #.# $. #
##$ .$@$. $##
# .$ #.# $. #
# . # $ # . #
# .# . . #. #
## $$$.$$$ ##
# # #
# ### #
### ###
; 22
###########
# #
##$####.####$##
# $. $ $.$ $ .$ #
# # ... ... # #
# #$.$ $.$ $.$# #
# # . *#.#* . # #
# #$ $# $ #$ $# #
# .. ..$@$.. .. #
# #$ $# $ #$ $# #
# # . *#.#* . # #
# #$.$ $.$ $.$# #
# # ... ... # #
# $. $ $.$ $ .$ #
##$####.####$##
# #
###########
; 23
#### ### ####
# # # #
# # # # # #
# **$***$** #
# * . . * #
##$.## ##.$##
# * # # * #
# * @ * #
# * # # * #
##$.## ##.$##
# * . . * #
# **$***$** #
# # # # # #
# # # #
#### ### ####
; 24
###############
#. $ . $ .#
# ##$# # #$## #
# .* .#. *. #
# # *$* # #
##$$* # *$$##
# #. $. .$ .# #
#@ #* * *# #
# #. $. .$ .# #
##$$* # *$$##
# # *$* # #
# .* .#. *. #
# ##$# # #$## #
#. $ . $ .#
###############
; 25
# #### # #### #
# # # #
# *. ### .* #
# $# $ $ $ $ #$ #
# # .* *. # #
# . # $ # . #
# $ ##$## $ #
#.* # . # *.#
# # ..$@$.. # #
#.* # . # *.#
# $ ##$## $ #
# . # $ # . #
# # .* *. # #
# $# $ $ $ $ #$ #
# *. ### .* #
# # # #
# #### # #### #
; 26
###############
## # ##
# *$ $*$$$*$ $* #
# $...$...$...$ #
# .$.$.$.$.$. #
# $...$...$...$ #
# *$$$*$$$*$$$* #
# $...$...$...$ #
##$.$.$.@.$.$.$##
# $...$...$...$ #
# *$$$*$$$*$$$* #
# $...$...$...$ #
# .$.$.$.$.$. #
# $...$...$...$ #
# *$ $*$$$*$ $* #
## # ##
###############
; 27
#############
## . . . ##
## $.$ $.$ $.$ ##
# $ * $ * $ * $ #
#..*.*.*.*.*.*..#
# $ * $ * $ * $ #
# $.$.$.$.$.$ #
# $ * $ * $ * $ #
#..*.*.*@*.*.*..#
# $ * $ * $ * $ #
# $.$.$.$.$.$ #
# $ * $ * $ * $ #
#..*.*.*.*.*.*..#
# $ * $ * $ * $ #
## $.$ $.$ $.$ ##
## . . . ##
#############
; 28
#####
#### . ####
# ##$.$## #
#### . ####
# ## $$.$$ ## #
## ## . ## ##
### $##$.$##$ ###
# $ $ $...$ $ $ #
#.......@.......#
# $ $ $...$ $ $ #
### $##$.$##$ ###
## ## . ## ##
# ## $$.$$ ## #
#### . ####
# ##$.$## #
#### . ####
#####
; 29
#################
# . . . #
# ##$###$###$## #############
#.## ## ## ##.# . . #
# $ * * $ # ##$###$## #
# ## # # # #.## ## ##.#
# ##*###*###*## # $ * $ #
# # # # ## # ## # # #
#.$ * * $.@ ##*###*## #
# ## # # # # # # ## #
# ##*###*###*## # $ * $ #
# # # # ## #.## ## ##.#
# $ * * $ # ##$###$## #
#.## ## ## ##.# . . #
# ##$###$###$## #############
# . . . #
#################
; 30
###############
## ##
# ##### ##### # ###########
# # . . . . . # ### ##
# #$ $ $ $ $ $# ### ### #
# # .#.#.#.#. # ## # . . . # #
# #$ $ $ $ $ $# ## #$ $ $ $# #
# # .#.#.#.#. # ## # .#.#. # #
# $ $ $@$ $ $ ## $ $ $ $ #
# # .#.#.#.#. # ## # .#.#. # #
# #$ $ $ $ $ $# ## #$ $ $ $# #
# # .#.#.#.#. # ## # . . . # #
# #$ $ $ $ $ $# ### ### #
# # . . . . . # ### ##
# ##### ##### # ###########
## ##
###############
; 31
##### #####
### # @ ####
## # $ # ##
# #..*.#*...# #
# # . $# $ $# . #
# .# # $.# #
# #.$ #$ #* #
#. * # $ # .$# #
# $ #$ $$#$$ $# $ #
# #$. # $ # * .#
# *# $# $.# #
# #.$ # #. #
# . #$ $ #$ . # #
# #...*#.*..# #
## # $ # ##
#### # ###
##### #####
; 32
###### #####
## #### #
# ## $ # #
# # .# $# $ #
# #$.$ # #######
# $. # ### # #
### .$. . # #.$.$ #
# $. ###$#$# ## ##
#### #$ # #
# # $ ###@###. #
# $ # #.. #..##
###### # ..# . #
# $$ #..## ..#
# $ $## # #
# $$ # #
# #############
####
; 33
####
####### ####
# $ ##
####$ ###.### ##
# $ # #.# # #
# # $ # . @ # #
# # #..### # #
# # $#.... # # #
# # #...#$ # # #
# #$ # ## $$ $ # #
# # # .* ## #
# #$$## # ## ##
# # ### ###
# ####$ ###
## #####
########
; 34
####
##### # #####
## # # #
# # ##### # # #
# # $ $ $ $ # ##
# # # # #
# ######$## # #
#### # * # # # #
# $ # .. $ # # #
# # # #*...# # # #
# .***#. ..# ## ##
##*....*.* $ # #
##* ##.##### # $ #
## # $ # # #
##@ #.#$ $ $ $# #
## $ $ # #
## ###########
####
; 35
####
#### ### #
# ######### ..#
# $ @ $ $ #..#
# $# $ # # #..#
# ##*##$#$#$#..#
# $ #..#. ##
# #*. .##$## #
##$ $#..#. #
# ##$#########
# $$ $ #
## #
#########
; 36
#####
## . ##
##.$ $.##
# $ * $ #
#. * * .#
# $ * $ #
##.$ $.##
####### ## . ## #######
## ## ## ## ## ##
# .$.$. # # # # $.$.$ #
# $.$.$ ##### ##### .$.$. #
# .$ $. $.@.$ #
# $.$.$ ########### .$.$. #
# .$.$. # # $.$.$ #
## ## ##### ## ##
####### #***# #######
#####
; 37
######### #######
# # ####### # #
# .$. $ # . . #
## ### # # # $ $ #$ #
# . # #.$ $.## ##.##
# $ .$ .# #. #. # #
### ## #.$ $. $ $ #
## # ##$$ .## ## #
# ## ##. $$## # ##
# $ $ .$ $.# ## ###
# # .# .# #. $. $ #
##.## ##.$ $.# # . #
# $# $ $ # # # ### ##
# . . # @ $ .$. #
# # ####### # #
####### #########
; 38
##### ###
# ###############
# $ * @ * # #
# # * * * * #
## # * . * # ###
# # * * * * # #
# # * . * # #
# # * * * * # #
## # * . * # ##
## ########### #
# $ $ #
# ########## #
##### #####
; 39
#### ####
# ##### ####
#### $ $ ##
# $ ### ## ##
#@### # ###.#..# #
# $ # # .# #
# $ # # # # . #
## # # ###########
# ## $ $ $ #
###### #.#.#.###
# # # #
# # #.#.#.# #
# # $ $ $ # #
# # # # # #
## ### # #
## ### #
#### ##
#######
; 40
####### ## #######
# ###### ##
#.### ## . ## ##
# . # $*# .# # #
# #. ###.# *$ # #######
# $ * ### . # ##
###$# * $$ ##$ .######## #
## $ # * # # # . # # #
# $$ $#. .# @ #. .#$ $$ #
# # # . # # # * # $ ##
# ########. $## $$ * #$###
## # . ### * $ #
####### # $* #.### .# #
# # #. #*$ # . #
## ## . ## ###.#
## ###### #
####### ## #######
; 41
'MS46 v2'
##############################
# ......... #
# $ ###### ## @ #
####### # $ #############
## # $ #
##$## ###$#
#### ..# ##### #####
# ..*.**.# # # # ##
# ######.. $ # ###$ ##
# # #*. # $ #
# # # # # $$ # ## ###
# $ # ## ##### #
## $ ###### # #
# ### ### $# #
# $ #$ $ ## ####
#### $ $ ######
# #### #
#### ####
; 42
#########################
# # # # # # #
# $ # # # # # # # # # $ #
# * * $ $ * * $ $ * * #
### # # # # # # # # # ###
# * *...... ......* * #
# # # ###### ###### # # #
# $ .# $ #. $ #
### #$ $$$$ @ $$$$ $# ###
# $ .# $ #. $ #
# # # ###### ###### # # #
# * *...... ......* * #
### # # # # # # # # # ###
# * * $ $ * * $ $ * * #
# $ # # # # # # # # # $ #
# # # # # # #
#########################
; 43
####
## ####
# $ .########
# $ # . $ $ #
#### ### .#### # #
# ....#$.# # # #
# #. $ # .#$ # # #
# ## $$$@$ # # #
## ## # # # #
### # ## # # #
### # ... #
# #$* *$# ##
# # ...$ ###
# $$ # #
# ######
#####
; 44
#####
## ##
# $ #
## $.$ ##
## $.*.$ ##
### $.*.*.$ ###
## $.*.$.*.$ ##
# $.*.$ $.*.$ #
# $.*.$ $.*.$ #
# $.*.$ $.*.$ #
## $.*.$.*.$ ##
### $.*.*.$ ###
## $.*.$ ##
## $.$ ##
# $ #
## @ ##
#####
; 45
#####
# #
## $ ##
### $.$ ###
# $.*.$ #
## $.*.*.$ ##
### $.*.$.*.$ ###
# $.*.$ $.*.$ #
# $.*.$ $.*.$ #
# $.*.$ $.*.$ #
### $.*.$.*.$ ###
## $.*.*.$ ##
# $.*.$ #
### $.$ ###
## $ ##
# @ #
#####
; 46
#####
########### @ ###########
# . . # . #
# $$*$$$*$$ # .$ $$$.$. #
#.....*.....#*$.$...*.$*#
## $$*$$$*$$ # .$.$$$ $. ##
# . . # . #
# ####################### #
# . . . # . . . . #
## $$* $$* $ # $.$.$.$.$ ##
#.*.* * *.*.#*$$$ * $$$*#
# $ *$$ *$$ # $.$.$.$.$ #
# . . . # . . . . #
########### * ###########
#####
; 47
#####
########### @ ###########
# . . # .$. #
# .$.$$$.$. #.$ $.$ $.#
#.$$$.*.$$$.#$.*** ***.$#
## .$.$$$.$. #.$ $.$ $.##
# . . # .$. #
# ####################### #
# $. .$ # $ . #
## * .$. * # .** **$ ##
# $.$*$.$ # * *** * #
# * .$. * # $** **. #
# $. .$ # . $ #
########### * ###########
#####
; 48
'Parallel Logic 2'
#########################
# # # # # # # # #
# $#$ # $#$ # $#$ # $#$ #
# # # # # # # # #
# $#$ # $#$ # $#$ # $#$ #
# # # # # # # # #
## # ### # ### # ### # ##
# # # # # # # # #
# $ # $ # $ # $ #
## ### # ### # ### # ### ##
# # # # # # # # #
# # $ # $ # $ # #
## # ### # ### # ### # ##
#...........+...........#
######### # #########
# ### #
#### ####
; 49
#########################
# # #
###$$ $$ $$ $$.$$ $$ $$ $$###
# $+.$..$..$..$..$..$..$..$ #
# $..$..$..$..$..$..$..$..$ #
# $$.$$.$$.$$.$$.$$.$$.$$ #
# $..$..$..$..$..$..$..$..$ #
# $..$..$..$..$..$..$..$..$ #
##.$$.$$.$$.$$ $$.$$.$$.$$.##
# $..$..$..$..$..$..$..$..$ #
# $..$..$..$..$..$..$..$..$ #
# $$.$$.$$.$$.$$.$$.$$.$$ #
# $..$..$..$..$..$..$..$..$ #
# $..$..$..$..$..$..$..$..$ #
###$$ $$ $$ $$.$$ $$ $$ $$###
# # #
#########################
; 50
#### ####
# ##################### #
# ....... @ ....... #
# # .###############. # #
### #. # # # .# ###
# # $ # $ # #
# ##$## ##$## # #
### # ##$## ##### ###
# # # $ $ $ # # #
# # # # # # #
# # #####$######$## # #
## ## # # # ## ##
####### $ # $ #######
##$## ##$## #
###### # ##### ##$## ######
# # # $ $ $ # # #
###### # # # # # ######
###############

View file

@ -0,0 +1,818 @@
; Sasquatch IV (50 puzzles, released March, 2001)
; These range in difficulty about like Sasquatch III. As always,
; I've tried to explore a wide variety of puzzle types.
;
; 1
####
#### #
# ####
# $ # . ##
# # . #
## #$$#. #
## #####
# @ ###
# #
#####
; 2
#####
###### #
# $ #
# $### ##
##.$. . .#
# $# #
# @######
# #
####
; 3
#####
#### #
# @ $# #
# #....#
##$ $ $ #
# ### ##
# #
##### #
####
; 4
######
# . ##
# #* #
# $.$ #
## *. #
## $.@ #
## # .$ #
# $$.# #
# ##
########
; 5
####
# #
## .###
# .$ #
#* * ##
# $.$$ #
# . #
###*####
#@#
###
; 6
####
### #
# ..# #######
# #..# # ####
# #. ### $ #
# #. # $ $ $$ #
# # @ ### $## #
# #####
## #########
####
; 7
###############
## $. .$ ##
# # ####### # #
# # # #
# .***$#$***. #
### # ###
# ####@#### #
# #
#############
; 8
#######################
# # # # #
# $@$$ # $ # .. ..#
## ## ### ### ### ## ##
# # # # #
# # # # # # #
# ################# #
# #
#####################
; 9
###########
#@ # # #
# $#$ $#
## #..# #
# #..# #
# #..# ##
#$ $#$ #
# # # #
###########
; 10
######
# #
# .$ #
# ** #
##$. #
# ####
# ## #
# # #
# #
#.**$@#
# # #
#######
; 11
########
##.... @#
# # . #
## # # ##
# #$ # #
# $ # ##
###$ ## #
# $$ #
# # #
########
; 12
######
# #
# ###
##*# #
## . ## #
# # ##
# #.# $ #
# $.###$ #
### ## #
# $$@#
##..## #
# #####
# #
#####
; 13
####
##### #
###. #$ ##
# * .*.#
# $.$ #$ #
### ### #
# ### ###
# $# $.$ #
#.*.@ * #
## $# .###
# #####
####
; 14
######
# #####
# $ *# #
# * * $ #
###* . * #
# * .@. * #
# * . *###
# $ * * #
# #* $ #
##### #
######
; 15
###########
# * #
# $$ ## $ #
# $..#$$ #
# ##*.*. #
#*#..@..#*#
# .*.*## #
# $$#..$ #
# $ ## $$ #
# * #
###########
; 16
#############
# $ . #
#.$ $### *$ #
# ** ## .* #
# .$#..$ $ #
# # .$.$### #
#$##..@..##$#
# ###$.$. # #
# $ $..#$. #
# *. ## ** #
# $* ###$ $.#
# . $ #
#############
; 17
###############
# #
# $.$.$.$.$.$ #
# .$.$.#.$.$. #
# $.$.$ $.$.$ #
# .$.$.#.$.$. #
# $.$.$ $.$.$ #
# .# # @ # #. #
# $.$.$ $.$.$ #
# .$.$.#.$.$. #
# $.$.$ $.$.$ #
# .$.$.#.$.$. #
# $.$.$.$.$.$ #
# #
###############
; 18
###############
## # # # ##
# **.. ..** #
# * $$$ * #
##* .### ###. *##
# * ## $@$ ## * #
# . # # . #
# .$#$ ### $#$. #
## $ # # $ ##
# .$#$ ### $#$. #
# . # # . #
# * ## $ $ ## * #
##* .### ###. *##
# * $$$ * #
# **.. ..** #
## # # # ##
###############
; 19
#########
# * #
# ## ## #
# * * #
### # ###
# .$#$. #
# # @ # #
# .$#$. #
### # ###
#######
; 20
####
# #########
# ## #
# $$$# #
##...# #$$$#
#...# #...#
#$$$ #...##
# ##$$$ #
####### @ #
######
; 21
#########
## # #
## $# # #$###
# #. .# #
# $ *.@.* $ #
# #. .# #
###$# # #$ ##
# # ##
#########
; 22
#### ####
# #### ####
### $ $ #
# # $ *...##
# $ # #### #.. #
## # #
# $$ $$@ #...##
# # #######
#### # #
#####
; 23
####
###### #
## $ $ #
## $ #$ #
# $ # $#
# # ## ##
###$ ..# #
# #*...@#
# ..####
# ####
####
; 24
####
# ###
# #
########$$ #
# $ ##
# #### $$ ##
####....# $ #
# ...# $$ #
# #...# $ ###
# @## ## $ #
# ##
# # #####
#######
; 25
###############
## ....# ##
# # # ### #
# ....# # # #
# # $ $ # #
## # $@$ # #
####### $ $ # #
##*# $ $ # #
### #### # #
## ### #
##### ##
#######
; 26
##### #####
# @ ### #
# # $ #
#### #$ $ ####
# # $ $#
# ### $ $ #
#.......# ##
#### ## # #
# # #
###### #
####
; 27
####
### ###
### ##
# $$#$$$@ ##
# # #
# ### #$$$#
# # # #
#### .## #
####.## ##
## .## #
##... #
# .#####
# .#
#####
; 28
####
# #####
# $ $ #
#* . . #
# ########
# # #
#### $ #
# #$### #
# @$# # ####
# $$ $$ # #
# # ## $ * #
## ###.....#. #
#... ###$# . #
# $ $ . #
######## #####
####
; 29
# ## ####
## # # ###
# ##$ #
#### # * # #
# # * # #
#### * # #
### . # #
#@#.****$# #
# # #
# ##### # #
# ## #
###### ##
######
; 30
#####
# #######
# ## ##
#.# ###
#####.# # #######
## ##.####. ## ##
## .....@.# $ ###
# ###.# #.# $ $ ##
# #. # .# $ $ $ #
# # #. ## #$ $ $ #
## # #. # $ $ $ ####
### #. # $ $ ##
# # # $ $ #
# # ######$##
# #### #
## #######
########
; 31
#############
# @ #
#**.*****.**#
# $ $ #
# # ### #
##### #####
######## ######
# #
#**.*******.**#
# $ $ #
# ####### #
##### #####
; 32
####
### #
######## $$ ##
### # .*.$ #
# $$ # #....$ #
# $.. # $ $ #
##$*. ## ######
# ..$## ### #
## . # $# #
# #$ @# . ##
# ### ##$.. #
###### ## .*$##
# $ $ # ..$ #
# $....# # $$ #
# $.*. # ###
## $$ ########
# ###
####
; 33
#######
## ##
# *.* #
# #$ $# #
##### *.* #####
## ## ## ##
# # ###.### # #
# *$* # $*$ # *$* #
# . . ..$@$.. . . #
# *$* # $*$ # *$* #
# # ###.### # #
## ## ## ##
##### *.* #####
# #$ $# #
# *.* #
## ##
#######
; 34
#####
# @ #
# $ #
# $ #
## $ ##
#####.*.*.#####
# *. .* #
# $$$. # .$$$ #
# *. .* #
#####.*.*.#####
## $ ##
# $ #
# $ #
# #
#####
; 35
#####
# #
## $ ##
## $.$ ##
## $ * $ ##
## $.*.*.$ ##
### $.*.#.*.$ ###
# $ *.# #.* $ #
# $.*.# #.*.$ #
# $ *.# #.* $ #
### $.*.#.*.$ ###
## $.*.*.$ ##
## $ * $ ##
## $.$ ##
## $ ##
# @ #
#####
; 36
#####
### ##
## $ ##
## $ *$ ##
## $.#.$.$ ##
## $.$. .$.$ ##
## $.$. . .$.$ ##
# *$. * * .# $##
# . . @ . . #
##$ #. * * .$* #
## $.$. . .$.$ ##
## $.$. .$.$ ##
## $.$.#.$ ##
## $* $ ##
## $ ##
## ###
#####
; 37
## ##
## # ##
## ##
# *$#$* #
# $...$ #
# #.@.# #
# $...$ #
# *$#$* #
## ##
## # ##
## ##
; 38
## ##
## # ##
# .$ $. #
# * * #
# .* #.# *. #
# $ # $ # $ #
# .$@$. #
# $ # $ # $ #
# .* #.# *. #
# * * #
# .$ $. #
## # ##
## ##
; 39
##### # #####
## # ##### # ##
# # # # #
## $* $ $ *$ ##
# ..*# #*.. #
###*.. # ..*###
# $ *$ # $* $ #
# # * # #
### ###* *### ###
# # * # #
# $ *$ # $* $ #
###*.. # ..*###
# ..*#@#*.. #
## $* $ $ *$ ##
# # # # #
## # ##### # ##
##### # #####
; 40
###
#################
###### ## ## ######
#### # $$ # $$ # ####
# #$$ #.. ..# $$# #
# ### #.###.# ### #
#* ##### ### #*# ### ##### *#
# ..@.. #
#* ##### ### #*# ### ##### *#
# ### #.###.# ### #
# #$$ #.. ..# $$# #
#### # $$ # $$ # ####
###### ## ## ######
#################
###
; 41
###############
# .. . . #
# $##$ # $$##.#
# # ### # #
#.## # # ##$ #
# $ $ $ $ #
#.## # # # #
#.## #@# ###.#
# $ # ### # #.#
# $ $ #
#.### ### # # #
# # # ###.#
# $#$$###$# # #
# . . . . #
###############
; 42
#### ##### ####
# ## # ##### #
# $.# # $ $ #
# .# # ##### #
## .#### ### ##$##
#$. $ # $ #
# ..### # # #
#*..@#######$#####
# ..#### # #
#$. $ # #
## .######$## #
# .# # ##$##
# $.# # $ #
# ## # # #
#### ########
; 43
################
## ##
# ############ #
# # # #
# # $$$ $ $ @# #
# # ### $$# ##
## $ ## # $ $ #
## # # #### #
###.. # # ###
## .. # .# $ ####
# #### ## .# #.# #
# # ###* $ .# ##
#### # .# #. #
# ## .###.## #
###### #
# # # #
############
; 44
###############################
# . . . . . . . . . #
# $ $ # $ $ # $ $ # $ $ # $ $ #
###.#####.#####.#####.#####.###
# $ $ # $ $ # $ $ # $ $ # $ $ #
# . . # . . #
###.#####.###########.#####.###
# $ # $ . *@# # * * $ #
# $ * * # # * . $ # $ #
###.#####.###########.#####.###
# . . # . . #
# $ $ # $ $ # $ $ # $ $ # $ $ #
###.#####.#####.#####.#####.###
# $ $ # $ $ # $ $ # $ $ # $ $ #
# . . . . . . . . . #
###############################
; 45
#####################
## # # # # ##
# * * * * * * * * * * #
# # # # # # # # # # #
# $.$ $.$ $.$ $.$ $.$ #
##. .#. .#. .#. .#. .##
# $.$ $.$ $.$ $.$ $.$ #
# # # # # # # # # # #
# $.$ $.$ $.$ $.$ $.$ #
##. .#. .#.@.#. .#. .##
# $.$ $.$ $.$ $.$ $.$ #
# # # # # # # # # # #
# * * * * * * * * * * #
## # # # # ##
#####################
; 46
# # # # #
#####################
## # # # ##
### .$$. .$$. .$$. .$$. ###
# .* *.* *.* *.* *. #
# $ ## $ ## $ ## $ ## $ #
# $ ## $ ## $ ## $ ## $ #
# .* *.* *.* *.* *. #
### .$$. .$$.@.$$. .$$. ###
# .* *.* *.* *.* *. #
# $ ## $ ## $ ## $ ## $ #
# $ ## $ ## $ ## $ ## $ #
# .* *.* *.* *.* *. #
### .$$. .$$. .$$. .$$. ###
## # # # ##
#####################
# # # # #
; 47
#####
############ @ ############
# # #
#$.$ .$.$.$.#**.**$$$*.**#
#.$.$.$.$.$.$# $. ..$.$ #
#$.$.$.$.$.$.# $.$.. .$ #
##.$.$.$. $.$#**.*$$$**.**##
# # #
# ######################### #
# .. .. # $ . $. $ . #
## $*$*$$$$*$ # $ $.$. . ##
# *. .. .$.$ #.$.$. $.$.$#
# $.$. .. .* #$.$.$ .$.$.#
# $*$$$$*$*$ # . .$.$ $ #
# .. .. # . $ .$ . $ #
############ * ############
#####
; 48
#############################
# # # # # # # #
# # # # # # # # # #
# .$*$.$*$.$*$.$*$.$*$. #
###.# # # # # # # # # # #.###
# $ . . . . . . . . . $ #
# *# #$#$#$#$#$#$#$#$# #* #
# $ * . . . . . . . * $ #
###*..$ #$#$#$@$#$#$# $..*###
# $ * . . . . . . . * $ #
# *# #$#$#$#$#$#$#$#$# #* #
# $ . . . . . . . . . $ #
###.# # # # # # # # # # #.###
# .$*$.$*$.$*$.$*$.$*$. #
# # # # # # # # # #
# # # # # # # #
#############################
; 49
#############################
# * * * #
# $ ### $ ##### $ ### $ #
# $ $ ### $ ### $ ### $ $ #
#*# $ ### $ # $ ### $ #*#
# ## .*.*.*.*.$.*.*.*.*. ## #
# ###$ $ $ $ $.$ $ $ $ $### #
## ..*.....*...$...*.....*.. ##
## $ $ $ $ $ *@* $ $ $ $ $ ##
## ..*.....*...$...*.....*.. ##
# ###$ $ $ $ $.$ $ $ $ $### #
# ## .*.*.*.*.$.*.*.*.*. ## #
#*# $ ### $ # $ ### $ #*#
# $ $ ### $ ### $ ### $ $ #
# $ ### $ ##### $ ### $ #
# * * * #
#############################
; 50
##############################
# .$ ## $. ## .$ ## $. ## .$ #
#$ . . $##$ . . $##$ .#
#. $##$ . . $##$ . . $#
# $. ## .$ ## $. ## .$ ## $. #
### # # ## ## # # ## ## ##
### # # ## # . # # ## ## ##
# $. ## .$ # $ # .$ ## $. #
#. $##$ . .$## #$ . . $#
#$ . . $# @#$. . $##$ .#
# .$ ## $. # $ # $. ## .$ #
## ## ## # # . # ## # # ###
## ## ## # # ## ## # # ###
# .$ ## $. ## .$ ## $. ## .$ #
#$ . . $##$ . . $##$ .#
#. $##$ . . $##$ . . $#
# $. ## .$ ## $. ## .$ ## $. #
##############################

View file

@ -0,0 +1,906 @@
; Sasquatch VII (50 puzzles, released June 2004)
; This set has a lot of symmetry but not as much as Sasquatch VI.
; I tried to do more "normal" puzzles this time. It also contains more expreiments
; with squares plus other shapes such as diamonds and a circle. As usual several
; oversize puzzles are at the end of the set.
;
; 1
####
#### ##
# # *###
##.$# * ##
# @ * * #
# # * #
##### * * #
## * ##
## #
## #
####
; 2
#####
#### #
# $ #
### #$###
# * . #
# * * #@#
# * * #
### * .##
## #
#####
; 3
####
## #######
## * $ # #
## * * ** ##
## * * #@.* #
# * * ## ** #
# #### ##
### ## # #
#### #####
; 4
#########
# # #
# # # #
# .$..$##
# $..$ #
###$#@# #
# $. #
# ####
#####
; 5
########
#@ # ###
# $ $ #
####$##$## #
# .* .* .*.#
# #
## # # ##
##########
; 6
#########
# # #
#.$*$#.##
# .$ $ #
## ... #
# $ $ ##
# $###.#
# @ ##
#########
; 7
####
# ###
### . ##
# .# #
# $$*$$ #
### . ##
# . @#
######
; 8
#########
# $ . #
# # #
#*** ***#
# # @ #
# .$.$ #
#########
; 9
####
# ###
####$. #
# * . #
#@#.#$# #
# $ * #
# .$####
### #
####
; 10
#######
## #
### .### #
# $ $ # #
#@*.$.. #
# $ $ ###
### #. #
# ##
#####
; 11
'derived from SokHard 1'
######
# * .#
#. $#
#.#$.#
# $##
##@ $ #
# #
######
; 12
'derived from SokHard 5'
#####
##### @ #
# $ $ #
# ****.#
# . # #
# ### ##
## #
#######
; 13
####
####### #
# * #
# .$.$. #
## $###$ #
#*.# #.*#
# $###$ ##
# .$.$. #
# * #
#@ ######
#####
; 14
######
# #######
# ## $ $ $ #
# . # # # #
###..$ @ #
#..# #####
## #$#
# #
#####
; 15
####
### ##
# $$. ###
# .$.$$ #
## . . #
### @# ###
# . . ##
# $$.$. #
### .$$ #
## ###
####
; 16
####
# # #####
#$.#
### ########
# #
# #.***..*#.###
# $$$ @ $$$ #
###.##### #.# #
# #
######## ###
####
; 17
####
###### @#
# # $ #
# $.#. #
# #. ###
###$.*.$$ #
# .#. #
##$ ####
# $ ##
# #
#####
; 18
#####
# #
##$ #
## *. #
# .$ ##
## .* #
# $@$ #
# *. ##
## $. #
# .* ##
# $##
# #
#####
; 19
#######
### ##
# *..* #
# #$ $#@#
# *$$* #
## ... ###
# $# #
# ** ####
# #
######
; 20
####
##### #
# #
# ### #
##$* # ##
# *..# #
# $$$ #
##*. $ ##
# $*. #
# . ###
## . #
# @##
####
; 21
####
#### #
# #. #
# $$ ###
# #. ##
# #*## #
# # * # #
# @ * $ #
# .## ###
#### #* #
## # #
### #
#####
; 22
######
# #
########### ## #
# $. $ $ # #
# # $..*.+*. # #
# $. $ $ # #
####### ## ### #
# # *#
## ##### #
# #
#########
; 23
####
#### ##
# # *###
##.$# * ##
# @ * * ##
# # * * ##
##### * * * #
## * * #
## * * #
## * ##
## #
## #
####
; 24
#################
#@ # # # #
# # # # # # # # ###
# $.$.$.$.$.$.$. #
###.$.$.$.$.$.$.$ #
#$.$.$.$.$.$.$. #
# # # # # # # # #
# # # # #
#################
; 25
###################
# $.$. *.$ * $. #
# .$ * $.* .$.$ #
#@$.$. .$ * * $. ##
# .$ * * $. .$.$ #
# $.$. *.$ * $. #
# .$ * $.* .$.$ #
##################
; 26
####
# ####
##### # #
########### $ #
# # # # # ##*# #
# $ $# #. .$. .*##
# #*## # # ##*# #
##*.@.$. .# #$ $ #
# #*## # # # # #
# $ ###########
# # #####
#### #
####
; 27
#### ######
#### @###### #
# # #
# ###*## $ $ #$##
# #... ##### #
# #*... $ #$#
# *...# # #
### #### $ $ $$#
# ####### #
#### #
###########
; 28
#####
# . ##########
# ##
### ### ####$$ #
# ... # # ## # ##
# # ## # #
## #### # # #
## # # # $$ # #
# @ # ## # #
# # # # # ##
### # ###### #
##### #
##########
; 29
##### #####
# ####### #
# $ @ $ #
## ######### ##
## ###....## #
# ## ###
# # # # .## $ #
# # . # # #
######## $ #
# # ### $ ###
# # # # # $ #
## # # #
#############
; 30
########
#. # #
#.$ ##########
#.$###.# @ # #
#.$ # $$$ # # $ #
# $ #..# # * #
## # # # ..*##
#* .$ ## * #
# # ###### $ #
### ## # #
### $$ ##$.$.*#####
# ... .# .$.* # #
# $$ # $.* $ #
# # # ### # # #
# #### # ##### #
##### # #
#########
; 31
##########
## # # ##
# @ * * #
# $.$$.$ #
##*.$..$.*##
# $. .$ #
# $. .$ #
##*.$..$.*##
# $.$$.$ #
# * * #
## # # ##
##########
; 32
#####
### #####
# # #
# $.$.$.$ ##
# .$.$.$. #
## $.$.$.$ #
# #.$.#.$.# #
# $.$.$.$ ##
# .$.$.$. #
## $.$.$.$ #
# # #
#####@ ###
#####
; 33
#########
# # #
### # # # ###
# * * $ * #
# # . . . # #
# $ *$* * #
### .$@$. ###
# * *$* $ #
# # . . . # #
# * $ * * #
### # # # ###
# # #
#########
; 34
#############
#. # .#
# $ $#$ $ #
# *** *** #
# * . . * #
# $*.***.*$ #
### *@* ###
# $*.***.*$ #
# * . . * #
# *** *** #
# $ $#$ $ #
#. # .#
#############
; 35
####
# # #####
# ######## @#
# * * * * #
## * * * *###
#* * * * #
# * * * *#
#* * * * #
# * * * *#
#* * * * #
# * * * *#
#. * * * ##
# $ * * * #
########## #
# #
####
; 36
#####
##### #####
# # . # #
# $ $.$.$ $ #
# *.$.$.* #
###$.$.$.$.$###
# .$.$.$.$. #
# .$.$.@.$.$. #
# .$.$.$.$. #
###$.$.$.$.$###
# *.$.$.* #
# $ $.$.$ $ #
# # . # #
##### #####
#####
; 37
##### #####
# ####### #
# # # # # #
# $.$.$.$.$ #
###.$.$.$.$.###
# $.$ . $.$ #
# .$ $. #
# $.*.+.*.$ #
# .$ $. #
# $.$ * $.$ #
###.$.$.$.$.###
# $.$.$.$.$ #
# # # # # #
# ####### #
##### #####
; 38
###############
# # # #
# .$.$. .$.$. #
# $.$.$ $.$.$ #
##.$ $. .$ $.##
# $.$.$.$.$.$ #
# .$.$.$.$.$. #
# .$@$. #
# .$.$.$.$.$. #
# $.$.$.$.$.$ #
##.$ $. .$ $.##
# $.$.$ $.$.$ #
# .$.$. .$.$. #
# # # #
###############
; 39
#############
## # ##
## # # # # # ##
# * * * * * * #
# # * * # * * # #
# * . * * . * #
# # * * # * * # #
# * * $ $ * * #
### # # @ # # ###
# * * $ $ * * #
# # * * # * * # #
# * . * * . * #
# # * * # * * # #
# * * * * * * #
## # # # # # ##
## # ##
#############
; 40
###################
## # ##
# $$$ # $$$ @ #
# ##.## . ##.## #
# $##.##$ $##.##$ #
# $.....$.$.....$ #
# $##.##$ $##.##$ #
# ##.## . ##.## #
# $$$ # $$$ #
###. . .###. . .###
# $$$ # $$$ #
# ##.## . ##.## #
# $##.##$ $##.##$ #
# $.....$.$.....$ #
# $##.##$ $##.##$ #
# ##.## . ##.## #
# $$$ # $$$ #
## # ##
###################
; 41
#########
# #
##$ .$. $##
#### .* *. ####
## $*.$#$.*$ ##
## .. # .. ##
####$..$$ # $$..$####
# $ *.$# $#$ #$.* $ #
# .. $ #.#.# $ .. #
# .*$ $. .$ $*. #
# $ ##### # ##### $ #
# .*$ $. @ .$ $*. #
# .. $ #.#.# $ .. #
# $ *.$# $#$ #$.* $ #
####$..$$ # $$..$####
## .. # .. ##
## $*.$#$.*$ ##
#### .* *. ####
##$ .$. $##
# #
#########
; 42
######### #########
## # ##### # ##
##.$.$. # $.$.$ # .$.$.##
# $.$.$ # .$ $. # $.$.$ #
# .$ $. #.$ $ $.# .$ $. #
# $.$.$ # .$ $. # $.$.$ #
##.$.$.## $.$.$ ##.$.$.##
# # . # #
# ##### ### ### ##### #
# . # . . # . #
##$.$.$ # $.*.$ # $.$.$##
#.$ $. #..$ $..# .$ $.#
#$ $ $. * @ * .$ $ $#
#.$ $. #..$ $..# .$ $.#
##$.$.$ # $.*.$ # $.$.$##
# . # . . # . #
# ##### ### ### ##### #
# # . # #
##.$.$.## $.$.$ ##.$.$.##
# $.$.$ # .$ $. # $.$.$ #
# .$ $. #.$ $ $.# .$ $. #
# $.$.$ # .$ $. # $.$.$ #
##.$.$. # $.$.$ # .$.$.##
## # ##### # ##
######### #########
; 43
####
### #
# #
##### #* ##
# $ # ######
# # $.# #
### #$.$#*#### #
## #.$.### # #
## ##$. # # #
## ## . #* # #
## # # #### ## #
## # $. # * # #
####### .##$## # #
# # ##$##. #######
# # * # .$ # ##
# ## #### # # @##
# # *# . ## ##
# # # .$## ##
# # ###.$.# ##
# ####*#$.$# ###
# #.$ # #
###### # $ #
## *# #####
# #
# ###
####
; 44
#######
## # #
## $.$ #
# .$.$#####
# $. .$.$ #
##.$. .$.$ #
# $.$. .$.$#####
# $.$. .$.$ #
# $.$. .$.$ #
#####$.$. .$.$#####
# $.$. .$.$ #
# $.$. .$.$ #
#####$.$.@.$.$#####
# $.$. .$.$ #
# $.$. .$.$ #
#####$.$. .$.$#####
# $.$. .$.$ #
# $.$. .$.$ #
#####$.$. .$.$ #
# $.$. .$.##
# $.$. .$ #
#####$.$. #
# $.$ ##
# # ##
#######
; 45
#########
# * * #
# . #
### # # ###
# $ # # $ #
# $ # # $ #
# ## ## #
##### ## ## #####
#### #.$.# ####
# #$$ # . $ . # $$# #
# ###.*.#.*.### #
#* #### . .$ $. . #### *#
# . $$# @ #$$ . #
#* #### . .$ $. . #### *#
# ###.*.#.*.### #
# #$$ # . $ . # $$# #
#### #.$.# ####
##### ## ## #####
# ## ## #
# $ # # $ #
# $ # # $ #
### # # ###
# . #
# * * #
#########
; 46
#########
# * * #
# #
### # # ###
# $ # # $ #
# $ # # $ #
# ## ## #
### # # ###
# # $ ## ## $ # #
# $ # # $ #
#### ## ## ####
##### #.## ##.# #####
#### #$$ . # # . $$# ####
# #$$ # .. .. # $$# #
# ### ###. .#. .### ### #
#* #### ### .. .. ### #### *#
# # @ # #
#* #### ### .. .. ### #### *#
# ### ###. .#. .### ### #
# #$$ # .. .. # $$# #
#### #$$ . # # . $$# ####
##### #.## ##.# #####
#### ## ## ####
# $ # # $ #
# # $ ## ## $ # #
### # # ###
# ## ## #
# $ # # $ #
# $ # # $ #
### # # ###
# #
# * * #
#########
; 47
###
### ###
## $$ $$ ##
## $$.#...#.$$ ##
# $ #..$$ $$..# $ #
# #.*$ $ $ $*.# #
# ..$ .#...#. $.. #
#$#. .#.*$$ $$*.#. .#$#
# .$. .$ $ $. .$. #
#$#* #.. $.#.#.$ ..# *#$#
# $.$ .$ #.$ $.# $. $.$ #
# .. .* $. # # .$ *. .. #
#$#$ #$ .$ * * * $. $# $#$#
# $.$$.$ # # * * # # $.$$.$ #
# . . $. * @ * .$ . . #
# $.$$.$ # # * * # # $.$$.$ #
#$#$ #$ .$ * * * $. $# $#$#
# .. .* $. # # .$ *. .. #
# $.$ .$ #.$ $.# $. $.$ #
#$#* #.. $.#.#.$ ..# *#$#
# .$. .$ $ $. .$. #
#$#. .#.*$$ $$*.#. .#$#
# ..$ .#...#. $.. #
# #.*$ $ $ $*.# #
# $ #..$$ $$..# $ #
## $$.#...#.$$ ##
## $$ $$ ##
### ###
###
; 48
#
# #
# #
# * #
# * * #
# * $ * #
## * $#$ * ##
# . * $ * . #
# * . * * . * #
# * * . * . * * #
# * $ * . . * $ * #
# * $#$ * @ * $#$ * #
# * $ * . . * $ * #
# * * . * . * * #
# * . * * . * #
# . * $ * . #
## * $#$ * ##
# * $ * #
# * * #
# * #
# #
# #
#
; 49
#
# #
# # #
# * #
# * * #
# * $ * #
## * $#$ * ##
# . * $ * . #
# * . * * . * #
# * * . * . * * #
# * $ * . * $ * #
## * $#$ * # * $#$ * ##
# . * $ * * * $ * . #
# * . * * . * . * * . * #
# * * . * .#* *#. * . * * #
# * $ * * $ * * $ * #
# #* $#$ *.#** $@$ **#.* $#$ *# #
# * $ * * $ * * $ * #
# * * . * .#* *#. * . * * #
# * . * * . * . * * . * #
# . * $ * * * $ * . #
## * $#$ * # * $#$ * ##
# * $ * . * $ * #
# * * . * . * * #
# * . * * . * #
# . * $ * . #
## * $#$ * ##
# * $ * #
# * * #
# * #
# # #
# #
#
; 50
#
# #
# # #
# * #
# * * #
# * $ * #
## * $#$ * ##
# . * $ * . #
# * . * * . * #
# * * . * . * * #
# * $ * # * $ * #
## * $#$ * * $#$ * ##
# . * $ * # * $ * . #
# * . * * . * . * * . * #
# * * . * . * * . * . * * #
# * $ * # * $ * # * $ * #
## * $#$ *# #* $#$ *# #* $#$ * ##
# . * $ * # * $ * # * $ * . #
# * . * * . * . * * . * . * * . * #
# * * . * . * * . * . * * . * . * * #
# * $ * * $ * . . * $ * * $ * #
# #* $#$ *# #* $#$ * @ * $#$ *# #* $#$ *# #
# * $ * * $ * . . * $ * * $ * #
# * * . * . * * . * . * * . * . * * #
# * . * * . * . * * . * . * * . * #
# . * $ * # * $ * # * $ * . #
## * $#$ *# #* $#$ *# #* $#$ * ##
# * $ * # * $ * # * $ * #
# * * . * . * * . * . * * #
# * . * * . * . * * . * #
# . * $ * # * $ * . #
## * $#$ * * $#$ * ##
# * $ * # * $ * #
# * * . * . * * #
# * . * * . * #
# . * $ * . #
## * $#$ * ##
# * $ * #
# * * #
# * #
# # #
# #
#

View file

@ -0,0 +1,909 @@
; Sasquatch VI (50 puzzles, released October, 2002)
; This set is a symmetrical feast. Forty of these levels involve some form of symmetry.
; There is also a sequence of levels where I explore the possibilities of working
; within squares of various sizes.
; This set contains several puzzles which exceed the 31x18 size limit of my first sets.
;
; 1
#####
## ## ####
# # # # #
# *$* ###$ ##
# .$. ... $ ##
# *$* ### ##
# # # # @#
## ## #######
#####
; 2
##########
# # #
# #$$$$$ #
# .#.# #
# ... ##
### @ ###
#####
; 3
########
## ##
# *..* #
# #$ $#@#
# **** #
## ###
### ##
####
; 4
#######
### # #
# .$$. ##
# * *@ #
## .$$. #
# # ###
#######
; 5
####
##### ####
## # $ #
# .# # #* #
## * @ * ##
# *# # #. #
# $ # ##
#### #####
####
; 6
########
# #
### ## # ####
# *.** .* #
# $ $# @ #
####### ###
#####
; 7
########
## # #
# # # #
# #
# ## ##
## .#
#####.#
# #.#
#### # ###
## #
# ##$##. #
# $ $ #####
# $ @ #
## ####
####
; 8
###########
# @ #
# ###$### #
# # .$. # #
# #$ . $# #
# $. .$ #
###$. .$###
# . #
#######
; 9
#######
# #
# $ $ ####
### ## . #
# #. $ #
# @ .#*###
### #.. #
## $ # #
# $ $ #
# ##. #
#########
; 10
####
# #
#######$ #
# . $ $ #
# . .. ##
##$##+#$#
# . .. ####
##. $ $ $ #
# ##### #
# $# #####
# #
####
; 11
####
# #
# ##
### #
# # ####
# . @ # ###
##.# # #
#.# #$$$$ #
#.**$ #
###. ## #
# ## ##
########
; 12
####
###### #
# #$.#
## ## # #
# $ $$$$ #
##.*.*.*..#
# @ #
# #######
#####
; 13
####
#### #
# #
#### ** #
## # # #
# *** ####
##$ ..... #
# $ # $ $ #
# ####$ ##
##### # @ #
# #
######
; 14
#####
# @ #
### # #####
# $ ## #
# . ## #####
#### ## $$ $ #
# $ # #
# . ##$ ####
#### ### #
# $ # #
# . # #
#### ### ###
# $ #
# .....# #
####### #
#####
; 15
####
## ##
# $ ##
##### * #
## . * * #
## * * $* .#
# * *$..$* ###
# $ *$.##. ##
## .##.$* $ #
### *$..$* * #
#. *$ * * ##
# * *@ . ##
# * #####
## $ #
## ##
####
; 16
########
## ####
##. # #
# *$$ ######
# $. ##
#####*###. ##
# * * #
# #.$@$.# #
# * * #
## .###*#####
## .$ #
###### $$* #
# # .##
#### ##
########
; 17
##### ####
# ##### #
# $ $ #
## ## ### #
# . # ##
#$#....#*#
########### # .$ # #
# # ## ### ## ##
# $ $ # $ $ #
## ## ### ## # #
# # $. # ###########
#*#....#*#
## # . ###
# ###@##$ #
# $ $ #
# ###### #
#### #####
; 18
#### #### # #### ####
# #### ####### #### #
# .$. # .$. # .$. # .$. #
#. $ . . $ . . $ . . $ .#
#$$#$$*$$#$$@$$#$$*$$#$$#
#. $ . . $ . . $ . . $ .#
# .$. # .$. # .$. # .$. #
# #### ####### #### #
#### #### # #### ####
; 19
########
## # ##
## $.$ ##
## $.$.$ ##
## .$.$.###
# .$.$.$ ##
# $.$ $. ##
##.$.$.$.##
# $.$.$.$ #
# . . #
#####@#####
# #
#### ###
## # ##
## $.$ ##
## $.$.$ ##
###.$.$. ##
## $.$.$. #
## .$ $.$ #
##.$.$.$.##
# $.$.$.$ #
# . . #
###########
; 20
##### #####
###########
## . ##
## .$.$. ##
## $*$*$ ##
#..$@$..#
## $*$*$ ##
## .$.$. ##
## . ##
###########
##### #####
; 21
##########
# ## # #
# # * ####
###$ .$ ##
# . @ * #
# * . #
## $. $###
#### * # #
# # ## #
##########
; 22
##########
# ## #
# $. .$ #
# .**$*. #
## $ @* ##
## * $ ##
# .*$**. #
# $. .$ #
# ## #
##########
; 23
##########
### ##
# $.*.*$##
# *#$ #. #
# . @$* #
# *$ . #
# .# $#* #
##$*.*.$ #
## ###
##########
; 24
##########
## ####
##.$.$.$ #
##$.$.$. #
# .$ @.$ #
# $. $. #
# .$.$.$##
# $.$.$.##
#### ##
##########
; 25
##########
# $. #
# * * #
# * ** *$#
# * @* .#
#. * * #
#$* ** * #
# * * #
# .$ #
##########
; 26
########
## @ ##
# #$.$.# #
# $.$.$. #
# .$ .$ #
# $. $. #
# .$.$.$ #
# #.$.$# #
## ##
########
; 27
##########
# ##
# $.$.$. #
# .$.$.$ #
# $.##$. #
# .$##.$ #
# $.$.$. #
# .$.$.$ #
## @#
##########
; 28
##########
# .$ #
# .$.$ #
# .$.$.$ #
#.$.##$.$#
#$.$##.$.#
# $.$.$. #
# $.$. #
# $. @#
##########
; 29
#######
## ## ##
##### $###
# $ .. # #
# *$*.###
## .$@$. ##
###.*$* #
# # .. $ #
###$ #####
## ## ##
#######
; 30
#######
## ##
###$ $###
# $.* *.$ #
# *.*.* #
# *@* #
# *.*.* #
# $.* *.$ #
###$ $###
## ##
#######
; 31
#############
##### .$ #
#### .$.$ #
### .$.$ $ #
## .$.$.$.$#
# .$.$.$.$.#
# .$.$@$.$. #
#.$.$.$.$. #
#$.$.$.$. ##
# $ $.$. ###
# $.$. ####
# $. #####
#############
; 32
###### ######
# ##### #
# # # # #
# $.$.$.$ #
## .$.$.$. ##
## $.$.$.$ ##
##.$.@.$.##
## $.$.$.$ ##
## .$.$.$. ##
# $.$.$.$ #
# # # # #
# ##### #
###### ######
; 33
###########
## # ##
# $.$.$.$.$ #
# .$.$.$.$. #
# $.$.$.$.$ #
# .$. .$. #
##$.$ @ $.$##
# .$. .$. #
# $.$.$.$.$ #
# .$.$.$.$. #
# $.$.$.$.$ #
## # ##
###########
; 34
###############
# # #
# #.$.$.$.$.# #
# .$.$.$.$.$. #
# $.$.$.$.$.$ #
# .$.$.$.$.$. #
# $.$.$ $.$.$ #
##.$.$ @ $.$.##
# $.$.$ $.$.$ #
# .$.$.$.$.$. #
# $.$.$.$.$.$ #
# .$.$.$.$.$. #
# #.$.$.$.$.# #
# # #
###############
; 35
#### ####
# # # # #
###.$#####$.###
# $ .$ $. $ #
# . $. .$ . #
###$.## ##.$###
#.$# #$.#
## @ ##
#$.# #.$#
###.$## ##$.###
# $ .$ $. $ #
# . $. .$ . #
###$.#####.$###
# # # # #
#### ####
; 36
#####
#### ###
# # ###
## # $.# #
# $.#.$.$# #
## #.$.$ $. ##
# .$ $.$.# #
# #$.$.@.$.$# #
# #.$.$ $. #
## .$ $.$.# ##
# #$.$.#.$ #
# #.$ # ##
### # #
### ####
#####
; 37
#######
### ###
## # ##
# $#$.$.#.$ #
## .$.#.$.$# ##
# #.$.$.$.$ #
# .$.$ $.#. #
# #$.$ @ $.$# #
# .#.$ $.$. #
# $.$.$.$.# #
## #$.$.#.$. ##
# $.#.$.$#$ #
## # ##
### ###
#######
; 38
#######
###### ######
## $. .$ ##
# $ $.$#$.$ $ #
# #.$.$.$.# #
## $. .$.$. .$ ##
##$.$.#.$.#.$.$##
# .$.$. .$.$. #
# #$.$ @ $.$# #
# .$.$. .$.$. #
##$.$.#.$.#.$.$##
## $. .$.$. .$ ##
# #.$.$.$.# #
# $ $.$#$.$ $ #
## $. .$ ##
###### ######
#######
; 39
####
# ##
## $####
###. . #
#### $ # $ #
# # . .####
## $####$ # ##
###. . $. $# $####
# $ # $ **.#. . #
# . .#.** $ # $ #
####$ #$ .$ . .###
## # $####$ ##
####. . # #
# $ # $ ####
# . .###
####$ ##
## @#
####
; 40
####
# #
# #
# #
################ #
# $ $ $ $ $ $$#
# @ $ *.*.*. #
# # ..* $... $#
#####$... $ $..* #
# *.$. $. *.$#
#$.$ $.. $ * #
# * $ ..$ $.$#
#$.* .$ .$.* #
# *..$ $ ...$#
#$ ...$ *.. #####
# .*.*.* $# #
#$$ $ $ $ $ $ #
# ################
# #
# #
# #
####
; 41
#
# #
# . #
# $.$ #
# .$. #
# $.$ $.$ #
# $. . . .$ #
# $.$.$ $.$.$ #
# . . # # . . #
# $.$.$# $ #$.$.$ #
# ..$ $@$ $.. #
# $.$.$# $ #$.$.$ #
# . . # # . . #
# $.$.$ $.$.$ #
# $. . . .$ #
# $.$ $.$ #
# .$. #
# $.$ #
# . #
# #
#
; 42
#
# #
# # #
# # #
# # #
# $ #
#.*********.#
# * * #
# * ******* * #
# * * * * #
# * * *** * * #
# ###$* * *@* * *$### #
# * * *** * * #
# * * * * #
# * ******* * #
# * * #
#.*********.#
# $ #
# # #
# # #
# # #
# #
#
; 43
# # #
###################
# # # # #
# # # # # # #
# **$***$***$** #
# * . . * #
####$ #### #### $####
# * ## #.# ## * #
# *.# ## ## #.* #
# * ### ### * #
####$ . @ . $####
# * ### ### * #
# *.# ## ## #.* #
# * ## #.# ## * #
####$ #### #### $####
# * . . * #
# **$***$***$** #
# # # # # # #
# # # # #
###################
# # #
; 44
##### #####
##### ##### #####
# # # # # #
# $.$$$.$ $.$$$.$ #
###.#...#...#...#.###
# $.$ $.$$$.$ $.$ #
# .$ $. .$ $. #
# $.$ $.$$$.$ $.$ #
###.#...#...#...#.###
# $.$$$.$ $.$$$.$ #
# $. .$@$. .$ #
# $.$$$.$ $.$$$.$ #
###.#...#...#...#.###
# $.$ $.$$$.$ $.$ #
# .$ $. .$ $. #
# $.$ $.$$$.$ $.$ #
###.#...#...#...#.###
# $.$$$.$ $.$$$.$ #
# # # # # #
##### ##### #####
##### #####
; 45
#######################
## # * # ##
# # # # # # # #
# $.$.$ $.$.$ $.$.$ #
###.$.$.#.$.$.#.$.$.###
# $. .$ $. .$ $. .$ #
# #.$.$.#.$.$.#.$.$.# #
# $.$.$ $.$.$ $.$.$ #
# # # # # # # #
# $.$.$ $.$.$ $.$.$ #
# #.$.$.#.$.$.#.$.$.# #
#* $. .$ $.@.$ $. .$ *#
# #.$.$.#.$.$.#.$.$.# #
# $.$.$ $.$.$ $.$.$ #
# # # # # # # #
# $.$.$ $.$.$ $.$.$ #
# #.$.$.#.$.$.#.$.$.# #
# $. .$ $. .$ $. .$ #
###.$.$.#.$.$.#.$.$.###
# $.$.$ $.$.$ $.$.$ #
# # # # # # # #
## # * # ##
#######################
; 46
###### ###########
## #######. . . . ##
##.$.$.$ .$.$.$.$.$.##
# $.$.$.#####$.$.$.$.$.$ #
# .$.$.$# # $.$.$.$.$. #
#.$.$. # $ ####.$.$ #
# .$.##### ### ## # .$. #
#.$.$# # # $ $ # $.$##
# .$.# $ $ # # # #### #
#.$.$## ## # # ## # #
# .$. # ###### $ $ # #
#.$.$ $# # # # # #
##.$ # # ## ##### ## #
# ## ##### ## # # $.##
# # # # # #$ $.$.#
# # $ $ ###### # .$. #
# # ## # # ## ##$.$.#
# #### # # # $ $ #.$. #
##$.$ # $ $ # # #$.$.#
# .$. # ## ### #####.$. #
# $.$.#### $ # .$.$.#
# .$.$.$.$.$ # #$.$.$. #
# $.$.$.$.$.$#####.$.$.$ #
##.$.$.$.$.$. @ $.$.$.##
## . . . .####### ##
########### ######
; 47
###### ##### ##### ######
## ############### ##
# $ $ $.$ $ $.$ $ $.$ $ $ #
# $.$ . $.$ . $.$ . $.$ #
# $.$.*.*.$.*.*.$.*.*.$.$ #
# $.$ . $.$ . $.$ . $.$ #
##$ * $.$ $ $#$ $ $.$ * $##
#.....#.....#.....#.....#
##$ * $.$ $ $#$ $ $.$ * $##
## $.$ . $.$ . $.$ . $.$ ##
##$.$.$.$.$.*.*.$.$.$.$.$##
## $.$ . $.$ . $.$ . $.$ ##
##$ * $.$ * * * * $.$ * $##
#....###... @ ...###....#
##$ * $.$ * * * * $.$ * $##
## $.$ . $.$ . $.$ . $.$ ##
##$.$.$.$.$.*.*.$.$.$.$.$##
## $.$ . $.$ . $.$ . $.$ ##
##$ * $.$ $ $#$ $ $.$ * $##
#.....#.....#.....#.....#
##$ * $.$ $ $#$ $ $.$ * $##
# $.$ . $.$ . $.$ . $.$ #
# $.$.*.*.$.*.*.$.*.*.$.$ #
# $.$ . $.$ . $.$ . $.$ #
# $ $ $.$ $ $.$ $ $.$ $ $ #
## ############### ##
###### ##### ##### ######
; 48
# # # #
##########################
## # # # # ##
# $.$.#.$.$#$.$.#.$.$#$.$. #
# .$.$ $.$. .$.$ $.$. .$.$ #
# $.$. .$.$ $.$. .$.$ $.$. #
# .$.$#$.$. .$.$#$.$. .$.$ #
#### # ### # ### ####
# .$.$#$.$. .$.$#$.$. .$.$ #
# $.$. .$.$ $.$. .$.$ $.$. #
# .$.$ $.$. .$.$ $.$. .$.$ #
# $.$. .$.$#$.$. .$.$#$.$. #
#### ### # ### # ####
# $.$. .$.$#$.$. .$.$#$.$. #
# .$.$ $.$. . @$ $.$. .$.$ #
# $.$. .$.$ $ . .$.$ $.$. #
# .$.$#$.$. .$.$#$.$. .$.$ #
#### # ### # ### ###
# .$.$#$.$. .$.$#$.$. .$.$ #
# $.$. .$.$ $.$. .$.$ $.$. #
# .$.$ $.$. .$.$ $.$. .$.$ #
# $.$. .$.$#$.$. .$.$#$.$. #
#### ### # ### # ####
# $.$. .$.$#$.$. .$.$#$.$. #
# .$.$ $.$. .$.$ $.$. .$.$ #
# $.$. .$.$ $.$. .$.$ $.$. #
# .$.$#$.$.#.$.$#$.$.#.$.$ #
## # # # # ##
##########################
# # # #
; 49
##### #####
## ## ## ##
##.$.$.## ##.$.$.##
##$.$.$## ##$.$.$##
# .$.$. # # .$.$. #
# $.$.$ # # $.$.$ #
# .$.$. # # .$.$. #
###### $.$.$ ### $.$.$ ######
### .$.$. .$.$. ###
##.$.$.$.$.$.$.$.$.$.$.$.$.$.$.##
# $.$.$.$.$ $.$.$.$.$ $.$.$.$.$ #
# .$.$.$.$ $.$.$.$ $.$.$.$. #
# $.$.$.$.$ $.$.$.$.$ $.$.$.$.$ #
##.$.$.$.$.$.$.$.$.$.$.$.$.$.$.##
### .$.$.# . #.$.$. ###
###### $.$.$ #*# $.$.$ ######
# .$.$..*@*..$.$. #
###### $.$.$ #*# $.$.$ ######
### .$.$.# . #.$.$. ###
##.$.$.$.$.$.$.$.$.$.$.$.$.$.$.##
# $.$.$.$.$ $.$.$.$.$ $.$.$.$.$ #
# .$.$.$.$ $.$.$.$ $.$.$.$. #
# $.$.$.$.$ $.$.$.$.$ $.$.$.$.$ #
##.$.$.$.$.$.$.$.$.$.$.$.$.$.$.##
### .$.$. .$.$. ###
###### $.$.$ ### $.$.$ ######
# .$.$. # # .$.$. #
# $.$.$ # # $.$.$ #
# .$.$. # # .$.$. #
##$.$.$## ##$.$.$##
##.$.$.## ##.$.$.##
## ## ## ##
##### #####
; 50
# #
##### ######### ######### #####
## ### # ### # ### ##
# $.$. .$.$ $.$. .$.$ $.$. .$.$ #
# .$.$ $.$. .$.$ $.$. .$.$ $.$. #
# $.$. .$.$ $.$. .$.$ $.$. .$.$ #
##.$.$#$.$. .$.$#$.$. .$.$#$.$.##
# # ### # ### # #
##.$.$#$.$. .$.$#$.$. .$.$#$.$.##
# $.$. .$.$ $.$. .$.$ $.$. .$.$ #
# .$.$ $.$. .$.$ $.$. .$.$ $.$. #
# $.$. .$.$#$.$. .$.$#$.$. .$.$ #
### ### # ### # ### ###
# $.$. .$.$#$.$. .$.$#$.$. .$.$ #
# .$.$ $.$. .$.$ $.$. .$.$ $.$. #
# $.$. .$.$ $.$. .$.$ $.$. .$.$ #
##.$.$#$.$. .$.$ $.$. .$.$#$.$.##
# # ### @ ### # #
##.$.$#$.$. .$.$ $.$. .$.$#$.$.##
# $.$. .$.$ $.$. .$.$ $.$. .$.$ #
# .$.$ $.$. .$.$ $.$. .$.$ $.$. #
# $.$. .$.$#$.$. .$.$#$.$. .$.$ #
### ### # ### # ### ###
# $.$. .$.$#$.$. .$.$#$.$. .$.$ #
# .$.$ $.$. .$.$ $.$. .$.$ $.$. #
# $.$. .$.$ $.$. .$.$ $.$. .$.$ #
##.$.$#$.$. .$.$#$.$. .$.$#$.$.##
# # ### # ### # #
##.$.$#$.$. .$.$#$.$. .$.$#$.$.##
# $.$. .$.$ $.$. .$.$ $.$. .$.$ #
# .$.$ $.$. .$.$ $.$. .$.$ $.$. #
# $.$. .$.$ $.$. .$.$ $.$. .$.$ #
## ### # ### # ### ##
##### ######### ######### #####
# #

View file

@ -0,0 +1,871 @@
; Sasquatch V (50 puzzles, released December, 2001)
; Again, a wide variety. This set contains several puzzles which
; exceed the 31x18 size limit of my previous sets.
; 1
####
# ###
# #
# $ #
### ###
# $ $ #
#..@..#
# $ #
### ##
####
; 2
#####
# @####
# $. #
###$.# #
# $.# #
# #$. #
# ###
######
; 3
#####
# #
#### # #
# . .# #
# . #
# .## $##
## #$$ #
## $@#
## ###
####
; 4
#### ####
# ### #
# # $$ #
# $$ # #
# # ##
### $.# #
#..*.@.#
## ###
#####
; 5
###### ####
# ### #
# * * #
## #***# #
# *+* ##
## #*$*# ##
# # # # #
# #
# ########
####
; 6
########
## . . #
# *$# # #
#. #$# ##
##* # # #
# # * #
# $#@ .# #
# $ ###
## # #
########
; 7
####
# #
#$ #
# # ####
#### #### #
# .. .. #
# $*. *.$@##
# #$ $#$ #
##### # #
#########
; 8
####
# #
#$ #
# # ####
### #### #
# .. .. ###
# $*. *.$@ #
## #$ $#$ # #
# # # # #
# ###### #
## ##
##########
; 9
#######
# @ #
# ### ##
#### # # # #####
# ### # # . #
# . # # * $$ #
# * $$ # # *## ##
# *## ## # * #
# . # # *## #
# #### # . #
#### # ####
####
; 10
########
## ##
# .#### #
# . # #
# * $$ # #
# *## # #
# + # ##
# $### #
## ##
#######
; 11
#########
## ##
# .##### #
# . # #
# * $$ # #
# *## ## #
# * # ##
# *## # ##
# + # #
# $### #
## ##
#######
; 12
#######
# @ #
# $.$ #
##.$.##
## $ ##
# $.$ #
# .$. #
# .$. #
# # #
#######
; 13
#####
#### #
# $$# #
## *..$ #
#@ .#. #
# $..* ##
# #$$ #
# ####
#####
; 14
######
####### # ##
# ### ## ##
# # $.##$ # ##
# # *.@.* # #
## # $##.$ # #
## ## ### #
## # #######
######
; 15
#######
# ####
# # # . ##
# $$$**$$ #
#....@....#
# $$**$$$ #
## . # # #
#### #
#######
; 16
########
# # ##
##### # ####
# $ $$ $ $ #
#..........#
# $ $ $$ $ #
#### # #####
## @ # #
########
; 17
#####
# #
## # #
# * #
# # ##
####### # #
# # .$.$.####
# # $$.$$ ###
# *##..@..##* #
### $$.$$ # #
####.$.$. # #
# # #######
## # #
# * #
# # ##
# #
#####
; 18
#######
## ###
### .$###
# $$.$ #
# . . #
## $.$###
###$.$ #
# . . #
# .$$ #
###. ###
###@ ##
######
; 19
#######
###### ### #
### # # $$##.#
##### $ $ ### #$ ##.#
# $ $ # # .#
## # # $ # ### # ## #
# $ $ #### # ## #
# $#.*##$ # ## ###
#.*..... .# ######
# .#######
## @#
# #
####
; 20
###########
## ##
# ####### #
# # # #
# # ##### # #
## # $# ##
#### ## ### .$ #
# ###$ .....# #
# #$ $ $ # @ #
# ### #########
##### ####
; 21
##############
# # # ####
# #### # @ . #
# $..... # #$ #
##$##### # ##. #
# ### $ #
# ## $ ## ## #
## ### $ #####
# $ # #####
# ####
### #
####
; 22
#####
# ###
#### ##
### #.## ##
# $ $ $ $$@ #
# # ##.## #
## # # . #####
# # ...*. #
# $### # #
# $ ### ###
# # ##
###########
; 23
######
###### #
# $ $$ #
# $ ## #
# $## #$ #
# $ $$ # #
# .....#$ #
##@#.#$ $ #
#.....#$ #
#...**# #
# $ ##
#### ###
####
; 24
########
# #
###*####.#
# $ $ #
# #......###
# #$ # #
# #. #@# # #
# $$## #$# #
# $ $ #
# #########
####
; 25
#####
# #####
###### # ##
# ## * #### ##
### $ # ###
# #####$# $ # #
# $ $ # $$# # #
###.#..*......... ##
### $# # $ $ # #
# $ $## #### #### #
# # ## @ # ##
# ## ###### ####
## ##
##############
; 26
#####
## # #####
###### # $ # # ####
# ### #$#### # ##
# ## # # $$ ### #
# ### ##$ @ $ # #
# # . # $$ # $ $$ # #
#..# .## $# ## #
# . ##$ #### #
#..##.# # #######
# . # ##
#..# . ####
# ###.# #
#### # #
#####
; 27
####### ########
# # # ## #
#### ### # #####$ $##
# # ### # ## $ #
# # # # $ $$$## #
# # #####$ # ### #
### ##### ## # $# $ #
# # # #$ # #####
# # # ## ## # #
# # #### ## # $ $ #
##### ## ## # # #
# #### ##### ######
# # # # $$$ # ##
# # ## $ $ #
######## ############## # #
# @..................#
# # ##################
# #
#####
; 28
##### ####
# ############..#
# $# $ $ $ $ $ #
## $ # # # #$ ..#
# # . . . *.. #
### $####@## # ## ##
## ## # ## ####$ ###
# ..* . . . # #
#.. $# # # # $ ##
# $ $ $ $ $ #$ #
#..############ #
#### #####
; 29
#####
# #
## # #####
## * # #
### # ## # #####
### $$# * # #
# *#. $ # ## # #
# # *... $$# * #
# #$$ ....$ # #####
##### # $.+.. $$# #
# * #$$ ...* # #
# # ## # $ .#* #
# # * #$$ ###
##### # ## # ###
# # * ##
##### # ##
# #
#####
; 30
####
# #
# #
# #
########## #
# $ $ $$#
# @ $..*. #
# # *...$#
#####$...* #####
# .*..$# #
#$$ $ $ #
# ##########
# #
# #
# #
####
; 31
####
# #
# #
# #
############ #
# $ $.* $$#
# @ $..*.*. #
# # * $ .$#
#####*.$ *.#
#.* $.*#
#$. $ * #####
# .*.*..$# #
#$$ *.$ $ #
# ############
# #
# #
# #
####
; 32
#########
# # #
## # # # ##
# *.*$*.* #
# # #
### $@$ ###
# # #
# *.*$*.* #
## # # # ##
# # #
#########
; 33
#
# ######## #
# #
# *$.$.$* #
# *###* #
# $# #$ #
#.. .@. ..#
# $# #$ #
# *###* #
# *$.$.$* #
# #
# ######## #
#
; 34
#### # ####
## # # ##
# ##### #
# $. * .$ #
###.$.$.$.###
# .$ $. #
# #*$ @ $*# #
# .$ $. #
###.$.$.$.###
# $. * .$ #
# ##### #
## # # ##
#### # ####
; 35
###########
## # ##
# .$$. .$$. #
# $..$ $..$ #
# .$$...$$. #
# $..$ $..$ #
## $$.*.$$ ##
# $..$ $..$ #
# .$$...$$. #
# $..$ $..$ #
# .$$.@.$$. #
## # ##
###########
; 36
#############
# # #
# # # # # #
# .$.$.$. #
# #$.$.$.$# #
# .$.$.$. #
# #$.$@$.$# #
# .$.$.$. #
# #$.$.$.$# #
# .$.$.$. #
# # # # # # #
# # #
#############
; 37
############
# @ #
# # $ ## $ # #
# #.## ##.# #
# . ## . #
# $# #*##*# #$ #
# # * * # #
# # ## * ## # #
# # ## * ## # #
# # * * # #
# $# #*##*# #$ #
# . ## . #
# #.## ##.# #
# # $ ## $ # #
# #
############
; 38
##########
##### @ *#####
## $$ ##. . ##
# # ## # #
## # ## ## # ##
##. ## $##
#* # #*##*# # $ #
# . # * * # #
# ## ## * ## ## #
# ## ## * ## ## #
# # * * # . #
# $ # #*##*# # *#
##$ ## .##
## # ## ## # ##
# # ## # #
## . .## $$ ##
#####* #####
##########
; 39
#########
# #
###$#$ $#$###
# . . . . . #
###$#$#$ $#$#$###
# . . . . . . . #
# #$#$#$#$#$#$# #
# . . . . . . #
###$#$##@##$#$###
# . . . . . . #
# #$#$#$#$#$#$# #
# . . . . . . . #
###$#$#$ $#$#$###
# . . . . . #
###$#$ $#$###
# #
#########
; 40
###### ######
# ### #
# .$.$. # .$.$. #
# $.$.$ # $.$.$ #
# .$.$ ### $.$. #
# $.$.# .$.$ #
# .$ #$ $## $. #
## # $...$ # ##
#### .@. ####
## # $...$ # ##
# .$ ##$ $# $. #
# $.$. #.$.$ #
# .$.$ ### $.$. #
# $.$.$ # $.$.$ #
# .$.$. # .$.$. #
# ### #
###### ######
; 41
#####
# ## ######
# ## # ## #
# # # # # ### #
# # # ### # # #
# # $ # $ # #
# #$#*.#.*#$## #
## *.$ $.* ##
### .$ . $. ####
### .#. ###
#### .$ . $. ###
## *.$@$.* ##
# ##$#*.#.*#$# #
# # $ # $ # #
# # # ### # # #
# ### # # # # #
# ## # ## #
###### ## #
#####
; 42
##### #####
# # # #
### ##### ###
# .$.$. # $.$ #
### $.$.$ #.$.$.$.###
# $.$.$.$ $.$.$.$ #
# .$.$.$. .$.$.$. #
# $.$.$.$ $.$.$.$ #
### $.$.$ #.$.$.$.###
# .$.$. . $.$ #
### #.@.# ###
# $.$ . .$.$. #
###.$.$.$.# $.$.$ ###
# $.$.$.$ $.$.$.$ #
# .$.$.$. .$.$.$. #
# $.$.$.$ $.$.$.$ #
###.$.$.$.# $.$.$ ###
# $.$ # .$.$. #
### ##### ###
# # # #
##### #####
; 43
#####
## ##
##.$.$.##
##$.$.$##
# .$.$. #
# $.$.$ #
# .$.$. #
###### $.$.$ ######
### .$.$. ###
##.$.$.$.$.$.$.$.$.$.##
# $.$.$.$.$ $.$.$.$.$ #
# .$.$.$.$ @ $.$.$.$. #
# $.$.$.$.$ $.$.$.$.$ #
##.$.$.$.$.$.$.$.$.$.##
### .$.$. ###
###### $.$.$ ######
# .$.$. #
# $.$.$ #
# .$.$. #
##$.$.$##
##.$.$.##
## ##
#####
; 44
#
# #
## ##
# $ #
# $ $ #
## .$.$.$. ##
# .$.$.$.$. #
# .$.$.$.$.$. #
## .$.$.$.$.$.$. ##
# $.$.$. .$.$.$ #
# $.$.$. .$.$.$ #
# $ $.$. @ .$.$ $ #
# $.$.$. .$.$.$ #
# $.$.$. .$.$.$ #
## .$.$.$.$.$.$. ##
# .$.$.$.$.$. #
# .$.$.$.$. #
## .$.$.$. ##
# $ $ #
# $ #
## ##
# #
#
; 45
####
# ########
# . #
# ### $$ #
# $# # .$#
##### # . .#.######
# $. # # . $ #
# $.#.###$### $ #
# $ . #. .#####.##
# # ## *$$ # # #
# # . $ $@$ $ . # #
# # # $$* ## # #
##.#####. .# . $ #
# $ ###$###.#.$ #
# $ . # # .$ #
######.#. . # #####
#$. # #$ #
# $$ ### #
# . #
######## #
####
; 46
#####
# #####
# # # #####
# # # #
#####$# #$#
# $ $ ####$ #####
# # # # ## # #
# ##### # # $$ # #
### $ #@# # #
# ####.... # # ###
# # # .... # # #
# # # .... # # #
### # # ....#### #
# # # # $ ###
# # $$ # # ##### #
# # ## # # # #
##### $#### $ $ #
#$# #$#####
# # # #
##### # # #
##### #
#####
; 47
################ #######
# # # #
# $ $ $ $ ### ##### ### ##
# $ $ $ $ $ . # $ . ##
# $ $ ### #.#.# ### #.#.###
# $ $ $ . # . $ . # . #
## ### #.#.# ### #.#.# ### ##
# . # . $ # . $ $.$##
###.#.# ### # @ # ### #.#.###
##$.$ $ . # $ . # . #
## ### #.#.# ### #.#.# ### ##
# . # . $ . # . $ $ $ #
###.#.# ### #.#.# ### $ $ #
## . $ # . $ $ $ $ $ #
## ### ##### ### $ $ $ $ #
# # # #
####### ################
; 48
########################## #
## ##
# *.*.* *.*.* *.*.* *.*.* ###
# .$ $.$.$ $.$.$ $.$.$ $. .###
# * $ * * $ * * $ * * $ *# #
# .$ $.*.$ $.*.$ $.*.$ $.*.* #
# *.*.$ $.*.$ $.*.$ $.*.$ $. #
# $ * $ * * $ * * $ * * $ * #
# *.*.$ $.*.$ $.*.$ $.*.$ $. #
# .$ $.*.$ $.*+$ $.*.$ $.*.* #
# * $ * * $ * * $ * * $ * $ #
# .$ $.*.$ $.*.$ $.*.$ $.*.* #
# *.*.$ $.*.$ $.*.$ $.*.$ $. #
# #* $ * * $ * * $ * * $ * #
###. .$ $.$.$ $.$.$ $.$.$ $. #
### *.*.* *.*.* *.*.* *.*.* #
## ##
# ##########################
; 49
####################
# # # #
###$.$ $.$ $.$ $.$###
# $. .$$.#.$$. .$$.#.$ #
# .###.. # ..###.. # . #
# $. .$$.#.$$. .$$.#.$ #
# $.$ $.$ $.$ $.$ #
# $.$ $.$ $.$ $.$ #
# $.#.$$. .$$.#.$$. .$ #
##. # ..###.. # ..###.##
# $.#.$$. .$$.#.$$. .$ #
# $.$ $.$ $.$ $.$ #
# $.$ $.$ $.$ $.$ #
# $. .$$.#.$$. .$$.#.$ #
##.###.. # ..###.. # .##
# $. .$$.#.$$. .$$.#.$ #
# $.$ $.$ $.$ $.$ #
# $.$ $.$ $.$ $.$ #
# $.#.$$. .$$.#.$$. .$ #
# . # ..###.. # ..###. #
# $.#.$$. .$$.#.$$. .$ #
###$.$ $.$ $.$ $.$###
# # # @#
####################
; 50
#########################
## # # # ##
# # .$.$.$.$ $.$.$.$. # #
# .$.$.$.$.$.$.$.$.$. #
# .$.$.$.$.$.$.$.$.$.$. #
##.$.$.$.$.$.$.$.$.$.$.$.##
# $.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$. .$.$.$.$. #
# $.$.$.$.$ $ $.$.$.$.$ #
## $.$.$.$. $@$ .$.$.$.$ ##
# $.$.$.$.$ $ $.$.$.$.$ #
# .$.$.$.$. .$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$ #
# .$.$.$.$.$.$.$.$.$.$.$. #
# $.$.$.$.$.$.$.$.$.$.$.$ #
##.$.$.$.$.$.$.$.$.$.$.$.##
# .$.$.$.$.$.$.$.$.$.$. #
# .$.$.$.$.$.$.$.$.$. #
# # .$.$.$.$ $.$.$.$. # #
## # # # ##
#########################

1047
maps_suites/Sokevo_107.xsb Normal file

File diff suppressed because it is too large Load diff

1831
maps_suites/Sokhard_163.xsb Normal file

File diff suppressed because it is too large Load diff

30360
maps_suites/Sven_1623.xsb Normal file

File diff suppressed because it is too large Load diff

1670
maps_suites/XSokoban_90.xsb Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,609 @@
;Copyright: Yoshio Murase <yoshio@asahi.email.ne.jp>
;
;(Levels # 18 and # 36 are combination works by
;Yoshio Murase and Masato Hiramatsu.)
;
;Downloaded from http://sokomind.home.pages.de/
;The original levels can be found at
;http://www.ne.jp/asahi/ai/yoshio/sokoban/main.htm
;
;You are not allowed to use the level maps from this
;file in order to distribute them. If you would like
;to include Yoshio Murase's maps, you have to read
;and follow the terms and conditions at the above
;mentioned original URL.
;
;YM_M001.XSB
###################
# ... @ ... #
# $$$ ##### $$$ #
## ### ### ##
## # ## #
#### ####
;YM_M002.XSB
####
### ##
# $ #
# #.#@#
# #$ .#
# .$ #
## ##
#####
;YM_M003.XSB
#####
### #
# $ # ##
# $.$. #
# ##. #
# @ ###
######
;YM_M004.XSB
#####
### ###
# . $ . #
# #.$.# #
# $ # $ #
### @ ###
#####
;YM_M005.XSB
#####
# ###
###.# #
# $.$ # #
# #* $ #
#@ . ####
######
;YM_M006.XSB
#####
# ##
###$ ##
# .$.$ #
# #.#.# #
# *$* #
### ###
# @ #
#####
;YM_M007.XSB
#####
# #
### #$#
# .$.###
# #$+$ #
# .$ # #
### #. #
# ###
#####
;YM_M008.XSB
###########
#@$ ....##
# $$$$#....#
# $ $..***##
## # ##.. #
# $$$# ## #
# ## # ##
# $$ # #
# ### #
####### ####
;YM_M009.XSB
######
## ##
# ## #
# # # #
#. .#$##
# # * $ #
# # * $@#
# .. $ #
#########
;YM_M010.XSB
####
# ####
# ###
# #$ . #
## #.#$ #
# # @* #
# * ##
#### ##
####
;YM_M011.XSB
#####
### ##
# . * #
# .$.#@#
## # $ #
# $ # #
### #
#####
;YM_M012.XSB
#####
# #
#. $#
# $ #
####.. ##
# $ ** #
# . @$ #
#########
;YM_M013.XSB
#########
#... . #
#### #.#. #
### ......#
# $ $ $#..##
# $####..####
# $ ### ##
# $$$ $ $ $@ #
# $ $ $ $ $ #
## ##
############
;YM_M014.XSB
######
##### ###
# .##. ##
# .$## # #
##$$ # $ #
# . ##$#$ ##
# @ . . ##
###########
;YM_M015.XSB
#####
# #
#. $#
# $ #
##.. ##
# **$ #
# @ #
#######
;YM_M016.XSB
######
# #
# .* ###
# .$.$ #
## $ @#
#### #
####
;YM_M017.XSB
#####
#### #
#.##. $#
##$# $ #
# * .. ##
# #**$ #
##### @ #
######
;YM_M018.XSB
####
# ######
# $## @ ###
##. ## . #
# . $.$ #
# *$ #$#.###
### # #
########
;YM_M019.XSB
####
##@ ####
# $* * #
# * # #
# * #
# #*. #
# # #
########
;YM_M020.XSB
#####
## ##
# $..##
##$ #.$.#
# #...#
# $###$ #
# $ $ ##
##@ #
#######
;YM_M021.XSB
####
##### #
# $ . #
# *$ #
###..$ #
###@###
# $. ###
# $*. #
# . $ #
# #####
####
;YM_M022.XSB
#####
# ####
###$ $ #
# $ # #
# # .## ##
#.**.##$#
# @ . #
#########
;YM_M023.XSB
#########
# @ . #
# .#*$ #
# $. .$ #
##$.##$ #
# ## #
########
;YM_M024.XSB
#####
# @ #
### # ###
# $$#$$ #
# .. . #
## #.$##
# . #
#######
;YM_M025.XSB
#####
# ##
# *$ ##
#@ * ##
# .#$ #
## ...$##
### $* #
# #
######
;YM_M026.XSB
####
### ##
# .. ###
# *.* #
#@$$.$$ #
# ## #
#########
;YM_M027.XSB
########
# #
# $$#$ #
# $.* #
## ...##
##.$##
##... ##
# *.$ #
# $#$$ #
# @ #
########
;YM_M028.XSB
#####
### #
# $$.$#
# . . #
# # # #
# ..* ##
###@$$ #
# #
######
;YM_M029.XSB
######
# #
###$$ #
# $ #$ #
# $ # #
# $ @# ##
# $#.*. #
# $* #.#
## . #.#
###... #
# #
######
;YM_M030.XSB
#####
## @ ##
# .$. #
# * * #
#$ #.*#
## # ##
# $.$.$ #
# # #
#########
;YM_M031.XSB
####
# #
#. #
# $#
#. #
### $###
# .$ ##
# # $$ #
# .##. @#
## * $##
# . #
#######
;YM_M032.XSB
#####
### ###
# $..$ #
# # ## #
# # ##@##
# $..$#
### #$ #
# . .#
#$# .#
# $ #
### #
####
;YM_M033.XSB
####
#### ###
# $ $ #
#$..$ . ###
## #.##.. #
# ..$@$ $ #
# $ . #. ###
####$ $ #
# ####
####
;YM_M034.XSB
######
### ##
# $$$$ #
# *..* #
# $. $.#
## $#.$#.##
# $. $. #
# $$*$#.# #
# .... # #
####### @#
#####
;YM_M035.XSB
#####
# @ ##
###$$$ ###
# .# . #
# #.# .# #
# . #.# #
# *$$$ #
### # ###
## #
#####
;YM_M036.XSB
#####
## .@##
# * #
# $*$ #
#..#..#
##$ . $##
# $ # $ #
# # #
#########
;YM_M037.XSB
####
# ###
### $ ##
# $...$ #
# ##. # #
# .$.# #
# $#. $ #
## #$##@#
# #
########
;YM_M038.XSB
######
### . ###
# $.$$$ #
# # #. # #
# @. . # #
#### $ #
#$.####
# #
####
;YM_M039.XSB
#####
## @###
# ** #
# # # #
# #*$ #
# # #.#
# *$. #
### ##
#####
;YM_M040.XSB
#####
# ##
###$.@ #
# $. #
# # * ##
# ###
#####
;YM_M041.XSB
##########
# #
# ##$# # #
# .....# #
###$$$$$ #
# * .@*###
# $$$$$ #
# # ...## #
# .#. .# #
### #$# #
# #####
#####
;YM_M042.XSB
#######
# #
### ### #
# *$ .#
# * $#.#
## *@$ .#
#$$* . #
# # .###
# ## #
# #
######
;YM_M043.XSB
#####
## ###
# .... #
# #. # #
# $$$$ #
# $.@$###
# $$$$ #
##$..$# #
# .. # #
#.##. #
# ###
######
;YM_M044.XSB
####
#### #
# .$* ##
# $ #
# .# . #
# *#$@##
## #
######
;YM_M045.XSB
###
#.#
##$###
## * #
# * *##
# * * #
# ** #
# * ##
## @ ##
#####
;YM_M046.XSB
#####
## ######
# $ $ #
# #. #
##@#### ##
# #. ##
## # #$$ #
# ** # ..#
# *## $$#
## .. #
##### #
#####
;YM_M047.XSB
#####
# #
####.. #
# #
#******#
# #
# $$####
# @ #
#####
;YM_M048.XSB
#####
# #
###$# ###
# #.@ #
# *.# #
# # # #
###$# #
# ###
#####
;YM_M049.XSB
########
# * #
# * . #
# *** ##
# $ * #
## @ #
######
;YM_M050.XSB
#########
# . #
# ##$## #
# # * #
# # *@# #
# # $ # #
# # ### #
# . #
#########
;YM_M051.XSB
###########
# * #
#@# * . # #
# #*****# #
# # $ * # #
# * #
###### ###
####
;YM_M052.XSB
######
# #
# #
##$ ###
# $ #
#.***.#
# @ #
#######
;YM_M053.XSB
#####
## #
# # ###
# * $ #
#. * #@#
# * * #
## * ##
######
;YM_M054.XSB
#####
# @ #
### * ###
# ... #
# ##$## #
# $ $ #
### ###
# #
#####

View file

@ -0,0 +1,533 @@
;Copyright: Yoshio Murase <yoshio@asahi.email.ne.jp>
;
;Downloaded from http://sokomind.home.pages.de/
;The original levels can be found at
;http://www.ne.jp/asahi/ai/yoshio/sokoban/main.htm
;
;You are not allowed to use the level maps from this
;file in order to distribute them. If you would like
;to include Yoshio Murase's maps, you have to read
;and follow the terms and conditions at the above
;mentioned original URL.
;
;YM001.XSB
########
### . #
## * # #
## .$ #
## #$##
### @ ##
########
########
;YM002.XSB
########
## .@ #
## #.# #
## $ #
##.$$ ##
## ####
########
########
;YM003.XSB
########
#### @##
# *$ ##
# ##
## .####
##$ ####
## .####
########
;YM004.XSB
########
##.###.#
## # .#
## $$ @#
## $ #
## # #
## ####
########
;YM005.XSB
########
#### @##
#### #
#. #$$ #
# ##
#. $###
##. ###
########
;YM006.XSB
########
# ..####
# $ #
# #$# #
# @ .$ #
########
########
########
;YM007.XSB
########
### .##
# $ # ##
# *$ ##
# .#@ ##
# ###
# ####
########
;YM008.XSB
########
########
#. @.##
# $# ##
# # $. #
# $# #
#### #
########
;YM009.XSB
########
#. .####
#.#$$ ##
# @ ##
# $# ##
## ###
########
########
;YM010.XSB
########
#. ####
# # ##
# . # ##
# $*$ ##
##@ ####
## ####
########
;YM011.XSB
########
########
#. . #
# # # #
#@$ $.#
##### $#
##### #
########
;YM012.XSB
########
# #####
# #####
# .* #
##$ #
## #$###
##. @###
########
;YM013.XSB
########
## @ ###
## . #
#. $.$ #
##$# ###
## ###
########
########
;YM014.XSB
########
## ###
# $# ###
# . @###
# * ##
## #$ ##
##. ###
########
;YM015.XSB
########
########
## ####
#..$ .#
# #$ $ #
#@ # #
##### #
########
;YM016.XSB
########
## .@##
## $.#
####*# #
## #
# $ ##
# ####
########
;YM017.XSB
########
##@ ####
## ####
##. ####
# $$. .#
# $ ###
### ###
########
;YM018.XSB
########
########
##. ###
## # ###
## *$ #
## $. #
## @###
########
;YM019.XSB
########
########
### ##
### #.##
### .##
#@ $$ ##
# .$ ##
########
;YM020.XSB
########
# @###
# $# ###
# * $ #
# ## #
##. . #
### ##
########
;YM021.XSB
########
## @##
## # #
##. $ #
## $$#.#
#### .#
########
########
;YM022.XSB
########
########
###. ###
# . ###
# $$ #
## . $@#
########
########
;YM023.XSB
########
##@. ##
# $$* ##
# # ##
# # .#
#### # #
#### #
########
;YM024.XSB
########
##### #
#####$.#
### . #
### #.#
# $ $ #
# #@ #
########
;YM025.XSB
########
# .####
# $.. ##
# ##$##
## # #
##$ @#
## ####
########
;YM026.XSB
########
### ###
### ###
### .. #
# $# #
# .$$ #
#### @ #
########
;YM027.XSB
########
# ####
# # *@##
# * #
###$ #
### .#
########
########
;YM028.XSB
########
### . #
# $@#. #
# $# ##
# * ##
## # ##
### ##
########
;YM029.XSB
########
########
########
## ####
# ##
# #$$@#
# . *.#
########
;YM030.XSB
########
##@ #
#. # #
# $$$.##
# .# ##
# #####
########
########
;YM031.XSB
########
# #
# # ##*#
# #@ $ #
#.$ . #
##### #
##### #
########
;YM032.XSB
########
##@ ##
###$ #
### . #
# $ #$##
# . .##
#### ##
########
;YM033.XSB
########
# ####
# $ ##
##$$ .##
##@ . ##
### # ##
### .##
########
;YM034.XSB
########
# ####
# $$ #
# .#. #
# ## ##
# ##$##
# @ .##
########
;YM035.XSB
########
########
########
# . ###
# .# ###
# @$$ #
# $. #
########
;YM036.XSB
########
# @.# #
# .$ . #
# #$ #
# $ ##
### ###
### ###
########
;YM037.XSB
########
## . #
# $ $@#
#.$.####
# #####
# #####
# #####
########
;YM038.XSB
########
# . ###
# #@###
# $ ###
##$# ##
# # ##
#. * ##
########
;YM039.XSB
########
########
#### . #
# *@ . #
# $ # #
# # $ #
# ####
########
;YM040.XSB
########
########
########
### ###
# .. $.#
# $$ @#
#### #
########
;YM041.XSB
########
########
#####@ #
##### .#
# $ $ $#
# . #
### . #
########
;YM042.XSB
########
# # #
# #.$ $#
# $ #
#####. #
### @#
### .#
########
;YM043.XSB
########
####@ ##
### ..#
## $#$##
# $. #
# # #
# ###
########
;YM044.XSB
########
# @###
# $$####
# $ . #
## #.# #
#. # #
# #
########
;YM045.XSB
########
#### ##
#### $##
# @$. #
# ## #
# ## #
# * .#
########
;YM046.XSB
########
#### @ #
#### #
## $ $##
## $ ##
#. # ##
#.. ##
########
;YM047.XSB
########
########
####. @#
# .$ #
# # ###
# $ $ .#
#### #
########
;YM048.XSB
########
########
# .# @#
# # $ #
# $.#$ #
## . #
## ####
########
;YM049.XSB
########
########
## #
##.## .#
##* $@#
## #$ #
## # #
########
;ym050.xsb
########
#. #####
# $#####
# #####
# .$ @ #
# .$ # #
### #
########
;YM051.XSB
########
# #
# #$ #
# $ @#.#
##$#. #
## .#
########
########
;YM052.XSB
########
# . ###
# ###
# #$$. #
#. ## #
#@$ ## #
### #
########

925
sokoban.supp Normal file
View file

@ -0,0 +1,925 @@
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:strdup
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:strdup
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_first_db
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_home_terminfo
fun:_nc_first_db
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_tparm_analyze
obj:/usr/lib/libncursesw.so.6.2
fun:tparm
fun:_nc_mvcur_init_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:make_map
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:make_map
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_add_to_try
fun:_nc_init_keytry
fun:_nc_keypad
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_first_db
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:make_map
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:make_map
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:realloc
fun:_nc_doalloc
fun:_nc_read_termtype
obj:/usr/lib/libncursesw.so.6.2
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_first_db
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:realloc
fun:_nc_doalloc
obj:/usr/lib/libncursesw.so.6.2
fun:tparm
fun:_nc_mvcur_init_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_scroll_optimize_sp
fun:doupdate_sp
fun:wrefresh
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:realloc
fun:_nc_doalloc
fun:_nc_read_termtype
obj:/usr/lib/libncursesw.so.6.2
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_read_termtype
obj:/usr/lib/libncursesw.so.6.2
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_read_termtype
obj:/usr/lib/libncursesw.so.6.2
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_makenew_sp
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_makenew_sp
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_makenew_sp
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_hash_map_sp
fun:_nc_scroll_optimize_sp
fun:doupdate_sp
fun:wrefresh
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_hash_map_sp
fun:_nc_scroll_optimize_sp
fun:doupdate_sp
fun:wrefresh
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_add_to_try
fun:_nc_init_keytry
fun:_nc_keypad
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_makenew_sp
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_makenew_sp
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_makenew_sp
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_add_to_try
fun:_nc_init_keytry
fun:_nc_keypad
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_read_termtype
obj:/usr/lib/libncursesw.so.6.2
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:new_prescr
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_add_to_try
fun:_nc_init_keytry
fun:_nc_keypad
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_hash_map_sp
fun:_nc_scroll_optimize_sp
fun:doupdate_sp
fun:wrefresh
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:realloc
fun:_nc_doalloc
fun:_nc_read_termtype
obj:/usr/lib/libncursesw.so.6.2
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_read_entry2
fun:_nc_setup_tinfo
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
obj:/usr/lib/libncursesw.so.6.2
fun:_nc_setupterm
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_init_wacs
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_printf_string_sp
fun:vw_printw
fun:mvprintw
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:read_map
fun:open_map
fun:make_map
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:newwin_sp
fun:_nc_setupscreen_sp
fun:newterm_sp
fun:newterm
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:runtime.adjustframe
fun:runtime.gentraceback
fun:runtime.copystack
fun:runtime.newstack
fun:runtime.morestack
fun:runtime.rt0_go
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:runtime.adjustframe
fun:runtime.gentraceback
fun:runtime.copystack
fun:runtime.newstack
fun:runtime.morestack
fun:runtime.rt0_go
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:runtime.adjustpointer
fun:runtime.adjustframe
fun:runtime.gentraceback
fun:runtime.copystack
fun:runtime.newstack
fun:runtime.morestack
fun:runtime.rt0_go
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:runtime.adjustpointer
fun:runtime.adjustframe
fun:runtime.gentraceback
fun:runtime.copystack
fun:runtime.newstack
fun:runtime.morestack
fun:runtime.rt0_go
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:x_cgo_sys_thread_create
fun:_rt0_amd64_lib
fun:call_init
fun:_dl_init
obj:/usr/lib/ld-2.33.so
obj:*
obj:*
obj:*
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall
obj:*
fun:runtime.newm
fun:runtime.main.func1
fun:runtime.systemstack
obj:/mnt/share/ed/libX11.so
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall
obj:*
fun:runtime.newm
fun:runtime.startm
fun:runtime.newproc1
fun:runtime.newproc.func1
fun:runtime.systemstack
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall
obj:*
fun:runtime.newm
fun:runtime.startm
fun:runtime.handoffp
fun:runtime.stoplockedm
fun:runtime.schedule
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall
obj:*
fun:runtime.malg.func1
fun:runtime.systemstack
obj:/mnt/share/ed/libX11.so
fun:runtime.rt0_go
}
{
<edstem-suppression>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:x_cgo_sys_thread_create
fun:_rt0_amd64_lib
fun:call_init
fun:_dl_init
obj:/usr/lib/ld-2.33.so
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:runtime.adjustframe
fun:runtime.gentraceback
fun:runtime.copystack
fun:runtime.newstack
fun:runtime.morestack.abi0
fun:runtime.newproc.abi0
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:runtime.adjustpointer
fun:runtime.adjustframe
fun:runtime.gentraceback
fun:runtime.copystack
fun:runtime.newstack
fun:runtime.morestack.abi0
fun:runtime.newproc.abi0
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:runtime.adjustpointer
fun:runtime.adjustframe
fun:runtime.gentraceback
fun:runtime.copystack
fun:runtime.newstack
fun:runtime.morestack.abi0
fun:runtime.newproc.abi0
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:x_cgo_sys_thread_create
fun:_rt0_amd64_lib
obj:*
fun:call_init
fun:_dl_init
obj:/usr/lib/ld-2.33.so
obj:*
obj:*
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall.abi0
obj:*
fun:runtime.newm
fun:runtime.main.func1
fun:runtime.systemstack.abi0
fun:runtime.newproc.abi0
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall.abi0
fun:runtime.newobject
obj:*
fun:runtime.newm
fun:runtime.startm
fun:runtime.wakep
fun:runtime.newproc.func1
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall.abi0
fun:runtime.newobject
obj:*
fun:runtime.newm
fun:runtime.startm
fun:runtime.handoffp
fun:runtime.stoplockedm
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:_dl_allocate_tls
fun:pthread_create@@GLIBC_2.2.5
fun:_cgo_try_pthread_create
fun:_cgo_sys_thread_start
fun:runtime.asmcgocall.abi0
obj:*
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_makenew_sp
fun:newwin_sp
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_scroll_optimize_sp
fun:doupdate_sp
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_hash_map_sp
fun:_nc_scroll_optimize_sp
fun:doupdate_sp
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_hash_map_sp
fun:_nc_scroll_optimize_sp
fun:doupdate_sp
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:_nc_makenew_sp
fun:newwin_sp
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:_nc_hash_map_sp
fun:_nc_scroll_optimize_sp
fun:doupdate_sp
fun:play
fun:main
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
fun:newwin_sp
fun:play
fun:main
}

284
src/ai/ai.c Normal file
View file

@ -0,0 +1,284 @@
#include <time.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>
#include "ai.h"
#include "utils.h"
#include "hashtable.h"
#include "priority_queue.h"
/**
* Retrieve solution and return a string containing the squence of moves
*/
char* save_solution( node_t* solution_node ){
node_t* n = solution_node;
char *solution_string = malloc(sizeof(char) * solution_node->depth+1);
solution_string[n->depth] = '\0';
while (n->parent != NULL)
{
switch (n->move) {
case up:
if (n->parent->state.map[n->state.player_y][n->state.player_x] == '$')
solution_string[n->depth-1] = 'U';
else
solution_string[n->depth-1] = 'u';
break;
case down:
if (n->parent->state.map[n->state.player_y][n->state.player_x] == '$')
solution_string[n->depth-1] = 'D';
else
solution_string[n->depth-1] = 'd';
break;
case left:
if (n->parent->state.map[n->state.player_y][n->state.player_x] == '$')
solution_string[n->depth-1] = 'L';
else
solution_string[n->depth-1] = 'l';
break;
case right:
if (n->parent->state.map[n->state.player_y][n->state.player_x] == '$')
solution_string[n->depth-1] = 'R';
else
solution_string[n->depth-1] = 'r';
break;
}
n = n->parent;
}
return solution_string;
}
/**
* Copy a src into a dst state
*/
void copy_state(sokoban_t* init_data, state_t* dst, state_t* src){
dst->map = malloc(sizeof(char *) * init_data->lines);
for ( int i = 0; i < init_data->lines; ++i ){
int width = strlen(src->map[i]) + 1;
dst->map[i] = malloc(width);
memcpy(dst->map[i], src->map[i], width);
}
dst->player_x = src->player_x;
dst->player_y = src->player_y;
}
/**
* Create the initial node
*/
node_t* create_init_node( sokoban_t* init_data ){
node_t * new_n = (node_t *) malloc(sizeof(node_t));
new_n->parent = NULL;
new_n->priority = 0;
new_n->depth = 0;
new_n->num_childs = 0;
new_n->move = -1;
new_n->state.map = malloc(sizeof(char *) * init_data->lines);
for (int i = 0; i < init_data->lines; ++i)
{
int width = strlen(init_data->map[i]) + 1;
new_n->state.map[i] = malloc(width);
memcpy(new_n->state.map[i], init_data->map[i], width);
}
new_n->state.player_x = init_data->player_x;
new_n->state.player_y = init_data->player_y;
return new_n;
}
/**
* Create the a node from a parent node
*/
node_t* create_node( sokoban_t* init_data, node_t* parent ){
node_t * new_n = (node_t *) malloc(sizeof(node_t));
new_n->parent = parent;
new_n->depth = parent->depth + 1;
copy_state(init_data, &(new_n->state), &(parent->state));
return new_n;
}
/**
* Apply an action to node n, create a new node resulting from
* executing the action, and return if the player moved
*/
bool applyAction(sokoban_t* init_data, node_t* n, node_t** new_node, move_t action ){
bool player_moved = false;
*new_node = create_node( init_data, n );
(*new_node)->move = action;
(*new_node)->priority = -(*new_node)->depth;
player_moved = execute_move_t( init_data, &((*new_node)->state), action );
return player_moved;
}
/**
* Book keeping variable and function to free memory once the solver finishes
*/
node_t** expanded_nodes_table;
unsigned expanded_nodes_table_size = 10000000; //10M
void update_explore_table(node_t* n, unsigned expanded_nodes ){
if( expanded_nodes > expanded_nodes_table_size - 1){
expanded_nodes_table_size *= 2;
expanded_nodes_table = realloc( expanded_nodes_table, sizeof(node_t*) * expanded_nodes_table_size );
}
expanded_nodes_table[ expanded_nodes ] = n;
}
void free_memory(unsigned expanded_nodes ){
for( unsigned i = 0; i < expanded_nodes; i++){
free(expanded_nodes_table[ i ]);
}
free(expanded_nodes_table);
}
/**
* Given a 2D map, returns a 1D map
*/
void flatten_map( sokoban_t* init_data, char **dst_map, char **src_map){
int current_i = 0;
for (int i = 0; i < init_data->lines; ++i)
{
int width = strlen(src_map[i]);
for ( int j = 0; j < width; j++ ){
(*dst_map)[current_i] = src_map[i][j];
current_i++;
}
}
}
/**
* Find a solution by exploring all possible paths
*/
void find_solution(sokoban_t* init_data, bool show_solution)
{
// Keep track of solving time
clock_t start = clock();
// Solution String containing the sequence of moves
char* solution = NULL;
HashTable hashTable;
struct heap pq;
// Statistics
unsigned generated_nodes = 0;
unsigned expanded_nodes = 0;
unsigned duplicated_nodes = 0;
int max_depth = 0;
unsigned solution_size = 0;
// Choose initial capacity of PRIME NUMBER
// Specify the size of the keys and values you want to store once
// The Hash Table only accept a 1D key and value.
ht_setup( &hashTable, sizeof(int8_t) * init_data->num_chars_map, sizeof(int8_t) * init_data->num_chars_map, 16769023);
// Data structure to create a 1D representation of the map
// Needed to interact with the hash table
char* flat_map = calloc( init_data->num_chars_map, sizeof(char));
// Initialize heap
heap_init(&pq);
// Initialize expanded nodes table.
// This table will be used to free your memory once a solution is found
expanded_nodes_table = (node_t**) malloc( sizeof(node_t*) * expanded_nodes_table_size );
// Add the initial node
node_t* n = create_init_node( init_data );
// Use the max heap API provided in priority_queue.h
heap_push(&pq,n);
/**
* FILL IN THE GRAPH ALGORITHM
* */
//----------------------------
// Free Memory of HashTable, Explored and flatmap
ht_clear(&hashTable);
ht_destroy(&hashTable);
free_memory(expanded_nodes);
free(flat_map);
//----------------------------
// Stop clock
clock_t end = clock();
double cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
// Show Soltion
if( show_solution && solution != NULL ) play_solution( *init_data, solution);
endwin();
if( solution != NULL ){
printf("\nSOLUTION: \n");
printf( "%s\n\n", solution);
FILE *fptr = fopen("solution.txt", "w");
if (fptr == NULL)
{
printf("Could not open file");
return ;
}
fprintf(fptr,"%s\n", solution);
fclose(fptr);
free(solution);
}
printf("STATS: \n");
printf("\tExpanded nodes: %'d\n\tGenerated nodes: %'d\n\tDuplicated nodes: %'d\n", expanded_nodes, generated_nodes, duplicated_nodes);
printf("\tSolution Length: %d\n", solution_size);
printf("\tExpanded/seconds: %d\n", (int)(expanded_nodes/cpu_time_used) );
printf("\tTime (seconds): %f\n", cpu_time_used );
}
void solve(char const *path, bool show_solution)
{
/**
* Load Map
*/
sokoban_t sokoban = make_map(path, sokoban);
/**
* Count number of boxes and Storage locations
*/
map_check(sokoban);
/**
* Locate player x,y position
*/
sokoban = find_player(sokoban);
sokoban.base_path = path;
find_solution(&sokoban, show_solution);
}

11
src/ai/ai.h Normal file
View file

@ -0,0 +1,11 @@
#ifndef __AI__
#define __AI__
#include <stdint.h>
#include <unistd.h>
#include "node.h"
#include "priority_queue.h"
void solve(char const *path, bool show_solution);
#endif

443
src/ai/hashtable.c Normal file
View file

@ -0,0 +1,443 @@
/**
* Original source: https://github.com/goldsborough/hashtable
*/
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "hashtable.h"
int ht_setup(HashTable* table,
size_t key_size,
size_t value_size,
size_t capacity) {
assert(table != NULL);
if (table == NULL) return HT_ERROR;
if (capacity < HT_MINIMUM_CAPACITY) {
capacity = HT_MINIMUM_CAPACITY;
}
if (_ht_allocate(table, capacity) == HT_ERROR) {
return HT_ERROR;
}
table->key_size = key_size;
table->value_size = value_size;
table->hash = _ht_default_hash;
table->compare = _ht_default_compare;
table->size = 0;
return HT_SUCCESS;
}
int ht_copy(HashTable* first, HashTable* second) {
size_t chain;
HTNode* node;
assert(first != NULL);
assert(ht_is_initialized(second));
if (first == NULL) return HT_ERROR;
if (!ht_is_initialized(second)) return HT_ERROR;
if (_ht_allocate(first, second->capacity) == HT_ERROR) {
return HT_ERROR;
}
first->key_size = second->key_size;
first->value_size = second->value_size;
first->hash = second->hash;
first->compare = second->compare;
first->size = second->size;
for (chain = 0; chain < second->capacity; ++chain) {
for (node = second->nodes[chain]; node; node = node->next) {
if (_ht_push_front(first, chain, node->key, node->value) == HT_ERROR) {
return HT_ERROR;
}
}
}
return HT_SUCCESS;
}
int ht_move(HashTable* first, HashTable* second) {
assert(first != NULL);
assert(ht_is_initialized(second));
if (first == NULL) return HT_ERROR;
if (!ht_is_initialized(second)) return HT_ERROR;
*first = *second;
second->nodes = NULL;
return HT_SUCCESS;
}
int ht_swap(HashTable* first, HashTable* second) {
assert(ht_is_initialized(first));
assert(ht_is_initialized(second));
if (!ht_is_initialized(first)) return HT_ERROR;
if (!ht_is_initialized(second)) return HT_ERROR;
_ht_int_swap(&first->key_size, &second->key_size);
_ht_int_swap(&first->value_size, &second->value_size);
_ht_int_swap(&first->size, &second->size);
_ht_pointer_swap((void**)&first->hash, (void**)&second->hash);
_ht_pointer_swap((void**)&first->compare, (void**)&second->compare);
_ht_pointer_swap((void**)&first->nodes, (void**)&second->nodes);
return HT_SUCCESS;
}
int ht_destroy(HashTable* table) {
HTNode* node;
HTNode* next;
size_t chain;
assert(ht_is_initialized(table));
if (!ht_is_initialized(table)) return HT_ERROR;
for (chain = 0; chain < table->capacity; ++chain) {
node = table->nodes[chain];
while (node) {
next = node->next;
_ht_destroy_node(node);
node = next;
}
}
free(table->nodes);
return HT_SUCCESS;
}
int ht_insert(HashTable* table, void* key, void* value) {
size_t index;
HTNode* node;
assert(ht_is_initialized(table));
assert(key != NULL);
if (!ht_is_initialized(table)) return HT_ERROR;
if (key == NULL) return HT_ERROR;
if (_ht_should_grow(table)) {
_ht_adjust_capacity(table);
}
index = _ht_hash(table, key);
for (node = table->nodes[index]; node; node = node->next) {
if (_ht_equal(table, key, node->key)) {
memcpy(node->value, value, table->value_size);
return HT_UPDATED;
}
}
if (_ht_push_front(table, index, key, value) == HT_ERROR) {
return HT_ERROR;
}
++table->size;
return HT_INSERTED;
}
int ht_contains(HashTable* table, void* key) {
size_t index;
HTNode* node;
assert(ht_is_initialized(table));
assert(key != NULL);
if (!ht_is_initialized(table)) return HT_ERROR;
if (key == NULL) return HT_ERROR;
index = _ht_hash(table, key);
for (node = table->nodes[index]; node; node = node->next) {
if (_ht_equal(table, key, node->key)) {
return HT_FOUND;
}
}
return HT_NOT_FOUND;
}
void* ht_lookup(HashTable* table, void* key) {
HTNode* node;
size_t index;
assert(table != NULL);
assert(key != NULL);
if (table == NULL) return NULL;
if (key == NULL) return NULL;
index = _ht_hash(table, key);
for (node = table->nodes[index]; node; node = node->next) {
if (_ht_equal(table, key, node->key)) {
return node->value;
}
}
return NULL;
}
const void* ht_const_lookup(const HashTable* table, void* key) {
const HTNode* node;
size_t index;
assert(table != NULL);
assert(key != NULL);
if (table == NULL) return NULL;
if (key == NULL) return NULL;
index = _ht_hash(table, key);
for (node = table->nodes[index]; node; node = node->next) {
if (_ht_equal(table, key, node->key)) {
return node->value;
}
}
return NULL;
}
int ht_erase(HashTable* table, void* key) {
HTNode* node;
HTNode* previous;
size_t index;
assert(table != NULL);
assert(key != NULL);
if (table == NULL) return HT_ERROR;
if (key == NULL) return HT_ERROR;
index = _ht_hash(table, key);
node = table->nodes[index];
for (previous = NULL; node; previous = node, node = node->next) {
if (_ht_equal(table, key, node->key)) {
if (previous) {
previous->next = node->next;
} else {
table->nodes[index] = node->next;
}
_ht_destroy_node(node);
--table->size;
if (_ht_should_shrink(table)) {
if (_ht_adjust_capacity(table) == HT_ERROR) {
return HT_ERROR;
}
}
return HT_SUCCESS;
}
}
return HT_NOT_FOUND;
}
int ht_clear(HashTable* table) {
assert(table != NULL);
assert(table->nodes != NULL);
if (table == NULL) return HT_ERROR;
if (table->nodes == NULL) return HT_ERROR;
ht_destroy(table);
_ht_allocate(table, HT_MINIMUM_CAPACITY);
table->size = 0;
return HT_SUCCESS;
}
int ht_is_empty(HashTable* table) {
assert(table != NULL);
if (table == NULL) return HT_ERROR;
return table->size == 0;
}
bool ht_is_initialized(HashTable* table) {
return table != NULL && table->nodes != NULL;
}
int ht_reserve(HashTable* table, size_t minimum_capacity) {
assert(ht_is_initialized(table));
if (!ht_is_initialized(table)) return HT_ERROR;
/*
* We expect the "minimum capacity" to be in elements, not in array indices.
* This encapsulates the design.
*/
if (minimum_capacity > table->threshold) {
return _ht_resize(table, minimum_capacity / HT_LOAD_FACTOR);
}
return HT_SUCCESS;
}
/****************** PRIVATE ******************/
void _ht_int_swap(size_t* first, size_t* second) {
size_t temp = *first;
*first = *second;
*second = temp;
}
void _ht_pointer_swap(void** first, void** second) {
void* temp = *first;
*first = *second;
*second = temp;
}
int _ht_default_compare(void* first_key, void* second_key, size_t key_size) {
return memcmp(first_key, second_key, key_size);
}
size_t _ht_default_hash(void* raw_key, size_t key_size) {
// djb2 string hashing algorithm
// sstp://www.cse.yorku.ca/~oz/hash.ssml
size_t byte;
size_t hash = 5381;
char* key = raw_key;
for (byte = 0; byte < key_size; ++byte) {
// (hash << 5) + hash = hash * 33
hash = ((hash << 5) + hash) ^ key[byte];
}
return hash;
}
size_t _ht_hash(const HashTable* table, void* key) {
#ifdef HT_USING_POWER_OF_TWO
return table->hash(key, table->key_size) & table->capacity;
#else
return table->hash(key, table->key_size) % table->capacity;
#endif
}
bool _ht_equal(const HashTable* table, void* first_key, void* second_key) {
return table->compare(first_key, second_key, table->key_size) == 0;
}
bool _ht_should_grow(HashTable* table) {
assert(table->size <= table->capacity);
return table->size == table->capacity;
}
bool _ht_should_shrink(HashTable* table) {
assert(table->size <= table->capacity);
return table->size == table->capacity * HT_SHRINK_THRESHOLD;
}
HTNode*
_ht_create_node(HashTable* table, void* key, void* value, HTNode* next) {
HTNode* node;
assert(table != NULL);
assert(key != NULL);
assert(value != NULL);
if ((node = malloc(sizeof *node)) == NULL) {
return NULL;
}
if ((node->key = malloc(table->key_size)) == NULL) {
return NULL;
}
if ((node->value = malloc(table->value_size)) == NULL) {
return NULL;
}
memcpy(node->key, key, table->key_size);
memcpy(node->value, value, table->value_size);
node->next = next;
return node;
}
int _ht_push_front(HashTable* table, size_t index, void* key, void* value) {
table->nodes[index] = _ht_create_node(table, key, value, table->nodes[index]);
return table->nodes[index] == NULL ? HT_ERROR : HT_SUCCESS;
}
void _ht_destroy_node(HTNode* node) {
assert(node != NULL);
free(node->key);
free(node->value);
free(node);
}
int _ht_adjust_capacity(HashTable* table) {
return _ht_resize(table, table->size * HT_GROWTH_FACTOR);
}
int _ht_allocate(HashTable* table, size_t capacity) {
if ((table->nodes = malloc(capacity * sizeof(HTNode*))) == NULL) {
return HT_ERROR;
}
memset(table->nodes, 0, capacity * sizeof(HTNode*));
table->capacity = capacity;
table->threshold = capacity * HT_LOAD_FACTOR;
return HT_SUCCESS;
}
int _ht_resize(HashTable* table, size_t new_capacity) {
HTNode** old;
size_t old_capacity;
if (new_capacity < HT_MINIMUM_CAPACITY) {
if (table->capacity > HT_MINIMUM_CAPACITY) {
new_capacity = HT_MINIMUM_CAPACITY;
} else {
/* NO-OP */
return HT_SUCCESS;
}
}
old = table->nodes;
old_capacity = table->capacity;
if (_ht_allocate(table, new_capacity) == HT_ERROR) {
return HT_ERROR;
}
_ht_rehash(table, old, old_capacity);
free(old);
return HT_SUCCESS;
}
void _ht_rehash(HashTable* table, HTNode** old, size_t old_capacity) {
HTNode* node;
HTNode* next;
size_t new_index;
size_t chain;
for (chain = 0; chain < old_capacity; ++chain) {
for (node = old[chain]; node;) {
next = node->next;
new_index = _ht_hash(table, node->key);
node->next = table->nodes[new_index];
table->nodes[new_index] = node;
node = next;
}
}
}

113
src/ai/hashtable.h Normal file
View file

@ -0,0 +1,113 @@
#ifndef HASHTABLE_H
#define HASHTABLE_H
/**
* Original source: https://github.com/goldsborough/hashtable
*/
#include <stdbool.h>
#include <stddef.h>
/****************** DEFINTIIONS ******************/
#define HT_MINIMUM_CAPACITY 8
#define HT_LOAD_FACTOR 5
#define HT_MINIMUM_THRESHOLD (HT_MINIMUM_CAPACITY) * (HT_LOAD_FACTOR)
#define HT_GROWTH_FACTOR 2
#define HT_SHRINK_THRESHOLD (1 / 4)
#define HT_ERROR -1
#define HT_SUCCESS 0
#define HT_UPDATED 1
#define HT_INSERTED 0
#define HT_NOT_FOUND 0
#define HT_FOUND 01
#define HT_INITIALIZER {0, 0, 0, 0, 0, NULL, NULL, NULL};
typedef int (*comparison_t)(void*, void*, size_t);
typedef size_t (*hash_t)(void*, size_t);
/****************** STRUCTURES ******************/
typedef struct HTNode {
struct HTNode* next;
void* key;
void* value;
} HTNode;
typedef struct HashTable {
size_t size;
size_t threshold;
size_t capacity;
size_t key_size;
size_t value_size;
comparison_t compare;
hash_t hash;
HTNode** nodes;
} HashTable;
/****************** INTERFACE ******************/
/* Setup */
int ht_setup(HashTable* table,
size_t key_size,
size_t value_size,
size_t capacity);
int ht_copy(HashTable* first, HashTable* second);
int ht_move(HashTable* first, HashTable* second);
int ht_swap(HashTable* first, HashTable* second);
/* Destructor */
int ht_destroy(HashTable* table);
int ht_insert(HashTable* table, void* key, void* value);
int ht_contains(HashTable* table, void* key);
void* ht_lookup(HashTable* table, void* key);
const void* ht_const_lookup(const HashTable* table, void* key);
#define HT_LOOKUP_AS(type, table_pointer, key_pointer) \
(*(type*)ht_lookup((table_pointer), (key_pointer)))
int ht_erase(HashTable* table, void* key);
int ht_clear(HashTable* table);
int ht_is_empty(HashTable* table);
bool ht_is_initialized(HashTable* table);
int ht_reserve(HashTable* table, size_t minimum_capacity);
/****************** PRIVATE ******************/
void _ht_int_swap(size_t* first, size_t* second);
void _ht_pointer_swap(void** first, void** second);
size_t _ht_default_hash(void* key, size_t key_size);
int _ht_default_compare(void* first_key, void* second_key, size_t key_size);
size_t _ht_hash(const HashTable* table, void* key);
bool _ht_equal(const HashTable* table, void* first_key, void* second_key);
bool _ht_should_grow(HashTable* table);
bool _ht_should_shrink(HashTable* table);
HTNode* _ht_create_node(HashTable* table, void* key, void* value, HTNode* next);
int _ht_push_front(HashTable* table, size_t index, void* key, void* value);
void _ht_destroy_node(HTNode* node);
int _ht_adjust_capacity(HashTable* table);
int _ht_allocate(HashTable* table, size_t capacity);
int _ht_resize(HashTable* table, size_t new_capacity);
void _ht_rehash(HashTable* table, HTNode** old, size_t old_capacity);
#endif /* HASHTABLE_H */

23
src/ai/node.h Normal file
View file

@ -0,0 +1,23 @@
#ifndef __NODE__
#define __NODE__
#include "utils.h"
/**
* Data structure containing the node information
*/
struct node_s{
int priority;
int depth;
int num_childs;
move_t move;
state_t state;
struct node_s* parent;
};
typedef struct node_s node_t;
#endif

107
src/ai/priority_queue.c Normal file
View file

@ -0,0 +1,107 @@
#include "priority_queue.h"
int *heap, size, count;
void heap_init(struct heap* h)
{
h->count = 0;
h->size = initial_size;
h->heaparr = (node_t **) malloc(sizeof(node_t*) * initial_size);
for(int i = 0; i < initial_size; i++)
h->heaparr[i]=NULL;
if(!h->heaparr) {
printf("Error allocatinga memory...\n");
exit(-1);
}
}
void max_heapify(node_t** data, int loc, int count) {
int left, right, largest;
node_t* temp;
left = 2*(loc) + 1;
right = left + 1;
largest = loc;
if (left <= count && data[left]->priority > data[largest]->priority) {
largest = left;
}
if (right <= count && data[right]->priority > data[largest]->priority) {
largest = right;
}
if(largest != loc) {
temp = data[loc];
data[loc] = data[largest];
data[largest] = temp;
max_heapify(data, largest, count);
}
}
void heap_push(struct heap* h, node_t* value)
{
int index, parent;
// Resize the heap if it is too small to hold all the data
if (h->count == h->size)
{
h->size += 1;
h->heaparr = realloc(h->heaparr, sizeof(node_t) * h->size);
if (!h->heaparr) exit(-1); // Exit if the memory allocation fails
}
index = h->count++; // First insert at last of array
// Find out where to put the element and put it
for(;index; index = parent)
{
parent = (index - 1) / 2;
if (h->heaparr[parent]->priority >= value->priority) break;
h->heaparr[index] = h->heaparr[parent];
}
h->heaparr[index] = value;
}
void heap_display(struct heap* h, sokoban_t* init_data) {
int i;
for(i=0; i<h->count; ++i) {
node_t* n = h->heaparr[i];
printf("priority = %d", n->priority);
printf("\n");
for (int i = 0; i < init_data->lines; i++)
mvprintw(i, 0, n->state.map[i]);
move(n->state.player_y, n->state.player_x);
}
}
node_t* heap_delete(struct heap* h)
{
node_t* removed;
node_t* temp = h->heaparr[--h->count];
if ((h->count <= (h->size + 2)) && (h->size > initial_size))
{
h->size -= 1;
h->heaparr = realloc(h->heaparr, sizeof(node_t) * h->size);
if (!h->heaparr) exit(-1); // Exit if the memory allocation fails
}
removed = h->heaparr[0];
h->heaparr[0] = temp;
if(temp == removed) h->heaparr[0] = NULL;
max_heapify(h->heaparr, 0, h->count);
return removed;
}
void emptyPQ(struct heap* pq) {
while(pq->count != 0) {
node_t* n = heap_delete(pq);
free(n);
//printf("<<%d", heap_delete(pq));
}
}

39
src/ai/priority_queue.h Normal file
View file

@ -0,0 +1,39 @@
#ifndef __PQ__
#define __PQ__
/**
* NIR: Adapted from https://gist.github.com/aatishnn/8265656#file-binarymaxheap-c
*/
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include "node.h"
#include "../../include/sokoban.h"
/**
* size is the allocated size, count is the number of elements in the queue
*/
struct heap {
int size;
int count;
node_t** heaparr;
};
#define initial_size 4
void heap_init(struct heap* h);
void max_heapify(node_t** data, int loc, int count);
void heap_push(struct heap* h, node_t* value);
void heap_display(struct heap *h, sokoban_t *init_data);
node_t* heap_delete(struct heap* h);
void emptyPQ(struct heap* pq);
#endif

348
src/ai/utils.c Normal file
View file

@ -0,0 +1,348 @@
#include <curses.h>
#include "utils.h"
/**************************************
* Box movement given a state state *
***************************************/
bool is_goal_loc(int y, int x, sokoban_t* init_data)
{
return (init_data->map_save[y][x] == '.') || (init_data->map_save[y][x] == '+') || (init_data->map_save[y][x] == '*');
}
bool push_box_left(sokoban_t* init_data,state_t* state)
{
if (state->map[state->player_y][state->player_x-2] == '$' || state->map[state->player_y][state->player_x-2] == '*') {
return false;
} else if (state->map[state->player_y][state->player_x-2] == '#') {
return false;
} else {
state->map[state->player_y][state->player_x-1] = '@';
if(state->map[state->player_y][state->player_x-2] == '.')
state->map[state->player_y][state->player_x-2] = '*';
else
state->map[state->player_y][state->player_x-2] = '$';
state->map[state->player_y][state->player_x] = ' ';
if (is_goal_loc( state->player_y, state->player_x, init_data) && state->map[state->player_y][state->player_x] == ' ') {
state->map[state->player_y][state->player_x] = '.';
}
state->player_x--;
}
return true;
}
bool push_box_right(sokoban_t* init_data,state_t* state)
{
if (state->map[state->player_y][state->player_x+2] == '$' || state->map[state->player_y][state->player_x+2] == '*') {
return false;
} else if (state->map[state->player_y][state->player_x+2] == '#') {
return false;
} else {
state->map[state->player_y][state->player_x+1] = '@';
if(state->map[state->player_y][state->player_x+2] == '.')
state->map[state->player_y][state->player_x+2] = '*';
else
state->map[state->player_y][state->player_x+2] = '$';
state->map[state->player_y][state->player_x] = ' ';
if (is_goal_loc( state->player_y, state->player_x, init_data) && state->map[state->player_y][state->player_x] == ' ') {
state->map[state->player_y][state->player_x] = '.';
}
state->player_x++;
}
return true;
}
bool push_box_up(sokoban_t* init_data,state_t* state)
{
if (state->map[state->player_y-2][state->player_x] == '$' || state->map[state->player_y-2][state->player_x] == '*') {
return false;
} else if (state->map[state->player_y-2][state->player_x] == '#') {
return false;
} else {
state->map[state->player_y-1][state->player_x] = '@';
if(state->map[state->player_y-2][state->player_x] == '.')
state->map[state->player_y-2][state->player_x] = '*';
else
state->map[state->player_y-2][state->player_x] = '$';
state->map[state->player_y][state->player_x] = ' ';
if (is_goal_loc( state->player_y, state->player_x, init_data) && state->map[state->player_y][state->player_x] == ' ') {
state->map[state->player_y][state->player_x] = '.';
}
state->player_y--;
}
return true;
}
bool push_box_down(sokoban_t* init_data,state_t* state)
{
if (state->map[state->player_y+2][state->player_x] == '$' || state->map[state->player_y+2][state->player_x] == '*') {
return false;
} else if (state->map[state->player_y+2][state->player_x] == '#') {
return false;
} else {
state->map[state->player_y+1][state->player_x] = '@';
if(state->map[state->player_y+2][state->player_x] == '.')
state->map[state->player_y+2][state->player_x] = '*';
else
state->map[state->player_y+2][state->player_x] = '$';
state->map[state->player_y][state->player_x] = ' ';
if (is_goal_loc( state->player_y, state->player_x, init_data) && state->map[state->player_y][state->player_x] == ' ') {
state->map[state->player_y][state->player_x] = '.';
}
state->player_y++;
}
return true;
}
/**************************************
* Player Moves given a state state *
***************************************/
bool move_left_player(sokoban_t* init_data,state_t* state)
{
if (state->map[state->player_y][state->player_x-1] != '#') {
if (state->map[state->player_y][state->player_x-1] == '$' || state->map[state->player_y][state->player_x-1] == '*') {
return push_box_left(init_data, state);
} else {
state->map[state->player_y][state->player_x-1] = '@';
state->map[state->player_y][state->player_x] = ' ';
if (is_goal_loc( state->player_y, state->player_x, init_data) && state->map[state->player_y][state->player_x] == ' ') {
state->map[state->player_y][state->player_x] = '.';
}
state->player_x--;
return true;
}
}
return false;
}
bool move_right_player(sokoban_t* init_data,state_t* state)
{
if (state->map[state->player_y][state->player_x+1] != '#') {
if (state->map[state->player_y][state->player_x+1] == '$' || state->map[state->player_y][state->player_x+1] == '*') {
return push_box_right(init_data, state);
} else {
state->map[state->player_y][state->player_x+1] = '@';
state->map[state->player_y][state->player_x] = ' ';
if (is_goal_loc( state->player_y, state->player_x, init_data) && state->map[state->player_y][state->player_x] == ' ') {
state->map[state->player_y][state->player_x] = '.';
}
state->player_x++;
return true;
}
}
return false;
}
bool move_up_player(sokoban_t* init_data,state_t* state)
{
if (state->map[state->player_y-1][state->player_x] != '#') {
if (state->map[state->player_y-1][state->player_x] == '$' || state->map[state->player_y-1][state->player_x] == '*') {
return push_box_up(init_data, state);
} else {
state->map[state->player_y-1][state->player_x] = '@';
state->map[state->player_y][state->player_x] = ' ';
if (is_goal_loc( state->player_y, state->player_x, init_data) && state->map[state->player_y][state->player_x] == ' ') {
state->map[state->player_y][state->player_x] = '.';
}
state->player_y--;
return true;
}
}
return false;
}
bool move_down_player(sokoban_t* init_data,state_t* state)
{
if (state->map[state->player_y+1][state->player_x] != '#') {
if (state->map[state->player_y+1][state->player_x] == '$' || state->map[state->player_y+1][state->player_x] == '*') {
return push_box_down(init_data, state);
} else {
state->map[state->player_y+1][state->player_x] = '@';
state->map[state->player_y][state->player_x] = ' ';
if (is_goal_loc( state->player_y, state->player_x, init_data) && state->map[state->player_y][state->player_x] == ' ') {
state->map[state->player_y][state->player_x] = '.';
}
state->player_y++;
return true;
}
}
return false;
}
bool execute_move_t(sokoban_t* init_data, state_t* state, move_t move) {
bool player_moved = false;
//Determine which button is pushed
switch (move) {
case up:
player_moved = move_up_player(init_data, state);
break;
case down:
player_moved = move_down_player(init_data, state);
break;
case left:
player_moved = move_left_player(init_data, state);
break;
case right:
player_moved = move_right_player(init_data, state);
break;
}
return player_moved;
}
/*****************************************************************************
* Function: simple_corner_deadlock *
* Parameters: sokoban_t* init_data, state_t* state *
* Returns: bool *
* Description: Check if box has been pusehd into a loc in a corner wall *
* and loc != destination *
*****************************************************************************/
bool corner_check(int x, int y, sokoban_t* init_data, state_t* state){
// Check if corner
if (((state->map[y][x+1] == '#' && state->map[y+1][x] == '#') ||
(state->map[y+1][x] == '#' && state->map[y][x-1] == '#') ||
(state->map[y][x-1] == '#' && state->map[y-1][x] == '#') ||
(state->map[y-1][x] == '#' && state->map[y][x+1] == '#')) &&
!is_goal_loc( state->player_y, state->player_x, init_data) ) {
return true;
}
return false;
}
bool simple_corner_deadlock(sokoban_t* init_data, state_t* state)
{
bool deadlock = false;
int x = state->player_x;
int y = state->player_y;
if (state->map[state->player_y + 1][state->player_x] == '$'){
y = state->player_y + 1;
deadlock = corner_check(x, y, init_data, state);
}
if( state->map[state->player_y-1][state->player_x] == '$'){
y = state->player_y - 1;
deadlock = corner_check(x, y, init_data, state);
}
if( state->map[state->player_y][state->player_x+1] == '$'){
x = state->player_x + 1;
deadlock = corner_check(x, y, init_data, state);
}
if( state->map[state->player_y][state->player_x-1] == '$'){
x = state->player_x - 1;
deadlock = corner_check(x, y, init_data, state);
}
return deadlock;
}
/*****************************************************************************
* Function: winning_condition *
* Parameters: sokoban_t* init_data, state_t* state *
* Returns: bool *
* Description: Check if all boxes are in a destination *
*****************************************************************************/
bool winning_condition(sokoban_t* init_data, state_t* state)
{
for (int y = 0; y < init_data->lines; y++) {
for (int x = 0; init_data->map_save[y][x] != '\0'; x++) {
if (state->map[y][x] == '$')
return false;
}
}
return true;
}
/*********
* MACROS *
*********/
#include <string.h>
#define TERMINAL_TYPE (strcmp(getenv("TERM"), "xterm") == 0 ? "rxvt" : \
getenv("TERM"))
void play_solution( sokoban_t init_data, char* solution ){
SCREEN *mainScreen = newterm(TERMINAL_TYPE, stdout, stdin);
set_term(mainScreen);
int cols = 1;
for(int i = 0; i < init_data.lines; i++){
if(strlen(init_data.map[i]) > (size_t) cols){
cols = strlen(init_data.map[i]);
}
}
WINDOW *mainWindow = newwin(init_data.lines, cols, 0, 0);
cbreak();
noecho();
keypad(stdscr, TRUE);
clear();
for (long unsigned int i = 0; i <= strlen(solution); i++) {
touchwin(mainWindow);
wnoutrefresh(mainWindow);
doupdate();
refresh();
for (int i = 0; i < init_data.lines; i++)
mvprintw(i, 0, init_data.map[i]);
move(init_data.player_y, init_data.player_x);
int key_pressed = 0;
if( solution[i] == 'u' || solution[i] == 'U')
key_pressed = KEY_UP;
else if( solution[i] == 'd' || solution[i] == 'D')
key_pressed = KEY_DOWN;
else if( solution[i] == 'l' || solution[i] == 'L')
key_pressed = KEY_LEFT;
else if( solution[i] == 'r' || solution[i] == 'R')
key_pressed = KEY_RIGHT;
init_data = key_check(init_data, key_pressed);
init_data = check_zone_reset(init_data);
usleep(500000);
}
touchwin(mainWindow);
wnoutrefresh(mainWindow);
doupdate();
refresh();
usleep(1500000);
}
void print_map(sokoban_t* init_data, state_t* state ){
initscr();
cbreak();
noecho();
clear();
for (int i = 0; i < init_data->lines; i++){
mvprintw(i, 0, state->map[i]);
move(state->player_y, state->player_x);
}
refresh();
}

53
src/ai/utils.h Normal file
View file

@ -0,0 +1,53 @@
#ifndef __UTILS__
#define __UTILS__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <termios.h>
#include <stdbool.h>
#include <stdint.h>
#include <time.h>
#include <signal.h>
#include "../../include/sokoban.h"
#define SIZE 4
#define _XOPEN_SOURCE 500
/**
* Data structure containing the information about the game state
* representing the state of the game.
*/
struct state_s{
char **map;
int player_x;
int player_y;
};
typedef struct state_s state_t;
/**
* Move type
*/
typedef enum moves{
left=0,
right=1,
up=2,
down=3
} move_t;
/**
* Helper functions
*/
bool execute_move_t(sokoban_t *init_data, state_t *state, move_t move);
bool simple_corner_deadlock(sokoban_t *init_data, state_t *state);
bool winning_condition(sokoban_t *init_data, state_t *state);
void play_solution( sokoban_t init_data, char* solution );
void print_map(sokoban_t *init_data, state_t *state);
#endif

34
src/find_player.c Normal file
View file

@ -0,0 +1,34 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Function for finding the player on the map
*/
#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
sokoban_t find_player(sokoban_t sokoban)
{
sokoban.player_x = 0;
sokoban.player_y = 0;
for (int i = 0; i < sokoban.lines; i++) {
for (int j = 0; sokoban.map[i][j] != '\0'; j++) {
sokoban = check_if_player(sokoban, i, j);
}
}
return (sokoban);
}
sokoban_t check_if_player(sokoban_t sokoban, int y, int x)
{
if (sokoban.map[y][x] == '@') {
sokoban.player_x = x;
sokoban.player_y = y;
}
return (sokoban);
}

20
src/helper.c Normal file
View file

@ -0,0 +1,20 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Main function for the my_sokoban
*/
#include <unistd.h>
#include "../include/libmy.h"
int helper(void)
{
my_putstr("USAGE\n");
my_putstr(" ./sokoban <-s> map <play_solution>\n\n");
my_putstr("DESCRIPTION\n");
my_putstr(" Arguments within <> are optional\n");
my_putstr(" -s calls the AI solver\n");
my_putstr(" play_solution animates the solution found by the AI solver\n");
return (0);
}

29
src/key_check.c Normal file
View file

@ -0,0 +1,29 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Function that manage key press for sokoban
*/
#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
sokoban_t key_check(sokoban_t sokoban, int key)
{
if (key == KEY_LEFT) {
sokoban = move_left(sokoban);
}
if (key == KEY_RIGHT)
sokoban = move_right(sokoban);
if (key == KEY_UP)
sokoban = move_up(sokoban);
if (key == KEY_DOWN)
sokoban = move_down(sokoban);
if (key == ' ')
play(sokoban.base_path);
return (sokoban);
}

41
src/loose_check.c Normal file
View file

@ -0,0 +1,41 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Functions used to check if the game is loosed
*/
#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
void loose_check(sokoban_t sokoban)
{
if( sokoban.map[sokoban.player_y+1][sokoban.player_x] == '$')
storage_loose_check(sokoban.player_y+1, sokoban.player_x, sokoban);
if( sokoban.map[sokoban.player_y-1][sokoban.player_x] == '$')
storage_loose_check(sokoban.player_y-1, sokoban.player_x, sokoban);
if( sokoban.map[sokoban.player_y][sokoban.player_x+1] == '$')
storage_loose_check(sokoban.player_y, sokoban.player_x+1, sokoban);
if( sokoban.map[sokoban.player_y][sokoban.player_x-1] == '$')
storage_loose_check(sokoban.player_y, sokoban.player_x-1, sokoban);
}
void storage_loose_check(int y, int x, sokoban_t sokoban)
{
if (sokoban.map[y][x] == '$') {
if (((sokoban.map[y][x+1] == '#' && sokoban.map[y+1][x] == '#') ||
(sokoban.map[y+1][x] == '#' && sokoban.map[y][x-1] == '#') ||
(sokoban.map[y][x-1] == '#' && sokoban.map[y-1][x] == '#') ||
(sokoban.map[y-1][x] == '#' && sokoban.map[y][x+1] == '#')) &&
!is_goal_cell(y, x, sokoban ) ) {
endwin();
exit (1);
}
}
}

33
src/main.c Normal file
View file

@ -0,0 +1,33 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Main function for the my_sokoban
*/
#include <ncurses.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
#include "ai/ai.h"
int main(int argc, char const **argv)
{
if (argc < 2 || argc > 4)
return (84);
if (argv[1][0] == '-' && argv[1][1] == 'h')
return(helper());
else if (argv[1][0] == '-' && argv[1][1] == 's'){
bool show_solution = false;
if (argc > 3 && strcmp(argv[3], "play_solution") == 0)
show_solution = true;
solve(argv[2], show_solution);
return 0;
}
else if (argv[1][0] != '-')
return(play(argv[1]));
return (84);
}

60
src/map_check.c Normal file
View file

@ -0,0 +1,60 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Function used to check if a map is valid or not
*/
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
void map_check(sokoban_t sokoban)
{
int player = 0;
for (int i = 0; i < sokoban.lines; i++) {
for (int j = 0; sokoban.map_save[i][j] != '\0'; j++) {
check_tile(i, j, sokoban);
player += count_player(i, j, sokoban);
}
}
}
int check_tile(int y, int x, sokoban_t sokoban)
{
if (sokoban.map_save[y][x] != '@' && sokoban.map_save[y][x] != '$'
&& sokoban.map_save[y][x] != '#' && sokoban.map_save[y][x] != ' '
&& sokoban.map_save[y][x] != '\n' && sokoban.map_save[y][x] != '.'
&& sokoban.map_save[y][x] != '+' && sokoban.map_save[y][x] != '*')
{
write(2, "Unknown read character in map\n", 26);
exit(84);
}
return (0);
}
int count_case_number(int y, int x, sokoban_t sokoban)
{
int i = 0;
if (sokoban.map_save[y][x] == '$') {
i++;
}
return (i);
}
int count_player(int y, int x, sokoban_t sokoban)
{
int i = 0;
if (sokoban.map_save[y][x] == '@') {
i++;
}
return (i);
}

92
src/map_reading.c Normal file
View file

@ -0,0 +1,92 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Main function for the my_sokoban
*/
#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
char *open_map(char const *path)
{
int reading;
char *buffer;
reading = open(path, O_RDONLY);
if (reading == -1) {
write(2, "No such file or directory\n", 26);
exit (84);
}
buffer = read_map(reading);
close(reading);
return (buffer);
}
char *read_map(int reading)
{
char *buffer = malloc(sizeof(char) * 10000);
int size = 32;
size = read(reading, buffer, 10000);
if (size == -1)
exit(84);
buffer[size] = '\0';
return (buffer);
}
int count_columns(sokoban_t sokoban, int position)
{
int columns = 0;
for (; sokoban.buffer[position] != '\n'; position++) {
columns++;
}
return (columns);
}
sokoban_t count_lines(sokoban_t sokoban)
{
sokoban.lines = 0;
for (int i = 0; sokoban.buffer[i] != '\0'; i++) {
if (sokoban.buffer[i] == '\n' || sokoban.buffer[i] == '\0')
sokoban.lines++;
}
return (sokoban);
}
sokoban_t make_map(char const *path, sokoban_t sokoban)
{
sokoban.buffer = open_map(path);
sokoban = count_lines(sokoban);
int k = 0;
int columns = 0;
sokoban.num_chars_map = 0;
sokoban.map = malloc(sizeof(char *) * sokoban.lines);
sokoban.map_save = malloc(sizeof (char *) * sokoban.lines);
for (int j = 0; j < sokoban.lines; j++) {
columns = count_columns(sokoban, k);
sokoban.num_chars_map += columns;
sokoban.map[j] = malloc(sizeof(char) * columns + 1);
sokoban.map_save[j] = malloc(sizeof(char) * columns + 1);
for (int i = 0; i < columns; i++) {
sokoban.map[j][i] = sokoban.buffer[k];
sokoban.map_save[j][i] = sokoban.buffer[k];
sokoban.map[j][i+1] = '\0';
sokoban.map_save[j][i+1] = '\0';
k++;
}
k++;
}
return (sokoban);
}
int is_goal_cell(int y, int x, sokoban_t sokoban)
{
return (sokoban.map_save[y][x] == '.') || (sokoban.map_save[y][x] == '+') || (sokoban.map_save[y][x] == '*');
}

152
src/movement.c Normal file
View file

@ -0,0 +1,152 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Function that make the player move
*/
#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
sokoban_t move_box_left(sokoban_t sokoban)
{
if (sokoban.map[sokoban.player_y][sokoban.player_x-2] == '$' || sokoban.map[sokoban.player_y][sokoban.player_x-2] == '*') {
return (sokoban);
} else if (sokoban.map[sokoban.player_y][sokoban.player_x-2] == '#') {
return (sokoban);
} else {
sokoban.map[sokoban.player_y][sokoban.player_x-1] = '@';
if(sokoban.map[sokoban.player_y][sokoban.player_x-2] == '.')
sokoban.map[sokoban.player_y][sokoban.player_x-2] = '*';
else
sokoban.map[sokoban.player_y][sokoban.player_x-2] = '$';
sokoban.map[sokoban.player_y][sokoban.player_x] = ' ';
sokoban.player_x--;
}
return (sokoban);
}
sokoban_t move_box_right(sokoban_t sokoban)
{
if (sokoban.map[sokoban.player_y][sokoban.player_x+2] == '$' || sokoban.map[sokoban.player_y][sokoban.player_x+2] == '*') {
return (sokoban);
} else if (sokoban.map[sokoban.player_y][sokoban.player_x+2] == '#') {
return (sokoban);
} else {
sokoban.map[sokoban.player_y][sokoban.player_x+1] = '@';
if(sokoban.map[sokoban.player_y][sokoban.player_x+2] == '.')
sokoban.map[sokoban.player_y][sokoban.player_x+2] = '*';
else
sokoban.map[sokoban.player_y][sokoban.player_x+2] = '$';
sokoban.map[sokoban.player_y][sokoban.player_x] = ' ';
sokoban.player_x++;
}
return (sokoban);
}
sokoban_t move_box_up(sokoban_t sokoban)
{
if (sokoban.map[sokoban.player_y-2][sokoban.player_x] == '$' || sokoban.map[sokoban.player_y-2][sokoban.player_x] == '*') {
return (sokoban);
} else if (sokoban.map[sokoban.player_y-2][sokoban.player_x] == '#') {
return (sokoban);
} else {
sokoban.map[sokoban.player_y-1][sokoban.player_x] = '@';
if(sokoban.map[sokoban.player_y-2][sokoban.player_x] == '.')
sokoban.map[sokoban.player_y-2][sokoban.player_x] = '*';
else
sokoban.map[sokoban.player_y-2][sokoban.player_x] = '$';
sokoban.map[sokoban.player_y][sokoban.player_x] = ' ';
sokoban.player_y--;
}
return (sokoban);
}
sokoban_t move_box_down(sokoban_t sokoban)
{
if (sokoban.map[sokoban.player_y+2][sokoban.player_x] == '$' || sokoban.map[sokoban.player_y+2][sokoban.player_x] == '*') {
return (sokoban);
} else if (sokoban.map[sokoban.player_y+2][sokoban.player_x] == '#') {
return (sokoban);
} else {
sokoban.map[sokoban.player_y+1][sokoban.player_x] = '@';
if(sokoban.map[sokoban.player_y+2][sokoban.player_x] == '.')
sokoban.map[sokoban.player_y+2][sokoban.player_x] = '*';
else
sokoban.map[sokoban.player_y+2][sokoban.player_x] = '$';
sokoban.map[sokoban.player_y][sokoban.player_x] = ' ';
sokoban.player_y++;
}
return (sokoban);
}
sokoban_t move_left(sokoban_t sokoban)
{
if (sokoban.map[sokoban.player_y][sokoban.player_x-1] != '#') {
if (sokoban.map[sokoban.player_y][sokoban.player_x-1] == '$' || sokoban.map[sokoban.player_y][sokoban.player_x-1] == '*') {
sokoban = move_box_left(sokoban);
} else {
sokoban.map[sokoban.player_y][sokoban.player_x-1] = '@';
sokoban.map[sokoban.player_y][sokoban.player_x] = ' ';
sokoban.player_x--;
}
}
return (sokoban);
}
sokoban_t move_right(sokoban_t sokoban)
{
if (sokoban.map[sokoban.player_y][sokoban.player_x+1] != '#') {
if (sokoban.map[sokoban.player_y][sokoban.player_x+1] == '$' || sokoban.map[sokoban.player_y][sokoban.player_x+1] == '*') {
sokoban = move_box_right(sokoban);
} else {
sokoban.map[sokoban.player_y][sokoban.player_x+1] = '@';
sokoban.map[sokoban.player_y][sokoban.player_x] = ' ';
sokoban.player_x++;
}
}
return (sokoban);
}
sokoban_t move_up(sokoban_t sokoban)
{
if (sokoban.map[sokoban.player_y-1][sokoban.player_x] != '#') {
if (sokoban.map[sokoban.player_y-1][sokoban.player_x] == '$' || sokoban.map[sokoban.player_y-1][sokoban.player_x] == '*') {
sokoban = move_box_up(sokoban);
} else {
sokoban.map[sokoban.player_y-1][sokoban.player_x] = '@';
sokoban.map[sokoban.player_y][sokoban.player_x] = ' ';
sokoban.player_y--;
}
}
return (sokoban);
}
sokoban_t move_down(sokoban_t sokoban)
{
if (sokoban.map[sokoban.player_y+1][sokoban.player_x] != '#') {
if (sokoban.map[sokoban.player_y+1][sokoban.player_x] == '$' || sokoban.map[sokoban.player_y+1][sokoban.player_x] == '*') {
sokoban = move_box_down(sokoban);
} else {
sokoban.map[sokoban.player_y+1][sokoban.player_x] = '@';
sokoban.map[sokoban.player_y][sokoban.player_x] = ' ';
sokoban.player_y++;
}
}
return (sokoban);
}

83
src/play.c Normal file
View file

@ -0,0 +1,83 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Function that manage the game
** ----------
** Adapted by Nir Lipo, 2021
*/
#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
/*********
* MACROS *
*********/
#include <string.h>
#define TERMINAL_TYPE (strcmp(getenv("TERM"), "xterm") == 0 ? "rxvt" : \
getenv("TERM"))
SCREEN *mainScreen = NULL;
WINDOW *mainWindow = NULL;
int play(char const *path)
{
/**
* Load Map
*/
sokoban_t sokoban = make_map(path, sokoban);
/**
* Count number of boxes and Storage locations
*/
map_check(sokoban);
/**
* Locate player x,y position
*/
sokoban = find_player(sokoban);
sokoban.base_path = path;
mainScreen = newterm(TERMINAL_TYPE, stdout, stdin);
set_term(mainScreen);
int cols = 1;
for(int i = 0; i < sokoban.lines; i++){
if(strlen(sokoban.map[i]) > (size_t) cols){
cols = strlen(sokoban.map[i]);
}
}
mainWindow = newwin(sokoban.lines, cols, 0, 0);
cbreak();
noecho();
keypad(stdscr, TRUE);
clear();
while (1) {
// Do explicit refresh of window so no corruption occurs
touchwin(mainWindow);
wnoutrefresh(mainWindow);
doupdate();
for (int i = 0; i < sokoban.lines; i++)
mvprintw(i, 0, sokoban.map[i]);
move(sokoban.player_y, sokoban.player_x);
sokoban = game_management(sokoban);
}
}
sokoban_t game_management(sokoban_t sokoban)
{
int key_pressed = 0;
key_pressed = getch();
sokoban = key_check(sokoban, key_pressed);
sokoban = check_zone_reset(sokoban);
loose_check(sokoban);
win_check(sokoban);
return (sokoban);
}

27
src/win_check.c Normal file
View file

@ -0,0 +1,27 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Function that check if the game is won
*/
#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
void win_check(sokoban_t sokoban)
{
for (int i = 0; i < sokoban.lines; i++) {
for (int j = 0; sokoban.map_save[i][j] != '\0'; j++) {
if (sokoban.map[i][j] == '$')
return ;
}
}
endwin();
exit (0);
}

34
src/zone_check.c Normal file
View file

@ -0,0 +1,34 @@
/*
** EPITECH PROJECT, 2017
** PSU_my_sokoban_2017
** File description:
** Check zone
** ----------
** Adpated by Nir 2021
*/
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include "../include/libmy.h"
#include "../include/sokoban.h"
sokoban_t check_zone_reset(sokoban_t sokoban)
{
sokoban = reset_zone(sokoban.player_y+1, sokoban.player_x, sokoban);
sokoban = reset_zone(sokoban.player_y-1, sokoban.player_x, sokoban);
sokoban = reset_zone(sokoban.player_y, sokoban.player_x+1, sokoban);
sokoban = reset_zone(sokoban.player_y, sokoban.player_x-1, sokoban);
return (sokoban);
}
sokoban_t reset_zone(int y, int x, sokoban_t sokoban)
{
if ( is_goal_cell(y, x, sokoban ) && sokoban.map[y][x] == ' ') {
sokoban.map[y][x] = '.';
return(sokoban);
}
return (sokoban);
}

3
test_maps/capability1 Normal file
View file

@ -0,0 +1,3 @@
#####
#@$.#
#####

3
test_maps/capability10 Normal file
View file

@ -0,0 +1,3 @@
###########
#.$ @ $.#
###########

5
test_maps/capability11 Normal file
View file

@ -0,0 +1,5 @@
##########
###### *##
# $ *.#
# $@ *.#
##########

11
test_maps/capability12 Normal file
View file

@ -0,0 +1,11 @@
##########
# .#
# #######
## #
## ### #
####### ##
# ##
# $### ##
##@#######
##########
##########

5
test_maps/capability2 Normal file
View file

@ -0,0 +1,5 @@
###
#@#
#$#
#.#
###

3
test_maps/capability3 Normal file
View file

@ -0,0 +1,3 @@
#####
#.$@#
#####

5
test_maps/capability4 Normal file
View file

@ -0,0 +1,5 @@
###
#.#
#$#
#@#
###

6
test_maps/capability5 Normal file
View file

@ -0,0 +1,6 @@
#####
# @ #
# #
# $ #
# . #
#####

6
test_maps/capability6 Normal file
View file

@ -0,0 +1,6 @@
#####
# . #
# $ #
# #
# @ #
#####

6
test_maps/capability7 Normal file
View file

@ -0,0 +1,6 @@
#####
# .#
# $##
# ##
##@##
#####

6
test_maps/capability8 Normal file
View file

@ -0,0 +1,6 @@
#####
#. #
##$ #
## #
###@#
#####

9
test_maps/capability9 Normal file
View file

@ -0,0 +1,9 @@
#####
##.##
##$##
## ##
##@##
## ##
##$##
##.##
#####

3
test_maps/test_map1 Normal file
View file

@ -0,0 +1,3 @@
############
# @ $ .#
############

7
test_maps/test_map2 Normal file
View file

@ -0,0 +1,7 @@
########################
# $ .#
# #######
# $ @ . #######
# #######
# . $ #######
########################

11
test_maps/test_map3 Normal file
View file

@ -0,0 +1,11 @@
####
# ######
# #
## #### #
#@* ### ##
# * ## #
## * # ##
## .$# #
## #
#### #
####