diff --git a/src/clue-matches-tests.c b/src/clue-matches-tests.c index d1431aada23f3aa8d70aa6bf9c81f45eed2f8e95..e13c75a418bc83265da624ae0aa338cf2e5be351 100644 --- a/src/clue-matches-tests.c +++ b/src/clue-matches-tests.c @@ -26,12 +26,7 @@ #include "test-utils.h" -/* Helper code */ - -typedef struct { - WordList *word_list; - IpuzGrid *grid; -} Fixture; +/* Fixture code */ static IpuzGrid* create_grid (const gchar* filename) @@ -40,7 +35,13 @@ create_grid (const gchar* filename) return IPUZ_GRID (state->xword); } -static void fixture_set_up (Fixture *fixture, gconstpointer user_data) +typedef struct { + WordList *word_list; + IpuzGrid *grid; +} CorrectnessTestFixture; + +static void correctness_fixture_set_up (CorrectnessTestFixture *fixture, + gconstpointer user_data) { const gchar *ipuz_file_path = (const gchar *) user_data; @@ -48,7 +49,8 @@ static void fixture_set_up (Fixture *fixture, gconstpointer user_data) fixture->grid = create_grid (ipuz_file_path); } -static void fixture_tear_down (Fixture *fixture, gconstpointer user_data) +static void correctness_fixture_tear_down (CorrectnessTestFixture *fixture, + gconstpointer user_data) { g_object_unref (fixture->word_list); @@ -59,6 +61,42 @@ static void fixture_tear_down (Fixture *fixture, gconstpointer user_data) */ } +#define RUN_PERFORMANCE_TESTS +#ifdef RUN_PERFORMANCE_TESTS +typedef struct { + WordList *word_list; + IpuzGrid *grid; + GTimer *timer; + gfloat *combined_runtime; +} PerformanceTestFixture; + +typedef struct { + const gchar *ipuz_file_path; + gfloat *combined_runtime; +} PerformanceTestUserData; + +static void performance_fixture_set_up (PerformanceTestFixture *fixture, + gconstpointer user_data) +{ + PerformanceTestUserData *ptest_user_data = + (PerformanceTestUserData *) user_data; + fixture->word_list = get_broda_word_list (); + fixture->grid = create_grid (ptest_user_data->ipuz_file_path); + fixture->combined_runtime = ptest_user_data->combined_runtime; +} + +static void performance_fixture_tear_down (PerformanceTestFixture *fixture, + gconstpointer user_data) +{ + g_object_unref (fixture->word_list); + g_assert_nonnull (fixture->timer); + g_timer_destroy (fixture->timer); +} +#endif + + +/* IPUZ tests */ + static IpuzClue* get_clue (IpuzGrid* grid, IpuzClueDirection direction, guint index) { @@ -104,47 +142,49 @@ test_clue_matches (WordList *word_list, g_assert_true (word_array_equals (clue_matches, expected_word_array)); } - -/* Tests */ - -#define ASSERT_CLUE_MATCHES(DIRECTION, INDEX, ...) \ - test_clue_matches (fixture->word_list, \ - fixture->grid, \ - DIRECTION, \ - INDEX, \ +#define ASSERT_CLUE_MATCHES(DIRECTION, INDEX, ...) \ + test_clue_matches (fixture->word_list, \ + fixture->grid, \ + DIRECTION, \ + INDEX, \ (const gchar*[]){__VA_ARGS__, NULL}) -#define ASSERT_CLUE_MATCHES_EMPTY(DIRECTION, INDEX) \ +#define ASSERT_CLUE_MATCHES_EMPTY(DIRECTION, INDEX) \ ASSERT_CLUE_MATCHES(DIRECTION, INDEX, NULL); static void -test_simple_across_ipuz (Fixture *fixture, gconstpointer user_data) +test_simple_across_ipuz (CorrectnessTestFixture *fixture, + gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 2, "EGGS", "EGGO", "EGGY"); } static void -test_simple_down_ipuz (Fixture *fixture, gconstpointer user_data) +test_simple_down_ipuz (CorrectnessTestFixture *fixture, + gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 3, "EGGS", "EGGO", "EGGY"); } static void -test_valid_intersection_ipuz (Fixture *fixture, gconstpointer user_data) +test_valid_intersection_ipuz (CorrectnessTestFixture *fixture, + gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 1, "WORD", "WORM"); ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 3, "EDIT", "EMIT"); } static void -test_invalid_intersection_ipuz (Fixture *fixture, gconstpointer user_data) +test_invalid_intersection_ipuz (CorrectnessTestFixture *fixture, + gconstpointer user_data) { ASSERT_CLUE_MATCHES_EMPTY (IPUZ_CLUE_DIRECTION_ACROSS, 3); ASSERT_CLUE_MATCHES_EMPTY (IPUZ_CLUE_DIRECTION_DOWN, 3); } static void -test_dense_ipuz (Fixture *fixture, gconstpointer user_data) +test_dense_ipuz (CorrectnessTestFixture *fixture, + gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "WORD"); ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 1, "ARIA"); @@ -157,21 +197,21 @@ test_dense_ipuz (Fixture *fixture, gconstpointer user_data) } static void -test_block_cells_ipuz (Fixture *fixture, gconstpointer user_data) +test_block_cells_ipuz (CorrectnessTestFixture *fixture, gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "ADD", "AID", "AND", "AMD"); ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 0, "AXES", "AXIS"); } static void -test_null_cells_ipuz (Fixture *fixture, gconstpointer user_data) +test_null_cells_ipuz (CorrectnessTestFixture *fixture, gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "ADD", "AID", "AND", "AMD"); ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 0, "AXES", "AXIS"); } static void -test_rebus_ipuz (Fixture *fixture, gconstpointer user_data) +test_rebus_ipuz (CorrectnessTestFixture *fixture, gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "REBUS", "REMUS"); ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_DOWN, 2, "BANANA", "MANANA"); @@ -179,35 +219,159 @@ test_rebus_ipuz (Fixture *fixture, gconstpointer user_data) /* FIXME(tests): See https://gitlab.gnome.org/jrb/crosswords/-/issues/313. static void -test_duplicate_words_ipuz (Fixture *fixture, gconstpointer user_data) +test_duplicate_words_ipuz (CorrectnessTestFixture *fixture, + gconstpointer user_data) { ASSERT_CLUE_MATCHES (IPUZ_CLUE_DIRECTION_ACROSS, 0, "ZERO"); ASSERT_CLUE_MATCHES_EMPTY (IPUZ_CLUE_DIRECTION_DOWN, 0); } */ -#define ADD_IPUZ_TEST(test_name, file_name) \ - g_test_add ("/clue_matches/" #test_name, \ - Fixture, \ - "tests/clue-matches/" file_name, \ - fixture_set_up, \ - test_name, \ - fixture_tear_down) -/* FIXME(tests): Measure performance. */ +/* Performance tests */ + +#ifdef RUN_PERFORMANCE_TESTS +static void foreach_clue_func (IpuzClues* clues, + IpuzClueDirection direction, + IpuzClue* clue, + IpuzClueId* clue_id, + gpointer user_data) +{ + PerformanceTestFixture *fixture; + WordList *word_list; + + fixture = (PerformanceTestFixture *) user_data; + word_list = fixture->word_list; + + if (fixture->timer == NULL) + fixture->timer = g_timer_new (); + else + g_timer_continue (fixture->timer); + + word_list_find_clue_matches (word_list, clue, IPUZ_GRID (clues)); + g_timer_stop (fixture->timer); +} + +#define NUM_RUNS 1 +static gfloat +test_performance (const gchar *test_name, + PerformanceTestFixture *fixture) +{ + IpuzGrid *grid = fixture->grid; + gfloat average_time; + g_assert_null (fixture->timer); + + for (guint i = 0; i < NUM_RUNS; i++) + ipuz_clues_foreach_clue (IPUZ_CLUES (grid), foreach_clue_func, fixture); + average_time = g_timer_elapsed (fixture->timer, NULL) / NUM_RUNS; + + g_message (" "); + g_message ("%s runtime: %f seconds", test_name, average_time); + g_message (" "); + return average_time; +} + +#define DEFINE_PERFORMANCE_TEST(NAME) \ + static void \ + NAME (PerformanceTestFixture *fixture, gconstpointer user_data) \ + { \ + PerformanceTestUserData *ptest_user_data; \ + ptest_user_data = (PerformanceTestUserData *) user_data; \ + \ + *(ptest_user_data->combined_runtime) += \ + test_performance (#NAME, fixture); \ + } + +DEFINE_PERFORMANCE_TEST (test_large_empty); +DEFINE_PERFORMANCE_TEST (test_american_empty); +DEFINE_PERFORMANCE_TEST (test_american_sparse); +DEFINE_PERFORMANCE_TEST (test_american_half); +DEFINE_PERFORMANCE_TEST (test_american_most); +DEFINE_PERFORMANCE_TEST (test_american_full); +DEFINE_PERFORMANCE_TEST (test_cryptic_empty); +DEFINE_PERFORMANCE_TEST (test_cryptic_sparse); +DEFINE_PERFORMANCE_TEST (test_cryptic_half); +DEFINE_PERFORMANCE_TEST (test_cryptic_most); +DEFINE_PERFORMANCE_TEST (test_cryptic_full); +#endif + + +/* Add tests*/ + +#define ADD_CORRECTNESS_TEST(test_name, file_name) \ + g_test_add ("/clue_matches/" #test_name, \ + CorrectnessTestFixture, \ + "tests/clue-matches/" file_name, \ + correctness_fixture_set_up, \ + test_name, \ + correctness_fixture_tear_down) + + +#define ADD_PERFORMANCE_TEST(test_name, file_name) \ + \ + PerformanceTestUserData test_name##_user_data; \ + test_name##_user_data.ipuz_file_path = \ + "tests/clue-matches/" file_name; \ + test_name##_user_data.combined_runtime = &combined_runtime; \ + \ + g_test_add ("/clue_matches/" #test_name, \ + PerformanceTestFixture, \ + &test_name##_user_data, \ + performance_fixture_set_up, \ + test_name, \ + performance_fixture_tear_down); \ + \ + num_performance_tests++ + + int main (int argc, char **argv) { - g_test_init (&argc, &argv, NULL); + int retval; - ADD_IPUZ_TEST (test_simple_across_ipuz, "simple-across.ipuz"); - ADD_IPUZ_TEST (test_simple_down_ipuz, "simple-down.ipuz"); - ADD_IPUZ_TEST (test_valid_intersection_ipuz, "valid-intersection.ipuz"); - ADD_IPUZ_TEST (test_invalid_intersection_ipuz, "invalid-intersection.ipuz"); - ADD_IPUZ_TEST (test_dense_ipuz, "dense.ipuz"); - ADD_IPUZ_TEST (test_block_cells_ipuz, "block-cells.ipuz"); - ADD_IPUZ_TEST (test_null_cells_ipuz, "null-cells.ipuz"); - ADD_IPUZ_TEST (test_rebus_ipuz, "rebus.ipuz"); + #ifdef RUN_PERFORMANCE_TESTS + guint num_performance_tests = 0; + gfloat combined_runtime = 0; + #endif + + g_test_init (&argc, &argv, NULL); - return g_test_run (); + ADD_CORRECTNESS_TEST (test_simple_across_ipuz, "simple-across.ipuz"); + ADD_CORRECTNESS_TEST (test_simple_down_ipuz, "simple-down.ipuz"); + ADD_CORRECTNESS_TEST (test_valid_intersection_ipuz, "valid-intersection.ipuz"); + ADD_CORRECTNESS_TEST (test_invalid_intersection_ipuz, "invalid-intersection.ipuz"); + ADD_CORRECTNESS_TEST (test_dense_ipuz, "dense.ipuz"); + ADD_CORRECTNESS_TEST (test_block_cells_ipuz, "block-cells.ipuz"); + ADD_CORRECTNESS_TEST (test_null_cells_ipuz, "null-cells.ipuz"); + ADD_CORRECTNESS_TEST (test_rebus_ipuz, "rebus.ipuz"); + + #ifdef RUN_PERFORMANCE_TESTS + ADD_PERFORMANCE_TEST (test_large_empty, "large-empty.ipuz"); + ADD_PERFORMANCE_TEST (test_american_empty, "american-empty.ipuz"); + ADD_PERFORMANCE_TEST (test_american_sparse, "american-sparse.ipuz"); + ADD_PERFORMANCE_TEST (test_american_half, "american-half.ipuz"); + ADD_PERFORMANCE_TEST (test_american_most, "american-most.ipuz"); + ADD_PERFORMANCE_TEST (test_american_full, "american-full.ipuz"); + ADD_PERFORMANCE_TEST (test_cryptic_empty, "cryptic-empty.ipuz"); + ADD_PERFORMANCE_TEST (test_cryptic_sparse, "cryptic-sparse.ipuz"); + ADD_PERFORMANCE_TEST (test_cryptic_half, "cryptic-half.ipuz"); + ADD_PERFORMANCE_TEST (test_cryptic_most, "cryptic-most.ipuz"); + ADD_PERFORMANCE_TEST (test_cryptic_full, "cryptic-full.ipuz"); + #endif + + retval = g_test_run (); + + #ifdef RUN_PERFORMANCE_TESTS + g_message (" "); + g_message ("**************************************"); + g_message ("* PERFORMANCE TESTS RESULTS *"); + g_message ("* *"); + g_message ("* Combined runtime: %f seconds *", combined_runtime); + g_message ("* Average runtime: %f seconds *", combined_runtime / + num_performance_tests); + g_message ("**************************************"); + g_message (" "); + #endif + + return retval; } diff --git a/src/tests/clue-matches/american-empty.ipuz b/src/tests/clue-matches/american-empty.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..9cd1e90bf1e0c2c9756793e5b543da612cf3584b --- /dev/null +++ b/src/tests/clue-matches/american-empty.ipuz @@ -0,0 +1,856 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : " 0 ", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4, + "#", + 5, + 6, + 7, + 8, + "#", + 9, + 10, + 11, + 12, + 13 + ], + [ + 14, + 0, + 0, + 0, + "#", + 15, + 0, + 0, + 0, + "#", + 16, + 0, + 0, + 0, + 0 + ], + [ + 17, + 0, + 0, + 0, + "#", + 18, + 0, + 0, + 0, + "#", + 19, + 0, + 0, + 0, + 0 + ], + [ + 20, + 0, + 0, + 0, + 21, + "#", + 22, + 0, + 0, + "#", + 23, + 0, + 0, + 0, + 0 + ], + [ + 24, + 0, + 0, + 0, + 0, + 25, + "#", + "#", + 26, + 27, + 0, + 0, + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + "#", + 28, + 0, + 29, + 30, + "#", + 31, + 0, + 0, + 32, + 33, + 34 + ], + [ + 35, + 36, + 37, + 38, + "#", + 39, + 0, + 0, + 40, + 0, + "#", + 41, + 0, + 0, + 0 + ], + [ + 42, + 0, + 0, + 0, + "#", + 43, + 0, + 0, + 0, + 0, + "#", + 44, + 0, + 0, + 0 + ], + [ + 45, + 0, + 0, + 0, + "#", + 46, + 0, + 0, + 0, + 0, + "#", + 47, + 0, + 0, + 0 + ], + [ + 48, + 0, + 0, + 0, + 49, + 0, + "#", + 50, + 0, + 0, + 51, + "#", + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + 52, + 0, + 0, + 53, + "#", + "#", + 54, + 0, + 55, + 56, + 57, + 58 + ], + [ + 59, + 60, + 61, + 0, + 0, + "#", + 62, + 63, + 64, + "#", + 65, + 0, + 0, + 0, + 0 + ], + [ + 66, + 0, + 0, + 0, + 0, + "#", + 67, + 0, + 0, + 68, + "#", + 69, + 0, + 0, + 0 + ], + [ + 70, + 0, + 0, + 0, + 0, + "#", + 71, + 0, + 0, + 0, + "#", + 72, + 0, + 0, + 0 + ], + [ + 73, + 0, + 0, + 0, + 0, + "#", + 74, + 0, + 0, + 0, + "#", + 75, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 9, + null + ], + [ + 14, + null + ], + [ + 15, + null + ], + [ + 16, + null + ], + [ + 17, + null + ], + [ + 18, + null + ], + [ + 19, + null + ], + [ + 20, + null + ], + [ + 22, + null + ], + [ + 23, + null + ], + [ + 24, + null + ], + [ + 26, + null + ], + [ + 28, + null + ], + [ + 31, + null + ], + [ + 35, + null + ], + [ + 39, + null + ], + [ + 41, + null + ], + [ + 42, + null + ], + [ + 43, + null + ], + [ + 44, + null + ], + [ + 45, + null + ], + [ + 46, + null + ], + [ + 47, + null + ], + [ + 48, + null + ], + [ + 50, + null + ], + [ + 52, + null + ], + [ + 54, + null + ], + [ + 59, + null + ], + [ + 62, + null + ], + [ + 65, + null + ], + [ + 66, + null + ], + [ + 67, + null + ], + [ + 69, + null + ], + [ + 70, + null + ], + [ + 71, + null + ], + [ + 72, + null + ], + [ + 73, + null + ], + [ + 74, + null + ], + [ + 75, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ], + [ + 8, + null + ], + [ + 9, + null + ], + [ + 10, + null + ], + [ + 11, + null + ], + [ + 12, + null + ], + [ + 13, + null + ], + [ + 21, + null + ], + [ + 25, + null + ], + [ + 27, + null + ], + [ + 29, + null + ], + [ + 30, + null + ], + [ + 32, + null + ], + [ + 33, + null + ], + [ + 34, + null + ], + [ + 35, + null + ], + [ + 36, + null + ], + [ + 37, + null + ], + [ + 38, + null + ], + [ + 40, + null + ], + [ + 49, + null + ], + [ + 51, + null + ], + [ + 53, + null + ], + [ + 55, + null + ], + [ + 56, + null + ], + [ + 57, + null + ], + [ + 58, + null + ], + [ + 59, + null + ], + [ + 60, + null + ], + [ + 61, + null + ], + [ + 63, + null + ], + [ + 64, + null + ], + [ + 68, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/american-full.ipuz b/src/tests/clue-matches/american-full.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..0ea67ac6c0979c42157aa870f11011f65a3417da --- /dev/null +++ b/src/tests/clue-matches/american-full.ipuz @@ -0,0 +1,856 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : " 0 ", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4, + "#", + 5, + 6, + 7, + 8, + "#", + 9, + 10, + 11, + 12, + 13 + ], + [ + 14, + 0, + 0, + 0, + "#", + 15, + 0, + 0, + 0, + "#", + 16, + 0, + 0, + 0, + 0 + ], + [ + 17, + 0, + 0, + 0, + "#", + 18, + 0, + 0, + 0, + "#", + 19, + 0, + 0, + 0, + 0 + ], + [ + 20, + 0, + 0, + 0, + 21, + "#", + 22, + 0, + 0, + "#", + 23, + 0, + 0, + 0, + 0 + ], + [ + 24, + 0, + 0, + 0, + 0, + 25, + "#", + "#", + 26, + 27, + 0, + 0, + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + "#", + 28, + 0, + 29, + 30, + "#", + 31, + 0, + 0, + 32, + 33, + 34 + ], + [ + 35, + 36, + 37, + 38, + "#", + 39, + 0, + 0, + 40, + 0, + "#", + 41, + 0, + 0, + 0 + ], + [ + 42, + 0, + 0, + 0, + "#", + 43, + 0, + 0, + 0, + 0, + "#", + 44, + 0, + 0, + 0 + ], + [ + 45, + 0, + 0, + 0, + "#", + 46, + 0, + 0, + 0, + 0, + "#", + 47, + 0, + 0, + 0 + ], + [ + 48, + 0, + 0, + 0, + 49, + 0, + "#", + 50, + 0, + 0, + 51, + "#", + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + 52, + 0, + 0, + 53, + "#", + "#", + 54, + 0, + 55, + 56, + 57, + 58 + ], + [ + 59, + 60, + 61, + 0, + 0, + "#", + 62, + 63, + 64, + "#", + 65, + 0, + 0, + 0, + 0 + ], + [ + 66, + 0, + 0, + 0, + 0, + "#", + 67, + 0, + 0, + 68, + "#", + 69, + 0, + 0, + 0 + ], + [ + 70, + 0, + 0, + 0, + 0, + "#", + 71, + 0, + 0, + 0, + "#", + 72, + 0, + 0, + 0 + ], + [ + 73, + 0, + 0, + 0, + 0, + "#", + 74, + 0, + 0, + 0, + "#", + 75, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "S", + "O", + "A", + "S", + null, + "D", + "A", + "A", + "E", + null, + "S", + "N", + "A", + "P", + "S" + ], + [ + "T", + "O", + "N", + "E", + null, + "I", + "A", + "A", + "S", + null, + "A", + "O", + "R", + "T", + "A" + ], + [ + "I", + "O", + "A", + "N", + null, + "S", + "A", + "R", + "S", + null, + "T", + "O", + "N", + "E", + "R" + ], + [ + "E", + "L", + "I", + "E", + "S", + null, + "S", + "E", + "E", + null, + "A", + "N", + "E", + "R", + "A" + ], + [ + "S", + "A", + "S", + "S", + "E", + "S", + null, + null, + "S", + "A", + "N", + "E", + null, + null, + null + ], + [ + null, + null, + null, + null, + "S", + "E", + "S", + "S", + null, + "T", + "S", + "E", + "T", + "S", + "E" + ], + [ + "S", + "I", + "S", + "S", + null, + "S", + "E", + "R", + "T", + "A", + null, + "L", + "E", + "E", + "R" + ], + [ + "I", + "E", + "A", + "T", + null, + "A", + "E", + "T", + "A", + "T", + null, + "S", + "O", + "R", + "E" + ], + [ + "R", + "E", + "N", + "A", + null, + "M", + "A", + "A", + "E", + "R", + null, + "E", + "S", + "E", + "S" + ], + [ + "S", + "E", + "A", + "T", + "E", + "E", + null, + "S", + "L", + "O", + "T", + null, + null, + null, + null + ], + [ + null, + null, + null, + "E", + "A", + "S", + "E", + null, + null, + "T", + "A", + "S", + "S", + "E", + "S" + ], + [ + "C", + "O", + "S", + "T", + "S", + null, + "T", + "E", + "S", + null, + "S", + "O", + "L", + "E", + "A" + ], + [ + "O", + "R", + "A", + "R", + "E", + null, + "R", + "E", + "A", + "S", + null, + "C", + "A", + "R", + "S" + ], + [ + "R", + "A", + "R", + "E", + "R", + null, + "E", + "E", + "E", + "S", + null, + "A", + "R", + "I", + "E" + ], + [ + "T", + "E", + "T", + "E", + "S", + null, + "S", + "E", + "S", + "E", + null, + "N", + "A", + "E", + "S" + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 9, + null + ], + [ + 14, + null + ], + [ + 15, + null + ], + [ + 16, + null + ], + [ + 17, + null + ], + [ + 18, + null + ], + [ + 19, + null + ], + [ + 20, + null + ], + [ + 22, + null + ], + [ + 23, + null + ], + [ + 24, + null + ], + [ + 26, + null + ], + [ + 28, + null + ], + [ + 31, + null + ], + [ + 35, + null + ], + [ + 39, + null + ], + [ + 41, + null + ], + [ + 42, + null + ], + [ + 43, + null + ], + [ + 44, + null + ], + [ + 45, + null + ], + [ + 46, + null + ], + [ + 47, + null + ], + [ + 48, + null + ], + [ + 50, + null + ], + [ + 52, + null + ], + [ + 54, + null + ], + [ + 59, + null + ], + [ + 62, + null + ], + [ + 65, + null + ], + [ + 66, + null + ], + [ + 67, + null + ], + [ + 69, + null + ], + [ + 70, + null + ], + [ + 71, + null + ], + [ + 72, + null + ], + [ + 73, + null + ], + [ + 74, + null + ], + [ + 75, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ], + [ + 8, + null + ], + [ + 9, + null + ], + [ + 10, + null + ], + [ + 11, + null + ], + [ + 12, + null + ], + [ + 13, + null + ], + [ + 21, + null + ], + [ + 25, + null + ], + [ + 27, + null + ], + [ + 29, + null + ], + [ + 30, + null + ], + [ + 32, + null + ], + [ + 33, + null + ], + [ + 34, + null + ], + [ + 35, + null + ], + [ + 36, + null + ], + [ + 37, + null + ], + [ + 38, + null + ], + [ + 40, + null + ], + [ + 49, + null + ], + [ + 51, + null + ], + [ + 53, + null + ], + [ + 55, + null + ], + [ + 56, + null + ], + [ + 57, + null + ], + [ + 58, + null + ], + [ + 59, + null + ], + [ + 60, + null + ], + [ + 61, + null + ], + [ + 63, + null + ], + [ + 64, + null + ], + [ + 68, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/american-half.ipuz b/src/tests/clue-matches/american-half.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..808b9795f2a8add847dcdc67b3470891fe3af0bd --- /dev/null +++ b/src/tests/clue-matches/american-half.ipuz @@ -0,0 +1,856 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : " 0 ", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4, + "#", + 5, + 6, + 7, + 8, + "#", + 9, + 10, + 11, + 12, + 13 + ], + [ + 14, + 0, + 0, + 0, + "#", + 15, + 0, + 0, + 0, + "#", + 16, + 0, + 0, + 0, + 0 + ], + [ + 17, + 0, + 0, + 0, + "#", + 18, + 0, + 0, + 0, + "#", + 19, + 0, + 0, + 0, + 0 + ], + [ + 20, + 0, + 0, + 0, + 21, + "#", + 22, + 0, + 0, + "#", + 23, + 0, + 0, + 0, + 0 + ], + [ + 24, + 0, + 0, + 0, + 0, + 25, + "#", + "#", + 26, + 27, + 0, + 0, + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + "#", + 28, + 0, + 29, + 30, + "#", + 31, + 0, + 0, + 32, + 33, + 34 + ], + [ + 35, + 36, + 37, + 38, + "#", + 39, + 0, + 0, + 40, + 0, + "#", + 41, + 0, + 0, + 0 + ], + [ + 42, + 0, + 0, + 0, + "#", + 43, + 0, + 0, + 0, + 0, + "#", + 44, + 0, + 0, + 0 + ], + [ + 45, + 0, + 0, + 0, + "#", + 46, + 0, + 0, + 0, + 0, + "#", + 47, + 0, + 0, + 0 + ], + [ + 48, + 0, + 0, + 0, + 49, + 0, + "#", + 50, + 0, + 0, + 51, + "#", + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + 52, + 0, + 0, + 53, + "#", + "#", + 54, + 0, + 55, + 56, + 57, + 58 + ], + [ + 59, + 60, + 61, + 0, + 0, + "#", + 62, + 63, + 64, + "#", + 65, + 0, + 0, + 0, + 0 + ], + [ + 66, + 0, + 0, + 0, + 0, + "#", + 67, + 0, + 0, + 68, + "#", + 69, + 0, + 0, + 0 + ], + [ + 70, + 0, + 0, + 0, + 0, + "#", + 71, + 0, + 0, + 0, + "#", + 72, + 0, + 0, + 0 + ], + [ + 73, + 0, + 0, + 0, + 0, + "#", + 74, + 0, + 0, + 0, + "#", + 75, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + null, + null, + null, + null, + null, + null, + "S", + "A", + "S", + null, + null, + "O", + null, + null, + "BA" + ], + [ + null, + null, + null, + null, + null, + null, + "A", + "R", + "A", + null, + null, + "R", + "A", + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + "E", + "E", + "A", + null, + null, + "A", + null, + null, + "AN" + ], + [ + null, + null, + null, + null, + null, + null, + "S", + "A", + "L", + null, + null, + "T", + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + "E", + null, + null, + "O", + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + "W", + null, + null, + "M", + "E", + "R", + "G", + "E", + "S" + ], + [ + "K", + "E", + "L", + "P", + null, + "C", + "O", + null, + "C", + "H", + null, + "I", + null, + null, + "E" + ], + [ + null, + "A", + "E", + null, + null, + "N", + null, + "B", + "L", + "E", + null, + "E", + "E", + null, + "E" + ], + [ + "C", + "R", + "A", + "P", + null, + "A", + "L", + "I", + "A", + null, + null, + "S", + "A", + "R", + "S" + ], + [ + null, + "S", + "P", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "A", + null, + null + ], + [ + "A", + "A", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "W", + null, + null + ], + [ + "C", + "D", + "D", + null, + "D", + null, + "Z", + null, + "R", + "O", + null, + "B", + "A", + "N", + "K" + ], + [ + "H", + "D", + null, + null, + null, + null, + null, + null, + "E", + null, + null, + null, + "K", + null, + "E" + ], + [ + "E", + "S", + null, + null, + "D", + null, + "E", + null, + "I", + "T", + null, + null, + "E", + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 9, + null + ], + [ + 14, + null + ], + [ + 15, + null + ], + [ + 16, + null + ], + [ + 17, + null + ], + [ + 18, + null + ], + [ + 19, + null + ], + [ + 20, + null + ], + [ + 22, + null + ], + [ + 23, + null + ], + [ + 24, + null + ], + [ + 26, + null + ], + [ + 28, + null + ], + [ + 31, + null + ], + [ + 35, + null + ], + [ + 39, + null + ], + [ + 41, + null + ], + [ + 42, + null + ], + [ + 43, + null + ], + [ + 44, + null + ], + [ + 45, + null + ], + [ + 46, + null + ], + [ + 47, + null + ], + [ + 48, + null + ], + [ + 50, + null + ], + [ + 52, + null + ], + [ + 54, + null + ], + [ + 59, + null + ], + [ + 62, + null + ], + [ + 65, + null + ], + [ + 66, + null + ], + [ + 67, + null + ], + [ + 69, + null + ], + [ + 70, + null + ], + [ + 71, + null + ], + [ + 72, + null + ], + [ + 73, + null + ], + [ + 74, + null + ], + [ + 75, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ], + [ + 8, + null + ], + [ + 9, + null + ], + [ + 10, + null + ], + [ + 11, + null + ], + [ + 12, + null + ], + [ + 13, + null + ], + [ + 21, + null + ], + [ + 25, + null + ], + [ + 27, + null + ], + [ + 29, + null + ], + [ + 30, + null + ], + [ + 32, + null + ], + [ + 33, + null + ], + [ + 34, + null + ], + [ + 35, + null + ], + [ + 36, + null + ], + [ + 37, + null + ], + [ + 38, + null + ], + [ + 40, + null + ], + [ + 49, + null + ], + [ + 51, + null + ], + [ + 53, + null + ], + [ + 55, + null + ], + [ + 56, + null + ], + [ + 57, + null + ], + [ + 58, + null + ], + [ + 59, + null + ], + [ + 60, + null + ], + [ + 61, + null + ], + [ + 63, + null + ], + [ + 64, + null + ], + [ + 68, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/american-most.ipuz b/src/tests/clue-matches/american-most.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..debcebfa83119946ceed2b3bdaf55b1daac177fc --- /dev/null +++ b/src/tests/clue-matches/american-most.ipuz @@ -0,0 +1,856 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : " 0 ", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4, + "#", + 5, + 6, + 7, + 8, + "#", + 9, + 10, + 11, + 12, + 13 + ], + [ + 14, + 0, + 0, + 0, + "#", + 15, + 0, + 0, + 0, + "#", + 16, + 0, + 0, + 0, + 0 + ], + [ + 17, + 0, + 0, + 0, + "#", + 18, + 0, + 0, + 0, + "#", + 19, + 0, + 0, + 0, + 0 + ], + [ + 20, + 0, + 0, + 0, + 21, + "#", + 22, + 0, + 0, + "#", + 23, + 0, + 0, + 0, + 0 + ], + [ + 24, + 0, + 0, + 0, + 0, + 25, + "#", + "#", + 26, + 27, + 0, + 0, + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + "#", + 28, + 0, + 29, + 30, + "#", + 31, + 0, + 0, + 32, + 33, + 34 + ], + [ + 35, + 36, + 37, + 38, + "#", + 39, + 0, + 0, + 40, + 0, + "#", + 41, + 0, + 0, + 0 + ], + [ + 42, + 0, + 0, + 0, + "#", + 43, + 0, + 0, + 0, + 0, + "#", + 44, + 0, + 0, + 0 + ], + [ + 45, + 0, + 0, + 0, + "#", + 46, + 0, + 0, + 0, + 0, + "#", + 47, + 0, + 0, + 0 + ], + [ + 48, + 0, + 0, + 0, + 49, + 0, + "#", + 50, + 0, + 0, + 51, + "#", + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + 52, + 0, + 0, + 53, + "#", + "#", + 54, + 0, + 55, + 56, + 57, + 58 + ], + [ + 59, + 60, + 61, + 0, + 0, + "#", + 62, + 63, + 64, + "#", + 65, + 0, + 0, + 0, + 0 + ], + [ + 66, + 0, + 0, + 0, + 0, + "#", + 67, + 0, + 0, + 68, + "#", + 69, + 0, + 0, + 0 + ], + [ + 70, + 0, + 0, + 0, + 0, + "#", + 71, + 0, + 0, + 0, + "#", + 72, + 0, + 0, + 0 + ], + [ + 73, + 0, + 0, + 0, + 0, + "#", + 74, + 0, + 0, + 0, + "#", + 75, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "O", + "W", + null, + null, + null, + null, + "S", + "A", + "S", + null, + null, + "O", + "R", + "U", + "BA" + ], + [ + null, + "A", + null, + "L", + null, + null, + "A", + "R", + "A", + null, + null, + "R", + "A", + "R", + null + ], + [ + null, + "R", + "R", + "O", + null, + null, + "E", + "E", + "A", + null, + "T", + "A", + "I", + "N", + "A" + ], + [ + null, + "I", + null, + null, + null, + null, + "S", + "A", + "L", + null, + "S", + "T", + "A", + "S", + "I" + ], + [ + null, + "O", + "K", + null, + null, + null, + null, + null, + "E", + null, + null, + "O", + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + "W", + null, + null, + "M", + "E", + "R", + "G", + "E", + "S" + ], + [ + "K", + "E", + "L", + "P", + null, + "C", + "O", + null, + "C", + "H", + null, + "I", + "A", + "R", + "E" + ], + [ + null, + "A", + "E", + null, + null, + "N", + null, + "B", + "L", + "E", + null, + "E", + "E", + "E", + "E" + ], + [ + "C", + "R", + "A", + "P", + null, + "A", + "L", + "I", + "A", + null, + null, + "S", + "A", + "R", + "S" + ], + [ + null, + "S", + "P", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + "T", + "O", + "G", + "A", + "E", + "D" + ], + [ + "A", + "A", + null, + null, + null, + null, + null, + null, + "D", + null, + "T", + "O", + "W", + "N", + "E" + ], + [ + "C", + "D", + "D", + null, + "D", + null, + "Z", + "E", + "R", + "O", + null, + "B", + "A", + "N", + "K" + ], + [ + "H", + "D", + "D", + "V", + "D", + null, + null, + null, + "E", + "U", + null, + "A", + "K", + "E", + "E" + ], + [ + "E", + "S", + null, + null, + "D", + null, + "E", + "X", + "I", + "T", + null, + "T", + "E", + "A", + "S" + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 9, + null + ], + [ + 14, + null + ], + [ + 15, + null + ], + [ + 16, + null + ], + [ + 17, + null + ], + [ + 18, + null + ], + [ + 19, + null + ], + [ + 20, + null + ], + [ + 22, + null + ], + [ + 23, + null + ], + [ + 24, + null + ], + [ + 26, + null + ], + [ + 28, + null + ], + [ + 31, + null + ], + [ + 35, + null + ], + [ + 39, + null + ], + [ + 41, + null + ], + [ + 42, + null + ], + [ + 43, + null + ], + [ + 44, + null + ], + [ + 45, + null + ], + [ + 46, + null + ], + [ + 47, + null + ], + [ + 48, + null + ], + [ + 50, + null + ], + [ + 52, + null + ], + [ + 54, + null + ], + [ + 59, + null + ], + [ + 62, + null + ], + [ + 65, + null + ], + [ + 66, + null + ], + [ + 67, + null + ], + [ + 69, + null + ], + [ + 70, + null + ], + [ + 71, + null + ], + [ + 72, + null + ], + [ + 73, + null + ], + [ + 74, + null + ], + [ + 75, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ], + [ + 8, + null + ], + [ + 9, + null + ], + [ + 10, + null + ], + [ + 11, + null + ], + [ + 12, + null + ], + [ + 13, + null + ], + [ + 21, + null + ], + [ + 25, + null + ], + [ + 27, + null + ], + [ + 29, + null + ], + [ + 30, + null + ], + [ + 32, + null + ], + [ + 33, + null + ], + [ + 34, + null + ], + [ + 35, + null + ], + [ + 36, + null + ], + [ + 37, + null + ], + [ + 38, + null + ], + [ + 40, + null + ], + [ + 49, + null + ], + [ + 51, + null + ], + [ + 53, + null + ], + [ + 55, + null + ], + [ + 56, + null + ], + [ + 57, + null + ], + [ + 58, + null + ], + [ + 59, + null + ], + [ + 60, + null + ], + [ + 61, + null + ], + [ + 63, + null + ], + [ + 64, + null + ], + [ + 68, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/american-sparse.ipuz b/src/tests/clue-matches/american-sparse.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..246e459d24d5ffd97828c68c79390779df836ab4 --- /dev/null +++ b/src/tests/clue-matches/american-sparse.ipuz @@ -0,0 +1,856 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : " 0 ", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4, + "#", + 5, + 6, + 7, + 8, + "#", + 9, + 10, + 11, + 12, + 13 + ], + [ + 14, + 0, + 0, + 0, + "#", + 15, + 0, + 0, + 0, + "#", + 16, + 0, + 0, + 0, + 0 + ], + [ + 17, + 0, + 0, + 0, + "#", + 18, + 0, + 0, + 0, + "#", + 19, + 0, + 0, + 0, + 0 + ], + [ + 20, + 0, + 0, + 0, + 21, + "#", + 22, + 0, + 0, + "#", + 23, + 0, + 0, + 0, + 0 + ], + [ + 24, + 0, + 0, + 0, + 0, + 25, + "#", + "#", + 26, + 27, + 0, + 0, + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + "#", + 28, + 0, + 29, + 30, + "#", + 31, + 0, + 0, + 32, + 33, + 34 + ], + [ + 35, + 36, + 37, + 38, + "#", + 39, + 0, + 0, + 40, + 0, + "#", + 41, + 0, + 0, + 0 + ], + [ + 42, + 0, + 0, + 0, + "#", + 43, + 0, + 0, + 0, + 0, + "#", + 44, + 0, + 0, + 0 + ], + [ + 45, + 0, + 0, + 0, + "#", + 46, + 0, + 0, + 0, + 0, + "#", + 47, + 0, + 0, + 0 + ], + [ + 48, + 0, + 0, + 0, + 49, + 0, + "#", + 50, + 0, + 0, + 51, + "#", + "#", + "#", + "#" + ], + [ + "#", + "#", + "#", + 52, + 0, + 0, + 53, + "#", + "#", + 54, + 0, + 55, + 56, + 57, + 58 + ], + [ + 59, + 60, + 61, + 0, + 0, + "#", + 62, + 63, + 64, + "#", + 65, + 0, + 0, + 0, + 0 + ], + [ + 66, + 0, + 0, + 0, + 0, + "#", + 67, + 0, + 0, + 68, + "#", + 69, + 0, + 0, + 0 + ], + [ + 70, + 0, + 0, + 0, + 0, + "#", + 71, + 0, + 0, + 0, + "#", + 72, + 0, + 0, + 0 + ], + [ + 73, + 0, + 0, + 0, + 0, + "#", + 74, + 0, + 0, + 0, + "#", + 75, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + null, + null, + null, + null, + null, + null, + "S", + "A", + null, + null, + null, + null, + null, + null, + "BA" + ], + [ + null, + null, + null, + null, + null, + null, + "A", + "R", + null, + null, + null, + null, + null, + null, + "N" + ], + [ + null, + null, + null, + null, + null, + null, + "E", + "E", + null, + null, + null, + null, + null, + null, + "AN" + ], + [ + null, + null, + null, + null, + null, + null, + "S", + "A", + null, + null, + null, + null, + null, + null, + "A" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + "W", + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + "C", + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + "O", + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + "C", + "R", + "A", + "P", + null, + null, + null, + null, + "A", + null, + null, + "A", + "L", + "S", + "O" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "A", + null, + null + ], + [ + "A", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "W", + null, + null + ], + [ + "C", + null, + null, + null, + null, + null, + "Z", + null, + "R", + "O", + null, + "B", + "A", + "N", + "K" + ], + [ + "H", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "K", + null, + null + ], + [ + "E", + null, + null, + null, + null, + null, + "E", + null, + "I", + "T", + null, + null, + "E", + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 5, + null + ], + [ + 9, + null + ], + [ + 14, + null + ], + [ + 15, + null + ], + [ + 16, + null + ], + [ + 17, + null + ], + [ + 18, + null + ], + [ + 19, + null + ], + [ + 20, + null + ], + [ + 22, + null + ], + [ + 23, + null + ], + [ + 24, + null + ], + [ + 26, + null + ], + [ + 28, + null + ], + [ + 31, + null + ], + [ + 35, + null + ], + [ + 39, + null + ], + [ + 41, + null + ], + [ + 42, + null + ], + [ + 43, + null + ], + [ + 44, + null + ], + [ + 45, + null + ], + [ + 46, + null + ], + [ + 47, + null + ], + [ + 48, + null + ], + [ + 50, + null + ], + [ + 52, + null + ], + [ + 54, + null + ], + [ + 59, + null + ], + [ + 62, + null + ], + [ + 65, + null + ], + [ + 66, + null + ], + [ + 67, + null + ], + [ + 69, + null + ], + [ + 70, + null + ], + [ + 71, + null + ], + [ + 72, + null + ], + [ + 73, + null + ], + [ + 74, + null + ], + [ + 75, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ], + [ + 8, + null + ], + [ + 9, + null + ], + [ + 10, + null + ], + [ + 11, + null + ], + [ + 12, + null + ], + [ + 13, + null + ], + [ + 21, + null + ], + [ + 25, + null + ], + [ + 27, + null + ], + [ + 29, + null + ], + [ + 30, + null + ], + [ + 32, + null + ], + [ + 33, + null + ], + [ + 34, + null + ], + [ + 35, + null + ], + [ + 36, + null + ], + [ + 37, + null + ], + [ + 38, + null + ], + [ + 40, + null + ], + [ + 49, + null + ], + [ + 51, + null + ], + [ + 53, + null + ], + [ + 55, + null + ], + [ + 56, + null + ], + [ + 57, + null + ], + [ + 58, + null + ], + [ + 59, + null + ], + [ + 60, + null + ], + [ + 61, + null + ], + [ + 63, + null + ], + [ + 64, + null + ], + [ + 68, + null + ] + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/cryptic-empty.ipuz b/src/tests/clue-matches/cryptic-empty.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..30f2abdca6a78440cef76898c90b5fd89c69a6b8 --- /dev/null +++ b/src/tests/clue-matches/cryptic-empty.ipuz @@ -0,0 +1,1649 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1", + "http://ipuz.org/crossword/crypticcrossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Cryptic Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 0, + 2, + 0, + 3, + 0, + "#", + 4, + 5, + 0, + 6, + 0, + 7, + 0, + 8 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + "#", + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 11, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 12, + 0, + 0, + 0, + 0, + "#", + 13, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 15, + 0, + 0, + "#", + "#", + 0, + "#", + "#", + 0, + "#", + 0 + ], + [ + 16, + 0, + 0, + 0, + 0, + "#", + 17, + 0, + 18, + 0, + 19, + 0, + "#", + "#", + "#" + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 20, + "#", + 21 + ], + [ + "#", + "#", + "#", + 22, + 0, + 23, + 0, + 0, + 0, + "#", + 24, + 0, + 0, + 0, + 0 + ], + [ + 25, + "#", + 26, + "#", + "#", + 0, + "#", + "#", + 27, + 0, + 0, + "#", + 0, + "#", + 0 + ], + [ + 28, + 0, + 0, + 0, + 29, + 0, + 30, + 0, + 0, + "#", + 31, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 33, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 34, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 35, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + ], + "showenumerations" : true, + "clues" : { + "Across:Across" : [ + { + "number" : 1, + "enumeration" : "6", + "cells" : [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ] + }, + { + "number" : 4, + "enumeration" : "8", + "cells" : [ + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 11, + 0 + ], + [ + 12, + 0 + ], + [ + 13, + 0 + ], + [ + 14, + 0 + ] + ] + }, + { + "number" : 9, + "enumeration" : "6", + "cells" : [ + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ] + }, + { + "number" : 10, + "enumeration" : "8", + "cells" : [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 11, + 2 + ], + [ + 12, + 2 + ], + [ + 13, + 2 + ], + [ + 14, + 2 + ] + ] + }, + { + "number" : 12, + "enumeration" : "5", + "cells" : [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ] + }, + { + "number" : 13, + "enumeration" : "9", + "cells" : [ + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 11, + 4 + ], + [ + 12, + 4 + ], + [ + 13, + 4 + ], + [ + 14, + 4 + ] + ] + }, + { + "number" : 15, + "enumeration" : "3", + "cells" : [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ] + }, + { + "number" : 16, + "enumeration" : "5", + "cells" : [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ] + }, + { + "number" : 17, + "enumeration" : "6", + "cells" : [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 10, + 6 + ], + [ + 11, + 6 + ] + ] + }, + { + "number" : 22, + "enumeration" : "6", + "cells" : [ + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ] + }, + { + "number" : 24, + "enumeration" : "5", + "cells" : [ + [ + 10, + 8 + ], + [ + 11, + 8 + ], + [ + 12, + 8 + ], + [ + 13, + 8 + ], + [ + 14, + 8 + ] + ] + }, + { + "number" : 27, + "enumeration" : "3", + "cells" : [ + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ] + ] + }, + { + "number" : 28, + "enumeration" : "9", + "cells" : [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ] + ] + }, + { + "number" : 31, + "enumeration" : "5", + "cells" : [ + [ + 10, + 10 + ], + [ + 11, + 10 + ], + [ + 12, + 10 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ] + ] + }, + { + "number" : 32, + "enumeration" : "8", + "cells" : [ + [ + 0, + 12 + ], + [ + 1, + 12 + ], + [ + 2, + 12 + ], + [ + 3, + 12 + ], + [ + 4, + 12 + ], + [ + 5, + 12 + ], + [ + 6, + 12 + ], + [ + 7, + 12 + ] + ] + }, + { + "number" : 33, + "enumeration" : "6", + "cells" : [ + [ + 9, + 12 + ], + [ + 10, + 12 + ], + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 12 + ], + [ + 14, + 12 + ] + ] + }, + { + "number" : 34, + "enumeration" : "8", + "cells" : [ + [ + 0, + 14 + ], + [ + 1, + 14 + ], + [ + 2, + 14 + ], + [ + 3, + 14 + ], + [ + 4, + 14 + ], + [ + 5, + 14 + ], + [ + 6, + 14 + ], + [ + 7, + 14 + ] + ] + }, + { + "number" : 35, + "enumeration" : "6", + "cells" : [ + [ + 9, + 14 + ], + [ + 10, + 14 + ], + [ + 11, + 14 + ], + [ + 12, + 14 + ], + [ + 13, + 14 + ], + [ + 14, + 14 + ] + ] + } + ], + "Down:Down" : [ + { + "number" : 1, + "enumeration" : "8", + "cells" : [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ] + }, + { + "number" : 2, + "enumeration" : "8", + "cells" : [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ] + ] + }, + { + "number" : 3, + "enumeration" : "9", + "cells" : [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ] + ] + }, + { + "number" : 5, + "enumeration" : "5", + "cells" : [ + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ] + }, + { + "number" : 6, + "enumeration" : "5", + "cells" : [ + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ] + ] + }, + { + "number" : 7, + "enumeration" : "6", + "cells" : [ + [ + 12, + 0 + ], + [ + 12, + 1 + ], + [ + 12, + 2 + ], + [ + 12, + 3 + ], + [ + 12, + 4 + ], + [ + 12, + 5 + ] + ] + }, + { + "number" : 8, + "enumeration" : "6", + "cells" : [ + [ + 14, + 0 + ], + [ + 14, + 1 + ], + [ + 14, + 2 + ], + [ + 14, + 3 + ], + [ + 14, + 4 + ], + [ + 14, + 5 + ] + ] + }, + { + "number" : 11, + "enumeration" : "6", + "cells" : [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ] + ] + }, + { + "number" : 14, + "enumeration" : "3", + "cells" : [ + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ] + ] + }, + { + "number" : 18, + "enumeration" : "6", + "cells" : [ + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 8, + 10 + ], + [ + 8, + 11 + ] + ] + }, + { + "number" : 19, + "enumeration" : "9", + "cells" : [ + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 10, + 11 + ], + [ + 10, + 12 + ], + [ + 10, + 13 + ], + [ + 10, + 14 + ] + ] + }, + { + "number" : 20, + "enumeration" : "8", + "cells" : [ + [ + 12, + 7 + ], + [ + 12, + 8 + ], + [ + 12, + 9 + ], + [ + 12, + 10 + ], + [ + 12, + 11 + ], + [ + 12, + 12 + ], + [ + 12, + 13 + ], + [ + 12, + 14 + ] + ] + }, + { + "number" : 21, + "enumeration" : "8", + "cells" : [ + [ + 14, + 7 + ], + [ + 14, + 8 + ], + [ + 14, + 9 + ], + [ + 14, + 10 + ], + [ + 14, + 11 + ], + [ + 14, + 12 + ], + [ + 14, + 13 + ], + [ + 14, + 14 + ] + ] + }, + { + "number" : 23, + "enumeration" : "3", + "cells" : [ + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ] + ] + }, + { + "number" : 25, + "enumeration" : "6", + "cells" : [ + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 0, + 11 + ], + [ + 0, + 12 + ], + [ + 0, + 13 + ], + [ + 0, + 14 + ] + ] + }, + { + "number" : 26, + "enumeration" : "6", + "cells" : [ + [ + 2, + 9 + ], + [ + 2, + 10 + ], + [ + 2, + 11 + ], + [ + 2, + 12 + ], + [ + 2, + 13 + ], + [ + 2, + 14 + ] + ] + }, + { + "number" : 29, + "enumeration" : "5", + "cells" : [ + [ + 4, + 10 + ], + [ + 4, + 11 + ], + [ + 4, + 12 + ], + [ + 4, + 13 + ], + [ + 4, + 14 + ] + ] + }, + { + "number" : 30, + "enumeration" : "5", + "cells" : [ + [ + 6, + 10 + ], + [ + 6, + 11 + ], + [ + 6, + 12 + ], + [ + 6, + 13 + ], + [ + 6, + 14 + ] + ] + } + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/cryptic-full.ipuz b/src/tests/clue-matches/cryptic-full.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..1fb8ec36e94d23d653f839a4b128c614f5d1763e --- /dev/null +++ b/src/tests/clue-matches/cryptic-full.ipuz @@ -0,0 +1,1649 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1", + "http://ipuz.org/crossword/crypticcrossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Cryptic Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 0, + 2, + 0, + 3, + 0, + "#", + 4, + 5, + 0, + 6, + 0, + 7, + 0, + 8 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + "#", + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 11, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 12, + 0, + 0, + 0, + 0, + "#", + 13, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 15, + 0, + 0, + "#", + "#", + 0, + "#", + "#", + 0, + "#", + 0 + ], + [ + 16, + 0, + 0, + 0, + 0, + "#", + 17, + 0, + 18, + 0, + 19, + 0, + "#", + "#", + "#" + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 20, + "#", + 21 + ], + [ + "#", + "#", + "#", + 22, + 0, + 23, + 0, + 0, + 0, + "#", + 24, + 0, + 0, + 0, + 0 + ], + [ + 25, + "#", + 26, + "#", + "#", + 0, + "#", + "#", + 27, + 0, + 0, + "#", + 0, + "#", + 0 + ], + [ + 28, + 0, + 0, + 0, + 29, + 0, + 30, + 0, + 0, + "#", + 31, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 33, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 34, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 35, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "S", + "E", + "A", + "V", + "E", + "R", + null, + "R", + "A", + "M", + "E", + "S", + "S", + "E", + "S" + ], + [ + "P", + null, + "W", + null, + "P", + null, + null, + null, + "R", + null, + "Y", + null, + "L", + null, + "E" + ], + [ + "A", + "M", + "A", + "Z", + "I", + "N", + null, + "W", + "A", + "T", + "E", + "R", + "I", + "E", + "R" + ], + [ + "R", + null, + "K", + null, + "S", + null, + "A", + null, + "B", + null, + "U", + null, + "M", + null, + "G" + ], + [ + "E", + "G", + "E", + "S", + "T", + null, + "S", + "I", + "S", + "E", + "P", + "U", + "E", + "D", + "E" + ], + [ + "K", + null, + "N", + null, + "A", + "B", + "S", + null, + null, + "V", + null, + null, + "R", + null, + "I" + ], + [ + "E", + "X", + "E", + "C", + "S", + null, + "A", + "S", + "S", + "E", + "S", + "S", + null, + null, + null + ], + [ + "Y", + null, + "D", + null, + "I", + null, + "I", + null, + "T", + null, + "A", + null, + "C", + null, + "C" + ], + [ + null, + null, + null, + "O", + "S", + "T", + "L", + "E", + "R", + null, + "F", + "I", + "O", + "N", + "A" + ], + [ + "G", + null, + "D", + null, + null, + "E", + null, + null, + "A", + "B", + "E", + null, + "M", + null, + "R" + ], + [ + "A", + "C", + "A", + "R", + "I", + "A", + "S", + "I", + "S", + null, + "S", + "W", + "E", + "D", + "E" + ], + [ + "M", + null, + "T", + null, + "L", + null, + "C", + null, + "S", + null, + "T", + null, + "H", + null, + "S" + ], + [ + "E", + "T", + "A", + "G", + "E", + "R", + "E", + "S", + null, + "H", + "A", + "Y", + "E", + "R", + "S" + ], + [ + "R", + null, + "S", + null, + "D", + null, + "N", + null, + null, + null, + "T", + null, + "R", + null, + "E" + ], + [ + "S", + "I", + "S", + "T", + "E", + "R", + "E", + "D", + null, + "R", + "E", + "W", + "E", + "D", + "S" + ] + ], + "showenumerations" : true, + "clues" : { + "Across:Across" : [ + { + "number" : 1, + "enumeration" : "6", + "cells" : [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ] + }, + { + "number" : 4, + "enumeration" : "8", + "cells" : [ + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 11, + 0 + ], + [ + 12, + 0 + ], + [ + 13, + 0 + ], + [ + 14, + 0 + ] + ] + }, + { + "number" : 9, + "enumeration" : "6", + "cells" : [ + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ] + }, + { + "number" : 10, + "enumeration" : "8", + "cells" : [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 11, + 2 + ], + [ + 12, + 2 + ], + [ + 13, + 2 + ], + [ + 14, + 2 + ] + ] + }, + { + "number" : 12, + "enumeration" : "5", + "cells" : [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ] + }, + { + "number" : 13, + "enumeration" : "9", + "cells" : [ + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 11, + 4 + ], + [ + 12, + 4 + ], + [ + 13, + 4 + ], + [ + 14, + 4 + ] + ] + }, + { + "number" : 15, + "enumeration" : "3", + "cells" : [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ] + }, + { + "number" : 16, + "enumeration" : "5", + "cells" : [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ] + }, + { + "number" : 17, + "enumeration" : "6", + "cells" : [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 10, + 6 + ], + [ + 11, + 6 + ] + ] + }, + { + "number" : 22, + "enumeration" : "6", + "cells" : [ + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ] + }, + { + "number" : 24, + "enumeration" : "5", + "cells" : [ + [ + 10, + 8 + ], + [ + 11, + 8 + ], + [ + 12, + 8 + ], + [ + 13, + 8 + ], + [ + 14, + 8 + ] + ] + }, + { + "number" : 27, + "enumeration" : "3", + "cells" : [ + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ] + ] + }, + { + "number" : 28, + "enumeration" : "9", + "cells" : [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ] + ] + }, + { + "number" : 31, + "enumeration" : "5", + "cells" : [ + [ + 10, + 10 + ], + [ + 11, + 10 + ], + [ + 12, + 10 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ] + ] + }, + { + "number" : 32, + "enumeration" : "8", + "cells" : [ + [ + 0, + 12 + ], + [ + 1, + 12 + ], + [ + 2, + 12 + ], + [ + 3, + 12 + ], + [ + 4, + 12 + ], + [ + 5, + 12 + ], + [ + 6, + 12 + ], + [ + 7, + 12 + ] + ] + }, + { + "number" : 33, + "enumeration" : "6", + "cells" : [ + [ + 9, + 12 + ], + [ + 10, + 12 + ], + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 12 + ], + [ + 14, + 12 + ] + ] + }, + { + "number" : 34, + "enumeration" : "8", + "cells" : [ + [ + 0, + 14 + ], + [ + 1, + 14 + ], + [ + 2, + 14 + ], + [ + 3, + 14 + ], + [ + 4, + 14 + ], + [ + 5, + 14 + ], + [ + 6, + 14 + ], + [ + 7, + 14 + ] + ] + }, + { + "number" : 35, + "enumeration" : "6", + "cells" : [ + [ + 9, + 14 + ], + [ + 10, + 14 + ], + [ + 11, + 14 + ], + [ + 12, + 14 + ], + [ + 13, + 14 + ], + [ + 14, + 14 + ] + ] + } + ], + "Down:Down" : [ + { + "number" : 1, + "enumeration" : "8", + "cells" : [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ] + }, + { + "number" : 2, + "enumeration" : "8", + "cells" : [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ] + ] + }, + { + "number" : 3, + "enumeration" : "9", + "cells" : [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ] + ] + }, + { + "number" : 5, + "enumeration" : "5", + "cells" : [ + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ] + }, + { + "number" : 6, + "enumeration" : "5", + "cells" : [ + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ] + ] + }, + { + "number" : 7, + "enumeration" : "6", + "cells" : [ + [ + 12, + 0 + ], + [ + 12, + 1 + ], + [ + 12, + 2 + ], + [ + 12, + 3 + ], + [ + 12, + 4 + ], + [ + 12, + 5 + ] + ] + }, + { + "number" : 8, + "enumeration" : "6", + "cells" : [ + [ + 14, + 0 + ], + [ + 14, + 1 + ], + [ + 14, + 2 + ], + [ + 14, + 3 + ], + [ + 14, + 4 + ], + [ + 14, + 5 + ] + ] + }, + { + "number" : 11, + "enumeration" : "6", + "cells" : [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ] + ] + }, + { + "number" : 14, + "enumeration" : "3", + "cells" : [ + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ] + ] + }, + { + "number" : 18, + "enumeration" : "6", + "cells" : [ + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 8, + 10 + ], + [ + 8, + 11 + ] + ] + }, + { + "number" : 19, + "enumeration" : "9", + "cells" : [ + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 10, + 11 + ], + [ + 10, + 12 + ], + [ + 10, + 13 + ], + [ + 10, + 14 + ] + ] + }, + { + "number" : 20, + "enumeration" : "8", + "cells" : [ + [ + 12, + 7 + ], + [ + 12, + 8 + ], + [ + 12, + 9 + ], + [ + 12, + 10 + ], + [ + 12, + 11 + ], + [ + 12, + 12 + ], + [ + 12, + 13 + ], + [ + 12, + 14 + ] + ] + }, + { + "number" : 21, + "enumeration" : "8", + "cells" : [ + [ + 14, + 7 + ], + [ + 14, + 8 + ], + [ + 14, + 9 + ], + [ + 14, + 10 + ], + [ + 14, + 11 + ], + [ + 14, + 12 + ], + [ + 14, + 13 + ], + [ + 14, + 14 + ] + ] + }, + { + "number" : 23, + "enumeration" : "3", + "cells" : [ + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ] + ] + }, + { + "number" : 25, + "enumeration" : "6", + "cells" : [ + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 0, + 11 + ], + [ + 0, + 12 + ], + [ + 0, + 13 + ], + [ + 0, + 14 + ] + ] + }, + { + "number" : 26, + "enumeration" : "6", + "cells" : [ + [ + 2, + 9 + ], + [ + 2, + 10 + ], + [ + 2, + 11 + ], + [ + 2, + 12 + ], + [ + 2, + 13 + ], + [ + 2, + 14 + ] + ] + }, + { + "number" : 29, + "enumeration" : "5", + "cells" : [ + [ + 4, + 10 + ], + [ + 4, + 11 + ], + [ + 4, + 12 + ], + [ + 4, + 13 + ], + [ + 4, + 14 + ] + ] + }, + { + "number" : 30, + "enumeration" : "5", + "cells" : [ + [ + 6, + 10 + ], + [ + 6, + 11 + ], + [ + 6, + 12 + ], + [ + 6, + 13 + ], + [ + 6, + 14 + ] + ] + } + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/cryptic-half.ipuz b/src/tests/clue-matches/cryptic-half.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..3a0b0b360515d64d3bb35061219d0682ed100e4a --- /dev/null +++ b/src/tests/clue-matches/cryptic-half.ipuz @@ -0,0 +1,1649 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1", + "http://ipuz.org/crossword/crypticcrossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Cryptic Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 0, + 2, + 0, + 3, + 0, + "#", + 4, + 5, + 0, + 6, + 0, + 7, + 0, + 8 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + "#", + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 11, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 12, + 0, + 0, + 0, + 0, + "#", + 13, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 15, + 0, + 0, + "#", + "#", + 0, + "#", + "#", + 0, + "#", + 0 + ], + [ + 16, + 0, + 0, + 0, + 0, + "#", + 17, + 0, + 18, + 0, + 19, + 0, + "#", + "#", + "#" + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 20, + "#", + 21 + ], + [ + "#", + "#", + "#", + 22, + 0, + 23, + 0, + 0, + 0, + "#", + 24, + 0, + 0, + 0, + 0 + ], + [ + 25, + "#", + 26, + "#", + "#", + 0, + "#", + "#", + 27, + 0, + 0, + "#", + 0, + "#", + 0 + ], + [ + 28, + 0, + 0, + 0, + 29, + 0, + 30, + 0, + 0, + "#", + 31, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 33, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 34, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 35, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "N", + "A", + "T", + null, + "R", + "E", + null, + null, + "A", + null, + "C", + null, + null, + null, + "E" + ], + [ + null, + null, + "H", + null, + null, + null, + null, + null, + null, + null, + "U", + null, + null, + null, + "N" + ], + [ + null, + null, + "E", + null, + null, + null, + null, + null, + null, + null, + "B", + null, + null, + null, + "S" + ], + [ + null, + null, + "A", + null, + null, + null, + "C", + null, + null, + null, + "E", + null, + null, + null, + null + ], + [ + "C", + "A", + "T", + "A", + "N", + null, + "C", + "A", + "N", + "A", + "D", + "I", + "A", + "N", + "A" + ], + [ + null, + null, + "E", + null, + null, + null, + "L", + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + "R", + null, + null, + null, + "A", + null, + "B", + null, + "S", + null, + null, + null, + null + ], + [ + null, + null, + "S", + null, + null, + null, + "M", + null, + null, + null, + "T", + null, + null, + null, + "T" + ], + [ + null, + null, + null, + null, + null, + null, + "P", + null, + null, + null, + "O", + "T", + "T", + "E", + "R" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "R", + null, + null, + null, + "O" + ], + [ + "V", + "I", + "L", + "L", + "A", + "G", + "E", + "R", + "S", + null, + "M", + null, + null, + null, + "L" + ], + [ + null, + null, + null, + null, + "R", + null, + null, + null, + null, + null, + "G", + null, + null, + null, + "L" + ], + [ + "D", + "O", + "G", + "T", + "R", + "E", + "A", + "T", + null, + null, + "O", + null, + null, + null, + "E" + ], + [ + null, + null, + null, + null, + "A", + null, + null, + null, + null, + null, + "D", + null, + null, + null, + "Y" + ], + [ + null, + null, + null, + null, + "Y", + null, + null, + null, + null, + null, + "S", + null, + "AT", + null, + "S" + ] + ], + "showenumerations" : true, + "clues" : { + "Across:Across" : [ + { + "number" : 1, + "enumeration" : "6", + "cells" : [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ] + }, + { + "number" : 4, + "enumeration" : "8", + "cells" : [ + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 11, + 0 + ], + [ + 12, + 0 + ], + [ + 13, + 0 + ], + [ + 14, + 0 + ] + ] + }, + { + "number" : 9, + "enumeration" : "6", + "cells" : [ + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ] + }, + { + "number" : 10, + "enumeration" : "8", + "cells" : [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 11, + 2 + ], + [ + 12, + 2 + ], + [ + 13, + 2 + ], + [ + 14, + 2 + ] + ] + }, + { + "number" : 12, + "enumeration" : "5", + "cells" : [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ] + }, + { + "number" : 13, + "enumeration" : "9", + "cells" : [ + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 11, + 4 + ], + [ + 12, + 4 + ], + [ + 13, + 4 + ], + [ + 14, + 4 + ] + ] + }, + { + "number" : 15, + "enumeration" : "3", + "cells" : [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ] + }, + { + "number" : 16, + "enumeration" : "5", + "cells" : [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ] + }, + { + "number" : 17, + "enumeration" : "6", + "cells" : [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 10, + 6 + ], + [ + 11, + 6 + ] + ] + }, + { + "number" : 22, + "enumeration" : "6", + "cells" : [ + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ] + }, + { + "number" : 24, + "enumeration" : "5", + "cells" : [ + [ + 10, + 8 + ], + [ + 11, + 8 + ], + [ + 12, + 8 + ], + [ + 13, + 8 + ], + [ + 14, + 8 + ] + ] + }, + { + "number" : 27, + "enumeration" : "3", + "cells" : [ + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ] + ] + }, + { + "number" : 28, + "enumeration" : "9", + "cells" : [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ] + ] + }, + { + "number" : 31, + "enumeration" : "5", + "cells" : [ + [ + 10, + 10 + ], + [ + 11, + 10 + ], + [ + 12, + 10 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ] + ] + }, + { + "number" : 32, + "enumeration" : "3 5", + "cells" : [ + [ + 0, + 12 + ], + [ + 1, + 12 + ], + [ + 2, + 12 + ], + [ + 3, + 12 + ], + [ + 4, + 12 + ], + [ + 5, + 12 + ], + [ + 6, + 12 + ], + [ + 7, + 12 + ] + ] + }, + { + "number" : 33, + "enumeration" : "6", + "cells" : [ + [ + 9, + 12 + ], + [ + 10, + 12 + ], + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 12 + ], + [ + 14, + 12 + ] + ] + }, + { + "number" : 34, + "enumeration" : "8", + "cells" : [ + [ + 0, + 14 + ], + [ + 1, + 14 + ], + [ + 2, + 14 + ], + [ + 3, + 14 + ], + [ + 4, + 14 + ], + [ + 5, + 14 + ], + [ + 6, + 14 + ], + [ + 7, + 14 + ] + ] + }, + { + "number" : 35, + "enumeration" : "6", + "cells" : [ + [ + 9, + 14 + ], + [ + 10, + 14 + ], + [ + 11, + 14 + ], + [ + 12, + 14 + ], + [ + 13, + 14 + ], + [ + 14, + 14 + ] + ] + } + ], + "Down:Down" : [ + { + "number" : 1, + "enumeration" : "8", + "cells" : [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ] + }, + { + "number" : 2, + "enumeration" : "8", + "cells" : [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ] + ] + }, + { + "number" : 3, + "enumeration" : "9", + "cells" : [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ] + ] + }, + { + "number" : 5, + "enumeration" : "5", + "cells" : [ + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ] + }, + { + "number" : 6, + "enumeration" : "5", + "cells" : [ + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ] + ] + }, + { + "number" : 7, + "enumeration" : "6", + "cells" : [ + [ + 12, + 0 + ], + [ + 12, + 1 + ], + [ + 12, + 2 + ], + [ + 12, + 3 + ], + [ + 12, + 4 + ], + [ + 12, + 5 + ] + ] + }, + { + "number" : 8, + "enumeration" : "6", + "cells" : [ + [ + 14, + 0 + ], + [ + 14, + 1 + ], + [ + 14, + 2 + ], + [ + 14, + 3 + ], + [ + 14, + 4 + ], + [ + 14, + 5 + ] + ] + }, + { + "number" : 11, + "enumeration" : "6", + "cells" : [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ] + ] + }, + { + "number" : 14, + "enumeration" : "3", + "cells" : [ + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ] + ] + }, + { + "number" : 18, + "enumeration" : "6", + "cells" : [ + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 8, + 10 + ], + [ + 8, + 11 + ] + ] + }, + { + "number" : 19, + "enumeration" : "5 4", + "cells" : [ + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 10, + 11 + ], + [ + 10, + 12 + ], + [ + 10, + 13 + ], + [ + 10, + 14 + ] + ] + }, + { + "number" : 20, + "enumeration" : "8", + "cells" : [ + [ + 12, + 7 + ], + [ + 12, + 8 + ], + [ + 12, + 9 + ], + [ + 12, + 10 + ], + [ + 12, + 11 + ], + [ + 12, + 12 + ], + [ + 12, + 13 + ], + [ + 12, + 14 + ] + ] + }, + { + "number" : 21, + "enumeration" : "8", + "cells" : [ + [ + 14, + 7 + ], + [ + 14, + 8 + ], + [ + 14, + 9 + ], + [ + 14, + 10 + ], + [ + 14, + 11 + ], + [ + 14, + 12 + ], + [ + 14, + 13 + ], + [ + 14, + 14 + ] + ] + }, + { + "number" : 23, + "enumeration" : "3", + "cells" : [ + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ] + ] + }, + { + "number" : 25, + "enumeration" : "6", + "cells" : [ + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 0, + 11 + ], + [ + 0, + 12 + ], + [ + 0, + 13 + ], + [ + 0, + 14 + ] + ] + }, + { + "number" : 26, + "enumeration" : "6", + "cells" : [ + [ + 2, + 9 + ], + [ + 2, + 10 + ], + [ + 2, + 11 + ], + [ + 2, + 12 + ], + [ + 2, + 13 + ], + [ + 2, + 14 + ] + ] + }, + { + "number" : 29, + "enumeration" : "5", + "cells" : [ + [ + 4, + 10 + ], + [ + 4, + 11 + ], + [ + 4, + 12 + ], + [ + 4, + 13 + ], + [ + 4, + 14 + ] + ] + }, + { + "number" : 30, + "enumeration" : "5", + "cells" : [ + [ + 6, + 10 + ], + [ + 6, + 11 + ], + [ + 6, + 12 + ], + [ + 6, + 13 + ], + [ + 6, + 14 + ] + ] + } + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/cryptic-most.ipuz b/src/tests/clue-matches/cryptic-most.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..1ca72e2ebc638a1d129c5d7cf233133095b60d09 --- /dev/null +++ b/src/tests/clue-matches/cryptic-most.ipuz @@ -0,0 +1,1649 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1", + "http://ipuz.org/crossword/crypticcrossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Cryptic Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 0, + 2, + 0, + 3, + 0, + "#", + 4, + 5, + 0, + 6, + 0, + 7, + 0, + 8 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + "#", + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 11, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 12, + 0, + 0, + 0, + 0, + "#", + 13, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 15, + 0, + 0, + "#", + "#", + 0, + "#", + "#", + 0, + "#", + 0 + ], + [ + 16, + 0, + 0, + 0, + 0, + "#", + 17, + 0, + 18, + 0, + 19, + 0, + "#", + "#", + "#" + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 20, + "#", + 21 + ], + [ + "#", + "#", + "#", + 22, + 0, + 23, + 0, + 0, + 0, + "#", + 24, + 0, + 0, + 0, + 0 + ], + [ + 25, + "#", + 26, + "#", + "#", + 0, + "#", + "#", + 27, + 0, + 0, + "#", + 0, + "#", + 0 + ], + [ + 28, + 0, + 0, + 0, + 29, + 0, + 30, + 0, + 0, + "#", + 31, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 33, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 34, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 35, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "N", + "A", + "T", + "U", + "R", + "E", + null, + "C", + "A", + "R", + "C", + "H", + "A", + "S", + "E" + ], + [ + "O", + null, + "H", + null, + "O", + null, + null, + null, + "L", + null, + "U", + null, + null, + null, + "N" + ], + [ + "N", + null, + "E", + null, + "B", + null, + null, + null, + "I", + null, + "B", + null, + null, + null, + "S" + ], + [ + "A", + null, + "A", + null, + "I", + null, + "C", + null, + "E", + null, + "E", + null, + null, + null, + null + ], + [ + "C", + "A", + "T", + "A", + "N", + null, + "C", + "A", + "N", + "A", + "D", + "I", + "A", + "N", + "A" + ], + [ + "T", + null, + "E", + null, + "H", + null, + "L", + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + "O", + null, + "R", + null, + "O", + null, + "A", + null, + "B", + null, + "S", + null, + null, + null, + null + ], + [ + "R", + null, + "S", + null, + "O", + null, + "M", + null, + "E", + null, + "T", + null, + "S", + null, + "T" + ], + [ + null, + null, + null, + null, + "D", + null, + "P", + null, + "T", + null, + "O", + "T", + "T", + "E", + "R" + ], + [ + "N", + null, + "P", + null, + null, + null, + null, + null, + "O", + "A", + "R", + null, + "A", + null, + "O" + ], + [ + "V", + "I", + "L", + "L", + "A", + "G", + "E", + "R", + "S", + null, + "M", + null, + "R", + null, + "L" + ], + [ + "I", + null, + "A", + null, + "R", + null, + null, + null, + "S", + null, + "G", + null, + "T", + null, + "L" + ], + [ + "D", + "O", + "G", + "T", + "R", + "E", + "A", + "T", + null, + null, + "O", + null, + "E", + null, + "E" + ], + [ + "I", + null, + "U", + null, + "A", + null, + null, + null, + null, + null, + "D", + null, + "D", + null, + "Y" + ], + [ + "A", + null, + "E", + null, + "Y", + null, + null, + null, + null, + null, + "S", + null, + "A", + null, + "S" + ] + ], + "showenumerations" : true, + "clues" : { + "Across:Across" : [ + { + "number" : 1, + "enumeration" : "6", + "cells" : [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ] + }, + { + "number" : 4, + "enumeration" : "3 5", + "cells" : [ + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 11, + 0 + ], + [ + 12, + 0 + ], + [ + 13, + 0 + ], + [ + 14, + 0 + ] + ] + }, + { + "number" : 9, + "enumeration" : "6", + "cells" : [ + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ] + }, + { + "number" : 10, + "enumeration" : "8", + "cells" : [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 11, + 2 + ], + [ + 12, + 2 + ], + [ + 13, + 2 + ], + [ + 14, + 2 + ] + ] + }, + { + "number" : 12, + "enumeration" : "5", + "cells" : [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ] + }, + { + "number" : 13, + "enumeration" : "9", + "cells" : [ + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 11, + 4 + ], + [ + 12, + 4 + ], + [ + 13, + 4 + ], + [ + 14, + 4 + ] + ] + }, + { + "number" : 15, + "enumeration" : "3", + "cells" : [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ] + }, + { + "number" : 16, + "enumeration" : "5", + "cells" : [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ] + }, + { + "number" : 17, + "enumeration" : "6", + "cells" : [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 10, + 6 + ], + [ + 11, + 6 + ] + ] + }, + { + "number" : 22, + "enumeration" : "6", + "cells" : [ + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ] + }, + { + "number" : 24, + "enumeration" : "5", + "cells" : [ + [ + 10, + 8 + ], + [ + 11, + 8 + ], + [ + 12, + 8 + ], + [ + 13, + 8 + ], + [ + 14, + 8 + ] + ] + }, + { + "number" : 27, + "enumeration" : "3", + "cells" : [ + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ] + ] + }, + { + "number" : 28, + "enumeration" : "9", + "cells" : [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ] + ] + }, + { + "number" : 31, + "enumeration" : "5", + "cells" : [ + [ + 10, + 10 + ], + [ + 11, + 10 + ], + [ + 12, + 10 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ] + ] + }, + { + "number" : 32, + "enumeration" : "3 5", + "cells" : [ + [ + 0, + 12 + ], + [ + 1, + 12 + ], + [ + 2, + 12 + ], + [ + 3, + 12 + ], + [ + 4, + 12 + ], + [ + 5, + 12 + ], + [ + 6, + 12 + ], + [ + 7, + 12 + ] + ] + }, + { + "number" : 33, + "enumeration" : "6", + "cells" : [ + [ + 9, + 12 + ], + [ + 10, + 12 + ], + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 12 + ], + [ + 14, + 12 + ] + ] + }, + { + "number" : 34, + "enumeration" : "8", + "cells" : [ + [ + 0, + 14 + ], + [ + 1, + 14 + ], + [ + 2, + 14 + ], + [ + 3, + 14 + ], + [ + 4, + 14 + ], + [ + 5, + 14 + ], + [ + 6, + 14 + ], + [ + 7, + 14 + ] + ] + }, + { + "number" : 35, + "enumeration" : "6", + "cells" : [ + [ + 9, + 14 + ], + [ + 10, + 14 + ], + [ + 11, + 14 + ], + [ + 12, + 14 + ], + [ + 13, + 14 + ], + [ + 14, + 14 + ] + ] + } + ], + "Down:Down" : [ + { + "number" : 1, + "enumeration" : "3-5", + "cells" : [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ] + }, + { + "number" : 2, + "enumeration" : "8", + "cells" : [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ] + ] + }, + { + "number" : 3, + "enumeration" : "5 4", + "cells" : [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ] + ] + }, + { + "number" : 5, + "enumeration" : "5", + "cells" : [ + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ] + }, + { + "number" : 6, + "enumeration" : "5", + "cells" : [ + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ] + ] + }, + { + "number" : 7, + "enumeration" : "6", + "cells" : [ + [ + 12, + 0 + ], + [ + 12, + 1 + ], + [ + 12, + 2 + ], + [ + 12, + 3 + ], + [ + 12, + 4 + ], + [ + 12, + 5 + ] + ] + }, + { + "number" : 8, + "enumeration" : "6", + "cells" : [ + [ + 14, + 0 + ], + [ + 14, + 1 + ], + [ + 14, + 2 + ], + [ + 14, + 3 + ], + [ + 14, + 4 + ], + [ + 14, + 5 + ] + ] + }, + { + "number" : 11, + "enumeration" : "6", + "cells" : [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ] + ] + }, + { + "number" : 14, + "enumeration" : "3", + "cells" : [ + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ] + ] + }, + { + "number" : 18, + "enumeration" : "6", + "cells" : [ + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 8, + 10 + ], + [ + 8, + 11 + ] + ] + }, + { + "number" : 19, + "enumeration" : "5 4", + "cells" : [ + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 10, + 11 + ], + [ + 10, + 12 + ], + [ + 10, + 13 + ], + [ + 10, + 14 + ] + ] + }, + { + "number" : 20, + "enumeration" : "7 2", + "cells" : [ + [ + 12, + 7 + ], + [ + 12, + 8 + ], + [ + 12, + 9 + ], + [ + 12, + 10 + ], + [ + 12, + 11 + ], + [ + 12, + 12 + ], + [ + 12, + 13 + ], + [ + 12, + 14 + ] + ] + }, + { + "number" : 21, + "enumeration" : "8", + "cells" : [ + [ + 14, + 7 + ], + [ + 14, + 8 + ], + [ + 14, + 9 + ], + [ + 14, + 10 + ], + [ + 14, + 11 + ], + [ + 14, + 12 + ], + [ + 14, + 13 + ], + [ + 14, + 14 + ] + ] + }, + { + "number" : 23, + "enumeration" : "3", + "cells" : [ + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ] + ] + }, + { + "number" : 25, + "enumeration" : "6", + "cells" : [ + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 0, + 11 + ], + [ + 0, + 12 + ], + [ + 0, + 13 + ], + [ + 0, + 14 + ] + ] + }, + { + "number" : 26, + "enumeration" : "6", + "cells" : [ + [ + 2, + 9 + ], + [ + 2, + 10 + ], + [ + 2, + 11 + ], + [ + 2, + 12 + ], + [ + 2, + 13 + ], + [ + 2, + 14 + ] + ] + }, + { + "number" : 29, + "enumeration" : "5", + "cells" : [ + [ + 4, + 10 + ], + [ + 4, + 11 + ], + [ + 4, + 12 + ], + [ + 4, + 13 + ], + [ + 4, + 14 + ] + ] + }, + { + "number" : 30, + "enumeration" : "5", + "cells" : [ + [ + 6, + 10 + ], + [ + 6, + 11 + ], + [ + 6, + 12 + ], + [ + 6, + 13 + ], + [ + 6, + 14 + ] + ] + } + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/cryptic-sparse.ipuz b/src/tests/clue-matches/cryptic-sparse.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..24ced9e71e625d646d62dff14d3fc958082f1a05 --- /dev/null +++ b/src/tests/clue-matches/cryptic-sparse.ipuz @@ -0,0 +1,1649 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1", + "http://ipuz.org/crossword/crypticcrossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Cryptic Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 0, + 2, + 0, + 3, + 0, + "#", + 4, + 5, + 0, + 6, + 0, + 7, + 0, + 8 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + "#", + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 11, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 12, + 0, + 0, + 0, + 0, + "#", + 13, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 15, + 0, + 0, + "#", + "#", + 0, + "#", + "#", + 0, + "#", + 0 + ], + [ + 16, + 0, + 0, + 0, + 0, + "#", + 17, + 0, + 18, + 0, + 19, + 0, + "#", + "#", + "#" + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 20, + "#", + 21 + ], + [ + "#", + "#", + "#", + 22, + 0, + 23, + 0, + 0, + 0, + "#", + 24, + 0, + 0, + 0, + 0 + ], + [ + 25, + "#", + 26, + "#", + "#", + 0, + "#", + "#", + 27, + 0, + 0, + "#", + 0, + "#", + 0 + ], + [ + 28, + 0, + 0, + 0, + 29, + 0, + 30, + 0, + 0, + "#", + 31, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 33, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 34, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 35, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "N", + "A", + null, + null, + "R", + "E", + null, + null, + null, + null, + null, + null, + null, + null, + "E" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "N" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "S" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + "T", + "A", + null, + null, + "C", + "A", + "N", + "A", + "D", + "I", + "A", + "N", + "A" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + "B", + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "T" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "O", + "T", + "T", + "E", + "R" + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "O" + ], + [ + "V", + null, + null, + null, + "A", + null, + null, + null, + "S", + null, + null, + null, + null, + null, + "L" + ], + [ + null, + null, + null, + null, + "R", + null, + null, + null, + null, + null, + null, + null, + null, + null, + "L" + ], + [ + null, + null, + null, + null, + "R", + null, + null, + null, + null, + null, + null, + null, + null, + null, + "E" + ], + [ + null, + null, + null, + null, + "A", + null, + null, + null, + null, + null, + null, + null, + null, + null, + "Y" + ], + [ + null, + null, + null, + null, + "Y", + null, + null, + null, + null, + null, + null, + null, + null, + null, + "S" + ] + ], + "showenumerations" : true, + "clues" : { + "Across:Across" : [ + { + "number" : 1, + "enumeration" : "6", + "cells" : [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ] + }, + { + "number" : 4, + "enumeration" : "8", + "cells" : [ + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 11, + 0 + ], + [ + 12, + 0 + ], + [ + 13, + 0 + ], + [ + 14, + 0 + ] + ] + }, + { + "number" : 9, + "enumeration" : "6", + "cells" : [ + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ] + }, + { + "number" : 10, + "enumeration" : "8", + "cells" : [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 11, + 2 + ], + [ + 12, + 2 + ], + [ + 13, + 2 + ], + [ + 14, + 2 + ] + ] + }, + { + "number" : 12, + "enumeration" : "5", + "cells" : [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ] + }, + { + "number" : 13, + "enumeration" : "9", + "cells" : [ + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 11, + 4 + ], + [ + 12, + 4 + ], + [ + 13, + 4 + ], + [ + 14, + 4 + ] + ] + }, + { + "number" : 15, + "enumeration" : "3", + "cells" : [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ] + }, + { + "number" : 16, + "enumeration" : "5", + "cells" : [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ] + }, + { + "number" : 17, + "enumeration" : "6", + "cells" : [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 10, + 6 + ], + [ + 11, + 6 + ] + ] + }, + { + "number" : 22, + "enumeration" : "6", + "cells" : [ + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ] + }, + { + "number" : 24, + "enumeration" : "5", + "cells" : [ + [ + 10, + 8 + ], + [ + 11, + 8 + ], + [ + 12, + 8 + ], + [ + 13, + 8 + ], + [ + 14, + 8 + ] + ] + }, + { + "number" : 27, + "enumeration" : "3", + "cells" : [ + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ] + ] + }, + { + "number" : 28, + "enumeration" : "9", + "cells" : [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ] + ] + }, + { + "number" : 31, + "enumeration" : "5", + "cells" : [ + [ + 10, + 10 + ], + [ + 11, + 10 + ], + [ + 12, + 10 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ] + ] + }, + { + "number" : 32, + "enumeration" : "8", + "cells" : [ + [ + 0, + 12 + ], + [ + 1, + 12 + ], + [ + 2, + 12 + ], + [ + 3, + 12 + ], + [ + 4, + 12 + ], + [ + 5, + 12 + ], + [ + 6, + 12 + ], + [ + 7, + 12 + ] + ] + }, + { + "number" : 33, + "enumeration" : "6", + "cells" : [ + [ + 9, + 12 + ], + [ + 10, + 12 + ], + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 12 + ], + [ + 14, + 12 + ] + ] + }, + { + "number" : 34, + "enumeration" : "8", + "cells" : [ + [ + 0, + 14 + ], + [ + 1, + 14 + ], + [ + 2, + 14 + ], + [ + 3, + 14 + ], + [ + 4, + 14 + ], + [ + 5, + 14 + ], + [ + 6, + 14 + ], + [ + 7, + 14 + ] + ] + }, + { + "number" : 35, + "enumeration" : "6", + "cells" : [ + [ + 9, + 14 + ], + [ + 10, + 14 + ], + [ + 11, + 14 + ], + [ + 12, + 14 + ], + [ + 13, + 14 + ], + [ + 14, + 14 + ] + ] + } + ], + "Down:Down" : [ + { + "number" : 1, + "enumeration" : "8", + "cells" : [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ] + }, + { + "number" : 2, + "enumeration" : "8", + "cells" : [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ] + ] + }, + { + "number" : 3, + "enumeration" : "9", + "cells" : [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ] + ] + }, + { + "number" : 5, + "enumeration" : "5", + "cells" : [ + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ] + }, + { + "number" : 6, + "enumeration" : "5", + "cells" : [ + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ] + ] + }, + { + "number" : 7, + "enumeration" : "6", + "cells" : [ + [ + 12, + 0 + ], + [ + 12, + 1 + ], + [ + 12, + 2 + ], + [ + 12, + 3 + ], + [ + 12, + 4 + ], + [ + 12, + 5 + ] + ] + }, + { + "number" : 8, + "enumeration" : "6", + "cells" : [ + [ + 14, + 0 + ], + [ + 14, + 1 + ], + [ + 14, + 2 + ], + [ + 14, + 3 + ], + [ + 14, + 4 + ], + [ + 14, + 5 + ] + ] + }, + { + "number" : 11, + "enumeration" : "6", + "cells" : [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ] + ] + }, + { + "number" : 14, + "enumeration" : "3", + "cells" : [ + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ] + ] + }, + { + "number" : 18, + "enumeration" : "6", + "cells" : [ + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 8, + 10 + ], + [ + 8, + 11 + ] + ] + }, + { + "number" : 19, + "enumeration" : "9", + "cells" : [ + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 10, + 11 + ], + [ + 10, + 12 + ], + [ + 10, + 13 + ], + [ + 10, + 14 + ] + ] + }, + { + "number" : 20, + "enumeration" : "8", + "cells" : [ + [ + 12, + 7 + ], + [ + 12, + 8 + ], + [ + 12, + 9 + ], + [ + 12, + 10 + ], + [ + 12, + 11 + ], + [ + 12, + 12 + ], + [ + 12, + 13 + ], + [ + 12, + 14 + ] + ] + }, + { + "number" : 21, + "enumeration" : "8", + "cells" : [ + [ + 14, + 7 + ], + [ + 14, + 8 + ], + [ + 14, + 9 + ], + [ + 14, + 10 + ], + [ + 14, + 11 + ], + [ + 14, + 12 + ], + [ + 14, + 13 + ], + [ + 14, + 14 + ] + ] + }, + { + "number" : 23, + "enumeration" : "3", + "cells" : [ + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ] + ] + }, + { + "number" : 25, + "enumeration" : "6", + "cells" : [ + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 0, + 11 + ], + [ + 0, + 12 + ], + [ + 0, + 13 + ], + [ + 0, + 14 + ] + ] + }, + { + "number" : 26, + "enumeration" : "6", + "cells" : [ + [ + 2, + 9 + ], + [ + 2, + 10 + ], + [ + 2, + 11 + ], + [ + 2, + 12 + ], + [ + 2, + 13 + ], + [ + 2, + 14 + ] + ] + }, + { + "number" : 29, + "enumeration" : "5", + "cells" : [ + [ + 4, + 10 + ], + [ + 4, + 11 + ], + [ + 4, + 12 + ], + [ + 4, + 13 + ], + [ + 4, + 14 + ] + ] + }, + { + "number" : 30, + "enumeration" : "5", + "cells" : [ + [ + 6, + 10 + ], + [ + 6, + 11 + ], + [ + 6, + 12 + ], + [ + 6, + 13 + ], + [ + 6, + 14 + ] + ] + } + ] + } +} \ No newline at end of file diff --git a/src/tests/clue-matches/large-empty.ipuz b/src/tests/clue-matches/large-empty.ipuz new file mode 100644 index 0000000000000000000000000000000000000000..dee7d631954265e65f13a789799a23e7720a8f2c --- /dev/null +++ b/src/tests/clue-matches/large-empty.ipuz @@ -0,0 +1,656 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1" + ], + "version" : "http://ipuz.org/v2", + "title" : "My Crossword", + "charset-str" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + "origin" : "GNOME Crosswords Editor (0.3.16)", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "puzzle" : [ + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 16, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 17, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 18, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 19, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 20, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 21, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 22, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 23, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 24, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 25, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 26, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 28, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 29, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ], + [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + ], + "showenumerations" : false, + "clues" : { + "Across:Across" : [ + [ + 1, + null + ], + [ + 16, + null + ], + [ + 17, + null + ], + [ + 18, + null + ], + [ + 19, + null + ], + [ + 20, + null + ], + [ + 21, + null + ], + [ + 22, + null + ], + [ + 23, + null + ], + [ + 24, + null + ], + [ + 25, + null + ], + [ + 26, + null + ], + [ + 27, + null + ], + [ + 28, + null + ], + [ + 29, + null + ] + ], + "Down:Down" : [ + [ + 1, + null + ], + [ + 2, + null + ], + [ + 3, + null + ], + [ + 4, + null + ], + [ + 5, + null + ], + [ + 6, + null + ], + [ + 7, + null + ], + [ + 8, + null + ], + [ + 9, + null + ], + [ + 10, + null + ], + [ + 11, + null + ], + [ + 12, + null + ], + [ + 13, + null + ], + [ + 14, + null + ], + [ + 15, + null + ] + ] + } +} \ No newline at end of file