diff --git a/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 1 b/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 1 index 42ccf371b..2d1df1068 100644 --- a/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 1 +++ b/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 1 @@ -1,7 +1,6 @@ - - + @@ -107,5 +106,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 2 b/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 2 index d73caa5d2..1e85a347b 100644 --- a/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 2 +++ b/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 2 @@ -1,7 +1,6 @@ - - + @@ -107,5 +106,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 3 b/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 3 index 99ec9769b..63347cdc1 100644 --- a/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 3 +++ b/puzzles files/binary/10x10 Binary Hard/10x10 Binary Hard 3 @@ -1,7 +1,6 @@ - - + @@ -107,5 +106,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 1 b/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 1 index d203617c8..aca7ad302 100644 --- a/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 1 +++ b/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 1 @@ -1,7 +1,6 @@ - - + @@ -107,5 +106,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 2 b/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 2 index db56f04f3..aee449977 100644 --- a/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 2 +++ b/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 2 @@ -1,7 +1,6 @@ - - + @@ -107,5 +106,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 3 b/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 3 index 11940a6eb..435d46ad6 100644 --- a/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 3 +++ b/puzzles files/binary/10x10 Binary Medium/10x10 Binary Medium 3 @@ -1,7 +1,6 @@ - - + @@ -107,5 +106,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/10x10 Binary Very Hard/10x10 Binary Very Hard 1 b/puzzles files/binary/10x10 Binary Very Hard/10x10 Binary Very Hard 1 index 828a450cf..00444c768 100644 --- a/puzzles files/binary/10x10 Binary Very Hard/10x10 Binary Very Hard 1 +++ b/puzzles files/binary/10x10 Binary Very Hard/10x10 Binary Very Hard 1 @@ -1,7 +1,6 @@ - - + @@ -107,5 +106,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 1 b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 1 index 7b22ffc10..17d23f5eb 100644 --- a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 1 +++ b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 1 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 2 b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 2 index ea8ef93b0..7c850ac15 100644 --- a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 2 +++ b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 2 @@ -1,6 +1,5 @@ - - + @@ -17,5 +16,5 @@ - + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 3 b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 3 index 0f0ff745e..ba58253ff 100644 --- a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 3 +++ b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 3 @@ -1,6 +1,5 @@ - - + @@ -21,5 +20,5 @@ - + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 4 b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 4 index da76d067b..9c5bb19e2 100644 --- a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 4 +++ b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 4 @@ -1,6 +1,5 @@ - - + @@ -24,5 +23,5 @@ - + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 5 b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 5 index a1ea13988..3340369af 100644 --- a/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 5 +++ b/puzzles files/binary/6x6 Binary Easy/6x6 Binary Easy 5 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 1 b/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 1 index 5f7f72a8a..8c668d2d5 100644 --- a/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 1 +++ b/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 1 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 2 b/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 2 index a4ed30c31..33169d526 100644 --- a/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 2 +++ b/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 2 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 3 b/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 3 index fc0e413c1..0a51a82f2 100644 --- a/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 3 +++ b/puzzles files/binary/6x6 Binary Hard/6x6 Binary Hard 3 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 1 b/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 1 index a5ab8a2dc..eba4d6f14 100644 --- a/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 1 +++ b/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 1 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 2 b/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 2 index 4be5fdaad..d619635f6 100644 --- a/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 2 +++ b/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 2 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 3 b/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 3 index eba370cab..c499a87f5 100644 --- a/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 3 +++ b/puzzles files/binary/6x6 Binary Medium/6x6 Binary Medium 3 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 1 b/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 1 index faa68fa5e..a08befdb3 100644 --- a/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 1 +++ b/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 1 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 2 b/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 2 index 3c707bdaa..4edec7a04 100644 --- a/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 2 +++ b/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 2 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 3 b/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 3 index 217a032d8..e1110d6de 100644 --- a/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 3 +++ b/puzzles files/binary/6x6 Binary Very Hard/6x6 Binary Very Hard 3 @@ -1,7 +1,6 @@ - - + @@ -43,5 +42,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/6x6 easy/089764562 b/puzzles files/binary/6x6 easy/089764562 index 7b22ffc10..5eeaf6f69 100644 --- a/puzzles files/binary/6x6 easy/089764562 +++ b/puzzles files/binary/6x6 easy/089764562 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - + \ No newline at end of file diff --git a/puzzles files/binary/6x6 easy/128903434 b/puzzles files/binary/6x6 easy/128903434 index ea8ef93b0..498a43609 100644 --- a/puzzles files/binary/6x6 easy/128903434 +++ b/puzzles files/binary/6x6 easy/128903434 @@ -1,6 +1,5 @@ - - + @@ -17,5 +16,5 @@ - + \ No newline at end of file diff --git a/puzzles files/binary/6x6 easy/876868768 b/puzzles files/binary/6x6 easy/876868768 index 0f0ff745e..a1bc998d4 100644 --- a/puzzles files/binary/6x6 easy/876868768 +++ b/puzzles files/binary/6x6 easy/876868768 @@ -1,6 +1,5 @@ - - + @@ -21,5 +20,5 @@ - + \ No newline at end of file diff --git a/puzzles files/binary/6x6 easy/927364891 b/puzzles files/binary/6x6 easy/927364891 index da76d067b..6948b8f45 100644 --- a/puzzles files/binary/6x6 easy/927364891 +++ b/puzzles files/binary/6x6 easy/927364891 @@ -1,6 +1,5 @@ - - + @@ -24,5 +23,5 @@ - + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 1 b/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 1 index befd674f9..a15370f48 100644 --- a/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 1 +++ b/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 1 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 2 b/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 2 index 724426c26..509f7b57a 100644 --- a/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 2 +++ b/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 2 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 3 b/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 3 index 92a96c72b..05d19ec4b 100644 --- a/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 3 +++ b/puzzles files/binary/8x8 Binary Easy/8x8 Binary Easy 3 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 1 b/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 1 index 34eaf8388..6ebdb6425 100644 --- a/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 1 +++ b/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 1 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 2 b/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 2 index 9ef23277e..2b3ede4a6 100644 --- a/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 2 +++ b/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 2 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 3 b/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 3 index 287ff6f68..0cfa078eb 100644 --- a/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 3 +++ b/puzzles files/binary/8x8 Binary Hard/8x8 Binary Hard 3 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 1 b/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 1 index 47dae23dc..9cf87e342 100644 --- a/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 1 +++ b/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 1 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 2 b/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 2 index ae4cb8bb0..bd41ef23b 100644 --- a/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 2 +++ b/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 2 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 3 b/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 3 index 2f951ecc4..eca4d5d47 100644 --- a/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 3 +++ b/puzzles files/binary/8x8 Binary Medium/8x8 Binary Medium 3 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 1 b/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 1 index 9c875523b..1a21db34e 100644 --- a/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 1 +++ b/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 1 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 2 b/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 2 index 14f2e4ad2..0691b8707 100644 --- a/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 2 +++ b/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 2 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 3 b/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 3 index ad319a4b7..05a60cc22 100644 --- a/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 3 +++ b/puzzles files/binary/8x8 Binary Very Hard/8x8 Binary Very Hard 3 @@ -1,7 +1,6 @@ - - + @@ -71,5 +70,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/fillapix/10x10 Fillapix Advanced/FillapixAdvanced10x10_1 b/puzzles files/fillapix/10x10 Fillapix Advanced/FillapixAdvanced10x10_1 index 3706caf3b..c35178c65 100644 --- a/puzzles files/fillapix/10x10 Fillapix Advanced/FillapixAdvanced10x10_1 +++ b/puzzles files/fillapix/10x10 Fillapix Advanced/FillapixAdvanced10x10_1 @@ -1,7 +1,6 @@ - - - + + @@ -45,4 +44,4 @@ - + \ No newline at end of file diff --git a/puzzles files/fillapix/10x10 Fillapix Basic/FillapixBasic10x10_1 b/puzzles files/fillapix/10x10 Fillapix Basic/FillapixBasic10x10_1 index e9ab5f4a0..d8b051f69 100644 --- a/puzzles files/fillapix/10x10 Fillapix Basic/FillapixBasic10x10_1 +++ b/puzzles files/fillapix/10x10 Fillapix Basic/FillapixBasic10x10_1 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/fillapix/15x15 Fillapix Advanced/FillapixAdvanced15x15_1 b/puzzles files/fillapix/15x15 Fillapix Advanced/FillapixAdvanced15x15_1 index 954d6d409..fb900dc30 100644 --- a/puzzles files/fillapix/15x15 Fillapix Advanced/FillapixAdvanced15x15_1 +++ b/puzzles files/fillapix/15x15 Fillapix Advanced/FillapixAdvanced15x15_1 @@ -1,6 +1,5 @@ - - + @@ -88,4 +87,4 @@ - + \ No newline at end of file diff --git a/puzzles files/fillapix/15x15 Fillapix Basic/FillapixBasic15x15_1 b/puzzles files/fillapix/15x15 Fillapix Basic/FillapixBasic15x15_1 index d17e230f0..2cb91fb74 100644 --- a/puzzles files/fillapix/15x15 Fillapix Basic/FillapixBasic15x15_1 +++ b/puzzles files/fillapix/15x15 Fillapix Basic/FillapixBasic15x15_1 @@ -1,6 +1,5 @@ - - + @@ -108,4 +107,4 @@ - + \ No newline at end of file diff --git a/puzzles files/fillapix/20x20 Fillaix Advanced/FillapixAdvanced20x20_1 b/puzzles files/fillapix/20x20 Fillaix Advanced/FillapixAdvanced20x20_1 index 3582ba947..c3a920ea7 100644 --- a/puzzles files/fillapix/20x20 Fillaix Advanced/FillapixAdvanced20x20_1 +++ b/puzzles files/fillapix/20x20 Fillaix Advanced/FillapixAdvanced20x20_1 @@ -1,6 +1,5 @@ - - + @@ -138,4 +137,4 @@ - + \ No newline at end of file diff --git a/puzzles files/fillapix/20x20 Fillapix Basic/FillapixBasic20x20_1 b/puzzles files/fillapix/20x20 Fillapix Basic/FillapixBasic20x20_1 index 59d8a2114..8beb287d9 100644 --- a/puzzles files/fillapix/20x20 Fillapix Basic/FillapixBasic20x20_1 +++ b/puzzles files/fillapix/20x20 Fillapix Basic/FillapixBasic20x20_1 @@ -1,6 +1,5 @@ - - + @@ -156,4 +155,4 @@ - + \ No newline at end of file diff --git a/puzzles files/fillapix/20x20 Fillapix Basic/FillapixBasic20x20_2 b/puzzles files/fillapix/20x20 Fillapix Basic/FillapixBasic20x20_2 index af3f936f8..fcc254232 100644 --- a/puzzles files/fillapix/20x20 Fillapix Basic/FillapixBasic20x20_2 +++ b/puzzles files/fillapix/20x20 Fillapix Basic/FillapixBasic20x20_2 @@ -1,6 +1,5 @@ - - + @@ -158,4 +157,4 @@ - + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Easy/1514228 b/puzzles files/lightup/10x10 Easy/1514228 index e3d28e19b..69e423183 100644 --- a/puzzles files/lightup/10x10 Easy/1514228 +++ b/puzzles files/lightup/10x10 Easy/1514228 @@ -1,6 +1,5 @@ - - + @@ -30,5 +29,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Easy/1721067 b/puzzles files/lightup/10x10 Easy/1721067 index f664b8084..29aa4f399 100644 --- a/puzzles files/lightup/10x10 Easy/1721067 +++ b/puzzles files/lightup/10x10 Easy/1721067 @@ -1,6 +1,5 @@ - - + @@ -30,5 +29,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Easy/5403393 b/puzzles files/lightup/10x10 Easy/5403393 index c90e51894..32220433e 100644 --- a/puzzles files/lightup/10x10 Easy/5403393 +++ b/puzzles files/lightup/10x10 Easy/5403393 @@ -1,6 +1,5 @@ - - + @@ -26,5 +25,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Easy/5774519 b/puzzles files/lightup/10x10 Easy/5774519 index 385bf59b0..6fc37475e 100644 --- a/puzzles files/lightup/10x10 Easy/5774519 +++ b/puzzles files/lightup/10x10 Easy/5774519 @@ -1,6 +1,5 @@ - - + @@ -26,5 +25,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Easy/954498 b/puzzles files/lightup/10x10 Easy/954498 index f8d7a95c3..b23431b57 100644 --- a/puzzles files/lightup/10x10 Easy/954498 +++ b/puzzles files/lightup/10x10 Easy/954498 @@ -1,6 +1,5 @@ - - + @@ -26,5 +25,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Hard/5373598 b/puzzles files/lightup/10x10 Hard/5373598 index 4c2a246c0..f66e7e292 100644 --- a/puzzles files/lightup/10x10 Hard/5373598 +++ b/puzzles files/lightup/10x10 Hard/5373598 @@ -1,6 +1,5 @@ - - + @@ -26,5 +25,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Hard/573404 b/puzzles files/lightup/10x10 Hard/573404 index 2b3ea8d0f..903dab100 100644 --- a/puzzles files/lightup/10x10 Hard/573404 +++ b/puzzles files/lightup/10x10 Hard/573404 @@ -1,6 +1,5 @@ - - + @@ -26,5 +25,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Hard/5787104 b/puzzles files/lightup/10x10 Hard/5787104 index 3a116f3de..a1a75d97a 100644 --- a/puzzles files/lightup/10x10 Hard/5787104 +++ b/puzzles files/lightup/10x10 Hard/5787104 @@ -1,6 +1,5 @@ - - + @@ -30,5 +29,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Hard/8003166 b/puzzles files/lightup/10x10 Hard/8003166 index 3d07aa9e6..ec2639852 100644 --- a/puzzles files/lightup/10x10 Hard/8003166 +++ b/puzzles files/lightup/10x10 Hard/8003166 @@ -1,6 +1,5 @@ - - + @@ -26,5 +25,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Hard/8918995 b/puzzles files/lightup/10x10 Hard/8918995 index 2108a1a5e..cc4d1fd7b 100644 --- a/puzzles files/lightup/10x10 Hard/8918995 +++ b/puzzles files/lightup/10x10 Hard/8918995 @@ -1,6 +1,5 @@ - - + @@ -34,5 +33,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Normal/2761230 b/puzzles files/lightup/10x10 Normal/2761230 index 936cca685..3493c257e 100644 --- a/puzzles files/lightup/10x10 Normal/2761230 +++ b/puzzles files/lightup/10x10 Normal/2761230 @@ -1,6 +1,5 @@ - - + @@ -30,5 +29,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Normal/343176 b/puzzles files/lightup/10x10 Normal/343176 index 15a76c3ed..5762d9e6e 100644 --- a/puzzles files/lightup/10x10 Normal/343176 +++ b/puzzles files/lightup/10x10 Normal/343176 @@ -1,6 +1,5 @@ - - + @@ -30,5 +29,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Normal/632466 b/puzzles files/lightup/10x10 Normal/632466 index 499c5cf79..7d8b96c8f 100644 --- a/puzzles files/lightup/10x10 Normal/632466 +++ b/puzzles files/lightup/10x10 Normal/632466 @@ -1,6 +1,5 @@ - - + @@ -26,5 +25,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Normal/7752941 b/puzzles files/lightup/10x10 Normal/7752941 index 8f692981d..178b8d266 100644 --- a/puzzles files/lightup/10x10 Normal/7752941 +++ b/puzzles files/lightup/10x10 Normal/7752941 @@ -1,6 +1,5 @@ - - + @@ -26,5 +25,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/10x10 Normal/8090631 b/puzzles files/lightup/10x10 Normal/8090631 index 9121f2f36..1cf4e80de 100644 --- a/puzzles files/lightup/10x10 Normal/8090631 +++ b/puzzles files/lightup/10x10 Normal/8090631 @@ -1,6 +1,5 @@ - - + @@ -30,5 +29,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Easy/1412335 b/puzzles files/lightup/14x14 Easy/1412335 index 4ecd1c7b1..093909434 100644 --- a/puzzles files/lightup/14x14 Easy/1412335 +++ b/puzzles files/lightup/14x14 Easy/1412335 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Easy/1949915 b/puzzles files/lightup/14x14 Easy/1949915 index e0e76a55e..4844b697c 100644 --- a/puzzles files/lightup/14x14 Easy/1949915 +++ b/puzzles files/lightup/14x14 Easy/1949915 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Easy/6778348 b/puzzles files/lightup/14x14 Easy/6778348 index c410720eb..247e50de4 100644 --- a/puzzles files/lightup/14x14 Easy/6778348 +++ b/puzzles files/lightup/14x14 Easy/6778348 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Easy/976495 b/puzzles files/lightup/14x14 Easy/976495 index d037474a4..e75efdaa7 100644 --- a/puzzles files/lightup/14x14 Easy/976495 +++ b/puzzles files/lightup/14x14 Easy/976495 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Easy/9949966 b/puzzles files/lightup/14x14 Easy/9949966 index 68d84b951..b8e03c63a 100644 --- a/puzzles files/lightup/14x14 Easy/9949966 +++ b/puzzles files/lightup/14x14 Easy/9949966 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Hard/1974912 b/puzzles files/lightup/14x14 Hard/1974912 index 906045407..edd375b01 100644 --- a/puzzles files/lightup/14x14 Hard/1974912 +++ b/puzzles files/lightup/14x14 Hard/1974912 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Hard/3618696 b/puzzles files/lightup/14x14 Hard/3618696 index 07b37fdc4..3aba20520 100644 --- a/puzzles files/lightup/14x14 Hard/3618696 +++ b/puzzles files/lightup/14x14 Hard/3618696 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Hard/578987 b/puzzles files/lightup/14x14 Hard/578987 index aa2ee9eb2..d396a5334 100644 --- a/puzzles files/lightup/14x14 Hard/578987 +++ b/puzzles files/lightup/14x14 Hard/578987 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Hard/8087653 b/puzzles files/lightup/14x14 Hard/8087653 index ccd25915b..d7868a7e1 100644 --- a/puzzles files/lightup/14x14 Hard/8087653 +++ b/puzzles files/lightup/14x14 Hard/8087653 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Hard/9554192 b/puzzles files/lightup/14x14 Hard/9554192 index 062acd500..13697e451 100644 --- a/puzzles files/lightup/14x14 Hard/9554192 +++ b/puzzles files/lightup/14x14 Hard/9554192 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Normal/2659779 b/puzzles files/lightup/14x14 Normal/2659779 index 7e849aee7..661d41a9f 100644 --- a/puzzles files/lightup/14x14 Normal/2659779 +++ b/puzzles files/lightup/14x14 Normal/2659779 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Normal/448333 b/puzzles files/lightup/14x14 Normal/448333 index e4511a587..3e1b9565f 100644 --- a/puzzles files/lightup/14x14 Normal/448333 +++ b/puzzles files/lightup/14x14 Normal/448333 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Normal/5063453 b/puzzles files/lightup/14x14 Normal/5063453 index 955c6f89b..c87b1281a 100644 --- a/puzzles files/lightup/14x14 Normal/5063453 +++ b/puzzles files/lightup/14x14 Normal/5063453 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Normal/606275 b/puzzles files/lightup/14x14 Normal/606275 index 6998b8c98..230933936 100644 --- a/puzzles files/lightup/14x14 Normal/606275 +++ b/puzzles files/lightup/14x14 Normal/606275 @@ -1,6 +1,5 @@ - - + @@ -54,5 +53,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/14x14 Normal/830231 b/puzzles files/lightup/14x14 Normal/830231 index e1027e570..595c2d8de 100644 --- a/puzzles files/lightup/14x14 Normal/830231 +++ b/puzzles files/lightup/14x14 Normal/830231 @@ -1,6 +1,5 @@ - - + @@ -61,5 +60,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/2408448 b/puzzles files/lightup/7x7 Easy/2408448 index 9d31841f7..33ed1f5cf 100644 --- a/puzzles files/lightup/7x7 Easy/2408448 +++ b/puzzles files/lightup/7x7 Easy/2408448 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/2736784 b/puzzles files/lightup/7x7 Easy/2736784 index 468764468..874e3a7ed 100644 --- a/puzzles files/lightup/7x7 Easy/2736784 +++ b/puzzles files/lightup/7x7 Easy/2736784 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/2855683 b/puzzles files/lightup/7x7 Easy/2855683 index aea2bd556..1624ec807 100644 --- a/puzzles files/lightup/7x7 Easy/2855683 +++ b/puzzles files/lightup/7x7 Easy/2855683 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/3535701 b/puzzles files/lightup/7x7 Easy/3535701 index 10700abd4..f7254aeee 100644 --- a/puzzles files/lightup/7x7 Easy/3535701 +++ b/puzzles files/lightup/7x7 Easy/3535701 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/393454 b/puzzles files/lightup/7x7 Easy/393454 index 8d1dc0344..a86a908f4 100644 --- a/puzzles files/lightup/7x7 Easy/393454 +++ b/puzzles files/lightup/7x7 Easy/393454 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/4238934 b/puzzles files/lightup/7x7 Easy/4238934 index 4ab26fd6f..51f621e98 100644 --- a/puzzles files/lightup/7x7 Easy/4238934 +++ b/puzzles files/lightup/7x7 Easy/4238934 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/4604288 b/puzzles files/lightup/7x7 Easy/4604288 index f222c56e2..06c180b7e 100644 --- a/puzzles files/lightup/7x7 Easy/4604288 +++ b/puzzles files/lightup/7x7 Easy/4604288 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/4608986 b/puzzles files/lightup/7x7 Easy/4608986 index 25242e7aa..988db0df6 100644 --- a/puzzles files/lightup/7x7 Easy/4608986 +++ b/puzzles files/lightup/7x7 Easy/4608986 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/517362 b/puzzles files/lightup/7x7 Easy/517362 index 00514938f..142bee9a7 100644 --- a/puzzles files/lightup/7x7 Easy/517362 +++ b/puzzles files/lightup/7x7 Easy/517362 @@ -1,6 +1,5 @@ - - + @@ -19,5 +18,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/5229613 b/puzzles files/lightup/7x7 Easy/5229613 index 425fe3a17..d8a4599b5 100644 --- a/puzzles files/lightup/7x7 Easy/5229613 +++ b/puzzles files/lightup/7x7 Easy/5229613 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/5435528 b/puzzles files/lightup/7x7 Easy/5435528 index 94aea5f7e..8e26740f1 100644 --- a/puzzles files/lightup/7x7 Easy/5435528 +++ b/puzzles files/lightup/7x7 Easy/5435528 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/5488697 b/puzzles files/lightup/7x7 Easy/5488697 index d8684e270..cb05ecab1 100644 --- a/puzzles files/lightup/7x7 Easy/5488697 +++ b/puzzles files/lightup/7x7 Easy/5488697 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/6110408 b/puzzles files/lightup/7x7 Easy/6110408 index 335aa1a9b..708064a14 100644 --- a/puzzles files/lightup/7x7 Easy/6110408 +++ b/puzzles files/lightup/7x7 Easy/6110408 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/6300100 b/puzzles files/lightup/7x7 Easy/6300100 index 34f1ad83b..e40e4cbca 100644 --- a/puzzles files/lightup/7x7 Easy/6300100 +++ b/puzzles files/lightup/7x7 Easy/6300100 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/6506194 b/puzzles files/lightup/7x7 Easy/6506194 index f2d73e8a9..7ead8bb82 100644 --- a/puzzles files/lightup/7x7 Easy/6506194 +++ b/puzzles files/lightup/7x7 Easy/6506194 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/69495 b/puzzles files/lightup/7x7 Easy/69495 index d8d9e1f6c..e93e517e0 100644 --- a/puzzles files/lightup/7x7 Easy/69495 +++ b/puzzles files/lightup/7x7 Easy/69495 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/7936304 b/puzzles files/lightup/7x7 Easy/7936304 index c3ba25fe9..3b15f4fc3 100644 --- a/puzzles files/lightup/7x7 Easy/7936304 +++ b/puzzles files/lightup/7x7 Easy/7936304 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/7982513 b/puzzles files/lightup/7x7 Easy/7982513 index 03e77b953..12d453696 100644 --- a/puzzles files/lightup/7x7 Easy/7982513 +++ b/puzzles files/lightup/7x7 Easy/7982513 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/8949430 b/puzzles files/lightup/7x7 Easy/8949430 index 476c421e0..be557b6a0 100644 --- a/puzzles files/lightup/7x7 Easy/8949430 +++ b/puzzles files/lightup/7x7 Easy/8949430 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Easy/9080685 b/puzzles files/lightup/7x7 Easy/9080685 index 5307d6e7a..a0ef559e7 100644 --- a/puzzles files/lightup/7x7 Easy/9080685 +++ b/puzzles files/lightup/7x7 Easy/9080685 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/1130370 b/puzzles files/lightup/7x7 Hard/1130370 index e442a1efa..90215a907 100644 --- a/puzzles files/lightup/7x7 Hard/1130370 +++ b/puzzles files/lightup/7x7 Hard/1130370 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/2790971 b/puzzles files/lightup/7x7 Hard/2790971 index eb6cb0d9f..4c7821779 100644 --- a/puzzles files/lightup/7x7 Hard/2790971 +++ b/puzzles files/lightup/7x7 Hard/2790971 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/3421347 b/puzzles files/lightup/7x7 Hard/3421347 index 638ec2b71..f33f83b77 100644 --- a/puzzles files/lightup/7x7 Hard/3421347 +++ b/puzzles files/lightup/7x7 Hard/3421347 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/4159457 b/puzzles files/lightup/7x7 Hard/4159457 index f9f8e7652..7ae4a7688 100644 --- a/puzzles files/lightup/7x7 Hard/4159457 +++ b/puzzles files/lightup/7x7 Hard/4159457 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/4674087 b/puzzles files/lightup/7x7 Hard/4674087 index 77a317385..9c6a1376a 100644 --- a/puzzles files/lightup/7x7 Hard/4674087 +++ b/puzzles files/lightup/7x7 Hard/4674087 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/507817 b/puzzles files/lightup/7x7 Hard/507817 index e624a2778..69397e073 100644 --- a/puzzles files/lightup/7x7 Hard/507817 +++ b/puzzles files/lightup/7x7 Hard/507817 @@ -1,6 +1,5 @@ - - + @@ -19,5 +18,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/5280094 b/puzzles files/lightup/7x7 Hard/5280094 index 89159dfcf..dd721084b 100644 --- a/puzzles files/lightup/7x7 Hard/5280094 +++ b/puzzles files/lightup/7x7 Hard/5280094 @@ -1,6 +1,5 @@ - - + @@ -19,5 +18,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/5677803 b/puzzles files/lightup/7x7 Hard/5677803 index 010f1be3b..a2ba51cde 100644 --- a/puzzles files/lightup/7x7 Hard/5677803 +++ b/puzzles files/lightup/7x7 Hard/5677803 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/6178908 b/puzzles files/lightup/7x7 Hard/6178908 index 2d4ac5919..5cff1fc4c 100644 --- a/puzzles files/lightup/7x7 Hard/6178908 +++ b/puzzles files/lightup/7x7 Hard/6178908 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Hard/8122162 b/puzzles files/lightup/7x7 Hard/8122162 index 0ccfdfa46..358cdef5b 100644 --- a/puzzles files/lightup/7x7 Hard/8122162 +++ b/puzzles files/lightup/7x7 Hard/8122162 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/2637310 b/puzzles files/lightup/7x7 Normal/2637310 index e2d8b2ecf..b21a74367 100644 --- a/puzzles files/lightup/7x7 Normal/2637310 +++ b/puzzles files/lightup/7x7 Normal/2637310 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/2979943 b/puzzles files/lightup/7x7 Normal/2979943 index f67e0be52..9ba1efb65 100644 --- a/puzzles files/lightup/7x7 Normal/2979943 +++ b/puzzles files/lightup/7x7 Normal/2979943 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/3710905 b/puzzles files/lightup/7x7 Normal/3710905 index b3b9b534b..ea6e17ad5 100644 --- a/puzzles files/lightup/7x7 Normal/3710905 +++ b/puzzles files/lightup/7x7 Normal/3710905 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/3727425 b/puzzles files/lightup/7x7 Normal/3727425 index ac6c11ce3..1ed4985f3 100644 --- a/puzzles files/lightup/7x7 Normal/3727425 +++ b/puzzles files/lightup/7x7 Normal/3727425 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/3787583 b/puzzles files/lightup/7x7 Normal/3787583 index 11c07cde7..49dd6c257 100644 --- a/puzzles files/lightup/7x7 Normal/3787583 +++ b/puzzles files/lightup/7x7 Normal/3787583 @@ -1,6 +1,5 @@ - - + @@ -19,5 +18,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/5570754 b/puzzles files/lightup/7x7 Normal/5570754 index e6cf153f3..17fec42df 100644 --- a/puzzles files/lightup/7x7 Normal/5570754 +++ b/puzzles files/lightup/7x7 Normal/5570754 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/7270504 b/puzzles files/lightup/7x7 Normal/7270504 index 1456b2b68..d24236282 100644 --- a/puzzles files/lightup/7x7 Normal/7270504 +++ b/puzzles files/lightup/7x7 Normal/7270504 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/8000000 b/puzzles files/lightup/7x7 Normal/8000000 index f84a6c213..0480a15ff 100644 --- a/puzzles files/lightup/7x7 Normal/8000000 +++ b/puzzles files/lightup/7x7 Normal/8000000 @@ -1,6 +1,5 @@ - - + @@ -19,5 +18,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/9489812 b/puzzles files/lightup/7x7 Normal/9489812 index ef3ec4dbd..8e819fe85 100644 --- a/puzzles files/lightup/7x7 Normal/9489812 +++ b/puzzles files/lightup/7x7 Normal/9489812 @@ -1,6 +1,5 @@ - - + @@ -15,5 +14,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Normal/9806740 b/puzzles files/lightup/7x7 Normal/9806740 index 42ecc1a04..30bbe2880 100644 --- a/puzzles files/lightup/7x7 Normal/9806740 +++ b/puzzles files/lightup/7x7 Normal/9806740 @@ -1,6 +1,5 @@ - - + @@ -19,5 +18,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Random/puzzle1 b/puzzles files/lightup/7x7 Random/puzzle1 index d524bfcb2..edbd107fc 100644 --- a/puzzles files/lightup/7x7 Random/puzzle1 +++ b/puzzles files/lightup/7x7 Random/puzzle1 @@ -1,26 +1,25 @@ - - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Random/puzzle2 b/puzzles files/lightup/7x7 Random/puzzle2 index 40c521ee7..8b626e85a 100644 --- a/puzzles files/lightup/7x7 Random/puzzle2 +++ b/puzzles files/lightup/7x7 Random/puzzle2 @@ -1,24 +1,23 @@ - - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Random/puzzle3 b/puzzles files/lightup/7x7 Random/puzzle3 index ba316474d..08b4140d5 100644 --- a/puzzles files/lightup/7x7 Random/puzzle3 +++ b/puzzles files/lightup/7x7 Random/puzzle3 @@ -1,25 +1,24 @@ - - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Random/puzzle4 b/puzzles files/lightup/7x7 Random/puzzle4 index 0a248a3ef..b25ab514c 100644 --- a/puzzles files/lightup/7x7 Random/puzzle4 +++ b/puzzles files/lightup/7x7 Random/puzzle4 @@ -1,26 +1,25 @@ - - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Random/puzzle5 b/puzzles files/lightup/7x7 Random/puzzle5 index 478ed3270..71de999dc 100644 --- a/puzzles files/lightup/7x7 Random/puzzle5 +++ b/puzzles files/lightup/7x7 Random/puzzle5 @@ -1,24 +1,23 @@ - - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Random/puzzle6 b/puzzles files/lightup/7x7 Random/puzzle6 index 387e00f01..85bc22599 100644 --- a/puzzles files/lightup/7x7 Random/puzzle6 +++ b/puzzles files/lightup/7x7 Random/puzzle6 @@ -1,22 +1,21 @@ - - + - - - - - - - - - - - - + + + + + + + + + + + + - + \ No newline at end of file diff --git a/puzzles files/lightup/7x7 Random/puzzle7 b/puzzles files/lightup/7x7 Random/puzzle7 index af78d5a04..499641f1a 100644 --- a/puzzles files/lightup/7x7 Random/puzzle7 +++ b/puzzles files/lightup/7x7 Random/puzzle7 @@ -1,22 +1,21 @@ - - + - - - - - - - - - - - - + + + + + + + + + + + + - + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Easy/6E_b0011 b/puzzles files/masyu/6x6 Masyu Easy/6E_b0011 index d986f7891..a0d188bf9 100644 --- a/puzzles files/masyu/6x6 Masyu Easy/6E_b0011 +++ b/puzzles files/masyu/6x6 Masyu Easy/6E_b0011 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Easy/6E_b0012 b/puzzles files/masyu/6x6 Masyu Easy/6E_b0012 index 4099c98c6..847f2007d 100644 --- a/puzzles files/masyu/6x6 Masyu Easy/6E_b0012 +++ b/puzzles files/masyu/6x6 Masyu Easy/6E_b0012 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Easy/6E_b0013 b/puzzles files/masyu/6x6 Masyu Easy/6E_b0013 index 9280237ab..c4be85829 100644 --- a/puzzles files/masyu/6x6 Masyu Easy/6E_b0013 +++ b/puzzles files/masyu/6x6 Masyu Easy/6E_b0013 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Easy/6E_b0014 b/puzzles files/masyu/6x6 Masyu Easy/6E_b0014 index 2a802027b..642529609 100644 --- a/puzzles files/masyu/6x6 Masyu Easy/6E_b0014 +++ b/puzzles files/masyu/6x6 Masyu Easy/6E_b0014 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Easy/6E_b0015 b/puzzles files/masyu/6x6 Masyu Easy/6E_b0015 index 0b6369a43..3f6699a02 100644 --- a/puzzles files/masyu/6x6 Masyu Easy/6E_b0015 +++ b/puzzles files/masyu/6x6 Masyu Easy/6E_b0015 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Hard/6H_b0011 b/puzzles files/masyu/6x6 Masyu Hard/6H_b0011 index cdc27051a..3a14928d4 100644 --- a/puzzles files/masyu/6x6 Masyu Hard/6H_b0011 +++ b/puzzles files/masyu/6x6 Masyu Hard/6H_b0011 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Hard/6H_b0012 b/puzzles files/masyu/6x6 Masyu Hard/6H_b0012 index 37486fc6d..0b83a959f 100644 --- a/puzzles files/masyu/6x6 Masyu Hard/6H_b0012 +++ b/puzzles files/masyu/6x6 Masyu Hard/6H_b0012 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Hard/6H_b0013 b/puzzles files/masyu/6x6 Masyu Hard/6H_b0013 index 7b964b9a5..a8fe5d75c 100644 --- a/puzzles files/masyu/6x6 Masyu Hard/6H_b0013 +++ b/puzzles files/masyu/6x6 Masyu Hard/6H_b0013 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Hard/6H_b0014 b/puzzles files/masyu/6x6 Masyu Hard/6H_b0014 index 955ae0bf7..bb168f538 100644 --- a/puzzles files/masyu/6x6 Masyu Hard/6H_b0014 +++ b/puzzles files/masyu/6x6 Masyu Hard/6H_b0014 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Hard/6H_b0015 b/puzzles files/masyu/6x6 Masyu Hard/6H_b0015 index 0d70c6a5f..f0dbd74c7 100644 --- a/puzzles files/masyu/6x6 Masyu Hard/6H_b0015 +++ b/puzzles files/masyu/6x6 Masyu Hard/6H_b0015 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Medium/6M_b0011 b/puzzles files/masyu/6x6 Masyu Medium/6M_b0011 index 2738e3fbf..b7cea81c9 100644 --- a/puzzles files/masyu/6x6 Masyu Medium/6M_b0011 +++ b/puzzles files/masyu/6x6 Masyu Medium/6M_b0011 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Medium/6M_b0012 b/puzzles files/masyu/6x6 Masyu Medium/6M_b0012 index 154272c1b..76c564c01 100644 --- a/puzzles files/masyu/6x6 Masyu Medium/6M_b0012 +++ b/puzzles files/masyu/6x6 Masyu Medium/6M_b0012 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Medium/6M_b0013 b/puzzles files/masyu/6x6 Masyu Medium/6M_b0013 index 90543ddc5..319ca6f5b 100644 --- a/puzzles files/masyu/6x6 Masyu Medium/6M_b0013 +++ b/puzzles files/masyu/6x6 Masyu Medium/6M_b0013 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Medium/6M_b0014 b/puzzles files/masyu/6x6 Masyu Medium/6M_b0014 index 63a2522a5..eb4fc22bc 100644 --- a/puzzles files/masyu/6x6 Masyu Medium/6M_b0014 +++ b/puzzles files/masyu/6x6 Masyu Medium/6M_b0014 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/masyu/6x6 Masyu Medium/6M_b0015 b/puzzles files/masyu/6x6 Masyu Medium/6M_b0015 index 9391fa323..79c664f30 100644 --- a/puzzles files/masyu/6x6 Masyu Medium/6M_b0015 +++ b/puzzles files/masyu/6x6 Masyu Medium/6M_b0015 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/minesweeper/5x5 Minesweeper Easy/123456 b/puzzles files/minesweeper/5x5 Minesweeper Easy/123456 index 2aa0b46ab..b956613fb 100644 --- a/puzzles files/minesweeper/5x5 Minesweeper Easy/123456 +++ b/puzzles files/minesweeper/5x5 Minesweeper Easy/123456 @@ -1,11 +1,10 @@ - - + - + \ No newline at end of file diff --git a/puzzles files/narukabe_export tet b/puzzles files/narukabe_export tet index 5a3d467a8..b2bc24378 100644 --- a/puzzles files/narukabe_export tet +++ b/puzzles files/narukabe_export tet @@ -1,6 +1,5 @@ - - + @@ -28,5 +27,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Hard/3323808 b/puzzles files/nurikabe/10x10 Nurikabe Hard/3323808 index 2e904a776..07fac90fa 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Hard/3323808 +++ b/puzzles files/nurikabe/10x10 Nurikabe Hard/3323808 @@ -1,6 +1,5 @@ - - + @@ -17,5 +16,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Hard/7675382 b/puzzles files/nurikabe/10x10 Nurikabe Hard/7675382 index 1b4e40874..57516fa9f 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Hard/7675382 +++ b/puzzles files/nurikabe/10x10 Nurikabe Hard/7675382 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Hard/8264437 b/puzzles files/nurikabe/10x10 Nurikabe Hard/8264437 index 55f937d03..34253bc08 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Hard/8264437 +++ b/puzzles files/nurikabe/10x10 Nurikabe Hard/8264437 @@ -1,6 +1,5 @@ - - + @@ -21,5 +20,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Hard/8991218 b/puzzles files/nurikabe/10x10 Nurikabe Hard/8991218 index 657112cb9..f2e62419d 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Hard/8991218 +++ b/puzzles files/nurikabe/10x10 Nurikabe Hard/8991218 @@ -1,6 +1,5 @@ - - + @@ -19,5 +18,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Hard/9120893 b/puzzles files/nurikabe/10x10 Nurikabe Hard/9120893 index d572f328a..f8b771a90 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Hard/9120893 +++ b/puzzles files/nurikabe/10x10 Nurikabe Hard/9120893 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Normal/2852229 b/puzzles files/nurikabe/10x10 Nurikabe Normal/2852229 index 95fe86339..dca2c0e7b 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Normal/2852229 +++ b/puzzles files/nurikabe/10x10 Nurikabe Normal/2852229 @@ -1,6 +1,5 @@ - - + @@ -18,5 +17,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Normal/5759900 b/puzzles files/nurikabe/10x10 Nurikabe Normal/5759900 index 619c07167..5ced31337 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Normal/5759900 +++ b/puzzles files/nurikabe/10x10 Nurikabe Normal/5759900 @@ -1,6 +1,5 @@ - - + @@ -19,5 +18,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Normal/6274292 b/puzzles files/nurikabe/10x10 Nurikabe Normal/6274292 index 1296759b6..e9fd7f21f 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Normal/6274292 +++ b/puzzles files/nurikabe/10x10 Nurikabe Normal/6274292 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Normal/8920015 b/puzzles files/nurikabe/10x10 Nurikabe Normal/8920015 index 0261c7179..cd9db8957 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Normal/8920015 +++ b/puzzles files/nurikabe/10x10 Nurikabe Normal/8920015 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/10x10 Nurikabe Normal/9757357 b/puzzles files/nurikabe/10x10 Nurikabe Normal/9757357 index 7ce0cd387..5cc384830 100644 --- a/puzzles files/nurikabe/10x10 Nurikabe Normal/9757357 +++ b/puzzles files/nurikabe/10x10 Nurikabe Normal/9757357 @@ -1,6 +1,5 @@ - - + @@ -17,5 +16,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Hard/1276535 b/puzzles files/nurikabe/12x12 Nurikabe Hard/1276535 index 8a3cf255a..a2a4a574e 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Hard/1276535 +++ b/puzzles files/nurikabe/12x12 Nurikabe Hard/1276535 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Hard/4284912 b/puzzles files/nurikabe/12x12 Nurikabe Hard/4284912 index d1f9656a7..5eeb27fe4 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Hard/4284912 +++ b/puzzles files/nurikabe/12x12 Nurikabe Hard/4284912 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Hard/4459392 b/puzzles files/nurikabe/12x12 Nurikabe Hard/4459392 index ec91db1ca..61a67888f 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Hard/4459392 +++ b/puzzles files/nurikabe/12x12 Nurikabe Hard/4459392 @@ -1,6 +1,5 @@ - - + @@ -23,5 +22,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Hard/7738199 b/puzzles files/nurikabe/12x12 Nurikabe Hard/7738199 index b30f104e1..cba9d6f05 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Hard/7738199 +++ b/puzzles files/nurikabe/12x12 Nurikabe Hard/7738199 @@ -1,6 +1,5 @@ - - + @@ -21,5 +20,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Hard/9205907 b/puzzles files/nurikabe/12x12 Nurikabe Hard/9205907 index 0d78060bb..578d1d395 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Hard/9205907 +++ b/puzzles files/nurikabe/12x12 Nurikabe Hard/9205907 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Normal/1570101 b/puzzles files/nurikabe/12x12 Nurikabe Normal/1570101 index 6085b381b..4929fe88f 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Normal/1570101 +++ b/puzzles files/nurikabe/12x12 Nurikabe Normal/1570101 @@ -1,6 +1,5 @@ - - + @@ -24,5 +23,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Normal/3731930 b/puzzles files/nurikabe/12x12 Nurikabe Normal/3731930 index b4a764096..c99681918 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Normal/3731930 +++ b/puzzles files/nurikabe/12x12 Nurikabe Normal/3731930 @@ -1,6 +1,5 @@ - - + @@ -27,5 +26,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Normal/3755957 b/puzzles files/nurikabe/12x12 Nurikabe Normal/3755957 index 4ebc79df0..0ba4f082e 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Normal/3755957 +++ b/puzzles files/nurikabe/12x12 Nurikabe Normal/3755957 @@ -1,6 +1,5 @@ - - + @@ -24,5 +23,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Normal/786806 b/puzzles files/nurikabe/12x12 Nurikabe Normal/786806 index 07ce6747b..386e4b35b 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Normal/786806 +++ b/puzzles files/nurikabe/12x12 Nurikabe Normal/786806 @@ -1,6 +1,5 @@ - - + @@ -23,5 +22,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/12x12 Nurikabe Normal/9946063 b/puzzles files/nurikabe/12x12 Nurikabe Normal/9946063 index e446029ba..94dc2c764 100644 --- a/puzzles files/nurikabe/12x12 Nurikabe Normal/9946063 +++ b/puzzles files/nurikabe/12x12 Nurikabe Normal/9946063 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Hard/1125631 b/puzzles files/nurikabe/15x15 Nurikabe Hard/1125631 index 3c8c80102..eab784f51 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Hard/1125631 +++ b/puzzles files/nurikabe/15x15 Nurikabe Hard/1125631 @@ -1,6 +1,5 @@ - - + @@ -40,5 +39,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Hard/5955292 b/puzzles files/nurikabe/15x15 Nurikabe Hard/5955292 index 85bc5bb86..43b3b3e3e 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Hard/5955292 +++ b/puzzles files/nurikabe/15x15 Nurikabe Hard/5955292 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Hard/6763936 b/puzzles files/nurikabe/15x15 Nurikabe Hard/6763936 index 4675197d3..f88919b4e 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Hard/6763936 +++ b/puzzles files/nurikabe/15x15 Nurikabe Hard/6763936 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Hard/7005298 b/puzzles files/nurikabe/15x15 Nurikabe Hard/7005298 index 24f12d66d..629ed656b 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Hard/7005298 +++ b/puzzles files/nurikabe/15x15 Nurikabe Hard/7005298 @@ -1,6 +1,5 @@ - - + @@ -40,5 +39,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Hard/9975093 b/puzzles files/nurikabe/15x15 Nurikabe Hard/9975093 index c903364e7..d93c114f1 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Hard/9975093 +++ b/puzzles files/nurikabe/15x15 Nurikabe Hard/9975093 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Normal/141420 b/puzzles files/nurikabe/15x15 Nurikabe Normal/141420 index bf1cd00ec..5c1600d25 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Normal/141420 +++ b/puzzles files/nurikabe/15x15 Nurikabe Normal/141420 @@ -1,6 +1,5 @@ - - + @@ -46,5 +45,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Normal/4123443 b/puzzles files/nurikabe/15x15 Nurikabe Normal/4123443 index c086045d9..4a9ede116 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Normal/4123443 +++ b/puzzles files/nurikabe/15x15 Nurikabe Normal/4123443 @@ -1,6 +1,5 @@ - - + @@ -42,5 +41,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Normal/731385 b/puzzles files/nurikabe/15x15 Nurikabe Normal/731385 index 70fdf88f5..9ddad163d 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Normal/731385 +++ b/puzzles files/nurikabe/15x15 Nurikabe Normal/731385 @@ -1,6 +1,5 @@ - - + @@ -41,5 +40,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Normal/8213677 b/puzzles files/nurikabe/15x15 Nurikabe Normal/8213677 index 916c71760..400c9411a 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Normal/8213677 +++ b/puzzles files/nurikabe/15x15 Nurikabe Normal/8213677 @@ -1,6 +1,5 @@ - - + @@ -41,5 +40,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/15x15 Nurikabe Normal/8372309 b/puzzles files/nurikabe/15x15 Nurikabe Normal/8372309 index 14c9bec02..2fd560c28 100644 --- a/puzzles files/nurikabe/15x15 Nurikabe Normal/8372309 +++ b/puzzles files/nurikabe/15x15 Nurikabe Normal/8372309 @@ -1,6 +1,5 @@ - - + @@ -45,5 +44,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/20x20 Nurikabe Normal/175081 b/puzzles files/nurikabe/20x20 Nurikabe Normal/175081 index d093c61a7..3065839e3 100644 --- a/puzzles files/nurikabe/20x20 Nurikabe Normal/175081 +++ b/puzzles files/nurikabe/20x20 Nurikabe Normal/175081 @@ -1,6 +1,5 @@ - - + @@ -76,5 +75,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/20x20 Nurikabe Normal/3131243 b/puzzles files/nurikabe/20x20 Nurikabe Normal/3131243 index d783831b6..e15372ac4 100644 --- a/puzzles files/nurikabe/20x20 Nurikabe Normal/3131243 +++ b/puzzles files/nurikabe/20x20 Nurikabe Normal/3131243 @@ -1,6 +1,5 @@ - - + @@ -81,5 +80,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/20x20 Nurikabe Normal/4400487 b/puzzles files/nurikabe/20x20 Nurikabe Normal/4400487 index 0b994e35b..628d359fb 100644 --- a/puzzles files/nurikabe/20x20 Nurikabe Normal/4400487 +++ b/puzzles files/nurikabe/20x20 Nurikabe Normal/4400487 @@ -1,6 +1,5 @@ - - + @@ -75,5 +74,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/20x20 Nurikabe Normal/5096090 b/puzzles files/nurikabe/20x20 Nurikabe Normal/5096090 index decdb8ab0..e55e89f0e 100644 --- a/puzzles files/nurikabe/20x20 Nurikabe Normal/5096090 +++ b/puzzles files/nurikabe/20x20 Nurikabe Normal/5096090 @@ -1,6 +1,5 @@ - - + @@ -76,5 +75,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/20x20 Nurikabe Normal/8595641 b/puzzles files/nurikabe/20x20 Nurikabe Normal/8595641 index 8a27747b4..90370cb0d 100644 --- a/puzzles files/nurikabe/20x20 Nurikabe Normal/8595641 +++ b/puzzles files/nurikabe/20x20 Nurikabe Normal/8595641 @@ -1,6 +1,5 @@ - - + @@ -79,5 +78,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Easy/118040 b/puzzles files/nurikabe/5x5 Nurikabe Easy/118040 index 7fdd9d60d..396f5580c 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Easy/118040 +++ b/puzzles files/nurikabe/5x5 Nurikabe Easy/118040 @@ -1,6 +1,5 @@ - - + @@ -11,5 +10,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Easy/235235 b/puzzles files/nurikabe/5x5 Nurikabe Easy/235235 index 94992fde7..4365208e3 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Easy/235235 +++ b/puzzles files/nurikabe/5x5 Nurikabe Easy/235235 @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Hard/118040 b/puzzles files/nurikabe/5x5 Nurikabe Hard/118040 index 8c995d807..714be4e2b 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Hard/118040 +++ b/puzzles files/nurikabe/5x5 Nurikabe Hard/118040 @@ -1,6 +1,5 @@ - - + @@ -9,5 +8,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Hard/1726232 b/puzzles files/nurikabe/5x5 Nurikabe Hard/1726232 index 434b31e5f..7ec5ecbb9 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Hard/1726232 +++ b/puzzles files/nurikabe/5x5 Nurikabe Hard/1726232 @@ -1,6 +1,5 @@ - - + @@ -9,5 +8,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Hard/2168054 b/puzzles files/nurikabe/5x5 Nurikabe Hard/2168054 index 6e1c34ea5..d0441aa83 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Hard/2168054 +++ b/puzzles files/nurikabe/5x5 Nurikabe Hard/2168054 @@ -1,6 +1,5 @@ - - + @@ -9,5 +8,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Hard/7209030 b/puzzles files/nurikabe/5x5 Nurikabe Hard/7209030 index cd7fe4bfe..296945ffe 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Hard/7209030 +++ b/puzzles files/nurikabe/5x5 Nurikabe Hard/7209030 @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Hard/7897030 b/puzzles files/nurikabe/5x5 Nurikabe Hard/7897030 index 048387c9d..2fa5ba158 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Hard/7897030 +++ b/puzzles files/nurikabe/5x5 Nurikabe Hard/7897030 @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Normal/1795638 b/puzzles files/nurikabe/5x5 Nurikabe Normal/1795638 index 356e3e84b..bc802d724 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Normal/1795638 +++ b/puzzles files/nurikabe/5x5 Nurikabe Normal/1795638 @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Normal/2663893 b/puzzles files/nurikabe/5x5 Nurikabe Normal/2663893 index 4db53a64a..9a89d78c8 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Normal/2663893 +++ b/puzzles files/nurikabe/5x5 Nurikabe Normal/2663893 @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Normal/3282122 b/puzzles files/nurikabe/5x5 Nurikabe Normal/3282122 index 19082c83e..9e24e336c 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Normal/3282122 +++ b/puzzles files/nurikabe/5x5 Nurikabe Normal/3282122 @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Normal/6403086 b/puzzles files/nurikabe/5x5 Nurikabe Normal/6403086 index 369ff7f8b..47d151227 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Normal/6403086 +++ b/puzzles files/nurikabe/5x5 Nurikabe Normal/6403086 @@ -1,6 +1,5 @@ - - + @@ -12,5 +11,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/5x5 Nurikabe Normal/7587733 b/puzzles files/nurikabe/5x5 Nurikabe Normal/7587733 index 2374129c3..0a83de257 100644 --- a/puzzles files/nurikabe/5x5 Nurikabe Normal/7587733 +++ b/puzzles files/nurikabe/5x5 Nurikabe Normal/7587733 @@ -1,6 +1,5 @@ - - + @@ -11,5 +10,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Hard/4478248 b/puzzles files/nurikabe/7x7 Nurikabe Hard/4478248 index 3413d8777..1dfa98fb2 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Hard/4478248 +++ b/puzzles files/nurikabe/7x7 Nurikabe Hard/4478248 @@ -1,6 +1,5 @@ - - + @@ -11,5 +10,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Hard/5631322 b/puzzles files/nurikabe/7x7 Nurikabe Hard/5631322 index 8c73dd94e..8a4398c17 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Hard/5631322 +++ b/puzzles files/nurikabe/7x7 Nurikabe Hard/5631322 @@ -1,6 +1,5 @@ - - + @@ -12,5 +11,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Hard/6734769 b/puzzles files/nurikabe/7x7 Nurikabe Hard/6734769 index 4970c3cfd..d44bf8d28 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Hard/6734769 +++ b/puzzles files/nurikabe/7x7 Nurikabe Hard/6734769 @@ -1,6 +1,5 @@ - - + @@ -12,5 +11,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Hard/8078467 b/puzzles files/nurikabe/7x7 Nurikabe Hard/8078467 index b44dfa06b..ef4c60ec1 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Hard/8078467 +++ b/puzzles files/nurikabe/7x7 Nurikabe Hard/8078467 @@ -1,6 +1,5 @@ - - + @@ -12,5 +11,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Hard/9225348 b/puzzles files/nurikabe/7x7 Nurikabe Hard/9225348 index becf841dd..927105753 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Hard/9225348 +++ b/puzzles files/nurikabe/7x7 Nurikabe Hard/9225348 @@ -1,6 +1,5 @@ - - + @@ -11,5 +10,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Normal/42455 b/puzzles files/nurikabe/7x7 Nurikabe Normal/42455 index f1264c1e6..1fb449cdb 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Normal/42455 +++ b/puzzles files/nurikabe/7x7 Nurikabe Normal/42455 @@ -1,6 +1,5 @@ - - + @@ -11,5 +10,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Normal/4390561 b/puzzles files/nurikabe/7x7 Nurikabe Normal/4390561 index 2495902b7..7ed93390d 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Normal/4390561 +++ b/puzzles files/nurikabe/7x7 Nurikabe Normal/4390561 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Normal/4877172 b/puzzles files/nurikabe/7x7 Nurikabe Normal/4877172 index 6ba3f9230..43bbfc065 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Normal/4877172 +++ b/puzzles files/nurikabe/7x7 Nurikabe Normal/4877172 @@ -1,6 +1,5 @@ - - + @@ -14,5 +13,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Normal/7958242 b/puzzles files/nurikabe/7x7 Nurikabe Normal/7958242 index 50b3ae7d6..6b5d9135b 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Normal/7958242 +++ b/puzzles files/nurikabe/7x7 Nurikabe Normal/7958242 @@ -1,6 +1,5 @@ - - + @@ -12,5 +11,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/nurikabe/7x7 Nurikabe Normal/8786625 b/puzzles files/nurikabe/7x7 Nurikabe Normal/8786625 index cc1b79856..2d5449e1e 100644 --- a/puzzles files/nurikabe/7x7 Nurikabe Normal/8786625 +++ b/puzzles files/nurikabe/7x7 Nurikabe Normal/8786625 @@ -1,6 +1,5 @@ - - + @@ -12,5 +11,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/DeMorgan.xml b/puzzles files/shorttruthtable/DeMorgan.xml index 37df685c3..833caf8ca 100644 --- a/puzzles files/shorttruthtable/DeMorgan.xml +++ b/puzzles files/shorttruthtable/DeMorgan.xml @@ -1,6 +1,5 @@ - - + @@ -8,5 +7,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_01.xml b/puzzles files/shorttruthtable/Heuveln_01.xml index 3cf188d64..96afb6bef 100644 --- a/puzzles files/shorttruthtable/Heuveln_01.xml +++ b/puzzles files/shorttruthtable/Heuveln_01.xml @@ -1,14 +1,13 @@ - - + - + - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_02.xml b/puzzles files/shorttruthtable/Heuveln_02.xml index 92e0f9988..c93c85fe4 100644 --- a/puzzles files/shorttruthtable/Heuveln_02.xml +++ b/puzzles files/shorttruthtable/Heuveln_02.xml @@ -1,14 +1,13 @@ - - + - - - - + + + + - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_03.xml b/puzzles files/shorttruthtable/Heuveln_03.xml index 31e19e0a9..c2cae503e 100644 --- a/puzzles files/shorttruthtable/Heuveln_03.xml +++ b/puzzles files/shorttruthtable/Heuveln_03.xml @@ -1,14 +1,13 @@ - - + - + - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_04.xml b/puzzles files/shorttruthtable/Heuveln_04.xml index 97e7a944a..331a88063 100644 --- a/puzzles files/shorttruthtable/Heuveln_04.xml +++ b/puzzles files/shorttruthtable/Heuveln_04.xml @@ -1,13 +1,12 @@ - - + - - - + + + - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_04.xml_test02 b/puzzles files/shorttruthtable/Heuveln_04.xml_test02 index ba0eb274b..1d2248ae7 100644 --- a/puzzles files/shorttruthtable/Heuveln_04.xml_test02 +++ b/puzzles files/shorttruthtable/Heuveln_04.xml_test02 @@ -1,6 +1,5 @@ - - + @@ -23,5 +22,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_04_export test.xml b/puzzles files/shorttruthtable/Heuveln_04_export test.xml index 9e3865319..c0d54b491 100644 --- a/puzzles files/shorttruthtable/Heuveln_04_export test.xml +++ b/puzzles files/shorttruthtable/Heuveln_04_export test.xml @@ -1,6 +1,5 @@ - - + @@ -65,5 +64,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_04_test.xml b/puzzles files/shorttruthtable/Heuveln_04_test.xml index ae5c8bab6..e879de1d3 100644 --- a/puzzles files/shorttruthtable/Heuveln_04_test.xml +++ b/puzzles files/shorttruthtable/Heuveln_04_test.xml @@ -1,6 +1,5 @@ - - + @@ -23,5 +22,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_04_test01.xml b/puzzles files/shorttruthtable/Heuveln_04_test01.xml index cc5addabd..800b2e21b 100644 --- a/puzzles files/shorttruthtable/Heuveln_04_test01.xml +++ b/puzzles files/shorttruthtable/Heuveln_04_test01.xml @@ -1,6 +1,5 @@ - - + @@ -23,5 +22,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_04_test03.xml b/puzzles files/shorttruthtable/Heuveln_04_test03.xml index 135af1c82..80b4efe75 100644 --- a/puzzles files/shorttruthtable/Heuveln_04_test03.xml +++ b/puzzles files/shorttruthtable/Heuveln_04_test03.xml @@ -1,6 +1,5 @@ - - + @@ -23,5 +22,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_04_test_exprt.xml b/puzzles files/shorttruthtable/Heuveln_04_test_exprt.xml index 4943ac6d3..ae0d81491 100644 --- a/puzzles files/shorttruthtable/Heuveln_04_test_exprt.xml +++ b/puzzles files/shorttruthtable/Heuveln_04_test_exprt.xml @@ -1,6 +1,5 @@ - - + @@ -23,5 +22,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/Heuveln_05.xml b/puzzles files/shorttruthtable/Heuveln_05.xml index 05b37d5db..881a10ef5 100644 --- a/puzzles files/shorttruthtable/Heuveln_05.xml +++ b/puzzles files/shorttruthtable/Heuveln_05.xml @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/empty_test.xml b/puzzles files/shorttruthtable/empty_test.xml index 2d8e4b6c8..9bdddf428 100644 --- a/puzzles files/shorttruthtable/empty_test.xml +++ b/puzzles files/shorttruthtable/empty_test.xml @@ -1,9 +1,8 @@ - - + - + @@ -11,4 +10,4 @@ - + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/invalid1.xml b/puzzles files/shorttruthtable/invalid1.xml index 18bd38a49..327cb9cd8 100644 --- a/puzzles files/shorttruthtable/invalid1.xml +++ b/puzzles files/shorttruthtable/invalid1.xml @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/invalid2.xml b/puzzles files/shorttruthtable/invalid2.xml index 08091a283..50249f219 100644 --- a/puzzles files/shorttruthtable/invalid2.xml +++ b/puzzles files/shorttruthtable/invalid2.xml @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/invalid3.xml b/puzzles files/shorttruthtable/invalid3.xml index b7a0d61a7..c5992504a 100644 --- a/puzzles files/shorttruthtable/invalid3.xml +++ b/puzzles files/shorttruthtable/invalid3.xml @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/shorttruthtable/test.xml b/puzzles files/shorttruthtable/test.xml index 5e5f93362..ad55f21d6 100644 --- a/puzzles files/shorttruthtable/test.xml +++ b/puzzles files/shorttruthtable/test.xml @@ -1,6 +1,5 @@ - - + @@ -10,5 +9,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/skyscrapers/4x4 Skyscrapers Easy1 b/puzzles files/skyscrapers/4x4 Skyscrapers Easy1 index 64fa7a340..a2c988c5c 100644 --- a/puzzles files/skyscrapers/4x4 Skyscrapers Easy1 +++ b/puzzles files/skyscrapers/4x4 Skyscrapers Easy1 @@ -1,6 +1,5 @@ - - + @@ -20,5 +19,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/skyscrapers/4x4 Skyscrapers Easy2 b/puzzles files/skyscrapers/4x4 Skyscrapers Easy2 index e30fbd89e..c292c5a11 100644 --- a/puzzles files/skyscrapers/4x4 Skyscrapers Easy2 +++ b/puzzles files/skyscrapers/4x4 Skyscrapers Easy2 @@ -1,6 +1,5 @@ - - + @@ -20,4 +19,4 @@ - + \ No newline at end of file diff --git a/puzzles files/skyscrapers/4x4 Skyscrapers Easy3 b/puzzles files/skyscrapers/4x4 Skyscrapers Easy3 index 61fa8054b..311bbe2a4 100644 --- a/puzzles files/skyscrapers/4x4 Skyscrapers Easy3 +++ b/puzzles files/skyscrapers/4x4 Skyscrapers Easy3 @@ -1,6 +1,5 @@ - - + @@ -20,4 +19,4 @@ - + \ No newline at end of file diff --git a/puzzles files/skyscrapers/5x5 Skyscrapers Easy1 b/puzzles files/skyscrapers/5x5 Skyscrapers Easy1 index 111d2bd87..1e3f1851c 100644 --- a/puzzles files/skyscrapers/5x5 Skyscrapers Easy1 +++ b/puzzles files/skyscrapers/5x5 Skyscrapers Easy1 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,4 @@ - - + \ No newline at end of file diff --git a/puzzles files/skyscrapers/5x5 Skyscrapers Easy2 b/puzzles files/skyscrapers/5x5 Skyscrapers Easy2 index 45a1db188..eccc248b3 100644 --- a/puzzles files/skyscrapers/5x5 Skyscrapers Easy2 +++ b/puzzles files/skyscrapers/5x5 Skyscrapers Easy2 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,4 @@ - - + \ No newline at end of file diff --git a/puzzles files/skyscrapers/5x5 Skyscrapers Easy3 b/puzzles files/skyscrapers/5x5 Skyscrapers Easy3 index 87f7db3d7..899cc8065 100644 --- a/puzzles files/skyscrapers/5x5 Skyscrapers Easy3 +++ b/puzzles files/skyscrapers/5x5 Skyscrapers Easy3 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,4 @@ - - + \ No newline at end of file diff --git a/puzzles files/skyscrapers/5x5 Skyscrapers Medium1 b/puzzles files/skyscrapers/5x5 Skyscrapers Medium1 index 9e79c6248..7998d5aa4 100644 --- a/puzzles files/skyscrapers/5x5 Skyscrapers Medium1 +++ b/puzzles files/skyscrapers/5x5 Skyscrapers Medium1 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,4 @@ - - + \ No newline at end of file diff --git a/puzzles files/skyscrapers/5x5 Skyscrapers Medium2 b/puzzles files/skyscrapers/5x5 Skyscrapers Medium2 index fab87f9f7..89ed95c86 100644 --- a/puzzles files/skyscrapers/5x5 Skyscrapers Medium2 +++ b/puzzles files/skyscrapers/5x5 Skyscrapers Medium2 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,4 @@ - - + \ No newline at end of file diff --git a/puzzles files/skyscrapers/5x5 Skyscrapers Medium3 b/puzzles files/skyscrapers/5x5 Skyscrapers Medium3 index efd123165..b8cce12f5 100644 --- a/puzzles files/skyscrapers/5x5 Skyscrapers Medium3 +++ b/puzzles files/skyscrapers/5x5 Skyscrapers Medium3 @@ -1,6 +1,5 @@ - - + @@ -22,5 +21,4 @@ - - + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Advanced/15189327 b/puzzles files/sudoku/3x3 Sudoku Advanced/15189327 index 23ec1c161..c1f8f74c9 100644 --- a/puzzles files/sudoku/3x3 Sudoku Advanced/15189327 +++ b/puzzles files/sudoku/3x3 Sudoku Advanced/15189327 @@ -1,6 +1,5 @@ - - + @@ -34,5 +33,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Advanced/20628823 b/puzzles files/sudoku/3x3 Sudoku Advanced/20628823 index f3d08ebec..9194d1361 100644 --- a/puzzles files/sudoku/3x3 Sudoku Advanced/20628823 +++ b/puzzles files/sudoku/3x3 Sudoku Advanced/20628823 @@ -1,6 +1,5 @@ - - + @@ -34,5 +33,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Advanced/45527956 b/puzzles files/sudoku/3x3 Sudoku Advanced/45527956 index 6f6e1f1bc..772545f5b 100644 --- a/puzzles files/sudoku/3x3 Sudoku Advanced/45527956 +++ b/puzzles files/sudoku/3x3 Sudoku Advanced/45527956 @@ -1,6 +1,5 @@ - - + @@ -36,5 +35,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Advanced/9370592 b/puzzles files/sudoku/3x3 Sudoku Advanced/9370592 index 58fb0f545..92857e6ca 100644 --- a/puzzles files/sudoku/3x3 Sudoku Advanced/9370592 +++ b/puzzles files/sudoku/3x3 Sudoku Advanced/9370592 @@ -1,6 +1,5 @@ - - + @@ -35,5 +34,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Advanced/9680726 b/puzzles files/sudoku/3x3 Sudoku Advanced/9680726 index ebf161277..18e0c56e3 100644 --- a/puzzles files/sudoku/3x3 Sudoku Advanced/9680726 +++ b/puzzles files/sudoku/3x3 Sudoku Advanced/9680726 @@ -1,6 +1,5 @@ - - + @@ -33,5 +32,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Basic/14538464 b/puzzles files/sudoku/3x3 Sudoku Basic/14538464 index 44f6cc1cb..b9dda512d 100644 --- a/puzzles files/sudoku/3x3 Sudoku Basic/14538464 +++ b/puzzles files/sudoku/3x3 Sudoku Basic/14538464 @@ -1,6 +1,5 @@ - - + @@ -34,5 +33,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Basic/32722678 b/puzzles files/sudoku/3x3 Sudoku Basic/32722678 index 9c6d04fdd..0fd3ddf1b 100644 --- a/puzzles files/sudoku/3x3 Sudoku Basic/32722678 +++ b/puzzles files/sudoku/3x3 Sudoku Basic/32722678 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Basic/61362355 b/puzzles files/sudoku/3x3 Sudoku Basic/61362355 index 063f011d4..ef578d5b0 100644 --- a/puzzles files/sudoku/3x3 Sudoku Basic/61362355 +++ b/puzzles files/sudoku/3x3 Sudoku Basic/61362355 @@ -1,6 +1,5 @@ - - + @@ -40,5 +39,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Basic/63397584 b/puzzles files/sudoku/3x3 Sudoku Basic/63397584 index 078fc79e9..33fc344a4 100644 --- a/puzzles files/sudoku/3x3 Sudoku Basic/63397584 +++ b/puzzles files/sudoku/3x3 Sudoku Basic/63397584 @@ -1,6 +1,5 @@ - - + @@ -40,5 +39,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Basic/75565282 b/puzzles files/sudoku/3x3 Sudoku Basic/75565282 index 8bdd8ed34..03a692193 100644 --- a/puzzles files/sudoku/3x3 Sudoku Basic/75565282 +++ b/puzzles files/sudoku/3x3 Sudoku Basic/75565282 @@ -1,6 +1,5 @@ - - + @@ -40,5 +39,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Easy/1602661 b/puzzles files/sudoku/3x3 Sudoku Easy/1602661 index f66c2cfab..156ccf8bf 100644 --- a/puzzles files/sudoku/3x3 Sudoku Easy/1602661 +++ b/puzzles files/sudoku/3x3 Sudoku Easy/1602661 @@ -1,6 +1,5 @@ - - + @@ -33,5 +32,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Easy/17756306 b/puzzles files/sudoku/3x3 Sudoku Easy/17756306 index aee2f5e92..6b4f5a489 100644 --- a/puzzles files/sudoku/3x3 Sudoku Easy/17756306 +++ b/puzzles files/sudoku/3x3 Sudoku Easy/17756306 @@ -1,6 +1,5 @@ - - + @@ -33,5 +32,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Easy/48718527 b/puzzles files/sudoku/3x3 Sudoku Easy/48718527 index c1ee41b5c..5853f2266 100644 --- a/puzzles files/sudoku/3x3 Sudoku Easy/48718527 +++ b/puzzles files/sudoku/3x3 Sudoku Easy/48718527 @@ -1,6 +1,5 @@ - - + @@ -34,5 +33,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Easy/50638522 b/puzzles files/sudoku/3x3 Sudoku Easy/50638522 index f390c5f11..5edfcebd7 100644 --- a/puzzles files/sudoku/3x3 Sudoku Easy/50638522 +++ b/puzzles files/sudoku/3x3 Sudoku Easy/50638522 @@ -1,6 +1,5 @@ - - + @@ -33,5 +32,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Easy/52671552 b/puzzles files/sudoku/3x3 Sudoku Easy/52671552 index 738db6337..dba517672 100644 --- a/puzzles files/sudoku/3x3 Sudoku Easy/52671552 +++ b/puzzles files/sudoku/3x3 Sudoku Easy/52671552 @@ -1,6 +1,5 @@ - - + @@ -34,5 +33,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Evil/10251277 b/puzzles files/sudoku/3x3 Sudoku Evil/10251277 index 7d83571f1..54ec40eb5 100644 --- a/puzzles files/sudoku/3x3 Sudoku Evil/10251277 +++ b/puzzles files/sudoku/3x3 Sudoku Evil/10251277 @@ -1,6 +1,5 @@ - - + @@ -36,5 +35,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Evil/112402 b/puzzles files/sudoku/3x3 Sudoku Evil/112402 index 48aea3690..68c787230 100644 --- a/puzzles files/sudoku/3x3 Sudoku Evil/112402 +++ b/puzzles files/sudoku/3x3 Sudoku Evil/112402 @@ -1,6 +1,5 @@ - - + @@ -31,5 +30,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Evil/285907 b/puzzles files/sudoku/3x3 Sudoku Evil/285907 index f5080c051..cb6035a99 100644 --- a/puzzles files/sudoku/3x3 Sudoku Evil/285907 +++ b/puzzles files/sudoku/3x3 Sudoku Evil/285907 @@ -1,6 +1,5 @@ - - + @@ -32,5 +31,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Evil/3152911 b/puzzles files/sudoku/3x3 Sudoku Evil/3152911 index ab6fc40d8..d48ae21d8 100644 --- a/puzzles files/sudoku/3x3 Sudoku Evil/3152911 +++ b/puzzles files/sudoku/3x3 Sudoku Evil/3152911 @@ -1,6 +1,5 @@ - - + @@ -33,5 +32,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Evil/89765 b/puzzles files/sudoku/3x3 Sudoku Evil/89765 index 580ddb90a..2b91e6113 100644 --- a/puzzles files/sudoku/3x3 Sudoku Evil/89765 +++ b/puzzles files/sudoku/3x3 Sudoku Evil/89765 @@ -1,6 +1,5 @@ - - + @@ -31,5 +30,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Extreme/10119634 b/puzzles files/sudoku/3x3 Sudoku Extreme/10119634 index 0ba7ff226..f37a0b2dd 100644 --- a/puzzles files/sudoku/3x3 Sudoku Extreme/10119634 +++ b/puzzles files/sudoku/3x3 Sudoku Extreme/10119634 @@ -1,6 +1,5 @@ - - + @@ -40,5 +39,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Extreme/1922600 b/puzzles files/sudoku/3x3 Sudoku Extreme/1922600 index a01843285..196484ec6 100644 --- a/puzzles files/sudoku/3x3 Sudoku Extreme/1922600 +++ b/puzzles files/sudoku/3x3 Sudoku Extreme/1922600 @@ -1,6 +1,5 @@ - - + @@ -31,5 +30,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Extreme/3924003 b/puzzles files/sudoku/3x3 Sudoku Extreme/3924003 index d582bc111..2d8d40442 100644 --- a/puzzles files/sudoku/3x3 Sudoku Extreme/3924003 +++ b/puzzles files/sudoku/3x3 Sudoku Extreme/3924003 @@ -1,6 +1,5 @@ - - + @@ -32,5 +31,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Extreme/469747 b/puzzles files/sudoku/3x3 Sudoku Extreme/469747 index 51d65175c..24b28802e 100644 --- a/puzzles files/sudoku/3x3 Sudoku Extreme/469747 +++ b/puzzles files/sudoku/3x3 Sudoku Extreme/469747 @@ -1,6 +1,5 @@ - - + @@ -33,5 +32,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Extreme/7643647 b/puzzles files/sudoku/3x3 Sudoku Extreme/7643647 index 003e88bac..8b09f22b3 100644 --- a/puzzles files/sudoku/3x3 Sudoku Extreme/7643647 +++ b/puzzles files/sudoku/3x3 Sudoku Extreme/7643647 @@ -1,6 +1,5 @@ - - + @@ -32,5 +31,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Intermediate/22925923 b/puzzles files/sudoku/3x3 Sudoku Intermediate/22925923 index 638498b64..e1a4816fc 100644 --- a/puzzles files/sudoku/3x3 Sudoku Intermediate/22925923 +++ b/puzzles files/sudoku/3x3 Sudoku Intermediate/22925923 @@ -1,6 +1,5 @@ - - + @@ -34,5 +33,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Intermediate/44179211 b/puzzles files/sudoku/3x3 Sudoku Intermediate/44179211 index afe4a6302..e9f3cf08d 100644 --- a/puzzles files/sudoku/3x3 Sudoku Intermediate/44179211 +++ b/puzzles files/sudoku/3x3 Sudoku Intermediate/44179211 @@ -1,6 +1,5 @@ - - + @@ -32,5 +31,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Intermediate/59467143 b/puzzles files/sudoku/3x3 Sudoku Intermediate/59467143 index df1f674c3..845392e40 100644 --- a/puzzles files/sudoku/3x3 Sudoku Intermediate/59467143 +++ b/puzzles files/sudoku/3x3 Sudoku Intermediate/59467143 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Intermediate/7405304 b/puzzles files/sudoku/3x3 Sudoku Intermediate/7405304 index 8d0b936ad..c2d4fb3b5 100644 --- a/puzzles files/sudoku/3x3 Sudoku Intermediate/7405304 +++ b/puzzles files/sudoku/3x3 Sudoku Intermediate/7405304 @@ -1,6 +1,5 @@ - - + @@ -32,5 +31,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/sudoku/3x3 Sudoku Intermediate/78017020 b/puzzles files/sudoku/3x3 Sudoku Intermediate/78017020 index c41d2ab17..7b3ff1859 100644 --- a/puzzles files/sudoku/3x3 Sudoku Intermediate/78017020 +++ b/puzzles files/sudoku/3x3 Sudoku Intermediate/78017020 @@ -1,6 +1,5 @@ - - + @@ -34,5 +33,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/thermometer/therm_test.xml b/puzzles files/thermometer/therm_test.xml index 66e841dc5..3ebe2e10f 100644 --- a/puzzles files/thermometer/therm_test.xml +++ b/puzzles files/thermometer/therm_test.xml @@ -1,6 +1,5 @@ - - + @@ -24,4 +23,4 @@ - + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Easy/061177 b/puzzles files/treetent/12x12 TreeTent Easy/061177 index 18a30f70a..d6b4dec4b 100644 --- a/puzzles files/treetent/12x12 TreeTent Easy/061177 +++ b/puzzles files/treetent/12x12 TreeTent Easy/061177 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Easy/198217 b/puzzles files/treetent/12x12 TreeTent Easy/198217 index 99e04cc2e..893683e24 100644 --- a/puzzles files/treetent/12x12 TreeTent Easy/198217 +++ b/puzzles files/treetent/12x12 TreeTent Easy/198217 @@ -1,6 +1,5 @@ - - + @@ -61,5 +60,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Easy/255410 b/puzzles files/treetent/12x12 TreeTent Easy/255410 index da0820c7d..b4e50328c 100644 --- a/puzzles files/treetent/12x12 TreeTent Easy/255410 +++ b/puzzles files/treetent/12x12 TreeTent Easy/255410 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Easy/790635 b/puzzles files/treetent/12x12 TreeTent Easy/790635 index 86284f458..a1072cbbd 100644 --- a/puzzles files/treetent/12x12 TreeTent Easy/790635 +++ b/puzzles files/treetent/12x12 TreeTent Easy/790635 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Easy/805457 b/puzzles files/treetent/12x12 TreeTent Easy/805457 index 55103db74..922ad5f6f 100644 --- a/puzzles files/treetent/12x12 TreeTent Easy/805457 +++ b/puzzles files/treetent/12x12 TreeTent Easy/805457 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Medium/154674 b/puzzles files/treetent/12x12 TreeTent Medium/154674 index 16121d315..ef305bba3 100644 --- a/puzzles files/treetent/12x12 TreeTent Medium/154674 +++ b/puzzles files/treetent/12x12 TreeTent Medium/154674 @@ -1,6 +1,5 @@ - - + @@ -61,5 +60,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Medium/330689 b/puzzles files/treetent/12x12 TreeTent Medium/330689 index 438a98451..57c880c9a 100644 --- a/puzzles files/treetent/12x12 TreeTent Medium/330689 +++ b/puzzles files/treetent/12x12 TreeTent Medium/330689 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Medium/538746 b/puzzles files/treetent/12x12 TreeTent Medium/538746 index bead4295a..a9b3d0b86 100644 --- a/puzzles files/treetent/12x12 TreeTent Medium/538746 +++ b/puzzles files/treetent/12x12 TreeTent Medium/538746 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Medium/579921 b/puzzles files/treetent/12x12 TreeTent Medium/579921 index de6aefbdc..907d44ee9 100644 --- a/puzzles files/treetent/12x12 TreeTent Medium/579921 +++ b/puzzles files/treetent/12x12 TreeTent Medium/579921 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/12x12 TreeTent Medium/723664 b/puzzles files/treetent/12x12 TreeTent Medium/723664 index 541778a86..109ab4efd 100644 --- a/puzzles files/treetent/12x12 TreeTent Medium/723664 +++ b/puzzles files/treetent/12x12 TreeTent Medium/723664 @@ -1,6 +1,5 @@ - - + @@ -62,5 +61,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Easy/13547135 b/puzzles files/treetent/8x8 TreeTent Easy/13547135 index dc04c7756..a87893506 100644 --- a/puzzles files/treetent/8x8 TreeTent Easy/13547135 +++ b/puzzles files/treetent/8x8 TreeTent Easy/13547135 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Easy/1646651 b/puzzles files/treetent/8x8 TreeTent Easy/1646651 index db70ca164..1d74da63c 100644 --- a/puzzles files/treetent/8x8 TreeTent Easy/1646651 +++ b/puzzles files/treetent/8x8 TreeTent Easy/1646651 @@ -1,7 +1,6 @@ - - + @@ -39,5 +38,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Easy/1789167 b/puzzles files/treetent/8x8 TreeTent Easy/1789167 index 54a7e6be3..ad765940c 100644 --- a/puzzles files/treetent/8x8 TreeTent Easy/1789167 +++ b/puzzles files/treetent/8x8 TreeTent Easy/1789167 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Easy/32518510 b/puzzles files/treetent/8x8 TreeTent Easy/32518510 index 431aea1b5..3a95168df 100644 --- a/puzzles files/treetent/8x8 TreeTent Easy/32518510 +++ b/puzzles files/treetent/8x8 TreeTent Easy/32518510 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Easy/4614656 b/puzzles files/treetent/8x8 TreeTent Easy/4614656 index 674f90443..2cc1301c6 100644 --- a/puzzles files/treetent/8x8 TreeTent Easy/4614656 +++ b/puzzles files/treetent/8x8 TreeTent Easy/4614656 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Medium/351654 b/puzzles files/treetent/8x8 TreeTent Medium/351654 index 971633403..3971342ae 100644 --- a/puzzles files/treetent/8x8 TreeTent Medium/351654 +++ b/puzzles files/treetent/8x8 TreeTent Medium/351654 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Medium/35496 b/puzzles files/treetent/8x8 TreeTent Medium/35496 index 61577fa36..a42d03a38 100644 --- a/puzzles files/treetent/8x8 TreeTent Medium/35496 +++ b/puzzles files/treetent/8x8 TreeTent Medium/35496 @@ -1,6 +1,5 @@ - - + @@ -37,5 +36,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Medium/4656816 b/puzzles files/treetent/8x8 TreeTent Medium/4656816 index 6cc27744c..40c6266a8 100644 --- a/puzzles files/treetent/8x8 TreeTent Medium/4656816 +++ b/puzzles files/treetent/8x8 TreeTent Medium/4656816 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Medium/6549871 b/puzzles files/treetent/8x8 TreeTent Medium/6549871 index ae8d27d33..ee3c11fa0 100644 --- a/puzzles files/treetent/8x8 TreeTent Medium/6549871 +++ b/puzzles files/treetent/8x8 TreeTent Medium/6549871 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/puzzles files/treetent/8x8 TreeTent Medium/989496 b/puzzles files/treetent/8x8 TreeTent Medium/989496 index cfe358fde..a984e756e 100644 --- a/puzzles files/treetent/8x8 TreeTent Medium/989496 +++ b/puzzles files/treetent/8x8 TreeTent Medium/989496 @@ -1,6 +1,5 @@ - - + @@ -38,5 +37,5 @@ - - + + \ No newline at end of file diff --git a/src/main/java/edu/rpi/legup/model/Puzzle.java b/src/main/java/edu/rpi/legup/model/Puzzle.java index da8f76ddd..8fb615d1f 100644 --- a/src/main/java/edu/rpi/legup/model/Puzzle.java +++ b/src/main/java/edu/rpi/legup/model/Puzzle.java @@ -44,6 +44,7 @@ public abstract class Puzzle implements IBoardSubject, ITreeSubject { private static final Logger LOGGER = LogManager.getLogger(Puzzle.class.getName()); protected String name; + protected String tag = ""; protected Board currentBoard; protected Tree tree; protected BoardView boardView; @@ -380,6 +381,22 @@ public void removeDirectRule(DirectRule rule) { directRules.remove(rule); } + /** + * Accessor method for the puzzle UUID + * @return returns the puzzle UUID tag + */ + public String getTag() { + return tag; + } + + /** + * Modifier method to override the puzzle persistent UUID + * @param tag String to overwrite the current puzzle UUID + */ + public void setTag(String tag) { + this.tag = tag; + } + /** * Gets the list of contradiction rules * diff --git a/src/main/java/edu/rpi/legup/model/PuzzleExporter.java b/src/main/java/edu/rpi/legup/model/PuzzleExporter.java index 13107bb54..dc8fa14a5 100644 --- a/src/main/java/edu/rpi/legup/model/PuzzleExporter.java +++ b/src/main/java/edu/rpi/legup/model/PuzzleExporter.java @@ -7,7 +7,9 @@ import java.io.File; import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -39,6 +41,47 @@ public PuzzleExporter(Puzzle puzzle) { this.puzzle = puzzle; } + public static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + /** + * Takes the puzzle state and the current date/time to obfuscate + * the solved state with an onto function to prevent cheating + * + * @param solved the solved state of the board, true if solved + * @param date the current date and time, passed during export + * @return hash value of time and solved state + */ + public static int obfHash(boolean solved, String date) { + LocalDateTime dateTime = LocalDateTime.parse(date, DATE_FORMAT); + String obf = solved + ":" + dateTime.toEpochSecond(ZoneOffset.UTC) + ";"; + return obf.hashCode(); + } + + /** + * Deobfuscates the solved state of the board from hash value using + * the time provided in the puzzle xml-style export + * + * @param hash the hash value saved to the export + * @param date the date/time value saved to the export + * @return boolean value of the solved state of the board + */ + public static Boolean inverseHash(int hash, String date) { + long timestamp; + try { + LocalDateTime dateTime = LocalDateTime.parse(date, DATE_FORMAT); + timestamp = dateTime.toEpochSecond(ZoneOffset.UTC); + } catch (DateTimeParseException e) { + timestamp = -1; + } + + if ((true+":"+timestamp+";").hashCode() == hash) { + return Boolean.TRUE; + } else if ((false+":"+timestamp+";").hashCode() == hash) { + return Boolean.FALSE; + } + return null; + } + /** * Exports the puzzle to an xml formatted file * @@ -47,6 +90,10 @@ public PuzzleExporter(Puzzle puzzle) { */ public void exportPuzzle(String fileName) throws ExportFileException { try { + // quick patch for ParserConfigurationException thrown + // when a double quote is placed in the file name + fileName = fileName.replace("\"", ""); + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document newDocument = docBuilder.newDocument(); @@ -55,10 +102,9 @@ public void exportPuzzle(String fileName) throws ExportFileException { legupElement.setAttribute("version", "3.0.0"); newDocument.appendChild(legupElement); - org.w3c.dom.Element timeSavedElement = newDocument.createElement("saved"); - legupElement.appendChild(timeSavedElement); - org.w3c.dom.Element puzzleElement = newDocument.createElement("puzzle"); + String idStr = puzzle.getTag().isEmpty() ? fileName.substring(fileName.lastIndexOf("\\") + 1) : puzzle.getTag(); + puzzleElement.setAttribute("tag", idStr); puzzleElement.setAttribute("name", puzzle.getName()); legupElement.appendChild(puzzleElement); @@ -69,14 +115,11 @@ public void exportPuzzle(String fileName) throws ExportFileException { } org.w3c.dom.Element statusElement = newDocument.createElement("solved"); - String isSolved = "false"; - if (puzzle.isPuzzleComplete()) { - isSolved = "true"; - } - statusElement.setAttribute("isSolved", isSolved); LocalDateTime dateTime = LocalDateTime.now(ZoneId.of("America/New_York")); - String time = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + String time = dateTime.format(DATE_FORMAT); statusElement.setAttribute("lastSaved", time); + int hashedState = obfHash(puzzle.isPuzzleComplete(), time); + statusElement.setAttribute("isSolved", hashedState+""); legupElement.appendChild(statusElement); TransformerFactory transformerFactory = TransformerFactory.newInstance(); diff --git a/src/main/java/edu/rpi/legup/model/PuzzleImporter.java b/src/main/java/edu/rpi/legup/model/PuzzleImporter.java index 9d16d94e9..adc510b79 100644 --- a/src/main/java/edu/rpi/legup/model/PuzzleImporter.java +++ b/src/main/java/edu/rpi/legup/model/PuzzleImporter.java @@ -80,6 +80,10 @@ public void initializePuzzle(Node node) throws InvalidFileFormatException { boolean initBoard = false; boolean initProof = false; + + String tag = puzzleElement.getAttribute("tag"); + this.puzzle.setTag(!tag.isEmpty() ? tag : "generic.import.untagged"); + NodeList childNodes = puzzleElement.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { Node n = childNodes.item(i); diff --git a/src/main/java/edu/rpi/legup/ui/HomePanel.java b/src/main/java/edu/rpi/legup/ui/HomePanel.java index 75761c475..a2c280c45 100644 --- a/src/main/java/edu/rpi/legup/ui/HomePanel.java +++ b/src/main/java/edu/rpi/legup/ui/HomePanel.java @@ -3,8 +3,7 @@ import edu.rpi.legup.app.GameBoardFacade; import edu.rpi.legup.app.LegupPreferences; import edu.rpi.legup.controller.CursorController; -import edu.rpi.legup.model.Puzzle; -import edu.rpi.legup.save.InvalidFileFormatException; +import edu.rpi.legup.model.PuzzleExporter; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -12,18 +11,23 @@ import java.io.FileWriter; import java.net.URI; import java.net.URL; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.swing.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; +import javax.xml.transform.*; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; /** * The {@code HomePanel} class represents the home panel of the LEGUP application. This panel @@ -32,6 +36,8 @@ */ public class HomePanel extends LegupPanel { private static final Logger LOGGER = LogManager.getLogger(HomePanel.class.getName()); + private static final ArrayList _tagsToGrade = new ArrayList<>(); + private static final ArrayList _typesToGrade = new ArrayList<>(); private LegupUI legupUI; private JFrame frame; private JButton[] buttons; @@ -165,107 +171,125 @@ private void initButtons() { this.buttons[2].setFocusPainted(false); this.buttons[2].setHorizontalTextPosition(AbstractButton.CENTER); this.buttons[2].setVerticalTextPosition(AbstractButton.BOTTOM); - - this.buttons[2].addActionListener( - new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - try { - use_xml_to_check(); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - System.out.println("finished checking the folder"); - } - }); + this.buttons[2].addActionListener(e -> openBatchGraderMenu()); } - /** - * Opens a folder chooser dialog and grades puzzles in the selected folder. The results are - * written to a CSV file. - */ - public void checkFolder() { - GameBoardFacade facade = GameBoardFacade.getInstance(); - /* - * Select dir to grade; recursively grade sub-dirs using traverseDir() - * Selected dir must have sub-dirs for each student: - * GradeThis - * | - * | -> Student 1 - * | | - * | | -> Proofs - */ - - JFileChooser folderBrowser = new JFileChooser(); - - folderBrowser.setCurrentDirectory(new File(LegupPreferences.WORK_DIRECTORY)); - folderBrowser.setDialogTitle("Select Directory"); - folderBrowser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - folderBrowser.setAcceptAllFileFilterUsed(false); - folderBrowser.showOpenDialog(this); - folderBrowser.setVisible(true); - File folder = folderBrowser.getSelectedFile(); + /** Initializes screen for autograder options */ + public void openBatchGraderMenu() { + JDialog batchGraderOptions = new JDialog(frame, "Batch Grader Options", true); + batchGraderOptions.setSize(450, 200); + batchGraderOptions.setLayout(new BorderLayout()); + + // Create a panel for the directory selection part + JPanel directoryPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + JButton browseButton = new JButton("Select Directory"); + JTextField directoryField = new JTextField(10); + directoryField.setEnabled(false); + + directoryPanel.add(browseButton); + directoryPanel.add(directoryField); + batchGraderOptions.add(directoryPanel, BorderLayout.NORTH); + + // Create a panel for the puzzle IDs label, text field, and checkbox + JPanel puzzleIdPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + JLabel puzzleIdLabel = new JLabel("Puzzle IDs:"); + JTextField puzzleIdField = new JTextField(10); + puzzleIdField.setEnabled(false); + JCheckBox gradeAllIDsCheckbox = new JCheckBox("Grade All IDs"); + gradeAllIDsCheckbox.setSelected(true); + + puzzleIdPanel.add(puzzleIdLabel); + puzzleIdPanel.add(puzzleIdField); + puzzleIdPanel.add(gradeAllIDsCheckbox); + + // Create a panel for the puzzle tags label, text field, and checkbox + JPanel puzzleTypePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + JLabel puzzleTypeLabel = new JLabel("Puzzle Types:"); + JTextField puzzleTypeField = new JTextField(10); + puzzleTypeField.setEnabled(false); + JCheckBox gradeAllTagsCheckbox = new JCheckBox("Grade All Types"); + gradeAllTagsCheckbox.setSelected(true); + + puzzleTypePanel.add(puzzleTypeLabel); + puzzleTypePanel.add(puzzleTypeField); + puzzleTypePanel.add(gradeAllTagsCheckbox); + + JPanel batchGraderConstraints = new JPanel(new FlowLayout(FlowLayout.CENTER)); + batchGraderConstraints.add(puzzleIdPanel); + batchGraderConstraints.add(puzzleTypePanel); + batchGraderOptions.add(batchGraderConstraints, BorderLayout.CENTER); + + // Create a save button at the bottom + JButton gradeButton = new JButton("Grade"); + JButton updateButton = new JButton("Update"); + JPanel gradePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + gradePanel.add(gradeButton); + gradePanel.add(updateButton); + batchGraderOptions.add(gradePanel, BorderLayout.SOUTH); + + // Action listeners for the buttons + gradeAllIDsCheckbox.addActionListener(e -> puzzleIdField.setEnabled(!gradeAllIDsCheckbox.isSelected())); + gradeAllTagsCheckbox.addActionListener(e -> puzzleTypeField.setEnabled(!gradeAllTagsCheckbox.isSelected())); + + browseButton.addActionListener(e -> { + JFileChooser folderBrowser = new JFileChooser(); + folderBrowser.setCurrentDirectory(new File(LegupPreferences.WORK_DIRECTORY)); + folderBrowser.setDialogTitle("Select Directory"); + folderBrowser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + folderBrowser.setAcceptAllFileFilterUsed(false); + folderBrowser.setSelectedFile(null); + folderBrowser.setVisible(true); + + int result = folderBrowser.showOpenDialog(frame); + if (result == JFileChooser.APPROVE_OPTION) { + directoryField.setText(folderBrowser.getSelectedFile().getAbsolutePath()); + } + }); - File resultFile = new File(folder.getAbsolutePath() + File.separator + "result.csv"); - try (BufferedWriter writer = new BufferedWriter(new FileWriter(resultFile))) { - writer.append("Name"); - writer.append(","); - writer.append("File Name"); - writer.append(","); - writer.append("Solved?"); - writer.append("\n"); - - for (final File folderEntry : folder.listFiles(File::isDirectory)) { - writer.append(folderEntry.getName()); - writer.append(","); - int count1 = 0; - for (final File fileEntry : folderEntry.listFiles()) { - if (fileEntry.getName().charAt(0) == '.') { - continue; - } - count1++; - if (count1 > 1) { - writer.append(folderEntry.getName()); - writer.append(","); - } - writer.append(fileEntry.getName()); - writer.append(","); - String fileName = - folderEntry.getAbsolutePath() + File.separator + fileEntry.getName(); - System.out.println("This is path " + fileName); - File puzzleFile = new File(fileName); - if (puzzleFile != null && puzzleFile.exists()) { - try { - legupUI.displayPanel(1); - legupUI.getProofEditor(); - GameBoardFacade.getInstance().loadPuzzle(fileName); - String puzzleName = - GameBoardFacade.getInstance().getPuzzleModule().getName(); - legupUI.setTitle(puzzleName + " - " + puzzleFile.getName()); - facade = GameBoardFacade.getInstance(); - Puzzle puzzle = facade.getPuzzleModule(); - if (puzzle.isPuzzleComplete()) { - writer.append("Solved"); - System.out.println(fileEntry.getName() + " solved"); - } else { - writer.append("Not Solved"); - System.out.println(fileEntry.getName() + " not solved"); - } - writer.append("\n"); - } catch (InvalidFileFormatException e) { - LOGGER.error(e.getMessage()); - } - } + gradeButton.addActionListener(e -> { + String directoryPath = directoryField.getText(); + String puzzleTags = puzzleIdField.getText(); + String puzzleTypes = puzzleTypeField.getText(); + + _tagsToGrade.clear(); + if (!puzzleTags.isEmpty()) { + Pattern pattern = Pattern.compile("\"(.*?)\""); + Matcher matcher = pattern.matcher(puzzleTags); + + while (matcher.find()) { + _tagsToGrade.add(matcher.group(1)); } - if (count1 == 0) { - writer.append("No file"); - writer.append("\n"); + } + _typesToGrade.clear(); + if (!puzzleTypes.isEmpty()) { + Pattern pattern = Pattern.compile("\"(.*?)\""); + Matcher matcher = pattern.matcher(puzzleTypes); + + while (matcher.find()) { + _typesToGrade.add(matcher.group(1)); } } - } catch (IOException ex) { - LOGGER.error(ex.getMessage()); - this.buttons[2].addActionListener((ActionEvent e) -> use_xml_to_check()); - } + + try { + File dir = new File(directoryPath); + use_xml_to_check(dir); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + LOGGER.debug("Finished autograding"); + + batchGraderOptions.dispose(); + }); + + updateButton.addActionListener(e -> { + recursiveUpdater(new File(directoryField.getText())); + JOptionPane.showMessageDialog(null, "Updating complete."); + batchGraderOptions.dispose(); + }); + + // Center the dialog on the screen + batchGraderOptions.setLocationRelativeTo(null); + batchGraderOptions.setVisible(true); } /** @@ -276,27 +300,17 @@ public void checkFolder() { * @effect Selects a directory, processes each XML file to check for "solved?" status, and * writes results to "result.csv". Opens the CSV file upon completion. */ - private void use_xml_to_check() { + private void use_xml_to_check(File folder) { /* Select a folder, go through each .xml file in the subfolders, look for "isSolved" flag */ - JFileChooser folderBrowser = new JFileChooser(); - folderBrowser.setCurrentDirectory(new File(LegupPreferences.WORK_DIRECTORY)); - folderBrowser.setDialogTitle("Select Directory"); - folderBrowser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - folderBrowser.setAcceptAllFileFilterUsed(false); - folderBrowser.setSelectedFile(null); - folderBrowser.showOpenDialog(this); - folderBrowser.setVisible(true); - File folder = folderBrowser.getSelectedFile(); - File resultFile = new File(folder.getAbsolutePath() + File.separator + "result.csv"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(resultFile))) { - writer.append("Name,File Name,Puzzle Type,Solved?,Last Saved\n"); + writer.append("Name,File Name,Puzzle Type,Puzzle Tag,Solved?,Last Saved\n"); // Go through student folders, recurse for inner folders for (final File folderEntry : Objects.requireNonNull(folder.listFiles(File::isDirectory))) { String path = folderEntry.getName(); // use this helper function to write to the .csv file - recursive_parser(folderEntry, writer, path, path); + recursive_parser(folderEntry, writer, path); } } catch (IOException ex) { LOGGER.error(ex.getMessage()); @@ -310,33 +324,96 @@ private void use_xml_to_check() { } } JOptionPane.showMessageDialog(null, "Batch grading complete."); + _tagsToGrade.clear(); } /** * @param file - the input file - * @return true if it is a .xml file, else return false + * @return Parsed document of file if possible, null otherwise */ - public boolean isxmlfile(File file) { - boolean flag = true; + public Document isxmlfile(File file) { + Document doc = null; try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(file); - flag = true; + doc = builder.parse(file); } catch (Exception e) { - flag = false; + LOGGER.error("'{}' is not a valid XML file", file.getPath()); + } + return doc; + } + + /** + * reads the puzzle name and type, and outputs to .csv file + * + * @param doc - the parsed file currently being graded + * @param writer - write to .csv + * @throws IOException + */ + private void parsePuzzle(Document doc, BufferedWriter writer) throws IOException { + NodeList puzzleNodes = doc.getElementsByTagName("puzzle"); + if (puzzleNodes.getLength() <= 0) { + writer.write("not a LEGUP puzzle!"); + return; } - return flag; + + Element puzzleElement = (Element) puzzleNodes.item(0); + String puzzleType = puzzleElement.getAttribute("name"); + writer.write(puzzleType.isEmpty() ? "not a LEGUP puzzle!" : puzzleType); + writer.write(","); + + String puzzleTag = puzzleElement.getAttribute("tag"); + writer.write(puzzleTag.isEmpty() ? "No tag given" : puzzleTag); + } + + /** + * Reads the hashed solved state and export timestamp, unhashes information and prints out to csv + * + * @param doc - the parsed file currently being graded + * @param writer - write to .csv + * @throws IOException + */ + private void parseSolvedState(Document doc, BufferedWriter writer) throws IOException { + NodeList solvedNodes = doc.getElementsByTagName("solved"); + if (solvedNodes.getLength() <= 0) { + writer.write(",missing flag!"); + return; + } + + Element solvedElement = (Element) solvedNodes.item(0); + String isSolved = solvedElement.getAttribute("isSolved"); + String lastSaved = solvedElement.getAttribute("lastSaved"); + + // unhash solved flag + writer.write(","); + try { + int solvedHash = Integer.parseInt(isSolved); + Boolean solvedState = PuzzleExporter.inverseHash(solvedHash, lastSaved); + + if (solvedState == null) { + writer.write("Error"); + } else if (solvedState) { + writer.write("Solved"); + } else { + writer.write("Not Solved"); + } + } catch (NumberFormatException e) { + writer.write("Error"); + LOGGER.error("Solved state could not be unhashed:\n{}", e.getMessage()); + } + + // Append the lastSaved attribute + writer.write(","); + writer.write(!lastSaved.isEmpty() ? lastSaved : "Error"); } /** * @param folder - the input folder * @param writer - write to .csv * @param path - the current path - * @param name - student's name (the first subfolders of the main folder) * @throws IOException */ - private void recursive_parser(File folder, BufferedWriter writer, String path, String name) + private void recursive_parser(File folder, BufferedWriter writer, String path) throws IOException { // Empty folder if (Objects.requireNonNull(folder.listFiles()).length == 0) { @@ -345,134 +422,116 @@ private void recursive_parser(File folder, BufferedWriter writer, String path, S } // Go through every other file in the folder try { - SAXParserFactory spf = SAXParserFactory.newInstance(); - SAXParser saxParser = spf.newSAXParser(); for (final File fileEntry : Objects.requireNonNull(folder.listFiles())) { if (fileEntry.getName().equals("result.csv")) { continue; } // Recurse if it is a subfolder if (fileEntry.isDirectory()) { - recursive_parser(fileEntry, writer, path + "/" + fileEntry.getName(), name); + recursive_parser(fileEntry, writer, path + "/" + fileEntry.getName()); continue; } // Set path name String fName = fileEntry.getName(); - String fPath = fileEntry.getAbsolutePath(); if (fileEntry.getName().charAt(0) == '.') { continue; } + + Document doc; + if ( (doc = isxmlfile(fileEntry)) == null) { + LOGGER.debug("{} is not a '.xml' file", fName); + writer.write(fName+",Not an xml file!\n"); + continue; + } + + NodeList puzzleNodes = doc.getElementsByTagName("puzzle"); + Element puzzleElement = (Element) puzzleNodes.item(0); + String puzzleTag = puzzleElement.getAttribute("tag"); + if (!_tagsToGrade.isEmpty() && _tagsToGrade.stream().noneMatch(puzzleTag::contains)) { + LOGGER.debug("'{}' is not graded with tag '{}'", puzzleElement.getAttribute("name"), puzzleTag); + continue; + } + String puzzleType = puzzleElement.getAttribute("name"); + if (!_typesToGrade.isEmpty() && _typesToGrade.stream().noneMatch(puzzleType::contains)) { + LOGGER.debug("'{}' is not graded with type '{}'", puzzleElement.getAttribute("name"), puzzleType); + continue; + } + // write data - writer.write(name); + path = folder.getAbsolutePath(); + writer.write(path.substring(path.lastIndexOf(File.separator) + 1)); writer.write(","); writer.write(fName); writer.write(","); - path = folder.getAbsolutePath() + File.separator + fileEntry.getName(); - System.out.println(path); - if (isxmlfile(fileEntry)) { - saxParser.parse( - path, - new DefaultHandler() { - @Override - public void startDocument() throws SAXException {} - - boolean solvedFlagExists = false; - boolean puzzleTypeExists = false; - - @Override - public void startElement( - String uri, - String localName, - String qName, - Attributes attributes) - throws SAXException { - // append file type to the writer - if (qName.equals("puzzle") - && attributes.getQName(0) == "name" - && !puzzleTypeExists) { - try { - writer.write(attributes.getValue(0)); - writer.write(","); - puzzleTypeExists = true; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - // append the "solved?" status of the proof to the writer - else if (qName.equals("solved") && !solvedFlagExists) { - String isSolved = attributes.getValue(0); - String lastSaved = attributes.getValue(1); - if (isSolved != null) { - if (isSolved.equals("true")) { - try { - writer.write("Solved"); - } catch (IOException e) { - throw new RuntimeException(e); - } - } else if (isSolved.equals("false")) { - try { - writer.write("Not Solved"); - } catch (IOException e) { - throw new RuntimeException(e); - } - } else { - try { - writer.write("Error"); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - // append when is this proof last saved - if (lastSaved != null) { - try { - writer.write(","); - writer.write(lastSaved); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - solvedFlagExists = true; - } - } - - @Override - public void characters(char[] ch, int start, int length) - throws SAXException {} - - @Override - public void endElement(String uri, String localName, String qName) - throws SAXException {} - - @Override - public void endDocument() throws SAXException { - if (!puzzleTypeExists) { - try { - writer.write("not a LEGUP puzzle!"); - } catch (IOException e) { - throw new RuntimeException(e); - } - } else if (!solvedFlagExists) { - try { - writer.write("missing flag!"); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - }); - } - // If wrong file type, ungradeable - else { - writer.write("not a \".xml\" file!"); - } + + parsePuzzle(doc, writer); + parseSolvedState(doc, writer); + writer.write("\n"); } - } catch (ParserConfigurationException | SAXException | IOException e) { + } catch (IOException e) { LOGGER.error(e.getMessage()); } } + /** + * Updates all old puzzle files to the new tagged variant and hashes all solved states + * + * @param folder Folder to update all files, and recurse for all subdirectories + */ + private void recursiveUpdater(File folder) { + if (Objects.requireNonNull(folder.listFiles()).length == 0) { + LOGGER.debug("Empty directory"); + return; + } + for(File fileEntry : Objects.requireNonNull(folder.listFiles())) { + if (fileEntry.isDirectory()) { + recursiveUpdater(fileEntry); + continue; + } + + String fName = fileEntry.getName(); + Document doc; + if ( (doc = isxmlfile(fileEntry)) == null) { + LOGGER.debug("{} is not a '.xml' file", fileEntry.getName()); + continue; + } + + Element puzzleNodes = (Element) doc.getElementsByTagName("puzzle").item(0); + if (!puzzleNodes.hasAttribute("tag")) { + puzzleNodes.setAttribute("tag", fName); + } + + Element solvedNodes = (Element) doc.getElementsByTagName("solved").item(0); + String time = LocalDateTime.now().format(PuzzleExporter.DATE_FORMAT); + String unsolved = PuzzleExporter.obfHash(false, time) + ""; + if (solvedNodes != null) { + solvedNodes.getAttributeNode("isSolved").setValue(unsolved); + solvedNodes.getAttributeNode("lastSaved").setTextContent(time); + } else { + solvedNodes = doc.createElement("solved"); + solvedNodes.setAttribute("isSolved", unsolved); + solvedNodes.setAttribute("lastSaved", time); + doc.getElementsByTagName("Legup").item(0).appendChild(solvedNodes); + } + + try { + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.INDENT, "no"); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new File(folder.getAbsolutePath() + File.separator + fName)); + + transformer.transform(source, result); + } catch (TransformerException e) { + LOGGER.error("Unable to update file: {}:\n{}", fName, e.getMessage()); + } + } + } + /** * Initializes the text labels for the user interface. Sets up labels for welcome message, led * by Bram, and version information. @@ -543,113 +602,6 @@ private void openPuzzleEditorDialog() { } } - /** - * Opens a dialog to select a directory, recursively processes the directory to grade puzzles, - * and generates a CSV report of the grading results. - */ - private void checkProofAll() { - /* - * Select dir to grade; recursively grade sub-dirs using traverseDir() - * Selected dir must have sub-dirs for each student: - * GradeThis - * | - * | -> Student 1 - * | | - * | | -> Proofs - */ - - LegupPreferences preferences = LegupPreferences.getInstance(); - File preferredDirectory = - new File(preferences.getUserPref(LegupPreferences.WORK_DIRECTORY)); - folderBrowser = new JFileChooser(preferredDirectory); - - folderBrowser.showOpenDialog(this); - folderBrowser.setVisible(true); - folderBrowser.setCurrentDirectory(new File(LegupPreferences.WORK_DIRECTORY)); - folderBrowser.setDialogTitle("Select Directory"); - folderBrowser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - folderBrowser.setAcceptAllFileFilterUsed(false); - - File folder = folderBrowser.getSelectedFile(); - - // Write csv file (Path,File-Name,Puzzle-Type,Score,Solved?) - File resultFile = new File(folder.getAbsolutePath() + File.separator + "result.csv"); - try (BufferedWriter writer = new BufferedWriter(new FileWriter(resultFile))) { - writer.append("Name,File Name,Puzzle Type,Score,Solved?\n"); - - // Go through student folders - for (final File folderEntry : - Objects.requireNonNull(folder.listFiles(File::isDirectory))) { - // Write path - String path = folderEntry.getName(); - traverseDir(folderEntry, writer, path); - } - } catch (IOException ex) { - LOGGER.error(ex.getMessage()); - } - JOptionPane.showMessageDialog(null, "Batch grading complete."); - } - - /** - * Recursively traverses directories to grade puzzles and writes results to a CSV file - * - * @param folder the folder to traverse - * @param writer the BufferedWriter to write results to the CSV file - * @param path the current path within the directory structure - * @throws IOException if an I/O error occurs while writing to the CSV file - */ - private void traverseDir(File folder, BufferedWriter writer, String path) throws IOException { - // Recursively traverse directory - GameBoardFacade facade = GameBoardFacade.getInstance(); - // Folder is empty - if (Objects.requireNonNull(folder.listFiles()).length == 0) { - writer.append(path).append(",Empty folder,Ungradeable\n"); - return; - } - // Travese directory, recurse if sub-directory found - // If ungradeable, do not leave a score (0, 1) - for (final File f : Objects.requireNonNull(folder.listFiles())) { - // Recurse - if (f.isDirectory()) { - traverseDir(f, writer, path + "/" + f.getName()); - continue; - } - - // Set path name - writer.append(path).append(","); - - // Load puzzle, run checker - // If wrong file type, ungradeable - String fName = f.getName(); - String fPath = f.getAbsolutePath(); - File puzzleFile = new File(fPath); - if (puzzleFile.exists()) { - // Try to load file. If invalid, note in csv - try { - // Load puzzle, run checker - GameBoardFacade.getInstance().loadPuzzle(fPath); - String puzzleName = GameBoardFacade.getInstance().getPuzzleModule().getName(); - frame.setTitle(puzzleName + " - " + puzzleFile.getName()); - facade = GameBoardFacade.getInstance(); - Puzzle puzzle = facade.getPuzzleModule(); - - // Write data - writer.append(fName).append(","); - writer.append(puzzle.getName()).append(","); - if (puzzle.isPuzzleComplete()) { - writer.append("Solved\n"); - } else { - writer.append("Unsolved\n"); - } - } catch (InvalidFileFormatException e) { - writer.append(fName).append("InvalidFile,Ungradeable\n"); - } - } else { - LOGGER.debug("Failed to run sim"); - } - } - } - /** * Opens the puzzle editor for the specified puzzle with the specified dimensions * diff --git a/src/main/java/edu/rpi/legup/ui/PuzzleEditorPanel.java b/src/main/java/edu/rpi/legup/ui/PuzzleEditorPanel.java index 7c2ba06ff..dcf658bb6 100644 --- a/src/main/java/edu/rpi/legup/ui/PuzzleEditorPanel.java +++ b/src/main/java/edu/rpi/legup/ui/PuzzleEditorPanel.java @@ -767,6 +767,7 @@ private String savePuzzle() { if (exporter == null) { throw new ExportFileException("Puzzle exporter null"); } + puzzle.setTag(path.substring(path.lastIndexOf(File.separator) + 1)); exporter.exportPuzzle(path); } catch (ExportFileException e) { e.printStackTrace();