Let's make an ASCII art clock and calendar that tells us the current month, day of the month, day of the week, hour, minute, and whether it's night or day (but not the year or second).
At any particular time the calendar will look something like this: (it looks better with less line spacing)
________________________________________________________________ |\ ____________________________________________________________ /| | | ___ | | | | _( ) | | | | (___)__) -.- | | | | | | | | | | | | -.- | | | | -.- | | | | ___ | | | | _( ) | | | | (___)__) | | | | | | | | ___ | | | | _( ) | | | | _ (___)__) | | | | /|\ | | | | / | \ | | | | /__|__\ | | | |____|____ | | | |\_______/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-~~-~~~~~| | | |____________________________________________________________| | |/______________________________________________________________\|
It is always a 66 by 23 character "picture frame" whose border never changes.
The image within the frame tells us the time and date:
- During the day (6:00am - 5:59pm) the month is determined by the number of birds (
-.-) in the sky. January = 1 bird, February = 2 birds, etc.
- During the night (6:00pm - 5:59am) the birds are replaced with 3 times as many stars (
*). January = 3 stars, February = 6 stars, etc. Birds and stars are never in the sky at the same time.
- The day of the month is determined by the number of characters between the two dashes (
-) on the water. e.g.
~~-~~~~-~~means it is the fourth day of the month. Depending on the minute, the boat may need to be between the dashes (the dashes do not loop around).
- The day of the week is determined by the number of clouds in the sky (all clouds look the same). Sunday = 0 clouds, Monday = 1 cloud, ..., Saturday = 6 clouds.
- The hour is determined by the level of water (and the boat). At its lowest (as above) it is 1 o'clock, during 2 o'clock it is one character higher, and so on up to 12 o'clock, then back to 1 o-clock. (It's a 12 not a 24 hour clock.)
- The minute is determined by the horizontal position of the boat. At the top of the hour the boat touches the left edge of the frame (as above). At each subsequent minute the boat moves right by one character. In minutes 51 to 59 it loops from the right side of the frame back to the left.
So, given that the example above has 3 birds, 3 clouds, 2 chars between dashes, the water at the lowest level, and the boat on the far left we can tell that the date is Wednesday March 2nd, and the time is 1:00pm.
Here is another example from Sunday April 25th, at 3:58am:
________________________________________________________________ |\ ____________________________________________________________ /| | | | | | | * * | | | | * * * | | | | * | | | | | | | | * | | | | * * | | | | | | | | * | | | | | | | | * | | | | _ | | | | /|\ * | | | |/ | \ | | | |__|__\ /| | | |__|____ __| | | |______/~~~~~~~~~~~~~~~~~~~-~~~~~~~~~~~~~~~~~~~~~~~~~-~~~~~\_| | | | | | | | | | | |____________________________________________________________| | |/______________________________________________________________\|
Your goal is to write the shortest program possible that outputs these ASCII art "calendars" to stdout using the time when the program is run.
Every run of the program should output one time-scene. Updates should not be automatic (or animated).
The clouds, stars, and birds, should be placed randomly in the sky (so every run, even ones at the same time are likely to be different). They should never overlap the boat or each other. (Also the water dashes should not overlap the boat hull.)
Notice that nothing I have described appears underwater. This is for you to do. During one predetermined hour of every week (your choice), something interesting should be drawn underwater. It could be a sea monster or sunken ship or anything, it's up to you. During that hour you may even alter the design of the rest of the scene (staying in the frame bounds).
This is a code-golf popularity-contest combo.
Your score is
(bytes in program) - 4 * (upvotes - downvotes). The lowest score wins.
Use http://mothereff.in/byte-counter as a byte counter if you use non-ASCII characters.
Notes and Updates
You may use buoys instead of dashes, since, lets face it, they're much more appropriate:
| | ~~(_)~~~(_)~~ (3rd of the month)
The dashes (or buoys) do not have to be random but it would be nice if they were.
- Your "special hour" should last 60 minutes from the top of the hour to 1 minute before the next hour.
- During the special hour the things you draw underwater may move and may alter the surface and the sky when it makes sense (e.g. sea monster eating the boat, black hole forming at the sea floor, etc.)