From 9112b73db9a393fd684962fd5351fa3ca1f08442 Mon Sep 17 00:00:00 2001 From: Guillaume Dott Date: Thu, 11 Dec 2014 17:26:08 +0100 Subject: [PATCH] Add Akari game --- data/akari/0.yml | 103 ++++++++++++++++++++++++++++++++++++++ data/akari/easy.yml | 4 ++ nikoli.rb | 2 +- views/akari.coffee | 104 +++++++++++++++++++++++++++++++++++++++ views/akari.slim | 10 ++++ views/application.coffee | 14 ++++-- views/application.scss | 14 +++++- 7 files changed, 244 insertions(+), 7 deletions(-) create mode 100644 data/akari/0.yml create mode 100644 data/akari/easy.yml create mode 100644 views/akari.coffee create mode 100644 views/akari.slim diff --git a/data/akari/0.yml b/data/akari/0.yml new file mode 100644 index 0000000..efe8a32 --- /dev/null +++ b/data/akari/0.yml @@ -0,0 +1,103 @@ +--- +name: Akari 7x7 easy +data: + - [[-2,-2,-2,-2,-2,0,-2],[1,-2,-2,-2,2,-2,-2],[-2,-1,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-1,-2],[-2,-2,-1,-2,-2,-2,3],[-2,2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,0,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,4,-2,3,-2,-2],[1,-2,-2,-1,-2,-2,-1],[-2,-2,3,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,1,-2,-2,-2],] + - [[-2,-2,-2,-2,-1,0,-2],[1,-2,-2,-2,-2,-2,-2],[-1,-2,-2,3,-2,-2,-2],[-2,-2,1,-2,3,-2,-2],[-2,-2,-2,-1,-2,-2,-1],[-2,-2,-2,-2,-2,-2,0],[-2,1,1,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,-1,-2,1,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,-1,0,-1,-1,3,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,3,-2,3,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-1,-2,-2,-2,-2,-2],[-2,-1,0,-2,-2,1,0],[-2,-2,-2,-2,-2,1,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,2,-2,-2,-2,-2,-2],[1,0,-2,-2,2,-1,-2],[-2,-2,-2,-2,-2,0,-2],] + - [[-2,-2,-2,2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,3,-2,-1,-2,-2],[0,-2,-2,4,-2,-2,1],[-2,-2,3,-2,3,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,1,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,2,-2],[-1,-2,1,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,3,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-1,-2,0],[-2,0,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-1,-2,2,-2,-2],[-2,-1,-2,-2,-2,-1,-2],[-2,-2,-2,1,-2,-2,-2],[-2,3,-2,-2,-2,4,-2],[-2,-2,3,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-1,-2,0,-2],[0,-2,0,-2,-2,-2,-2],[-2,-2,-2,-2,-2,0,-2],[0,-2,-2,-2,-2,-2,-1],[-2,2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,1,-2,-1],[-2,-1,-2,0,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,0,-2,0,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,4,-2,-2,-2,1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,1,-2,0,-2,0,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-1,-2,-2,-2,-2,-2,-1],[-2,-2,-1,3,-2,-2,-2],[-2,-2,-2,-2,-2,-1,-2],[-2,2,-2,-2,-2,-1,-2],[-2,-1,-2,-2,-2,-2,-2],[-2,-2,-2,1,-1,-2,-2],[-1,-2,-2,-2,-2,-2,1],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,0,0,-2,-2],[-2,1,-2,-1,-2,-2,-2],[-2,0,-1,-2,-1,0,-2],[-2,-2,-2,2,-2,-1,-2],[-2,-2,-1,0,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-1,-1,-2,-2,-2,-2],[-2,-2,2,-2,-2,-2,1],[-2,-2,-2,-2,-2,2,-1],[-2,-2,-2,-1,-2,-2,-2],[1,1,-2,-2,-2,-2,-2],[0,-2,-2,-2,-1,-2,-2],[-2,-2,-2,-2,0,0,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,2,-2,0,-2,2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,0,-2,-2,-2,3,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,2,-2,-1,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-1,-2,-2,-2,-2,-2,-1],[-2,-2,-2,4,-2,-2,-2],[-2,-2,4,-2,-1,-2,-2],[-2,-1,-2,-1,-2,-1,-2],[-2,-2,4,-2,-1,-2,-2],[-2,-2,-2,-1,-2,-2,-2],[-1,-2,-2,-2,-2,-2,2],] + - [[-2,-2,-1,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,4,-2,-2,-1],[-2,-2,3,-2,-1,-2,-2],[0,-2,-2,4,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,1,-2,-2],] + - [[-2,1,-2,-2,1,-2,-2],[-2,-2,-2,-2,-2,-2,1],[0,-2,-2,-1,-2,-2,-2],[-2,-2,2,-2,1,-2,-2],[-2,-2,-2,1,-2,-2,-1],[2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,-2,1,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,3,-1,-2,-2,-2],[-2,-2,-2,-2,-2,-1,-2],[-2,1,-2,1,-2,1,-2],[-2,0,-2,-2,-2,-2,-2],[-2,-2,-2,0,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,1,2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[0,-2,-2,-2,-2,-2,-2],[0,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,1,-2,-2,-2],] + - [[-2,2,-2,-2,-2,-2,-2],[-2,-2,-2,0,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,1,-2,1,-2],[-2,-2,-2,-2,-2,-2,-2],[3,-2,-2,-1,-2,-2,-2],[-2,-2,-2,-2,-2,-1,-2],] + - [[-2,-2,-2,1,-2,-2,-2],[-2,-1,-1,-2,-2,0,-2],[-2,-2,-2,-2,-2,0,-2],[2,-2,-2,-2,-2,-2,-1],[-2,-1,-2,-2,-2,-2,-2],[-2,1,-2,-2,1,3,-2],[-2,-2,-2,-1,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,2,-1,-2,-2,-2],[-2,-2,-2,-2,-2,3,-2],[-2,-1,-2,-2,-2,-1,-2],[-2,3,-2,-2,-2,-2,-2],[-2,-2,-2,-1,0,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-1,-2,1,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-1,-2,-2,3],[-2,-2,-1,-1,-1,-2,-2],[3,-2,-2,-1,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,-2,0,-2,-1],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,2,-2,1,-2,-2],[-2,4,-2,-2,-2,2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,-2,-2,-1,-2],[-2,-2,-1,-2,1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,0,-2,-2],[-2,1,3,-2,2,-2,-2],[-2,-2,-2,4,-2,-2,-2],[-2,-2,-1,-2,2,0,-2],[-2,-2,2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-1,-2,-2],[-2,-2,3,-2,-2,-2,-2],[-1,-2,-2,3,-2,2,-2],[-2,-2,2,-2,4,-2,-2],[-2,0,-2,-1,-2,-2,0],[-2,-2,-2,-2,-1,-2,-2],[-2,-2,2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-1,-2,-2],[-2,0,-2,-2,-2,3,-2],[1,-2,-2,3,-2,-2,-2],[-2,-2,2,-2,2,-2,-2],[-2,-2,-2,3,-2,-2,1],[-2,-1,-2,-2,-2,-1,-2],[-2,-2,-1,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,1,-2,-1,-2,-1,-2],[-2,-2,-1,-2,2,-2,-2],[-2,-1,-2,-2,-2,4,-2],[-2,-2,-1,-2,-1,-2,-2],[-2,-1,-2,4,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,1,-2],[-1,-2,-2,-2,-2,-2,-2],[-2,-2,3,-2,2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,3,-2,0,-2,-2],[-2,-2,-2,-2,-2,-2,0],[-2,0,-2,-2,-2,-2,-2],] + - [[-2,-2,1,-2,1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[0,-2,-1,-2,0,-2,1],[-2,-2,-2,-1,-2,-2,-2],[-1,-2,-1,-2,3,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-1,-2,-1,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-1,-2,0,-2,-2],[-2,4,-2,-2,-2,1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,2,-2,-2,-2,2,-2],[-2,-2,1,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,1,-1,-2,-2],[-2,1,-2,3,-2,-2,-2],[-2,-1,-1,-2,-1,-1,-2],[-2,-2,-2,3,-2,1,-2],[-2,-2,3,-1,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-1,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,0],[-2,-2,2,-2,0,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,-1,-2,-2],[1,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,3,-2],] + - [[-1,-2,-2,-2,-2,0,1],[-1,-2,-2,-2,-2,-2,-2],[-2,-2,2,-2,2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-1],[0,-1,-2,-2,-2,-2,1],] + - [[-2,-1,0,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,0],[-2,-2,2,-2,0,-2,-1],[-2,-2,-2,1,-2,-2,-2],[-1,-2,2,-2,1,-2,-2],[-1,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-1,-1,-2],] + - [[-2,-2,-1,-2,-2,-2,-2],[-2,-2,-2,1,-2,-2,-2],[-2,-2,-2,-1,-2,-2,3],[-2,2,-1,-2,-1,-1,-2],[2,-2,-2,3,-2,-2,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,-2,-2,-2,2,-2,-2],] + - [[-2,1,-2,-2,-2,-2,-2],[-2,-1,-2,-2,-2,0,2],[-2,-2,-1,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,4,-2,-1,-2,-2],[0,2,-2,-2,-2,-1,-2],[-2,-2,-2,-2,-2,-1,-2],] + - [[-2,-2,-2,-2,1,-2,-2],[-2,-2,-2,2,-1,-2,-2],[-1,0,-2,-2,-2,-2,-2],[-2,2,-2,-1,-2,-1,-2],[-2,-2,-2,-2,-2,2,1],[-2,-2,0,0,-2,-2,-2],[-2,-2,-1,-2,-2,-2,-2],] + - [[-2,2,-1,-2,-2,-2,-2],[-2,-2,-2,-2,-1,-2,0],[-2,1,-2,-2,-2,-2,1],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,-2,-2,2,-2],[-1,-2,-1,-2,-2,-2,-2],[-2,-2,-2,-2,1,2,-2],] + - [[-1,-2,-2,-2,1,-2,-1],[-2,-2,2,-2,-2,-2,-2],[0,-2,-2,-2,-2,0,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,-2,-2,-2,1],[-2,-2,-2,-2,3,-2,-2],[0,-2,-1,-2,-2,-2,-1],] + - [[-2,-2,-2,0,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-1,-2,4,-2,-2],[2,-2,-2,4,-2,-2,0],[-2,-2,-1,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,2,-2],[2,-2,-2,-2,3,-2,-2],[-2,-1,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-1,-2],[-2,-2,2,-2,-2,-2,3],[-2,-1,-2,-2,-2,-2,-2],] + - [[-1,-2,-2,-1,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,1,-2,-2],[0,-2,-2,-2,-2,-2,-1],[-2,-2,1,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[0,-2,-2,1,-2,-2,-1],] + - [[-2,-1,-2,-2,0,-2,-2],[-2,-2,-2,-2,-2,-2,-1],[-1,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,3],[0,-2,-2,-2,-2,-2,-2],[-2,-2,1,-2,-2,0,-2],] + - [[-2,0,-2,-2,-2,-2,-2],[-2,-2,-2,-2,1,-2,-1],[-2,3,-2,-2,-2,-2,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,-2,-2,-2,-2,0,-2],[1,-2,0,-2,-2,-2,-2],[-2,-2,-2,-2,-2,1,-2],] + - [[-2,2,-2,-2,-2,-2,-2],[-2,-2,-1,-2,-2,-2,1],[-2,-2,1,-2,2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,1,-2,3,-2,-2],[-1,-2,-2,-2,1,-2,-2],[-2,-2,-2,-2,-2,-1,-2],] + - [[-2,3,-2,-2,-2,-2,-2],[-2,-2,-2,0,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,-1,-2,0,-2],[-2,-2,-2,-2,-2,-2,-2],[2,-2,-2,-1,-2,-2,-2],[-2,-2,-2,-2,-2,2,-2],] + - [[-2,-2,-1,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,1,-2,2,-2,-1],[-2,-2,-2,2,-2,-2,-2],[2,-2,-1,-2,3,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,0,-2,-2],] + - [[-1,-2,-2,-2,-2,-2,-1],[-2,-2,-2,2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,0,-2,0,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,1,-2,-2,-2],[-1,-2,-2,-2,-2,-2,2],] + - [[-2,-2,-2,1,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[1,-2,-2,-2,-2,-2,-2],[1,-2,-2,-2,-2,-2,0],[-2,-2,-2,-2,-2,-2,1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-1,2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-1,-2],[1,-2,2,-2,-2,-2,-2],[-2,-2,-2,3,-2,2,-2],[-2,-2,2,-1,-1,-2,-2],[-2,3,-2,-1,-2,-2,-2],[-2,-2,-2,-2,2,-2,-1],[-2,-1,-2,-2,-2,-2,-2],] + - [[-2,-1,-2,-2,-2,3,-2],[1,-2,-2,-2,2,-2,-1],[-2,1,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,2,-2],[-1,-2,-1,-2,-2,-2,-1],[-2,2,-2,-2,-2,-1,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,-2,1,-2,2,-2,-2],[-2,0,-2,-2,-2,2,-2],[-2,-2,-1,-2,4,-2,-2],[-2,-2,-2,4,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-1,-2,-2],[-2,0,-2,-2,0,2,-2],[1,-1,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-1,-1],[-2,-1,0,-2,-2,3,-2],[-2,-2,-1,-2,-2,-2,-2],] + - [[-2,-2,-1,-2,-2,-2,-2],[-2,3,-2,-2,1,0,-2],[-2,-1,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,-2,-2,-1,-2],[-2,3,1,-2,-2,2,-2],[-2,-2,-2,-2,-1,-2,-2],] + - [[1,-2,-2,-2,-2,-2,2],[-2,-2,-1,-2,-2,-2,-2],[-2,-2,0,-2,-1,-1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,2,-2,-1,-2,-2],[-2,-2,-2,-2,2,-2,-2],[-1,-2,-2,-2,-2,-2,-1],] + - [[-2,0,-2,-2,1,-2,-2],[-2,-2,-2,-2,-2,-2,0],[2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-1],[0,-2,-2,-2,-2,-2,-2],[-2,-2,1,-2,-2,2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,-2,-2,1,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,-2,4,-2,4,-2,-2],[-2,-2,-2,3,-2,-2,-2],[-2,0,-2,-2,-2,1,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,2,-2,-2,-2,-2],[-2,2,-2,-2,-2,0,-2],[-2,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[2,-2,-2,-2,-2,-2,-2],[-2,2,-2,-2,-2,0,-2],[-2,-2,-2,-2,1,-2,-2],] + - [[-2,-1,2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-1,-2,-2,0],[-2,-2,-1,-2,2,-2,-2],[1,-2,-2,3,-2,-2,-2],[1,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-1,-1,-2],] + - [[-2,-2,-2,-2,2,-2,-2],[-2,-2,1,-1,-2,-2,-2],[3,-2,-2,-2,-2,-1,-2],[-2,2,-2,-2,-2,-1,-2],[-2,0,-2,-2,-2,-2,2],[-2,-2,-2,2,0,-2,-2],[-2,-2,2,-2,-2,-2,-2],] + - [[-2,-2,0,-2,-2,-2,-2],[-2,-2,1,1,-2,-2,-2],[-2,-2,-2,-2,-2,1,-1],[-2,0,-2,-2,-2,2,-2],[1,-1,-2,-2,-2,-2,-2],[-2,-2,-2,-1,-1,-2,-2],[-2,-2,-2,-2,2,-2,-2],] + - [[-2,-2,-2,-1,-2,2,-2],[2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-1],[-2,3,-2,-1,-2,-2,-2],] + - [[-2,-1,-2,2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,-1,-2,-2,0],[-2,-2,-2,-2,-2,-2,-2],[1,-2,-2,-2,-2,-2,-2],[-2,-2,-2,1,-2,0,-2],] + - [[-2,-2,-2,-2,-2,-1,-2],[2,-1,-2,0,-2,1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,2,-2,0,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,1,-2,-1,-1],[-2,-1,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,0,-2,0,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,3,-2,0,-2,1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-1,-2,3,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,0,1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[1,-2,-2,-2,-2,-2,-2],[2,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-1,-1,-2,-2,-2],] + - [[2,-2,-2,-2,-2,-2,1],[-2,-2,-2,-2,-1,-2,-2],[-2,0,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,3,-2],[-2,-2,-1,-2,-2,-2,-2],[1,-2,-2,-2,-2,-2,-1],] + - [[-2,-2,-1,-1,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,2],[1,-2,-2,-2,-2,-2,1],[1,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-1,-1,-2,-2],] + - [[-2,-2,-1,-2,0,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[1,-2,-2,-2,-2,-2,2],[-2,-2,-2,-2,-2,-2,-2],[0,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,2,-2,0,-2,-2],] + - [[-2,-2,-2,1,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,-1,-2,-2],[1,-2,-2,2,-2,-2,2],[-2,-2,-1,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,2,-2,-2,-2],] + - [[-2,-2,-2,-1,-2,-2,-2],[-2,2,-2,-2,-2,4,-2],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,4,-2,-2,-2,2,-2],[-2,-2,-2,-1,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,0,-2],[-1,-2,-2,-2,-2,-2,-2],[-2,-2,2,-2,3,-2,-2],[-2,-2,-2,4,-2,-2,-2],[-2,-2,2,-2,4,-2,-2],[-2,-2,-2,-2,-2,-2,1],[-2,1,-2,-2,-2,-2,-2],] + - [[-2,-1,-2,-2,-2,-1,-2],[3,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,-2,-2,-2,3],[-2,-1,-2,-2,-2,-1,-2],] + - [[-2,-2,-2,1,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,2,-2,0,-2,-2],[0,-2,-2,-2,-2,-2,-1],[-2,-2,0,-2,2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-1,-2,-2,-2],] + - [[-2,-2,-1,-2,-2,-2,-2],[-2,2,-2,-2,-2,-1,-2],[-2,-2,-2,3,-2,-2,-1],[-2,-2,2,-2,1,-2,-2],[-1,-2,-2,-1,-2,-2,-2],[-2,1,-2,-2,-2,4,-2],[-2,-2,-2,-2,-1,-2,-2],] + - [[-2,-2,-2,-2,-2,2,-2],[2,-2,-1,-2,-2,-2,-2],[-2,-2,-2,-2,-2,3,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,0,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-1,-2,-1],[-2,2,-2,-2,-2,-2,-2],] + - [[-2,-2,2,-2,-2,-2,-2],[-2,-1,-2,-2,-2,1,-2],[-2,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[2,-2,-2,-2,-2,-2,-2],[-2,3,-2,-2,-2,1,-2],[-2,-2,-2,-2,0,-2,-2],] + - [[-2,-2,0,-2,2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,-2,-2,-2,-1],[-2,-2,-2,1,-2,-2,-2],[0,-2,-2,-2,-2,-2,2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-1,-2,-1,-2,-2],] + - [[-2,0,-2,-2,-2,-2,-2],[-2,-2,-2,0,-2,-2,0],[-2,-2,-2,-2,-2,-2,-2],[-2,1,-2,-2,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],[0,-2,-2,0,-2,-2,-2],[-2,-2,-2,-2,-2,3,-2],] + - [[-2,-2,-2,-2,1,2,-2],[0,-2,-2,-1,-2,-2,-2],[-1,-2,-2,-2,-2,-2,-2],[-2,0,-2,-1,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-1],[-2,-2,-2,2,-2,-2,0],[-2,0,0,-2,-2,-2,-2],] + - [[-2,-2,1,-2,-2,-2,-2],[-2,-2,-1,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-1,1],[-2,-2,-2,4,-2,-2,-2],[1,-1,-2,-2,-2,-2,-2],[-2,-2,-2,-2,1,-2,-2],[-2,-2,-2,-2,-1,-2,-2],] + - [[-2,-1,-2,-2,0,-2,-2],[-2,-2,-2,-2,-2,-2,-1],[3,-2,-2,-2,-2,-2,-2],[-2,-2,-2,2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-1],[-1,-2,-2,-2,-2,-2,-2],[-2,-2,-1,-2,-2,2,-2],] + - [[-2,-2,-2,-2,-2,-1,-2],[0,-2,-2,-2,-1,-2,-2],[-2,2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,1,-2],[-2,-2,2,-2,-2,-2,1],[-2,-1,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,-2,-2,-2],[-2,-2,3,-2,3,1,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,1,3,-2,-1,-2,-2],[-2,-2,-2,-2,2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-1,-2,-2,-2,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,3,-2,3,-2,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,-2,4,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-1,-2,-2,-2,-2,-2,-1],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,4,-2,-1,-2,-1,-2],[-2,-2,-1,-2,-1,-2,-2],[-2,3,-2,-2,-2,-1,-2],[-2,-2,-1,-2,-1,-2,-2],[-2,3,-2,2,-2,3,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,2,-2,-2],[-2,0,1,-2,1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,2,0,-2],[-2,-2,1,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-1,-2],[3,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,0,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-1,-2,-1,-2,-2],[-2,-2,-2,-2,-2,-2,3],[-2,-1,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,2,-2,-2,-2],[-2,-2,-2,-2,2,-2,-2],[-2,-1,-2,-1,-2,-2,-2],[1,-2,-1,-1,0,-2,1],[-2,-2,-2,-1,-2,-1,-2],[-2,-2,4,-2,-2,-2,-2],[-2,-2,-2,-1,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,0,-2],[0,0,-2,-2,2,-1,-2],[-2,-1,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,2,-2],[-2,2,-1,-2,-2,0,-1],[-2,0,-2,-2,-2,-2,-2],] + - [[-2,2,1,-2,-2,-2,-2],[-2,-2,-2,-2,2,-2,-1],[-2,-1,-2,-2,-2,-2,1],[-2,-2,-2,-1,-2,-2,-2],[1,-2,-2,-2,-2,-1,-2],[0,-2,1,-2,-2,-2,-2],[-2,-2,-2,-2,0,-1,-2],] + - [[-2,-2,-2,-2,-1,-1,-2],[1,-2,-2,-2,-2,-2,-2],[1,-2,-2,3,-2,-2,-2],[-2,-2,2,-1,-1,-2,-2],[-2,-2,-2,1,-2,-2,0],[-2,-2,-2,-2,-2,-2,-1],[-2,-1,1,-2,-2,-2,-2],] + - [[0,-2,-2,-2,-2,-2,2],[-2,-2,-2,-1,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,0,-2,-2,-2,-1,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,3,-2,-2,-2],[-1,-2,-2,-2,-2,-2,1],] + - [[0,-2,-2,-1,-2,-2,-1],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,0,-2,-2],[2,-2,-2,-2,-2,-2,3],[-2,-2,-1,-2,2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[0,-2,-2,-1,-2,-2,-1],] + - [[-2,-2,-2,0,-2,-2,-2],[-2,-2,2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,3,-2],[1,-2,-2,-2,-2,-2,-1],[-2,-1,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-1,-2,-2],[-2,-2,-2,2,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,3,-2,-1,-2,-2],[-2,3,-2,-2,-2,4,-2],[-2,-2,-2,-1,-2,-2,-2],[-2,-1,-2,-2,-2,-1,-2],[-2,-2,-1,-2,3,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-2,-2,-1,-2,-2,-2],[-2,-2,-2,-2,2,-2,-2],[-2,0,-2,-2,-2,-2,-2],[1,-2,-2,-1,-2,-2,2],[-2,-2,-2,-2,-2,3,-2],[-2,-2,0,-2,-2,-2,-2],[-2,-2,-2,1,-2,-2,-2],] + - [[-2,-2,-2,-2,-2,-2,-2],[-2,-2,0,-1,-2,-2,-2],[-2,-2,-2,-2,-2,-1,-2],[-2,0,-2,-1,-2,3,-2],[-2,2,-2,-2,-2,-2,-2],[-2,-2,-2,-1,-1,-2,-2],[-2,-2,-2,-2,-2,-2,-2],] + - [[-2,-1,-2,-2,1,-2,-2],[-2,-2,-2,-2,-2,-2,1],[3,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,-2],[-2,-2,-2,-2,-2,-2,0],[-1,-2,-2,-2,-2,-2,-2],[-2,-2,0,-2,-2,1,-2],] diff --git a/data/akari/easy.yml b/data/akari/easy.yml new file mode 100644 index 0000000..c60fce2 --- /dev/null +++ b/data/akari/easy.yml @@ -0,0 +1,4 @@ +--- +name: Akari Easy +data: + - [[-3, -4, -2, -2, -2],[-2, 4, -2, -1, -2],[-2, -2, -2, 2, -2],[0, -2, -1, -2, -2],[-2, -2, -2, -2, -2]] diff --git a/nikoli.rb b/nikoli.rb index 97bb061..52b2bf9 100755 --- a/nikoli.rb +++ b/nikoli.rb @@ -9,7 +9,7 @@ require 'coffee-script' require 'slim' require 'sass' -GAMES = %i{hitori nurikabe sudoku} +GAMES = %i{akari hitori nurikabe sudoku} set :data_folder, File.expand_path('./data') diff --git a/views/akari.coffee b/views/akari.coffee new file mode 100644 index 0000000..a45d14b --- /dev/null +++ b/views/akari.coffee @@ -0,0 +1,104 @@ +class Nikoli.Akari extends Nikoli.Game + constructor: (@board, @name = 'akari') -> + super @board, @name + + errors: -> + solution = @toArray() + errors = [] + + for i in [0...solution.length] + row = solution[i] + for j in [0...row.length] + cell = new Nikoli.Cell(i, j, solution) + + if cell.value == -5 + errors.push {row: i, column: j, message: 'The light is illuminated by another one'} + else if cell.value == -2 + errors.push {row: i, column: j, message: 'The cell is not illuminated'} + else if cell.value >= 0 + lights = cell.adjacentCells().filter((adj_cell) -> adj_cell.value == -3 || adj_cell.value == -5) + if lights.length != cell.value + errors.push {row: i, column: j, message: 'The number of lights is not correct'} + + errors + + generate: (game, solution = false) -> + @game = game if game? + @grid.innerHTML = @game.map((row, i) -> + '
' + row.map((cell, j) -> + data = "data-row=\"#{i}\" data-column=\"#{j}\"" + if cell <= -2 + if solution + color_class = if cell == -3 + 'black' + else if cell == -4 + 'light' + else if cell == -5 + 'black light' + "
 
" + else + "
#{if cell >= 0 then cell else ' '}
" + ).join('') + '
' + ).join('') + + for cell in board.querySelectorAll('.empty') + cell.addEventListener 'click', ((evenment) => @toggle evenment.target), false + + return + + illuminate: -> + solution = @toArray() + + [].forEach.call @grid.querySelectorAll('.empty'), (cell) -> + akari_cell = new Nikoli.AkariCell(parseInt(cell.dataset.row), parseInt(cell.dataset.column), solution) + + if akari_cell.isIlluminated() + cell.classList.add('light') + else + cell.classList.remove('light') + + + toggle: (cell) -> + cell.classList.toggle 'black' + @illuminate() + + toArray: -> + [].map.call @grid.querySelectorAll('.grid-row'), (row) -> + [].map.call row.querySelectorAll('.grid-cell'), (cell) -> + if cell.classList.contains('empty') + if cell.classList.contains('black') && cell.classList.contains('light') + -5 + else if cell.classList.contains('light') + -4 + else if cell.classList.contains('black') + -3 + else + -2 + else + value = parseInt(cell.innerHTML) + if isNaN(value) then -1 else value + +class Nikoli.AkariCell extends Nikoli.Cell + isIlluminated: -> + @lightLeft() || @lightRight() || @lightUp() || @lightDown() + + light: (array) -> + for value in array + if value == -3 || value == -5 + return true + else if value >= -1 + return false + + return false + + lightLeft: -> + @y != 0 && @light(@getRow().slice(0, @y).reverse()) + + lightRight: -> + @y != (@getRow().length - 1) && @light(@getRow().slice(@y + 1)) + + lightUp: -> + @x != 0 && @light(@getColumn().slice(0, @x).reverse()) + + lightDown: -> + @x != (@getColumn().length - 1) && @light(@getColumn().slice(@x + 1)) diff --git a/views/akari.slim b/views/akari.slim new file mode 100644 index 0000000..4fff02e --- /dev/null +++ b/views/akari.slim @@ -0,0 +1,10 @@ +- content_for(:title) { 'Akari' } + +h1 Akari +#board + +script type="text/javascript" src="/akari.js" +javascript: + document.addEventListener("DOMContentLoaded", function() { + akari = new Nikoli.Akari(document.getElementById('board')); + }); diff --git a/views/application.coffee b/views/application.coffee index 5d4fbd6..4c5be18 100644 --- a/views/application.coffee +++ b/views/application.coffee @@ -68,6 +68,13 @@ class Nikoli.Cell toString: -> "#{@x};#{@y}" + getColumn: -> + column = [] + column.push @game[i][@y] for i in [0...@game.length] + column + + getRow: -> @game[@x] + adjacentCells: -> [ new Cell(@x + 1, @y, @game), @@ -91,13 +98,10 @@ class Nikoli.Cell array.filter((cell) => cell == @value).length > 1 columnDuplicates: -> - column = [] - column.push @game[i][@y] for i in [0...@game.length] - - @duplicatesIn column + @duplicatesIn @getColumn() rowDuplicates: -> - @duplicatesIn @game[@x] + @duplicatesIn @getRow() squareDuplicates: (from, size) -> square = [] diff --git a/views/application.scss b/views/application.scss index b875c90..8813162 100644 --- a/views/application.scss +++ b/views/application.scss @@ -66,7 +66,10 @@ ul { background-color: #fff; } .black { - background-color: #aaa; + background-color: transparent; +} +.error { + box-shadow: 0 0 10px 0 #c00 inset; } .hitori { @@ -75,6 +78,15 @@ ul { } } +.akari { + .black { + background-color: #222; + } + .light { + box-shadow: 0 0 10px 5px #ffb inset; + } +} + .sudoku { $sudoku-separation: 5px;