<2024-11-14 Thu>
Light Up, também conhecido como Akari, é um quebra-cabeça lógico de determinação binária publicado pela Nikoli, uma editora japonesa especializada em jogos e, especialmente, em quebra-cabeças lógicos. A Nikoli foi fundada em 1980 e ganhou destaque mundial com a popularidade do egrégio Sudoku. Até 2011, três livros compostos inteiramente por quebra-cabeças Light Up foram publicados pela Nikoli.
Light Up é jogado em uma grade retangular de células brancas e pretas. O jogador coloca lâmpadas em células brancas de forma que nenhuma lâmpada ilumine outra diretamente, até que toda a grade esteja iluminada. Uma lâmpada emite raios de luz horizontal e verticalmente, iluminando todas as células de mesma linha e coluna, a menos que a luz seja bloqueada por uma célula preta. Uma célula preta pode ter um número de 0 a 4, indicando quantas lâmpadas devem ser colocadas adjacentes aos seus quatro lados; por exemplo, uma célula com o número 4 deve ter quatro lâmpadas ao seu redor, uma de cada lado, e uma célula com 0 não pode ter lâmpadas em nenhum de seus lados. Uma célula preta sem número pode ter qualquer quantidade de lâmpadas adjacentes a ela, inclusive nenhuma. Ademais, lâmpadas colocadas na diagonal de uma célula numerada não contribuem para a contagem de lâmpadas.
Você deve desenvolver um programa que leia a especificação do
desafio, via stdin
, obtenha o plano para a
conclusão do mapa lido, e gere uma saída, via stdout
, no formato especificado na descrição do
trabalho. Caso não encontre um plano, encerre seu programa com um
exit(120)
.
Esta seção descreve as várias ferramentas auxiliares disponíveis para resolver o problema do jogo Akari. As ferramentas estão organizadas em categorias: planejadores PDDL, planejadores HDDL, SAT-solvers e bibliotecas auxiliares. A localização e a forma de chamada de cada ferramenta estão descritas a seguir.
Para utilizar dos planejadores PDDL, você precisará de um modelo PDDL do jogo Akari, crie os arquivos de domínio e problema PDDL correspondentes, chame o planejador selecionado com os parâmetros corretos. Aqui estão os planejadores PDDL disponíveis:
/tmp/dir/software/planners/madagascar/{M,Mp,MpC}
./tmp/dir/software/planners/downward/fast-downward.py
./tmp/dir/software/planners/downward-fdss23/fast-downward.py
./tmp/dir/software/planners/scorpion-maidu/fast-downward.py
./tmp/dir/software/planners/julia/planner.jl
.Para utilizar dos planejadores HDDL, você precisará de um modelo HDDL do jogo Akari, crie os arquivos de domínio e problema HDDL correspondentes, chame o planejador selecionado com os parâmetros corretos. Aqui estão os planejadores HDDL disponíveis:
/tmp/dir/software/planners/panda/panda.jar
./tmp/dir/software/planners/pandaPI/pandasolver
.Para utilizar dos SAT-solvers, você precisará de uma formulação do problema Akari em forma de CNF (Conjunctive Normal Form). Aqui estão os SAT-solvers disponíveis e como utilizá-los:
/usr/bin/clasp
./usr/bin/cryptominisat
./usr/bin/minisat
./usr/bin/minisat+
./usr/bin/packup
./usr/bin/picosat
./usr/bin/sat4j
./usr/bin/z3
Nesta modalidade de classificação, o problema é dividido em três categorias: AGILE, SATISFICING e OPTIMAL. A pontuação é computada da seguinte forma:
O vencedor será determinado com base na soma dos pontos obtidos em todas as categorias.
A entrada é composta com um conjunto de linhas, e deverão ser lidas
da entrada padrão. As linhas, da entrada, representam a matriz do jogo,
você descobrirá as dimensões conforme faz a leitura. A entrada termina
em EOF
.
Cada célula é representada por um caractere, conforme a descrição abaixo:
-
representa uma célula braca;#
representa uma célula preta;0
representa uma célula preta, que
não deve ter nenhuma lâmpada adjacente;1
representa uma célula preta, que
deve ter exatamente uma lâmpada adjacente;2
representa uma célula preta, que
deve ter exatamente duas lâmpada adjacente;3
representa uma célula preta, que
deve ter exatamente três lâmpada adjacente;4
representa uma célula preta, que
deve ter exatamente quatro lâmpada adjacenteA saída é composta por uma única linha contendo as coordenadas das
células, nas quais lâmpadas forma acessas, a fim de iluminar todas as
células do tabuleiro. Cada clique é representado pelo plano cartesiano
(y, x)
, sendo y
a linha, iniciando em
,
e x
a coluna, iniciando em
,
e separados pelo caractere ;
, exceto pelo
último, que deverá possuir apenas uma quebra de linha.
--#----
-1---3-
------#
-------
2------
-3---1-
----0--
(bulb 0 1);(bulb 0 5);(bulb 1 4);(bulb 1 6);(bulb 2 3);(bulb 3 0);(bulb 4 5);(bulb 5 0);(bulb 5 2);(bulb 6 1);(bulb 6 6)
Author: Light Up [Akari], mojificado por Bruno Ribeiro, Wagner Cunha e Bruno Ribas