Merge pull request #1608 from xexyl/morgan22013
This commit is contained in:
2 files changed
+59
-36
No files matched your search
+31
-13
@@ -18,6 +18,10 @@ echo "2013/10/03" | ./morgan1
|
||||
echo "1985/10/28" | ./morgan1
|
||||
|
||||
echo "1996/12/31" | ./morgan1
|
||||
|
||||
echo "1986/03/31" | ./morgan1 # Comet Halley (look for 'Ha')
|
||||
|
||||
echo "1997/04/01" | ./morgan1 # Comet Hale-Bopp (look for 'Hb')
|
||||
```
|
||||
|
||||
Try pressing the arrow keys when your focus is in the window.
|
||||
@@ -50,35 +54,49 @@ calendar](https://en.wikipedia.org/wiki/Julian_calendar) and
|
||||
[Gregorian calendar](https://en.wikipedia.org/wiki/Gregorian_calendar) (10 days
|
||||
missing between 1582/10/04 and 1582/10/15).
|
||||
|
||||
The scale is logarithmic to be able to display the 8 planets without having
|
||||
Mercury, Venus, Earth and Mars squeezed around the Sun.
|
||||
The scale is logarithmic to be able to display the [8
|
||||
planets](http://news.bbc.co.uk/2/hi/5282440.stm) without having
|
||||
[Mercury](https://science.nasa.gov/mercury),
|
||||
[Venus](https://science.nasa.gov/venus/),
|
||||
[Earth](https://science.nasa.gov/earth/facts) and
|
||||
[Mars](https://science.nasa.gov/mars) squeezed around the
|
||||
[Sun](https://science.nasa.gov/sun/).
|
||||
|
||||
The size is not proportional either.
|
||||
|
||||
|
||||
### Bonus
|
||||
|
||||
It also displays the position of 2 famous comets during their last approach:
|
||||
|
||||
- The first one around the third IOCCC.
|
||||
- The second one between the thirteenth and fourteenth IOCCC.
|
||||
- The [first one](https://science.nasa.gov/solar-system/comets/1p-halley/)
|
||||
around the [third IOCCC](/years.html#1986).
|
||||
- The [second
|
||||
one](https://science.nasa.gov/solar-system/comets/c-1995-o1-hale-bopp/) between
|
||||
the [thirteenth](/years.html#1996) and [fourteenth](/years.html#1998) IOCCC.
|
||||
|
||||
|
||||
### Limitations
|
||||
|
||||
* ASCII character set is assumed.
|
||||
* A C99 compiler is required (for some `math.h` functions).
|
||||
* The position should be correct for years between (-1000; +3000)
|
||||
* The approximations done in the formula are OK for displaying the
|
||||
position around the sun but not for other applications like ephemeride or
|
||||
sky view from Earth (angles may be off by 1 or 2 degrees sometimes).
|
||||
* The approximations done in the formula are OK for displaying the position
|
||||
around the [Sun](https://science.nasa.gov/sun/) but not for other applications
|
||||
like [ephemeride](https://en.wikipedia.org/wiki/Ephemeris) or sky view from
|
||||
[Earth](https://science.nasa.gov/earth/facts) (angles may be off by 1 or 2
|
||||
degrees sometimes).
|
||||
|
||||
|
||||
### Obfuscation
|
||||
|
||||
* Reuse of 1 letter variables.
|
||||
* Only the main function with some `for` loops.
|
||||
* Only the `main()` function with some `for` loops.
|
||||
* Constants for orbital elements encoded in a string.
|
||||
* Hexadecimal and decimal values used inconsistently.
|
||||
* Comparisons order are not consistent.
|
||||
* A lot of stuff is done in the different parts of the for loop.
|
||||
* A lot of stuff is done in the different parts of the `for` loop.
|
||||
|
||||
|
||||
### Compilation warnings
|
||||
|
||||
@@ -104,10 +122,10 @@ morgan1.c:56:14: warning: '&&' within '||' [-Wlogical-op-parentheses]
|
||||
This is due to most of the parentheses and braces being removed when
|
||||
unnecessary.
|
||||
|
||||
To verify the display, you can look at one of this programs :
|
||||
* xephem : https://web.archive.org/web/20130310133219/http://www.clearskyinstitute.com/xephem/
|
||||
* homeplanet : https://www.fourmilab.ch/homeplanet/
|
||||
* https://www.theplanetstoday.com
|
||||
To verify the display, you can look at one of these programs :
|
||||
* xephem : <https://web.archive.org/web/20130310133219/http://www.clearskyinstitute.com/xephem/>
|
||||
* homeplanet : <https://www.fourmilab.ch/homeplanet/>
|
||||
* <https://www.theplanetstoday.com>
|
||||
|
||||
|
||||
## Copyright and CC BY-SA 4.0 License:
|
||||
|
||||
+28
-23
@@ -20,13 +20,6 @@ For the graphical version (X11):
|
||||
```
|
||||
|
||||
|
||||
### Try:
|
||||
|
||||
```sh
|
||||
echo "Do or do not. There is no try."
|
||||
```
|
||||
|
||||
|
||||
## Judges' remarks:
|
||||
|
||||
The judges enjoyed playing the game almost to completion; if we remember
|
||||
@@ -41,23 +34,28 @@ This program is a domino game. The goal is to place dominoes on the 8x8 grid.
|
||||
Each domino is made of 6 squares of the colour red or green. To place a domino,
|
||||
at least one of its side shall match the other side of another domino.
|
||||
|
||||
|
||||
### How to play
|
||||
|
||||
|
||||
### Start of the game
|
||||
|
||||
At the start of the game, the first domino is placed randomly on the grid. You
|
||||
get another domino to place by selecting one empty position in the stack on the
|
||||
right. You can have up to 8 dominoes pending at any time.
|
||||
|
||||
|
||||
### Moving in the stack
|
||||
|
||||
Use `Up` and `Down` key to move the cursor in the stack. Press `Enter` to either
|
||||
Use `Up` and `Down` key to move the cursor in the stack. Press `Enter` to
|
||||
either:
|
||||
|
||||
* Reveal a new domino if the position was empty.
|
||||
* Select the domino to try to place it if the position was not empty.
|
||||
|
||||
The currently selected domino is indicated on the top right.
|
||||
|
||||
|
||||
### Placing a domino
|
||||
|
||||
Once a domino has been selected, the cursor moves to the grid. Use `Up`, `Down`,
|
||||
@@ -66,39 +64,43 @@ to place the domino.
|
||||
|
||||
To go back to selection mode, press `Enter` on an occupied position.
|
||||
|
||||
The domino can be placed in an empty position if all its neighbour have matching
|
||||
sides and the domino has at least one neighbour.
|
||||
The domino can be placed in an empty position if all its neighbours have
|
||||
matching sides and the domino has at least one neighbour.
|
||||
|
||||
|
||||
### Scoring
|
||||
|
||||
First, depending on the number of dominoes pending in the stack, a bonus is
|
||||
accorded :
|
||||
accorded:
|
||||
|
||||
* 1 domino in the stack : 8 points.
|
||||
* 2 dominoes in the stack : 4 points.
|
||||
* 3 or 4 dominoes in the stack : 2 points.
|
||||
* 5 or more dominoes in the stack : 0 points.
|
||||
* 1 domino in the stack: 8 points.
|
||||
* 2 dominoes in the stack: 4 points.
|
||||
* 3 or 4 dominoes in the stack: 2 points.
|
||||
* 5 or more dominoes in the stack: 0 points.
|
||||
|
||||
Then the bonus is multiplied by the number of matching neighbours the placed domino
|
||||
has (1, 2, 3 or 4). This is added to the score.
|
||||
|
||||
Finally, the total score is divided by the number of dominoes placed (1 - 64).
|
||||
|
||||
The 3 numbers on display represent : the total score, the fill count and the
|
||||
The 3 numbers on display represent: the total score, the fill count and the
|
||||
final score (total score divided by fill count).
|
||||
|
||||
|
||||
### End of the game
|
||||
|
||||
The game is finished when no more dominos can be placed and you either :
|
||||
The game is finished when no more dominoes can be placed and if one of the
|
||||
following occurs:
|
||||
|
||||
* Completely filled the grid.
|
||||
* Have 8 pending dominoes in the stack.
|
||||
* No more domino can be revealed in the stack (more than 56 dominoes placed on
|
||||
the grid).
|
||||
* You have completely filled the grid.
|
||||
* You have 8 pending dominoes in the stack.
|
||||
* No more dominoes can be revealed in the stack (more than 56 dominoes placed on
|
||||
the grid).
|
||||
|
||||
**Note**: There is no real end of game detection implemented in the program,
|
||||
simply press `q` when you have finished...
|
||||
|
||||
|
||||
### Strategy
|
||||
|
||||
* Try to minimize the number of dominoes revealed in the stack. The lower the
|
||||
@@ -109,20 +111,23 @@ simply press `q` when you have finished...
|
||||
placement. If the corner of a domino does not match another corner diagonally,
|
||||
the move is valid but will prevent some future moves.
|
||||
|
||||
|
||||
### Limitations
|
||||
|
||||
* ASCII character set is assumed.
|
||||
* Requires both ncurses and X11 at compilation and runtime, but selection could
|
||||
be done at compilation with some extra code (mainly empty stubs).
|
||||
|
||||
|
||||
### Obfuscation
|
||||
|
||||
* 1 letter identifier, reused when possible.
|
||||
* 1 algorithm, 2 different kind of display (ncurses and X11) mixed.
|
||||
* 1 letter identifiers, reused when possible.
|
||||
* 1 algorithm, 2 different kinds of display (ncurses and X11) mixed.
|
||||
* No parameters to functions, all variables are global and shared.
|
||||
* Some variables are not initialized if they have a known value at the time of
|
||||
use.
|
||||
|
||||
|
||||
### Compilation warnings
|
||||
|
||||
With gcc 4.7.2 on Linux Ubuntu 12.10 :
|
||||
|
||||
Reference in new issue
Block a user