From 0497f5874826b7820face7512e2abf3b5538a4d8 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Wed, 3 May 2023 06:08:25 -0700 Subject: [PATCH] Format and link fix 2011/hamaji/README.md --- 2011/hamaji/README.md | 121 ++++++++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 52 deletions(-) diff --git a/2011/hamaji/README.md b/2011/hamaji/README.md index 7abdcdef3..6e9c344e8 100644 --- a/2011/hamaji/README.md +++ b/2011/hamaji/README.md @@ -1,7 +1,7 @@ # Best solved puzzle - Shinichiro Hamaji - +Shinichiro Hamaji + ## To build: @@ -30,29 +30,29 @@ make ## Judges' remarks: This program solves "Nonogram", which also known as "Paint by Numbers": - - +. This entry roar as the Year of the Dragon: A year considered some to be good luck. Well it was certainly true that the IOCCC was lucky to get such a fine submission! The source code is a solution to a Paint by Numbers puzzle when you -paint by C. Try your hand at solving a few of the other .nono +paint by C. Try your hand at solving a few of the other `.nono` files and then compare your solution with this program! -NOTE: NONOGRAM (r) is a registered Trademark and is used with permission. - See http://nonogram.com/ for more information. +NOTE: NONOGRAM (r) is a registered Trademark and is used with permission. See + for more +information. ## Author's remarks: The format of the input files are as same as this site: +. - - -For example, for a simple problem which shows a glider of [conway's -lifegame](http://en.wikipedia.org/wiki/Conway's_Game_of_Life). +For example, for a simple problem which shows a glider of [Conway's +Game of Life](http://en.wikipedia.org/wiki/Conway's_Game_of_Life): +``` 1 . 112 @@ -61,8 +61,11 @@ lifegame](http://en.wikipedia.org/wiki/Conway's_Game_of_Life). 1 X 3 XXX +``` + the input should be +``` 1 1 3 @@ -70,63 +73,76 @@ the input should be 1 1.1 2 +``` The width and the height of an input puzzle should be less than or equal to 60. -When this solver finds the problem has no solution, it prints "invalid". +When this solver finds the problem has no solution, it prints "`invalid`". This means the problem is indeed broken. For example, this happens for an input like +``` 2 - 2 +``` -When this solver cannot find a solution, it prints "failed". This +When this solver cannot find a solution, it prints "`failed`". This failure can happen when the problem has more than one solution or the solver cannot solve the input problem. Here is an example input of the former: +``` 1 1 - 1 1 +``` There are two solutions: +``` 11 1 X 1 X +``` and +``` 11 1 X 1 X +``` ### Detail -Solving Nonogram is known NP-complete, so we cannot make a solver -which solves all puzzles. However, we can write a solver which solves -most problems solvable by humans. There are a bunch of ways to write -such programs. The two most obvious approaches are: +Solving Nonogram is +[NP-complete](https://en.wikipedia.org/wiki/NP-completeness), so we cannot make +a solver which solves all puzzles. However, we can write a solver which solves +most problems solvable by humans. There are a bunch of ways to write such +programs. The two most obvious approaches are: 1. Check all possible solutions with backtracking. 2. Implement all techniques which humans use. The former, brute-force approach is easy to implement. However, it works only for smaller problems (width and height should be at most 30 -or so). Similarly, using generic probabilistic metaheuristics such as -simulated annealing doesn't work for big problems. +or so). Similarly, using generic probabilistic +[metaheuristics](https://en.wikipedia.org/wiki/Metaheuristic) such as +[simulated annealing](https://en.wikipedia.org/wiki/Simulated_annealing) doesn't +work for big problems. - +See: . By its definition, the latter works for all human-solvable problems. The issue of the latter approach is this kind of programs -tends to be lengthy. This approach still requires some recursions. The +tends to be lengthy. This approach still requires some +[recursions](https://en.wikipedia.org/wiki/Recursion). The most difficult problems which are considered human-solvable may require some "guesses". For this kind of problems, we need to assume a cell is a space or a box, go ahead some steps with simple methods, @@ -134,19 +150,19 @@ mark the tried cell as a box (or a space if we assumed the tried cell is a box) if a contradiction is found. My program uses an approach like "Set based solver" introduced in -[http://www.haskell.org/haskellwiki/Nonogram](http://www.haskell.org/haskellwiki/Nonogram) . -This should be equivalent to the combinations of simple methods (no -advanced reasoning with guess). My solver also runs non-recursive -guess for each undetermined cells. So, my program should be able to -solve most human-solvable problems (assuming humans cannot execute -deeper recursions). +. This should be equivalent +to the combinations of simple methods (no advanced reasoning with guess). My +solver also runs a non-recursive guess for each undetermined cells. So, my +program should be able to solve most human-solvable problems (assuming humans +cannot execute deeper recursions). ### Obfuscation -First of all, as you see, my program looks like a nonogram puzzle -which results a dragon. This puzzle is "dragon.nono" in this -directory. Note that whitespaces in character literals, a string -literal, and around the last comment are considered as a boxed cell. +First of all, as you see, my program looks like a nonogram puzzle which results +in a [dragon](https://www.draconika.com/what). This puzzle is +[dragon.nono](dragon.nono) in this directory. Note that whitespaces in character +literals, a string literal, and around the last comment are considered as a +boxed cell. My program is based on bit operations for speed. Many values are stored using negative logic (0 means on and 1 means off) to utilize @@ -162,22 +178,22 @@ with the well obfuscated code. ### Portability -This program uses two C99 features. One line comments and "long long". -GCC's "-ansi -pedantic" check should pass: +This program uses two C99 features. One line comments and `long long`. +GCC's `-ansi -pedantic` check should pass: ```sh cc -ansi -pedantic -std=c99 hamaji.c ``` -I checked my program with gcc-4.6.2 on linux, llvm-gcc-4.2 on mac, and -clang-3.0 on mac. +I checked my program with gcc-4.6.2 on linux, llvm-gcc-4.2 on Mac, and +clang-3.0 on Mac. -Note that the behavior of scanf differs on linux and mac, but this +Note that the behavior of `scanf()` differs on linux and mac, but this program supports both semantics. -This program should not depend on sizeof(int), sizeof(void*), ASCII, -memory layout, undefined evaluation order (e.g., a[i++]=i), etc. -This program won't work if the size of long long literal is less than 8. +This program should not depend on `sizeof(int)`, `sizeof(void*)`, ASCII, +memory layout, undefined evaluation order (e.g., `a[i++]=i`), etc. +This program won't work if the size of `long long` literal is less than 8. By grepping the source code of gcc ```sh @@ -186,25 +202,26 @@ grep LONG_LONG_TYPE_SIZE gcc/config/*/* I found long long may be 32bit integers only on AVR. -### A few more +### A few more things -This code is considered as a new year's postcard in Japan. We chose -the dragon because 2012 is the year of dragon. - - +This code is considered as a [new year's postcard in +Japan](http://en.wikipedia.org/wiki/Japanese_New_Year#Postcards). We chose +the dragon because 2012 is the [year of +dragon](https://japanesezodiac.com/japanese-year-of-the-dragon). The second author wrote the picture, and the first author did everything else. -The dragon.nono, samurai.nono, and penguin.nono was written by the -second author. The soccer.nono was from a wikipedia entry. This file -is important because it requires some guesses. The random.nono file -was randomly generated. The codegolf.nono and face.nono have borrowed -from this site: +The [dragon.nono](dragon.nono), [samurai.nono](samurai.nono), and +[penguin.nono](penguin.nono) were written by the +second author. The [soccer.nono](soccer.nono) was from a wikipedia entry. This file +is important because it requires some guesses. The [random.nono](random.nono) file +was randomly generated. The [codegolf.nono](codegolf.nono) and +[face.nono](face.nono) were taken from +. - - -You can reproduce dragon.nono from hamaji.c using c2nono.pl: +You can reproduce [dragon.nono](dragon.nono) from [hamaji.c](hamaji.c) using +[c2nono.pl](c2nono.pl): ```sh perl c2nono.pl hamaji.c | ./hamaji