├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .gitattributes
├── .github
└── workflows
│ ├── deploy.yml
│ └── test.yml
├── .gitignore
├── .hgignore
├── .hgtags
├── .npmignore
├── .prettierignore
├── Changelog.md
├── Gruntfile.js
├── LICENSE.txt
├── Makefile
├── README.md
├── docs
├── Config.md
├── InputModes.md
├── Notes.md
├── PublicAPI.md
├── Puzzle.md
├── PuzzleSubObject.md
└── pzpr.md
├── flake.lock
├── flake.nix
├── git-hash.sh
├── index.js
├── nix
└── pzprjs.nix
├── package-lock.json
├── package.json
├── sample
├── .eslintrc.json
├── exec.js
├── html
│ ├── api_test.html
│ └── failcodes.html
├── node.js
├── node2.js
├── node3.js
└── node4.js
├── src-ui
├── changes.html
├── css
│ ├── list.css
│ └── ui.css
├── img
│ ├── akichi.png
│ ├── alter.png
│ ├── angleloop.png
│ ├── aquapelago.png
│ ├── aquarium.png
│ ├── araf.png
│ ├── archipelago.png
│ ├── balance.png
│ ├── balloon.png
│ ├── batten.png
│ ├── battleship.png
│ ├── bdwalk.png
│ ├── bosnianroad.png
│ ├── brownies.png
│ ├── castle.png
│ ├── cbanana.png
│ ├── chainedb.png
│ ├── circlesquare.png
│ ├── cocktail.png
│ ├── coffeemilk.png
│ ├── compass.png
│ ├── coral.png
│ ├── cts.png
│ ├── curvedata.png
│ ├── curving.png
│ ├── dbchoco.png
│ ├── detour.png
│ ├── dominion.png
│ ├── doppelblock.png
│ ├── dotchi.png
│ ├── dotchi2.png
│ ├── doubleback.png
│ ├── easyasabc.png
│ ├── evolmino.png
│ ├── fakearrow.png
│ ├── firewalk.png
│ ├── forestwalk.png
│ ├── geradeweg.png
│ ├── heteromino.png
│ ├── heyapin.png
│ ├── icewalk.png
│ ├── invlitso.png
│ ├── island.png
│ ├── kaidan.png
│ ├── kaisu.png
│ ├── kissing.png
│ ├── kropki.png
│ ├── kuroclone.png
│ ├── kuromenbun.png
│ ├── ladders.png
│ ├── lixloop.png
│ ├── lollipops.png
│ ├── magnets.png
│ ├── mannequin.png
│ ├── martini.png
│ ├── maxi.png
│ ├── midloop.png
│ ├── mintonette.png
│ ├── mirrorbk.png
│ ├── moonsun.png
│ ├── mrtile.png
│ ├── mukkonn.png
│ ├── nanameguri.png
│ ├── nibunnogo.png
│ ├── nondango.png
│ ├── nonogram.png
│ ├── norinuri.png
│ ├── nothing.png
│ ├── nurimisaki.png
│ ├── nuritwin.png
│ ├── nuriuzu.png
│ ├── oneroom.png
│ ├── orbital.png
│ ├── ovotovata.png
│ ├── oyakodori.png
│ ├── patchwork.png
│ ├── pencils.png
│ ├── pentatouch.png
│ ├── pentopia.png
│ ├── pmemory.png
│ ├── portal.png
│ ├── ququ.png
│ ├── rassi.png
│ ├── recoil.png
│ ├── regional-poly.png
│ ├── remlen.png
│ ├── retroships.png
│ ├── retsurin.png
│ ├── roundtrip.png
│ ├── sananko.png
│ ├── sashikazune.png
│ ├── satogaeri.png
│ ├── scrin.png
│ ├── simplegako.png
│ ├── simpleloop.png
│ ├── skyscrapers.png
│ ├── slashpack.png
│ ├── smullyan.png
│ ├── snake.png
│ ├── snakeegg.png
│ ├── squarejam.png
│ ├── starbattle.png
│ ├── statuepark.png
│ ├── subomino.png
│ ├── swslither.png
│ ├── symmarea.png
│ ├── tachibk.png
│ ├── tajmahal.png
│ ├── takoyaki.png
│ ├── tapaloop.png
│ ├── tents.png
│ ├── teri.png
│ ├── tetrochain.png
│ ├── tetrominous.png
│ ├── tilecity.png
│ ├── timebomb.png
│ ├── tjunction.png
│ ├── tontonbeya.png
│ ├── trainstations.png
│ ├── tslither.png
│ ├── turnaround.png
│ ├── voxas.png
│ ├── vslither.png
│ ├── wafusuma.png
│ ├── walllogic.png
│ ├── wataridori.png
│ ├── waterwalk.png
│ ├── wittgen.png
│ ├── yinyang.png
│ └── zabajaba.png
├── js
│ ├── common
│ │ ├── intro.js
│ │ ├── langs.js
│ │ └── outro.js
│ ├── list.js
│ ├── pzpr-ui.js
│ └── ui
│ │ ├── AuxEditor.js
│ │ ├── Boot.js
│ │ ├── Event.js
│ │ ├── KeyPopup.js
│ │ ├── Listener.js
│ │ ├── MenuArea.js
│ │ ├── MenuConfig.js
│ │ ├── Misc.js
│ │ ├── Network.js
│ │ ├── Notify.js
│ │ ├── PopupMenu.js
│ │ ├── Timer.js
│ │ ├── ToolArea.js
│ │ ├── UI.js
│ │ └── UrlConfig.js
├── list.html
├── p.html
├── res
│ ├── history.en.yaml
│ ├── history.ja.yaml
│ ├── p.en.json
│ ├── p.ja.json
│ ├── rules.en.yaml
│ └── rules.ja.yaml
└── rules.html
├── src
├── .eslintrc.json
├── common
│ ├── banner_full.js
│ ├── banner_min.js
│ ├── intro.js
│ ├── langs.js
│ └── outro.js
├── lib
│ ├── candle-intro.js
│ └── candle-outro.js
├── puzzle
│ ├── Address.js
│ ├── Answer.js
│ ├── AreaManager.js
│ ├── Bank.js
│ ├── Board.js
│ ├── BoardExec.js
│ ├── Config.js
│ ├── Encode.js
│ ├── FileData.js
│ ├── GraphBase.js
│ ├── Graphic.js
│ ├── KeyInput.js
│ ├── LineManager.js
│ ├── MouseInput.js
│ ├── Operation.js
│ ├── Piece.js
│ ├── PieceList.js
│ └── Puzzle.js
├── pzpr.js
├── pzpr
│ ├── classmgr.js
│ ├── core.js
│ ├── env.js
│ ├── event.js
│ ├── metadata.js
│ ├── parser.js
│ ├── util.js
│ └── variety.js
├── res
│ ├── failcode.en.json
│ └── failcode.ja.json
├── variety-common
│ ├── Answer.js
│ ├── BoardExec.js
│ ├── Encode.js
│ ├── FileData.js
│ ├── Graphic.js
│ ├── KeyInput.js
│ ├── MouseInput.js
│ ├── Operation.js
│ └── Piece.js
└── variety
│ ├── amibo.js
│ ├── anglers.js
│ ├── aqre.js
│ ├── aquapelago.js
│ ├── aquarium.js
│ ├── araf.js
│ ├── balance.js
│ ├── balloon.js
│ ├── barns.js
│ ├── batten.js
│ ├── bdblock.js
│ ├── bonsan.js
│ ├── bosanowa.js
│ ├── bosnianroad.js
│ ├── box.js
│ ├── castle.js
│ ├── cbanana.js
│ ├── cbblock.js
│ ├── chainedb.js
│ ├── circlesquare.js
│ ├── compass.js
│ ├── context.js
│ ├── country.js
│ ├── creek.js
│ ├── crossstitch.js
│ ├── curvedata.js
│ ├── curving.js
│ ├── dominion.js
│ ├── doppelblock.js
│ ├── dosufuwa.js
│ ├── easyasabc.js
│ ├── evolmino.js
│ ├── factors.js
│ ├── familyphoto.js
│ ├── fillmat.js
│ ├── fillomino.js
│ ├── firefly.js
│ ├── fracdiv.js
│ ├── geradeweg.js
│ ├── goishi.js
│ ├── gokigen.js
│ ├── guidearrow.js
│ ├── haisu.js
│ ├── hakoiri.js
│ ├── hanare.js
│ ├── hashikake.js
│ ├── hebi.js
│ ├── herugolf.js
│ ├── heyapin.js
│ ├── heyawake.js
│ ├── hitori.js
│ ├── icebarn.js
│ ├── icewalk.js
│ ├── ichimaga.js
│ ├── interbd.js
│ ├── japanesesums.js
│ ├── juosan.js
│ ├── kaero.js
│ ├── kaidan.js
│ ├── kakuro.js
│ ├── kakuru.js
│ ├── kazunori.js
│ ├── kinkonkan.js
│ ├── kouchoku.js
│ ├── kramma.js
│ ├── kurochute.js
│ ├── kuroclone.js
│ ├── kurodoko.js
│ ├── kuromenbun.js
│ ├── kurotto.js
│ ├── kusabi.js
│ ├── ladders.js
│ ├── lapaz.js
│ ├── lightshadow.js
│ ├── lightup.js
│ ├── lineofsight.js
│ ├── lither.js
│ ├── lits.js
│ ├── lohkous.js
│ ├── lollipops.js
│ ├── lookair.js
│ ├── loute.js
│ ├── magnets.js
│ ├── makaro.js
│ ├── mannequin.js
│ ├── mashu.js
│ ├── mejilink.js
│ ├── midloop.js
│ ├── minarism.js
│ ├── myopia.js
│ ├── nagare.js
│ ├── nagenawa.js
│ ├── nanameguri.js
│ ├── nanro.js
│ ├── nawabari.js
│ ├── nondango.js
│ ├── nonogram.js
│ ├── nothree.js
│ ├── numlin.js
│ ├── nurikabe.js
│ ├── nurimaze.js
│ ├── paintarea.js
│ ├── parquet.js
│ ├── patchwork.js
│ ├── pencils.js
│ ├── pipelink.js
│ ├── pmemory.js
│ ├── portal.js
│ ├── ququ.js
│ ├── railpool.js
│ ├── recoil.js
│ ├── reflect.js
│ ├── renban.js
│ ├── ripple.js
│ ├── roma.js
│ ├── roundtrip.js
│ ├── scrin.js
│ ├── shakashaka.js
│ ├── shikaku.js
│ ├── shimaguni.js
│ ├── shugaku.js
│ ├── simplegako.js
│ ├── skyscrapers.js
│ ├── slalom.js
│ ├── slashpack.js
│ ├── slither.js
│ ├── snake.js
│ ├── snakeegg.js
│ ├── squarejam.js
│ ├── starbattle.js
│ ├── statuepark.js
│ ├── sudoku.js
│ ├── sukoro.js
│ ├── tachibk.js
│ ├── tapa.js
│ ├── tapaloop.js
│ ├── tasquare.js
│ ├── tatamibari.js
│ ├── tateyoko.js
│ ├── tawa.js
│ ├── tentaisho.js
│ ├── tents.js
│ ├── tetrochain.js
│ ├── tilecity.js
│ ├── tilepaint.js
│ ├── toichika.js
│ ├── tontti.js
│ ├── trainstations.js
│ ├── tren.js
│ ├── triplace.js
│ ├── turnaround.js
│ ├── usoone.js
│ ├── voxas.js
│ ├── vslither.js
│ ├── walllogic.js
│ ├── wblink.js
│ ├── yajikazu.js
│ ├── yajilin.js
│ ├── yajitatami.js
│ ├── yinyang.js
│ └── yosenabe.js
├── test
├── .eslintrc.json
├── load_testdata.js
├── puzzle
│ ├── answer_test.js
│ ├── boardexec_test.js
│ ├── config_test.js
│ ├── encode_test.js
│ ├── filedata_test.js
│ ├── input_test.js
│ ├── operation_test.js
│ └── render_test.js
├── pzpr
│ └── parser_test.js
├── script
│ ├── aho.js
│ ├── akichi.js
│ ├── alter.js
│ ├── amibo.js
│ ├── angleloop.js
│ ├── anglers.js
│ ├── antmill.js
│ ├── aqre.js
│ ├── aquapelago.js
│ ├── aquarium.js
│ ├── araf.js
│ ├── archipelago.js
│ ├── armyants.js
│ ├── arrowflow.js
│ ├── arukone.js
│ ├── ayeheya.js
│ ├── balance.js
│ ├── balloon.js
│ ├── barns.js
│ ├── batten.js
│ ├── battleship.js
│ ├── bdblock.js
│ ├── bdwalk.js
│ ├── bonsan.js
│ ├── bosanowa.js
│ ├── bosnianroad.js
│ ├── box.js
│ ├── brownies.js
│ ├── canal.js
│ ├── castle.js
│ ├── cave.js
│ ├── cbanana.js
│ ├── cbblock.js
│ ├── chainedb.js
│ ├── chocona.js
│ ├── circlesquare.js
│ ├── cocktail.js
│ ├── coffeemilk.js
│ ├── cojun.js
│ ├── compass.js
│ ├── context.js
│ ├── coral.js
│ ├── country.js
│ ├── creek.js
│ ├── crossstitch.js
│ ├── cts.js
│ ├── curvedata-aux.js
│ ├── curvedata.js
│ ├── curving.js
│ ├── dbchoco.js
│ ├── detour.js
│ ├── disloop.js
│ ├── dominion.js
│ ├── doppelblock.js
│ ├── dosufuwa.js
│ ├── dotchi.js
│ ├── dotchi2.js
│ ├── doubleback.js
│ ├── easyasabc.js
│ ├── evolmino.js
│ ├── factors.js
│ ├── fakearrow.js
│ ├── familyphoto.js
│ ├── fillmat.js
│ ├── fillomino.js
│ ├── firefly.js
│ ├── firewalk.js
│ ├── fivecells.js
│ ├── forestwalk.js
│ ├── fourcells.js
│ ├── fracdiv.js
│ ├── geradeweg.js
│ ├── goishi.js
│ ├── gokigen.js
│ ├── guidearrow.js
│ ├── haisu.js
│ ├── hakoiri.js
│ ├── hanare.js
│ ├── hashikake.js
│ ├── hebi.js
│ ├── herugolf.js
│ ├── heteromino.js
│ ├── heyablock.js
│ ├── heyabon.js
│ ├── heyapin.js
│ ├── heyawake.js
│ ├── hinge.js
│ ├── hitori.js
│ ├── icebarn.js
│ ├── icelom.js
│ ├── icelom2.js
│ ├── icewalk.js
│ ├── ichimaga.js
│ ├── ichimagam.js
│ ├── ichimagax.js
│ ├── interbd.js
│ ├── invlitso.js
│ ├── island.js
│ ├── japanesesums.js
│ ├── juosan.js
│ ├── kaero.js
│ ├── kaidan.js
│ ├── kaisu.js
│ ├── kakuro.js
│ ├── kakuru.js
│ ├── kazunori.js
│ ├── kinkonkan.js
│ ├── kissing.js
│ ├── koburin.js
│ ├── kouchoku.js
│ ├── kramma.js
│ ├── kramman.js
│ ├── kropki.js
│ ├── kurochute.js
│ ├── kuroclone.js
│ ├── kurodoko.js
│ ├── kuromenbun.js
│ ├── kurotto.js
│ ├── kusabi.js
│ ├── ladders.js
│ ├── lapaz.js
│ ├── lightshadow.js
│ ├── lightup.js
│ ├── lineofsight.js
│ ├── lither.js
│ ├── lits.js
│ ├── lixloop.js
│ ├── lohkous.js
│ ├── lollipops.js
│ ├── lookair.js
│ ├── loopsp.js
│ ├── loute.js
│ ├── magnets.js
│ ├── makaro.js
│ ├── mannequin.js
│ ├── martini.js
│ ├── mashu.js
│ ├── maxi.js
│ ├── meander.js
│ ├── meidjuluk.js
│ ├── mejilink.js
│ ├── midloop.js
│ ├── minarism.js
│ ├── mines.js
│ ├── mintonette.js
│ ├── mirrorbk.js
│ ├── mochikoro.js
│ ├── mochinyoro.js
│ ├── moonsun.js
│ ├── mrtile.js
│ ├── mukkonn.js
│ ├── myopia.js
│ ├── nagare.js
│ ├── nagenawa.js
│ ├── nanameguri.js
│ ├── nanro.js
│ ├── nawabari.js
│ ├── news.js
│ ├── nibunnogo.js
│ ├── nikoji.js
│ ├── nondango.js
│ ├── nonogram.js
│ ├── norinori.js
│ ├── norinuri.js
│ ├── nothing.js
│ ├── nothree.js
│ ├── numlin.js
│ ├── numrope.js
│ ├── nuribou.js
│ ├── nurikabe.js
│ ├── nurimaze.js
│ ├── nurimisaki.js
│ ├── nuritwin.js
│ ├── nuriuzu.js
│ ├── oneroom.js
│ ├── onsen.js
│ ├── orbital.js
│ ├── outofsight.js
│ ├── ovotovata.js
│ ├── oyakodori.js
│ ├── paintarea.js
│ ├── parquet.js
│ ├── patchwork.js
│ ├── pencils.js
│ ├── pentatouch.js
│ ├── pentominous.js
│ ├── pentopia.js
│ ├── pipelink.js
│ ├── pipelinkr.js
│ ├── pmemory.js
│ ├── portal.js
│ ├── putteria.js
│ ├── ququ.js
│ ├── railpool.js
│ ├── rassi.js
│ ├── recoil.js
│ ├── rectslider.js
│ ├── reflect.js
│ ├── regional-poly.js
│ ├── remlen.js
│ ├── renban.js
│ ├── retroships.js
│ ├── retsurin.js
│ ├── ringring.js
│ ├── ripple.js
│ ├── roma.js
│ ├── roundtrip.js
│ ├── sananko.js
│ ├── sashigane.js
│ ├── sashikazune.js
│ ├── satogaeri.js
│ ├── scrin.js
│ ├── shakashaka.js
│ ├── shikaku.js
│ ├── shimaguni.js
│ ├── shugaku.js
│ ├── shwolf.js
│ ├── simplegako.js
│ ├── simpleloop.js
│ ├── skyscrapers.js
│ ├── slalom.js
│ ├── slashpack.js
│ ├── slither.js
│ ├── smullyan.js
│ ├── snake.js
│ ├── snakeegg.js
│ ├── snakepit.js
│ ├── squarejam.js
│ ├── starbattle.js
│ ├── statuepark-aux.js
│ ├── statuepark.js
│ ├── stostone.js
│ ├── subomino.js
│ ├── sudoku.js
│ ├── sukoro.js
│ ├── sukororoom.js
│ ├── swslither.js
│ ├── symmarea.js
│ ├── tachibk.js
│ ├── tajmahal.js
│ ├── takoyaki.js
│ ├── tapa.js
│ ├── tapaloop.js
│ ├── tasquare.js
│ ├── tatamibari.js
│ ├── tateyoko.js
│ ├── tawa.js
│ ├── tentaisho.js
│ ├── tents.js
│ ├── teri.js
│ ├── tetrochain.js
│ ├── tetrominous.js
│ ├── tilecity.js
│ ├── tilepaint.js
│ ├── timebomb.js
│ ├── tjunction.js
│ ├── toichika.js
│ ├── toichika2.js
│ ├── tontonbeya.js
│ ├── tontti.js
│ ├── trainstations.js
│ ├── tren.js
│ ├── triplace.js
│ ├── tslither.js
│ ├── turnaround.js
│ ├── turnrun.js
│ ├── twinarea.js
│ ├── usoone.js
│ ├── usotatami.js
│ ├── view.js
│ ├── voxas.js
│ ├── vslither.js
│ ├── wafusuma.js
│ ├── wagiri.js
│ ├── walllogic.js
│ ├── wataridori.js
│ ├── waterwalk.js
│ ├── wblink.js
│ ├── wittgen.js
│ ├── yajikazu.js
│ ├── yajilin-regions.js
│ ├── yajilin.js
│ ├── yajirushi.js
│ ├── yajirushi2.js
│ ├── yajisoko.js
│ ├── yajitatami.js
│ ├── yinyang.js
│ ├── yosenabe.js
│ └── zabajaba.js
└── variety
│ ├── aho_test.js
│ ├── amibo_test.js
│ ├── ayeheya_test.js
│ ├── bosanowa_test.js
│ ├── cbblock_test.js
│ ├── compass_test.js
│ ├── curvedata_test.js
│ ├── evolmino_test.js
│ ├── fillomino_test.js
│ ├── fivecells_test.js
│ ├── gokigen_test.js
│ ├── herugolf_test.js
│ ├── lits_test.js
│ ├── myopia_test.js
│ ├── onsen_test.js
│ ├── parquet_test.js
│ ├── pipelink_test.js
│ ├── pmemory_test.js
│ ├── railpool_test.js
│ ├── ringring_test.js
│ ├── shwolf_test.js
│ ├── slalom_test.js
│ ├── slither_test.js
│ ├── statuepark_test.js
│ ├── tapa_test.js
│ ├── tentaisho_test.js
│ ├── tontti_test.js
│ └── yajilin_test.js
└── vercel.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # see https://editorconfig.org
2 |
3 | root = true
4 |
5 | [*]
6 | end_of_line = lf
7 | insert_final_newline = true
8 |
9 | [*.js]
10 | indent_style = tab
11 |
12 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | src/lib/*.js
2 | src/common/*.js
3 | src-ui/js/common/*.js
4 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true // Allow to use browser defined variable (not console, alert etc.)
4 | },
5 | "parserOptions": {
6 | "ecmaVersion": 5
7 | },
8 | "globals": {
9 | "pzpr": "readonly",
10 | "ui": "readonly"
11 | },
12 | "extends": "eslint:recommended", // Implement recommended rules
13 | "rules": {
14 | "curly": ["error", "all"], // Error for no curly brancket in loop or conditions
15 | "no-unused-vars": // Error for unused variables, not detect arguments
16 | ["error", {"args": "none"}],
17 | "no-undef": "error", // Error for unused variable (that will become global variable)
18 | "new-cap": "error", // Error for lowercase first letter or constructor call as function
19 | "eqeqeq": ["error", "always"], // Error for ==, != to compare
20 | "no-use-before-define": // Error for using variable before definition
21 | ["error", {"functions":false, "classes":false}],
22 | "comma-dangle": ["error", "never"], // Error for trailing comma
23 | "no-redeclare": "error", // Error for redefine variable
24 | //"block-scoped-var": "warn", // Warn var declaration inside block scope
25 | "no-empty": "off", // Allow empty block statements
26 | "no-useless-escape": "off", // Allow unnessesary escape charactors
27 | "no-extra-boolean-cast": "off", // Allow to use boolean cast for boolean value
28 | "dot-notation": "off", // Allow object access via obj["name"]
29 | "no-loop-func": "off" // Allow function definition in loop
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.js eol=lf
2 | *.css eol=lf
3 | *.html eol=lf
4 |
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 | on:
2 | workflow_dispatch
3 |
4 | jobs:
5 | deployment:
6 | runs-on: ubuntu-latest
7 | steps:
8 | - uses: actions/checkout@v2.4.0
9 | - uses: cachix/install-nix-action@v17
10 | - name: bump pzprjs input in puzzlink flake
11 | env:
12 | CONFIG_PUSH_KEY: ${{ secrets.CONFIG_PUSH_KEY }}
13 | BRANCH: main
14 | INPUT: pzprjs
15 | run: |
16 | eval $(ssh-agent -s)
17 | ssh-add - <<< "$CONFIG_PUSH_KEY"
18 | git config --global user.name "deploy bot"
19 | git clone git@github.com:robx/puzzlink-config.git
20 | cd puzzlink-config
21 | git checkout $BRANCH
22 | nix flake lock --override-input "$INPUT" github:robx/pzprjs/"$GITHUB_SHA" --commit-lock-file
23 | echo "CONFIG_REV=$(git rev-parse HEAD)" >> $GITHUB_ENV
24 | git push origin $BRANCH
25 | - name: deploy
26 | env:
27 | NIXY_DEPLOY_KEY: ${{ secrets.NIXY_DEPLOY_KEY }}
28 | NIXY_HOST: "116.202.108.63"
29 | SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }}
30 | run: |
31 | eval $(ssh-agent -s)
32 | ssh-add - <<< "$NIXY_DEPLOY_KEY"
33 | mkdir -p ~/.ssh
34 | echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
35 | ssh -p 2323 deploy@"$NIXY_HOST" sudo deploy ${{ env.CONFIG_REV }}
36 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | on:
2 | pull_request:
3 | push:
4 | branches:
5 | - main
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v2
12 | - uses: actions/setup-node@v3
13 | with:
14 | node-version: 20
15 | - run: npm install
16 | - run: npm run-script check-format
17 | - run: npm run-script build
18 | - run: npm run-script lint
19 | - run: npm run-script coverage
20 | - uses: codecov/codecov-action@v3
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dist
2 | node_modules
3 | .DS_Store
4 | .eslintcache
5 | git.json
6 |
7 | .vercel
8 | .nyc_output
9 | coverage
10 |
--------------------------------------------------------------------------------
/.hgignore:
--------------------------------------------------------------------------------
1 | dist
2 | pzpr-*
3 | node_modules
4 | .DS_Store
5 | .eslintcache
6 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | .git*
2 | .hg*
3 | .DS_Store
4 |
5 | /.vscode
6 | /Gruntfile.js
7 | /docs
8 | /src
9 | *.concat.js
10 |
11 | .jshintrc
12 | .eslintrc.json
13 | .eslintignore
14 | .eslintcache
15 | /sample
16 | /test
17 | yarn.lock
18 | paclage-lock.json
19 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | *intro.js
2 | *outro.js
3 | src/common/langs.js
4 | src-ui/js/common/langs.js
5 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2011, 2014 Kobayashi, Daisuke (sabo2)
4 | Copyright (c) 2019 Vollmert, Robert and contibutors
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in
14 | all copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: build test serve format
2 |
3 | build:
4 | npm run-script build
5 |
6 | test:
7 | npm test
8 |
9 | serve:
10 | cd dist && python3 -m http.server -b localhost
11 |
12 | serve-all:
13 | cd dist && python3 -m http.server
14 |
15 | format:
16 | npm run-script format
17 |
--------------------------------------------------------------------------------
/docs/Notes.md:
--------------------------------------------------------------------------------
1 | Some notes on pzprjs from an "outside" perspective.
2 |
3 | ### Japanese terms
4 |
5 | hatena: "question"; particularly, whether blank and/or question mark
6 | clues are enabled (qnum == -2)
7 |
8 |
--------------------------------------------------------------------------------
/docs/PublicAPI.md:
--------------------------------------------------------------------------------
1 | # pzpr.js API
2 |
3 | pzpr.js can be used under either browser environment or node.js.
4 |
5 | ## usage
6 |
7 | on browser
8 |
9 | ```html
10 |
11 |
12 |
13 |
14 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | ```
29 |
30 | on node.js
31 |
32 | ```js
33 | var pzpr = require('pzpr');
34 | var puzzle = new pzpr.Puzzle({type:'player'}).open('nurikabe/5/5/g5k2o1k3g');
35 |
36 | puzzle.mouse.inputPath(3,3, 3,9, 1,9, 5,9);
37 | puzzle.mouse.inputPath(5,1, 9,1, 9,5, 5,5, 7,7);
38 | console.log(puzzle.check().text);
39 | // -> 'Complete!'
40 | ```
41 |
42 | ## List of document
43 |
44 | * [pzpr object](pzpr.md)
45 | * [Puzzle object](Puzzle.md)
46 | * [List of puzzle config](Config.md)
47 |
--------------------------------------------------------------------------------
/flake.lock:
--------------------------------------------------------------------------------
1 | {
2 | "nodes": {
3 | "flake-utils": {
4 | "locked": {
5 | "lastModified": 1652776076,
6 | "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=",
7 | "owner": "numtide",
8 | "repo": "flake-utils",
9 | "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8",
10 | "type": "github"
11 | },
12 | "original": {
13 | "owner": "numtide",
14 | "repo": "flake-utils",
15 | "type": "github"
16 | }
17 | },
18 | "nixpkgs": {
19 | "locked": {
20 | "lastModified": 1662099760,
21 | "narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=",
22 | "owner": "NixOS",
23 | "repo": "nixpkgs",
24 | "rev": "67e45078141102f45eff1589a831aeaa3182b41e",
25 | "type": "github"
26 | },
27 | "original": {
28 | "owner": "NixOS",
29 | "ref": "nixos-22.05",
30 | "repo": "nixpkgs",
31 | "type": "github"
32 | }
33 | },
34 | "npmlock2nix-repo": {
35 | "flake": false,
36 | "locked": {
37 | "lastModified": 1648735462,
38 | "narHash": "sha256-G22WBttdFoWp7E/YvGfePOc+W+ZsQGw+IwpFbAwJNeI=",
39 | "owner": "tweag",
40 | "repo": "npmlock2nix",
41 | "rev": "dd2897c3a6e404446704a63f40b9a29fa0acf752",
42 | "type": "github"
43 | },
44 | "original": {
45 | "owner": "tweag",
46 | "repo": "npmlock2nix",
47 | "type": "github"
48 | }
49 | },
50 | "root": {
51 | "inputs": {
52 | "flake-utils": "flake-utils",
53 | "nixpkgs": "nixpkgs",
54 | "npmlock2nix-repo": "npmlock2nix-repo"
55 | }
56 | }
57 | },
58 | "root": "root",
59 | "version": 7
60 | }
61 |
--------------------------------------------------------------------------------
/flake.nix:
--------------------------------------------------------------------------------
1 | {
2 | description = "pzprjs";
3 |
4 | inputs.flake-utils.url = "github:numtide/flake-utils";
5 | inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-22.05;
6 | inputs.npmlock2nix-repo = {
7 | url = "github:tweag/npmlock2nix";
8 | flake = false;
9 | };
10 |
11 | outputs = {
12 | self,
13 | flake-utils,
14 | nixpkgs,
15 | npmlock2nix-repo,
16 | }:
17 | flake-utils.lib.eachDefaultSystem (
18 | system: let
19 | pkgs = import nixpkgs {inherit system;};
20 | in {
21 | defaultPackage = pkgs.callPackage ./nix/pzprjs.nix {
22 | git-hash = if self ? rev then self.rev else "dirty";
23 | npmlock2nix = import npmlock2nix-repo {inherit pkgs;};
24 | };
25 | }
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/git-hash.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ -z "$GIT_HASH" ]; then
4 | GIT_HASH=$(git rev-parse --short HEAD)
5 | fi
6 |
7 | cat > git.json <= 14.0"
22 | },
23 | "scripts": {
24 | "build": "eslint --cache --quiet src src-ui && \"./git-hash.sh\" && grunt default",
25 | "release": "npm run clean && eslint --cache --quiet src && grunt release",
26 | "clean": "del dist/* pzpr-*.{zip,tar.gz,tar.bz2,tgz}",
27 | "format": "prettier --write \"{src,src-ui,test}/**/*.{js,css}\"",
28 | "check-format": "prettier --check \"{src,src-ui,test}/**/*.{js,css}\"",
29 | "lint": "eslint src src-ui test sample",
30 | "test": "mocha -r source-map-support/register -R progress --recursive test",
31 | "coverage": "nyc --reporter=lcov npm run test",
32 | "prepublishOnly": "npm test"
33 | },
34 | "devDependencies": {
35 | "del-cli": "^4.0.1",
36 | "eslint": "^8.43.0",
37 | "grunt": "^1.5.3",
38 | "grunt-contrib-concat": "^1.0.1",
39 | "grunt-contrib-copy": "^1.0.0",
40 | "grunt-contrib-uglify": "^5.2.1",
41 | "mocha": "^10.0.0",
42 | "nyc": "^15.1.0",
43 | "prettier": "^1.19.1"
44 | },
45 | "dependencies": {
46 | "pzpr-canvas": "0.8.2",
47 | "source-map-support": "^0.5.21"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/sample/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "node": true // Allow to use node defined variable (require, process etc.)
4 | },
5 | "parserOptions": {
6 | "ecmaVersion": 6 // Allow es.next features
7 | },
8 | "extends": "eslint:recommended", // Implement recommended rules
9 | "rules": {
10 | "curly": ["error", "all"], // Error for no curly brancket in loop or conditions
11 | "no-unused-vars": // Error for unused variables, not detect arguments
12 | ["error", {"args": "none"}],
13 | "no-undef": "error", // Error for unused variable (that will become global variable)
14 | "new-cap": "error", // Error for lowercase first letter or constructor call as function
15 | "eqeqeq": ["error", "always"], // Error for ==, != to compare
16 | "no-use-before-define": // Error for using variable before definition
17 | ["error", {"functions":false, "classes":false}],
18 | "comma-dangle": ["error", "never"], // Error for trailing comma
19 | "no-redeclare": "error", // Error for redefine variable
20 | //"block-scoped-var": "warn", // Warn var declaration inside block scope
21 | "no-empty": "off", // Allow empty block statements
22 | "no-console": "off", // Allow to use console
23 | "no-useless-escape": "off", // Allow unnessesary escape charactors
24 | "no-extra-boolean-cast": "off", // Allow to use boolean cast for boolean value
25 | "no-mixed-spaces-and-tabs": "off", // Allow to use spaces and tabs for indent
26 | "dot-notation": "off", // Allow object access via obj["name"]
27 | "no-loop-func": "off" // Allow function definition in loop
28 | }
29 | }
--------------------------------------------------------------------------------
/sample/exec.js:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env node
2 |
3 | var pzpr = require('../');
4 | var puzzle = new pzpr.Puzzle();
5 |
6 | puzzle.open('?nurikabe/5/5');
7 |
8 | puzzle.board.getc(1,1).setQnum(1);
9 | puzzle.board.getc(3,1).setQans(1);
10 | puzzle.board.getc(5,1).setQans(1);
11 | puzzle.board.getc(1,3).setQans(1);
12 | puzzle.board.getc(3,3).setQans(1);
13 |
14 | console.log(puzzle.check().text);
15 |
16 | try{ console.log(puzzle.getURL(1));}catch(e){}
17 | try{ console.log(puzzle.getURL(2));}catch(e){}
18 | try{ console.log(puzzle.getURL(3));}catch(e){}
19 | try{ console.log(puzzle.getURL(4));}catch(e){}
20 | try{ console.log(puzzle.getURL(5));}catch(e){}
21 | try{ console.log(puzzle.getFileData(1));}catch(e){}
22 | try{ console.log(puzzle.getFileData(2));}catch(e){}
23 | try{ console.log(puzzle.getFileData(3));}catch(e){}
24 |
--------------------------------------------------------------------------------
/sample/html/api_test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
18 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/sample/node.js:
--------------------------------------------------------------------------------
1 |
2 | var pzpr = require('../dist/js/pzpr.js');
3 |
4 | console.log(pzpr.version);
5 |
6 | var puzzle = new pzpr.Puzzle();
7 |
8 | puzzle.open('?nurikabe/5/5');
9 |
10 | puzzle.board.cell[0].setQnum(1);
11 |
12 | console.log(puzzle.check().text);
13 |
14 | try{ console.log(puzzle.getURL(1));}catch(e){}
15 | try{ console.log(puzzle.getURL(2));}catch(e){}
16 | try{ console.log(puzzle.getURL(3));}catch(e){}
17 | try{ console.log(puzzle.getURL(4));}catch(e){}
18 | try{ console.log(puzzle.getURL(5));}catch(e){}
19 | try{ console.log(puzzle.getFileData(1,{history:true}));}catch(e){}
20 | try{ console.log(puzzle.getFileData(2));}catch(e){}
21 | try{ console.log(puzzle.getFileData(3));}catch(e){}
22 |
--------------------------------------------------------------------------------
/sample/node2.js:
--------------------------------------------------------------------------------
1 |
2 | var pzpr = require('../index.js');
3 |
4 | var puzzle = new pzpr.Puzzle().open('mashu/3/3');
5 |
6 | console.log(puzzle.toDataURL(19));
7 |
--------------------------------------------------------------------------------
/sample/node3.js:
--------------------------------------------------------------------------------
1 | var pzpr = require('../dist/js/pzpr.js');
2 |
3 | var puzzle = new pzpr.Puzzle({height:200,width:200,config:{cursor:false}});
4 | puzzle.open('nurikabe/5/5/g5k2o1k3g');
5 | puzzle.board.cell[0].qans = 1;
6 | console.log(puzzle.toDataURL());
7 | console.log(puzzle.toBuffer(16));
8 | // console.log(puzzle.canvas.innerHTML);
9 | // console.log(puzzle.getURL());
10 | // console.log(puzzle.getFileData());
11 |
--------------------------------------------------------------------------------
/sample/node4.js:
--------------------------------------------------------------------------------
1 | var pzpr = require('../dist/js/pzpr.js');
2 |
3 | new pzpr.Puzzle().open('nurikabe/5/5/g5k2o1k3g', function(puzzle){
4 | puzzle.board.cell[0].qans = 1;
5 | console.log(puzzle.toDataURL());
6 | // console.log(puzzle.canvas.innerHTML);
7 | // console.log(puzzle.getURL());
8 | // console.log(puzzle.getFileData());
9 | });
10 |
--------------------------------------------------------------------------------
/src-ui/changes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
19 |
20 | pzprjs changes
21 |
31 |
32 |
33 |
34 |
35 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/src-ui/img/akichi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/akichi.png
--------------------------------------------------------------------------------
/src-ui/img/alter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/alter.png
--------------------------------------------------------------------------------
/src-ui/img/angleloop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/angleloop.png
--------------------------------------------------------------------------------
/src-ui/img/aquapelago.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/aquapelago.png
--------------------------------------------------------------------------------
/src-ui/img/aquarium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/aquarium.png
--------------------------------------------------------------------------------
/src-ui/img/araf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/araf.png
--------------------------------------------------------------------------------
/src-ui/img/archipelago.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/archipelago.png
--------------------------------------------------------------------------------
/src-ui/img/balance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/balance.png
--------------------------------------------------------------------------------
/src-ui/img/balloon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/balloon.png
--------------------------------------------------------------------------------
/src-ui/img/batten.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/batten.png
--------------------------------------------------------------------------------
/src-ui/img/battleship.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/battleship.png
--------------------------------------------------------------------------------
/src-ui/img/bdwalk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/bdwalk.png
--------------------------------------------------------------------------------
/src-ui/img/bosnianroad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/bosnianroad.png
--------------------------------------------------------------------------------
/src-ui/img/brownies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/brownies.png
--------------------------------------------------------------------------------
/src-ui/img/castle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/castle.png
--------------------------------------------------------------------------------
/src-ui/img/cbanana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/cbanana.png
--------------------------------------------------------------------------------
/src-ui/img/chainedb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/chainedb.png
--------------------------------------------------------------------------------
/src-ui/img/circlesquare.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/circlesquare.png
--------------------------------------------------------------------------------
/src-ui/img/cocktail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/cocktail.png
--------------------------------------------------------------------------------
/src-ui/img/coffeemilk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/coffeemilk.png
--------------------------------------------------------------------------------
/src-ui/img/compass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/compass.png
--------------------------------------------------------------------------------
/src-ui/img/coral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/coral.png
--------------------------------------------------------------------------------
/src-ui/img/cts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/cts.png
--------------------------------------------------------------------------------
/src-ui/img/curvedata.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/curvedata.png
--------------------------------------------------------------------------------
/src-ui/img/curving.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/curving.png
--------------------------------------------------------------------------------
/src-ui/img/dbchoco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/dbchoco.png
--------------------------------------------------------------------------------
/src-ui/img/detour.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/detour.png
--------------------------------------------------------------------------------
/src-ui/img/dominion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/dominion.png
--------------------------------------------------------------------------------
/src-ui/img/doppelblock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/doppelblock.png
--------------------------------------------------------------------------------
/src-ui/img/dotchi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/dotchi.png
--------------------------------------------------------------------------------
/src-ui/img/dotchi2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/dotchi2.png
--------------------------------------------------------------------------------
/src-ui/img/doubleback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/doubleback.png
--------------------------------------------------------------------------------
/src-ui/img/easyasabc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/easyasabc.png
--------------------------------------------------------------------------------
/src-ui/img/evolmino.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/evolmino.png
--------------------------------------------------------------------------------
/src-ui/img/fakearrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/fakearrow.png
--------------------------------------------------------------------------------
/src-ui/img/firewalk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/firewalk.png
--------------------------------------------------------------------------------
/src-ui/img/forestwalk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/forestwalk.png
--------------------------------------------------------------------------------
/src-ui/img/geradeweg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/geradeweg.png
--------------------------------------------------------------------------------
/src-ui/img/heteromino.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/heteromino.png
--------------------------------------------------------------------------------
/src-ui/img/heyapin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/heyapin.png
--------------------------------------------------------------------------------
/src-ui/img/icewalk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/icewalk.png
--------------------------------------------------------------------------------
/src-ui/img/invlitso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/invlitso.png
--------------------------------------------------------------------------------
/src-ui/img/island.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/island.png
--------------------------------------------------------------------------------
/src-ui/img/kaidan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/kaidan.png
--------------------------------------------------------------------------------
/src-ui/img/kaisu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/kaisu.png
--------------------------------------------------------------------------------
/src-ui/img/kissing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/kissing.png
--------------------------------------------------------------------------------
/src-ui/img/kropki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/kropki.png
--------------------------------------------------------------------------------
/src-ui/img/kuroclone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/kuroclone.png
--------------------------------------------------------------------------------
/src-ui/img/kuromenbun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/kuromenbun.png
--------------------------------------------------------------------------------
/src-ui/img/ladders.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/ladders.png
--------------------------------------------------------------------------------
/src-ui/img/lixloop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/lixloop.png
--------------------------------------------------------------------------------
/src-ui/img/lollipops.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/lollipops.png
--------------------------------------------------------------------------------
/src-ui/img/magnets.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/magnets.png
--------------------------------------------------------------------------------
/src-ui/img/mannequin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/mannequin.png
--------------------------------------------------------------------------------
/src-ui/img/martini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/martini.png
--------------------------------------------------------------------------------
/src-ui/img/maxi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/maxi.png
--------------------------------------------------------------------------------
/src-ui/img/midloop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/midloop.png
--------------------------------------------------------------------------------
/src-ui/img/mintonette.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/mintonette.png
--------------------------------------------------------------------------------
/src-ui/img/mirrorbk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/mirrorbk.png
--------------------------------------------------------------------------------
/src-ui/img/moonsun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/moonsun.png
--------------------------------------------------------------------------------
/src-ui/img/mrtile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/mrtile.png
--------------------------------------------------------------------------------
/src-ui/img/mukkonn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/mukkonn.png
--------------------------------------------------------------------------------
/src-ui/img/nanameguri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/nanameguri.png
--------------------------------------------------------------------------------
/src-ui/img/nibunnogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/nibunnogo.png
--------------------------------------------------------------------------------
/src-ui/img/nondango.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/nondango.png
--------------------------------------------------------------------------------
/src-ui/img/nonogram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/nonogram.png
--------------------------------------------------------------------------------
/src-ui/img/norinuri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/norinuri.png
--------------------------------------------------------------------------------
/src-ui/img/nothing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/nothing.png
--------------------------------------------------------------------------------
/src-ui/img/nurimisaki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/nurimisaki.png
--------------------------------------------------------------------------------
/src-ui/img/nuritwin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/nuritwin.png
--------------------------------------------------------------------------------
/src-ui/img/nuriuzu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/nuriuzu.png
--------------------------------------------------------------------------------
/src-ui/img/oneroom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/oneroom.png
--------------------------------------------------------------------------------
/src-ui/img/orbital.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/orbital.png
--------------------------------------------------------------------------------
/src-ui/img/ovotovata.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/ovotovata.png
--------------------------------------------------------------------------------
/src-ui/img/oyakodori.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/oyakodori.png
--------------------------------------------------------------------------------
/src-ui/img/patchwork.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/patchwork.png
--------------------------------------------------------------------------------
/src-ui/img/pencils.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/pencils.png
--------------------------------------------------------------------------------
/src-ui/img/pentatouch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/pentatouch.png
--------------------------------------------------------------------------------
/src-ui/img/pentopia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/pentopia.png
--------------------------------------------------------------------------------
/src-ui/img/pmemory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/pmemory.png
--------------------------------------------------------------------------------
/src-ui/img/portal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/portal.png
--------------------------------------------------------------------------------
/src-ui/img/ququ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/ququ.png
--------------------------------------------------------------------------------
/src-ui/img/rassi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/rassi.png
--------------------------------------------------------------------------------
/src-ui/img/recoil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/recoil.png
--------------------------------------------------------------------------------
/src-ui/img/regional-poly.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/regional-poly.png
--------------------------------------------------------------------------------
/src-ui/img/remlen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/remlen.png
--------------------------------------------------------------------------------
/src-ui/img/retroships.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/retroships.png
--------------------------------------------------------------------------------
/src-ui/img/retsurin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/retsurin.png
--------------------------------------------------------------------------------
/src-ui/img/roundtrip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/roundtrip.png
--------------------------------------------------------------------------------
/src-ui/img/sananko.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/sananko.png
--------------------------------------------------------------------------------
/src-ui/img/sashikazune.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/sashikazune.png
--------------------------------------------------------------------------------
/src-ui/img/satogaeri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/satogaeri.png
--------------------------------------------------------------------------------
/src-ui/img/scrin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/scrin.png
--------------------------------------------------------------------------------
/src-ui/img/simplegako.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/simplegako.png
--------------------------------------------------------------------------------
/src-ui/img/simpleloop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/simpleloop.png
--------------------------------------------------------------------------------
/src-ui/img/skyscrapers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/skyscrapers.png
--------------------------------------------------------------------------------
/src-ui/img/slashpack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/slashpack.png
--------------------------------------------------------------------------------
/src-ui/img/smullyan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/smullyan.png
--------------------------------------------------------------------------------
/src-ui/img/snake.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/snake.png
--------------------------------------------------------------------------------
/src-ui/img/snakeegg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/snakeegg.png
--------------------------------------------------------------------------------
/src-ui/img/squarejam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/squarejam.png
--------------------------------------------------------------------------------
/src-ui/img/starbattle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/starbattle.png
--------------------------------------------------------------------------------
/src-ui/img/statuepark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/statuepark.png
--------------------------------------------------------------------------------
/src-ui/img/subomino.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/subomino.png
--------------------------------------------------------------------------------
/src-ui/img/swslither.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/swslither.png
--------------------------------------------------------------------------------
/src-ui/img/symmarea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/symmarea.png
--------------------------------------------------------------------------------
/src-ui/img/tachibk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tachibk.png
--------------------------------------------------------------------------------
/src-ui/img/tajmahal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tajmahal.png
--------------------------------------------------------------------------------
/src-ui/img/takoyaki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/takoyaki.png
--------------------------------------------------------------------------------
/src-ui/img/tapaloop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tapaloop.png
--------------------------------------------------------------------------------
/src-ui/img/tents.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tents.png
--------------------------------------------------------------------------------
/src-ui/img/teri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/teri.png
--------------------------------------------------------------------------------
/src-ui/img/tetrochain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tetrochain.png
--------------------------------------------------------------------------------
/src-ui/img/tetrominous.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tetrominous.png
--------------------------------------------------------------------------------
/src-ui/img/tilecity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tilecity.png
--------------------------------------------------------------------------------
/src-ui/img/timebomb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/timebomb.png
--------------------------------------------------------------------------------
/src-ui/img/tjunction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tjunction.png
--------------------------------------------------------------------------------
/src-ui/img/tontonbeya.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tontonbeya.png
--------------------------------------------------------------------------------
/src-ui/img/trainstations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/trainstations.png
--------------------------------------------------------------------------------
/src-ui/img/tslither.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/tslither.png
--------------------------------------------------------------------------------
/src-ui/img/turnaround.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/turnaround.png
--------------------------------------------------------------------------------
/src-ui/img/voxas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/voxas.png
--------------------------------------------------------------------------------
/src-ui/img/vslither.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/vslither.png
--------------------------------------------------------------------------------
/src-ui/img/wafusuma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/wafusuma.png
--------------------------------------------------------------------------------
/src-ui/img/walllogic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/walllogic.png
--------------------------------------------------------------------------------
/src-ui/img/wataridori.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/wataridori.png
--------------------------------------------------------------------------------
/src-ui/img/waterwalk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/waterwalk.png
--------------------------------------------------------------------------------
/src-ui/img/wittgen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/wittgen.png
--------------------------------------------------------------------------------
/src-ui/img/yinyang.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/yinyang.png
--------------------------------------------------------------------------------
/src-ui/img/zabajaba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robx/pzprjs/66159ca48828d640a5ba74deae80f80f08f51b24/src-ui/img/zabajaba.png
--------------------------------------------------------------------------------
/src-ui/js/common/intro.js:
--------------------------------------------------------------------------------
1 | // intro.js
2 |
3 | (function(){
4 |
--------------------------------------------------------------------------------
/src-ui/js/common/langs.js:
--------------------------------------------------------------------------------
1 | // langs.js
2 |
3 | ui.langs = {
4 | en: <%= JSON.stringify(langs.p_en) %>,
5 | ja: <%= JSON.stringify(langs.p_ja) %>
6 | };
7 |
--------------------------------------------------------------------------------
/src-ui/js/common/outro.js:
--------------------------------------------------------------------------------
1 | // outro.js
2 |
3 | })();
4 |
--------------------------------------------------------------------------------
/src-ui/js/pzpr-ui.js:
--------------------------------------------------------------------------------
1 | /* eslint-env node */
2 | exports.files = [
3 | "common/intro",
4 | "ui/Boot",
5 | "ui/UI",
6 | "common/langs",
7 | "ui/Event",
8 | "ui/Listener",
9 | "ui/MenuConfig",
10 | "ui/UrlConfig",
11 | "ui/Misc",
12 | "ui/MenuArea",
13 | "ui/PopupMenu",
14 | "ui/ToolArea",
15 | "ui/Notify",
16 | "ui/KeyPopup",
17 | "ui/Timer",
18 | "ui/AuxEditor",
19 | "ui/Network",
20 | "common/outro"
21 | ].map(function(mod) {
22 | return "src-ui/js/" + mod + ".js";
23 | });
24 |
--------------------------------------------------------------------------------
/src-ui/js/ui/Network.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | ui.network = {
3 | ws: null,
4 | mode: "",
5 | key: "",
6 | maxSeen: -1,
7 |
8 | configure: function(mode, key) {
9 | this.mode = mode;
10 | this.key = key;
11 | ui.setdisplay("network");
12 | },
13 |
14 | start: function() {
15 | if (!this.mode) {
16 | return;
17 | }
18 |
19 | var loc = window.location;
20 | var wsurl = "ws://";
21 | if (document.location.protocol === "https:") {
22 | wsurl = "wss://";
23 | }
24 | wsurl = wsurl + loc.host + "/game/" + this.key;
25 |
26 | this.ws = new WebSocket(wsurl);
27 | this.ws.onclose = this.onclose;
28 | this.ws.onmessage = this.onmessage;
29 | },
30 |
31 | onCellOp: function(op) {
32 | if (!!this.ws) {
33 | this.ws.send(op);
34 | }
35 | },
36 |
37 | onclose: function(event) {
38 | ui.network.start();
39 | },
40 |
41 | onmessage: function(event) {
42 | var msg = JSON.parse(event.data);
43 | var id = msg.id;
44 | if (id > ui.network.maxSeen) {
45 | ui.network.maxSeen = id;
46 | ui.network.applyOp(msg.operation);
47 | }
48 | },
49 |
50 | applyOp: function(encOp) {
51 | var op = new ui.puzzle.klass.ObjectOperation();
52 | op.decode(encOp.split(","));
53 | op.external = true;
54 |
55 | ui.puzzle.opemgr.disableRecord();
56 | op.redo();
57 | ui.puzzle.opemgr.enableRecord();
58 |
59 | ui.puzzle.opemgr.newOperation();
60 | ui.puzzle.opemgr.add(op);
61 | }
62 | };
63 | })();
64 |
--------------------------------------------------------------------------------
/src-ui/js/ui/UrlConfig.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | ui.urlconfig = {
3 | embed: false,
4 |
5 | init: function(onload_option) {
6 | if (onload_option.embed === "yes") {
7 | this.embed = true;
8 | }
9 | }
10 | };
11 | })();
12 |
--------------------------------------------------------------------------------
/src/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true, // Allow to use browser defined variable (not console, alert etc.)
4 | "node": true // Allow to use node defined variable (require, process etc.)
5 | },
6 | "parserOptions": {
7 | "ecmaVersion": 5
8 | },
9 | "globals": {
10 | "pzpr": "readonly"
11 | },
12 | "extends": "eslint:recommended", // Implement recommended rules
13 | "rules": {
14 | "curly": ["error", "all"], // Error for no curly brancket in loop or conditions
15 | "no-unused-vars": // Error for unused variables, not detect arguments
16 | ["error", {"args": "none"}],
17 | "no-undef": "error", // Error for unused variable (that will become global variable)
18 | "new-cap": "error", // Error for lowercase first letter or constructor call as function
19 | "eqeqeq": ["error", "always"], // Error for ==, != to compare
20 | "no-use-before-define": // Error for using variable before definition
21 | ["error", {"functions":false, "classes":false}],
22 | "comma-dangle": ["error", "never"], // Error for trailing comma
23 | "no-redeclare": "off",
24 | "no-empty": "off", // Allow empty block statements
25 | "no-constant-condition": // Allow constant condition in conditions
26 | ["error", {"checkLoops": false}],
27 | "no-useless-escape": "off", // Allow unnessesary escape charactors
28 | "no-extra-boolean-cast": "off", // Allow to use boolean cast for boolean value
29 | "no-mixed-spaces-and-tabs": "off", // Allow to use spaces and tabs for indent
30 | "dot-notation": "off", // Allow object access via obj["name"]
31 | "no-loop-func": "off" // Allow function definition in loop
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/common/banner_full.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * @license
3 | *
4 | * pzpr.js v<%= git.hash %>
5 | * https://github.com/sabo2/pzprv3
6 | *
7 | * This script includes candle.js, see below
8 | * https://github.com/sabo2/candle
9 | *
10 | * Copyright 2009-<%= grunt.template.today('yyyy') %> <%= pkg.author %>
11 | *
12 | * This script is released under the MIT license. Please see below.
13 | * http://www.opensource.org/licenses/mit-license.php
14 | *
15 | * Date: <%= grunt.template.today('yyyy-mm-dd') %>
16 | */
17 |
--------------------------------------------------------------------------------
/src/common/banner_min.js:
--------------------------------------------------------------------------------
1 | /*! @license pzpr.js v<%= git.hash %> (c) 2009-<%= grunt.template.today('yyyy') %> <%= pkg.author %>, MIT license
2 | * https://github.com/sabo2/pzprv3 */
3 |
--------------------------------------------------------------------------------
/src/common/intro.js:
--------------------------------------------------------------------------------
1 | // intro.js
2 |
3 | (function(){
4 |
--------------------------------------------------------------------------------
/src/common/langs.js:
--------------------------------------------------------------------------------
1 | // langs.js
2 |
3 | pzpr.failcodes = {
4 | en: <%= JSON.stringify(langs.failcode_en) %>,
5 | ja: <%= JSON.stringify(langs.failcode_ja) %>
6 | };
7 |
--------------------------------------------------------------------------------
/src/common/outro.js:
--------------------------------------------------------------------------------
1 | // outro.js
2 |
3 | })();
4 |
--------------------------------------------------------------------------------
/src/lib/candle-intro.js:
--------------------------------------------------------------------------------
1 | // candle-intro.js
2 |
3 | (function(){
4 |
5 |
6 | //---------------------------------------------------------------------------
7 | // node.js環境向けの対策
8 | //---------------------------------------------------------------------------
9 | var document = this.document;
10 |
11 | var module = {exports:{}}, exports = module.exports;
12 |
13 | (function(module,exports){
14 |
--------------------------------------------------------------------------------
/src/lib/candle-outro.js:
--------------------------------------------------------------------------------
1 | // candle-outro.js
2 |
3 | })(module,exports);
4 |
5 | pzpr.Candle = module.exports;
6 |
7 | })();
8 |
9 | //---------------------------------------------------------------------------
10 | // node.js環境向けの対策
11 | //---------------------------------------------------------------------------
12 | document = this.document || pzpr.Candle.document;
13 | var DOMParser = this.DOMParser || pzpr.Candle.DOMParser;
14 | var XMLSerializer = this.XMLSerializer || pzpr.Candle.XMLSerializer;
15 |
--------------------------------------------------------------------------------
/src/pzpr.js:
--------------------------------------------------------------------------------
1 | exports.files = [
2 | "common/intro",
3 | "pzpr/core",
4 | "lib/candle-intro",
5 | "../node_modules/pzpr-canvas/dist/candle",
6 | "lib/candle-outro",
7 | "common/langs",
8 | "pzpr/env",
9 | "pzpr/event",
10 | "pzpr/classmgr",
11 | "pzpr/variety",
12 | "pzpr/parser",
13 | "pzpr/metadata",
14 | "pzpr/util",
15 | "puzzle/Puzzle",
16 | "puzzle/Config",
17 | "puzzle/Address",
18 | "puzzle/Piece",
19 | "puzzle/PieceList",
20 | "puzzle/Board",
21 | "puzzle/BoardExec",
22 | "puzzle/GraphBase",
23 | "puzzle/LineManager",
24 | "puzzle/AreaManager",
25 | "puzzle/Graphic",
26 | "puzzle/MouseInput",
27 | "puzzle/KeyInput",
28 | "puzzle/Encode",
29 | "puzzle/FileData",
30 | "puzzle/Answer",
31 | "puzzle/Operation",
32 | "puzzle/Bank",
33 | "variety-common/Graphic",
34 | "variety-common/KeyInput",
35 | "variety-common/MouseInput",
36 | "variety-common/Answer",
37 | "variety-common/BoardExec",
38 | "variety-common/Encode",
39 | "variety-common/FileData",
40 | "variety-common/Operation",
41 | "variety-common/Piece",
42 | "common/outro"
43 | ].map(function(mod) {
44 | return "src/" + mod + ".js";
45 | });
46 |
--------------------------------------------------------------------------------
/src/pzpr/core.js:
--------------------------------------------------------------------------------
1 | // core.js v3.5.2
2 |
3 | //----------------------------------------------------------------------------
4 | // ★pzprオブジェクト
5 | //---------------------------------------------------------------------------
6 | /* extern */
7 | var pzpr = {
8 | version: "<%= git.hash %>"
9 | };
10 |
11 | if (typeof module === "object" && module.exports) {
12 | module.exports = pzpr;
13 | } else {
14 | this.pzpr = pzpr;
15 | }
16 |
--------------------------------------------------------------------------------
/src/pzpr/metadata.js:
--------------------------------------------------------------------------------
1 | // metadata.js v3.5.2
2 |
3 | //---------------------------------------------------------------------------
4 | // MetaData構造体 作者やコメントなどの情報を保持する
5 | //---------------------------------------------------------------------------
6 | pzpr.MetaData = function() {};
7 | pzpr.MetaData.prototype = {
8 | author: "",
9 | source: "",
10 | hard: "",
11 | comment: "",
12 | items: { author: "", source: "", hard: "", comment: "" },
13 |
14 | update: function(metadata) {
15 | if (!metadata) {
16 | return;
17 | }
18 | for (var i in this.items) {
19 | if (typeof metadata[i] === "string") {
20 | this[i] = metadata[i];
21 | }
22 | }
23 | },
24 | getvaliddata: function() {
25 | var obj = {};
26 | for (var i in this.items) {
27 | if (!!this[i]) {
28 | obj[i] = this[i];
29 | }
30 | }
31 | return obj;
32 | },
33 | reset: function() {
34 | for (var i in this.items) {
35 | this[i] = "";
36 | }
37 | },
38 | empty: function() {
39 | for (var i in this.items) {
40 | if (!!this[i]) {
41 | return false;
42 | }
43 | }
44 | return true;
45 | }
46 | };
47 |
--------------------------------------------------------------------------------
/src/variety-common/Operation.js:
--------------------------------------------------------------------------------
1 | // Operation.js
2 |
3 | pzpr.classmgr.makeCommon({
4 | //---------------------------------------------------------
5 | "StartGoalOperation:Operation": {
6 | setData: function(prop, x1, y1, x2, y2) {
7 | this.property = prop;
8 | this.bx1 = x1;
9 | this.by1 = y1;
10 | this.bx2 = x2;
11 | this.by2 = y2;
12 | },
13 | decode: function(strs) {
14 | if (strs[0] !== "PS" && strs[0] !== "PG") {
15 | return false;
16 | }
17 | this.property = strs[0] === "PS" ? "start" : "goal";
18 | this.bx1 = +strs[1];
19 | this.by1 = +strs[2];
20 | this.bx2 = +strs[3];
21 | this.by2 = +strs[4];
22 | return true;
23 | },
24 | toString: function() {
25 | return [
26 | this.property === "start" ? "PS" : "PG",
27 | this.bx1,
28 | this.by1,
29 | this.bx2,
30 | this.by2
31 | ].join(",");
32 | },
33 |
34 | isModify: function(lastope) {
35 | // 1回の入力でstartpos, goalposが連続して更新されているなら前回の更新のみ
36 | if (
37 | this.manager.changeflag &&
38 | lastope.bx2 === this.bx1 &&
39 | lastope.by2 === this.by1 &&
40 | lastope.property === this.property
41 | ) {
42 | lastope.bx2 = this.bx2;
43 | lastope.by2 = this.by2;
44 | return true;
45 | }
46 | return false;
47 | },
48 |
49 | undo: function() {
50 | this.exec(this.bx1, this.by1);
51 | },
52 | redo: function() {
53 | this.exec(this.bx2, this.by2);
54 | },
55 | exec: function(bx, by) {
56 | var bd = this.board,
57 | cell = bd.getc(bx, by);
58 | if (this.property === "start") {
59 | bd.startpos.set(cell);
60 | } else if (this.property === "goal") {
61 | bd.goalpos.set(cell);
62 | }
63 | }
64 | }
65 | });
66 |
--------------------------------------------------------------------------------
/src/variety-common/Piece.js:
--------------------------------------------------------------------------------
1 | // Piece.js
2 |
3 | pzpr.classmgr.makeCommon({
4 | //---------------------------------------------------------
5 | "StartGoalAddress:Address": {
6 | type: "",
7 | partner: null,
8 |
9 | init: function(bx, by) {
10 | this.bx = bx;
11 | this.by = by;
12 | return this;
13 | },
14 |
15 | input: function(cell) {
16 | if (!this.partner || !this.partner.equals(cell)) {
17 | if (!this.equals(cell)) {
18 | this.set(cell);
19 | } else {
20 | this.draw();
21 | }
22 | } else {
23 | this.board.exchangestartgoal();
24 | }
25 | },
26 | set: function(pos, record) {
27 | var pos0 = this.getaddr();
28 | if (record !== false) {
29 | this.addOpe(pos.bx, pos.by);
30 | }
31 |
32 | this.bx = pos.bx;
33 | this.by = pos.by;
34 |
35 | pos0.draw();
36 | this.draw();
37 | },
38 |
39 | addOpe: function(bx, by) {
40 | if (this.bx === bx && this.by === by) {
41 | return;
42 | }
43 | this.puzzle.opemgr.add(
44 | new this.klass.StartGoalOperation(this.type, this.bx, this.by, bx, by)
45 | );
46 | }
47 | },
48 | "StartAddress:StartGoalAddress": {
49 | type: "start"
50 | },
51 | "GoalAddress:StartGoalAddress": {
52 | type: "goal"
53 | }
54 | });
55 |
--------------------------------------------------------------------------------
/test/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "node": true
5 | },
6 | "parserOptions": {
7 | "ecmaVersion": 6
8 | },
9 | "globals": {
10 | "beforeEach": "readonly",
11 | "describe": "readonly",
12 | "it": "readonly"
13 | },
14 | "extends": "eslint:recommended", // Implement recommended rules
15 | "rules": {
16 | "curly": ["error", "all"], // Error for no curly brancket in loop or conditions
17 | "no-unused-vars": // Error for unused variables, not detect arguments
18 | ["error", {"args": "none"}],
19 | "no-undef": "error", // Error for unused variable (that will become global variable)
20 | "new-cap": "error", // Error for lowercase first letter or constructor call as function
21 | "eqeqeq": ["error", "always"], // Error for ==, != to compare
22 | "no-use-before-define": // Error for using variable before definition
23 | ["error", {"functions":false, "classes":false}],
24 | "comma-dangle": ["error", "never"], // Error for trailing comma
25 | "no-redeclare": "error", // Error for redefine variable
26 | //"block-scoped-var": "warn", // Warn var declaration inside block scope
27 | "no-empty": "off", // Allow empty block statements
28 | "no-useless-escape": "off", // Allow unnessesary escape charactors
29 | "no-extra-boolean-cast": "off", // Allow to use boolean cast for boolean value
30 | "no-mixed-spaces-and-tabs": "off", // Allow to use spaces and tabs for indent
31 | "dot-notation": "off", // Allow object access via obj["name"]
32 | "no-loop-func": "off", // Allow function definition in loop
33 | "no-console": "off"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/test/load_testdata.js:
--------------------------------------------------------------------------------
1 | // test/load_testdata.js
2 |
3 | var pzpr = require("../dist/js/pzpr.js");
4 |
5 | // Load test data
6 | var testdata = {};
7 | global.ui = {
8 | debug: {
9 | addDebugData: function(pid, data) {
10 | testdata[pid] = data;
11 | testdata[pid].fullfile = data.failcheck[data.failcheck.length - 1][1];
12 | }
13 | }
14 | };
15 | pzpr.variety.each(function(pid) {
16 | require("./script/" + pid + ".js");
17 | });
18 |
19 | module.exports = testdata;
20 |
--------------------------------------------------------------------------------
/test/puzzle/answer_test.js:
--------------------------------------------------------------------------------
1 | // test/answer_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../dist/js/pzpr.js");
6 |
7 | var testdata = require("../load_testdata.js");
8 |
9 | pzpr.variety.each(function(pid) {
10 | describe(pid + " answer test", function() {
11 | describe("Answer check", function() {
12 | var puzzle = new pzpr.Puzzle();
13 | puzzle.setConfig("forceallcell", true);
14 | testdata[pid].failcheck.forEach(function(testcase) {
15 | var idx = testdata[pid].failcheck.indexOf(testcase);
16 | it("Check[" + idx + "]: " + testcase[0], function() {
17 | puzzle.open(testcase[1]);
18 | var failcode = puzzle.check(true);
19 | var failcodePassive = puzzle.check(false);
20 | assert.equal(failcode[0], testcase[0]);
21 | assert.equal(!!failcode[0], !!failcodePassive[0]);
22 | if (testcase.length > 2 && "undecided" in testcase[2]) {
23 | assert.equal(failcode.undecided, testcase[2].undecided);
24 | }
25 | assert.notEqual(failcode.gettext("en"), pzpr.failcodes.en.invalid);
26 | });
27 | });
28 | });
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/test/puzzle/filedata_test.js:
--------------------------------------------------------------------------------
1 | // test/filedata_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../dist/js/pzpr.js");
6 |
7 | var testdata = require("../load_testdata.js");
8 |
9 | function assert_equal_board(bd1, bd2, iskanpen) {
10 | var pid = bd1.pid;
11 | var ignore_qsub =
12 | iskanpen &&
13 | (pid === "fillomino" ||
14 | pid === "hashikake" ||
15 | pid === "heyabon" ||
16 | pid === "kurodoko" ||
17 | pid === "shikaku" ||
18 | pid === "tentaisho");
19 | bd1.compareData(bd2, function(group, c, a) {
20 | if (ignore_qsub && (a === "qsub" || a === "qcmp")) {
21 | return;
22 | }
23 | assert.equal(
24 | bd2[group][c][a],
25 | bd1[group][c][a],
26 | group + "[" + c + "]." + a
27 | );
28 | });
29 | }
30 |
31 | pzpr.variety.each(function(pid) {
32 | describe(pid + " filedata test", function() {
33 | describe("File I/O", function() {
34 | var puzzle = new pzpr.Puzzle().open(testdata[pid].fullfile);
35 | it("pzpr file", function() {
36 | var bd = puzzle.board,
37 | bd2 = bd.freezecopy();
38 | var outputstr = puzzle.getFileData(pzpr.parser.FILE_PZPR);
39 |
40 | puzzle.open(outputstr, function() {
41 | assert_equal_board(bd, bd2, false);
42 | });
43 | });
44 | if (!pzpr.variety(pid).exists.pencilbox) {
45 | return;
46 | }
47 | it("Kanpen file", function() {
48 | var bd = puzzle.board,
49 | bd2 = bd.freezecopy();
50 | var outputstr = puzzle.getFileData(pzpr.parser.FILE_PBOX);
51 |
52 | puzzle.open(outputstr, function() {
53 | assert_equal_board(bd, bd2, true);
54 | });
55 | });
56 | it("Kanpen XML file", function() {
57 | var bd = puzzle.board,
58 | bd2 = bd.freezecopy();
59 | var outputstr = puzzle.getFileData(pzpr.parser.FILE_PBOX_XML);
60 |
61 | puzzle.open(outputstr, function() {
62 | assert_equal_board(bd, bd2, true);
63 | });
64 | });
65 | });
66 | });
67 | });
68 |
--------------------------------------------------------------------------------
/test/puzzle/render_test.js:
--------------------------------------------------------------------------------
1 | var pzpr = require("../../dist/js/pzpr.js");
2 |
3 | var testdata = require("../load_testdata.js");
4 |
5 | pzpr.variety.each(function(pid) {
6 | describe(pid + " render test", function() {
7 | it("render svg", function() {
8 | var checks = testdata[pid].failcheck;
9 |
10 | checks.forEach(function(check) {
11 | var puzzle = new pzpr.Puzzle();
12 | puzzle.open(check[1], () => {
13 | puzzle.check(true);
14 | puzzle.toBuffer("svg", 0, 30);
15 | });
16 | });
17 | });
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/test/script/alter.js:
--------------------------------------------------------------------------------
1 | /* alter.js */
2 |
3 | ui.debug.addDebugData("alter", {
4 | url: "4/4/aqgk1gc1a3b1a1a2c",
5 | failcheck: [
6 | [
7 | "bkNumLt3",
8 | "pzprv3/alter/4/4/3/0 0 1 1 /2 0 0 1 /2 0 0 1 /2 2 1 1 /. . . 1 /. 3 . . /1 . 1 . /2 . . . /. . . . /. . . . /. 2 . . /. . . . /"
9 | ],
10 | [
11 | "bkDupNum",
12 | "pzprv3/alter/4/4/3/0 0 1 1 /2 0 0 1 /2 0 0 1 /2 2 1 1 /. . . 1 /. 3 . . /1 . 1 . /2 . . . /. . . . /2 . . . /. . . . /. . . . /"
13 | ],
14 | [
15 | "bkNumGt3",
16 | "pzprv3/alter/4/4/3/0 0 1 1 /2 0 0 1 /2 0 0 1 /2 2 1 1 /. . . 1 /. 3 . . /1 . 1 . /2 . . . /. . 3 . /. . . . /. 2 . 2 /. . 3 . /"
17 | ],
18 | [
19 | "nmTripRow",
20 | "pzprv3/alter/4/4/3/0 0 1 1 /2 0 0 1 /2 0 0 1 /2 2 1 1 /. . . 1 /. 3 . . /1 . 1 . /2 . . . /. . . . /. . . . /. 2 . 3 /. . . . /"
21 | ],
22 | [
23 | "nmMissRow",
24 | "pzprv3/alter/4/4/3/0 0 1 1 /2 0 0 1 /2 0 0 1 /2 2 1 1 /. . . 1 /. 3 . . /1 . 1 . /2 . . . /. . 3 . /. . . . /. 2 . 2 /. 3 . . /"
25 | ],
26 | [
27 | "nmDupRow",
28 | "pzprv3/alter/4/4/3/0 0 1 1 /2 0 0 1 /2 0 0 1 /2 2 1 1 /. . . 1 /. 3 . . /1 . 1 . /2 . . . /2 . . . /. . . 2 /. . . . /. . . . /"
29 | ],
30 | [
31 | null,
32 | "pzprv3/alter/4/4/3/0 0 1 1 /2 0 0 1 /2 0 0 1 /2 2 1 1 /. . . 1 /. 3 . . /1 . 1 . /2 . . . /. . 3 . /. . . 2 /. 2 . . /. 3 . . /"
33 | ]
34 | ],
35 | inputs: []
36 | });
37 |
--------------------------------------------------------------------------------
/test/script/archipelago.js:
--------------------------------------------------------------------------------
1 | /* archipelago.js */
2 |
3 | ui.debug.addDebugData("archipelago", {
4 | url: "6/6/2o.g3h.n1p1",
5 | failcheck: [
6 | [
7 | "bkSizeNe",
8 | "pzprv3/archipelago/6/6/2 . # # . . /. # . . - . /3 # . - # # /. . . . . . /1 . . . . . /. . . . . 1 /"
9 | ],
10 | [
11 | "bsNoSequence",
12 | "pzprv3/archipelago/6/6/2 # . . # . /. . # # - . /3 # . - . . /. # . . . . /1 . . # # . /. . . . . 1 /"
13 | ],
14 | [
15 | "bsSameNum",
16 | "pzprv3/archipelago/6/6/2 # . . . . /. . # # - . /3 # . - . . /. # . . . . /1 . . . . . /. # # # . 1 /"
17 | ],
18 | [
19 | "bkNoChain",
20 | "pzprv3/archipelago/6/6/2 # . . . . /. . # # - . /3 # . - . . /. # . . . . /1 . . . . . /. . . . . 1 /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/archipelago/6/6/2 # + + + + /+ + # # - + /3 # + - + + /+ # + + + + /1 + + # # + /+ + + + + 1 /"
25 | ]
26 | ],
27 | inputs: [
28 | {
29 | input: ["newboard,6,2", "cursor,5,3", "mouse,right,5,3"],
30 | result: "pzprv3/archipelago/2/6/. . . . . . /. . 5 . . . /"
31 | }
32 | ]
33 | });
34 |
--------------------------------------------------------------------------------
/test/script/arrowflow.js:
--------------------------------------------------------------------------------
1 | /* arrowflow.js */
2 |
3 | ui.debug.addDebugData("arrowflow", {
4 | url: "4/4/1g0.j5h0i2",
5 | failcheck: [
6 | [
7 | "nmAdjacent",
8 | "pzprv3/arrowflow/4/4/1 . 0 - /. . . . /5 . . 0 /. . . 2 /. 3 . . /2 3 4 1 /. 1 2 . /1 3 4 . /"
9 | ],
10 | [
11 | "arCountLt",
12 | "pzprv3/arrowflow/4/4/1 . 0 - /. . . . /5 . . 0 /. . . 2 /. 3 . . /4 2 4 1 /. 3 1 . /4 1 4 . /"
13 | ],
14 | [
15 | "arCountGt",
16 | "pzprv3/arrowflow/4/4/1 . 0 - /. . . . /5 . . 0 /. . . 2 /. 2 . . /2 3 4 1 /. 1 2 . /1 3 4 . /"
17 | ],
18 | [
19 | "stopHalfway",
20 | "pzprv3/arrowflow/4/4/1 . 0 - /. . . . /5 . . 0 /. . . 2 /. 3 . . /4 2 4 2 /. 3 2 . /4 1 4 . /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/arrowflow/4/4/1 . 0 - /. . . . /5 . . 0 /. . . 2 /. 3 . . /4 2 4 1 /. 3 2 . /4 1 4 . /"
25 | ]
26 | ],
27 | inputs: [
28 | {
29 | input: ["newboard,3,3", "editmode", "cursor,3,1", "key,8"],
30 | result: "pzprv3/arrowflow/3/3/. 8 . /. . . /. . . /. . . /. . . /. . . /"
31 | }
32 | ]
33 | });
34 |
--------------------------------------------------------------------------------
/test/script/box.js:
--------------------------------------------------------------------------------
1 | /* box.js */
2 |
3 | ui.debug.addDebugData("box", {
4 | url: "5/5/7a9979672f",
5 | failcheck: [
6 | ["brNoShade", "pzprv3/box/5/5"],
7 | [
8 | "nmSumRowShadeNe",
9 | "pzprv3/box/5/5/0 7 10 9 9 7 /9 . # . . . /6 . + . . . /7 . + . . . /2 + # + + + /15 # # # # # /"
10 | ],
11 | [
12 | null,
13 | "pzprv3/box/5/5/0 7 10 9 9 7 /9 + # # # + /6 # + + + # /7 + + # # + /2 + # + + + /15 # # # # # /"
14 | ]
15 | ],
16 | inputs: [
17 | /* 回答入力はnurikabeと同じなので省略 */
18 | { input: ["editmode", "newboard,5,5"] },
19 | {
20 | input: [
21 | "cursor,1,-1",
22 | "key,-",
23 | "key,right",
24 | "key,0",
25 | "key,right",
26 | "key,1",
27 | "key,right",
28 | "key,2",
29 | "key,right",
30 | "key,1",
31 | "key,0"
32 | ],
33 | result:
34 | "pzprv3/box/5/5/. 0 0 1 2 10 /0 . . . . . /0 . . . . . /0 . . . . . /0 . . . . . /0 . . . . . /"
35 | },
36 | {
37 | input: [
38 | "cursor,1,-1",
39 | "key,-",
40 | "key,right",
41 | "key,-",
42 | "key,right",
43 | "key,-",
44 | "key,-"
45 | ],
46 | result:
47 | "pzprv3/box/5/5/. 0 0 0 2 10 /0 . . . . . /0 . . . . . /0 . . . . . /0 . . . . . /0 . . . . . /"
48 | },
49 | { input: ["newboard,6,6"] },
50 | {
51 | input: [
52 | "cursor,0,0",
53 | "mouse,leftx2, -1,-1",
54 | "mouse,leftx2, 1,-1",
55 | "mouse,leftx3, 3,-1",
56 | "mouse,leftx4, 5,-1",
57 | "mouse,leftx5, 7,-1",
58 | "mouse,leftx6, 9,-1",
59 | "mouse,rightx2, 11,-1"
60 | ],
61 | result:
62 | "pzprv3/box/6/6/. 1 2 3 4 5 21 /0 . . . . . . /0 . . . . . . /0 . . . . . . /0 . . . . . . /0 . . . . . . /0 . . . . . . /"
63 | }
64 | ]
65 | });
66 |
--------------------------------------------------------------------------------
/test/script/canal.js:
--------------------------------------------------------------------------------
1 | /* canal.js */
2 |
3 | ui.debug.addDebugData("canal", {
4 | url: "6/6/3i3h2z4h5i2",
5 | failcheck: [
6 | [
7 | "cs2x2",
8 | "pzprv3/canal/6/6/3 . . . 3 . /. 2 . . . . /. . . . . . /. . . . . . /. . . . 4 . /. 5 . . . 2 /. # # # . . /. . # . . . /# . # . # . /# # # # # # /# # . # . # /# . # # . . /"
9 | ],
10 | [
11 | "nmShadeViewNe",
12 | "pzprv3/canal/6/6/3 . . . 3 . /. 2 . . . . /. . . . . . /. . . . . . /. . . . 4 . /. 5 . . . 2 /. # # # . # /. . # . . # /. . # . # # /. # # # # . /# # . # . . /# . . # # . /"
13 | ],
14 | [
15 | "csDivide",
16 | "pzprv3/canal/6/6/3 . . . 3 . /. 2 . . . . /. . . . . . /. . . . . . /. . . . 4 . /. 5 . . . 2 /. # # # . . /. . # . . . /. . . . # . /. # . . # # /# # . # . # /# . # # . . /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/canal/6/6/3 . . . 3 . /. 2 . . . . /. . . . . . /. . . . . . /. . . . 4 . /. 5 . . . 2 /. # # # . + /+ . # + + + /+ + # + # + /+ # # # # # /# # + # . # /# . # # + . /"
21 | ]
22 | ],
23 | inputs: []
24 | });
25 |
--------------------------------------------------------------------------------
/test/script/cbanana.js:
--------------------------------------------------------------------------------
1 | /* canal.js */
2 |
3 | ui.debug.addDebugData("cbanana", {
4 | url: "5/5/g13t6h6i1",
5 | failcheck: [
6 | [
7 | "csNotRect",
8 | "pzprv3/cbanana/5/5/. 1 3 . . /. . . . . /. . . . . /. . 6 . . /6 . . . 1 /+ # + + # /+ + # + # /# + + # + /# # # + + /# # + + # /"
9 | ],
10 | [
11 | "cuRect",
12 | "pzprv3/cbanana/5/5/. 1 3 . . /. . . . . /. . . . . /. . 6 . . /6 . . . 1 /+ # + + + /+ + # # # /+ + + + + /# # # + + /# # # + # /"
13 | ],
14 | [
15 | "bkSizeNe",
16 | "pzprv3/cbanana/5/5/. 1 3 . . /. . . . . /. . . . . /. . 6 . . /6 . . . 1 /# # + + # /+ + # + # /+ # + # + /+ # + + + /+ + # + # /"
17 | ],
18 | [
19 | "bkSizeNe",
20 | "pzprv3/cbanana/5/5/. 1 3 . . /. . . . . /. . . . . /. . 6 . . /6 . . . 1 /+ # + + + /+ + # + # /+ + + # + /# # # + + /# # # + # /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/cbanana/5/5/. 1 3 . . /. . . . . /. . . . . /. . 6 . . /6 . . . 1 /+ # + + # /+ + # + # /+ + + # + /# # # + + /# # # + # /"
25 | ]
26 | ],
27 | inputs: []
28 | });
29 |
--------------------------------------------------------------------------------
/test/script/chainedb.js:
--------------------------------------------------------------------------------
1 | /* chainedb.js */
2 |
3 | ui.debug.addDebugData("chainedb", {
4 | url: "6/6/k.g1s3j3g1m",
5 | failcheck: [
6 | [
7 | "bkNumGe2",
8 | "pzprv3/chainedb/6/6/. . . . . - /. 1 . . . . /. . . . . . /. . # 3 . . /. . 3 . 1 . /. . . . . . /"
9 | ],
10 | [
11 | "bkNoNum",
12 | "pzprv3/chainedb/6/6/. . # # . - /. 1 . . . # /. . . # # . /. . . 3 . . /# # 3 . 1 . /. . . . . . /"
13 | ],
14 | [
15 | "bkSizeNe",
16 | "pzprv3/chainedb/6/6/. . # # # - /. 1 . . . . /. . . # # . /. # . 3 . . /. # 3 . 1 . /. # . . . . /"
17 | ],
18 | [
19 | "bkNoChain",
20 | "pzprv3/chainedb/6/6/. . . . . - /. 1 . . . # /. . . # # . /. . . 3 . . /# # 3 . 1 . /. . . . . . /"
21 | ],
22 | [
23 | "bsSameShape",
24 | "pzprv3/chainedb/6/6/. . . . . - /. 1 . . . . /. . . # # . /. # . 3 . . /. # 3 . 1 . /. . . . . . /"
25 | ],
26 | [
27 | "bsSameShape",
28 | "pzprv3/chainedb/6/6/. . # # # - /. 1 . . . # /. . . # # . /. . . 3 . . /# # 3 . 1 . /. . . . . . /"
29 | ],
30 | [
31 | null,
32 | "pzprv3/chainedb/6/6/+ + # # # - /+ 1 + + + + /+ + + # # + /+ + + 3 + + /# # 3 + 1 + /+ + + + + + /"
33 | ]
34 | ],
35 | inputs: []
36 | });
37 |
--------------------------------------------------------------------------------
/test/script/chocona.js:
--------------------------------------------------------------------------------
1 | /* chocona.js */
2 |
3 | ui.debug.addDebugData("chocona", {
4 | url: "6/6/8guumlfvo1eq33122g21g32",
5 | failcheck: [
6 | ["brNoShade", "pzprv3/chocona/6/6"],
7 | [
8 | "csNotRect",
9 | "pzprv3/chocona/6/6/11/0 0 1 1 1 1 /0 2 2 2 2 2 /3 4 5 6 7 7 /3 4 5 6 7 7 /3 5 5 8 9 9 /3 10 10 8 8 9 /3 . 3 . . . /. 1 . . . . /2 2 . 2 1 . /. . . . . . /. . . . 3 . /. 2 . . . . /# # . . . . /# # # # # # /. . . . . . /. . . . . . /. . . . . . /. . . . . . /"
10 | ],
11 | [
12 | "bkShadeNe",
13 | "pzprv3/chocona/6/6/11/0 0 1 1 1 1 /0 2 2 2 2 2 /3 4 5 6 7 7 /3 4 5 6 7 7 /3 5 5 8 9 9 /3 10 10 8 8 9 /3 . 3 . . . /. 1 . . . . /2 2 . 2 1 . /. . . . . . /. . . . 3 . /. 2 . . . . /# # . # # # /# # . # # # /. . . . . . /. . . . . . /. . . . . . /. . . . . . /"
14 | ],
15 | [
16 | null,
17 | "pzprv3/chocona/6/6/11/0 0 1 1 1 1 /0 2 2 2 2 2 /3 4 5 6 7 7 /3 4 5 6 7 7 /3 5 5 8 9 9 /3 10 10 8 8 9 /3 . 3 . . . /. 1 . . . . /2 2 . 2 1 . /. . . . . . /. . . . 3 . /. 2 . . . . /# # + # # # /# # + + + + /# # + # + # /# # + # + + /. . + + # # /. # # + # # /"
18 | ]
19 | ],
20 | inputs: [] /* shimaguniと同じなので省略 */
21 | });
22 |
--------------------------------------------------------------------------------
/test/script/circlesquare.js:
--------------------------------------------------------------------------------
1 | /* cirlesquare.js */
2 |
3 | ui.debug.addDebugData("circlesquare", {
4 | url: "5/5/0799i8010",
5 | failcheck: [
6 | [
7 | "circleUnshade",
8 | "pzprv3/circlesquare/5/5/. . . . 2 /1 1 . . 1 /. . 2 . . /. 2 2 . . /. . . 1 . /. . . . . /. . . . . /. . # . . /. # # . . /. . . . . /"
9 | ],
10 | [
11 | "circleShade",
12 | "pzprv3/circlesquare/5/5/. . . . 2 /1 1 . . 1 /. . 2 . . /. 2 2 . . /. . . 1 . /. . . . # /# . . . . /. . # . . /. # # . . /. . . . . /"
13 | ],
14 | [
15 | "cs2x2",
16 | "pzprv3/circlesquare/5/5/. . . . 2 /1 1 . . 1 /. . 2 . . /. 2 2 . . /. . . 1 . /+ + # # # /+ + # . + /. # # . . /. # # . . /. . . + . /"
17 | ],
18 | [
19 | "csDivide",
20 | "pzprv3/circlesquare/5/5/. . . . 2 /1 1 . . 1 /. . 2 . . /. 2 2 . . /. . . 1 . /# # + # # /+ + # # + /+ + # . . /# # # . . /. . . + . /"
21 | ],
22 | [
23 | "cuNotSquare",
24 | "pzprv3/circlesquare/5/5/. . . . 2 /1 1 . . 1 /. . 2 . . /. 2 2 . . /. . . 1 . /# # # # # /+ + # + + /+ + # + + /+ # # # # /# # + + # /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/circlesquare/5/5/. . . . 2 /1 1 . . 1 /. . 2 . . /. 2 2 . . /. . . 1 . /# # # # # /+ + # + + /+ + # + + /# # # # # /# + # + # /"
29 | ]
30 | ],
31 | inputs: []
32 | });
33 |
--------------------------------------------------------------------------------
/test/script/coffeemilk.js:
--------------------------------------------------------------------------------
1 | /* coffeemilk.js */
2 |
3 | ui.debug.addDebugData("coffeemilk", {
4 | url: "4/4/11a2d.a2a21a./",
5 | failcheck: [
6 | [
7 | "brNoLine",
8 | "pzprv3/coffeemilk/4/4/1 1 . 2 /. . . . /- . 2 . /2 1 . - /0 0 0 /0 0 0 /0 0 0 /0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /",
9 | { skiprules: true }
10 | ],
11 | [
12 | "nmNoLine",
13 | "pzprv3/coffeemilk/4/4/1 1 . 2 /. . . . /- . 2 . /2 1 . - /0 0 0 /0 0 0 /0 0 0 /0 1 1 /0 0 0 1 /0 0 0 1 /0 0 0 1 /"
14 | ],
15 | [
16 | "lnCross",
17 | "pzprv3/coffeemilk/4/4/1 1 . 2 /. . . . /- . 2 . /2 1 . - /0 0 0 /0 0 0 /1 1 0 /0 0 0 /0 1 0 0 /0 1 0 0 /0 1 0 0 /"
18 | ],
19 | [
20 | "lcInvalid",
21 | "pzprv3/coffeemilk/4/4/1 1 . 2 /. . . . /- . 2 . /2 1 . - /1 1 1 /0 0 0 /0 0 0 /0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /"
22 | ],
23 | [
24 | "lcGrayGt",
25 | "pzprv3/coffeemilk/4/4/1 1 . 2 /. . . . /- . 2 . /2 1 . - /1 0 0 /0 0 0 /0 0 0 /0 1 1 /1 1 0 0 /1 1 0 0 /0 1 0 0 /"
26 | ],
27 | [
28 | "lcBalance",
29 | "pzprv3/coffeemilk/4/4/1 1 . 2 /. . . . /- . 2 . /2 1 . - /0 0 0 /0 0 0 /1 1 0 /0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /"
30 | ],
31 | [
32 | null,
33 | "pzprv3/coffeemilk/4/4/1 1 . 2 /. . . . /- . 2 . /2 1 . - /1 0 0 /0 0 0 /1 1 0 /0 1 1 /1 0 0 1 /1 0 0 1 /1 0 0 1 /"
34 | ]
35 | ],
36 | inputs: []
37 | });
38 |
--------------------------------------------------------------------------------
/test/script/cojun.js:
--------------------------------------------------------------------------------
1 | /* cojun.js */
2 |
3 | ui.debug.addDebugData("cojun", {
4 | url: "4/4/pd0hsoh3p3h",
5 | failcheck: [
6 | [
7 | "bkDupNum",
8 | "pzprv3/cojun/4/4/1 1 0 /0 1 0 /1 1 0 /1 0 0 /1 0 0 0 /1 1 1 1 /0 0 1 1 /. . 3 . /. . . . /. . . . /. 3 . . /. . . . /. . . 3 /. . . . /. . . . /"
9 | ],
10 | [
11 | "nmAdjacent",
12 | "pzprv3/cojun/4/4/1 1 0 /0 1 0 /1 1 0 /1 0 0 /1 0 0 0 /1 1 1 1 /0 0 1 1 /. . 3 . /. . . . /. . . . /. 3 . . /. 3 . . /. . . . /. . . . /. . . . /"
13 | ],
14 | [
15 | "bkSmallOnBig",
16 | "pzprv3/cojun/4/4/1 1 0 /0 1 0 /1 1 0 /1 0 0 /1 0 0 0 /1 1 1 1 /0 0 1 1 /. . 3 . /. . . . /. . . . /. 3 . . /1 2 . . /3 1 4 . /. . . . /. . . . /"
17 | ],
18 | [
19 | "ceNoNum",
20 | "pzprv3/cojun/4/4/1 1 0 /0 1 0 /1 1 0 /1 0 0 /1 0 0 0 /1 1 1 1 /0 0 1 1 /. . 3 . /. . . . /. . . . /. 3 . . /1 2 . 4 /3 1 2 1 /. . 1 2 /. . 2 1 /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/cojun/4/4/1 1 0 /0 1 0 /1 1 0 /1 0 0 /1 0 0 0 /1 1 1 1 /0 0 1 1 /. . 3 . /. . . . /. . . . /. 3 . . /1 2 . 4 /3 1 2 1 /2 4 1 2 /1 . 2 1 /"
25 | ]
26 | ],
27 | inputs: [
28 | /* 問題入力, 回答入力はrippleと同じなので省略 */
29 | ]
30 | });
31 |
--------------------------------------------------------------------------------
/test/script/coral.js:
--------------------------------------------------------------------------------
1 | /* coral.js */
2 |
3 | ui.debug.addDebugData("coral", {
4 | url: "5/5/11g11g5k3h3h31j3h2h",
5 | failcheck: [
6 | [
7 | "exNoMatch",
8 | "pzprv3/coral/5/5/. . . . . . . . /. . . 1 1 . . . /. . . 1 1 5 . 3 /. . 3 . . # # # /. 1 3 . # # . # /. . . . . # . # /. . 3 # # # . . /. . 2 . . # # . /"
9 | ],
10 | [
11 | "cs2x2",
12 | "pzprv3/coral/5/5/. . . . . . . . /. . . 1 1 . . . /. . . 1 1 5 . 3 /. . 3 # # # . . /. 1 3 # . # # # /. . . . . # . . /. . 3 . # # # . /. . 2 . # # . . /"
13 | ],
14 | [
15 | "csDivide",
16 | "pzprv3/coral/5/5/. . . . . . . . /. . . 1 1 2 1 . /. . . 1 1 2 1 3 /. . 3 . . # # # /. 1 3 # # # . # /. . 1 . . . . # /. . 3 # # # . . /. . 2 . . # # . /"
17 | ],
18 | [
19 | "cuConnOut",
20 | "pzprv3/coral/5/5/. . . . . . . . /. . . 1 1 . . . /. . . 1 1 5 . 3 /. . 3 # # # . . /. 1 3 # . # # # /. . . # . # . . /. . 3 # # # . . /. . 2 . . # # . /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/coral/5/5/. . . . . . . . /. . . 1 1 . . . /. . . 1 1 5 . 3 /. . 3 . . # # # /. 1 3 # # # . # /. . . . . # . # /. . 3 # # # . . /. . 2 . . # # . /"
25 | ]
26 | ],
27 | inputs: []
28 | });
29 |
--------------------------------------------------------------------------------
/test/script/cts.js:
--------------------------------------------------------------------------------
1 | /* cts.js */
2 |
3 | ui.debug.addDebugData("cts", {
4 | url: "5/5/03g21g.2g1h4h3h01g12g.h1h",
5 | failcheck: [
6 | [
7 | "cs2x2",
8 | "pzprv3/cts/5/5/. . . . . . . . /. . . 3 1 2 . . /. . . 0 2 -2 1 4 /. . 3 # # # . . /. 1 0 # . # # # /. 2 1 # # . . # /. . -2 # # # . # /. . 1 . . . . . /"
9 | ],
10 | [
11 | "csDivide",
12 | "pzprv3/cts/5/5/. . . . . . . . /. . . 3 1 2 . . /. . . 0 2 -2 0 0 /. . 3 # # # . . /. 1 0 # . # # # /. 2 1 # # . . # /. . -2 . # # # # /. . 1 # . . . . /"
13 | ],
14 | [
15 | "exNoMatch",
16 | "pzprv3/cts/5/5/. . . . . . . . /. . . 3 1 2 . . /. . . 0 2 -2 1 4 /. . 3 # # # . . /. 1 0 # . # # # /. 2 1 # # . . # /. . -2 . # # . # /. . 1 . . . . # /"
17 | ],
18 | [
19 | "exNoMatch",
20 | "pzprv3/cts/5/5/. . . . . . . . /. . . 3 1 2 . . /. . . 0 2 -2 1 4 /. . 3 # # # . . /. 1 0 . . # # # /. 2 1 # # . . # /. . -2 . # # # # /. . 1 . . # . . /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/cts/5/5/. . . . . . . . /. . . 3 1 2 . . /. . . 0 2 -2 1 4 /. . 3 # # # . . /. 1 0 # . # . # /. 2 1 # # . . # /. . -2 . # # # # /. . 1 . . . . # /"
25 | ]
26 | ],
27 | inputs: [
28 | {
29 | label: "Keyboard inputs",
30 | input: [
31 | "editmode",
32 | "newboard,3,3",
33 | "cursor,1,-1",
34 | "key,1,up,shift+8,right,-,down,2,left,3"
35 | ],
36 | result:
37 | "pzprv3/cts/3/3/. . 0 -2 . /. . 3 2 . /. . . . . /. . . . . /. . . . . /"
38 | },
39 | {
40 | label: "Completion inputs",
41 | input: [
42 | "newboard,3,1",
43 | "editmode,number",
44 | "mouse,rightx2,-1,1",
45 | "playmode",
46 | "mouse,left,-1,1",
47 | "mouse,left,3,-1"
48 | ],
49 | result: "pzprv3/cts/1/3/. . . . . /. c3 . . . /"
50 | }
51 | ]
52 | });
53 |
--------------------------------------------------------------------------------
/test/script/curvedata-aux.js:
--------------------------------------------------------------------------------
1 | /* curvedata-aux.js */
2 |
3 | ui.debug.addDebugData("curvedata-aux", {
4 | url: "4/4/3/2/921",
5 | failcheck: [[null, "pzprv3/curvedata-aux/4/4/3/2/921"]],
6 | inputs: [
7 | {
8 | input: ["newboard,4,4", "playmode"],
9 | result: "pzprv3/curvedata-aux/4/4/0/0/"
10 | },
11 | {
12 | input: ["mouse,left, 1,1, 1,3, 1,5"],
13 | result: "pzprv3/curvedata-aux/4/4/1/3/a/"
14 | },
15 | {
16 | input: ["mouse,left, 7,5, 5,5, 5,7"],
17 | result: "pzprv3/curvedata-aux/4/4/4/4/20200300/"
18 | },
19 | {
20 | input: [
21 | "playmode,slide",
22 | "mouse,left, 1,3, 3,3"
23 | ] /* Slide the left-most shape 1 to the right */,
24 | result: "pzprv3/curvedata-aux/4/4/3/4/280c00/"
25 | },
26 | {
27 | input: [
28 | "playmode,slide",
29 | "mouse,left, 3,3, 5,3"
30 | ] /* Attempt to slide into an occupied space */,
31 | result: "pzprv3/curvedata-aux/4/4/3/4/280c00/"
32 | }
33 | ]
34 | });
35 |
--------------------------------------------------------------------------------
/test/script/dominion.js:
--------------------------------------------------------------------------------
1 | /* dominion.js */
2 |
3 | ui.debug.addDebugData("dominion", {
4 | url: "5/5/h2l2g3k1h1i2",
5 | failcheck: [
6 | [
7 | "csGt2",
8 | "pzprv3/dominion/5/5/. . 2 . . /. . . . 2 /. 3 . . . /. . 1 . . /1 . . . 2 /. . . . . /. . . . . /. . . # . /. . . # . /. . . # . /"
9 | ],
10 | [
11 | "csLt2",
12 | "pzprv3/dominion/5/5/. . 2 . . /. . . . 2 /. 3 . . . /. . 1 . . /1 . . . 2 /# . . . . /. # . . . /. . # . . /# # . # . /. . . # . /"
13 | ],
14 | [
15 | "bkPlNum",
16 | "pzprv3/dominion/5/5/. . 2 . . /. . . . 2 /. 3 . . . /. . 1 . . /1 . . . 2 /# # . . . /. . # . . /. . # . . /. . . # . /. . . # . /"
17 | ],
18 | [
19 | "bkSepNum",
20 | "pzprv3/dominion/5/5/. . 2 . . /. . . . 2 /. 3 . . . /. . 1 . . /1 . . . 2 /# # . # # /. . # . . /. . # . . /# # . # . /. . . # . /"
21 | ],
22 | [
23 | "bkNoNum",
24 | "pzprv3/dominion/5/5/. . 2 . . /. . . . 2 /. 3 . . . /. . 1 . . /1 . . . 2 /. # . . . /. # . . . /# . . . . /# . . . . /. . . . . /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/dominion/5/5/. . 2 . . /. . . . 2 /. 3 . . . /. . 1 . . /1 . . . 2 /# # + + + /+ + # + + /+ + # + + /# # + # + /+ + + # + /"
29 | ]
30 | ],
31 | inputs: []
32 | });
33 |
--------------------------------------------------------------------------------
/test/script/fillmat.js:
--------------------------------------------------------------------------------
1 | /* fillmat.js */
2 |
3 | ui.debug.addDebugData("fillmat", {
4 | url: "5/5/3b3h1h1b4",
5 | failcheck: [
6 | [
7 | "bdCross",
8 | "pzprv3/fillmat/5/5/3 . . 3 . /. . . . . /. . 1 . . /. . . . . /. 1 . . 4 /0 1 0 0 /0 1 0 0 /0 1 0 0 /0 1 0 0 /0 1 0 0 /0 0 0 0 0 /1 1 1 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bsSizeEq",
12 | "pzprv3/fillmat/5/5/3 . . 3 . /. . . . . /. . 1 . . /. . . . . /. 1 . . 4 /0 0 1 1 /0 0 1 1 /0 0 1 1 /0 0 0 0 /0 0 0 0 /1 1 1 0 0 /0 0 0 0 0 /0 0 0 1 0 /0 0 0 0 0 /"
13 | ],
14 | [
15 | "bkLenGt4",
16 | "pzprv3/fillmat/5/5/3 . . 3 . /. . . . . /. . 1 . . /. . . . . /. 1 . . 4 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
17 | ],
18 | [
19 | "bkNumGe2",
20 | "pzprv3/fillmat/5/5/3 . . 3 . /. . . . . /. . 1 . . /. . . . . /. 1 . . 4 /0 0 0 1 /0 0 1 0 /1 0 0 0 /0 1 0 0 /0 0 0 1 /1 1 1 1 1 /1 1 1 1 1 /1 1 1 1 1 /1 1 1 1 1 /"
21 | ],
22 | [
23 | "bkSizeNe",
24 | "pzprv3/fillmat/5/5/3 . . 3 . /. . . . . /. . 1 . . /. . . . . /. 1 . . 4 /0 1 0 0 /0 0 0 1 /0 -1 2 -1 /1 0 -1 -1 /-1 -1 2 0 /1 1 1 1 1 /1 1 1 1 1 /1 1 1 1 1 /1 1 1 1 1 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/fillmat/5/5/3 . . 3 . /. . . . . /. . 1 . . /. . . . . /. 1 . . 4 /1 1 0 0 /1 1 0 1 /1 1 1 1 /1 1 1 1 /1 1 1 1 /0 -1 1 1 1 /0 -1 1 1 -1 /1 -1 1 -1 -1 /0 1 -1 0 -1 /"
29 | ]
30 | ],
31 | inputs: [
32 | /* 問題入力, 回答入力はshikaku等と同じなので省略 */
33 | ]
34 | });
35 |
--------------------------------------------------------------------------------
/test/script/fourcells.js:
--------------------------------------------------------------------------------
1 | /* fourcells.js */
2 |
3 | ui.debug.addDebugData("fourcells", {
4 | url: "6/6/b1d2a3e3d1f2b2a3b2",
5 | failcheck: [
6 | [
7 | "bkSizeLt4",
8 | "pzprv3/fourcells/6/6/. . 1 . . . /. 2 . 3 . . /. . . 3 . . /. . 1 . . . /. . . 2 . . /2 . 3 . . 2 /1 0 0 0 0 /1 0 0 1 1 /0 0 0 1 1 /0 0 0 0 0 /1 0 1 0 0 /0 0 0 0 0 /0 0 0 0 1 0 /1 0 0 0 0 0 /0 0 0 0 1 0 /0 1 1 0 0 0 /0 1 1 0 0 0 /"
9 | ],
10 | [
11 | "nmBorderNe",
12 | "pzprv3/fourcells/6/6/. . 1 . . . /. 2 . 3 . . /. . . 3 . . /. . 1 . . . /. . . 2 . . /2 . 3 . . 2 /1 -1 -1 1 0 /-1 1 1 0 0 /1 1 0 0 0 /0 0 1 0 0 /1 0 0 0 0 /-1 0 1 0 0 /-1 1 -1 1 0 0 /1 -1 1 0 0 0 /-1 1 1 0 0 0 /1 1 1 0 0 0 /-1 1 1 0 0 0 /"
13 | ],
14 | [
15 | "bdDeadEnd",
16 | "pzprv3/fourcells/6/6/. . 1 . . . /. 2 . 3 . . /. . . 3 . . /. . 1 . . . /. . . 2 . . /2 . 3 . . 2 /1 -1 -1 1 0 /-1 1 1 0 0 /1 1 1 0 0 /0 1 0 1 0 /1 1 1 0 0 /-1 0 1 0 0 /-1 1 -1 1 0 0 /1 -1 1 1 1 0 /-1 1 0 1 0 0 /1 0 0 1 0 0 /-1 1 1 0 0 0 /"
17 | ],
18 | [
19 | "bkSizeGt4",
20 | "pzprv3/fourcells/6/6/. . 1 . . . /. 2 . 3 . . /. . . 3 . . /. . 1 . . . /. . . 2 . . /2 . 3 . . 2 /1 -1 -1 1 0 /-1 1 1 0 1 /1 1 1 0 0 /0 1 0 1 0 /1 1 1 0 0 /-1 0 1 0 0 /-1 1 -1 1 0 1 /1 -1 1 1 1 0 /-1 1 0 1 0 0 /1 0 0 1 0 0 /-1 1 1 0 0 0 /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/fourcells/6/6/. . 1 . . . /. 2 . 3 . . /. . . 3 . . /. . 1 . . . /. . . 2 . . /2 . 3 . . 2 /1 -1 -1 1 0 /-1 1 1 0 1 /1 1 1 0 0 /0 1 0 1 1 /1 1 1 -1 1 /-1 0 1 1 0 /-1 1 -1 1 0 1 /1 -1 1 1 1 0 /-1 1 0 1 1 1 /1 0 0 1 0 0 /-1 1 1 -1 1 0 /"
25 | ]
26 | ],
27 | inputs: [
28 | /* 問題入力, 回答入力はfivecellsと同じなので省略 */
29 | ]
30 | });
31 |
--------------------------------------------------------------------------------
/test/script/goishi.js:
--------------------------------------------------------------------------------
1 | /* goishi.js */
2 |
3 | ui.debug.addDebugData("goishi", {
4 | url: "6/7/vsten1tvo",
5 | failcheck: [
6 | ["brNoStone", "pzprv3/goishi/7/6"],
7 | [
8 | "goishiRemains",
9 | "pzprv3/goishi/7/6/. . . . . . /. . 0 0 . . /. 5 . 4 . . /. 0 . 3 . . /. 0 0 2 1 . /. . . 0 . . /. . . . . . /"
10 | ],
11 | [
12 | null,
13 | "pzprv3/goishi/7/6/. . . . . . /. . 9 10 . . /. 5 . 4 . . /. 6 . 3 . . /. 7 8 2 1 . /. . . 11 . . /. . . . . . /"
14 | ]
15 | ],
16 | inputs: [
17 | /* 問題入力テスト */
18 | { input: ["newboard,4,4", "editmode"] },
19 | {
20 | input: ["cursor,3,3", "key,q", "key,right,q,q"],
21 | result: "pzprv3/goishi/4/4/. . . . /. 0 . . /. . . . /. . . . /"
22 | },
23 | {
24 | input: [
25 | "cursor,3,5",
26 | "mouse,left, 3,5",
27 | "mouse,left, 5,5",
28 | "mouse,leftx2, 7,5"
29 | ],
30 | result: "pzprv3/goishi/4/4/. . . . /. 0 . . /. 0 0 . /. . . . /"
31 | },
32 | /* 回答入力テスト */
33 | {
34 | input: ["playmode", "mouse,left, 1,1"],
35 | result: "pzprv3/goishi/4/4/. . . . /. 0 . . /. 0 0 . /. . . . /"
36 | },
37 | {
38 | input: ["mouse,left, 3,3", "mouse,left, 5,5", "mouse,left, 3,5"],
39 | result: "pzprv3/goishi/4/4/. . . . /. 1 . . /. 2 0 . /. . . . /"
40 | }
41 | ]
42 | });
43 |
--------------------------------------------------------------------------------
/test/script/gokigen.js:
--------------------------------------------------------------------------------
1 | /* gokigen.js */
2 |
3 | ui.debug.addDebugData("gokigen", {
4 | url: "4/4/iaegcgcj6a",
5 | failcheck: [
6 | [
7 | "slLoop",
8 | "pzprv3/gokigen/4/4/. . . 0 . /. 4 . . . /2 . . . 2 /. . . . . /. 1 . 0 . /. 2 1 . /2 . . 1 /1 . . 2 /. 1 2 . /"
9 | ],
10 | [
11 | "crConnSlNe",
12 | "pzprv3/gokigen/4/4/. . . 0 . /. 4 . . . /2 . . . 2 /. . . . . /. 1 . 0 . /. 2 1 . /2 . . 1 /1 . . 2 /. . 2 . /"
13 | ],
14 | [
15 | "ceNoSlash",
16 | "pzprv3/gokigen/4/4/. . . 0 . /. 4 . . . /2 . . . 2 /. . . . . /. 1 . 0 . /1 2 1 2 /2 1 . 1 /1 . . 2 /. 2 2 1 /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/gokigen/4/4/. . . 0 . /. 4 . . . /2 . . . 2 /. . . . . /. 1 . 0 . /1 2 1 2 /2 1 1 1 /1 1 2 2 /2 2 2 1 /"
21 | ]
22 | ],
23 | inputs: [
24 | /* 問題入力はcreekでやっているので省略 */
25 | /* 回答入力テスト */
26 | { input: ["newboard,3,2", "playmode", "setconfig,use,1", "ansclear"] },
27 | {
28 | input: [
29 | "mouse,left, 1,1",
30 | "mouse,leftx2, 3,1",
31 | "mouse,leftx3, 5,1",
32 | "mouse,right, 1,3",
33 | "mouse,rightx2, 3,3",
34 | "mouse,rightx3, 5,3"
35 | ],
36 | result: "pzprv3/gokigen/2/3/. . . . /. . . . /. . . . /1 . 1 /2 . 2 /"
37 | },
38 | { input: ["newboard,3,2", "playmode", "setconfig,use,2", "ansclear"] },
39 | {
40 | input: [
41 | "mouse,left, 1,1",
42 | "mouse,leftx2, 3,1",
43 | "mouse,leftx3, 5,1",
44 | "mouse,right, 1,3",
45 | "mouse,rightx2, 3,3",
46 | "mouse,rightx3, 5,3"
47 | ],
48 | result: "pzprv3/gokigen/2/3/. . . . /. . . . /. . . . /1 2 . /2 1 . /"
49 | },
50 | { input: ["newboard,3,2", "playmode"] },
51 | {
52 | input: ["mouse,left, 1,1, 4,4", "mouse,left, 1,3, 4,0, 5,1"],
53 | result: "pzprv3/gokigen/2/3/. . . . /. . . . /. . . . /1 2 1 /2 1 . /"
54 | },
55 | {
56 | input: ["mouse,left, 0,4, 2,2, 1.9,4, 4,0"],
57 | result: "pzprv3/gokigen/2/3/. . . . /. . . . /. . . . /1 . 1 /. 1 . /"
58 | }
59 | ]
60 | });
61 |
--------------------------------------------------------------------------------
/test/script/heteromino.js:
--------------------------------------------------------------------------------
1 | /* heteromino.js */
2 |
3 | ui.debug.addDebugData("heteromino", {
4 | url: "5/5/d7b7a7b7b77c7d",
5 | failcheck: [
6 | [
7 | "bkSizeGt3",
8 | "pzprv3/heteromino/5/5/. . . . * /. . * . * /. . * . . /* * . . . /* . . . . /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bkSizeLt3",
12 | "pzprv3/heteromino/5/5/. . . . * /. . * . * /. . * . . /* * . . . /* . . . . /0 0 1 0 0 0 /0 0 0 0 0 0 /0 0 0 0 1 0 /0 0 0 0 1 0 /0 0 0 0 1 0 /0 0 0 0 0 /1 1 0 0 0 /1 1 0 1 0 /0 0 0 0 0 /0 0 1 1 0 /0 0 0 0 0 /"
13 | ],
14 | [
15 | "bkSameTouch",
16 | "pzprv3/heteromino/5/5/. . . . * /. . * . * /. . * . . /* * . . . /* . . . . /0 0 1 0 0 0 /0 1 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 /1 0 0 0 0 /0 1 0 1 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/heteromino/5/5/. . . . * /. . * . * /. . * . . /* * . . . /* . . . . /0 0 1 0 0 0 /0 1 0 0 0 0 /0 0 0 0 1 0 /0 0 0 0 1 0 /0 0 0 0 1 0 /0 0 0 0 0 /-1 1 0 0 0 /1 0 0 1 0 /0 0 0 -1 0 /0 0 1 1 0 /0 0 0 0 0 /"
21 | ]
22 | ],
23 | inputs: [
24 | {
25 | input: [
26 | "newboard,3,2",
27 | "editmode",
28 | "mouse,left, 1,1",
29 | "mouse,left, 3,1",
30 | "mouse,left, 1,3"
31 | ],
32 | result:
33 | "pzprv3/heteromino/2/3/* * . /* . . /0 0 0 0 /0 0 0 0 /0 0 0 /0 0 0 /0 0 0 /"
34 | },
35 | {
36 | input: [
37 | "playmode",
38 | "mouse,left, 0,0 0,2",
39 | "mouse,left, 2,0, 2,2",
40 | "mouse,left, 4,0, 4,2",
41 | "mouse,left, 6,0, 6,2",
42 | "mouse,left, 4,2, 4,4"
43 | ],
44 | result:
45 | "pzprv3/heteromino/2/3/* * . /* . . /0 0 0 0 /0 0 1 0 /0 0 0 /0 0 0 /0 0 0 /"
46 | }
47 | ]
48 | });
49 |
--------------------------------------------------------------------------------
/test/script/ichimagax.js:
--------------------------------------------------------------------------------
1 | /* ichimagax.js */
2 |
3 | ui.debug.addDebugData("ichimagax", {
4 | url: "5/5/g8dgddgbbg6b",
5 | failcheck: [
6 | ["brNoLine", "pzprv3/ichimagax/5/5/cross"],
7 | [
8 | "lnBranch",
9 | "pzprv3/ichimagax/5/5/cross/. 3 . 3 . /. . 3 . . /3 . . . 1 /. . 1 . . /. 1 . 1 . /1 1 0 0 /1 1 1 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /1 1 1 0 0 /1 0 1 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
10 | ],
11 | [
12 | "lcCurveGt1",
13 | "pzprv3/ichimagax/5/5/cross/. 3 . 3 . /. . 3 . . /3 . . . 1 /. . 1 . . /. 1 . 1 . /1 1 0 0 /0 1 1 0 /1 0 0 0 /0 1 0 0 /0 0 0 0 /1 1 1 0 0 /1 0 1 0 0 /0 1 0 0 0 /0 0 0 0 0 /"
14 | ],
15 | [
16 | "lcDivided",
17 | "pzprv3/ichimagax/5/5/cross/. 3 . 3 . /. . 3 . . /3 . . . 1 /. . 1 . . /. 1 . 1 . /1 1 0 0 /0 1 0 0 /1 0 0 0 /0 0 0 0 /0 0 0 1 /1 1 1 0 0 /1 0 1 0 0 /1 0 1 0 1 /0 0 0 0 1 /"
18 | ],
19 | [
20 | "lcDeadEnd",
21 | "pzprv3/ichimagax/5/5/cross/. 3 . 3 . /. . 3 . . /3 . . . 1 /. . 1 . . /. 1 . 1 . /1 1 1 1 /0 0 0 0 /1 1 0 0 /0 0 1 0 /1 0 0 0 /1 1 0 1 1 /1 0 0 1 1 /1 0 1 1 0 /1 0 0 0 0 /"
22 | ],
23 | [
24 | "nmLineNe",
25 | "pzprv3/ichimagax/5/5/cross/. 3 . 3 . /. . 3 . . /3 . . . 1 /. . 1 . . /. 1 . 1 . /1 1 1 0 /0 1 1 1 /1 1 1 0 /0 0 0 0 /1 0 0 0 /1 1 0 0 0 /1 0 1 0 1 /1 0 1 1 0 /1 0 0 1 0 /"
26 | ],
27 | [
28 | "nmNoLine",
29 | "pzprv3/ichimagax/5/5/cross/. 3 . 3 . /. . 3 . . /3 . . . 1 /. . 1 . - /. 1 . 1 . /1 1 1 1 /0 1 1 0 /1 1 1 0 /0 0 0 0 /1 0 0 0 /1 1 0 1 1 /1 0 1 0 1 /1 0 1 1 0 /1 0 0 1 0 /"
30 | ],
31 | [
32 | null,
33 | "pzprv3/ichimagax/5/5/cross/. 3 . 3 . /. . 3 . . /3 . . . 1 /. . 1 . . /. 1 . 1 . /1 1 1 1 /0 1 1 0 /1 1 1 0 /0 0 0 0 /1 0 0 0 /1 1 0 1 1 /1 0 1 0 1 /1 0 1 1 0 /1 0 0 1 0 /"
34 | ]
35 | ],
36 | inputs: [
37 | /* 回答入力はfireflyと同じなので省略 */
38 | /* 問題入力はichimagaと同じなので省略 */
39 | ]
40 | });
41 |
--------------------------------------------------------------------------------
/test/script/invlitso.js:
--------------------------------------------------------------------------------
1 | /* invlitso.js */
2 |
3 | ui.debug.addDebugData("invlitso", {
4 | url: "4/4/2tge80",
5 | failcheck: [
6 | [
7 | "bkShadeLt4",
8 | "pzprv3/invlitso/4/4/3/0 0 0 0 /0 1 1 2 /0 1 2 2 /0 1 2 2 /. . . . /. . . . /. . . . /. . . . /"
9 | ],
10 | [
11 | "cs2x2",
12 | "pzprv3/invlitso/4/4/3/0 0 0 0 /0 1 1 2 /0 1 2 2 /0 1 2 2 /. # # . /. # # . /. . . . /. . . . /"
13 | ],
14 | [
15 | "bkShadeGt4",
16 | "pzprv3/invlitso/4/4/3/0 0 0 0 /0 1 1 2 /0 1 2 2 /0 1 2 2 /. . # # /. . . # /. . . # /. . . . /"
17 | ],
18 | [
19 | "bkShadeDivide",
20 | "pzprv3/invlitso/4/4/3/0 0 0 0 /0 1 1 2 /0 1 2 2 /0 1 2 2 /# # . . /# . . . /. . . . /. . . . /"
21 | ],
22 | [
23 | "bsSameShape",
24 | "pzprv3/invlitso/4/4/3/0 0 0 0 /0 1 1 2 /0 1 2 2 /0 1 2 2 /. . . . /. . . . /. . # . /. . . . /"
25 | ],
26 | [
27 | "csDivide",
28 | "pzprv3/invlitso/4/4/3/0 0 0 0 /0 1 1 2 /0 1 2 2 /0 1 2 2 /. . . . /# . . . /# . . . /# . . # /"
29 | ],
30 | [
31 | null,
32 | "pzprv3/invlitso/4/4/3/0 0 0 0 /0 1 1 2 /0 1 2 2 /0 1 2 2 /. # # # /. . . # /. . . . /. . . . /"
33 | ]
34 | ],
35 | inputs: []
36 | });
37 |
--------------------------------------------------------------------------------
/test/script/island.js:
--------------------------------------------------------------------------------
1 | /* island.js */
2 |
3 | ui.debug.addDebugData("island", {
4 | url: "5/5/1g6m2i3h4m",
5 | failcheck: [
6 | [
7 | "brNoShade",
8 | "pzprv3/island/5/5/1 . 6 . . /. . . . . /2 . . . 3 /. . 4 . . /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /"
9 | ],
10 | [
11 | "nmSumSizeNe",
12 | "pzprv3/island/5/5/1 . 6 . . /. . . . . /2 . . . 3 /. . 4 . . /. . . . . /. # . # # /+ + # . . /. + # # . /# # . + + /. . . . + /"
13 | ],
14 | [
15 | "csDivide",
16 | "pzprv3/island/5/5/1 . 6 . . /. . . . . /2 . . . 3 /. . 4 . . /. . . . . /. # . # # /+ + # + # /. + # + . /# . . + + /# + # # + /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/island/5/5/1 . 6 . . /. . . . . /2 . . . 3 /. . 4 . . /. . . . . /. # . # # /+ + # + # /. + # + . /# # . + + /+ + + + + /"
21 | ]
22 | ],
23 | inputs: [
24 | { input: ["newboard,5,1", "editmode"] },
25 | {
26 | input: [
27 | "cursor,3,1",
28 | "key,1",
29 | "cursor,9,1",
30 | "key,1",
31 | "playmode",
32 | "mouse,left,1,1,5,1"
33 | ],
34 | result: "pzprv3/island/1/5/. 1 . . 1 /# . # . . /"
35 | },
36 | {
37 | input: ["playmode,info-blk", "mouse,left,3,1"],
38 | result: function(puzzle, assert) {
39 | var bd = puzzle.board;
40 | assert.equal(bd.getc(1, 1).qinfo, 1);
41 | assert.equal(bd.getc(3, 1).qinfo, 1);
42 | assert.equal(bd.getc(5, 1).qinfo, 1);
43 | assert.equal(bd.getc(9, 1).qinfo, 0);
44 | }
45 | }
46 | ]
47 | });
48 |
--------------------------------------------------------------------------------
/test/script/juosan.js:
--------------------------------------------------------------------------------
1 | /* juosan.js */
2 |
3 | ui.debug.addDebugData("juosan", {
4 | url: "5/5/8mdnvues132g213g22g",
5 | failcheck: [
6 | [
7 | "baParaGe3",
8 | "pzprv3/juosan/5/5/11/0 0 1 1 1 /2 2 3 3 4 /5 6 6 6 4 /5 7 7 8 4 /9 9 10 8 4 /1 . 3 . . /2 . . . 2 /1 3 . . . /. . . 2 . /2 . . . . /0 0 2 2 2 /0 0 2 2 0 /0 2 2 2 0 /0 0 0 0 0 /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bkMajorBarGt",
12 | "pzprv3/juosan/5/5/11/0 0 1 1 1 /2 2 3 3 4 /5 6 6 6 4 /5 7 7 8 4 /9 9 10 8 4 /1 . 3 . . /2 . . . 2 /1 3 . . . /. . . 2 . /2 . . . . /0 0 2 2 2 /0 0 1 1 0 /0 2 2 2 1 /0 0 0 0 1 /0 0 0 0 1 /"
13 | ],
14 | [
15 | "bkMajorBarLt",
16 | "pzprv3/juosan/5/5/11/0 0 1 1 1 /2 2 3 3 4 /5 6 6 6 4 /5 7 7 8 4 /9 9 10 8 4 /1 . 3 . . /2 . . . 2 /1 3 . . . /. . . 2 . /2 . . . . /0 1 2 2 2 /0 2 1 1 2 /0 2 2 2 0 /0 1 0 0 0 /0 0 0 0 0 /"
17 | ],
18 | [
19 | "ceNoBar",
20 | "pzprv3/juosan/5/5/11/0 0 1 1 1 /2 2 3 3 4 /5 6 6 6 4 /5 7 7 8 4 /9 9 10 8 4 /1 . 3 . . /2 . . . 2 /1 3 . . . /. . . 2 . /2 . . . . /2 1 2 2 2 /2 2 1 1 2 /1 2 2 2 0 /2 1 2 1 0 /2 2 1 1 2 /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/juosan/5/5/11/0 0 1 1 1 /2 2 3 3 4 /5 6 6 6 4 /5 7 7 8 4 /9 9 10 8 4 /1 . 3 . . /2 . . . 2 /1 3 . . . /. . . 2 . /2 . . . . /2 1 2 2 2 /2 2 1 1 2 /1 2 2 2 1 /2 1 2 1 1 /2 2 1 1 2 /"
25 | ]
26 | ],
27 | inputs: [
28 | /* 問題入力はなげなわと同じ */
29 | /* 回答入力はタテボーヨコボーと同じ */
30 | ]
31 | });
32 |
--------------------------------------------------------------------------------
/test/script/kramma.js:
--------------------------------------------------------------------------------
1 | /* kramma.js */
2 |
3 | ui.debug.addDebugData("kramma", {
4 | url: "c/5/5/9ock3ba9i",
5 | failcheck: [
6 | [
7 | "bkNoNum",
8 | "pzprv3/kramma/5/5/1 . . 2 2 /. 1 1 . 2 /. 2 . 1 . /1 . 2 1 . /1 1 . . 2 /. . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /1 0 1 0 /1 0 1 0 /1 0 1 0 /1 0 1 0 /1 0 1 0 /1 1 1 1 1 /1 1 1 1 1 /-1 -1 -1 -1 -1 /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bkPlNum",
12 | "pzprv3/kramma/5/5/1 . . 2 2 /. 1 1 . 2 /. 2 . 1 . /1 . 2 1 . /1 1 . . 2 /. . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /1 0 1 0 /1 0 1 0 /1 0 1 0 /1 0 1 0 /1 0 1 0 /0 0 0 0 0 /1 1 1 1 1 /-1 -1 -1 -1 -1 /0 0 0 0 0 /"
13 | ],
14 | [
15 | null,
16 | "pzprv3/kramma/5/5/1 . . 2 2 /. 1 1 . 2 /. 2 . 1 . /1 . 2 1 . /1 1 . . 2 /. . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /1 0 1 -1 /1 0 1 -1 /1 -1 1 -1 /1 -1 1 -1 /1 0 1 -1 /-1 -1 -1 -1 -1 /1 1 1 1 1 /-1 -1 -1 -1 -1 /1 1 1 1 1 /"
17 | ]
18 | ],
19 | inputs: [
20 | /* 問題入力, 回答入力はkrammanと同じなので省略 */
21 | ]
22 | });
23 |
--------------------------------------------------------------------------------
/test/script/kropki.js:
--------------------------------------------------------------------------------
1 | /* kropki.js */
2 |
3 | ui.debug.addDebugData("kropki", {
4 | url: "4/4/aa7fioco",
5 | failcheck: [
6 | [
7 | "nmDupRow",
8 | "pzprv3/kropki/4/4/1 0 1 /1 0 1 /0 2 1 /1 2 0 /2 0 0 2 /2 0 1 1 /0 2 2 0 /4 4 . . /. . . . /. . . . /. . . . /"
9 | ],
10 | [
11 | "nmSubNe1",
12 | "pzprv3/kropki/4/4/1 0 1 /1 0 1 /0 2 1 /1 2 0 /2 0 0 2 /2 0 1 1 /0 2 2 0 /4 1 . . /. . . . /. . . . /. . . . /"
13 | ],
14 | [
15 | "nmSubEq1",
16 | "pzprv3/kropki/4/4/1 0 1 /1 0 1 /0 2 1 /1 2 0 /2 0 0 2 /2 0 1 1 /0 2 2 0 /1 . . . /2 . . . /4 . . . /3 . . . /"
17 | ],
18 | [
19 | "nmDivNe2",
20 | "pzprv3/kropki/4/4/1 0 1 /1 0 1 /0 2 1 /1 2 0 /2 0 0 2 /2 0 1 1 /0 2 2 0 /4 . . . /2 . . . /1 . . . /3 4 1 . /"
21 | ],
22 | [
23 | "nmDivEq2",
24 | "pzprv3/kropki/4/4/1 0 1 /1 0 1 /0 2 1 /1 2 0 /2 0 0 2 /2 0 1 1 /0 2 2 0 /4 3 . . /2 1 . . /1 . . . /3 .[2,4,,] 4 2 /"
25 | ],
26 | [
27 | "ceNoNum",
28 | "pzprv3/kropki/4/4/1 0 1 /1 0 1 /0 2 1 /1 2 0 /2 0 0 2 /2 0 1 1 /0 2 2 0 /4 3 1 2 /2 1 . . /1 . . . /3 .[2,4,,] . . /"
29 | ],
30 | [
31 | null,
32 | "pzprv3/kropki/4/4/1 0 1 /1 0 1 /0 2 1 /1 2 0 /2 0 0 2 /2 0 1 1 /0 2 2 0 /4 3 1 2 /2 1 3 4 /1 4 2 3 /3 2 4 1 /"
33 | ]
34 | ],
35 | inputs: []
36 | });
37 |
--------------------------------------------------------------------------------
/test/script/kurodoko.js:
--------------------------------------------------------------------------------
1 | /* kurodoko.js */
2 |
3 | ui.debug.addDebugData("kurodoko", {
4 | url: "5/5/i7g5l2l2g4i",
5 | failcheck: [
6 | ["brNoShade", "pzprv3/kurodoko/5/5"],
7 | [
8 | "csAdjacent",
9 | "pzprv3/kurodoko/5/5/. . . 7 . /5 . . . . /. . 2 . . /. . . . 2 /. 4 . . . /. . . . . /. . . . . /. . . . . /. . # . . /. . # . . /"
10 | ],
11 | [
12 | "cuDivideRB",
13 | "pzprv3/kurodoko/5/5/. . . 7 . /5 . . . . /. . 2 . . /. . . . 2 /. 4 . . . /. # . . . /. . # . . /. # . . . /. . # . . /. . . # . /"
14 | ],
15 | [
16 | "nmSumViewNe",
17 | "pzprv3/kurodoko/5/5/. . . 7 . /5 . . . . /. . 2 . . /. . . . 2 /. 4 . . . /# + + + . /+ + # + + /+ # + + # /+ + # + + /# + + + # /"
18 | ],
19 | [
20 | null,
21 | "pzprv3/kurodoko/5/5/. . . 7 . /5 . . . . /. . 2 . . /. . . . 2 /. 4 . . . /+ # + + . /+ + # + + /+ # + + # /+ + # + + /# + + + # /"
22 | ]
23 | ],
24 | inputs: [] /* hitori, kurottoと同じなので省略 */
25 | });
26 |
--------------------------------------------------------------------------------
/test/script/kuromenbun.js:
--------------------------------------------------------------------------------
1 | /* kuromenbun.js */
2 |
3 | ui.debug.addDebugData("kuromenbun", {
4 | url: "4/4/0q0v282h2j0l5",
5 | failcheck: [
6 | [
7 | "bkNumGe2",
8 | "pzprv3/kuromenbun/4/4/0 0 0 /0 0 1 /1 0 1 /0 0 0 /1 1 1 1 /1 0 0 0 /1 0 0 1 /2 . . 2 /. . . . /0 . . . /. . . 5 /. . . . /. # # . /. . . # /. # . . /"
9 | ],
10 | [
11 | "nmShadeGt",
12 | "pzprv3/kuromenbun/4/4/0 0 0 /0 0 1 /1 0 1 /0 0 0 /1 1 1 1 /1 0 0 0 /1 0 0 1 /2 . . 2 /. . . . /0 . . . /. . . 5 /. # # . /# . . # /. . . . /. # . . /"
13 | ],
14 | [
15 | "nmShadeLt",
16 | "pzprv3/kuromenbun/4/4/0 0 0 /0 0 1 /1 0 1 /0 0 0 /1 1 1 1 /1 0 0 0 /1 0 0 1 /2 . . 2 /. . . . /0 . . . /. . . 5 /. . # . /. # . # /. . . . /. . . . /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/kuromenbun/4/4/0 0 0 /0 0 1 /1 0 1 /0 0 0 /1 1 1 1 /1 0 0 0 /1 0 0 1 /2 . . 2 /. . . . /0 . . . /. . . 5 /+ + # + /+ # + # /+ + + # /+ # + + /"
21 | ]
22 | ],
23 | inputs: [
24 | {
25 | input: [
26 | "newboard,4,2",
27 | "editmode",
28 | "cursor,1,1",
29 | "mouse,right,1,1",
30 | "mouse,left, 0,2, 6,2, 6,0"
31 | ],
32 | result:
33 | "pzprv3/kuromenbun/2/4/0 0 1 /0 0 0 /1 1 1 0 /5 . . . /. . . . /. . . . /. . . . /"
34 | },
35 | {
36 | input: [
37 | "playmode",
38 | "mouse,left,5,3",
39 | "playmode,info-ublk",
40 | "mouse,left,1,3"
41 | ],
42 | result: function(puzzle, assert) {
43 | var bd = puzzle.board;
44 | assert.equal(bd.getc(3, 3).qinfo, 1);
45 | assert.equal(bd.getc(5, 3).qinfo, 2);
46 | assert.equal(bd.getc(7, 3).qinfo, 0);
47 | }
48 | },
49 | {
50 | input: ["playmode,info-ublk", "mouse,left,5,3"],
51 | result: function(puzzle, assert) {
52 | var bd = puzzle.board;
53 | assert.equal(bd.getc(5, 3).qinfo, 0);
54 | assert.equal(bd.getc(5, 1).qinfo, 0);
55 | }
56 | }
57 | ]
58 | });
59 |
--------------------------------------------------------------------------------
/test/script/kurotto.js:
--------------------------------------------------------------------------------
1 | /* kurotto.js */
2 |
3 | ui.debug.addDebugData("kurotto", {
4 | url: "5/5/30m4h6h4m02",
5 | failcheck: [
6 | ["brNoShade", "pzprv3/kurotto/5/5"],
7 | [
8 | "nmSumSizeNe",
9 | "pzprv3/kurotto/5/5/3 0 . . . /. . . . 4 /. . 6 . . /4 . . . . /. . . 0 2 /. . + . . /# + . . . /# # . + # /. + . + # /# + + . . /"
10 | ],
11 | [
12 | null,
13 | "pzprv3/kurotto/5/5/3 0 . . . /. . . . 4 /. . 6 . . /4 . . . . /. . . 0 2 /. . + + + /# + # # . /# # . + # /. + # + # /# + + . . /"
14 | ]
15 | ],
16 | inputs: [
17 | /* 回答入力はnurikabeと同じなので省略 */
18 | { input: ["editmode", "newboard,5,1"] },
19 | {
20 | input: [
21 | "cursor,1,1",
22 | "key,-",
23 | "key,right",
24 | "key,0",
25 | "key,right",
26 | "key,1",
27 | "key,right",
28 | "key,2",
29 | "key,right",
30 | "key,3"
31 | ],
32 | result: "pzprv3/kurotto/1/5/- 0 1 2 3 /. . . . . /"
33 | },
34 | {
35 | input: [
36 | "cursor,1,1",
37 | "key,-",
38 | "key,right",
39 | "key,-",
40 | "key,right",
41 | "key,-",
42 | "key,-"
43 | ],
44 | result: "pzprv3/kurotto/1/5/. - . 2 3 /. . . . . /"
45 | },
46 | { input: ["newboard,6,1"] },
47 | {
48 | input: [
49 | "cursor,0,0",
50 | "mouse,leftx2, 1,1",
51 | "mouse,leftx3, 3,1",
52 | "mouse,leftx4, 5,1",
53 | "mouse,leftx5, 7,1",
54 | "mouse,leftx6, 9,1",
55 | "mouse,rightx2, 11,1"
56 | ],
57 | result: "pzprv3/kurotto/1/6/- 0 1 2 3 5 /. . . . . . /"
58 | }
59 | ]
60 | });
61 |
--------------------------------------------------------------------------------
/test/script/lither.js:
--------------------------------------------------------------------------------
1 | /* lither.js */
2 |
3 | ui.debug.addDebugData("lither", {
4 | url: "4/4/8a638d6c",
5 | failcheck: [
6 | [
7 | "brNoLine",
8 | "pzprv3.1/lither/4/4/3 . 0 . /. 1 . 3 /3 . 3 . /. 1 . 2 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
9 | ],
10 | [
11 | "lnSnLine",
12 | "pzprv3.1/lither/4/4/3 . 0 . /. 1 . 3 /3 . 3 . /. 1 . 2 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 1 0 0 0 /0 1 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /1 1 0 0 /1 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
13 | ],
14 | [
15 | "lnNoBranchOrTerm",
16 | "pzprv3.1/lither/4/4/3 . 0 . /. 1 . 3 /3 . 3 . /. 1 . 2 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 1 0 0 0 /0 0 0 1 1 /1 1 0 1 1 /1 1 0 1 1 /1 1 0 1 /1 1 0 0 /0 0 1 1 /1 0 1 0 /0 0 0 0 /"
17 | ],
18 | [
19 | "nmLineNe",
20 | "pzprv3.1/lither/4/4/3 . 0 . /. 1 . 3 /3 . 3 . /. 1 . 2 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 1 0 0 0 /0 0 0 1 1 /1 1 0 1 0 /1 1 0 1 0 /1 1 0 1 /1 1 0 0 /0 0 1 0 /1 0 1 1 /0 0 1 1 /"
21 | ],
22 | [
23 | "lnHasLoop",
24 | "pzprv3.1/lither/4/4/3 . 0 . /. 1 . 3 /3 . 3 . /. 1 . 2 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 1 0 0 0 /0 0 0 1 1 /1 1 0 1 1 /1 1 0 0 1 /1 1 0 1 /1 1 0 0 /0 0 1 1 /1 0 1 1 /0 0 1 0 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3.1/lither/4/4/3 . 0 . /. 1 . 3 /3 . 3 . /. 1 . 2 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /-1 1 -1 -1 -1 /-1 -1 -1 1 1 /1 1 -1 1 1 /1 1 -1 1 -1 /1 1 -1 1 /1 1 -1 -1 /-1 -1 1 1 /1 -1 1 -1 /-1 -1 1 1 /"
29 | ]
30 | ]
31 | });
32 |
--------------------------------------------------------------------------------
/test/script/lits.js:
--------------------------------------------------------------------------------
1 | /* lits.js */
2 |
3 | ui.debug.addDebugData("lits", {
4 | url: "4/4/9q02jg",
5 | failcheck: [
6 | [
7 | "cs2x2",
8 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /# # . . /# # . . /. . . . /. . . . /"
9 | ],
10 | [
11 | "bkShadeGt4",
12 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /. . # # /. . # . /. # # . /. . . . /"
13 | ],
14 | [
15 | "bkShadeDivide",
16 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /. . # # /. . . . /. # # # /. . . . /"
17 | ],
18 | [
19 | "bsSameShape",
20 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /# # # # /# . # . /# . # . /. . . . /"
21 | ],
22 | [
23 | "csDivide",
24 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /# . # # /# . # . /# . # . /. . . . /"
25 | ],
26 | [
27 | "bkNoShade",
28 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /# . # # /# # # . /# . # . /. . . . /"
29 | ],
30 | [
31 | "bkShadeLt4",
32 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /# . # # /# # # . /# . # . /. . # # /"
33 | ],
34 | [
35 | null,
36 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /# + # # /# # # + /# + # + /# # # # /"
37 | ]
38 | ],
39 | inputs: [
40 | /* 回答入力はnurikabeと同じなので省略 */
41 | { input: ["editmode", "newboard,4,4"] },
42 | {
43 | input: [
44 | "mouse,left, 4,0, 4,4, 2,4, 2,6",
45 | "mouse,left, 0,6, 6,6, 6,2, 8,2"
46 | ],
47 | result:
48 | "pzprv3/lits/4/4/3/0 0 1 1 /0 0 1 2 /0 1 1 2 /2 2 2 2 /. . . . /. . . . /. . . . /. . . . /"
49 | },
50 | {
51 | input: [
52 | "mouse,left, 4,0, 4,4, 2,4, 2,6",
53 | "mouse,left, 0,6, 6,6, 6,2, 8,2"
54 | ],
55 | result:
56 | "pzprv3/lits/4/4/1/0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /. . . . /. . . . /. . . . /. . . . /"
57 | }
58 | ]
59 | });
60 |
--------------------------------------------------------------------------------
/test/script/lookair.js:
--------------------------------------------------------------------------------
1 | /* lookair.js */
2 |
3 | ui.debug.addDebugData("lookair", {
4 | url: "6/6/3e3b3g1a2e0a2c1d",
5 | failcheck: [
6 | ["brNoShade", "pzprv3/lookair/6/6"],
7 | [
8 | "csNotSquare",
9 | "pzprv3/lookair/6/6/3 . . . . . /3 . . 3 . . /. . . . . 1 /. 2 . . . . /. 0 . 2 . . /. 1 . . . . /# # . . . . /# . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /"
10 | ],
11 | [
12 | "lookairBC",
13 | "pzprv3/lookair/6/6/3 . . . . . /3 . . 3 . . /. . . . . 1 /. 2 . . . . /. 0 . 2 . . /. 1 . . . . /# # + . . . /# # + . . . /+ + . . . . /# + # . . . /+ + + . . . /# + . . . . /"
14 | ],
15 | [
16 | "nmShade5Ne",
17 | "pzprv3/lookair/6/6/3 . . . . . /3 . . 3 . . /. . . . . 1 /. 2 . . . . /. 0 . 2 . . /. 1 . . . . /# # + . . . /# # + + . . /+ + # # + . /# + # # + . /+ + + + . . /+ + # + . . /"
18 | ],
19 | [
20 | null,
21 | "pzprv3/lookair/6/6/3 . . . . . /3 . . 3 . . /. . . . . 1 /. 2 . . . . /. 0 . 2 . . /. 1 . . . . /# # + # + + /# # + + # + /+ + # # + # /# + # # + + /+ + + + # # /+ + # + # # /"
22 | ]
23 | ],
24 | inputs: [
25 | /* マウスの問題入力以外nurikabeと同じなので省略 */
26 | { input: ["editmode", "newboard,8,2"] },
27 | {
28 | input: [
29 | "cursor,0,0",
30 | "mouse,leftx2, 1,1",
31 | "mouse,leftx3, 3,1",
32 | "mouse,leftx4, 5,1",
33 | "mouse,leftx5, 7,1",
34 | "mouse,leftx6, 9,1",
35 | "mouse,leftx7, 11,1",
36 | "mouse,leftx8, 13,1",
37 | "mouse,leftx9, 15,1",
38 | "cursor,0,0",
39 | "mouse,rightx2, 1,3",
40 | "mouse,rightx3, 3,3",
41 | "mouse,rightx4, 5,3",
42 | "mouse,rightx5, 7,3",
43 | "mouse,rightx6, 9,3",
44 | "mouse,rightx7, 11,3",
45 | "mouse,rightx8, 13,3",
46 | "mouse,rightx9, 15,3"
47 | ],
48 | result:
49 | "pzprv3/lookair/2/8/- 0 1 2 3 4 5 . /5 4 3 2 1 0 - . /. . . . . . . . /. . . . . . . . /"
50 | }
51 | ]
52 | });
53 |
--------------------------------------------------------------------------------
/test/script/loute.js:
--------------------------------------------------------------------------------
1 | /* loute.js */
2 |
3 | ui.debug.addDebugData("loute", {
4 | url: "5/5/5i3h1h1i1h2h4i5",
5 | failcheck: [
6 | [
7 | "arBlkEdge",
8 | "pzprv3/loute/5/5/5 . . . 3 /. . 1 . . /1 . . . 1 /. . 2 . . /4 . . . 5 /0 0 0 0 /0 1 0 0 /1 0 0 0 /1 0 0 0 /0 0 0 0 /1 1 0 0 0 /0 1 0 0 0 /0 0 0 0 0 /1 0 0 0 0 /"
9 | ],
10 | [
11 | "arNotPtCnr",
12 | "pzprv3/loute/5/5/5 . . . 3 /. . 1 . . /1 . . . 1 /. . 2 . . /4 . . . 5 /0 0 0 0 /0 0 0 0 /1 0 0 0 /0 1 0 0 /0 0 0 0 /0 0 0 0 0 /1 0 0 0 0 /0 1 0 0 0 /1 1 0 0 0 /"
13 | ],
14 | [
15 | "ciNotOnCnr",
16 | "pzprv3/loute/5/5/5 . . . 3 /. . 1 . . /1 . . . 1 /. . 2 . . /4 . . . 5 /0 0 0 0 /1 0 0 0 /1 0 0 0 /0 1 1 0 /0 1 0 0 /0 1 0 0 0 /0 0 0 0 0 /1 0 1 0 0 /0 0 0 1 1 /"
17 | ],
18 | [
19 | "bdDeadEnd",
20 | "pzprv3/loute/5/5/5 . . . 3 /. . 1 . . /1 . . . 1 /. . 2 . . /4 . . . 5 /-1 1 0 -1 /1 1 1 0 /1 0 0 1 /-1 1 1 1 /-1 -1 1 -1 /-1 1 0 1 1 /-1 0 1 0 0 /1 0 1 0 1 /1 1 -1 1 -1 /"
21 | ],
22 | [
23 | "bkNotLshape",
24 | "pzprv3/loute/5/5/5 . . . 3 /. . 1 . . /1 . . . 1 /. . 2 . . /4 . . . 5 /-1 1 0 -1 /1 1 1 0 /1 0 0 1 /-1 1 1 1 /-1 -1 1 -1 /-1 1 0 1 1 /-1 0 1 1 0 /1 0 1 0 1 /1 1 -1 1 -1 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/loute/5/5/5 . . . 3 /. . 1 . . /1 . . . 1 /. . 2 . . /4 . . . 5 /-1 1 0 -1 /1 1 1 0 /1 1 0 1 /-1 1 1 1 /-1 -1 1 -1 /-1 1 0 1 1 /-1 0 1 1 0 /1 0 1 0 1 /1 1 -1 1 -1 /"
29 | ]
30 | ],
31 | inputs: [
32 | /* 問題, 回答はsashiganeと同じなので省略 */
33 | ]
34 | });
35 |
--------------------------------------------------------------------------------
/test/script/meander.js:
--------------------------------------------------------------------------------
1 | /* meander.js */
2 |
3 | ui.debug.addDebugData("meander", {
4 | url: "4/4/94g0f0i2n2h4",
5 | failcheck: [
6 | [
7 | "bkDupNum",
8 | "pzprv3/meander/4/4/0 1 0 /0 1 0 /0 1 0 /0 1 0 /0 0 0 0 /0 0 1 1 /1 1 0 0 /. . . 2 /. . . . /. . . . /2 . . 4 /. . . . /. . 1 1 /. . . . /. 2 . . /"
9 | ],
10 | [
11 | "ceNoNum",
12 | "pzprv3/meander/4/4/0 1 0 /0 1 0 /0 1 0 /0 1 0 /0 0 0 0 /0 0 1 1 /1 1 0 0 /. . . 2 /. . . . /. . . . /2 . . 4 /. . 1 . /. . 4 3 /. . 2 1 /. 1 3 . /"
13 | ],
14 | [
15 | "nmNotConsecNeighbors",
16 | "pzprv3/meander/4/4/0 1 0 /0 1 0 /0 1 0 /0 1 0 /0 0 0 0 /0 0 1 1 /1 1 0 0 /. . . 2 /. . . . /. . . . /2 . . 4 /1 2 1 . /3 6 4 3 /4 5 2 1 /. 1 3 . /"
17 | ],
18 | // touch by edge
19 | [
20 | "nmAround",
21 | "pzprv3/meander/4/4/0 1 0 /0 1 0 /0 1 0 /0 1 0 /0 0 0 0 /0 0 1 1 /1 1 0 0 /. . . 2 /. . . . /. . . . /2 . . 4 /. . . . /. . . . /. . 2 3 /. 1 1 . /"
22 | ],
23 | // touch diagonally
24 | [
25 | "nmAround",
26 | "pzprv3/meander/4/4/0 1 0 /0 1 0 /0 1 0 /0 1 0 /0 0 0 0 /0 0 1 1 /1 1 0 0 /. . . 2 /. . . . /. . . . /2 . . 4 /3 2 1 . /4 1 4 3 /5 6 2 1 /. 1 3 . /"
27 | ],
28 | [
29 | null,
30 | "pzprv3/meander/4/4/0 1 0 /0 1 0 /0 1 0 /0 1 0 /0 0 0 0 /0 0 1 1 /1 1 0 0 /. . . 2 /. . . . /. . . . /2 . . 4 /1 2 1 . /4 3 4 3 /5 6 2 1 /. 1 3 . /"
31 | ]
32 | ]
33 | });
34 |
--------------------------------------------------------------------------------
/test/script/mejilink.js:
--------------------------------------------------------------------------------
1 | /* mejilink.js */
2 |
3 | ui.debug.addDebugData("mejilink", {
4 | url: "4/4/g9rm4",
5 | failcheck: [
6 | [
7 | "lnBranch",
8 | "pzprv3/mejilink/4/4/1 0 1 1 1 /2 2 1 1 1 /2 0 1 1 1 /1 0 0 0 1 /1 1 1 1 /1 0 0 0 /2 0 0 1 /1 1 0 1 /1 1 1 1 /"
9 | ],
10 | [
11 | "lnCross",
12 | "pzprv3/mejilink/4/4/1 0 1 1 1 /1 1 1 2 1 /1 0 2 2 1 /1 0 0 0 1 /1 1 1 1 /1 0 0 0 /1 0 2 2 /2 2 0 2 /1 1 1 1 /"
13 | ],
14 | [
15 | "bkNoLineNe",
16 | "pzprv3/mejilink/4/4/2 0 1 1 1 /1 2 1 1 1 /2 0 1 1 1 /2 0 0 0 1 /2 2 1 1 /2 0 0 0 /2 0 0 1 /1 1 0 1 /2 2 2 2 /"
17 | ],
18 | [
19 | "lnDeadEnd",
20 | "pzprv3/mejilink/4/4/2 0 1 2 2 /1 2 1 2 2 /2 0 1 2 2 /2 0 0 1 2 /2 2 2 1 /2 0 0 0 /2 0 0 1 /1 1 0 0 /2 2 2 2 /"
21 | ],
22 | [
23 | "lnPlLoop",
24 | "pzprv3/mejilink/4/4/2 2 0 2 2 /2 2 0 2 2 /1 0 0 0 1 /2 1 0 1 2 /2 1 1 2 /1 0 0 1 /2 1 1 2 /2 2 2 2 /2 2 2 2 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/mejilink/4/4/2 0 -1 1 2 /-1 2 -1 1 2 /2 0 -1 2 1 /2 0 0 0 2 /2 2 2 2 /2 0 0 0 /2 0 0 2 /-1 -1 0 2 /2 2 2 2 /"
29 | ]
30 | ],
31 | inputs: [
32 | /* 回答入力はslitherと同じなので省略 */
33 | { input: ["newboard,4,1", "editmode"] },
34 | {
35 | input: ["mouse,left, 0,0, 8,0, 8,2, 0,2, 0,0"],
36 | result: "pzprv3/mejilink/1/4/0 0 0 0 0 /0 0 0 0 /0 0 0 0 /"
37 | },
38 | {
39 | input: [
40 | "mouse,left, 0,0, 8,0, 8,2, 0,2, 0,0",
41 | "mouse,left, 2,0, 2,2, 4,2, 4,0, 6,0, 6,2"
42 | ],
43 | result: "pzprv3/mejilink/1/4/1 1 1 1 1 /1 1 1 1 /1 1 1 1 /"
44 | },
45 | {
46 | input: ["playmode", "mouse,left, 0,0, 4,0, 4,2, 8,2"],
47 | result: "pzprv3/mejilink/1/4/1 1 2 1 1 /2 2 1 1 /1 1 2 2 /"
48 | },
49 | {
50 | input: ["editmode", "mouse,left, 2,0, 2,2, 4,2, 4,0, 6,0, 6,2"],
51 | result: "pzprv3/mejilink/1/4/1 0 2 0 1 /2 2 0 1 /1 0 2 2 /"
52 | },
53 | { input: ["newboard,4,1"] },
54 | {
55 | input: ["playmode", "mouse,left, 0,0, 4,0, 4,2, 8,2"],
56 | result: "pzprv3/mejilink/1/4/1 0 0 0 1 /2 2 1 1 /1 1 2 2 /"
57 | }
58 | ]
59 | });
60 |
--------------------------------------------------------------------------------
/test/script/mines.js:
--------------------------------------------------------------------------------
1 | /* mines.js */
2 |
3 | ui.debug.addDebugData("mines", {
4 | url: "5/5/g2m13l13g0j",
5 | failcheck: [
6 | [
7 | "nmMinesNe",
8 | "pzprv3/mines/5/5/. 2 . . . /. . . . 1 /3 . . . . /. . 1 3 . /0 . . . . /. . . . # /# # . . . /. . . . . /# . . . # /. . . # # /"
9 | ],
10 | [
11 | "nmMinesNe",
12 | "pzprv3/mines/5/5/. 2 . . . /. . . . 1 /3 . . . . /. . 1 3 . /0 . . . . /. . . . . /# # . . . /. . # . # /. . . . . /. . . . # /"
13 | ],
14 | [
15 | null,
16 | "pzprv3/mines/5/5/. 2 . . . /. . . . 1 /3 . . . . /. . 1 3 . /0 . . . . /. . + . . /# # + . . /. # + + # /+ + . . # /. + + + # /"
17 | ]
18 | ],
19 | inputs: [
20 | { input: ["editmode", "newboard,5,1"] },
21 | {
22 | input: [
23 | "cursor,1,1",
24 | "key,-",
25 | "key,right",
26 | "key,0",
27 | "key,right",
28 | "key,1",
29 | "key,right",
30 | "key,2",
31 | "key,right",
32 | "key,3"
33 | ],
34 | result: "pzprv3/mines/1/5/- 0 1 2 3 /. . . . . /"
35 | },
36 | {
37 | input: [
38 | "cursor,1,1",
39 | "key,-",
40 | "key,right",
41 | "key,-",
42 | "key,right",
43 | "key,-",
44 | "key,-"
45 | ],
46 | result: "pzprv3/mines/1/5/. - . 2 3 /. . . . . /"
47 | },
48 | { input: ["newboard,6,1"] },
49 | {
50 | input: [
51 | "cursor,0,0",
52 | "mouse,leftx2, 1,1",
53 | "mouse,leftx3, 3,1",
54 | "mouse,leftx4, 5,1",
55 | "mouse,leftx5, 7,1",
56 | "mouse,leftx6, 9,1",
57 | "mouse,rightx2, 11,1"
58 | ],
59 | result: "pzprv3/mines/1/6/- 0 1 2 3 8 /. . . . . . /"
60 | }
61 | ]
62 | });
63 |
--------------------------------------------------------------------------------
/test/script/mochikoro.js:
--------------------------------------------------------------------------------
1 | /* mochikoro.js */
2 |
3 | ui.debug.addDebugData("mochikoro", {
4 | url: "5/5/4p2n1i1",
5 | failcheck: [
6 | ["brNoShade", "pzprv3/mochikoro/5/5"],
7 | [
8 | "cs2x2",
9 | "pzprv3/mochikoro/5/5/4 . . . . /. . . . . /. 2 . . . /. . . . . /1 . . . 1 /. . . # # /. . . # # /. . . . . /. . . . . /. . . . . /"
10 | ],
11 | [
12 | "csDivide8",
13 | "pzprv3/mochikoro/5/5/4 . . . . /. . . . . /. 2 . . . /. . . . . /1 . . . 1 /+ + + + # /# # # # # /. . . . . /. . . . . /. . . . . /"
14 | ],
15 | [
16 | "cuNotRect",
17 | "pzprv3/mochikoro/5/5/4 . . . . /. . . . . /. 2 . . . /. . . . . /1 . . . 1 /+ + + + # /# # # # + /. . # + + /. . . # # /. . . . . /"
18 | ],
19 | [
20 | "bkNumGe2",
21 | "pzprv3/mochikoro/5/5/4 . . . . /. . . . . /. 2 . . . /. . . . . /1 . . . 1 /+ + # + . /. . # . + /. . # . + /# # . # # /. . # . . /"
22 | ],
23 | [
24 | "bkSizeNe",
25 | "pzprv3/mochikoro/5/5/4 . . . . /. . . . . /. 2 . . . /. . . . . /1 . . . 1 /+ + + + # /# # # # + /# + + # + /+ # # + # /+ # + # + /"
26 | ],
27 | [
28 | null,
29 | "pzprv3/mochikoro/5/5/4 . . . . /. . . . . /. 2 . . . /. . . . . /1 . . . 1 /+ + + + # /# # # # + /# + # + # /# + # + # /+ # + # + /"
30 | ]
31 | ],
32 | inputs: [] /* nurikabeと同じなので省略 */
33 | });
34 |
--------------------------------------------------------------------------------
/test/script/mochinyoro.js:
--------------------------------------------------------------------------------
1 | /* mochinyoro.js */
2 |
3 | ui.debug.addDebugData("mochinyoro", {
4 | url: "5/5/l4g2m2m1",
5 | failcheck: [
6 | ["brNoShade", "pzprv3/mochinyoro/5/5"],
7 | [
8 | "cs2x2",
9 | "pzprv3/mochinyoro/5/5/. . . . . /. 4 . 2 . /. . . . . /. 2 . . . /. . . . 1 /. . . . . /. . . . . /. . . . . /. . # # . /. . # # . /"
10 | ],
11 | [
12 | "csDivide8",
13 | "pzprv3/mochinyoro/5/5/. . . . . /. 4 . 2 . /. . . . . /. 2 . . . /. . . . 1 /. . # . . /. . # . . /# # # . . /. . . . . /. . . . . /"
14 | ],
15 | [
16 | "cuNotRect",
17 | "pzprv3/mochinyoro/5/5/. . . . . /. 4 . 2 . /. . . . . /. 2 . . . /. . . . 1 /+ + # . . /+ + # . . /# # + . . /. . . . . /. . . . . /"
18 | ],
19 | [
20 | "bkNumGe2",
21 | "pzprv3/mochinyoro/5/5/. . . . . /. 4 . 2 . /. . . . . /. 2 . . . /. . . . 1 /+ + # . # /+ + # . # /. . # # . /. . # . # /# # . # . /"
22 | ],
23 | [
24 | "bkSizeNe",
25 | "pzprv3/mochinyoro/5/5/. . . . . /. 4 . 2 . /. . . . . /. 2 . . . /. . . . 1 /+ + # . . /+ + # + . /# # + # # /# + # + # /# # # # + /"
26 | ],
27 | [
28 | "csRect",
29 | "pzprv3/mochinyoro/5/5/. . . . . /. 4 . 2 . /. . . . . /. 2 . . . /. . . . 1 /+ + # + # /+ + # + # /# # + # # /# + # + # /# + # # + /"
30 | ],
31 | [
32 | null,
33 | "pzprv3/mochinyoro/5/5/. . . . . /. 4 . 2 . /. . . . . /. 2 . . . /. . . . 1 /+ + # # # /+ + # + + /# # + # # /# + # + # /# + # # + /"
34 | ]
35 | ],
36 | inputs: [] /* nurikabeと同じなので省略 */
37 | });
38 |
--------------------------------------------------------------------------------
/test/script/mrtile.js:
--------------------------------------------------------------------------------
1 | /* mrtile.js */
2 |
3 | ui.debug.addDebugData("mrtile", {
4 | url: "5/5/1h3k32g..q",
5 | failcheck: [
6 | [
7 | "bkSizeNe",
8 | "pzprv3/mrtile/5/5/1 . . 3 . /. # . . 3 /2 . - - . /# . . . # /. # # . # /"
9 | ],
10 | [
11 | "bkNoChain",
12 | "pzprv3/mrtile/5/5/1 . . 3 # /. # . . 3 /2 . - - . /# . . . # /. # # . # /"
13 | ],
14 | [
15 | null,
16 | "pzprv3/mrtile/5/5/1 + + 3 # /+ # + + 3 /2 + - - + /# + + # + /+ # # + + /"
17 | ]
18 | ],
19 | inputs: [
20 | {
21 | input: ["newboard,6,2", "cursor,5,3", "mouse,right,5,3"],
22 | result: "pzprv3/mrtile/2/6/. . . . . . /. . 5 . . . /"
23 | }
24 | ]
25 | });
26 |
--------------------------------------------------------------------------------
/test/script/nawabari.js:
--------------------------------------------------------------------------------
1 | /* nawabari.js */
2 |
3 | ui.debug.addDebugData("nawabari", {
4 | url: "5/5/f0b1f2a1f",
5 | failcheck: [
6 | [
7 | "bkNotRect",
8 | "pzprv3/nawabari/5/5/. . . . . /. 0 . . 1 /. . . . . /. 2 . 1 . /. . . . . /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 1 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 1 0 0 /1 1 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bkNoNum",
12 | "pzprv3/nawabari/5/5/. . . . . /. 0 . . 1 /. . . . . /. 2 . 1 . /. . . . . /0 0 0 1 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 /1 1 1 1 1 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
13 | ],
14 | [
15 | "bkNumGe2",
16 | "pzprv3/nawabari/5/5/. . . . . /. 0 . . 1 /. . . . . /. 2 . 1 . /. . . . . /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
17 | ],
18 | [
19 | "nmBorderNe",
20 | "pzprv3/nawabari/5/5/. . . . . /. 0 . . 1 /. . . . . /. 2 . 1 . /. . . . . /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 1 1 /1 1 1 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
21 | ],
22 | [
23 | "bdDeadEnd",
24 | "pzprv3/nawabari/5/5/. . . . . /. 0 . . 1 /. . . . . /. 2 . 1 . /. . . . . /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 1 0 0 0 /0 0 1 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /1 1 1 1 1 /0 0 1 0 0 /0 0 0 0 0 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/nawabari/5/5/. . . . . /. 0 . . 1 /. . . . . /. 2 . 1 . /. . . . . /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 0 1 0 0 /0 0 1 0 0 0 /0 0 1 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /1 1 1 1 1 /0 0 0 0 0 /0 0 0 0 0 /"
29 | ]
30 | ],
31 | inputs: [
32 | /* 問題入力, 回答入力はshikaku等と同じなので省略 */
33 | ]
34 | });
35 |
--------------------------------------------------------------------------------
/test/script/news.js:
--------------------------------------------------------------------------------
1 | /* news.js */
2 |
3 | ui.debug.addDebugData("news", {
4 | url: "4/4/2n8f9054a3826",
5 | failcheck: [
6 | [
7 | "arAlone",
8 | "pzprv3/news/4/4/4/0 0 0 0 /0 1 1 2 /1 1 3 2 /1 3 3 2 /. 4 . . /. . . . /3 . . . /. 2 . . /. . . . /. . . . /. . . . /. . . . /"
9 | ],
10 | [
11 | "bkNumGe3",
12 | "pzprv3/news/4/4/4/0 0 0 0 /0 1 1 2 /1 1 3 2 /1 3 3 2 /. 4 . . /. . . . /3 . . . /. 2 . . /. . . . /. . . . /. . 1 . /. . 4 . /"
13 | ],
14 | [
15 | "nmDupRow",
16 | "pzprv3/news/4/4/4/0 0 0 0 /0 1 1 2 /1 1 3 2 /1 3 3 2 /. 4 . . /. . . . /3 . . . /. 2 . . /. . . . /. . . . /. 4 . . /. . . . /"
17 | ],
18 | [
19 | "arNotRelative",
20 | "pzprv3/news/4/4/4/0 0 0 0 /0 1 1 2 /1 1 3 2 /1 3 3 2 /. 4 . . /. . . . /3 . . . /. 2 . . /. . . . /1 . . . /. . . . /. . . . /"
21 | ],
22 | [
23 | "bkNoNum",
24 | "pzprv3/news/4/4/4/0 0 0 0 /0 1 1 2 /1 1 3 2 /1 3 3 2 /. 4 . . /. . . . /3 . . . /. 2 . . /. . . . /2 . 4 . /. . 1 . /. . . . /"
25 | ],
26 |
27 | [
28 | "bkDivide",
29 | "pzprv3/news/5/4/n/2/0 0 0 1 /0 0 0 1 /0 0 1 1 /1 1 1 1 /1 1 1 1 /. . . . /. . . . /. . . . /. . . . /. . . . /. . . . /. . 1 . /. 3 . 4 /. . 2 . /. . . . /",
30 | { skiprules: true }
31 | ],
32 | [
33 | null,
34 | "pzprv3/news/5/4/n/2/0 0 0 1 /0 0 0 1 /0 0 1 1 /1 1 1 1 /1 1 1 1 /. . . . /. . . . /. . . . /. . . . /. . . . /. . 1 . /. . . . /. 3 . 4 /. . 2 . /. . . . /",
35 | { skiprules: true }
36 | ],
37 |
38 | [
39 | null,
40 | "pzprv3/news/4/4/4/0 0 0 0 /0 1 1 2 /1 1 3 2 /1 3 3 2 /. 4 . . /. . . . /3 . . . /. 2 . . /. . . . /2 . 4 1 /. . 1 2 /. . . . /"
41 | ]
42 | ],
43 | inputs: [
44 | {
45 | label: "Keyboard input",
46 | input: ["newboard,2,2", "editmode", "key,n,right,e,down,x"],
47 | result: "pzprv3/news/2/2/1/0 0 /0 0 /1 4 /. - /. . /. . /"
48 | },
49 | {
50 | input: ["editmode,empty", "mouse,left,1,3"],
51 | result: "pzprv3/news/2/2/1/0 0 /0 0 /1 4 /- - /. . /. . /"
52 | }
53 | ]
54 | });
55 |
--------------------------------------------------------------------------------
/test/script/nibunnogo.js:
--------------------------------------------------------------------------------
1 | /* nibunnogo.js */
2 |
3 | ui.debug.addDebugData("nibunnogo", {
4 | url: "4/4/gbjbakci",
5 | failcheck: [
6 | [
7 | "bkSizeGt5",
8 | "pzprv3/nibunnogo/4/4/. 1 . . . /. . . 1 . /. 0 . . . /. . . . 2 /. . . . . /1 2 2 2 /2 2 1 2 /2 2 1 1 /1 1 2 1 /"
9 | ],
10 | [
11 | "bkSizeGt5",
12 | "pzprv3/nibunnogo/4/4/. 1 . . . /. . . 1 . /. 0 . . . /. . . . 2 /. . . . . /2 1 2 2 /2 2 1 2 /2 2 1 1 /1 1 1 1 /"
13 | ],
14 | [
15 | "crShadeGt",
16 | "pzprv3/nibunnogo/4/4/. 1 . . . /. . . 1 . /. 0 . . . /. . . . 2 /. . . . . /2 1 2 2 /2 2 1 2 /1 2 1 1 /1 2 1 1 /"
17 | ],
18 | [
19 | "crShadeLt",
20 | "pzprv3/nibunnogo/4/4/. 1 . . . /. . . 1 . /. 0 . . . /. . . . 2 /. . . . . /2 1 2 2 /2 2 1 2 /2 2 1 1 /1 1 2 2 /"
21 | ],
22 | [
23 | "ceEmpty",
24 | "pzprv3/nibunnogo/4/4/. 1 . . . /. . . 1 . /. 0 . . . /. . . . 2 /. . . . . /2 1 2 2 /2 2 1 2 /2 2 0 1 /0 0 0 1 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/nibunnogo/4/4/. 1 . . . /. . . 1 . /. 0 . . . /. . . . 2 /. . . . . /2 1 2 2 /2 2 1 2 /2 2 1 1 /1 1 2 1 /"
29 | ]
30 | ]
31 | });
32 |
--------------------------------------------------------------------------------
/test/script/nikoji.js:
--------------------------------------------------------------------------------
1 | /* nikoji.js */
2 |
3 | ui.debug.addDebugData("nikoji", {
4 | url: "4/4/h1g2h3h2h43g",
5 | failcheck: [
6 | [
7 | "bkNumGe2",
8 | "pzprv3/nikoji/4/4/. . 1 . /2 . . 3 /. . 2 . /. 4 3 . /0 1 0 /0 0 0 /1 0 0 /0 1 0 /0 0 1 1 /1 0 0 0 /0 1 0 0 /"
9 | ],
10 | [
11 | "bkNoNum",
12 | "pzprv3/nikoji/4/4/. . 1 . /2 . . 3 /. . 2 . /. 4 3 . /0 0 0 /0 1 1 /0 1 0 /0 1 1 /1 1 0 1 /1 1 1 1 /0 0 1 1 /"
13 | ],
14 | [
15 | "bkDifferentShape",
16 | "pzprv3/nikoji/4/4/. . 1 . /2 . . 3 /. . 2 . /. 4 3 . /1 0 0 /0 1 1 /0 1 0 /0 1 0 /0 1 1 1 /1 1 0 1 /0 0 1 1 /"
17 | ],
18 | [
19 | "bkDifferentShape",
20 | "pzprv3/nikoji/4/4/. . 1 . /2 . . 3 /. . 2 . /. 4 3 . /1 0 0 /1 0 1 /1 1 0 /0 1 1 /0 1 1 1 /0 0 1 1 /1 0 1 0 /"
21 | ],
22 | [
23 | "bkDifferentOrientation",
24 | "pzprv3/nikoji/4/4/. . 1 . /2 . . 3 /. . 2 . /. 4 3 . /0 0 0 /1 0 1 /0 1 1 /0 1 0 /1 0 0 1 /1 1 1 0 /0 0 1 1 /"
25 | ],
26 | [
27 | "bkDifferentPosition",
28 | "pzprv3/nikoji/4/4/. . 1 . /2 . . 3 /. . 2 . /. 4 3 . /0 0 1 /1 1 0 /0 1 1 /0 1 0 /1 1 1 0 /1 0 1 1 /0 0 1 0 /"
29 | ],
30 | [
31 | "bkDifferentLetters",
32 | "pzprv3/nikoji/4/4/. . 1 . /2 . . 3 /. . 2 . /. 4 3 . /0 0 0 /0 1 1 /1 1 0 /0 1 1 /1 1 0 1 /1 0 1 1 /0 1 1 0 /"
33 | ],
34 | [
35 | "bdDeadEnd",
36 | "pzprv3/nikoji/2/4/. . . . /. 1 . 1 /0 1 0 /0 1 0 /1 0 0 0 /",
37 | { skiprules: true }
38 | ],
39 | [
40 | null,
41 | "pzprv3/nikoji/4/4/. . 1 . /2 . . 3 /. . 2 . /. 4 3 . /1 0 0 /0 1 1 /1 1 0 /0 1 1 /0 1 1 1 /1 0 0 1 /0 1 1 0 /"
42 | ]
43 | ],
44 | inputs: []
45 | });
46 |
--------------------------------------------------------------------------------
/test/script/nonogram.js:
--------------------------------------------------------------------------------
1 | /* nonogram.js */
2 |
3 | ui.debug.addDebugData("nonogram", {
4 | url: "6/6/12g1111h11112j12g11g21j11g3h",
5 | failcheck: [
6 | [
7 | // missing groups
8 | "exNoMatch",
9 | "pzprv3/nonogram/6/6/. . . . 1 . 1 . . /. . . 2 1 . 1 2 . /. . . 1 1 1 1 1 . /. 2 1 # # . # . . /. 1 1 # . . . # . /. 1 2 . # . # # . /. . . . . . . . . /. 1 1 # . . . . . /. . 3 . # # # . . /"
10 | ],
11 | [
12 | // group order
13 | "exNoMatch",
14 | "pzprv3/nonogram/6/6/. . . . 1 . 1 . . /. . . 2 1 . 1 2 . /. . . 1 1 1 1 1 . /. 2 1 . # . # # . /. 1 1 # . . . # . /. 1 2 # # . # . . /. . . . . . . . . /. 1 1 # . . . # . /. . 3 . # # # . . /"
15 | ],
16 | [
17 | // empty rows
18 | "exNoMatch",
19 | "pzprv3/nonogram/6/6/. . . . 1 . 1 . . /. . . 2 1 . 1 2 . /. . . 1 1 1 1 1 . /. 2 1 # # . # . . /. 1 1 # . . . # . /. 1 2 . # . # # . /. . . . . . . . # /. 1 1 # . . . # . /. . 3 . # # # . . /"
20 | ],
21 | [
22 | null,
23 | "pzprv3/nonogram/6/6/. . . . 1 . 1 . . /. . . 2 1 . 1 2 . /. . . 1 1 1 1 1 . /. 2 1 # # . # . . /. 1 1 # . . . # . /. 1 2 . # . # # . /. . . . . . . . . /. 1 1 # . . . # . /. . 3 . # # # . . /"
24 | ],
25 | [
26 | // Puzzle with width != height
27 | null,
28 | "pzprv3/nonogram/10/3/. . . . . /. . . 1 . /. . . 2 . /. . 4 1 3 /. . 1 1 4 /. 2 . # # /. 1 . . # /. 2 . # # /. 2 # # . /. 1 # . . /. 1 # . . /. 3 # # # /. 1 . . # /. 1 . . # /. 3 # # # /",
29 | { skiprules: true }
30 | ]
31 | ],
32 | inputs: [
33 | { input: ["newboard,5,1"] },
34 | {
35 | input: ["cursor,0,0", "mouse,leftx2, -5,1"],
36 | result: "pzprv3/nonogram/1/5/. . . . . . . . /1 . . . . . . . /"
37 | },
38 | {
39 | input: ["flushexcell"],
40 | result: "pzprv3/nonogram/1/5/. . . . . . . . /. . 1 . . . . . /"
41 | }
42 | ]
43 | });
44 |
--------------------------------------------------------------------------------
/test/script/norinori.js:
--------------------------------------------------------------------------------
1 | /* norinori.js */
2 |
3 | ui.debug.addDebugData("norinori", {
4 | url: "5/5/cag4ocjo",
5 | failcheck: [
6 | [
7 | "csGt2",
8 | "pzprv3/norinori/5/5/5/0 0 1 2 2 /1 1 1 2 2 /1 3 3 2 2 /3 3 3 3 3 /4 4 3 3 3 /# # . . . /. # . . . /. . . . . /. . . . . /. . . . . /"
9 | ],
10 | [
11 | "bkShadeGt2",
12 | "pzprv3/norinori/5/5/5/0 0 1 2 2 /1 1 1 2 2 /1 3 3 2 2 /3 3 3 3 3 /4 4 3 3 3 /# # + . # /+ + # # . /# . . . # /. . . . # /. . . . . /"
13 | ],
14 | [
15 | "csLt2",
16 | "pzprv3/norinori/5/5/5/0 0 1 2 2 /1 1 1 2 2 /1 3 3 2 2 /3 3 3 3 3 /4 4 3 3 3 /# # + + + /+ + # # + /# . . + . /+ + . . . /# # + . . /"
17 | ],
18 | [
19 | "bkShadeLt2",
20 | "pzprv3/norinori/5/5/5/0 0 1 2 2 /1 1 1 2 2 /1 3 3 2 2 /3 3 3 3 3 /4 4 3 3 3 /# # + + + /+ + # # + /# # + + . /+ + . . . /# # + . . /"
21 | ],
22 | [
23 | "bkNoShade",
24 | "pzprv3/norinori/5/5/5/0 0 1 2 2 /1 1 1 2 2 /1 3 3 2 2 /3 3 3 3 3 /4 4 3 3 3 /# # + + + /+ + + + + /+ + + + . /+ + . . . /# # + . . /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/norinori/5/5/5/0 0 1 2 2 /1 1 1 2 2 /1 3 3 2 2 /3 3 3 3 3 /4 4 3 3 3 /# # + + + /+ + # # + /# # + + # /+ + . . # /# # + . . /"
29 | ]
30 | ],
31 | inputs: [
32 | /* 問題入力はlitsと同じなので省略 */
33 | /* 回答入力テスト */
34 | { input: ["playmode", "newboard,4,4"] },
35 | {
36 | input: [
37 | "mouse,left, 4,0, 4,4, 2,4, 2,6",
38 | "mouse,left, 0,6, 6,6, 6,2, 8,2"
39 | ],
40 | result:
41 | "pzprv3/norinori/4/4/1/0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /. . # . /. . # . /. . . . /# # . . /"
42 | }
43 | ]
44 | });
45 |
--------------------------------------------------------------------------------
/test/script/norinuri.js:
--------------------------------------------------------------------------------
1 | /* norinuri.js */
2 |
3 | ui.debug.addDebugData("norinuri", {
4 | url: "6/6/1l4i.o1h5p4",
5 | failcheck: [
6 | [
7 | "csLt2",
8 | "pzprv3/norinuri/6/6/1 . . . . . /. 4 . . . - /. . . . . . /. . . 1 . . /5 . . . . . /. . . . . 4 /. # . . . . /# . . . . . /# . . . . . /. . . . . . /. . . . . . /. . . . . . /"
9 | ],
10 | [
11 | "csGt2",
12 | "pzprv3/norinuri/6/6/1 . . . . . /. 4 . . . - /. . . . . . /. . . 1 . . /5 . . . . . /. . . . . 4 /. # # # . . /# . . . . . /# . . . . . /. . . . . . /. . . . . . /. . . . . . /"
13 | ],
14 | [
15 | "bkNoNum",
16 | "pzprv3/norinuri/6/6/1 . . . . . /. 4 . . . - /. . . . . . /. . . 1 . . /5 . . . . . /. . . . . 4 /. . . . . . /. . . . . . /. . # . . . /. . # . . . /. # . # . . /. # . # . . /"
17 | ],
18 | [
19 | "bkNumGe2",
20 | "pzprv3/norinuri/6/6/1 . . . . . /. 4 . . . - /. . . . . . /. . . 1 . . /5 . . . . . /. . . . . 4 /. # # . . . /# . . # . . /# . . # . # /. # # . . # /. . . # # . /. # # . . . /"
21 | ],
22 | [
23 | "bkSizeNe",
24 | "pzprv3/norinuri/6/6/1 . . . . . /. 4 . . . - /. . . . . . /. . . 1 . . /5 . . . . . /. . . . . 4 /. # # . . . /# . . # . . /# . . # . . /. # # . # # /. . . # . . /. . . # . . /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/norinuri/6/6/1 . . . . . /. 4 . . . - /. . . . . . /. . . 1 . . /5 . . . . . /. . . . . 4 /. # # . . . /# . . # . . /# . . # . . /. # # . # # /. . . # . . /# # . # . . /"
29 | ]
30 | ],
31 | inputs: [] /* nurikabeと同じなので省略 */
32 | });
33 |
--------------------------------------------------------------------------------
/test/script/nuribou.js:
--------------------------------------------------------------------------------
1 | /* nuribou.js */
2 |
3 | ui.debug.addDebugData("nuribou", {
4 | url: "5/5/1g2l1g4r7",
5 | failcheck: [
6 | [
7 | "csWidthGt1",
8 | "pzprv3/nuribou/5/5/1 . 2 . . /. . . . 1 /. 4 . . . /. . . . . /. . . . 7 /. . . . . /# # # . . /. . # . . /. . # . . /. . . . . /"
9 | ],
10 | [
11 | "csCornerSize",
12 | "pzprv3/nuribou/5/5/1 . 2 . . /. . . . 1 /. 4 . . . /. . . . . /. . . . 7 /+ # + + # /# + # # + /. . + + # /. . . . . /. . . . . /"
13 | ],
14 | [
15 | "bkNoNum",
16 | "pzprv3/nuribou/5/5/1 . 2 . . /. . . . 1 /. 4 . . . /. . . . . /. . . . 7 /+ # + + # /# + # # + /# + + + # /. # . . . /. . # # . /"
17 | ],
18 | [
19 | "bkNumGe2",
20 | "pzprv3/nuribou/5/5/1 . 2 . . /. . . . 1 /. 4 . . . /. . . . . /. . . . 7 /+ # + + # /# + # # + /# + + + # /. . . . . /. . . . . /"
21 | ],
22 | [
23 | "bkSizeNe",
24 | "pzprv3/nuribou/5/5/1 . 2 . . /. . . . 1 /. 4 . . . /. . . . . /. . . . 7 /+ # + # . /+ # + # + /# + # . # /. . # . . /. . # . . /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/nuribou/5/5/1 . 2 . . /. . . . 1 /. 4 . . . /. . . . . /. . . . 7 /+ # + + # /# + # # + /# + + + # /+ # # # . /. . . . . /"
29 | ]
30 | ],
31 | inputs: [] /* nurikabeと同じなので省略 */
32 | });
33 |
--------------------------------------------------------------------------------
/test/script/nuritwin.js:
--------------------------------------------------------------------------------
1 | /* nuritwin.js */
2 |
3 | ui.debug.addDebugData("nuritwin", {
4 | url: "5/5/08qi3u4632h",
5 | failcheck: [
6 | [
7 | "bkSizeNe",
8 | "pzprv3/nuritwin/5/5/4/0 0 0 0 0 /0 0 0 1 1 /2 2 2 3 1 /2 2 3 3 1 /2 2 2 1 1 /3 . . . . /. . . 2 . /. . . . . /. . . . . /. . . . . /# . # # . /# . . # # /# # # # . /. . # . . /# # # # # /"
9 | ],
10 | [
11 | "bkUnitNe2",
12 | "pzprv3/nuritwin/5/5/4/0 0 0 0 0 /0 0 0 1 1 /2 2 2 3 1 /2 2 3 3 1 /2 2 2 1 1 /3 . . . . /. . . 2 . /. . . . . /. . . . . /. . . . . /# . # # # /# # . . # /. # # # # /. . . # . /. # # # # /"
13 | ],
14 | [
15 | "bkDifferentShape",
16 | "pzprv3/nuritwin/5/5/4/0 0 0 0 0 /0 0 0 1 1 /2 2 2 3 1 /2 2 3 3 1 /2 2 2 1 1 /3 . . . . /. . . 2 . /. . . . . /. . . . . /. . . . . /# . # # # /# # . . # /. # # # # /# . # . . /# # # # # /"
17 | ],
18 | [
19 | "csDivide",
20 | "pzprv3/nuritwin/5/5/4/0 0 0 0 0 /0 0 0 1 1 /2 2 2 3 1 /2 2 3 3 1 /2 2 2 1 1 /3 . . . . /. . . 2 . /. . . . . /. . . . . /. . . . . /# . # # # /# # . . # /# . . # # /# . # . . /. # # # # /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/nuritwin/5/5/4/0 0 0 0 0 /0 0 0 1 1 /2 2 2 3 1 /2 2 3 3 1 /2 2 2 1 1 /3 . . . . /. . . 2 . /. . . . . /. . . . . /. . . . . /# + # # # /# # + + # /+ # # # # /+ + # + + /+ # # # # /"
25 | ]
26 | ],
27 | inputs: []
28 | });
29 |
--------------------------------------------------------------------------------
/test/script/oneroom.js:
--------------------------------------------------------------------------------
1 | /* oneroom.js */
2 |
3 | ui.debug.addDebugData("oneroom", {
4 | url: "5/5/cpj600o01h0",
5 | failcheck: [
6 | [
7 | "brNoShade",
8 | "pzprv3/oneroom/5/5/4/0 0 1 2 2 /0 0 1 2 2 /0 0 1 2 2 /3 3 1 2 2 /3 3 1 2 2 /1 . . . . /. . . . . /. . . . . /0 . . . . /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /"
9 | ],
10 | [
11 | "csAdjacent",
12 | "pzprv3/oneroom/5/5/4/0 0 1 2 2 /0 0 1 2 2 /0 0 1 2 2 /3 3 1 2 2 /3 3 1 2 2 /1 . . . . /. . . . . /. . . . . /0 . . . . /. . . . . /. . # . . /. . . # . /. # . # . /. . . . . /. . # . . /"
13 | ],
14 | [
15 | "cuDivideRB",
16 | "pzprv3/oneroom/5/5/4/0 0 1 2 2 /0 0 1 2 2 /0 0 1 2 2 /3 3 1 2 2 /3 3 1 2 2 /1 . . . . /. . . . . /. . . . . /0 . . . . /. . . . . /. . . # . /. . . . . /. # . . # /. . . # . /. . # . . /"
17 | ],
18 | [
19 | "bkShadeNe",
20 | "pzprv3/oneroom/5/5/4/0 0 1 2 2 /0 0 1 2 2 /0 0 1 2 2 /3 3 1 2 2 /3 3 1 2 2 /1 . . . . /. . . . . /. . . . . /0 . . . . /. . . . . /# . # . . /. . . # . /. # . . . /. . . # . /. . # . . /"
21 | ],
22 | [
23 | "bkSubdivided",
24 | "pzprv3/oneroom/5/5/4/0 0 1 2 2 /0 0 1 2 2 /0 0 1 2 2 /3 3 1 2 2 /3 3 1 2 2 /1 . . . . /. . . . . /. . . . . /0 . . . . /. . . . . /. . . . . /. . # . . /. . . . . /. . . . . /. . . . . /"
25 | ],
26 | [
27 | "bdDoorsGt",
28 | "pzprv3/oneroom/5/5/4/0 0 1 2 2 /0 0 1 2 2 /0 0 1 2 2 /3 3 1 2 2 /3 3 1 2 2 /1 . . . . /. . . . . /. . . . . /0 . . . . /. . . . . /. . # . . /. . . . . /. # . # . /. . . . . /. . # . . /"
29 | ],
30 | [
31 | "bdDoorsGt",
32 | "pzprv3/oneroom/5/5/4/0 0 1 2 2 /0 0 1 2 2 /0 0 1 2 2 /3 3 1 2 2 /3 3 1 2 2 /1 . . . . /. . . . . /. . . . . /0 . . . . /. . . . . /. . # . . /. # . # . /. . . . . /. . . # . /. . # . . /"
33 | ],
34 | [
35 | null,
36 | "pzprv3/oneroom/5/5/4/0 0 1 2 2 /0 0 1 2 2 /0 0 1 2 2 /3 3 1 2 2 /3 3 1 2 2 /1 . . . . /. . . . . /. . . . . /0 . . . . /. . . . . /+ + # + + /+ + + # + /+ # + + + /+ + + # + /+ + # + + /"
37 | ]
38 | ]
39 | });
40 |
--------------------------------------------------------------------------------
/test/script/outofsight.js:
--------------------------------------------------------------------------------
1 | /* outofsight.js */
2 |
3 | ui.debug.addDebugData("outofsight", {
4 | url: "5/5/a2201b4141b01a12e1131b12a4242",
5 | failcheck: [
6 | [
7 | "brNoShade",
8 | "pzprv3/outofsight/5/5/. 2,2 0,1 . . /4,1 4,1 . . 0,1 /. 1,2 . . . /. . 1,1 3,1 . /. 1,2 . 4,2 4,2 /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /"
9 | ],
10 | [
11 | "cuDivideRB",
12 | "pzprv3/outofsight/5/5/. 2,2 0,1 . . /4,1 4,1 . . 0,1 /. 1,2 . . . /. . 1,1 3,1 . /. 1,2 . 4,2 4,2 /. . . . . /# . . . # /. # . . . /. . # . . /. # . . # /"
13 | ],
14 | [
15 | "csAdjacent",
16 | "pzprv3/outofsight/5/5/. 2,2 0,1 . . /4,1 4,1 . . 0,1 /. 1,2 . . . /. . 1,1 3,1 . /. 1,2 . 4,2 4,2 /. . # . . /# . . . # /. # . . . /. . . # . /. # . # . /"
17 | ],
18 | [
19 | "anShadeNe",
20 | "pzprv3/outofsight/5/5/. 2,2 0,1 . . /4,1 4,1 . . 0,1 /. 1,2 . . . /. . 1,1 3,1 . /. 1,2 . 4,2 4,2 /. # . . . /. . . . # /. # . . . /. . # . . /. # . . # /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/outofsight/5/5/. 2,2 0,1 . . /4,1 4,1 . . 0,1 /. 1,2 . . . /. . 1,1 3,1 . /. 1,2 . 4,2 4,2 /+ + # + + /# + + + # /+ # + + + /+ + + # + /+ # + + # /"
25 | ]
26 | ],
27 | inputs: []
28 | });
29 |
--------------------------------------------------------------------------------
/test/script/pentatouch.js:
--------------------------------------------------------------------------------
1 | /* pentatouch.js */
2 |
3 | ui.debug.addDebugData("pentatouch", {
4 | url: "7/6/131a0a//t",
5 | failcheck: [
6 | [
7 | "bankGt",
8 | "pzprv3/pentatouch/6/7/t/. . . . . . . . /. . 1 . . . 1 . /. . 1 . . . . . /. . . . . . . . /. 1 1 . . . . . /. . . . . . . . /. . . . . . . . /# # . . . . . /# . # # . # . /# . . # . # # /. . . # . . # /. . . . . . . /. . . # # # # /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bankLt",
12 | "pzprv3/pentatouch/6/7/t/. . . . . . . . /. . 1 . . . . . /. . 1 . . . . . /. . . . . . . . /. 1 1 . . . . . /. . . . . . . . /. . . . . . . . /. . # # # # . /# # . . . . . /# . # # . . . /# . # # . . . /. # . . . . . /# # # . . . . /0 0 0 0 0 /"
13 | ],
14 | [
15 | "shDiag",
16 | "pzprv3/pentatouch/6/7/t/. . . . . . . . /. . 1 . . . 1 . /. . 1 . . . . . /. . . . . . . . /. 1 1 . . . . . /. . . . . . . . /. . . . . . . . /. . . . # . . /. . . . # # . /. . # # . # . /. . # # . . . /. # . . . . . /# # # . . . . /0 0 0 0 0 /"
17 | ],
18 | [
19 | "shNoDiag",
20 | "pzprv3/pentatouch/6/7/t/. . . . . . . . /. . 1 . . . 1 . /. . 1 . . . . . /. . . . . . . . /. 1 1 . . . . . /. . . . . . . . /. . . . . . . . /. . # # # # . /. # . . . . . /# # . # # . . /# . . # # . # /. # . . . . # /# # # . . # # /0 0 0 0 0 /"
21 | ],
22 | [
23 | "bankInvalid",
24 | "pzprv3/pentatouch/6/7/t/. . . . . . . . /. . 1 . . . 1 . /. . 1 . . . . . /. . . . . . . . /. 1 1 . . . . . /. . . . . . . . /. . . . . . . . /. . . . . . # /. . # # # # . /# # . . . . . /# . . . # # . /. # . . # # . /# # # . . . . /0 0 0 0 0 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/pentatouch/6/7/t/. . . . . . . . /. . 1 . . . 1 . /. . 1 . . . . . /. . . . . . . . /. 1 1 . . . . . /. . . . . . . . /. . . . . . . . /+ + # # # # + /# # + + + + # /# + # # + # # /# + # # + # + /+ # + + + + + /# # # + + + + /0 0 0 0 0 /"
29 | ]
30 | ]
31 | });
32 |
--------------------------------------------------------------------------------
/test/script/ququ.js:
--------------------------------------------------------------------------------
1 | ui.debug.addDebugData("ququ", {
2 | url: "2/2/i13k1i.g",
3 | failcheck: [
4 | [
5 | "bkNoNum",
6 | "pzprv3/ququ/2/2/. 3 /. . . . /1 . /. . /. 1 . - /. . /. . /# # . . /. . /# . /. . # . /# . /"
7 | ],
8 | [
9 | "bkNumGe2",
10 | "pzprv3/ququ/2/2/. 3 /. . . . /1 . /. . /. 1 . - /. . /# . /# # # . /. . /# . /# . . . /# . /"
11 | ],
12 | [
13 | "bkSizeNe",
14 | "pzprv3/ququ/2/2/. 3 /. . . . /1 . /. . /. 1 . - /. . /# . /# # # . /. # /# # /# . . . /# # /"
15 | ],
16 | [
17 | "bsSameShape",
18 | "pzprv3/ququ/2/2/. 3 /. . . . /1 . /. . /. 1 . - /. . /. . /. . # . /. # /# . /# . . . /. . /"
19 | ],
20 | [
21 | null,
22 | "pzprv3/ququ/2/2/. 3 /. . . . /1 . /. . /. 1 . - /. . /# + /# # # + /+ + /# # /# + # + /# + /"
23 | ],
24 | [
25 | null,
26 | "pzprv3/ququ/2/3/2 3 4 /. . . . . . /. . . /. . . /. . . . . . /. . . /+ + + /+ # + # + # /# + + /# # + /# # # # # # /# # # /",
27 | { skiprules: true }
28 | ]
29 | ]
30 | });
31 |
--------------------------------------------------------------------------------
/test/script/renban.js:
--------------------------------------------------------------------------------
1 | /* renban.js */
2 |
3 | ui.debug.addDebugData("renban", {
4 | url: "4/4/vmok3g1p5g2h",
5 | failcheck: [
6 | [
7 | "bkDupNum",
8 | "pzprv3/renban/4/4/1 1 1 /1 1 1 /0 1 1 /0 1 1 /1 0 1 0 /0 0 0 0 /1 1 1 0 /1 . . . /. . . . /. . . 5 /. 2 . . /. 3 . . /2 . . . /. 3 . . /. . . . /"
9 | ],
10 | [
11 | "ceNoNum",
12 | "pzprv3/renban/4/4/1 1 1 /1 1 1 /0 1 1 /0 1 1 /1 0 1 0 /0 0 0 0 /1 1 1 0 /1 . . . /. . . . /. . . 5 /. . . . /. 3 . . /2 . . . /. 5 . . /4 . . . /"
13 | ],
14 | [
15 | "bkNotSeqNum",
16 | "pzprv3/renban/4/4/1 1 1 /1 1 1 /0 1 1 /0 1 1 /1 0 1 0 /0 0 0 0 /1 1 1 0 /1 . . . /. . . . /. . . 5 /. 2 . . /. 3 . . /2 . . . /. 5 . . /4 . . . /"
17 | ],
18 | [
19 | "cbDiffLenNe",
20 | "pzprv3/renban/4/4/1 1 1 /1 1 1 /0 1 1 /0 1 1 /1 0 1 0 /0 0 0 0 /1 1 1 0 /1 . . . /. . . . /. . . 5 /. 2 . . /. 3 7 . /2 4 8 . /6 5 9 . /3 . 7 . /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/renban/4/4/1 1 1 /1 1 1 /0 1 1 /0 1 1 /1 0 1 0 /0 0 0 0 /1 1 1 0 /1 . . . /. . . . /. . . 5 /. 2 . . /. 3 7 3 /2 4 8 4 /6 5 9 . /3 . 6 2 /"
25 | ]
26 | ],
27 | inputs: [
28 | /* 問題入力, 回答入力はripple, bosanowaとだいたい同じなので省略 */
29 | ]
30 | });
31 |
--------------------------------------------------------------------------------
/test/script/roundtrip.js:
--------------------------------------------------------------------------------
1 | /* roundtrip.js */
2 |
3 | ui.debug.addDebugData("roundtrip", {
4 | url: "5/5/243j234h332333h",
5 | failcheck: [
6 | [
7 | "lnBranch",
8 | "pzprv3/roundtrip/5/5/. 2 4 3 . . . /. . . . . . 3 /. . . . . . 3 /3 . . . . . 3 /3 . . . . . . /2 . . . . . . /. . . 2 3 4 . /0 0 1 1 /0 0 0 0 /0 0 1 1 /0 0 1 1 /0 1 0 0 /0 0 1 0 1 /0 0 1 0 1 /0 0 0 0 1 /0 0 1 0 0 /"
9 | ],
10 | [
11 | "nmSightNe",
12 | "pzprv3/roundtrip/5/5/. 2 4 3 . . . /. . . . . . 3 /. . . . . . 3 /3 . . . . . 3 /3 . . . . . . /2 . . . . . . /. . . 2 3 4 . /0 0 1 1 /0 1 1 0 /1 1 0 0 /1 1 0 0 /0 1 0 1 /0 0 1 0 1 /0 1 1 1 1 /1 1 0 1 1 /0 1 1 1 1 /"
13 | ],
14 | [
15 | "nmSightNe",
16 | "pzprv3/roundtrip/5/5/. 2 4 3 . . . /. . . . . . 3 /. . . . . . 3 /3 . . . . . 3 /3 . . . . . . /2 . . . . . . /. . . 2 3 4 . /0 0 1 1 /0 1 1 0 /1 1 0 0 /1 1 0 1 /0 1 0 0 /0 0 1 0 1 /0 0 1 1 1 /1 0 0 1 1 /0 0 1 0 0 /"
17 | ],
18 | [
19 | "lnPlLoop",
20 | "pzprv3/roundtrip/5/5/. . . . . . . /. . . . . . . /. . . . . . . /. . . . . . . /. . . . . . . /. . . . . . . /. . . . . . . /0 0 0 1 /0 1 0 0 /1 1 0 0 /1 1 0 1 /0 1 0 0 /0 0 0 1 1 /0 1 1 1 1 /1 1 0 1 1 /0 1 1 0 0 /"
21 | ],
22 | [
23 | "lnDeadEnd",
24 | "pzprv3/roundtrip/5/5/. 2 4 3 . . . /. . . . . . 3 /. . . . . . 3 /3 . . . . . 3 /3 . . . . . . /2 . . . . . . /. . . 2 3 4 . /0 0 1 1 /0 1 1 0 /1 1 0 0 /1 1 0 0 /0 1 0 0 /0 0 1 0 1 /0 1 1 1 1 /1 1 0 1 1 /0 1 1 0 0 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/roundtrip/5/5/. 2 4 3 . . . /. . . . . . 3 /. . . . . . 3 /3 . . . . . 3 /3 . . . . . . /2 . . . . . . /. . . 2 3 4 . /0 0 1 1 /0 1 1 0 /1 1 0 0 /1 1 0 1 /0 1 0 0 /0 0 1 0 1 /0 1 1 1 1 /1 1 0 1 1 /0 1 1 0 0 /"
29 | ]
30 | ],
31 | inputs: []
32 | });
33 |
--------------------------------------------------------------------------------
/test/script/sashikazune.js:
--------------------------------------------------------------------------------
1 | /* sashikazune.js */
2 |
3 | ui.debug.addDebugData("sashikazune", {
4 | url: "6/6/3k4h345r1g3h2l",
5 | failcheck: [
6 | [
7 | "bkNotLshape",
8 | "pzprv3/sashikazune/6/6/3 . . . . . /4 . . 3 4 5 /. . . . . . /. . . . . . /1 . 3 . . 2 /. . . . . . /0 0 1 0 1 /1 1 1 0 1 /1 0 1 0 1 /0 1 0 0 1 /0 1 0 0 1 /0 0 0 0 0 /1 1 0 0 0 0 /0 0 1 0 0 0 /0 1 1 0 0 0 /0 0 0 0 0 0 /1 1 1 1 1 0 /"
9 | ],
10 | [
11 | "nmDistNe",
12 | "pzprv3/sashikazune/6/6/3 . . . . . /4 . . 3 4 5 /. . . . . . /. . . . . . /1 . 3 . . 2 /. . . . . . /1 0 0 0 0 /1 0 0 0 0 /0 0 1 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 0 /0 1 1 0 0 0 /1 1 1 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /"
13 | ],
14 | [
15 | "bkNumGt2",
16 | "pzprv3/sashikazune/6/6/3 . . . . . /4 . . 3 4 5 /. . . . . . /. . . . . . /1 . 3 . . 2 /. . . . . . /0 0 0 0 0 /1 0 0 0 0 /1 0 0 0 0 /1 0 0 0 0 /0 0 1 0 0 /0 0 0 0 0 /1 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 1 1 0 0 0 /1 1 1 0 0 0 /"
17 | ],
18 | [
19 | "bdDeadEnd",
20 | "pzprv3/sashikazune/6/6/3 . . . . . /4 . . 3 4 5 /. . . . . . /. . . . . . /1 . 3 . . 2 /. . . . . . /0 0 0 0 1 /0 0 0 0 1 /0 0 0 0 1 /0 0 0 0 1 /0 0 0 0 1 /0 0 0 0 0 /1 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /1 1 1 1 1 0 /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/sashikazune/6/6/3 . . . . . /4 . . 3 4 5 /. . . . . . /. . . . . . /1 . 3 . . 2 /. . . . . . /0 0 1 1 1 /1 1 1 1 1 /1 0 1 1 1 /1 0 0 1 1 /0 1 0 0 1 /0 0 0 0 0 /1 1 0 0 0 0 /0 0 1 0 0 0 /0 1 1 0 0 0 /0 1 1 1 0 0 /1 1 1 1 1 0 /"
25 | ]
26 | ],
27 | inputs: [
28 | {
29 | input: [
30 | "newboard,2,1",
31 | "playmode,diraux",
32 | "mouse,left,1,1,3,1",
33 | "mouse,left,1,1,1,3"
34 | ],
35 | result: "pzprv3/sashikazune/1/2/. . /0 /40 0 /"
36 | },
37 | {
38 | input: ["mouse,left,1,1,3,1"],
39 | result: "pzprv3/sashikazune/1/2/. . /0 /8 0 /"
40 | }
41 | ]
42 | });
43 |
--------------------------------------------------------------------------------
/test/script/simplegako.js:
--------------------------------------------------------------------------------
1 | /* simplegako.js */
2 |
3 | ui.debug.addDebugData("simplegako", {
4 | url: "4/4/k5g12g2k",
5 | failcheck: [
6 | [
7 | "nmCountLt",
8 | "pzprv3/simplegako/4/4/. . . . /. 5 . 1 /2 . 2 . /. . . . /5 5 . . /5 . . . /. 5 . . /5 5 . . /"
9 | ],
10 | [
11 | "nmCountGt",
12 | "pzprv3/simplegako/4/4/. . . . /. 5 . 1 /2 . 2 . /. . . . /5 5 5 . /5 . 5 . /. 2 . . /5 5 5 . /"
13 | ],
14 | [
15 | "ceNoNum",
16 | "pzprv3/simplegako/4/4/. . . . /. 5 . 1 /2 . 2 . /. . . . /5 5 5 . /5 . 5 . /. 1 . . /5 5 5 . /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/simplegako/4/4/. . . . /. 5 . 1 /2 . 2 . /. . . . /5 5 5 3 /5 . 5 . /. 1 . 3 /5 5 5 3 /"
21 | ]
22 | ],
23 | inputs: [
24 | {
25 | label: "Click",
26 | input: [
27 | "newboard,2,2",
28 | "playmode",
29 | "cursor,1,1",
30 | "mouse,left,1,1",
31 | "mouse,left,1,1",
32 | "cursor,3,3",
33 | "mouse,right,3,3"
34 | ],
35 | result: "pzprv3/simplegako/2/2/. . /. . /2 . /. 3 /"
36 | },
37 | {
38 | label: "Drag",
39 | input: ["mouse,left,1,1,3,1,3,3"],
40 | result: "pzprv3/simplegako/2/2/. . /. . /2 2 /. 2 /"
41 | }
42 | ]
43 | });
44 |
--------------------------------------------------------------------------------
/test/script/simpleloop.js:
--------------------------------------------------------------------------------
1 | ui.debug.addDebugData("simpleloop", {
2 | url: "5/5/sg020",
3 | failcheck: [
4 | [
5 | "lnBranch",
6 | "pzprv3/simpleloop/5/5/* * * . . /* . . . . /. . . . . /. . . * . /. . . . . /0 0 0 0 /0 0 1 1 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 0 /0 0 0 1 0 /0 0 0 0 0 /0 0 0 0 0 /"
7 | ],
8 | [
9 | "lnCross",
10 | "pzprv3/simpleloop/5/5/* * * . . /* . . . . /. . . . . /. . . * . /. . . . . /0 0 0 0 /0 0 1 1 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 1 0 /0 0 0 1 0 /0 0 0 0 0 /0 0 0 0 0 /"
11 | ],
12 | [
13 | "lnDeadEnd",
14 | "pzprv3/simpleloop/5/5/* * * . . /* . . . . /. . . . . /. . . * . /. . . . . /0 0 0 0 /0 0 1 0 /0 1 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 0 /0 0 1 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
15 | ],
16 | [
17 | "ceNoLine",
18 | "pzprv3/simpleloop/5/5/* * * . . /* . . . . /. . . . . /. . . * . /. . . . . /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
19 | ],
20 | [
21 | null,
22 | "pzprv3/simpleloop/5/5/* * * . . /* . . . . /. . . . . /. . . * . /. . . . . /0 0 0 1 /0 1 0 0 /1 0 1 0 /0 1 0 0 /1 0 1 1 /0 0 0 1 1 /0 1 1 1 1 /1 0 0 0 1 /1 1 1 0 1 /"
23 | ]
24 | ]
25 | });
26 |
--------------------------------------------------------------------------------
/test/script/skyscrapers.js:
--------------------------------------------------------------------------------
1 | /* skyscrapers.js */
2 |
3 | ui.debug.addDebugData("skyscrapers", {
4 | url: "4/4/k13h4j3g",
5 | failcheck: [
6 | [
7 | "nmDupRow",
8 | "pzprv3/skyscrapers/4/4/. . . . . . /. . . . . . /4 1 2 3 3 . /. . . . . 3 /. . . . . . /. . 1 3 . . /"
9 | ],
10 | [
11 | "nmSightNe",
12 | "pzprv3/skyscrapers/4/4/. . . . . . /. . . . . . /4 1 2 3 4 . /. 4 . . . 3 /. . 4 . . . /. . 1 3 . . /"
13 | ],
14 | [
15 | "ceNoNum",
16 | "pzprv3/skyscrapers/4/4/. . . . . . /. . 1 4 3 . /4 1 2 3 4 . /. 4 3 1 2 3 /. 3 4 2 1 . /. . 1 3 . . /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/skyscrapers/4/4/. . . . . . /. 2 1 4 3 . /4 1 2 3 4 . /. 4 q3 1 2 3 /. 3 4 2 1 . /. . 1 3 . . /",
21 | { skiprules: true }
22 | ],
23 | [
24 | null,
25 | "pzprv3/skyscrapers/4/4/. . . . . . /. 2 1 4 3 . /4 1 2 3 4 . /. 4 3 1 2 3 /. 3 4 2 1 . /. . 1 3 . . /"
26 | ]
27 | ],
28 | inputs: [
29 | {
30 | input: [
31 | "newboard,3,3",
32 | "editmode",
33 | "cursor,3,-1",
34 | "key,2",
35 | "cursor,3,3",
36 | "mouse,leftx2,3,3"
37 | ],
38 | result:
39 | "pzprv3/skyscrapers/3/3/. . 2 . . /. . . . . /. . q1 . . /. . . . . /. . . . . /"
40 | },
41 | {
42 | input: ["playmode", "cursor,1,3", "key,3,right,3,right,3"],
43 | result:
44 | "pzprv3/skyscrapers/3/3/. . 2 . . /. . . . . /. 3 q1 3 . /. . . . . /. . . . . /"
45 | }
46 | ]
47 | });
48 |
--------------------------------------------------------------------------------
/test/script/smullyan.js:
--------------------------------------------------------------------------------
1 | /* smullyan.js */
2 |
3 | ui.debug.addDebugData("smullyan", {
4 | url: "5/5/1122120322233212322211112",
5 | failcheck: [
6 | [
7 | "csAdjacent",
8 | "pzprv3/smullyan/5/5/1 1 2 2 1 /2 0 3 2 2 /2 3 3 2 1 /2 3 2 2 2 /1 1 1 1 2 /. . . . . /. # . . . /# . . . . /# . . . . /. . # . . /"
9 | ],
10 | [
11 | "cuDivideRB",
12 | "pzprv3/smullyan/5/5/1 1 2 2 1 /2 0 3 2 2 /2 3 3 2 1 /2 3 2 2 2 /1 1 1 1 2 /. . . . . /. . . . . /. # . . . /# . # . . /. . . # . /"
13 | ],
14 | [
15 | "nmShadeGt",
16 | "pzprv3/smullyan/5/5/1 1 2 2 1 /2 0 3 2 2 /2 3 3 2 1 /2 3 2 2 2 /1 1 1 1 2 /. . . # . /. # . . . /. . # . # /. # . # . /. . . . . /"
17 | ],
18 | [
19 | "nmShadeEq",
20 | "pzprv3/smullyan/5/5/1 1 2 2 1 /2 0 3 2 2 /2 3 3 2 1 /2 3 2 2 2 /1 1 1 1 2 /. . . . # /. # . # . /# . . . . /. # . . # /. . . . . /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/smullyan/5/5/1 1 2 2 1 /2 0 3 2 2 /2 3 3 2 1 /2 3 2 2 2 /1 1 1 1 2 /+ + + # + /+ # + + + /# + + # + /+ # + + + /+ + + + # /"
25 | ]
26 | ]
27 | });
28 |
--------------------------------------------------------------------------------
/test/script/snake.js:
--------------------------------------------------------------------------------
1 | /* snake.js */
2 |
3 | ui.debug.addDebugData("snake", {
4 | url: "4/4/060300g1h4i",
5 | failcheck: [
6 | [
7 | "csDivide",
8 | "pzprv3/snake/4/4/. . 1 . . /4 4 4 4 4 /. 6 0 0 0 /. 0 0 5 4 /. 0 0 4 0 /"
9 | ],
10 | [
11 | "shBranch",
12 | "pzprv3/snake/4/4/. . 1 . . /4 4 4 4 4 /. 6 0 4 0 /. 0 0 5 0 /. 0 0 4 0 /"
13 | ],
14 | [
15 | "cs2x2",
16 | "pzprv3/snake/4/4/. . 1 . . /4 4 4 4 4 /. 6 0 4 4 /. 0 0 5 0 /. 0 0 4 0 /"
17 | ],
18 | [
19 | "exShadeNe",
20 | "pzprv3/snake/4/4/. . 1 . . /4 4 4 4 0 /. 6 0 4 0 /. 0 0 5 0 /. 0 0 4 0 /"
21 | ],
22 | [
23 | "circleUnshade",
24 | "pzprv3/snake/4/4/. . 1 . . /4 4 4 4 4 /. 6 0 0 0 /. 0 0 1 0 /. 0 0 0 0 /"
25 | ],
26 | [
27 | "shLoop",
28 | "pzprv3/snake/4/4/. . . . . /4 4 4 4 4 /. 4 0 0 4 /. 4 0 5 4 /. 4 4 4 0 /"
29 | ],
30 | [
31 | "shEndpoint",
32 | "pzprv3/snake/4/4/. . 1 . . /4 4 4 4 4 /. 6 0 0 4 /. 4 0 5 4 /. 4 0 4 0 /"
33 | ],
34 | [
35 | "shMidpoint",
36 | "pzprv3/snake/4/4/. . 1 . . /4 4 4 4 4 /. 6 0 0 4 /. 0 0 5 4 /. 0 0 0 0 /"
37 | ],
38 | [
39 | "shDiag",
40 | "pzprv3/snake/4/4/. . 1 . . /4 0 0 0 0 /. 6 4 0 4 /. 0 0 5 4 /. 0 0 4 0 /"
41 | ],
42 | [
43 | null,
44 | "pzprv3/snake/4/4/. . 1 . . /4 4 4 4 4 /. 6 0 0 4 /. 0 0 5 4 /. 0 0 4 0 /"
45 | ]
46 | ],
47 | inputs: [
48 | {
49 | input: ["newboard,2,2", "editmode,number", "mouse,rightx2,3,-1"],
50 | result: "pzprv3/snake/2/2/. . 2 /. 0 0 /. 0 0 /"
51 | },
52 | {
53 | input: ["playmode", "mouse,left,3,-1", "mouse,right,3,3"],
54 | result: "pzprv3/snake/2/2/. . c2 /. 0 0 /. 0 8 /"
55 | },
56 | {
57 | input: ["editmode,auto", "cursor,-1,1", "key,1,right,1"],
58 | result: "pzprv3/snake/2/2/. . c2 /1 1 0 /. 0 8 /"
59 | }
60 | ]
61 | });
62 |
--------------------------------------------------------------------------------
/test/script/squarejam.js:
--------------------------------------------------------------------------------
1 | /* squarejam.js */
2 |
3 | ui.debug.addDebugData("squarejam", {
4 | url: "6/6/i3s32s1i",
5 | failcheck: [
6 | [
7 | "bkNotSquare",
8 | "pzprv3/squarejam/6/6/. . . 3 . . /. . . . . . /. . . . . 3 /2 . . . . . /. . . . . . /. . 1 . . . /0 1 0 0 0 /0 1 0 0 0 /0 1 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /0 0 1 1 1 1 /0 0 0 0 0 0 /0 0 0 0 0 0 /"
9 | ],
10 | [
11 | "bkSideNe",
12 | "pzprv3/squarejam/6/6/. . . 3 . . /. . . . . . /. . . . . 3 /2 . . . . . /. . . . . . /. . 1 . . . /1 0 1 0 0 /1 0 1 0 0 /0 0 1 0 0 /0 0 1 0 0 /0 0 1 0 0 /1 1 1 0 0 /1 0 0 0 0 0 /1 1 1 0 0 0 /0 0 0 1 1 1 /0 0 0 0 0 0 /1 1 1 0 0 0 /"
13 | ],
14 | [
15 | "bdCross",
16 | "pzprv3/squarejam/6/6/. . . 3 . . /. . . . . . /. . . . . 3 /2 . . . . . /. . . . . . /. . 1 . . . /0 0 1 0 0 /0 0 1 0 0 /0 0 1 0 0 /0 1 0 1 1 /0 1 0 1 0 /1 1 1 1 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /1 1 1 1 1 1 /0 0 0 0 1 1 /1 1 1 1 0 0 /"
17 | ],
18 | [
19 | "bdDeadEnd",
20 | "pzprv3/squarejam/6/6/. . . 3 . . /. . . . . . /. . . . . 3 /2 . . . . . /. . . . . . /. . 1 . . . /1 1 1 0 0 /1 0 1 0 0 /0 1 1 0 0 /0 1 0 1 1 /0 1 0 1 0 /0 1 1 1 0 /1 0 0 0 0 0 /1 1 1 0 0 0 /0 0 1 1 1 1 /1 1 0 0 1 1 /0 0 1 1 0 0 /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/squarejam/6/6/. . . 3 . . /. . . . . . /. . . . . 3 /2 . . . . . /. . . . . . /. . 1 . . . /1 0 1 0 0 /1 0 1 0 0 /0 1 1 0 0 /0 1 0 1 1 /0 1 0 1 0 /0 1 1 1 0 /1 0 0 0 0 0 /1 1 1 0 0 0 /0 0 1 1 1 1 /1 1 0 0 1 1 /0 0 1 1 0 0 /"
25 | ]
26 | ]
27 | });
28 |
--------------------------------------------------------------------------------
/test/script/statuepark-aux.js:
--------------------------------------------------------------------------------
1 | /* statuepark-aux.js */
2 |
3 | ui.debug.addDebugData("statuepark-aux", {
4 | url: "4/4/23bg",
5 | failcheck: [[null, "pzprv3/statuepark-aux/4/4/23bg"]],
6 | inputs: []
7 | });
8 |
--------------------------------------------------------------------------------
/test/script/subomino.js:
--------------------------------------------------------------------------------
1 | /* subomino.js */
2 |
3 | ui.debug.addDebugData("subomino", {
4 | url: "5/5/3j6j3i4o410000",
5 | failcheck: [
6 | [
7 | "bkSizeNe",
8 | "pzprv3/subomino/5/5/3 . . . * /6 . . . . /3 . . . 4 /. . . . . /. . . . 4 /0 0 0 1 0 0 /0 0 1 0 1 0 /0 1 0 1 1 0 /0 1 1 1 1 0 /0 1 0 0 1 0 /0 0 0 0 0 /1 1 1 0 0 /1 0 1 0 0 /0 1 0 1 0 /0 0 1 0 0 /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bkOverlap",
12 | "pzprv3/subomino/5/5/3 . . . * /6 . . . . /3 . . . 4 /. . . . . /. . . . 4 /0 0 0 1 0 0 /0 0 0 0 1 0 /0 1 1 1 0 0 /0 1 0 0 1 0 /0 1 0 0 0 0 /0 0 0 0 0 /1 1 1 0 0 /1 1 0 1 0 /0 0 1 1 0 /0 1 1 1 1 /0 0 0 0 0 /"
13 | ],
14 | [
15 | null,
16 | "pzprv3/subomino/5/5/3 . . . * /6 . . . . /3 . . . 4 /. . . . . /. . . . 4 /0 0 0 1 0 0 /0 0 1 0 1 0 /0 1 0 1 1 0 /0 1 1 0 1 0 /0 1 0 0 1 0 /0 0 0 0 0 /1 1 1 0 0 /1 0 1 0 0 /0 1 0 1 0 /0 0 1 1 0 /0 0 0 0 0 /"
17 | ]
18 | ],
19 | inputs: [
20 | {
21 | input: ["newboard,3,3", "editmode", "cursor,3,3", "mouse,right,3,3"],
22 | result:
23 | "pzprv3/subomino/3/3/. . . /. 9 . /. . . /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 /0 0 0 /0 0 0 /0 0 0 /"
24 | },
25 | {
26 | input: ["editmode,clear", "mouse,left,3,3"],
27 | result:
28 | "pzprv3/subomino/3/3/. . . /. . . /. . . /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 /0 0 0 /0 0 0 /0 0 0 /"
29 | }
30 | ]
31 | });
32 |
--------------------------------------------------------------------------------
/test/script/sudoku.js:
--------------------------------------------------------------------------------
1 | /* sudoku.js */
2 |
3 | ui.debug.addDebugData("sudoku", {
4 | url: "4/4/g1k23k3g",
5 | failcheck: [
6 | [
7 | "bkDupNum",
8 | "pzprv3/sudoku/4/. 1 . . /. . . 2 /3 . . . /. . 3 . /. . . . /1 . . . /. . . . /. . . . /"
9 | ],
10 | [
11 | "nmDupRow",
12 | "pzprv3/sudoku/4/. 1 . . /. . . 2 /3 . . . /. . 3 . /. . . . /. . . . /. . . . /. 1 . . /"
13 | ],
14 | [
15 | "ceNoNum",
16 | "pzprv3/sudoku/4/. 1 . . /. . . 2 /3 . . . /. . 3 . /2 . . . /. . . . /. 4 2 . /1 2 . . /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/sudoku/4/. 1 . . /. . . 2 /3 . . . /. . 3 . /2 . 4 3 /4 3 1 . /. 4 2 1 /1 2 . 4 /"
21 | ]
22 | ],
23 | inputs: [
24 | /* 問題入力はhitoriと同じなので省略 */
25 | /* 回答入力はminarismと同じなので省略 */
26 | ]
27 | });
28 |
--------------------------------------------------------------------------------
/test/script/sukororoom.js:
--------------------------------------------------------------------------------
1 | /* sukororoom.js */
2 |
3 | ui.debug.addDebugData("sukororoom", {
4 | url: "5/5/4vjbtnfpb3i2i3b",
5 | failcheck: [
6 | ["brNoValidNum", "pzprv3/sukororoom/5/5"],
7 | [
8 | "bkDupNum",
9 | "pzprv3/sukororoom/5/5/0 0 1 0 /0 1 1 1 /1 1 1 0 /0 1 1 0 /1 0 1 1 /1 1 1 0 1 /1 0 1 1 1 /0 1 1 1 1 /1 1 0 0 1 /. . 3 . . /. . . . . /. . 2 . . /. . . . . /. . 3 . . /3 . . . . /. . . . . /. . . . . /. . . . . /. . . . . /"
10 | ],
11 | [
12 | "bkMixed",
13 | "pzprv3/sukororoom/5/5/0 0 1 0 /0 1 1 1 /1 1 1 0 /0 1 1 0 /1 0 1 1 /1 1 1 0 1 /1 0 1 1 1 /0 1 1 1 1 /1 1 0 0 1 /. . 3 . . /. . . . . /. . 2 . . /. . . . . /. . 3 . . /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /"
14 | ],
15 | [
16 | "nmNumberNe",
17 | "pzprv3/sukororoom/5/5/0 0 1 0 /0 1 1 1 /1 1 1 0 /0 1 1 0 /1 0 1 1 /1 1 1 0 1 /1 0 1 1 1 /0 1 1 1 1 /1 1 0 0 1 /. . 3 . . /. . . . . /. . 2 . . /. . . . . /. . 3 . . /1 4 . . . /. . . . . /. . . . . /. . + . . /. + . . . /"
18 | ],
19 | [
20 | "nmDivide",
21 | "pzprv3/sukororoom/5/5/0 0 1 0 /0 1 1 1 /1 1 1 0 /0 1 1 0 /1 0 1 1 /1 1 1 0 1 /1 0 1 1 1 /0 1 1 1 1 /1 1 0 0 1 /. . 3 . . /. . . . . /. . . . . /. . . . . /. . 3 . . /1 2 . + + /- - + + . /. - . . . /. . + + + /. + . + . /"
22 | ],
23 | [
24 | "ceSuspend",
25 | "pzprv3/sukororoom/5/5/0 0 1 0 /0 1 1 1 /1 1 1 0 /0 1 1 0 /1 0 1 1 /1 1 1 0 1 /1 0 1 1 1 /0 1 1 1 1 /1 1 0 0 1 /. . 3 . . /. . . . . /. . 2 . . /. . . . . /. . 3 . . /1 2 . + + /- - + + . /. - . . . /. . + + + /. + . + . /"
26 | ],
27 | [
28 | null,
29 | "pzprv3/sukororoom/5/5/0 0 1 0 /0 1 1 1 /1 1 1 0 /0 1 1 0 /1 0 1 1 /1 1 1 0 1 /1 0 1 1 1 /0 1 1 1 1 /1 1 0 0 1 /. . 3 . . /. . . . . /. . 2 . . /. . . . . /. . 3 . . /1 2 . 3 1 /- - 3 2 - /1 - . - - /2 3 4 3 1 /- 2 . 2 - /"
30 | ]
31 | ],
32 | inputs: [
33 | /* 問題入力はsukoro, heyawakeと同じなので省略 */
34 | /* 回答入力はsukoroと同じなので省略 */
35 | ]
36 | });
37 |
--------------------------------------------------------------------------------
/test/script/tachibk.js:
--------------------------------------------------------------------------------
1 | /* tachibk.js */
2 |
3 | ui.debug.addDebugData("tachibk", {
4 | url: "4/4/3g2g2k13j",
5 | failcheck: [
6 | [
7 | "bkSizeGt",
8 | "pzprv3/tachibk/4/4/3 . 2 . /2 . . . /. . 1 3 /. . . . /0 0 0 /1 0 1 /1 0 1 /1 0 0 /1 0 1 1 /0 0 1 0 /1 1 1 0 /"
9 | ],
10 | [
11 | "bkSizeLt",
12 | "pzprv3/tachibk/4/4/3 . 2 . /2 . . . /. . 1 3 /. . . . /0 0 1 /0 0 0 /0 0 0 /0 0 0 /0 0 1 0 /0 0 0 0 /0 0 0 0 /"
13 | ],
14 | [
15 | "bankNe",
16 | "pzprv3/tachibk/4/4/3 . 2 . /. . . . /. . . 3 /. . . . /0 0 0 /1 0 1 /1 0 1 /0 0 1 /0 1 1 1 /1 0 0 0 /1 1 1 0 /"
17 | ],
18 | [
19 | "ceOverlap",
20 | "pzprv3/tachibk/4/4/3 . 2 . /2 . . . /. . 1 3 /. . . . /0 0 0 /1 0 1 /1 0 1 /1 0 1 /1 0 1 1 /0 1 1 0 /1 1 1 0 /"
21 | ],
22 | [
23 | "bdDeadEnd",
24 | "pzprv3/tachibk/4/4/. . . . /2 . . . /. . 1 . /. . . . /1 0 0 /0 0 0 /0 0 1 /0 0 0 /1 1 0 0 /1 1 1 1 /1 0 1 1 /",
25 | { skiprules: true }
26 | ],
27 | [
28 | null,
29 | "pzprv3/tachibk/4/4/3 . 2 . /2 . . . /. . 1 3 /. . . . /0 0 0 /1 0 1 /1 0 1 /1 0 0 /1 0 1 1 /0 1 1 1 /1 1 1 0 /"
30 | ]
31 | ],
32 | inputs: [
33 | {
34 | label: "Enforce even amount of columns",
35 | input: ["newboard,5,2"],
36 | result: "pzprv3/tachibk/2/4/. . . . /. . . . /0 0 0 /0 0 0 /0 0 0 0 /"
37 | },
38 | {
39 | label: "Maximum number",
40 | input: ["newboard,6,3", "cursor,11,1", "mouse,right,11,1"],
41 | result:
42 | "pzprv3/tachibk/3/6/. . . . . 4 /. . . . . . /. . . . . . /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 0 /0 0 0 0 0 0 /"
43 | },
44 | {
45 | label: "Don't draw over center grid border",
46 | input: ["newboard,4,3", "playmode", "mouse,right,3,5,3,3,5,3,5,1"],
47 | result:
48 | "pzprv3/tachibk/3/4/. . . . /. . . . /. . . . /0 0 0 /0 0 0 /0 0 0 /0 0 -1 0 /0 -1 0 0 /"
49 | }
50 | ]
51 | });
52 |
--------------------------------------------------------------------------------
/test/script/tasquare.js:
--------------------------------------------------------------------------------
1 | /* tasquare.js */
2 |
3 | ui.debug.addDebugData("tasquare", {
4 | url: "6/6/1g.i4j1i3j5i5j.i2g1",
5 | failcheck: [
6 | ["brNoShade", "pzprv3/tasquare/6/6"],
7 | [
8 | "csNotSquare",
9 | "pzprv3/tasquare/6/6/1 # - . . . /4 # # . . 1 /. . . 3 . . /. . 5 . . . /5 . . . . - /. . . 2 . 1 /"
10 | ],
11 | [
12 | "cuDivide",
13 | "pzprv3/tasquare/6/6/1 . - # . . /4 . # . . 1 /. # . 3 . . /# . 5 . . . /5 . . . . - /. . . 2 . 1 /"
14 | ],
15 | [
16 | "nmSumSizeNe",
17 | "pzprv3/tasquare/6/6/1 # - . . . /4 . . . . 1 /# # . 3 . . /# # 5 . . . /5 . . . . - /. . . 2 . 1 /"
18 | ],
19 | [
20 | "nmNoSideShade",
21 | "pzprv3/tasquare/6/6/1 # - . . # /4 . . # . 1 /# # . 3 # . /# # 5 # . . /5 . . . . - /# . # 2 # 1 /"
22 | ],
23 | [
24 | null,
25 | "pzprv3/tasquare/6/6/1 # - + + # /4 + + # + 1 /# # + 3 # + /# # 5 # + # /5 . + + + - /# . # 2 # 1 /"
26 | ]
27 | ],
28 | inputs: [] /* nurikabeと同じなので省略 */
29 | });
30 |
--------------------------------------------------------------------------------
/test/script/teri.js:
--------------------------------------------------------------------------------
1 | /* teri.js */
2 |
3 | ui.debug.addDebugData("teri", {
4 | url: "4/4/3h6q4",
5 | failcheck: [
6 | [
7 | "csAdjacent",
8 | "pzprv3/teri/4/4/3 . . 6 /. . . . /. . . . /. . . 4 /. # . . /. . . # /. . . . /# # . . /"
9 | ],
10 | [
11 | "cuDivideRB",
12 | "pzprv3/teri/4/4/3 . . 6 /. . . . /. . . . /. . . 4 /. # . . /. . # . /. # . . /# . . . /"
13 | ],
14 | [
15 | "nmSumViewNe",
16 | "pzprv3/teri/4/4/3 . . 6 /. . . . /. . . . /. . . 4 /. . . . /# . . . /. . . # /. . . . /"
17 | ],
18 | [
19 | "nmSumViewNe",
20 | "pzprv3/teri/4/4/3 . . 6 /. . . . /. . . . /. . . 4 /. # . . /. . . . /. . # . /# . . . /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/teri/4/4/3 . . 6 /. . . . /. . . . /. . . 4 /. # + . /+ + + + /+ + + + /# + # . /"
25 | ]
26 | ],
27 | inputs: [
28 | {
29 | input: [
30 | "newboard,2,2",
31 | "playmode",
32 | "mouse,right,1,1",
33 | "mouse,alt+left,1,1,3,1,3,3"
34 | ],
35 | result: "pzprv3/teri/2/2/. . /. . /+ . /. . /-1 /0 /0 -1 /"
36 | },
37 | {
38 | input: ["mouse,left,3,1", "playmode,info-ublk", "mouse,left,1,1"],
39 | result: function(puzzle, assert) {
40 | var bd = puzzle.board;
41 | assert.equal(bd.getc(1, 1).qinfo, 2);
42 | assert.equal(bd.getc(1, 3).qinfo, 2);
43 | assert.equal(bd.getc(3, 3).qinfo, 0);
44 | }
45 | }
46 | ]
47 | });
48 |
--------------------------------------------------------------------------------
/test/script/tetrochain.js:
--------------------------------------------------------------------------------
1 | /* tetrochain.js */
2 |
3 | ui.debug.addDebugData("tetrochain", {
4 | url: "6/6/c33d42r10d14c",
5 | failcheck: [
6 | [
7 | "csGt4",
8 | "pzprv3/tetrochain/6/6/. . . 3,3 . . /. . 4,2 . . . /. . . . . . /. . . . . . /. . . 1,0 . . /. . 1,4 . . . /. # # . . . /# # . . # # /. . # . # . /. # # . # . /. . # . # . /. . . # # . /"
9 | ],
10 | [
11 | "csLt4",
12 | "pzprv3/tetrochain/6/6/. . . 3,3 . . /. . 4,2 . . . /. . . . . . /. . . . . . /. . . 1,0 . . /. . 1,4 . . . /# # # . . . /. . . . # # /. . # . # . /. . # . # . /. . # . . . /. . . . . . /"
13 | ],
14 | [
15 | "bsSameShape",
16 | "pzprv3/tetrochain/6/6/. . . 3,3 . . /. . 4,2 . . . /. . . . . . /. . . . . . /. . . 1,0 . . /. . 1,4 . . . /# # # . . . /. # . . . . /. . # . . . /. . # . . . /. # # . . # /. . . # # # /"
17 | ],
18 | [
19 | "anShadeNe",
20 | "pzprv3/tetrochain/6/6/. . . 3,3 . . /. . 4,2 . . . /. . . . . . /. . . . . . /. . . 1,0 . . /. . 1,4 . . . /# # # . . . /# . . . # # /. # . . . # /. # # . . # /. . # . # . /. . . # # # /"
21 | ],
22 | [
23 | "csDivide",
24 | "pzprv3/tetrochain/6/6/. . . 3,3 . . /. . 4,2 . . . /. . . . . . /. . . . . . /. . . 1,0 . . /. . 1,4 . . . /# # # . . . /. # . . # # /. . # . # # /. . # . . . /. # # . . . /. . . . . . /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/tetrochain/6/6/. . . 3,3 . . /. . 4,2 . . . /. . . . . . /. . . . . . /. . . 1,0 . . /. . 1,4 . . . /# # # + + + /+ # + + # # /+ + # + + # /+ + # + + # /+ # # + # + /+ + + # # # /"
29 | ]
30 | ],
31 | inputs: []
32 | });
33 |
--------------------------------------------------------------------------------
/test/script/tetrominous.js:
--------------------------------------------------------------------------------
1 | /* tetrominous.js */
2 |
3 | ui.debug.addDebugData("tetrominous", {
4 | url: "4/4/1h1k3l",
5 | failcheck: [
6 | [
7 | null,
8 | "pzprv3/tetrominous/5/5/* 1 . . . /* . . 3 . /. . 2 . . /4 . . . 0 /. * * * . /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /0 0 1 0 /0 1 0 1 /1 1 0 1 /0 1 0 1 /0 0 0 0 /0 0 1 0 1 /0 0 1 1 0 /0 1 0 0 0 /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bkSizeLt",
12 | "pzprv3/tetrominous/4/4/1 . . 1 /. . . . /. 3 . . /. . . . /. . . . /. . . . /. . . . /. . . . /0 1 0 /1 0 0 /0 0 0 /0 0 0 /0 1 0 0 /1 0 0 0 /0 0 0 0 /"
13 | ],
14 | [
15 | "bkSizeGt",
16 | "pzprv3/tetrominous/4/4/1 . . 1 /. . . . /. 3 . . /. . . . /. . . . /. . . . /. . . . /. . . . /0 0 1 /0 0 1 /0 1 0 /0 0 0 /0 0 0 0 /0 0 1 0 /0 0 1 1 /"
17 | ],
18 | [
19 | "nmShapeNe",
20 | "pzprv3/tetrominous/4/4/1 . . 1 /. . . . /. 3 . . /. . . . /. . . . /. 3 . . /. . 3 . /. 3 . . /0 0 0 /0 0 0 /0 0 0 /0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
21 | ],
22 | [
23 | "bsSameShape",
24 | "pzprv3/tetrominous/4/4/1 . . 1 /. . . . /. 3 . . /. . . . /. . . . /. . . . /. . . . /. . . . /0 0 1 /1 0 1 /0 1 0 /0 0 0 /0 1 1 0 /1 0 1 0 /1 1 1 1 /"
25 | ],
26 | [
27 | "bdUnused",
28 | "pzprv3/tetrominous/4/4/. . . . /. . . . /. . . . /. . . . /. . . . /. . . . /. . . . /. . . . /X 1 0 /0 1 1 /0 0 1 /0 0 0 /0 0 1 0 /1 1 0 0 /1 1 1 0 /"
29 | ],
30 | [
31 | null,
32 | "pzprv3/tetrominous/4/4/1 . . 1 /. . . . /. 3 . . /. . . . /. 1 3 . /1 3 3 1 /1 . 1 1 /0 0 0 0 /0 0 0 /0 0 0 /0 0 0 /0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
33 | ]
34 | ],
35 | inputs: []
36 | });
37 |
--------------------------------------------------------------------------------
/test/script/toichika.js:
--------------------------------------------------------------------------------
1 | /* toichika.js */
2 |
3 | ui.debug.addDebugData("toichika", {
4 | url: "4/4/n70kt84j",
5 | failcheck: [
6 | [
7 | "bkNumGe2",
8 | "pzprv3/toichika/4/4/6/0 1 1 2 /3 1 2 2 /3 3 4 5 /3 4 4 4 /4 . . . /. . . . /. . . . /. . . . /. . . . /2 . . . /. . . . /4 . . . /"
9 | ],
10 | [
11 | "arAdjPair",
12 | "pzprv3/toichika/4/4/6/0 1 1 2 /3 1 2 2 /3 3 4 5 /3 4 4 4 /4 . . . /. . . . /. . . . /. . . . /. + 3 . /. + . . /. . . . /. . . . /"
13 | ],
14 | [
15 | "arAlone",
16 | "pzprv3/toichika/4/4/6/0 1 1 2 /3 1 2 2 /3 3 4 5 /3 4 4 4 /4 . . . /. . . . /. . . . /. . . . /. + + 3 /. 2 + + /. . . . /. . . . /"
17 | ],
18 | [
19 | "bkNoNum",
20 | "pzprv3/toichika/4/4/6/0 1 1 2 /3 1 2 2 /3 3 4 5 /3 4 4 4 /4 . . . /. . . . /. . . . /. . . . /. + + 3 /. 2 + + /. + . . /. 1 . . /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/toichika/4/4/6/0 1 1 2 /3 1 2 2 /3 3 4 5 /3 4 4 4 /4 . . . /. . . . /. . . . /. . . . /. + + 3 /+ 2 + + /4 + + 3 /+ 1 + + /"
25 | ]
26 | ],
27 | inputs: [
28 | /* 問題入力はromaと同じなので省略 */
29 | /* 回答入力テスト */
30 | /* 矢印の入力はromaと同じ */
31 | { input: ["newboard,5,2", "playmode"] },
32 | {
33 | input: [
34 | "cursor,1,1",
35 | "key,1",
36 | "key,right,2",
37 | "key,right,3",
38 | "key,right,4"
39 | ]
40 | },
41 | {
42 | input: [
43 | "cursor,0,0",
44 | "mouse,right, 1,1, 3,1",
45 | "mouse,right, 1,3, 5,3",
46 | "mouse,right, 3,3, 7,3, 7,1"
47 | ],
48 | result:
49 | "pzprv3/toichika/2/5/1/0 0 0 0 0 /0 0 0 0 0 /. . . . . /. . . . . /+ + 2 . . /+ . . . . /"
50 | }
51 | ]
52 | });
53 |
--------------------------------------------------------------------------------
/test/script/tontti.js:
--------------------------------------------------------------------------------
1 | /* tontti.js */
2 |
3 | ui.debug.addDebugData("tontti", {
4 | url: "4/4/2g3l1l",
5 | failcheck: [
6 | [
7 | "lnCross",
8 | "pzprv3/tontti/4/4/2 . 3 . /. . . . /. 1 . . /. . . . /0 0 0 0 0 /0 1 1 0 0 /0 0 0 0 0 /0 1 1 1 0 /0 0 0 0 /0 0 0 0 /1 0 1 0 /1 0 1 1 /0 0 1 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
9 | ],
10 | [
11 | "lnOverlap",
12 | "pzprv3/tontti/4/4/2 . 3 . /. . . . /. 1 . . /. . . . /0 0 1 1 0 /0 1 1 0 0 /0 0 0 0 0 /0 1 1 0 0 /0 1 0 0 /0 1 0 0 /1 0 1 0 /1 0 1 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
13 | ],
14 | [
15 | "lnDeadEnd",
16 | "pzprv3/tontti/3/3/2 . 3 /. . . /. . . /0 0 0 0 /0 1 0 0 /0 0 0 0 /0 1 0 /0 1 0 /0 1 0 /0 1 0 /0 0 0 /0 0 0 /0 0 0 /"
17 | ],
18 | [
19 | "bkNoNum",
20 | "pzprv3/tontti/4/4/2 . 3 . /. . . . /. 1 . . /. . . . /0 0 0 0 0 /0 1 0 1 1 /0 0 0 0 0 /0 1 1 0 0 /0 1 0 0 /0 1 0 0 /1 0 1 0 /1 0 1 0 /0 1 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
21 | ],
22 | [
23 | "lnAdjacent",
24 | "pzprv3/tontti/4/4/2 . 3 . /. . . . /. 1 . . /. . . . /0 0 0 0 0 /1 1 1 0 1 /1 0 0 0 0 /0 1 1 0 0 /0 0 0 0 /0 0 0 1 /0 0 1 0 /1 0 1 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
25 | ],
26 | [
27 | "bkNumGe2",
28 | "pzprv3/tontti/4/4/2 . 3 . /. . . . /. 1 . . /. . . . /0 0 0 0 0 /0 1 1 0 0 /0 0 0 0 0 /0 1 1 0 0 /0 0 0 0 /0 0 0 0 /1 0 1 0 /1 0 1 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
29 | ],
30 | [
31 | "bkSizeNe",
32 | "pzprv3/tontti/4/4/2 . 3 . /. . . . /. 1 . . /. . . . /0 0 0 0 0 /0 1 1 0 0 /0 0 0 1 0 /0 1 1 0 0 /0 1 0 0 /0 1 0 0 /1 0 1 0 /1 0 1 1 /0 0 0 1 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
33 | ],
34 | [
35 | null,
36 | "pzprv3/tontti/4/4/2 . 3 . /. . . . /. 1 . . /. . . . /0 0 0 0 0 /0 1 1 0 0 /0 0 0 1 1 /0 1 1 0 0 /0 1 0 0 /0 1 0 0 /1 0 1 0 /1 0 1 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /"
37 | ]
38 | ],
39 | inputs: []
40 | });
41 |
--------------------------------------------------------------------------------
/test/script/triplace.js:
--------------------------------------------------------------------------------
1 | /* triplace.js */
2 |
3 | ui.debug.addDebugData("triplace", {
4 | url: "5/5/@2m_m@1m_.0.1....11",
5 | failcheck: [
6 | [
7 | "bkSizeLt3",
8 | "pzprv3/triplace/5/5/0 -1 0 -1 1 -1 /-1 -1,2 . . . . /-1 . . . -1,-1 . /-1 . . . . . /1 . -1,1 . . . /1 . . . . -1,-1 /0 0 0 0 /1 0 0 0 /1 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /1 0 0 0 0 /0 0 0 0 0 /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /"
9 | ],
10 | [
11 | "asLblockNe",
12 | "pzprv3/triplace/5/5/0 -1 0 -1 1 -1 /-1 -1,2 . . . . /-1 . . . -1,-1 . /-1 . . . . . /1 . -1,1 . . . /1 . . . . -1,-1 /0 0 0 0 /1 0 0 0 /1 0 0 0 /0 0 0 0 /-1 -1 1 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 1 0 /1 0 1 -1 0 /. - . . . /+ - . . . /+ - . . . /+ . . - . /+ + + - . /"
13 | ],
14 | [
15 | "bkSizeGt3",
16 | "pzprv3/triplace/5/5/0 -1 0 -1 1 -1 /-1 -1,2 . . . . /-1 . . . -1,-1 . /-1 . . . . . /1 . -1,1 . . . /1 . . . . -1,-1 /0 1 0 0 /1 0 0 0 /1 0 0 0 /0 0 0 0 /-1 -1 1 0 /0 0 1 0 1 /0 0 0 0 0 /0 0 0 1 0 /1 0 1 -1 0 /. - . . . /+ - . . . /+ - . . . /+ . . - . /+ + + - . /"
17 | ],
18 | [
19 | null,
20 | "pzprv3/triplace/5/5/0 -1 0 -1 1 -1 /-1 -1,2 . . . . /-1 . . . -1,-1 . /-1 . . . . . /1 . -1,1 . . . /1 . . . . -1,-1 /0 1 0 0 /1 0 0 0 /1 0 1 0 /0 0 1 0 /-1 -1 1 0 /0 0 1 0 1 /0 1 1 0 0 /0 0 -1 1 1 /1 0 1 -1 0 /. - + + + /+ - - . . /+ - - . . /+ . - - - /+ + + - . /"
21 | ]
22 | ],
23 | inputs: [
24 | /* 問題入力はtilepaintと同じなので省略 */
25 | /* 回答入力はsashigane, kaeroでカバーしているので省略 */
26 | ]
27 | });
28 |
--------------------------------------------------------------------------------
/test/script/turnaround.js:
--------------------------------------------------------------------------------
1 | ui.debug.addDebugData("turnaround", {
2 | url: "5/5/h0g1l1g2l2g3h",
3 | failcheck: [
4 | [
5 | "numNoLine",
6 | "pzprv3/turnaround/5/5/. . 0 . 1 /. . . . . /. 1 . 2 . /. . . . . /2 . 3 . . /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
7 | ],
8 | [
9 | "numNoLine",
10 | "pzprv3/turnaround/5/5/. . 0 . 1 /. . . . . /. 1 . 2 . /. . . . . /2 . 3 . . /0 0 0 0 /1 1 1 1 /1 1 1 0 /0 0 0 1 /0 0 0 0 /0 0 0 0 0 /1 0 0 0 1 /0 0 0 1 1 /0 0 0 0 0 /"
11 | ],
12 | [
13 | "anTurn",
14 | "pzprv3/turnaround/5/5/. . 0 . 1 /. . . . . /. 1 . 2 . /. . . . . /2 . 3 . . /0 1 1 1 /0 0 0 0 /0 0 0 1 /0 0 0 1 /1 1 0 0 /0 1 0 0 0 /0 0 0 0 1 /1 0 0 1 0 /1 0 0 0 1 /"
15 | ],
16 | [
17 | "lnBranch",
18 | "pzprv3/turnaround/5/5/. . 0 . 1 /. . . . . /. 1 . 2 . /. . . . . /2 . 3 . . /0 0 0 0 /0 1 1 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 0 /0 0 1 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
19 | ],
20 | [
21 | "lnCross",
22 | "pzprv3/turnaround/5/5/. . 0 . 1 /. . . . . /. 1 . 2 . /. . . . . /2 . 3 . . /0 0 0 0 /0 1 1 0 /0 0 0 0 /0 0 0 0 /0 0 0 0 /0 0 1 0 0 /0 0 1 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
23 | ],
24 | [
25 | "lnDeadEnd",
26 | "pzprv3/turnaround/5/5/. . 0 . 1 /. . . . . /. . . . . /. . . . . /2 . 3 . . /1 1 1 1 /0 0 0 0 /1 0 0 0 /0 1 0 0 /1 0 1 0 /0 0 0 0 1 /0 0 0 0 1 /1 0 0 0 0 /1 1 1 1 0 /"
27 | ],
28 | [
29 | "lnPlLoop",
30 | "pzprv3/turnaround/5/5/. . 0 . 1 /. . . . . /. . . . . /. . . . . /2 . 3 . . /1 1 1 1 /1 0 1 0 /1 0 1 0 /0 1 0 1 /1 0 1 0 /1 0 0 0 1 /0 1 1 1 1 /1 0 0 0 1 /1 1 1 1 0 /"
31 | ],
32 | [
33 | null,
34 | "pzprv3/turnaround/5/5/. . 0 . 1 /. . . . . /. 1 . 2 . /. . . . . /2 . 3 . . /1 1 1 1 /1 1 1 0 /1 1 1 0 /0 1 0 1 /1 0 1 0 /1 0 0 0 1 /0 0 0 1 1 /1 0 0 0 1 /1 1 1 1 0 /"
35 | ]
36 | ]
37 | });
38 |
--------------------------------------------------------------------------------
/test/script/usotatami.js:
--------------------------------------------------------------------------------
1 | /* usotatami.js */
2 |
3 | ui.debug.addDebugData("usotatami", {
4 | url: "5/5/1a13a2d1a1a3a121b3b2",
5 | failcheck: [
6 | [
7 | "bdCross",
8 | "pzprv3/usotatami/5/5/1 . 1 3 . /2 . . . . /1 . 1 . 3 /. 1 2 1 . /. 3 . . 2 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 1 1 1 1 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
9 | ],
10 | [
11 | "bkNoNum",
12 | "pzprv3/usotatami/5/5/1 . 1 3 . /2 . . . . /1 . 1 . 3 /. 1 2 1 . /. 3 . . 2 /0 0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 1 1 1 1 /0 1 1 1 1 /0 0 0 0 0 /0 0 0 0 0 /"
13 | ],
14 | [
15 | "bkNumGe2",
16 | "pzprv3/usotatami/5/5/1 . 1 3 . /2 . . . . /1 . 1 . 3 /. 1 2 1 . /. 3 . . 2 /0 0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 0 0 0 /1 1 1 1 1 /0 0 0 0 0 /0 0 0 0 0 /0 0 0 0 0 /"
17 | ],
18 | [
19 | "bkSizeEq",
20 | "pzprv3/usotatami/5/5/1 . 1 3 . /2 . . . . /1 . 1 . 3 /. 1 2 1 . /. 3 . . 2 /0 1 1 1 /1 1 1 1 /1 1 0 1 /1 1 1 1 /0 0 1 1 /1 1 0 0 0 /1 0 1 1 0 /0 0 1 1 0 /1 1 1 0 1 /"
21 | ],
22 | [
23 | "bdDeadEnd",
24 | "pzprv3/usotatami/5/5/1 . 1 3 . /2 . . . . /1 . 1 . 3 /. 1 2 1 . /. 3 . . 2 /0 1 1 0 /1 1 1 0 /1 1 0 1 /1 1 1 1 /1 0 1 1 /1 1 0 0 1 /1 0 1 1 1 /0 0 1 1 0 /0 1 1 0 1 /"
25 | ],
26 | [
27 | "bkWidthGt1",
28 | "pzprv3/usotatami/5/5/1 . 1 3 . /2 . . . . /1 . 1 . 3 /. 1 2 1 . /. 3 . . 2 /0 1 1 0 /1 1 1 0 /1 1 0 1 /1 1 1 1 /1 0 1 1 /1 1 0 0 0 /1 0 1 1 1 /0 0 1 1 0 /0 1 1 0 1 /"
29 | ],
30 | [
31 | null,
32 | "pzprv3/usotatami/5/5/1 . 1 3 . /2 . . . . /1 . 1 . 3 /. 1 2 1 . /. 3 . . 2 /-1 1 1 1 /1 1 1 1 /1 1 0 1 /1 1 1 1 /1 0 1 1 /1 1 0 0 -1 /1 -1 1 1 -1 /0 -1 1 1 -1 /0 1 1 0 1 /"
33 | ]
34 | ],
35 | inputs: [
36 | /* 問題入力, 回答入力はshikaku等と同じなので省略 */
37 | ]
38 | });
39 |
--------------------------------------------------------------------------------
/test/script/view.js:
--------------------------------------------------------------------------------
1 | /* view.js */
2 |
3 | ui.debug.addDebugData("view", {
4 | url: "5/5/m401g3g2g101m",
5 | failcheck: [
6 | ["brNoValidNum", "pzprv3/view/5/5"],
7 | [
8 | "nmAdjacent",
9 | "pzprv3/view/5/5/. . . . . /. . 4 0 1 /. 3 . 2 . /1 0 1 . . /. . . . . /- - - . . /- - . . . /. . - . . /. . . . . /. 0 . . . /"
10 | ],
11 | [
12 | "nmSumViewNe",
13 | "pzprv3/view/5/5/. . . . . /. . 4 0 1 /. 3 . 2 . /1 0 1 . . /. . . . . /- - - . + /- - . . . /+ . - . - /. . . + + /- + + . . /"
14 | ],
15 | [
16 | "nmDivide",
17 | "pzprv3/view/5/5/. . . . . /. . 4 0 1 /. 3 . 4 . /1 0 2 . . /. . . . . /- - - + + /- - . . . /+ . - . - /. . . . + /- + + . . /"
18 | ],
19 | [
20 | "ceSuspend",
21 | "pzprv3/view/5/5/. . . . . /. . 4 0 1 /. 3 . 2 . /1 0 1 . . /. . . . . /- - - + + /- - . . . /2 . - . - /. . . 0 + /- + + + . /"
22 | ],
23 | [
24 | null,
25 | "pzprv3/view/5/5/. . . . . /. . 4 0 1 /. 3 . 2 . /1 0 1 . . /. . . . . /- - - 3 0 /- - . . . /2 . - . - /. . . 0 2 /- 1 0 1 . /"
26 | ]
27 | ],
28 | inputs: [
29 | /* 問題入力, 回答入力はsukoroとほぼ同じなので省略 */
30 | ]
31 | });
32 |
--------------------------------------------------------------------------------
/test/script/wagiri.js:
--------------------------------------------------------------------------------
1 | /* wagiri.js */
2 |
3 | ui.debug.addDebugData("wagiri", {
4 | url: "4/4/lebcacja1d2b1d1a",
5 | failcheck: [
6 | [
7 | "slLoopGiri",
8 | "pzprv3/wagiri/4/4/. . . . . /. 4 . . 1 /. . 2 . . /0 . . 2 . /. . . . . /. 1 . . /. . 2 . /. 1 . . /. . 1 . /1 2 1 . /2 1 2 . /. . . . /. . . . /"
9 | ],
10 | [
11 | "crConnSlNe",
12 | "pzprv3/wagiri/4/4/. . . . . /. 4 . . 1 /. . 2 . . /0 . . 2 . /. . . . . /. 1 . . /. . 2 . /. 1 . . /. . 1 . /1 2 1 1 /2 1 1 2 /. . . . /. . . . /"
13 | ],
14 | [
15 | "slNotLoopWa",
16 | "pzprv3/wagiri/4/4/. . . . . /. 4 . . 1 /. . 2 . . /0 . . 2 . /. . . . . /. 1 . . /. . 2 . /. 1 . . /. . 1 . /1 2 1 1 /2 1 1 1 /1 2 2 . /2 1 2 1 /"
17 | ],
18 | [
19 | "ceNoSlash",
20 | "pzprv3/wagiri/4/4/. . . . . /. 4 . . 1 /. . 2 . . /0 . . 2 . /. . . . . /. 1 . . /. . 2 . /. 1 . . /. . 1 . /1 2 1 1 /2 1 1 1 /1 2 2 2 /. 1 2 2 /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/wagiri/4/4/. . . . . /. 4 . . 1 /. . 2 . . /0 . . 2 . /. . . . . /. 1 . . /. . 2 . /. 1 . . /. . 1 . /1 2 1 1 /2 1 1 1 /1 2 2 2 /2 1 2 2 /"
25 | ]
26 | ],
27 | inputs: [
28 | /* 問題入力テスト(輪切のみ) */
29 | { input: ["newboard,4,2", "editmode", "cursor,0,0"] },
30 | {
31 | input: [
32 | "mouse,leftx2, 1,1",
33 | "mouse,leftx3, 3,1",
34 | "mouse,leftx4, 5,1",
35 | "mouse,leftx5, 7,1",
36 | "mouse,rightx2, 1,3",
37 | "mouse,rightx3, 3,3",
38 | "mouse,rightx4, 5,3",
39 | "mouse,rightx5, 7,3"
40 | ],
41 | result:
42 | "pzprv3/wagiri/2/4/. . . . . /. . . . . /. . . . . /1 2 - . /- 2 1 . /. . . . /. . . . /"
43 | }
44 | /* 回答入力はgokigenでやっているので省略 */
45 | ]
46 | });
47 |
--------------------------------------------------------------------------------
/test/script/walllogic.js:
--------------------------------------------------------------------------------
1 | /* walllogic.js */
2 |
3 | ui.debug.addDebugData("walllogic", {
4 | url: "5/5/h1k2g2i5g5k4h",
5 | failcheck: [
6 | [
7 | "brNoLine",
8 | "pzprv3/walllogic/5/5/. . 1 . . /. . . 2 . /2 . . . 5 /. 5 . . . /. . 4 . . /. . . . . /. . . . . /. . . . . /. . . . . /. . . . . /"
9 | ],
10 | [
11 | "nmConnWallGt",
12 | "pzprv3/walllogic/5/5/. . 1 . . /. . . 2 . /2 . . . 5 /. 5 . . . /. . 4 . . /. . . . . /3 3 3 . . /. . . . . /. . . . . /. . . . . /"
13 | ],
14 | [
15 | "nmConnWallLt",
16 | "pzprv3/walllogic/5/5/. . 1 . . /. . . 2 . /2 . . . 5 /. 5 . . . /. . 4 . . /. . . . . /. . 3 . . /. . . . . /. . . . . /. . . . . /"
17 | ],
18 | [
19 | "nmConnNoWall",
20 | "pzprv3/walllogic/5/5/. . 1 . . /. . . 2 . /2 . . . 5 /. 5 . . . /. . 4 . . /. . . . . /. 3 3 . . /. . . . . /. . . . . /. . . . . /"
21 | ],
22 | [
23 | "lbIsolate",
24 | "pzprv3/walllogic/5/5/. . 1 . . /. . . 2 . /2 . . . 5 /. 5 . . . /. . 3 . . /1 3 . 1 1 /1 1 3 . 1 /. 1 3 3 . /3 . 4 4 2 /1 3 . 4 4 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/walllogic/5/5/. . 1 . . /. . . 2 . /2 . . . 5 /. 5 . . . /. . 4 . . /1 3 . 1 1 /1 1 3 . 1 /. 1 3 3 . /3 . 4 4 2 /3 3 . 4 4 /"
29 | ]
30 | ],
31 | inputs: [
32 | /* 問題入力テスト */
33 | /* 回答入力テスト */
34 | { input: ["newboard,3,3", "playmode"] },
35 | {
36 | input: ["mouse,left, 1,1, 3,1, 3,3, 5,3"],
37 | result: "pzprv3/walllogic/3/3/. . . /. . . /. . . /4 4 . /. 2 4 /. . . /"
38 | },
39 | {
40 | input: ["mouse,left, 5,3, 3,3, 3,1, 1,1"],
41 | result: "pzprv3/walllogic/3/3/. . . /. . . /. . . /3 1 . /. 3 3 /. . . /"
42 | },
43 | {
44 | input: ["mouse,left, 2,3, 1,3, 1,1, 5,1"],
45 | result: "pzprv3/walllogic/3/3/. . . /. . . /. . . /3 1 4 /3 3 3 /. . . /"
46 | },
47 | {
48 | input: ["mouse,left, 2,3, 1,3, 1,1, 5,1"],
49 | result: "pzprv3/walllogic/3/3/. . . /. . . /. . . /. . . /. 3 3 /. . . /"
50 | }
51 | ]
52 | });
53 |
--------------------------------------------------------------------------------
/test/script/yajirushi.js:
--------------------------------------------------------------------------------
1 | /* yajirushi.js */
2 |
3 | ui.debug.addDebugData("yajirushi", {
4 | url: "5/5/k.2.g.o..j",
5 | failcheck: [
6 | [
7 | "arAdjPair",
8 | "pzprv3/yajirushi/5/5/. . . . . /- 2 - . - /. . . . . /. . . . - /- . . . . /4 3 4 . 3 /. . . 2 . /4 . . . 3 /4 . 3 1 . /. 1 4 . 3 /"
9 | ],
10 | [
11 | "arAlone",
12 | "pzprv3/yajirushi/5/5/. . . . . /- 2 - . - /. . . . . /. . . . - /- . . . . /4 . . . 3 /. . . 2 . /4 . . . 3 /4 . 3 1 . /. 4 . . 3 /"
13 | ],
14 | [
15 | "arAlone",
16 | "pzprv3/yajirushi/5/5/. . . . . /- 2 - . - /. . . . . /. . . . - /- . . . . /4 . . 3 2 /. . . 2 . /4 . 3 . 1 /4 . 3 1 . /. 1 4 . 3 /"
17 | ],
18 | [
19 | "cuNotPointed",
20 | "pzprv3/yajirushi/5/5/. . . . . /- 2 - . - /. . . . . /. . . . - /- . . . . /4 . . . 3 /. . . 2 . /4 . . . 3 /. 1 . 1 . /. 4 . . 3 /"
21 | ],
22 | [
23 | null,
24 | "pzprv3/yajirushi/5/5/. . . . . /- 2 - . - /. . . . . /. . . . - /- . . . . /4 + + + 3 /. . . 2 . /4 + + + 3 /4 + 3 1 . /. 1 4 + 3 /"
25 | ]
26 | ],
27 | inputs: []
28 | });
29 |
--------------------------------------------------------------------------------
/test/script/yajirushi2.js:
--------------------------------------------------------------------------------
1 | /* yajirushi2.js */
2 |
3 | ui.debug.addDebugData("yajirushi2", {
4 | url: "4/4/.hbhd.j",
5 | failcheck: [
6 | [
7 | "nmArrowLt",
8 | "pzprv3/yajirushi2/4/4/- . . 1 /. . . . /3 . . - /. . . . /. . . . /. . . . /. . . . /4 . . 3 /"
9 | ],
10 | [
11 | "nmArrowGt",
12 | "pzprv3/yajirushi2/4/4/- . . 1 /. . . . /3 . . - /. . . . /. . 2 . /4 . . 3 /. . 1 . /. . . . /"
13 | ],
14 | [
15 | "bkDivide",
16 | "pzprv3/yajirushi2/4/4/- . . 1 /. . . . /3 . . - /. . . . /. 2 . . /4 . . 3 /. 1 . . /4 . 3 . /"
17 | ],
18 | [
19 | "arAdjPair",
20 | "pzprv3/yajirushi2/4/4/- . . 1 /. . . . /3 . . - /. . . . /. 2 . . /4 . . 3 /. 1 . . /4 3 . . /"
21 | ],
22 | [
23 | "arAlone",
24 | "pzprv3/yajirushi2/4/4/- . . 1 /. . . . /3 . . - /. . . . /. . . . /4 . . 3 /. 4 . . /4 . . . /"
25 | ],
26 | [
27 | "arAlone",
28 | "pzprv3/yajirushi2/4/4/- . . 1 /. . . . /3 . . - /. . . . /. 2 . . /4 . . 3 /. . . . /4 1 . 3 /"
29 | ],
30 | [
31 | null,
32 | "pzprv3/yajirushi2/4/4/- . . 1 /. . . . /3 . . - /. . . . /. 2 . . /4 . . 3 /. 1 . . /4 . . 3 /"
33 | ]
34 | ],
35 | inputs: []
36 | });
37 |
--------------------------------------------------------------------------------
/test/script/yinyang.js:
--------------------------------------------------------------------------------
1 | /* yinyang.js */
2 |
3 | ui.debug.addDebugData("yinyang", {
4 | url: "5/5/016612300",
5 | failcheck: [
6 | [
7 | "ms2x2",
8 | "pzprv3/yinyang/5/5/. . . . . /1 . 2 . . /2 . . . 1 /. . 2 . 1 /. . . . . /. . . . . /. 2 . . . /. 2 2 . . /. . . . . /. . . . . /"
9 | ],
10 | [
11 | "mu2x2",
12 | "pzprv3/yinyang/5/5/. . . . . /1 . 2 . . /2 . . . 1 /. . 2 . 1 /. . . . . /1 1 1 1 1 /. 1 . . 1 /. . . . . /. . . . . /. . . . . /"
13 | ],
14 | [
15 | "msDivide",
16 | "pzprv3/yinyang/5/5/. . . . . /1 . 2 . . /2 . . . 1 /. . 2 . 1 /. . . . . /1 1 1 1 1 /. . . . 1 /. . . . . /. . . . . /. . . . . /"
17 | ],
18 | [
19 | "muDivide",
20 | "pzprv3/yinyang/5/5/. . . . . /1 . 2 . . /2 . . . 1 /. . 2 . 1 /. . . . . /1 1 1 1 1 /. 2 . 2 1 /. 2 1 1 . /1 2 . . . /. . . . . /"
21 | ],
22 | [
23 | "ceNoNum",
24 | "pzprv3/yinyang/5/5/. . . . . /1 . 2 . . /2 . . . 1 /. . 2 . 1 /. . . . . /1 1 1 1 1 /. 2 . 2 1 /. 2 1 1 . /1 2 . . . /1 1 1 1 1 /"
25 | ],
26 | [
27 | null,
28 | "pzprv3/yinyang/5/5/. . . . . /1 . 2 . . /2 . . . 1 /. . 2 . 1 /. . . . . /1 1 1 1 1 /. 2 . 2 1 /. 2 1 1 . /1 2 . 2 . /1 1 1 1 1 /"
29 | ]
30 | ],
31 | inputs: []
32 | });
33 |
--------------------------------------------------------------------------------
/test/variety/aho_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/aho_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:aho", function() {
10 | it("Check area generating", function() {
11 | puzzle.open("aho/6/6");
12 |
13 | puzzle.setMode("edit");
14 | puzzle.cursor.init(1, 1);
15 | puzzle.key.inputKeys("4", "down", "4");
16 | puzzle.cursor.init(9, 1);
17 | puzzle.key.inputKeys("2", "right", "6");
18 | puzzle.cursor.init(7, 5);
19 | puzzle.key.inputKeys("6", "down", "left", "3");
20 | puzzle.cursor.init(1, 11);
21 | puzzle.key.inputKeys("2", "right", "3");
22 | puzzle.cursor.init(11, 9);
23 | puzzle.key.inputKeys("2", "down", "4");
24 |
25 | puzzle.setMode("play");
26 | puzzle.mouse.inputPath("right", 1, 1, 7, 1);
27 | puzzle.mouse.inputPath(0, 2, 8, 2, 8, 0);
28 | puzzle.mouse.inputPath(10, 0, 10, 4, 8, 4, 8, 0);
29 | puzzle.mouse.inputPath("right", 11, 1, 11, 7, 9, 7);
30 | puzzle.mouse.inputPath(8, 8, 12, 8, 12, 10, 8, 10, 8, 8);
31 | puzzle.mouse.inputPath(4, 12, 4, 10, 12, 10);
32 | puzzle.mouse.inputPath(0, 8, 2, 8, 2, 12);
33 | puzzle.mouse.inputPath(2, 8, 6, 8, 6, 10);
34 | puzzle.mouse.inputPath("right", 7, 7, 7, 9);
35 | puzzle.mouse.inputPath(8, 6, 8, 8, 8, 4);
36 | puzzle.mouse.inputPath(4, 6, 4, 8);
37 | puzzle.mouse.inputPath(4, 6, 8, 6);
38 | puzzle.mouse.inputPath(0, 4, 8, 4);
39 |
40 | assert.equal(puzzle.board.roommgr.components.length, 10);
41 | assert.equal(puzzle.check().complete, true);
42 | });
43 | });
44 |
--------------------------------------------------------------------------------
/test/variety/ayeheya_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/ayeheya_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:ayeheya", function() {
10 | it("Check area generating", function() {
11 | puzzle.open("ayeheya/6/6");
12 |
13 | puzzle.setMode("edit");
14 | puzzle.mouse.inputPath(4, 0, 4, 12);
15 | puzzle.mouse.inputPath(0, 4, 12, 4);
16 | puzzle.mouse.inputPath(10, 0, 10, 2, 12, 2, 10, 2, 10, 4, 12, 4);
17 | puzzle.mouse.inputPath(0, 6, 4, 6);
18 | puzzle.mouse.inputPath(4, 8, 12, 8, 8, 8, 8, 4);
19 | puzzle.mouse.inputPath(4, 10, 12, 10);
20 | puzzle.mouse.inputPath(6, 10, 6, 12);
21 | puzzle.cursor.init(7, 5);
22 | puzzle.key.inputKeys("2");
23 |
24 | assert.equal(puzzle.board.roommgr.components.length, 11);
25 |
26 | puzzle.setMode("play");
27 | puzzle.mouse.inputPath("right", 1, 5, 3, 5);
28 | puzzle.mouse.inputPath("right", 7, 1, 7, 3);
29 | puzzle.mouse.inputPath("right", 1, 9, 3, 9);
30 | puzzle.mouse.inputPath("right", 7, 9, 9, 9);
31 | puzzle.mouse.inputPath("right", 1, 3);
32 | puzzle.mouse.inputPath("right", 3, 1);
33 | puzzle.mouse.inputPath(1, 7);
34 | puzzle.mouse.inputPath(3, 3, 3, 1, 1, 1);
35 | puzzle.mouse.inputPath("right", 5, 1, 5, 3, 9, 3, 9, 1);
36 | puzzle.mouse.inputPath(11, 1);
37 | puzzle.mouse.inputPath("right", 11, 3);
38 | puzzle.mouse.inputPath(7, 5, 11, 5, 11, 7, 5, 7);
39 | puzzle.mouse.inputPath(
40 | "right",
41 | 3,
42 | 7,
43 | 3,
44 | 9,
45 | 11,
46 | 9,
47 | 11,
48 | 7,
49 | 11,
50 | 9,
51 | 7,
52 | 9,
53 | 7,
54 | 7
55 | );
56 | puzzle.mouse.inputPath(3, 11, 11, 11);
57 |
58 | assert.equal(puzzle.check().complete, true);
59 | });
60 | });
61 |
--------------------------------------------------------------------------------
/test/variety/bosanowa_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/bosanowa_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:bosanowa", function() {
10 | it("loads styles", function() {
11 | puzzle.open("bosanowa/h/6/5/jo9037g2n2n3g4j3i");
12 | puzzle.toBuffer("svg", 0, 30);
13 | assert.equal(puzzle.getConfig("disptype_bosanowa"), 2);
14 |
15 | puzzle.open("bosanowa/t/6/5/jo9037g2n2n3g4j3i");
16 | puzzle.toBuffer("svg", 0, 30);
17 | assert.equal(puzzle.getConfig("disptype_bosanowa"), 3);
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/test/variety/cbblock_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/cbblock_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:cbblock", function() {
10 | it("Check that errors are correct after editing", function() {
11 | puzzle.open("cbblock/2/2");
12 |
13 | puzzle.setMode("edit");
14 | puzzle.setConfig("multierr", true);
15 |
16 | var check = puzzle.check(true);
17 | assert.equal(check.length, 2);
18 | assert.equal(check[0], "bkSubLt2");
19 | assert.equal(check[1], "bkRect");
20 |
21 | puzzle.mouse.inputPath("left", 2, 0, 2, 4);
22 | puzzle.mouse.inputPath("left", 0, 2, 4, 2);
23 |
24 | // we used to still get bkSubLt2 here
25 | check = puzzle.check(true);
26 | assert.equal(check.length, 2);
27 | assert.equal(check[0], "bkRect");
28 | assert.equal(check[1], "bkSubGt2");
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/test/variety/compass_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/compass_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:compass", function() {
10 | it("decodes empty cells", function() {
11 | puzzle.open("mukkonn/2/2/g_g..2./");
12 | assert.equal(puzzle.board.getc(1, 1).ques, 0);
13 | assert.equal(puzzle.board.getc(1, 3).ques, 0);
14 | assert.equal(puzzle.board.getc(3, 1).ques, 7);
15 | assert.equal(puzzle.board.getc(3, 3).ques, 51);
16 | });
17 | });
18 |
--------------------------------------------------------------------------------
/test/variety/fillomino_test.js:
--------------------------------------------------------------------------------
1 | var assert = require("assert");
2 |
3 | var pzpr = require("../../");
4 |
5 | var puzzle = new pzpr.Puzzle();
6 |
7 | describe("Variety:fillomino", function() {
8 | it("can toggle forceallcell", function() {
9 | puzzle.open(
10 | "pzprv3/fillomino/6/6/. . 4 . . . /. 5 3 . 2 . /. . . . 5 2 /3 3 . . . . /. 2 . 1 4 . /. . . 3 . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /. . . . . . /0 1 0 0 0 /0 1 1 0 1 /1 1 0 1 1 /0 1 0 0 1 /0 1 1 1 0 /1 0 0 1 0 /0 0 1 1 1 1 /1 0 0 1 1 1 /0 1 1 1 0 0 /1 1 0 1 1 1 /1 1 1 1 0 0 /"
11 | );
12 |
13 | puzzle.setConfig("forceallcell", false);
14 | var check = puzzle.check(true);
15 | assert.equal(check.length, 0);
16 |
17 | puzzle.setConfig("forceallcell", true);
18 | check = puzzle.check(true);
19 | assert.equal(check.length, 1);
20 | });
21 |
22 | it("can add ghost borders", function() {
23 | puzzle.open(
24 | "pzprv3/fillomino/3/3/. . . /. 2 . /. . . /. . . /. . . /. . . /0 0 /0 0 /0 0 /0 0 0 /0 0 0 /"
25 | );
26 |
27 | var center = puzzle.board.getc(3, 3);
28 |
29 | assert.equal(center.adjborder.top.qcmp, 0);
30 |
31 | center.adjacent.left.setNum(2);
32 | assert.equal(center.adjborder.top.qcmp, 1);
33 |
34 | center.adjacent.right.setNum(2);
35 | assert.equal(center.adjborder.top.qcmp, 0);
36 |
37 | center.adjborder.left.setQans(1);
38 | assert.equal(center.adjborder.top.qcmp, 1);
39 |
40 | center.adjacent.right.setNum(-1);
41 | assert.equal(center.adjborder.top.qcmp, 0);
42 |
43 | center.adjborder.left.setQans(0);
44 | assert.equal(center.adjborder.top.qcmp, 1);
45 |
46 | center.adjacent.left.setNum(-1);
47 | assert.equal(center.adjborder.top.qcmp, 0);
48 | });
49 | });
50 |
--------------------------------------------------------------------------------
/test/variety/fivecells_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/fivecells_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:fivecells", function() {
10 | it("Check invalid cell export/import", function() {
11 | puzzle.open("fivecells/8/8");
12 |
13 | var countNonEmpty = function() {
14 | var count = 0;
15 | for (var c = 0; c < puzzle.board.cell.length; c++) {
16 | if (!puzzle.board.cell[c].isEmpty()) {
17 | count++;
18 | }
19 | }
20 | return count;
21 | };
22 | assert.equal(countNonEmpty() % 5, 0);
23 |
24 | // reset default empty cells
25 | for (var c = 0; c < puzzle.board.cell.length; c++) {
26 | puzzle.board.cell[c].setQues(0);
27 | }
28 | assert.equal(countNonEmpty() % 5, 4);
29 |
30 | // make another set of four cells empty
31 | puzzle.setMode("edit");
32 | puzzle.mouse.setInputMode("empty");
33 |
34 | puzzle.mouse.inputPath(1, 1);
35 | puzzle.mouse.inputPath(3, 1);
36 | puzzle.mouse.inputPath(5, 1);
37 | puzzle.mouse.inputPath(7, 1);
38 | assert.equal(countNonEmpty() % 5, 0);
39 |
40 | var puzzle2 = new pzpr.Puzzle();
41 | puzzle2.open(puzzle.getURL());
42 | for (c = 0; c < puzzle.board.cell.length; c++) {
43 | assert.equal(
44 | puzzle.board.cell[c].isEmpty(),
45 | puzzle2.board.cell[c].isEmpty()
46 | );
47 | }
48 | });
49 | });
50 |
--------------------------------------------------------------------------------
/test/variety/gokigen_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/gokigen_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:gokigen", function() {
10 | it("Check loop resolving", function() {
11 | puzzle.open("gokigen/3/3");
12 |
13 | puzzle.setMode("play");
14 | puzzle.mouse.inputPath("right", 1, 3);
15 | puzzle.mouse.inputPath("left", 1, 5);
16 | puzzle.mouse.inputPath("right", 3, 5);
17 | puzzle.mouse.inputPath("left", 3, 3);
18 | puzzle.mouse.inputPath("right", 5, 1);
19 |
20 | assert.equal(puzzle.board.getc(1, 3).isloop, true);
21 |
22 | puzzle.mouse.inputPath("right", 3, 3);
23 |
24 | assert.equal(puzzle.board.getc(1, 3).isloop, false);
25 | });
26 | });
27 |
--------------------------------------------------------------------------------
/test/variety/herugolf_test.js:
--------------------------------------------------------------------------------
1 | var assert = require("assert");
2 |
3 | var pzpr = require("../../");
4 |
5 | var puzzle = new pzpr.Puzzle();
6 |
7 | describe("Variety:herugolf", function() {
8 | it("allows undoing through answer reset, #126", function() {
9 | puzzle.open("herugolf/3/3/002p");
10 |
11 | puzzle.setMode("play");
12 | puzzle.mouse.inputPath(1, 1, 5, 1, 5, 3);
13 |
14 | var getLine = function(border) {
15 | var s = "";
16 | for (var i = 0; i < border.length; i++) {
17 | s = s + border[i].line;
18 | }
19 | return s;
20 | };
21 |
22 | assert.equal("110000001000", getLine(puzzle.board.border));
23 |
24 | puzzle.ansclear();
25 | puzzle.undo();
26 |
27 | assert.equal("110000001000", getLine(puzzle.board.border));
28 | });
29 | });
30 |
--------------------------------------------------------------------------------
/test/variety/myopia_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/myopia_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:myopia", function() {
10 | it("Outline shaded cells functions correctly", function() {
11 | puzzle.open("myopia/3/3/g6j1h");
12 | puzzle.setMode("play");
13 | puzzle.mouse.setInputMode("auto");
14 | puzzle.mouse.inputPath("left", 0, 2, 0, 0, 2, 0, 2, 2, 4, 2);
15 | puzzle.mouse.inputPath("left", 0, 4, 2, 4, 2, 6, 0, 6);
16 | puzzle.mouse.inputPath("left", 1, 2);
17 | puzzle.mouse.inputPath("left", 3, 4);
18 | puzzle.mouse.inputPath("left", 6, 1);
19 | puzzle.mouse.inputPath("left", 6, 3);
20 | puzzle.mouse.setInputMode("bgcolor1");
21 | puzzle.mouse.inputPath("left", 1, 1, 1, 3, 5, 3, 5, 5);
22 | puzzle.mouse.setInputMode("bgcolor2");
23 | puzzle.mouse.inputPath("left", 1, 5, 3, 5);
24 | puzzle.mouse.inputPath("left", 5, 1);
25 | puzzle.board.operate("outlineshaded");
26 |
27 | var bd = puzzle.board.freezecopy();
28 |
29 | puzzle.open("myopia/3/3/g6j1h");
30 | puzzle.setMode("play");
31 | puzzle.mouse.setInputMode("auto");
32 | puzzle.mouse.inputPath("left", 0, 0, 2, 0, 2, 2, 6, 2, 6, 6);
33 | puzzle.mouse.inputPath("left", 6, 6, 4, 6, 4, 4, 0, 4, 0, 0);
34 | puzzle.mouse.inputPath("left", 1, 2);
35 | puzzle.mouse.inputPath("left", 6, 1);
36 | puzzle.mouse.setInputMode("bgcolor1");
37 | puzzle.mouse.inputPath("left", 1, 1, 1, 3, 5, 3, 5, 5);
38 | puzzle.mouse.setInputMode("bgcolor2");
39 | puzzle.mouse.inputPath("left", 1, 5, 3, 5);
40 | puzzle.mouse.inputPath("left", 5, 1);
41 |
42 | puzzle.board.compareData(bd, function(group, c, a) {
43 | assert.equal(
44 | bd[group][c][a],
45 | puzzle.board[group][c][a],
46 | group + "[" + c + "]." + a
47 | );
48 | });
49 | });
50 | });
51 |
--------------------------------------------------------------------------------
/test/variety/onsen_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/onsen_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:onsen", function() {
10 | it("Check area generating", function() {
11 | puzzle.open("onsen/5/5");
12 |
13 | puzzle.setMode("edit");
14 | puzzle.mouse.inputPath(0, 4, 4, 4, 4, 0);
15 |
16 | puzzle.setMode("play");
17 | puzzle.mouse.inputPath(5, 1, 5, 3, 7, 3, 7, 1);
18 |
19 | assert.equal(puzzle.board.lineblkgraph.components.length, 1);
20 |
21 | puzzle.ansclear();
22 | puzzle.setMode("play");
23 | puzzle.mouse.inputPath(3, 1, 3, 3, 5, 3, 5, 1);
24 |
25 | assert.equal(puzzle.board.lineblkgraph.components.length, 2);
26 |
27 | puzzle.ansclear();
28 |
29 | puzzle.setMode("play");
30 | puzzle.mouse.inputPath(5, 1, 5, 3, 7, 3, 7, 1);
31 |
32 | puzzle.setMode("edit");
33 | puzzle.mouse.inputPath(6, 0, 6, 4);
34 |
35 | assert.equal(puzzle.board.lineblkgraph.components.length, 2);
36 |
37 | puzzle.setMode("edit");
38 | puzzle.mouse.inputPath(6, 0, 6, 4);
39 |
40 | assert.equal(puzzle.board.lineblkgraph.components.length, 1);
41 | });
42 | });
43 |
--------------------------------------------------------------------------------
/test/variety/parquet_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/parquet_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:parquet", function() {
10 | it("sets autocmp", function() {
11 | puzzle.open("pzprv3/parquet/2/3/2 1 /0 1 /0 2 2 /# . . /# # . /");
12 | assert(puzzle.board.getc(1, 1).spblock.clist.checkCmp());
13 | assert(!puzzle.board.getc(5, 1).spblock.clist.checkCmp());
14 |
15 | puzzle.setMode("play");
16 | puzzle.mouse.inputPath(5, 1);
17 | assert(puzzle.board.getc(5, 1).spblock.clist.checkCmp());
18 | });
19 |
20 | it("rewrites undo history", function() {
21 | puzzle.open("pzprv3/parquet/2/3/2 1 /0 1 /0 2 2 /. . . /. . . /");
22 | assert.equal(puzzle.opemgr.history.length, 0);
23 |
24 | puzzle.setMode("play");
25 | puzzle.mouse.inputPath(5, 1);
26 | assert.equal(puzzle.opemgr.history.length, 1);
27 |
28 | puzzle.mouse.inputPath(1, 1, 3, 1);
29 | assert.equal(puzzle.opemgr.history.length, 2);
30 | });
31 |
32 | it("rebuilds cell lists", function() {
33 | puzzle.open("pzprv3/parquet/2/2/0 /2 /0 2 /. . /. . /");
34 |
35 | puzzle.setMode("edit");
36 | puzzle.mouse.setInputMode("border");
37 | puzzle.mouse.inputPath(2, 2, 4, 2);
38 | puzzle.mouse.inputPath(2, 2, 4, 2);
39 |
40 | puzzle.setMode("play");
41 | puzzle.mouse.inputPath(1, 1);
42 |
43 | var result = "pzprv3/parquet/2/2/0 /2 /0 0 /# # /# # /";
44 | var filestr = puzzle.getFileData();
45 | var resultstr = result.replace(/\//g, "\n");
46 | assert.equal(filestr, resultstr);
47 | });
48 | });
49 |
--------------------------------------------------------------------------------
/test/variety/pmemory_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/pmemory_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:pmemory", function() {
10 | it("Moves the circles when reducing board", function() {
11 | puzzle.open("pmemory/4/4/00003o688");
12 |
13 | puzzle.board.operate("reducert");
14 |
15 | var url = puzzle.getURL().split("?")[1];
16 | assert.equal(url, "pmemory/3/4/000e468");
17 | });
18 |
19 | it("Resets circles when expanding 1x1 grid", function() {
20 | puzzle.open("pmemory/1/1/00");
21 |
22 | puzzle.board.operate("expandrt");
23 | puzzle.board.operate("expandrt");
24 |
25 | var url = puzzle.getURL().split("?")[1];
26 | assert.equal(url, "pmemory/3/1/0010");
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/test/variety/railpool_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/railpool_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:railpool", function() {
10 | it("Can encode a clue in the last cell", function() {
11 | puzzle.open("pzprv3/railpool/1/3/1 1,2 1,2,3 /. . . /3/0 1 2 /0 0 /");
12 | var bd2 = puzzle.board.freezecopy();
13 |
14 | var urlstr = puzzle.getURL();
15 | puzzle.open(urlstr);
16 |
17 | puzzle.board.compareData(bd2, function(group, c, a) {
18 | assert.equal(
19 | bd2[group][c][a],
20 | puzzle.board[group][c][a],
21 | group + "[" + c + "]." + a
22 | );
23 | });
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/test/variety/ringring_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/ringring.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:ringring", function() {
10 | it("Check cross loop component behavior", function() {
11 | puzzle.open("ringring/4/4/0282");
12 | puzzle.setMode("play");
13 | puzzle.mouse.inputPath("left", 1, 3, 3, 3);
14 | puzzle.mouse.inputPath("left", 3, 1, 3, 3, 3, 5);
15 | puzzle.mouse.inputPath("left", 1, 3, 1, 5, 3, 5, 5, 5);
16 | puzzle.mouse.inputPath("left", 3, 5, 3, 7, 5, 7, 5, 5, 5, 3, 5, 1, 3, 1);
17 | puzzle.mouse.inputPath("left", 3, 3, 5, 3, 7, 3, 7, 5, 5, 5);
18 |
19 | assert.equal(puzzle.check(false).complete, true);
20 | });
21 | });
22 |
--------------------------------------------------------------------------------
/test/variety/shwolf_test.js:
--------------------------------------------------------------------------------
1 | var assert = require("assert");
2 |
3 | var pzpr = require("../../");
4 |
5 | var puzzle = new pzpr.Puzzle();
6 |
7 | describe("Variety:shwolf", function() {
8 | it("Encodes a small puzzle well", function() {
9 | puzzle.open("shwolf/1/1");
10 | puzzle.setMode("edit");
11 | puzzle.cursor.init(1, 1);
12 | puzzle.key.inputKeys("1");
13 | assert.equal(puzzle.board.getc(1, 1).qnum, 1);
14 | var url = puzzle.getURL();
15 | var puzzle2 = new pzpr.Puzzle();
16 | puzzle2.open(url);
17 | assert.equal(puzzle2.board.getc(1, 1).qnum, 1);
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/test/variety/slither_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/slither_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:slither", function() {
10 | it("Outline shaded cells functions correctly", function() {
11 | puzzle.open("slither/2/4/dbh");
12 | puzzle.setMode("play");
13 | puzzle.mouse.setInputMode("auto");
14 | puzzle.mouse.inputPath("left", 4, 0, 4, 2);
15 | puzzle.mouse.inputPath("left", 2, 4, 4, 4);
16 | puzzle.mouse.inputPath("left", 2, 6, 4, 6);
17 | puzzle.mouse.inputPath("left", 0, 8, 4, 8);
18 | puzzle.mouse.inputPath("left", 2, 3);
19 | puzzle.mouse.inputPath("left", 2, 5);
20 | puzzle.mouse.inputPath("left", 1, 4);
21 | puzzle.mouse.inputPath("left", 1, 6);
22 | puzzle.mouse.setInputMode("bgcolor1");
23 | puzzle.mouse.inputPath("left", 1, 1, 1, 7);
24 | puzzle.mouse.setInputMode("bgcolor2");
25 | puzzle.mouse.inputPath("left", 3, 1);
26 | puzzle.mouse.inputPath("left", 3, 5);
27 |
28 | puzzle.board.operate("outlineshaded");
29 | var bd = puzzle.board.freezecopy();
30 |
31 | puzzle.open("slither/2/4/dbh");
32 | puzzle.setMode("play");
33 | puzzle.mouse.setInputMode("auto");
34 | puzzle.mouse.inputPath("left", 2, 2, 2, 0, 0, 0, 0, 8, 4, 8);
35 | puzzle.mouse.inputPath("left", 4, 4, 2, 4, 2, 6, 4, 6);
36 | puzzle.mouse.inputPath("left", 2, 3);
37 | puzzle.mouse.inputPath("left", 1, 4);
38 | puzzle.mouse.inputPath("left", 1, 6);
39 | puzzle.mouse.setInputMode("bgcolor1");
40 | puzzle.mouse.inputPath("left", 1, 1, 1, 7);
41 | puzzle.mouse.setInputMode("bgcolor2");
42 | puzzle.mouse.inputPath("left", 3, 1);
43 | puzzle.mouse.inputPath("left", 3, 5);
44 |
45 | puzzle.board.compareData(bd, function(group, c, a) {
46 | assert.equal(
47 | bd[group][c][a],
48 | puzzle.board[group][c][a],
49 | group + "[" + c + "]." + a
50 | );
51 | });
52 | });
53 | });
54 |
--------------------------------------------------------------------------------
/test/variety/tapa_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/tapa_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:tapa", function() {
10 | it("Check shaded cell length around numbers", function() {
11 | puzzle.open("tapa/3/3");
12 | puzzle.setMode("edit");
13 | puzzle.cursor.init(3, 3);
14 | puzzle.key.inputKeys("1", "-", "2");
15 |
16 | // shaded cells = [1,1,3]
17 | puzzle.setMode("play");
18 | puzzle.ansclear();
19 | puzzle.mouse.inputPath(1, 1, 5, 1);
20 | puzzle.mouse.inputPath(1, 5);
21 | puzzle.mouse.inputPath(5, 5);
22 | assert.equal(puzzle.check(true)[0], "ceTapaNe");
23 |
24 | // shaded cells = [1,2,2]
25 | puzzle.setMode("play");
26 | puzzle.ansclear();
27 | puzzle.mouse.inputPath(1, 1, 3, 1);
28 | puzzle.mouse.inputPath(1, 5);
29 | puzzle.mouse.inputPath(5, 3, 5, 5);
30 | assert.notEqual(puzzle.check(true)[0], "ceTapaNe");
31 | });
32 | });
33 |
--------------------------------------------------------------------------------
/test/variety/tentaisho_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/tentaisho.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:tentaisho", function() {
10 | it("Check star input resolves missing star error", function() {
11 | puzzle.open("tentaisho/5/5");
12 | puzzle.setMode("edit");
13 | puzzle.mouse.inputPath("left", 2, 5);
14 |
15 | puzzle.setMode("play");
16 | puzzle.mouse.inputPath("left", 4, 0, 4, 10);
17 | assert.equal(puzzle.check(false)[0], "bkNoStar");
18 |
19 | puzzle.setMode("edit");
20 | puzzle.mouse.inputPath("left", 7, 5);
21 | assert.equal(puzzle.check(false).complete, true);
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/test/variety/tontti_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/tontti_test.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:tontti", function() {
10 | describe("TonttiGraph", function() {
11 | it("can separate components", function() {
12 | puzzle.open("tontti/3/2/2j1");
13 | assert.equal(puzzle.check(true)[0], "bkNumGe2");
14 |
15 | puzzle.setMode("play");
16 | puzzle.mouse.inputPath(3, 5, 3, 1, 7, 1);
17 | assert.equal(puzzle.check(true)[0], null);
18 | });
19 |
20 | it("can join components", function() {
21 | puzzle.open("tontti/3/2/2j1");
22 | puzzle.setMode("play");
23 | puzzle.mouse.inputPath(3, 5, 3, 1, 7, 1);
24 | puzzle.mouse.inputPath(7, 1, 5, 1);
25 | assert.equal(puzzle.check(true)[0], "bkNumGe2");
26 | });
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/test/variety/yajilin_test.js:
--------------------------------------------------------------------------------
1 | // test/variety/yajilin.js
2 |
3 | var assert = require("assert");
4 |
5 | var pzpr = require("../../");
6 |
7 | var puzzle = new pzpr.Puzzle();
8 |
9 | describe("Variety:yajilin", function() {
10 | it("Clues are considered completed correctly", function() {
11 | puzzle.open("yajilin/7/1/41b30a");
12 | puzzle.setMode("play");
13 | assert.equal(puzzle.board.cell[0].isCmp(), false);
14 | assert.equal(puzzle.board.cell[3].isCmp(), false);
15 | puzzle.mouse.inputPath("left", 3, 1, 5, 1);
16 | puzzle.mouse.inputPath("left", 9, 1);
17 | puzzle.mouse.inputPath("right", 13, 1);
18 | assert.equal(puzzle.board.cell[0].isCmp(), true);
19 | assert.equal(puzzle.board.cell[3].isCmp(), true);
20 | });
21 | it("Check irowake adds different color", function() {
22 | puzzle.open("yajilin/2/3/");
23 | puzzle.setConfig("irowake", true);
24 | puzzle.irowake();
25 |
26 | puzzle.mouse.inputPath("left", 1, 1, 3, 1);
27 | puzzle.mouse.inputPath("left", 1, 3, 3, 3);
28 | puzzle.mouse.inputPath("left", 1, 5, 3, 5);
29 |
30 | puzzle.irowake();
31 |
32 | puzzle.setConfig("irowake", false);
33 |
34 | var items = puzzle.board.linegraph.components;
35 | assert.notEqual(items[0].color, items[1].color);
36 | assert.notEqual(items[0].color, items[2].color);
37 | assert.notEqual(items[1].color, items[2].color);
38 | });
39 | });
40 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "redirects": [
3 | {
4 | "source": "/",
5 | "destination": "/list.html"
6 | }
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------