main 5301155192d9 cached
3600 files
6.7 MB
1.9M tokens
6880 symbols
1 requests
Download .txt
Showing preview only (7,686K chars total). Download the full file or copy to clipboard to get everything.
Repository: coding-horror/basic-computer-games
Branch: main
Commit: 5301155192d9
Files: 3600
Total size: 6.7 MB

Directory structure:
gitextract_eq2gu5pa/

├── .coveragerc
├── .github/
│   └── workflows/
│       ├── check-python.yml
│       ├── file-size.yml
│       └── rust.yml
├── .gitignore
├── .nojekyll
├── .pre-commit-config.yaml
├── 00_Alternate_Languages/
│   ├── 01_Acey_Ducey/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── aceyducey.ms
│   │   ├── README.md
│   │   ├── aceyducey.bas
│   │   ├── c++/
│   │   │   ├── README.md
│   │   │   ├── build/
│   │   │   │   ├── x64/
│   │   │   │   │   ├── Debug/
│   │   │   │   │   │   └── aceyducey.pdb
│   │   │   │   │   └── Release/
│   │   │   │   │       └── aceyducey.pdb
│   │   │   │   └── x86/
│   │   │   │       ├── Debug/
│   │   │   │       │   └── aceyducey.pdb
│   │   │   │       └── Release/
│   │   │   │           └── aceyducey.pdb
│   │   │   └── source/
│   │   │       ├── Aceyducey.cpp
│   │   │       └── Aceyducey.h
│   │   ├── d/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── aceyducey.d
│   │   │   └── aceyducey_literal.d
│   │   ├── elm/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── docs/
│   │   │   │   ├── app.js
│   │   │   │   └── index.html
│   │   │   ├── elm.json
│   │   │   ├── package.json
│   │   │   ├── resources/
│   │   │   │   └── index.html
│   │   │   └── src/
│   │   │       └── Main.elm
│   │   ├── go/
│   │   │   └── main.go
│   │   ├── nim/
│   │   │   └── aceyducey.nim
│   │   └── pascal/
│   │       ├── .gitattributes
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── object-pascal/
│   │       │   ├── aceyducey.lpi
│   │       │   ├── aceyducey.pas
│   │       │   ├── deck.pas
│   │       │   └── game.pas
│   │       └── simple/
│   │           ├── aceyducey.lpi
│   │           └── aceyducey.pas
│   ├── 02_Amazing/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── amazing.ms
│   │   ├── README.md
│   │   ├── amazing.bas
│   │   ├── go/
│   │   │   └── main.go
│   │   └── pascal/
│   │       ├── .gitattributes
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── object-pascal/
│   │       │   ├── amazing.lpi
│   │       │   ├── amazing.pas
│   │       │   ├── amazingapplication.pas
│   │       │   ├── maze.pas
│   │       │   └── room.pas
│   │       └── simple/
│   │           ├── amazing.lpi
│   │           └── amazing.pas
│   ├── 03_Animal/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── animal.ms
│   │   ├── README.md
│   │   ├── animal.bas
│   │   └── go/
│   │       └── main.go
│   ├── 04_Awari/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── awari.ms
│   │   ├── README.md
│   │   ├── awari.bas
│   │   └── elm/
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── docs/
│   │       │   └── index.html
│   │       ├── elm.json
│   │       ├── package.json
│   │       ├── resources/
│   │       │   └── index.html
│   │       └── src/
│   │           └── Main.elm
│   ├── 05_Bagels/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bagels.ms
│   │   ├── README.md
│   │   ├── bagels.bas
│   │   ├── go/
│   │   │   └── main.go
│   │   └── nim/
│   │       └── bagels.nim
│   ├── 06_Banner/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── banner.ms
│   │   ├── README.md
│   │   └── banner.bas
│   ├── 07_Basketball/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── basketball.ms
│   │   ├── README.md
│   │   └── basketball.bas
│   ├── 08_Batnum/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── batnum.ms
│   │   ├── README.md
│   │   ├── batnum.bas
│   │   └── go/
│   │       └── main.go
│   ├── 09_Battle/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── battle.ms
│   │   ├── README.md
│   │   ├── battle.bas
│   │   └── go/
│   │       └── main.go
│   ├── 10_Blackjack/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── blackjack.ms
│   │   ├── README.md
│   │   ├── blackjack.bas
│   │   └── pascal/
│   │       └── README.md
│   ├── 11_Bombardment/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bombardment.ms
│   │   ├── README.md
│   │   ├── bombardment.bas
│   │   └── go/
│   │       └── main.go
│   ├── 12_Bombs_Away/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bombsaway.ms
│   │   ├── README.md
│   │   ├── bombsaway.bas
│   │   └── go/
│   │       └── main.go
│   ├── 13_Bounce/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bounce.ms
│   │   ├── README.md
│   │   └── bounce.bas
│   ├── 14_Bowling/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bowling.ms
│   │   ├── README.md
│   │   └── bowling.bas
│   ├── 15_Boxing/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── boxing.ms
│   │   ├── README.md
│   │   └── boxing.bas
│   ├── 16_Bug/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bug.ms
│   │   ├── README.md
│   │   └── bug.bas
│   ├── 17_Bullfight/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bull.ms
│   │   ├── README.md
│   │   └── bullfight.bas
│   ├── 18_Bullseye/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bullseye.ms
│   │   ├── README.md
│   │   └── bullseye.bas
│   ├── 19_Bunny/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bunny.ms
│   │   ├── README.md
│   │   └── bunny.bas
│   ├── 20_Buzzword/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── buzzword.ms
│   │   ├── README.md
│   │   ├── buzzword.bas
│   │   ├── go/
│   │   │   └── main.go
│   │   └── nim/
│   │       └── buzzword.nim
│   ├── 21_Calendar/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── calendar.ms
│   │   ├── README.md
│   │   └── calendar.bas
│   ├── 22_Change/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── change.ms
│   │   ├── README.md
│   │   ├── change.bas
│   │   └── go/
│   │       └── main.go
│   ├── 23_Checkers/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── checkers.ms
│   │   ├── README.md
│   │   ├── checkers.annotated.bas
│   │   └── checkers.bas
│   ├── 24_Chemist/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── chemist.ms
│   │   ├── README.md
│   │   └── chemist.bas
│   ├── 25_Chief/
│   │   ├── C/
│   │   │   └── chief.c
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── chief.ms
│   │   ├── README.md
│   │   ├── chief.bas
│   │   └── go/
│   │       └── main.go
│   ├── 26_Chomp/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── chomp.ms
│   │   ├── README.md
│   │   └── chomp.bas
│   ├── 27_Civil_War/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── civilwar.ms
│   │   ├── README.md
│   │   └── civilwar.bas
│   ├── 28_Combat/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── combat.ms
│   │   ├── README.md
│   │   └── combat.bas
│   ├── 29_Craps/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── craps.ms
│   │   ├── README.md
│   │   ├── craps.bas
│   │   ├── distributions.bas
│   │   └── nim/
│   │       └── craps.nim
│   ├── 30_Cube/
│   │   ├── C/
│   │   │   └── cube.c
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── cube.ms
│   │   ├── README.md
│   │   └── cube.bas
│   ├── 31_Depth_Charge/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── depthcharge.ms
│   │   ├── README.md
│   │   ├── depthcharge.bas
│   │   └── go/
│   │       └── main.go
│   ├── 32_Diamond/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── diamond.ms
│   │   ├── README.md
│   │   └── diamond.bas
│   ├── 33_Dice/
│   │   ├── C/
│   │   │   └── dice.c
│   │   ├── Julia/
│   │   │   ├── Dice.jl
│   │   │   └── README.md
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── dice.ms
│   │   ├── README.md
│   │   ├── dice.bas
│   │   ├── go/
│   │   │   └── main.go
│   │   └── nim/
│   │       └── dice.nim
│   ├── 34_Digits/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── digits.ms
│   │   ├── README.md
│   │   ├── digits.bas
│   │   └── go/
│   │       └── main.go
│   ├── 35_Even_Wins/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   ├── evenwins.ms
│   │   │   └── gameofevenwins.ms
│   │   ├── README.md
│   │   ├── evenwins.bas
│   │   ├── gameofevenwins.bas
│   │   └── go/
│   │       └── evenwins.go
│   ├── 36_Flip_Flop/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── flipflop.ms
│   │   ├── README.md
│   │   └── flipflop.bas
│   ├── 37_Football/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   ├── football.ms
│   │   │   └── ftball.ms
│   │   ├── README.md
│   │   ├── football.bas
│   │   └── ftball.bas
│   ├── 38_Fur_Trader/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── furtrader.ms
│   │   ├── README.md
│   │   ├── c/
│   │   │   ├── README.md
│   │   │   └── furtrader.c
│   │   ├── furtrader.bas
│   │   └── go/
│   │       └── main.go
│   ├── 39_Golf/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── golf.ms
│   │   ├── README.md
│   │   └── golf.bas
│   ├── 40_Gomoko/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── gomoko.ms
│   │   ├── README.md
│   │   └── gomoko.bas
│   ├── 41_Guess/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── guess.ms
│   │   ├── README.md
│   │   ├── go/
│   │   │   └── main.go
│   │   └── guess.bas
│   ├── 42_Gunner/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── gunner.ms
│   │   ├── README.md
│   │   ├── go/
│   │   │   └── main.go
│   │   └── gunner.bas
│   ├── 43_Hammurabi/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hammurabi.ms
│   │   ├── README.md
│   │   └── hammurabi.bas
│   ├── 44_Hangman/
│   │   ├── C/
│   │   │   ├── dictionary.txt
│   │   │   └── main.c
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hangman.ms
│   │   ├── README.md
│   │   └── hangman.bas
│   ├── 45_Hello/
│   │   ├── ANSI_C/
│   │   │   └── hello.c
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hello.ms
│   │   ├── README.md
│   │   ├── Swift/
│   │   │   └── hello.swift
│   │   ├── go/
│   │   │   └── main.go
│   │   ├── hello.bas
│   │   └── hello.c
│   ├── 46_Hexapawn/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hexapawn.ms
│   │   ├── README.md
│   │   └── hexapawn.bas
│   ├── 47_Hi-Lo/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hi-lo.ms
│   │   ├── README.md
│   │   ├── go/
│   │   │   └── main.go
│   │   └── hi-lo.bas
│   ├── 48_High_IQ/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── highiq.ms
│   │   ├── README.md
│   │   └── highiq.bas
│   ├── 49_Hockey/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hockey.ms
│   │   ├── README.md
│   │   └── hockey.bas
│   ├── 50_Horserace/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── horserace.ms
│   │   ├── README.md
│   │   └── horserace.bas
│   ├── 51_Hurkle/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hurkle.ms
│   │   ├── README.md
│   │   └── hurkle.bas
│   ├── 52_Kinema/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── kinema.ms
│   │   ├── README.md
│   │   └── kinema.bas
│   ├── 53_King/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── king.ms
│   │   ├── README.md
│   │   ├── king.bas
│   │   └── king_variable_update.bas
│   ├── 54_Letter/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── letter.ms
│   │   ├── README.md
│   │   └── letter.bas
│   ├── 55_Life/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── life.ms
│   │   ├── README.md
│   │   └── life.bas
│   ├── 56_Life_for_Two/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── lifefortwo.ms
│   │   ├── README.md
│   │   └── lifefortwo.bas
│   ├── 57_Literature_Quiz/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── litquiz.ms
│   │   ├── README.md
│   │   └── litquiz.bas
│   ├── 58_Love/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── love.ms
│   │   ├── README.md
│   │   └── love.bas
│   ├── 59_Lunar_LEM_Rocket/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   ├── lem.ms
│   │   │   ├── lunar.ms
│   │   │   └── rocket.ms
│   │   ├── README.md
│   │   ├── lem.bas
│   │   ├── lunar.bas
│   │   └── rocket.bas
│   ├── 60_Mastermind/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── mastermind.ms
│   │   ├── README.md
│   │   └── mastermind.bas
│   ├── 61_Math_Dice/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── mathdice.ms
│   │   ├── README.md
│   │   ├── mathdice.bas
│   │   └── pascal/
│   │       ├── README.md
│   │       └── mathdice.pas
│   ├── 62_Mugwump/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── mugwump.ms
│   │   ├── README.md
│   │   └── mugwump.bas
│   ├── 63_Name/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── name.ms
│   │   ├── README.md
│   │   └── name.bas
│   ├── 64_Nicomachus/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── nicomachus.ms
│   │   ├── README.md
│   │   └── nicomachus.bas
│   ├── 65_Nim/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── nim.ms
│   │   ├── README.md
│   │   └── nim.bas
│   ├── 66_Number/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── number.ms
│   │   ├── README.md
│   │   └── number.bas
│   ├── 67_One_Check/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── onecheck.ms
│   │   ├── README.md
│   │   └── onecheck.bas
│   ├── 68_Orbit/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── orbit.ms
│   │   ├── README.md
│   │   └── orbit.bas
│   ├── 69_Pizza/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── pizza.ms
│   │   ├── README.md
│   │   └── pizza.bas
│   ├── 70_Poetry/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── poetry.ms
│   │   ├── README.md
│   │   ├── poetry.bas
│   │   └── poetry.pl
│   ├── 71_Poker/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── poker.ms
│   │   ├── README.md
│   │   └── poker.bas
│   ├── 72_Queen/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── queen.ms
│   │   ├── README.md
│   │   └── queen.bas
│   ├── 73_Reverse/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── reverse.ms
│   │   ├── README.md
│   │   └── reverse.bas
│   ├── 74_Rock_Scissors_Paper/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── rockscissors.ms
│   │   ├── README.md
│   │   ├── bash/
│   │   │   └── rockscissors.sh
│   │   ├── nim/
│   │   │   └── rockscissors.nim
│   │   └── rockscissors.bas
│   ├── 75_Roulette/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── roulette.ms
│   │   ├── README.md
│   │   └── roulette.bas
│   ├── 76_Russian_Roulette/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── russianroulette.ms
│   │   ├── README.md
│   │   └── russianroulette.bas
│   ├── 77_Salvo/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── salvo.ms
│   │   ├── README.md
│   │   └── salvo.bas
│   ├── 78_Sine_Wave/
│   │   ├── C++/
│   │   │   ├── README.md
│   │   │   └── sinewave.cpp
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── sinewave.ms
│   │   ├── README.md
│   │   ├── pascal/
│   │   │   └── sinewave.pas
│   │   └── sinewave.bas
│   ├── 79_Slalom/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── slalom.ms
│   │   ├── README.md
│   │   └── slalom.bas
│   ├── 80_Slots/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── slots.ms
│   │   ├── README.md
│   │   └── slots.bas
│   ├── 81_Splat/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── splat.ms
│   │   ├── README.md
│   │   └── splat.bas
│   ├── 82_Stars/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── stars.ms
│   │   ├── README.md
│   │   └── stars.bas
│   ├── 83_Stock_Market/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── stockmarket.ms
│   │   ├── README.md
│   │   └── stockmarket.bas
│   ├── 84_Super_Star_Trek/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── superstartrek.ms
│   │   ├── README.md
│   │   ├── instructions.txt
│   │   ├── superstartrek.bas
│   │   └── superstartrekins.bas
│   ├── 85_Synonym/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── synonym.ms
│   │   ├── README.md
│   │   └── synonym.bas
│   ├── 86_Target/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── target.ms
│   │   ├── README.md
│   │   └── target.bas
│   ├── 87_3-D_Plot/
│   │   ├── 3dplot.bas
│   │   ├── MiniScript/
│   │   │   ├── 3dplot.ms
│   │   │   └── README.md
│   │   ├── README.md
│   │   └── d/
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── threedeeplot.d
│   │       └── threedeeplot_random.d
│   ├── 88_3-D_Tic-Tac-Toe/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── qubit.ms
│   │   ├── README.md
│   │   └── qubit.bas
│   ├── 89_Tic-Tac-Toe/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   ├── tictactoe.ms
│   │   │   └── tictactoe2.ms
│   │   ├── README.md
│   │   ├── go/
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       └── tictactoe1.go
│   │   ├── pascal/
│   │   │   ├── README.md
│   │   │   └── tictactoe1.pas
│   │   ├── tictactoe1.bas
│   │   └── tictactoe2.bas
│   ├── 90_Tower/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── tower.ms
│   │   ├── README.md
│   │   └── tower.bas
│   ├── 91_Train/
│   │   ├── D/
│   │   │   ├── README.md
│   │   │   └── train.d
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── train.ms
│   │   ├── README.md
│   │   ├── nim/
│   │   │   └── train.nim
│   │   └── train.bas
│   ├── 92_Trap/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── trap.ms
│   │   ├── README.md
│   │   └── trap.bas
│   ├── 93_23_Matches/
│   │   ├── 23matches.bas
│   │   ├── MiniScript/
│   │   │   ├── 23matches.ms
│   │   │   └── README.md
│   │   └── README.md
│   ├── 94_War/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── war.ms
│   │   ├── README.md
│   │   ├── d/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   └── war.d
│   │   └── war.bas
│   ├── 95_Weekday/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── weekday.ms
│   │   ├── README.md
│   │   └── weekday.bas
│   ├── 96_Word/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── word.ms
│   │   ├── README.md
│   │   └── word.bas
│   └── README.md
├── 00_Common/
│   ├── BASIC_Tests/
│   │   ├── InputTest.bas
│   │   ├── OutputTest.bas
│   │   └── RndTest.bas
│   ├── README.md
│   ├── dotnet/
│   │   ├── Directory.Build.props
│   │   ├── Games.Common/
│   │   │   ├── Games.Common.csproj
│   │   │   ├── IO/
│   │   │   │   ├── ConsoleIO.cs
│   │   │   │   ├── IReadWrite.cs
│   │   │   │   ├── InsufficientInputException.cs
│   │   │   │   ├── Strings.cs
│   │   │   │   ├── TextIO.cs
│   │   │   │   ├── Token.cs
│   │   │   │   ├── TokenReader.cs
│   │   │   │   └── Tokenizer.cs
│   │   │   ├── Numbers/
│   │   │   │   └── Number.cs
│   │   │   ├── Randomness/
│   │   │   │   ├── IRandom.cs
│   │   │   │   ├── IRandomExtensions.cs
│   │   │   │   └── RandomNumberGenerator.cs
│   │   │   └── _InternalsVisibleTo.cs
│   │   ├── Games.Common.Test/
│   │   │   ├── Games.Common.Test.csproj
│   │   │   └── IO/
│   │   │       ├── TextIOTests/
│   │   │       │   ├── NumberFormatTests.cs
│   │   │       │   └── ReadMethodTests.cs
│   │   │       ├── TokenReaderTests.cs
│   │   │       ├── TokenTests.cs
│   │   │       └── TokenizerTests.cs
│   │   ├── Games.Common.sln
│   │   └── README.md
│   └── javascript/
│       ├── WebTerminal/
│       │   ├── HtmlTerminal.css
│       │   ├── HtmlTerminal.js
│       │   ├── terminal.html
│       │   └── terminal_tests.mjs
│       └── common.mjs
├── 00_Utilities/
│   ├── DotnetUtils/
│   │   ├── .editorconfig
│   │   ├── DotnetUtils/
│   │   │   ├── DotnetUtils.csproj
│   │   │   ├── Extensions.cs
│   │   │   ├── Functions.cs
│   │   │   ├── Globals.cs
│   │   │   ├── Methods.cs
│   │   │   ├── PortInfo.cs
│   │   │   ├── PortInfos.cs
│   │   │   └── Program.cs
│   │   └── DotnetUtils.sln
│   ├── README.md
│   ├── TODO.md
│   ├── VintageBASIC.xml
│   ├── bas2perl.pl
│   ├── build-index.js
│   ├── find-missing-implementations.js
│   ├── find-unimplemented.js
│   ├── javascript/
│   │   └── style_terminal.css
│   ├── jvmTestUtils/
│   │   └── kotlin/
│   │       └── test/
│   │           └── ConsoleTest.kt
│   ├── markdown_todo.py
│   ├── markdown_todo_rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   ├── python/
│   │   ├── ci-requirements.in
│   │   └── ci-requirements.txt
│   └── yatol.pl
├── 01_Acey_Ducey/
│   ├── README.md
│   ├── aceyducey.bas
│   ├── csharp/
│   │   ├── AceyDucey.csproj
│   │   ├── AceyDucey.sln
│   │   ├── Game.cs
│   │   ├── GameState.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── elixir/
│   │   └── acey_ducey.exs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── AceyDucey.java
│   │       ├── AceyDucey17.java
│   │       ├── AceyDuceyGame.java
│   │       └── Card.java
│   ├── javascript/
│   │   ├── .prettierrc.json
│   │   ├── README.md
│   │   ├── aceyducey.html
│   │   └── aceyducey.js
│   ├── kotlin/
│   │   └── aceyducey.kt
│   ├── lua/
│   │   ├── README.md
│   │   └── acey_ducey.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── aceyducey.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── acey_ducey.py
│   │   └── acey_ducey_oo.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── aceyducey.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── AceyDucey.sln
│       ├── AceyDucey.vb
│       ├── AceyDucey.vbproj
│       ├── Program.vb
│       └── README.md
├── 02_Amazing/
│   ├── README.md
│   ├── amazing.bas
│   ├── csharp/
│   │   ├── Amazing.cs
│   │   ├── Amazing.csproj
│   │   ├── Amazing.sln
│   │   └── README.md
│   ├── java/
│   │   ├── Amazing.java
│   │   ├── AmazingGame.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── amazing.html
│   │   └── amazing.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── amazing.pl
│   ├── python/
│   │   ├── README.md
│   │   └── amazing.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── amazing.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Amazing.sln
│       ├── Amazing.vbproj
│       ├── README.md
│       └── program.vb
├── 03_Animal/
│   ├── README.md
│   ├── animal.bas
│   ├── csharp/
│   │   ├── Animal.csproj
│   │   ├── Animal.sln
│   │   ├── Branch.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   ├── src/
│   │   │   └── Animal.java
│   │   └── test/
│   │       └── AnimalJavaTest.kt
│   ├── javascript/
│   │   ├── README.md
│   │   ├── animal.html
│   │   └── animal.js
│   ├── kotlin/
│   │   ├── README.md
│   │   ├── src/
│   │   │   └── Animal.kt
│   │   └── test/
│   │       └── AnimalKtTest.kt
│   ├── lua/
│   │   ├── Animal.lua
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── animal.pl
│   ├── python/
│   │   ├── README.md
│   │   └── animal.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── animal.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Animal/
│       │   ├── Animal.vbproj
│       │   ├── Branch.vb
│       │   ├── Game.vb
│       │   ├── Program.vb
│       │   └── Shared/
│       │       ├── ConsoleAdapter.vb
│       │       ├── ConsoleAdapterBase.vb
│       │       └── Extensions.vb
│       ├── Animal.Tests/
│       │   ├── Animal.Tests.vbproj
│       │   ├── EndOfInputsException.vb
│       │   ├── MockConsole.vb
│       │   └── TestContainer.vb
│       ├── Animal.sln
│       └── README.md
├── 04_Awari/
│   ├── README.md
│   ├── awari.bas
│   ├── csharp/
│   │   ├── Awari.csproj
│   │   ├── Awari.sln
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── Awari.java
│   │   ├── AwariGame.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── awari.html
│   │   └── awari.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── awari.pl
│   ├── python/
│   │   ├── README.md
│   │   └── awari.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── awari.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Awari.sln
│       ├── Awari.vbproj
│       └── README.md
├── 05_Bagels/
│   ├── README.md
│   ├── bagels.bas
│   ├── csharp/
│   │   ├── BagelNumber.cs
│   │   ├── Bagels.csproj
│   │   ├── Bagels.sln
│   │   ├── Game.cs
│   │   ├── GameBase.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── BagelGame.java
│   │   ├── Bagels.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bagels.html
│   │   └── bagels.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── bagels.kt
│   ├── lua/
│   │   ├── Bagels.lua
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bagels.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bagels.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── bagels.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Bagels.sln
│       ├── Bagels.vbproj
│       └── README.md
├── 06_Banner/
│   ├── README.md
│   ├── banner.bas
│   ├── csharp/
│   │   ├── README.md
│   │   ├── banner.cs
│   │   ├── banner.csproj
│   │   └── banner.sln
│   ├── java/
│   │   ├── Banner.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── banner.html
│   │   └── banner.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── pascal/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── banner.pl
│   ├── python/
│   │   ├── README.md
│   │   └── banner.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── banner.rb
│   └── vbnet/
│       ├── README.md
│       ├── banner.sln
│       ├── banner.vb
│       └── banner.vbproj
├── 07_Basketball/
│   ├── README.md
│   ├── basketball.bas
│   ├── csharp/
│   │   ├── Basketball.csproj
│   │   ├── Basketball.sln
│   │   ├── Clock.cs
│   │   ├── Defense.cs
│   │   ├── Game.cs
│   │   ├── IRandomExtensions.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── JumpShot.cs
│   │   ├── Plays/
│   │   │   ├── BallContest.cs
│   │   │   ├── HomeTeamPlay.cs
│   │   │   ├── Play.cs
│   │   │   └── VisitingTeamPlay.cs
│   │   ├── Probably.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── EndOfFirstHalf.txt
│   │   │   ├── EndOfGame.txt
│   │   │   ├── EndOfSecondHalf.txt
│   │   │   ├── Introduction.txt
│   │   │   ├── Resource.cs
│   │   │   ├── Score.txt
│   │   │   └── TwoMinutesLeft.txt
│   │   ├── Scoreboard.cs
│   │   ├── Shot.cs
│   │   └── Team.cs
│   ├── java/
│   │   ├── Basketball.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── basketball.html
│   │   └── basketball.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── pascal/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   ├── basketball-orig.pl
│   │   └── basketball.pl
│   ├── python/
│   │   ├── README.md
│   │   └── basketball.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── basketball.rb
│   └── vbnet/
│       ├── Basketball.sln
│       ├── Basketball.vbproj
│       └── README.md
├── 08_Batnum/
│   ├── README.md
│   ├── batnum.bas
│   ├── csharp/
│   │   ├── Batnum.csproj
│   │   ├── Batnum.sln
│   │   ├── BatnumGame.cs
│   │   ├── ConsoleUtilities.cs
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   ├── Resources.Designer.cs
│   │   │   ├── Resources.en.resx
│   │   │   ├── Resources.fr.resx
│   │   │   └── Resources.resx
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── BatNum.java
│   │       └── BatNumGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── batnum.html
│   │   └── batnum.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── pascal/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── batnum.pl
│   ├── python/
│   │   ├── README.md
│   │   └── batnum.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── batnum.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Program.vb
│       ├── README.md
│       ├── batnum.sln
│       └── batnum.vbproj
├── 09_Battle/
│   ├── README.md
│   ├── battle.bas
│   ├── csharp/
│   │   ├── Battle.csproj
│   │   ├── Battle.sln
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── .gitignore
│   │   ├── Battle.java
│   │   ├── Input.java
│   │   ├── README.md
│   │   ├── Sea.java
│   │   └── Ship.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── battle.html
│   │   └── battle.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── pascal/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── battle.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Battle.sln
│       ├── Battle.vbproj
│       └── README.md
├── 10_Blackjack/
│   ├── README.md
│   ├── blackjack.bas
│   ├── csharp/
│   │   ├── Blackjack.csproj
│   │   ├── Blackjack.sln
│   │   ├── Card.cs
│   │   ├── Deck.cs
│   │   ├── Game.cs
│   │   ├── Hand.cs
│   │   ├── Player.cs
│   │   ├── Program.cs
│   │   ├── Prompt.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   ├── src/
│   │   │   ├── Blackjack.java
│   │   │   ├── Card.java
│   │   │   ├── Deck.java
│   │   │   ├── Game.java
│   │   │   ├── Player.java
│   │   │   ├── ScoringUtils.java
│   │   │   └── UserIo.java
│   │   └── test/
│   │       ├── DeckTest.java
│   │       ├── GameTest.java
│   │       ├── ScoringUtilsTest.java
│   │       └── UserIoTest.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── blackjack.html
│   │   └── blackjack.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── blackjack.py
│   ├── ruby/
│   │   ├── README.md
│   │   ├── blackjack.rb
│   │   ├── game.rb
│   │   └── model/
│   │       ├── card_kind.rb
│   │       ├── hand.rb
│   │       ├── pack.rb
│   │       └── player.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Blackjack.sln
│       ├── Blackjack.vbproj
│       └── README.md
├── 11_Bombardment/
│   ├── README.md
│   ├── bombardment.bas
│   ├── csharp/
│   │   ├── Bombardment.cs
│   │   ├── Bombardment.csproj
│   │   ├── Bombardment.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Bombardment.java
│   │       └── BombardmentGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bombardment.html
│   │   └── bombardment.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bombardment.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bombardment.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── bombardment.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Bombardment.sln
│       ├── Bombardment.vbproj
│       └── README.md
├── 12_Bombs_Away/
│   ├── README.md
│   ├── bombsaway.bas
│   ├── csharp/
│   │   ├── BombsAway.sln
│   │   ├── BombsAwayConsole/
│   │   │   ├── BombsAwayConsole.csproj
│   │   │   ├── ConsoleUserInterface.cs
│   │   │   └── Program.cs
│   │   ├── BombsAwayGame/
│   │   │   ├── AlliesSide.cs
│   │   │   ├── BombsAwayGame.csproj
│   │   │   ├── EnemyArtillery.cs
│   │   │   ├── Game.cs
│   │   │   ├── GermanySide.cs
│   │   │   ├── IUserInterface.cs
│   │   │   ├── ItalySide.cs
│   │   │   ├── JapanSide.cs
│   │   │   ├── Mission.cs
│   │   │   ├── MissionSide.cs
│   │   │   └── Side.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── BombsAway.java
│   │       └── BombsAwayGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bombsaway.html
│   │   └── bombsaway.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── bombs_away.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── bombsaway.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bombs_away.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── BombsAway.sln
│       ├── BombsAway.vbproj
│       └── README.md
├── 13_Bounce/
│   ├── README.md
│   ├── bounce.bas
│   ├── csharp/
│   │   ├── Bounce.cs
│   │   ├── Bounce.csproj
│   │   ├── Bounce.sln
│   │   ├── Game.cs
│   │   ├── Graph.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Instructions.txt
│   │       ├── Resource.cs
│   │       └── Title.txt
│   ├── java/
│   │   ├── Bounce.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bounce.html
│   │   └── bounce.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bounce.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bounce.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── bounce.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Bounce.sln
│       ├── Bounce.vbproj
│       └── README.md
├── 14_Bowling/
│   ├── README.md
│   ├── bowling.bas
│   ├── csharp/
│   │   ├── Bowling.cs
│   │   ├── Bowling.csproj
│   │   ├── Bowling.sln
│   │   ├── FrameResult.cs
│   │   ├── GameResults.cs
│   │   ├── Pins.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Utility.cs
│   ├── java/
│   │   ├── Bowling.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bowling.html
│   │   └── bowling.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bowling.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bowling.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Bowling.sln
│       ├── Bowling.vbproj
│       └── README.md
├── 15_Boxing/
│   ├── README.md
│   ├── boxing.bas
│   ├── csharp/
│   │   ├── AttackStrategy.cs
│   │   ├── Boxer.cs
│   │   ├── Boxing.csproj
│   │   ├── Boxing.sln
│   │   ├── OpponentAttackStrategy.cs
│   │   ├── PlayerAttackStrategy.cs
│   │   ├── Program.cs
│   │   ├── Punch.cs
│   │   ├── README.md
│   │   ├── Round.cs
│   │   └── Utils.cs
│   ├── java/
│   │   ├── Basic.java
│   │   ├── Boxing.java
│   │   ├── BoxingGame.java
│   │   ├── GameSession.java
│   │   ├── Player.java
│   │   ├── Punch.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── boxing.html
│   │   └── boxing.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── boxing.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── boxing.py
│   │   ├── opponent-profile.json
│   │   └── player-profile.json
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Boxing.sln
│       ├── Boxing.vbproj
│       └── README.md
├── 16_Bug/
│   ├── README.md
│   ├── bug.bas
│   ├── csharp/
│   │   ├── Bug.cs
│   │   ├── Bug.csproj
│   │   ├── Bug.sln
│   │   ├── Game.cs
│   │   ├── Parts/
│   │   │   ├── Body.cs
│   │   │   ├── Feeler.cs
│   │   │   ├── Feelers.cs
│   │   │   ├── Head.cs
│   │   │   ├── IPart.cs
│   │   │   ├── Leg.cs
│   │   │   ├── Legs.cs
│   │   │   ├── Neck.cs
│   │   │   ├── ParentPart.cs
│   │   │   ├── Part.cs
│   │   │   ├── PartCollection.cs
│   │   │   └── Tail.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Instructions.txt
│   │       ├── Introduction.txt
│   │       ├── Message.cs
│   │       ├── PlayAgain.txt
│   │       └── Resource.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Bug.java
│   │       ├── BugGame.java
│   │       ├── ComputerBug.java
│   │       ├── Insect.java
│   │       └── PlayerBug.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bug.html
│   │   └── bug.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── bug.py
│   ├── ruby/
│   │   ├── Bug.rb
│   │   └── README.md
│   └── vbnet/
│       ├── Bug.sln
│       ├── Bug.vbproj
│       └── README.md
├── 17_Bullfight/
│   ├── README.md
│   ├── bullfight.bas
│   ├── csharp/
│   │   ├── Action.cs
│   │   ├── ActionResult.cs
│   │   ├── BullFight.cs
│   │   ├── Bullfight.csproj
│   │   ├── Bullfight.sln
│   │   ├── Controller.cs
│   │   ├── Events/
│   │   │   ├── BullCharging.cs
│   │   │   ├── Event.cs
│   │   │   ├── MatchCompleted.cs
│   │   │   ├── MatchStarted.cs
│   │   │   ├── PlayerGored.cs
│   │   │   └── PlayerSurvived.cs
│   │   ├── Mediator.cs
│   │   ├── Program.cs
│   │   ├── Quality.cs
│   │   ├── README.md
│   │   ├── Reward.cs
│   │   ├── RiskLevel.cs
│   │   └── View.cs
│   ├── java/
│   │   ├── Bullfight.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bullfight.html
│   │   └── bullfight.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── src/
│   │       └── bullfight/
│   │           └── Main.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── bullfight.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Bullfight.sln
│       ├── Bullfight.vbproj
│       └── README.md
├── 18_Bullseye/
│   ├── README.md
│   ├── bullseye.bas
│   ├── csharp/
│   │   ├── Bullseye.csproj
│   │   ├── Bullseye.sln
│   │   ├── BullseyeGame.cs
│   │   ├── Player.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Bullseye.java
│   │       ├── BullseyeGame.java
│   │       ├── Player.java
│   │       └── Shot.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bullseye.html
│   │   └── bullseye.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bullseye.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bullseye.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       ├── main.rs
│   │       └── note on separation of converns for rust projects.md
│   └── vbnet/
│       ├── Bullseye.sln
│       ├── Bullseye.vbproj
│       └── README.md
├── 19_Bunny/
│   ├── README.md
│   ├── bunny.bas
│   ├── csharp/
│   │   ├── BasicData.cs
│   │   ├── Bunny.cs
│   │   ├── Bunny.csproj
│   │   ├── Bunny.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Bunny.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bunny.html
│   │   └── bunny.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bunny.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── bunny.py
│   │   └── data.json
│   ├── ruby/
│   │   ├── README.md
│   │   ├── bunny-faithful.rb
│   │   └── bunny-modern.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Bunny.sln
│       ├── Bunny.vbproj
│       └── README.md
├── 20_Buzzword/
│   ├── README.md
│   ├── buzzword.bas
│   ├── csharp/
│   │   ├── Buzzword.csproj
│   │   ├── Buzzword.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Buzzword.java
│   │       ├── BuzzwordSupplier.java
│   │       └── UserInterface.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── buzzword.html
│   │   └── buzzword.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── buzzword.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── buzzword.pl
│   ├── python/
│   │   ├── README.md
│   │   └── buzzword.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── buzzword.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Buzzword.sln
│       ├── Buzzword.vbproj
│       └── README.md
├── 21_Calendar/
│   ├── README.md
│   ├── calendar.bas
│   ├── csharp/
│   │   ├── Calendar.csproj
│   │   ├── Calendar.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── Calendar.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── calendar.html
│   │   └── calendar.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── calendar.pl
│   ├── python/
│   │   ├── README.md
│   │   └── calendar.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── calendar.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Calendar.sln
│       ├── Calendar.vbproj
│       └── README.md
├── 22_Change/
│   ├── README.md
│   ├── change.bas
│   ├── csharp/
│   │   ├── Change.csproj
│   │   ├── Change.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Change.java
│   │       └── ChangeGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── change.html
│   │   └── change.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── change.pl
│   ├── python/
│   │   ├── README.md
│   │   └── change.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Change.sln
│       ├── Change.vbproj
│       └── README.md
├── 23_Checkers/
│   ├── README.md
│   ├── checkers.annotated.bas
│   ├── checkers.bas
│   ├── csharp/
│   │   ├── Checkers.csproj
│   │   ├── Checkers.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── checkers.html
│   │   └── checkers.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── checkers.pl
│   ├── python/
│   │   ├── README.md
│   │   └── checkers.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── checkers.rb
│   └── vbnet/
│       ├── Checkers.sln
│       ├── Checkers.vbproj
│       └── README.md
├── 24_Chemist/
│   ├── README.md
│   ├── chemist.bas
│   ├── csharp/
│   │   ├── Chemist.csproj
│   │   ├── Chemist.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Chemist.java
│   │       └── ChemistGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── chemist.html
│   │   └── chemist.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── chemist.pl
│   ├── python/
│   │   ├── README.md
│   │   └── chemist.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── Chemist.sln
│       ├── Chemist.vbproj
│       └── README.md
├── 25_Chief/
│   ├── README.md
│   ├── chief.bas
│   ├── csharp/
│   │   ├── Chief.csproj
│   │   ├── Chief.sln
│   │   ├── Game.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Math.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Answer.txt
│   │       ├── Believe.txt
│   │       ├── Bet.txt
│   │       ├── Bye.txt
│   │       ├── Instructions.txt
│   │       ├── Lightning.txt
│   │       ├── Original.txt
│   │       ├── Ready.txt
│   │       ├── Resource.cs
│   │       ├── ShutUp.txt
│   │       ├── Title.txt
│   │       └── Working.txt
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Chief.java
│   │       └── ChiefGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── chief.html
│   │   └── chief.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── chief.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── chief.pl
│   ├── python/
│   │   ├── README.md
│   │   └── chief.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── chief.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Chief.sln
│       ├── Chief.vbproj
│       └── README.md
├── 26_Chomp/
│   ├── README.md
│   ├── chomp.bas
│   ├── csharp/
│   │   ├── Chomp.csproj
│   │   ├── Chomp.sln
│   │   ├── Cookie.cs
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── PlayerNumber.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Coordinates.txt
│   │       ├── HereWeGo.txt
│   │       ├── HowManyColumns.txt
│   │       ├── HowManyPlayers.txt
│   │       ├── HowManyRows.txt
│   │       ├── Introduction.txt
│   │       ├── NoFair.txt
│   │       ├── Player.txt
│   │       ├── Resource.cs
│   │       ├── Rules.txt
│   │       ├── TooManyColumns.txt
│   │       ├── TooManyRows.txt
│   │       └── YouLose.txt
│   ├── java/
│   │   ├── Chomp.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── chomp.html
│   │   └── chomp.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── chomp.pl
│   ├── python/
│   │   ├── README.md
│   │   └── chomp.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Chomp.sln
│       ├── Chomp.vbproj
│       └── README.md
├── 27_Civil_War/
│   ├── README.md
│   ├── civilwar.bas
│   ├── csharp/
│   │   ├── Army.cs
│   │   ├── Battle.cs
│   │   ├── CivilWar.csproj
│   │   ├── CivilWar.sln
│   │   ├── ConsoleUtils.cs
│   │   ├── GameOptions.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── src/
│   │       └── CivilWar.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── civilwar.html
│   │   └── civilwar.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── Civilwar.py
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── CivilWar.sln
│       ├── CivilWar.vbproj
│       └── README.md
├── 28_Combat/
│   ├── README.md
│   ├── combat.bas
│   ├── csharp/
│   │   ├── ArmedForces.cs
│   │   ├── Ceasefire.cs
│   │   ├── Combat.csproj
│   │   ├── Combat.sln
│   │   ├── Controller.cs
│   │   ├── FinalCampaign.cs
│   │   ├── InitialCampaign.cs
│   │   ├── MilitaryBranch.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── View.cs
│   │   ├── WarResult.cs
│   │   └── WarState.cs
│   ├── java/
│   │   ├── Combat.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── combat.html
│   │   └── combat.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── combat.pl
│   ├── python/
│   │   ├── README.md
│   │   └── combat.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Combat.sln
│       ├── Combat.vbproj
│       └── README.md
├── 29_Craps/
│   ├── README.md
│   ├── craps.bas
│   ├── csharp/
│   │   ├── .gitignore
│   │   ├── Craps/
│   │   │   ├── Craps.csproj
│   │   │   ├── CrapsGame.cs
│   │   │   ├── Dice.cs
│   │   │   ├── Program.cs
│   │   │   └── UserInterface.cs
│   │   ├── Craps.sln
│   │   ├── CrapsTester/
│   │   │   ├── CrapsTester.csproj
│   │   │   └── CrapsTests.cs
│   │   └── README.md
│   ├── distributions.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Craps.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── craps.html
│   │   └── craps.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── craps.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── craps.pl
│   ├── python/
│   │   ├── README.md
│   │   └── craps.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── craps.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── craps_game.rs
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Craps.sln
│       ├── Craps.vbproj
│       └── README.md
├── 30_Cube/
│   ├── README.md
│   ├── csharp/
│   │   ├── Cube.csproj
│   │   ├── Cube.sln
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── RandomExtensions.cs
│   │   ├── Resources/
│   │   │   ├── Balance.txt
│   │   │   ├── Bang.txt
│   │   │   ├── BetAgain.txt
│   │   │   ├── Bust.txt
│   │   │   ├── Congratulations.txt
│   │   │   ├── Goodbye.txt
│   │   │   ├── HowMuch.txt
│   │   │   ├── IllegalMove.txt
│   │   │   ├── Instructions.txt
│   │   │   ├── Introduction.txt
│   │   │   ├── NextMove.txt
│   │   │   ├── Resource.cs
│   │   │   ├── TryAgain.txt
│   │   │   ├── Wager.txt
│   │   │   └── YourMove.txt
│   │   └── ZerosGenerator.cs
│   ├── cube.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Cube.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── cube.html
│   │   └── cube.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── cube.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── cube.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── game.rs
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Cube.sln
│       ├── Cube.vbproj
│       └── README.md
├── 31_Depth_Charge/
│   ├── README.md
│   ├── csharp/
│   │   ├── Controller.cs
│   │   ├── DepthCharge.csproj
│   │   ├── DepthCharge.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── View.cs
│   ├── depthcharge.bas
│   ├── java/
│   │   ├── DepthCharge.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── depthcharge.html
│   │   └── depthcharge.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── depth-charge.pl
│   ├── python/
│   │   ├── README.md
│   │   └── depth_charge.py
│   ├── ruby/
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── depthcharge.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── DepthCharge.sln
│       ├── DepthCharge.vbproj
│       └── README.md
├── 32_Diamond/
│   ├── README.md
│   ├── csharp/
│   │   ├── Diamond.csproj
│   │   ├── Diamond.sln
│   │   ├── Pattern.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Introduction.txt
│   │   │   ├── Resource.cs
│   │   │   ├── Rules.txt
│   │   │   └── TypeNumber.txt
│   │   └── StringBuilderExtensions.cs
│   ├── diamond.bas
│   ├── java/
│   │   ├── Diamond.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── diamond.html
│   │   └── diamond.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── diamond.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── diamond.pl
│   ├── python/
│   │   ├── README.md
│   │   └── diamond.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── diamond.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── Diamond.sln
│       ├── Diamond.vbproj
│       └── README.md
├── 33_Dice/
│   ├── README.md
│   ├── csharp/
│   │   ├── Dice.csproj
│   │   ├── Dice.sln
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── RollGenerator.cs
│   ├── dice.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Dice.java
│   │       └── DiceGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── dice.html
│   │   └── dice.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── dice.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── dice.pl
│   ├── python/
│   │   ├── README.md
│   │   └── dice.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── dice.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Dice.sln
│       ├── Dice.vbproj
│       ├── README.md
│       └── program.vb
├── 34_Digits/
│   ├── README.md
│   ├── csharp/
│   │   ├── Digits.csproj
│   │   ├── Digits.sln
│   │   ├── Game.cs
│   │   ├── Guesser.cs
│   │   ├── IOExtensions.cs
│   │   ├── Matrix.cs
│   │   ├── Memory.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── ForInstructions.txt
│   │       ├── GuessResult.txt
│   │       ├── Headings.txt
│   │       ├── IWin.txt
│   │       ├── Instructions.txt
│   │       ├── Introduction.txt
│   │       ├── ItsATie.txt
│   │       ├── Resource.cs
│   │       ├── TenNumbers.txt
│   │       ├── Thanks.txt
│   │       ├── TryAgain.txt
│   │       ├── WantToTryAgain.txt
│   │       └── YouWin.txt
│   ├── digits.bas
│   ├── java/
│   │   ├── Digits.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── digits.html
│   │   └── digits.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── digits.pl
│   ├── python/
│   │   ├── Digits.py
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Digits.sln
│       ├── Digits.vbproj
│       └── README.md
├── 35_Even_Wins/
│   ├── README.md
│   ├── csharp/
│   │   ├── EvenWins.csproj
│   │   ├── EvenWins.sln
│   │   └── README.md
│   ├── evenwins.bas
│   ├── gameofevenwins.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── evenwins.html
│   │   ├── evenwins.js
│   │   ├── gameofevenwins.html
│   │   └── gameofevenwins.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── evenwins.pl
│   ├── python/
│   │   ├── README.md
│   │   └── evenwins.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── EvenWins.sln
│       ├── EvenWins.vbproj
│       └── README.md
├── 36_Flip_Flop/
│   ├── README.md
│   ├── csharp/
│   │   ├── FlipFlop.cs
│   │   ├── FlipFlop.csproj
│   │   ├── FlipFlop.sln
│   │   └── README.md
│   ├── flipflop.bas
│   ├── java/
│   │   ├── FlipFlop.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── flipflop.html
│   │   └── flipflop.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── flipflop-game.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── flipflop.pl
│   ├── python/
│   │   ├── README.md
│   │   └── flipflop.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── flipflop.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── game.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── FlipFlop.sln
│       ├── FlipFlop.vbproj
│       └── README.md
├── 37_Football/
│   ├── README.md
│   ├── csharp/
│   │   ├── Football.csproj
│   │   ├── Football.sln
│   │   └── README.md
│   ├── football.bas
│   ├── ftball.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── football.html
│   │   ├── football.js
│   │   ├── ftball.html
│   │   └── ftball.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   ├── data.json
│   │   └── football.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Football.sln
│       ├── Football.vbproj
│       └── README.md
├── 38_Fur_Trader/
│   ├── README.md
│   ├── c/
│   │   ├── README.md
│   │   └── furtrader.c
│   ├── csharp/
│   │   ├── FurTrader.csproj
│   │   ├── FurTrader.sln
│   │   ├── Game.cs
│   │   ├── GameState.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── furtrader.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── FurTrader.java
│   │       ├── FurTraderGame.java
│   │       └── Pelt.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── furtrader.html
│   │   └── furtrader.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── furtrader.pl
│   ├── python/
│   │   ├── README.md
│   │   └── furtrader.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── FurTrader.sln
│       ├── FurTrader.vbproj
│       └── README.md
├── 39_Golf/
│   ├── README.md
│   ├── csharp/
│   │   ├── Golf.csproj
│   │   ├── Golf.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── golf.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── golf.html
│   │   └── golf.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── golf.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Golf.sln
│       ├── Golf.vbproj
│       └── README.md
├── 40_Gomoko/
│   ├── README.md
│   ├── csharp/
│   │   ├── Gomoko.csproj
│   │   ├── Gomoko.sln
│   │   └── README.md
│   ├── gomoko.bas
│   ├── java/
│   │   ├── Gomoko.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── gomoko.html
│   │   └── gomoko.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── gomoko.pl
│   ├── python/
│   │   ├── Gomoko.py
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Gomoko.sln
│       ├── Gomoko.vbproj
│       └── README.md
├── 41_Guess/
│   ├── README.md
│   ├── csharp/
│   │   ├── Game.cs
│   │   ├── Guess.csproj
│   │   ├── Guess.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── BlankLines.txt
│   │       ├── Good.txt
│   │       ├── Introduction.txt
│   │       ├── Limit.txt
│   │       ├── Resource.cs
│   │       ├── ShouldHave.txt
│   │       ├── ThatsIt.txt
│   │       ├── Thinking.txt
│   │       ├── TooHigh.txt
│   │       ├── TooLow.txt
│   │       └── VeryGood.txt
│   ├── guess.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Guess.java
│   │       └── GuessGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── guess.html
│   │   └── guess.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── guess.pl
│   ├── python/
│   │   ├── README.md
│   │   └── guess.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── guess.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Guess.sln
│       ├── Guess.vbproj
│       └── README.md
├── 42_Gunner/
│   ├── README.md
│   ├── csharp/
│   │   ├── Gunner.csproj
│   │   ├── Gunner.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── gunner.bas
│   ├── java/
│   │   ├── Gunner.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── gunner.html
│   │   └── gunner.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── gunner.pl
│   ├── python/
│   │   ├── README.md
│   │   └── gunner.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Gunner.sln
│       ├── Gunner.vbproj
│       └── README.md
├── 43_Hammurabi/
│   ├── README.md
│   ├── csharp/
│   │   ├── ActionResult.cs
│   │   ├── Controller.cs
│   │   ├── GameResult.cs
│   │   ├── GameState.cs
│   │   ├── GreatOffence.cs
│   │   ├── Hammurabi.csproj
│   │   ├── Hammurabi.sln
│   │   ├── PerformanceRating.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Rules.cs
│   │   └── View.cs
│   ├── hammurabi.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Hamurabi.java
│   │       └── HamurabiGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hammurabi.html
│   │   └── hammurabi.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── lib/
│   │       └── BasicComputerGames/
│   │           └── Hammurabi.pm
│   ├── python/
│   │   ├── README.md
│   │   └── hamurabi.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Hammurabi.sln
│       ├── Hammurabi.vbproj
│       └── README.md
├── 44_Hangman/
│   ├── README.md
│   ├── csharp/
│   │   ├── Graphic.cs
│   │   ├── Hangman.csproj
│   │   ├── Hangman.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── hangman.bas
│   ├── java/
│   │   ├── Hangman.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hangman.html
│   │   └── hangman.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── hangman.pl
│   ├── python/
│   │   ├── README.md
│   │   └── hangman.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── hangman.rb
│   └── vbnet/
│       ├── Hangman.sln
│       ├── Hangman.vbproj
│       └── README.md
├── 45_Hello/
│   ├── README.md
│   ├── csharp/
│   │   ├── Hello.csproj
│   │   ├── Hello.sln
│   │   └── README.md
│   ├── hello.bas
│   ├── java/
│   │   ├── Hello.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hello.html
│   │   └── hello.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── hello.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── hello.pl
│   ├── python/
│   │   ├── README.md
│   │   └── hello.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── hello.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Hello.sln
│       ├── Hello.vbproj
│       └── README.md
├── 46_Hexapawn/
│   ├── README.md
│   ├── csharp/
│   │   ├── Board.cs
│   │   ├── Cell.cs
│   │   ├── Computer.cs
│   │   ├── Game.cs
│   │   ├── GameSeries.cs
│   │   ├── Hexapawn.csproj
│   │   ├── Hexapawn.sln
│   │   ├── Human.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Move.cs
│   │   ├── Pawn.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Instructions.txt
│   │       ├── Resource.cs
│   │       └── Title.txt
│   ├── hexapawn.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hexapawn.html
│   │   └── hexapawn.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── hexapawn.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Hexapawn.sln
│       ├── Hexapawn.vbproj
│       └── README.md
├── 47_Hi-Lo/
│   ├── README.md
│   ├── csharp/
│   │   ├── HiLo.csproj
│   │   ├── HiLo.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── hi-lo.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── HiLo.java
│   │       └── HiLoGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hi-lo.html
│   │   └── hi-lo.js
│   ├── kotlin/
│   │   ├── HiLo.kt
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── hilo.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── hi-lo.pl
│   ├── python/
│   │   ├── README.md
│   │   └── hilo.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── hi_lo.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── HiLo.sln
│       ├── HiLo.vbproj
│       └── README.md
├── 48_High_IQ/
│   ├── README.md
│   ├── csharp/
│   │   ├── HighIQ.csproj
│   │   ├── HighIQ.sln
│   │   └── README.md
│   ├── d/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── highiq.d
│   ├── highiq.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── HighIQ.java
│   │       └── HighIQGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── highiq.html
│   │   └── highiq.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── High_IQ.py
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── HighIQ.sln
│       ├── HighIQ.vbproj
│       └── README.md
├── 49_Hockey/
│   ├── README.md
│   ├── csharp/
│   │   ├── Hockey.csproj
│   │   ├── Hockey.sln
│   │   └── README.md
│   ├── hockey.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hockey.html
│   │   └── hockey.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── hockey.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Hockey.sln
│       ├── Hockey.vbproj
│       └── README.md
├── 50_Horserace/
│   ├── README.md
│   ├── csharp/
│   │   ├── Horserace.csproj
│   │   ├── Horserace.sln
│   │   └── README.md
│   ├── horserace.bas
│   ├── java/
│   │   ├── Horserace.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── horserace.html
│   │   └── horserace.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── horserace.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── game.rs
│   │       ├── horses.rs
│   │       ├── main.rs
│   │       ├── players.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Horserace.sln
│       ├── Horserace.vbproj
│       └── README.md
├── 51_Hurkle/
│   ├── README.md
│   ├── csharp/
│   │   ├── .gitignore
│   │   ├── CardinalDirection.cs
│   │   ├── ConsoleHurkleView.cs
│   │   ├── FailedGuessViewModel.cs
│   │   ├── GamePoint.cs
│   │   ├── GuessViewModel.cs
│   │   ├── Hurkle.csproj
│   │   ├── Hurkle.sln
│   │   ├── HurkleGame.cs
│   │   ├── IHurkleView.cs
│   │   ├── LossViewModel.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── VictoryViewModel.cs
│   ├── hurkle.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Hurkle.java
│   │       └── HurkleGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hurkle.html
│   │   └── hurkle.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── hurkle.pl
│   ├── python/
│   │   ├── README.md
│   │   └── hurkle.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── hurkle.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── game.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── Hurkle.sln
│       ├── Hurkle.vbproj
│       └── README.md
├── 52_Kinema/
│   ├── README.md
│   ├── csharp/
│   │   ├── Kinema.csproj
│   │   ├── Kinema.sln
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Kinema.java
│   │       └── KinemaGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── kinema.html
│   │   └── kinema.js
│   ├── kinema.bas
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── kinema.pl
│   ├── python/
│   │   ├── README.md
│   │   └── kinema.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── kinema.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Kinema.sln
│       ├── Kinema.vbproj
│       └── README.md
├── 53_King/
│   ├── README.md
│   ├── csharp/
│   │   ├── Country.cs
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── King.csproj
│   │   ├── King.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Reign.cs
│   │   ├── Resources/
│   │   │   ├── DeathsPollution.txt
│   │   │   ├── DeathsStarvation.txt
│   │   │   ├── Emigration.txt
│   │   │   ├── EndAlso.txt
│   │   │   ├── EndCongratulations.txt
│   │   │   ├── EndConsequences.txt
│   │   │   ├── EndForeignWorkers.txt
│   │   │   ├── EndManyDead.txt
│   │   │   ├── EndMoneyLeftOver.txt
│   │   │   ├── EndOneThirdDead.txt
│   │   │   ├── FuneralExpenses.txt
│   │   │   ├── GiveRallodsError.txt
│   │   │   ├── GiveRallodsPrompt.txt
│   │   │   ├── Goodbye.txt
│   │   │   ├── Harvest.txt
│   │   │   ├── HarvestReason.txt
│   │   │   ├── Immigration.txt
│   │   │   ├── InstructionsPrompt.txt
│   │   │   ├── InstructionsText.txt
│   │   │   ├── InsufficientReserves.txt
│   │   │   ├── LandPlanted.txt
│   │   │   ├── PlantLandError1.txt
│   │   │   ├── PlantLandError2.txt
│   │   │   ├── PlantLandError3.txt
│   │   │   ├── PlantLandPrompt.txt
│   │   │   ├── PollutionError.txt
│   │   │   ├── PollutionPrompt.txt
│   │   │   ├── Resource.cs
│   │   │   ├── SavedCountrymenPrompt.txt
│   │   │   ├── SavedLandError.txt
│   │   │   ├── SavedLandPrompt.txt
│   │   │   ├── SavedTreasuryPrompt.txt
│   │   │   ├── SavedWorkersPrompt.txt
│   │   │   ├── SavedYearsError.txt
│   │   │   ├── SavedYearsPrompt.txt
│   │   │   ├── SellLandError.txt
│   │   │   ├── SellLandErrorReason.txt
│   │   │   ├── SellLandPrompt.txt
│   │   │   ├── StatusSansWorkers.txt
│   │   │   ├── StatusWithWorkers.txt
│   │   │   ├── Title.txt
│   │   │   ├── TourismDecrease.txt
│   │   │   ├── TourismEarnings.txt
│   │   │   ├── TourismReason.txt
│   │   │   └── WorkerMigration.txt
│   │   ├── Result.cs
│   │   ├── ValidityTest.cs
│   │   └── Year.cs
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── king.html
│   │   └── king.js
│   ├── king.bas
│   ├── king_variable_update.bas
│   ├── kotlin/
│   │   ├── King.kt
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   ├── king.py
│   │   └── king_variable_update.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── King.sln
│       ├── King.vbproj
│       └── README.md
├── 54_Letter/
│   ├── README.md
│   ├── csharp/
│   │   ├── Game.cs
│   │   ├── GameState.cs
│   │   ├── Letter.csproj
│   │   ├── Letter.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Letter.java
│   │       └── LetterGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── letter.html
│   │   └── letter.js
│   ├── kotlin/
│   │   └── README.md
│   ├── letter.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── letter.pl
│   ├── python/
│   │   ├── README.md
│   │   └── letter.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── letter.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Letter.sln
│       ├── Letter.vbproj
│       └── README.md
├── 55_Life/
│   ├── README.md
│   ├── csharp/
│   │   ├── .gitignore
│   │   ├── Life.csproj
│   │   ├── Life.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── java/
│   │           └── Life.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── life.html
│   │   └── life.js
│   ├── kotlin/
│   │   └── README.md
│   ├── life.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── life.pl
│   ├── python/
│   │   ├── README.md
│   │   └── life.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── life.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Life.sln
│       ├── Life.vbproj
│       └── README.md
├── 56_Life_for_Two/
│   ├── README.md
│   ├── csharp/
│   │   ├── Board.cs
│   │   ├── Coordinates.cs
│   │   ├── Game.cs
│   │   ├── Generation.cs
│   │   ├── IOExtensions.cs
│   │   ├── Life.cs
│   │   ├── LifeforTwo.csproj
│   │   ├── LifeforTwo.sln
│   │   ├── Piece.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Draw.txt
│   │       ├── IllegalCoords.txt
│   │       ├── InitialPieces.txt
│   │       ├── Player.txt
│   │       ├── Resource.cs
│   │       ├── SameCoords.txt
│   │       ├── Title.txt
│   │       └── Winner.txt
│   ├── java/
│   │   ├── LifeForTwo.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── lifefortwo.html
│   │   └── lifefortwo.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lifefortwo.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── lifefortwo.pl
│   ├── python/
│   │   ├── README.md
│   │   └── life_for_two.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── LifeforTwo.sln
│       ├── LifeforTwo.vbproj
│       └── README.md
├── 57_Literature_Quiz/
│   ├── README.md
│   ├── csharp/
│   │   ├── LiteratureQuiz.csproj
│   │   ├── LiteratureQuiz.sln
│   │   ├── README.md
│   │   └── litquiz.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── LiteratureQuiz.java
│   │       └── LiteratureQuizGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── litquiz.html
│   │   ├── litquiz.js
│   │   └── litquiz.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── litquiz.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── litquiz.pl
│   ├── python/
│   │   ├── README.md
│   │   └── litquiz.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── LiteratureQuiz.sln
│       ├── LiteratureQuiz.vbproj
│       └── README.md
├── 58_Love/
│   ├── README.md
│   ├── csharp/
│   │   ├── Love.csproj
│   │   ├── Love.sln
│   │   ├── LovePattern.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Intro.txt
│   │   │   └── Resource.cs
│   │   ├── SourceCharacters.cs
│   │   └── StringBuilderExtensions.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Love.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── love.html
│   │   └── love.js
│   ├── kotlin/
│   │   └── README.md
│   ├── love.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── love.pl
│   ├── python/
│   │   ├── README.md
│   │   └── love.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── love.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Love.sln
│       ├── Love.vbproj
│       └── README.md
├── 59_Lunar_LEM_Rocket/
│   ├── README.md
│   ├── csharp/
│   │   ├── LunarLEMRocket.csproj
│   │   ├── LunarLEMRocket.sln
│   │   └── README.md
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── lem.html
│   │   ├── lem.js
│   │   ├── lunar.html
│   │   └── lunar.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lem.bas
│   ├── lua/
│   │   └── README.md
│   ├── lunar.bas
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── lunar.py
│   ├── rocket.bas
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── README.md
│   │   └── rocket/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   └── vbnet/
│       ├── LunarLEMRocket.sln
│       ├── LunarLEMRocket.vbproj
│       └── README.md
├── 60_Mastermind/
│   ├── README.md
│   ├── csharp/
│   │   ├── Code.cs
│   │   ├── CodeFactory.cs
│   │   ├── ColorInfo.cs
│   │   ├── Colors.cs
│   │   ├── Command.cs
│   │   ├── Controller.cs
│   │   ├── EnumerableExtensions.cs
│   │   ├── Mastermind.csproj
│   │   ├── Mastermind.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── TurnResult.cs
│   │   └── View.cs
│   ├── java/
│   │   ├── Mastermind.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── mastermind.html
│   │   └── mastermind.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── mastermind.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── mastermind.pl
│   ├── python/
│   │   ├── README.md
│   │   └── mastermind.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Mastermind/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── Mastermind_refactored_for_conventions/
│   │       ├── Cargo.toml
│   │       ├── README.md
│   │       └── src/
│   │           ├── lib.rs
│   │           └── main.rs
│   └── vbnet/
│       ├── Mastermind.sln
│       ├── Mastermind.vbproj
│       └── README.md
├── 61_Math_Dice/
│   ├── README.md
│   ├── csharp/
│   │   ├── GameState.cs
│   │   ├── MathDice.csproj
│   │   ├── MathDice.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── StringExtensions.cs
│   ├── java/
│   │   ├── Die.java
│   │   ├── MathDice.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── mathdice.html
│   │   └── mathdice.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── mathdice.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── mathdice.pl
│   ├── python/
│   │   ├── README.md
│   │   └── mathdice.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── mathdice.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── MathDice.sln
│       ├── MathDice.vbproj
│       └── README.md
├── 62_Mugwump/
│   ├── README.md
│   ├── csharp/
│   │   ├── Distance.cs
│   │   ├── Game.cs
│   │   ├── Grid.cs
│   │   ├── IRandomExtensions.cs
│   │   ├── Mugwump.cs
│   │   ├── Mugwump.csproj
│   │   ├── Mugwump.sln
│   │   ├── Position.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Strings/
│   │   │   └── Intro.txt
│   │   └── TextIOExtensions.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Mugwump.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── mugwump.html
│   │   └── mugwump.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── mugwump.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── mugwump.pl
│   ├── python/
│   │   ├── README.md
│   │   └── mugwump.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── coordinate.rs
│   │       ├── draw.rs
│   │       ├── game.rs
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Mugwump.sln
│       ├── Mugwump.vbproj
│       └── README.md
├── 63_Name/
│   ├── README.md
│   ├── csharp/
│   │   ├── Name.csproj
│   │   ├── Name.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── StringExtensions.cs
│   ├── java/
│   │   ├── Name.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── name.html
│   │   └── name.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── name.lua
│   ├── name.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── name.pl
│   ├── python/
│   │   ├── README.md
│   │   └── name.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── name.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Name.sln
│       ├── Name.vbproj
│       └── README.md
├── 64_Nicomachus/
│   ├── README.md
│   ├── csharp/
│   │   ├── Nicomachus.csproj
│   │   ├── Nicomachus.sln
│   │   ├── README.md
│   │   └── program.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Nicomachus.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── nicomachus.html
│   │   └── nicomachus.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── nicomachus.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── nicomachus.pl
│   ├── python/
│   │   ├── README.md
│   │   └── nicomachus.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Nicomachus.sln
│       ├── Nicomachus.vbproj
│       └── README.md
├── 65_Nim/
│   ├── README.md
│   ├── csharp/
│   │   ├── Nim.csproj
│   │   ├── Nim.sln
│   │   └── README.md
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── nim.html
│   │   └── nim.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── nim.bas
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── Traditional_NIM.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── nim.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Nim.sln
│       ├── Nim.vbproj
│       └── README.md
├── 66_Number/
│   ├── README.md
│   ├── csharp/
│   │   ├── Number.csproj
│   │   ├── Number.sln
│   │   ├── README.md
│   │   └── program.cs
│   ├── java/
│   │   ├── 1/
│   │   │   └── Number.java
│   │   ├── 2/
│   │   │   └── Number.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── number.html
│   │   └── number.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── number.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── number.pl
│   ├── python/
│   │   ├── README.md
│   │   └── number.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Number.sln
│       ├── Number.vbproj
│       └── README.md
├── 67_One_Check/
│   ├── README.md
│   ├── csharp/
│   │   ├── Board.cs
│   │   ├── Game.cs
│   │   ├── Move.cs
│   │   ├── OneCheck.csproj
│   │   ├── OneCheck.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Bye.txt
│   │       ├── From.txt
│   │       ├── IllegalMove.txt
│   │       ├── Introduction.txt
│   │       ├── Resource.cs
│   │       ├── Results.txt
│   │       ├── To.txt
│   │       ├── TryAgain.txt
│   │       └── YesOrNo.txt
│   ├── java/
│   │   ├── OneCheck.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── onecheck.html
│   │   └── onecheck.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── onecheck.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── onecheck.pl
│   ├── python/
│   │   ├── README.md
│   │   └── onecheck.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── OneCheck.sln
│       ├── OneCheck.vbproj
│       └── README.md
├── 68_Orbit/
│   ├── README.md
│   ├── csharp/
│   │   ├── Orbit.csproj
│   │   ├── Orbit.sln
│   │   ├── README.md
│   │   └── program.cs
│   ├── java/
│   │   ├── Orbit.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── orbit.html
│   │   └── orbit.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── orbit.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── orbit.pl
│   ├── python/
│   │   ├── README.md
│   │   └── orbit.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── orbit.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── Orbit.sln
│       ├── Orbit.vbproj
│       └── README.md
├── 69_Pizza/
│   ├── README.md
│   ├── csharp/
│   │   ├── CustomerMap.cs
│   │   ├── Pizza.csproj
│   │   ├── Pizza.sln
│   │   ├── PizzaGame.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── StringBuilderExtensions.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Pizza.java
│   │       └── PizzaGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── pizza.html
│   │   └── pizza.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── pizza.pl
│   ├── pizza.bas
│   ├── python/
│   │   ├── README.md
│   │   └── pizza.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── pizza.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Pizza.sln
│       ├── Pizza.vbproj
│       └── README.md
├── 70_Poetry/
│   ├── README.md
│   ├── csharp/
│   │   ├── Context.cs
│   │   ├── Phrase.cs
│   │   ├── Poem.cs
│   │   ├── Poetry.csproj
│   │   ├── Poetry.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Resource.cs
│   │       └── Title.txt
│   ├── java/
│   │   ├── Poetry.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── poetry.html
│   │   └── poetry.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── poetry.pl
│   ├── poetry.bas
│   ├── python/
│   │   ├── README.md
│   │   ├── poetry.pl
│   │   └── poetry.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── poetry.rb
│   └── vbnet/
│       ├── Poetry.sln
│       ├── Poetry.vbproj
│       └── README.md
├── 71_Poker/
│   ├── README.md
│   ├── csharp/
│   │   ├── Cards/
│   │   │   ├── Card.cs
│   │   │   ├── Deck.cs
│   │   │   ├── Hand.cs
│   │   │   ├── HandRank.cs
│   │   │   ├── Rank.cs
│   │   │   └── Suit.cs
│   │   ├── Game.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Players/
│   │   │   ├── Computer.cs
│   │   │   ├── Human.cs
│   │   │   └── Player.cs
│   │   ├── Poker.csproj
│   │   ├── Poker.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Instructions.txt
│   │   │   ├── Resource.cs
│   │   │   └── Title.txt
│   │   ├── Strategies/
│   │   │   ├── Bet.cs
│   │   │   ├── Bluff.cs
│   │   │   ├── Check.cs
│   │   │   ├── Fold.cs
│   │   │   ├── None.cs
│   │   │   ├── Raise.cs
│   │   │   └── Strategy.cs
│   │   └── Table.cs
│   ├── java/
│   │   ├── Poker.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── poker.html
│   │   └── poker.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── poker.bas
│   ├── python/
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Poker.sln
│       ├── Poker.vbproj
│       └── README.md
├── 72_Queen/
│   ├── README.md
│   ├── csharp/
│   │   ├── Computer.cs
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── Move.cs
│   │   ├── Position.cs
│   │   ├── Program.cs
│   │   ├── Queen.csproj
│   │   ├── Queen.sln
│   │   ├── README.md
│   │   ├── RandomExtensions.cs
│   │   └── Resources/
│   │       ├── AnyonePrompt.txt
│   │       ├── Board.txt
│   │       ├── ComputerMove.txt
│   │       ├── Congratulations.txt
│   │       ├── Forfeit.txt
│   │       ├── IWin.txt
│   │       ├── IllegalMove.txt
│   │       ├── IllegalStart.txt
│   │       ├── Instructions.txt
│   │       ├── InstructionsPrompt.txt
│   │       ├── MovePrompt.txt
│   │       ├── Resource.cs
│   │       ├── StartPrompt.txt
│   │       ├── Thanks.txt
│   │       ├── Title.txt
│   │       └── YesOrNo.txt
│   ├── java/
│   │   ├── Queen.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── queen.html
│   │   └── queen.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── queen.pl
│   ├── python/
│   │   ├── .flake8
│   │   ├── README.md
│   │   └── queen.py
│   ├── queen.bas
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── ai.rs
│   │       ├── game.rs
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Queen.sln
│       ├── Queen.vbproj
│       └── README.md
├── 73_Reverse/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Reverse/
│   │   │   ├── Program.cs
│   │   │   ├── Reverse.csproj
│   │   │   └── Reverser.cs
│   │   ├── Reverse.Tests/
│   │   │   ├── Generators/
│   │   │   │   └── PositiveIntegerGenerator.cs
│   │   │   ├── Reverse.Tests.csproj
│   │   │   ├── ReverserTests.cs
│   │   │   └── TestReverser.cs
│   │   └── Reverse.sln
│   ├── java/
│   │   ├── README.md
│   │   └── Reverse.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── reverse.html
│   │   └── reverse.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── reverse.pl
│   ├── python/
│   │   ├── README.md
│   │   └── reverse.py
│   ├── reverse.bas
│   ├── ruby/
│   │   ├── README.md
│   │   └── reverse.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── README.md
│       ├── Reverse.sln
│       ├── Reverse.vb
│       └── Reverse.vbproj
├── 74_Rock_Scissors_Paper/
│   ├── README.md
│   ├── csharp/
│   │   ├── Choice.cs
│   │   ├── Choices.cs
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── RockScissorsPaper.csproj
│   │   └── RockScissorsPaper.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── RockScissors.java
│   ├── javascript/
│   │   ├── README.md
│   │   └── rockscissors.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── rockscissors.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── rockscissors.pl
│   ├── python/
│   │   ├── README.md
│   │   └── rockscissors.py
│   ├── rockscissors.bas
│   ├── ruby/
│   │   ├── README.md
│   │   └── rockscissors.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── README.md
│       ├── RockScissorsPaper.sln
│       └── RockScissorsPaper.vbproj
├── 75_Roulette/
│   ├── README.md
│   ├── csharp/
│   │   ├── Bet.cs
│   │   ├── BetType.cs
│   │   ├── Croupier.cs
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── AgainPrompt.txt
│   │   │   ├── BetAlready.txt
│   │   │   ├── BetPrompt.txt
│   │   │   ├── BrokeHouse.txt
│   │   │   ├── Check.txt
│   │   │   ├── CheckPrompt.txt
│   │   │   ├── HowManyBetsPrompt.txt
│   │   │   ├── Instructions.txt
│   │   │   ├── InstructionsPrompt.txt
│   │   │   ├── LastDollar.txt
│   │   │   ├── Outcome.txt
│   │   │   ├── Resource.cs
│   │   │   ├── Slot.txt
│   │   │   ├── Spinning.txt
│   │   │   ├── Thanks.txt
│   │   │   ├── Title.txt
│   │   │   └── Totals.txt
│   │   ├── Roulette.csproj
│   │   ├── Roulette.sln
│   │   ├── Slot.cs
│   │   ├── Table.cs
│   │   └── Wheel.cs
│   ├── java/
│   │   ├── README.md
│   │   ├── iterative/
│   │   │   └── Roulette.java
│   │   └── oop/
│   │       ├── Bet.java
│   │       ├── Roulette.java
│   │       └── Wheel.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── roulette.html
│   │   └── roulette.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   ├── make-roulette-test.pl
│   │   ├── roulette-test.t
│   │   └── roulette.pl
│   ├── python/
│   │   ├── README.md
│   │   └── roulette.py
│   ├── roulette.bas
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── README.md
│       ├── Roulette.sln
│       └── Roulette.vbproj
├── 76_Russian_Roulette/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── RussianRoulette.csproj
│   │   └── RussianRoulette.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── RussianRoulette.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── russianroulette.html
│   │   └── russianroulette.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── russianroulette.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── russianroulette.pl
│   ├── python/
│   │   ├── README.md
│   │   └── russianroulette.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── russianroulette.rb
│   ├── russianroulette.bas
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── README.md
│       ├── RussianRoulette.sln
│       └── RussianRoulette.vbproj
├── 77_Salvo/
│   ├── README.md
│   ├── csharp/
│   │   ├── Coordinate.cs
│   │   ├── Extensions/
│   │   │   ├── IOExtensions.cs
│   │   │   └── RandomExtensions.cs
│   │   ├── Fleet.cs
│   │   ├── Game.cs
│   │   ├── Offset.cs
│   │   ├── Position.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Coordinates.txt
│   │   │   ├── IHaveMoreShotsThanSquares.txt
│   │   │   ├── IHaveShots.txt
│   │   │   ├── IHit.txt
│   │   │   ├── IWon.txt
│   │   │   ├── Illegal.txt
│   │   │   ├── Resource.cs
│   │   │   ├── SeeShots.txt
│   │   │   ├── ShotBefore.txt
│   │   │   ├── Start.txt
│   │   │   ├── Title.txt
│   │   │   ├── Turn.txt
│   │   │   ├── WhereAreYourShips.txt
│   │   │   ├── YouHaveMoreShotsThanSquares.txt
│   │   │   ├── YouHaveShots.txt
│   │   │   ├── YouHit.txt
│   │   │   └── YouWon.txt
│   │   ├── Salvo.csproj
│   │   ├── Salvo.sln
│   │   ├── Ships/
│   │   │   ├── Battleship.cs
│   │   │   ├── Cruiser.cs
│   │   │   ├── Destroyer.cs
│   │   │   └── Ship.cs
│   │   ├── Targetting/
│   │   │   ├── ComputerShotSelector.cs
│   │   │   ├── HumanShotSelector.cs
│   │   │   ├── KnownHitsShotSelectionStrategy.cs
│   │   │   ├── SearchPattern.cs
│   │   │   ├── SearchPatternShotSelector.cs
│   │   │   ├── ShotSelectionStrategy.cs
│   │   │   └── ShotSelector.cs
│   │   ├── TurnHandler.cs
│   │   └── Winner.cs
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── salvo.html
│   │   └── salvo.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── salvo.py
│   ├── ruby/
│   │   └── README.md
│   ├── salvo.bas
│   └── vbnet/
│       ├── README.md
│       ├── Salvo.sln
│       └── Salvo.vbproj
├── 78_Sine_Wave/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── SineWave.csproj
│   │   └── SineWave.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── SineWave.java
│   ├── javascript/
│   │   ├── README.md
│   │   └── sinewave.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── sinewave.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── sinewave.pl
│   ├── python/
│   │   ├── README.md
│   │   └── sinewave.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── sinewave.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── sinewave.bas
│   └── vbnet/
│       ├── README.md
│       ├── SineWave.sln
│       └── SineWave.vbproj
├── 79_Slalom/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Slalom.csproj
│   │   ├── Slalom.sln
│   │   └── program.cs
│   ├── java/
│   │   ├── README.md
│   │   └── Slalom.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── slalom.html
│   │   └── slalom.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── slalom.py
│   ├── ruby/
│   │   └── README.md
│   ├── slalom.bas
│   └── vbnet/
│       ├── README.md
│       ├── Slalom.sln
│       └── Slalom.vbproj
├── 80_Slots/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Slots.csproj
│   │   ├── Slots.sln
│   │   └── slots.csx
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Slots.java
│   │       └── SlotsGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── slots.html
│   │   └── slots.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── slots.pl
│   ├── python/
│   │   ├── README.md
│   │   └── slots.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── slots.rb
│   ├── slots.bas
│   └── vbnet/
│       ├── README.md
│       ├── Slots.sln
│       └── Slots.vbproj
├── 81_Splat/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Splat.csproj
│   │   └── Splat.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Splat.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── splat.html
│   │   └── splat.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── splat.pl
│   ├── python/
│   │   ├── README.md
│   │   └── splat.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── celestial_body.rs
│   │       ├── game.rs
│   │       ├── main.rs
│   │       ├── stats.rs
│   │       └── utility.rs
│   ├── splat.bas
│   └── vbnet/
│       ├── README.md
│       ├── Splat.sln
│       └── Splat.vbproj
├── 82_Stars/
│   ├── README.md
│   ├── csharp/
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Instructions.txt
│   │   │   ├── Resource.cs
│   │   │   └── Title.txt
│   │   ├── Stars.csproj
│   │   └── Stars.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Stars.java
│   │       └── StarsGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── stars.html
│   │   └── stars.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── stars.pl
│   ├── python/
│   │   ├── README.md
│   │   └── stars.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── stars.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── rust_JWB/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── stars.bas
│   └── vbnet/
│       ├── README.md
│       ├── Stars.sln
│       └── Stars.vbproj
├── 83_Stock_Market/
│   ├── README.md
│   ├── csharp/
│   │   ├── Assets.cs
│   │   ├── Broker.cs
│   │   ├── Company.cs
│   │   ├── Controller.cs
│   │   ├── Extensions/
│   │   │   ├── EnumerableExtensions.cs
│   │   │   ├── ImmutableArrayExtensions.cs
│   │   │   └── RandomExtensions.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── StockMarket.cs
│   │   ├── StockMarket.csproj
│   │   ├── StockMarket.sln
│   │   ├── TradingDay.cs
│   │   ├── TransactionResult.cs
│   │   └── View.cs
│   ├── java/
│   │   ├── README.md
│   │   └── StockMarket.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── stockmarket.html
│   │   └── stockmarket.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── Stock_Market.py
│   ├── ruby/
│   │   └── README.md
│   ├── stockmarket.bas
│   └── vbnet/
│       ├── README.md
│       ├── StockMarket.sln
│       └── StockMarket.vbproj
├── 84_Super_Star_Trek/
│   ├── README.md
│   ├── csharp/
│   │   ├── Commands/
│   │   │   ├── Command.cs
│   │   │   ├── CommandExtensions.cs
│   │   │   └── CommandResult.cs
│   │   ├── Game.cs
│   │   ├── IRandomExtensions.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Objects/
│   │   │   ├── Enterprise.cs
│   │   │   ├── Klingon.cs
│   │   │   ├── Star.cs
│   │   │   └── Starbase.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── CombatArea.txt
│   │   │   ├── Congratulations.txt
│   │   │   ├── CourtMartial.txt
│   │   │   ├── Destroyed.txt
│   │   │   ├── EndOfMission.txt
│   │   │   ├── Enterprise.txt
│   │   │   ├── Instructions.txt
│   │   │   ├── LowShields.txt
│   │   │   ├── NoEnemyShips.txt
│   │   │   ├── NoStarbase.txt
│   │   │   ├── NowEntering.txt
│   │   │   ├── Orders.txt
│   │   │   ├── PermissionDenied.txt
│   │   │   ├── Protected.txt
│   │   │   ├── RegionNames.txt
│   │   │   ├── RelievedOfCommand.txt
│   │   │   ├── RepairEstimate.txt
│   │   │   ├── RepairPrompt.txt
│   │   │   ├── ReplayPrompt.txt
│   │   │   ├── ShieldsDropped.txt
│   │   │   ├── ShieldsSet.txt
│   │   │   ├── ShortRangeSensorsOut.txt
│   │   │   ├── StartText.txt
│   │   │   ├── Stranded.txt
│   │   │   ├── Strings.cs
│   │   │   └── Title.txt
│   │   ├── Space/
│   │   │   ├── Coordinates.cs
│   │   │   ├── Course.cs
│   │   │   ├── Galaxy.cs
│   │   │   ├── Quadrant.cs
│   │   │   └── QuadrantInfo.cs
│   │   ├── StringExtensions.cs
│   │   ├── SuperStarTrek.csproj
│   │   ├── SuperStarTrek.sln
│   │   ├── Systems/
│   │   │   ├── ComputerFunctions/
│   │   │   │   ├── ComputerFunction.cs
│   │   │   │   ├── CumulativeGalacticRecord.cs
│   │   │   │   ├── DirectionDistanceCalculator.cs
│   │   │   │   ├── GalacticReport.cs
│   │   │   │   ├── GalaxyRegionMap.cs
│   │   │   │   ├── NavigationCalculator.cs
│   │   │   │   ├── StarbaseDataCalculator.cs
│   │   │   │   ├── StatusReport.cs
│   │   │   │   └── TorpedoDataCalculator.cs
│   │   │   ├── DamageControl.cs
│   │   │   ├── LibraryComputer.cs
│   │   │   ├── LongRangeSensors.cs
│   │   │   ├── PhaserControl.cs
│   │   │   ├── PhotonTubes.cs
│   │   │   ├── ShieldControl.cs
│   │   │   ├── ShortRangeSensors.cs
│   │   │   ├── Subsystem.cs
│   │   │   └── WarpEngines.cs
│   │   └── Utils/
│   │       └── DirectionAndDistance.cs
│   ├── instructions.txt
│   ├── java/
│   │   ├── Enterprise.java
│   │   ├── GalaxyMap.java
│   │   ├── GameCallback.java
│   │   ├── README.md
│   │   ├── SuperStarTrekGame.java
│   │   ├── SuperStarTrekInstructions.java
│   │   └── Util.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── cli.mjs
│   │   ├── index.html
│   │   ├── package.json
│   │   └── superstartrek.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   ├── superstartrek.py
│   │   └── superstartrekins.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── readme.md
│   │   └── src/
│   │       ├── commands.rs
│   │       ├── input.rs
│   │       ├── main.rs
│   │       ├── model.rs
│   │       └── view.rs
│   ├── superstartrek.bas
│   ├── superstartrekins.bas
│   └── vbnet/
│       ├── README.md
│       ├── SuperStarTrek.sln
│       └── SuperStarTrek.vbproj
├── 85_Synonym/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Synonym.cs
│   │   ├── Synonym.csproj
│   │   └── Synonym.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Synonym.java
│   │       ├── SynonymGame.java
│   │       └── SynonymList.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── synonym.html
│   │   └── synonym.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── Synonym.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── synonym.pl
│   ├── python/
│   │   ├── README.md
│   │   └── synonym.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── synonim.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── synonym.bas
│   └── vbnet/
│       ├── README.md
│       ├── Synonym.sln
│       └── Synonym.vbproj
├── 86_Target/
│   ├── README.md
│   ├── csharp/
│   │   ├── Angle.cs
│   │   ├── Explosion.cs
│   │   ├── FiringRange.cs
│   │   ├── Game.cs
│   │   ├── Offset.cs
│   │   ├── Point.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── RandomExtensions.cs
│   │   ├── Strings/
│   │   │   └── TitleAndInstructions.txt
│   │   ├── Target.csproj
│   │   └── Target.sln
│   ├── java/
│   │   ├── README.md
│   │   └── Target.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── target.html
│   │   └── target.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── target.pl
│   ├── python/
│   │   ├── README.md
│   │   └── target.py
│   ├── ruby/
│   │   └── README.md
│   ├── target.bas
│   └── vbnet/
│       ├── README.md
│       ├── Target.sln
│       └── Target.vbproj
├── 87_3-D_Plot/
│   ├── 3dplot.bas
│   ├── README.md
│   ├── csharp/
│   │   ├── Function.cs
│   │   ├── Plot.csproj
│   │   ├── Plot.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── d/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── threedeeplot.d
│   │   └── threedeeplot_random.d
│   ├── java/
│   │   ├── Plot3D.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── 3dplot.html
│   │   ├── 3dplot.js
│   │   └── README.md
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── 3dplot.pl
│   │   └── README.md
│   ├── python/
│   │   ├── 3dplot.py
│   │   └── README.md
│   ├── ruby/
│   │   ├── 3dplot.rb
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Plot.sln
│       ├── Plot.vbproj
│       └── README.md
├── 88_3-D_Tic-Tac-Toe/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── Qubic.cs
│   │   ├── QubicData.cs
│   │   ├── README.md
│   │   ├── ThreeDTicTacToe.csproj
│   │   └── ThreeDTicTacToe.sln
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── qubit.html
│   │   └── qubit.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── qubit.py
│   ├── qubit.bas
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── README.md
│       ├── ThreeDTicTacToe.sln
│       └── ThreeDTicTacToe.vbproj
├── 89_Tic-Tac-Toe/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── TicTacToe.sln
│   │   ├── tictactoe1/
│   │   │   ├── Program.cs
│   │   │   └── tictactoe1.csproj
│   │   └── tictactoe2/
│   │       ├── Program.cs
│   │       └── tictactoe2.csproj
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Board.java
│   │       └── TicTacToe2.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── tictactoe1.html
│   │   ├── tictactoe1.js
│   │   ├── tictactoe2.html
│   │   └── tictactoe2.js
│   ├── kotlin/
│   │   ├── Board.kt
│   │   ├── README.md
│   │   └── TicTacToe2.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── tictactoe2.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── TicTacToe_Hard.py
│   │   └── tictactoe2.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── tictactoe1.bas
│   ├── tictactoe2.bas
│   └── vbnet/
│       ├── README.md
│       ├── TicTacToe.sln
│       └── TicTacToe.vbproj
├── 90_Tower/
│   ├── README.md
│   ├── csharp/
│   │   ├── Game.cs
│   │   ├── Models/
│   │   │   ├── Needle.cs
│   │   │   └── Towers.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Congratulations.txt
│   │   │   ├── DiskCountPrompt.txt
│   │   │   ├── DiskCountQuit.txt
│   │   │   ├── DiskCountRetry.txt
│   │   │   ├── DiskNotInPlay.txt
│   │   │   ├── DiskPrompt.txt
│   │   │   ├── DiskQuit.txt
│   │   │   ├── DiskRetry.txt
│   │   │   ├── DiskUnavailable.txt
│   │   │   ├── IllegalMove.txt
│   │   │   ├── Instructions.txt
│   │   │   ├── Intro.txt
│   │   │   ├── NeedlePrompt.txt
│   │   │   ├── NeedleQuit.txt
│   │   │   ├── NeedleRetry.txt
│   │   │   ├── PlayAgainPrompt.txt
│   │   │   ├── Strings.cs
│   │   │   ├── TaskFinished.txt
│   │   │   ├── Thanks.txt
│   │   │   ├── Title.txt
│   │   │   ├── TooManyMoves.txt
│   │   │   └── YesNoPrompt.txt
│   │   ├── Tower.csproj
│   │   ├── Tower.sln
│   │   └── UI/
│   │       ├── Input.cs
│   │       ├── Prompt.cs
│   │       └── TowerDisplay.cs
│   ├── java/
│   │   ├── README.md
│   │   └── Tower.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── tower.html
│   │   └── tower.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── tower.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── tower.pl
│   ├── python/
│   │   ├── README.md
│   │   └── tower.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── disk.rs
│   │       ├── game.rs
│   │       ├── main.rs
│   │       ├── needle.rs
│   │       └── util.rs
│   ├── tower.bas
│   └── vbnet/
│       ├── README.md
│       ├── Tower.sln
│       └── Tower.vbproj
├── 91_Train/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Train/
│   │   │   ├── TrainGame.cs
│   │   │   └── TrainGame.csproj
│   │   ├── Train.sln
│   │   └── TrainTests/
│   │       ├── TrainGameTests.cs
│   │       └── TrainTests.csproj
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Train.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── train.html
│   │   └── train.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── train.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── train.pl
│   ├── python/
│   │   ├── README.md
│   │   └── train.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── train.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       └── main.rs
│   ├── train.bas
│   └── vbnet/
│       ├── README.md
│       ├── Train.sln
│       └── Train.vbproj
├── 92_Trap/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Trap.csproj
│   │   └── Trap.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Trap.java
│   │       └── TrapGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── trap.html
│   │   └── trap.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── trap.pl
│   ├── python/
│   │   ├── README.md
│   │   └── trap.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── trap.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── trap.bas
│   └── vbnet/
│       ├── README.md
│       ├── Trap.sln
│       └── Trap.vbproj
├── 93_23_Matches/
│   ├── 23matches.bas
│   ├── README.md
│   ├── csharp/
│   │   ├── 23Matches.cs
│   │   └── csharp.csproj
│   ├── java/
│   │   ├── CoinSide.java
│   │   ├── Messages.java
│   │   ├── README.md
│   │   ├── TwentyThreeMatches.java
│   │   └── TwentyThreeMatchesGame.java
│   ├── javascript/
│   │   ├── 23matches.html
│   │   ├── 23matches.js
│   │   └── README.md
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── 23matches.pl
│   │   └── README.md
│   ├── python/
│   │   ├── 23matches.py
│   │   └── README.md
│   ├── ruby/
│   │   ├── 23_matches.rb
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── README.md
│       ├── TwentyThreeMatches.sln
│       └── TwentyThreeMatches.vbproj
├── 94_War/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── War/
│   │   │   ├── Cards.cs
│   │   │   ├── Program.cs
│   │   │   ├── UserInterface.cs
│   │   │   └── War.csproj
│   │   ├── War.sln
│   │   └── WarTester/
│   │       ├── Tests.cs
│   │       └── WarTester.csproj
│   ├── d/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── war.d
│   ├── java/
│   │   ├── README.md
│   │   └── War.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── war.html
│   │   └── war.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── War.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── war.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── cards.json
│   │   └── war.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── war.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── vbnet/
│   │   ├── README.md
│   │   ├── War.sln
│   │   └── War.vbproj
│   └── war.bas
├── 95_Weekday/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Weekday.csproj
│   │   └── Weekday.sln
│   ├── java/
│   │   ├── README.md
│   │   └── Weekday.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── weekday.html
│   │   └── weekday.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── weekday.pl
│   ├── python/
│   │   ├── README.md
│   │   └── weekday.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── vbnet/
│   │   ├── README.md
│   │   ├── Weekday.sln
│   │   └── Weekday.vbproj
│   └── weekday.bas
├── 96_Word/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── word.csproj
│   │   └── word.sln
│   ├── d/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── word.d
│   ├── java/
│   │   ├── README.md
│   │   └── Word.java
│   ├── javascript/
│   │   ├── README.md
│   │   └── word.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── word.pl
│   ├── python/
│   │   ├── README.md
│   │   └── word.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── word.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── main.rs
│   │       ├── progress.rs
│   │       └── word_game.rs
│   ├── vbnet/
│   │   ├── Program.vb
│   │   ├── README.md
│   │   ├── word.sln
│   │   └── word.vbproj
│   └── word.bas
├── HOW_TO_RUN_THE_GAMES.md
├── LICENSE
├── README.md
├── index.html
└── pyproject.toml

================================================
FILE CONTENTS
================================================

================================================
FILE: .coveragerc
================================================
[run]
omit =
    *test*


================================================
FILE: .github/workflows/check-python.yml
================================================
name: Check Python code

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.10"]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r 00_Utilities/python/ci-requirements.txt
    - name: Test with mypy
      run: |
        mypy . --exclude 79_Slalom --exclude 27_Civil_War --exclude 38_Fur_Trader --exclude 81_Splat --exclude 09_Battle --exclude 40_Gomoko --exclude 36_Flip_Flop --exclude 43_Hammurabi --exclude 04_Awari --exclude 78_Sine_Wave --exclude 77_Salvo --exclude 34_Digits --exclude 17_Bullfight --exclude 16_Bug
    - name: Test with flake8
      run: |
        flake8 . --ignore E501,W503,E203,E731,B011,SIM119,SIM106


================================================
FILE: .github/workflows/file-size.yml
================================================
name: File Size Check

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.10"]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Get changed files
      id: changed-files
      uses: tj-actions/changed-files@v18.4
    - name: List all changed files
      run: |
        # MAXSIZE is 1 MB
        MAXSIZE=1000000
        for FILENAME in ${{ steps.changed-files.outputs.all_changed_files }}; do
          FILESIZE=$(stat -c%s "$FILENAME")
          echo "Size of $FILENAME = $FILESIZE bytes."
          if (( FILESIZE > MAXSIZE)); then
            echo "$FILENAME is too big. Only $MAXSIZE bytes allowed."
            exit 1
          fi
        done


================================================
FILE: .github/workflows/rust.yml
================================================
name: Rust

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

env:
  CARGO_TERM_COLOR: always

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: Build All
      run: find */rust/Cargo.toml|xargs -I {} dirname {}|xargs -I {} bash -c 'cd {} && cargo build --verbose'

    - name: Run All tests
      run: find */rust/Cargo.toml|xargs -I {} dirname {}|xargs -I {} bash -c 'cd {} && cargo test --verbose'


================================================
FILE: .gitignore
================================================
.local/
.vscode/
.gradle/
node_modules/
buildJvm/bin
buildJvm/*/build/

.classpath
.project
.settings
.metadata
*.iml
*.ipr

*.class
*/.vs
*.suo

bin/
obj/

.idea
*.iws
*.iml
*.ipr
out/

*.py[co]
.python-version
Pipfile
venv/
.coverage

.DS_Store
.vs/
**/target/
**/*.rs.bk
/target
todo.md

.fake
.fake

================================================
FILE: .nojekyll
================================================


================================================
FILE: .pre-commit-config.yaml
================================================
# pre-commit run --all-files
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.1.0
    hooks:
    -   id: check-ast
    -   id: check-case-conflict
    -   id: check-docstring-first
    -   id: check-executables-have-shebangs
    -   id: check-json
    -   id: check-yaml
    -   id: debug-statements
    -   id: end-of-file-fixer
    -   id: trailing-whitespace
    -   id: mixed-line-ending
    -   id: check-added-large-files
        args: ['--maxkb=1000']
-   repo: https://github.com/pre-commit/mirrors-isort
    rev: v5.10.1
    hooks:
    -   id: isort
-   repo: https://github.com/psf/black
    rev: 22.1.0
    hooks:
    -   id: black
-   repo: https://github.com/asottile/pyupgrade
    rev: v2.31.1
    hooks:
    -   id: pyupgrade
        args: [--py37-plus]
-   repo: https://github.com/asottile/blacken-docs
    rev: v1.12.1
    hooks:
    -   id: blacken-docs
        additional_dependencies: [black==22.1.0]


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/MiniScript/README.md
================================================
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).

Conversion to [MiniScript](https://miniscript.org).

Ways to play:

1. Command-Line MiniScript:
Download for your system from https://miniscript.org/cmdline/, install, and then run the program with a command such as:

```
	miniscript aceyducey.ms
```
2. Mini Micro:
Download Mini Micro from https://miniscript.org/MiniMicro/, launch, and then click the top disk slot and chose "Mount Folder..."  Select the folder containing the MiniScript program and this README file.  Then, at the Mini Micro command prompt, enter:

```
	load "aceyducey"
	run
```

================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/MiniScript/aceyducey.ms
================================================
print " "*26 + "Acey Ducey Card Game"
print " "*15 + "Creative Computing  Morristown, New Jersey"
print
print
print "Acey-ducey is played in the following manner."
print "The dealer (computer) deals two cards face up."
print "You have an option to bet or not bet depending"
print "on whether or not you feel the card will have"
print "a value between the first two."
print "If you do not want to bet, input a 0."

cards = range(2,10) + ["Jack", "Queen", "King", "Ace"]

while true
	money = 100
	
	while true
		print "You now have " + money + " dollars."
		print
		print "Here are your next two cards:"
		while true
			A = floor(rnd * cards.len)
			B = floor(rnd * cards.len)
			if B > A then break
		end while
		print cards[A]
		print cards[B]
		bet = input("What is your bet? ").val
		while bet > money
			print "Sorry, my friend, but you bet too much."
			print "You have only " + money + " dollars to bet."
			bet = input("What is your bet? ").val
		end while
		if bet == 0 then
			print "Chicken!!"
			continue
		end if
		C = floor(rnd * cards.len)
		print cards[C]
				
		if C <= A or C >= B	then
			print "Sorry, you lose."
			money -= bet
			if money <= 0 then break
		else
			print "You win!!!"
			money += bet
		end if
	end while
	
	print
	print
	print "Sorry, friend, but you blew your wad."
	print; print
	again = input("Try again (yes or no)? ").lower
	if again and again[0] == "n" then break
end while

print "O.K., hope you had fun!"

================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/README.md
================================================
Please refer to the `readme.md` in the parent folder. 

Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:

1. Popular (by TIOBE index)
2. Memory safe
3. Generally considered a 'scripting' language

We welcome additional ports, but these additional ports are for educational purposes only.

#### External Links
 - Common Lisp: https://github.com/koalahedron/lisp-computer-games/blob/master/01%20Acey%20Ducey/common-lisp/acey-deucy.lisp
 - PowerShell: https://github.com/eweilnau/basic-computer-games-powershell/blob/main/AceyDucey.ps1


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/aceyducey.bas
================================================
10 PRINT TAB(26);"ACEY DUCEY CARD GAME"
20 PRINT TAB(15);"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY"
21 PRINT
22 PRINT
30 PRINT"ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER "
40 PRINT"THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP"
50 PRINT"YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING"
60 PRINT"ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE"
70 PRINT"A VALUE BETWEEN THE FIRST TWO."
80 PRINT"IF YOU DO NOT WANT TO BET, INPUT A 0"
100 N=100
110 Q=100
120 PRINT "YOU NOW HAVE ";Q;" DOLLARS."
130 PRINT
140 GOTO 260
210 Q=Q+M
220 GOTO 120
240 Q=Q-M
250 GOTO 120
260 PRINT"HERE ARE YOUR NEXT TWO CARDS: "
270 A=INT(14*RND(1))+2
280 IF A<2 THEN 270
290 IF A>14 THEN 270
300 B=INT(14*RND(1))+2
310 IF B<2 THEN 300
320 IF B>14 THEN 300
330 IF A>=B THEN 270
350 IF A<11 THEN 400
360 IF A=11 THEN 420
370 IF A=12 THEN 440
380 IF A=13 THEN 460
390 IF A=14 THEN 480
400 PRINT A
410 GOTO 500
420 PRINT"JACK"
430 GOTO 500
440 PRINT"QUEEN"
450 GOTO 500
460 PRINT"KING"
470 GOTO 500
480 PRINT"ACE"
500 IF B<11 THEN 550
510 IF B=11 THEN 570
520 IF B=12 THEN 590
530 IF B=13 THEN 610
540 IF B=14 THEN 630
550 PRINT B
560 GOTO 650
570 PRINT"JACK"
580 GOTO 650
590 PRINT"QUEEN"
600 GOTO 650
610 PRINT"KING"
620 GOTO 650
630 PRINT"ACE"
640 PRINT
650 PRINT
660 INPUT"WHAT IS YOUR BET";M
670 IF M<>0 THEN 680
675 PRINT"CHICKEN!!"
676 PRINT
677 GOTO 260
680 IF M<=Q THEN 730
690 PRINT"SORRY, MY FRIEND, BUT YOU BET TOO MUCH."
700 PRINT"YOU HAVE ONLY ";Q;" DOLLARS TO BET."
710 GOTO 650
730 C=INT(14*RND(1))+2
740 IF C<2 THEN 730
750 IF C>14 THEN 730
760 IF C<11 THEN 810
770 IF C=11 THEN 830
780 IF C=12 THEN 850
790 IF C=13 THEN 870
800 IF C=14 THEN 890
810 PRINT C
820 GOTO 910
830 PRINT"JACK"
840 GOTO 910
850 PRINT"QUEEN"
860 GOTO 910
870 PRINT"KING"
880 GOTO 910
890 PRINT "ACE"
900 PRINT
910 IF C>A THEN 930
920 GOTO 970
930 IF C>=B THEN 970
950 PRINT"YOU WIN!!!"
960 GOTO 210
970 PRINT"SORRY, YOU LOSE"
980 IF M<Q THEN 240
990 PRINT
1000 PRINT
1010 PRINT"SORRY, FRIEND, BUT YOU BLEW YOUR WAD."
1015 PRINT:PRINT
1020 INPUT"TRY AGAIN (YES OR NO)";A$
1025 PRINT:PRINT
1030 IF A$="YES" THEN 110
1040 PRINT"O.K., HOPE YOU HAD FUN!"
1050 END


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/c++/README.md
================================================
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)

Conversion to [C++14](https://en.wikipedia.org/wiki/C%2B%2B14)

The build folder are executables for x86 and x64 systems. Compiled and built using Visual Studio.

================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/c++/source/Aceyducey.cpp
================================================
#include <iostream>
#include <time.h>
#include "Aceyducey.h"


int main()
{
    //Setting Seed for the Random Generator
    srand((unsigned int)time(NULL));
    bool isPlaying(true);
    Money = 100;
    WelcomeMessage();
    while (isPlaying)
    {
        Play(isPlaying);
    }
    printf("O.K., HOPE YOU HAD FUN!\n");
}

void WelcomeMessage()
{
    for (int i = 0; i < 25; i++)
    {
        printf(" ");
    }
    printf("ACEY DUCEY CARD GAME\n");
    for (int i = 0; i < 14; i++)
    {
        printf(" ");
    }
    printf("CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n\n\nACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER \n");
    printf("THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP\nYOU HAVE AN OPTION TO BET OR NOT BET DEPENDING\n");
    printf("ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE\nA VALUE BETWEEN THE FIRST TWO.\n");
    printf("IF YOU DO NOT WANT TO BET, INPUT A 0\n");
}

void Play(bool& isPlaying)
{
    short int DealerCards[2];
    int Bet;
    short int CurrentCard;
    printf("YOU NOW HAVE %d DOLLARS.\n\n", Money);
    printf("HERE ARE YOUR NEXT TWO CARDS: \n");

    //Draw Dealers Cards
    DrawCard(DealerCards[0]);
    printf("\n");
    DrawCard(DealerCards[1]);
    printf("\n\n\n");

    //Check if Bet is Valid
    do {
        printf("WHAT IS YOUR BET: ");
        std::cin >> Bet;
        if (Bet == 0)
        {
            printf("CHICKEN!!\n\n");
        }
    } while (Bet > Money || Bet < 0);

    //Draw Players Card
    DrawCard(CurrentCard);
    printf("\n");
    if (CurrentCard > DealerCards[0] && CurrentCard < DealerCards[1])
    {
        printf("YOU WIN!!!\n");
        Money += Bet;
        return;
    }
    else
    {
        printf("SORRY, YOU LOSE\n");
        Money -= Bet;
    }
    if (isGameOver())
    {
        printf("TRY AGAIN (YES OR NO)\n\n");
        std::string response;
        std::cin >> response;
        if (response != "YES")
        {
            isPlaying = false;
        }
        Money = 100;
    }
}

bool isGameOver()
{
    if (Money <= 0)
    {
        printf("\n\n");
        printf("SORRY, FRIEND, BUT YOU BLEW YOUR WAD.\n\n");
        return true;
    }
    return false;
}

void DrawCard(short int& Card)
{
    //Basically generate 2 numbers first one is between 2-11 and second one 0-3
    short int RandomNum1 = (rand() % 10) + 2;
    short int RandomNum2 = rand() % 4;
    Card = RandomNum1 + RandomNum2;

    switch (Card)
    {
    case 11:
        printf("JACK");
        break;
    case 12:
        printf("QUEEN");
        break;
    case 13:
        printf("KING");
        break;
    case 14:
        printf("ACE");
        break;
    default:
        printf("%d", Card);
    }
}

================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/c++/source/Aceyducey.h
================================================
#pragma once

void WelcomeMessage();
void DrawCard(short int& Card);
void Play(bool& isPlaying);
bool isGameOver();
int Money;

================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/d/.gitignore
================================================
*.exe
*.obj


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/d/README.md
================================================
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html)

Converted to [D](https://dlang.org/) by [Bastiaan Veelo](https://github.com/veelo).

Two versions are supplied that are functionally equivalent, but differ in source layout:

<dl>
  <dt><tt>aceyducey_literal.d</tt></dt>
  <dd>A largely literal transcription of the original Basic source. All unnecessary uglyness is preserved.</dd>
  <dt><tt>aceyducey.d</tt></dt>
  <dd>An idiomatic D refactoring of the original, with a focus on increasing the readability and robustness.
      Memory-safety <A href="https://dlang.org/spec/memory-safe-d.html">is ensured by the language</a>, thanks to the
      <tt>@safe</tt> annotation.</dd>
</dl>

## Running the code

Assuming the reference [dmd](https://dlang.org/download.html#dmd) compiler:
```shell
dmd -run aceyducey.d
```

[Other compilers](https://dlang.org/download.html) also exist.

Note that there are compiler switches related to memory-safety (`-preview=dip25` and `-preview=dip1000`) that are not
used here because they are unnecessary in this case. What these do is to make the analysis more thorough, so that with
them some code that needed to be `@system` can then be inferred to be in fact `@safe`. [Code that compiles without
these switches is just as safe as when compiled with them]
(https://forum.dlang.org/post/dftgjalswvwfjpyushgn@forum.dlang.org).


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/d/aceyducey.d
================================================
@safe: // Make @safe the default for this file, enforcing memory-safety.

void main()
{
    import std.stdio : write, writeln;
    import std.string : center, toUpper, wrap;
    import std.exception : ifThrown;

    enum width = 80;
    writeln(center("Acey Ducey Card Game", width));
    writeln(center("(After Creative Computing  Morristown, New Jersey)\n", width));
    writeln(wrap("Acey-Ducey is played in the following manner: The dealer (computer) deals two cards face up. " ~
                 "You have an option to bet or not bet depending on whether or not you feel the third card will " ~
                 "have a value between the first two. If you do not want to bet, input a 0.", width));

    enum Hand {low, middle, high}
    Card[Hand.max + 1] cards; // Three cards.
    bool play = true;

    while (play)
    {
        int cash = 100;
        while (cash > 0)
        {
            writeln("\nYou now have ", cash, " dollars.");
            int bet = 0;
            while (bet <= 0)
            {
                do // Draw new cards, until the first card has a smaller value than the last card.
                {
                    foreach (ref card; cards)
                        card.drawNew;
                } while (cards[Hand.low] >= cards[Hand.high]);
                writeln("Here are your next two cards:\n", cards[Hand.low], "\n", cards[Hand.high]);

                int askBet() // A nested function.
                {
                    import std.conv : to;

                    write("\nWhat is your bet? ");
                    int answer = readString.to!int.
                            ifThrown!Exception(askBet); // Try again when answer does not convert to int.
                    if (answer <= cash)
                        return answer;
                    writeln("Sorry, my friend, but you bet too much.\nYou have only ", cash, " dollars to bet.");
                    return askBet; // Recurse: Ask again.
                }
                bet = askBet;
                if (bet <= 0) // Negative bets are interpreted as 0.
                    writeln("CHICKEN!!");
            } // bet is now > 0.

            writeln(cards[Hand.middle]);
            if (cards[Hand.low] < cards[Hand.middle] && cards[Hand.middle] < cards[Hand.high])
            {
                writeln("YOU WIN!!!");
                cash += bet;
            }
            else
            {
                writeln("Sorry, you lose.");
                cash -= bet;
                if (cash <= 0)
                {
                    writeln("\n\nSorry, friend, but you blew your wad.");
                    write("\n\nTry again (Yes or No)? ");
                    play = readString.toUpper == "YES";
                }
            }
        }
    }
    writeln("O.K., hope you had fun!");
}

struct Card
{
    int value = 2;
    alias value this; // Enables Card to stand in as an int, so that cards can be compared as ints.

    invariant
    {
        assert(2 <= value && value <= 14); // Ensure cards always have a valid value.
    }

    /// Adopt a new value.
    void drawNew()
    {
        import std.random : uniform;

        value = uniform!("[]", int, int)(2, 14); // A random int between inclusive bounds.
    }

    /// Called for implicit conversion to string.
    string toString() const pure
    {
        import std.conv : text;

        switch (value)
        {
            case 11: return "Jack";
            case 12: return "Queen";
            case 13: return "King";
            case 14: return "Ace";
            default: return text(" ", value); // Basic prepends a space.
        }
    }
}

/// Read a string from standard input, stripping newline and other enclosing whitespace.
string readString() nothrow
{
    import std.string : strip;

    try
        return trustedReadln.strip;
    catch (Exception)   // readln throws on I/O and Unicode errors, which we handle here.
        return "";
}

/** An @trusted wrapper around readln.
 *
 * This is the only function that formally requires manual review for memory-safety.
 * [Arguably readln should be safe already](https://forum.dlang.org/post/rab398$1up$1@digitalmars.com)
 * which would remove the need to have any @trusted code in this program.
 */
string trustedReadln() @trusted
{
    import std.stdio : readln;

    return readln;
}


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/d/aceyducey_literal.d
================================================
void main()
{
    import std;

    L10: writef("%26s", ' '); writeln("ACEY DUCEY CARD GAME");
    L20: writef("%15s", ' '); writeln("CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY");
    L21: writeln;
    L22: writeln;
    L30: writeln("ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER ");
    L40: writeln("THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP");
    L50: writeln("YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING");
    L60: writeln("ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE");
    L70: writeln("A VALUE BETWEEN THE FIRST TWO.");
    L80: writeln("IF YOU DO NOT WANT TO BET, INPUT A 0");
    L100: int N=100;
    L110: int Q=100, M;
    L120: writeln("YOU NOW HAVE ",Q," DOLLARS.");
    L130: writeln;
    L140: goto L260;
    L210: Q=Q+M;
    L220: goto L120;
    L240: Q=Q-M;
    L250: goto L120;
    L260: writeln("HERE ARE YOUR NEXT TWO CARDS: ");
    L270: auto A=to!int(14*uniform01)+2;
    L280: if (A<2) goto L270;
    L290: if (A>14) goto L270;
    L300: auto B=to!int(14*uniform01)+2;
    L310: if (B<2) goto L300;
    L320: if (B>14) goto L300;
    L330: if (A>=B) goto L270;
    L350: if (A<11) goto L400;
    L360: if (A==11) goto L420;
    L370: if (A==12) goto L440;
    L380: if (A==13) goto L460;
    L390: if (A==14) goto L480;
    L400: writefln("%2d", A);
    L410: goto L500;
    L420: writeln("JACK");
    L430: goto L500;
    L440: writeln("QUEEN");
    L450: goto L500;
    L460: writeln("KING");
    L470: goto L500;
    L480: writeln("ACE");
    L500: if (B<11) goto L550;
    L510: if (B==11) goto L570;
    L520: if (B==12) goto L590;
    L530: if (B==13) goto L610;
    L540: if (B==14) goto L630;
    L550: writefln("%2d", B);
    L560: goto L650;
    L570: writeln("JACK");
    L580: goto L650;
    L590: writeln("QUEEN");
    L600: goto L650;
    L610: writeln("KING");
    L620: goto L650;
    L630: writeln("ACE");
    L640: writeln;
    L650: writeln;
    L660: write("WHAT IS YOUR BET? "); M = stdin.readln.strip.to!int;
    L670: if (M!=0) goto L680;
    L675: writeln("CHICKEN!!");
    L676: writeln;
    L677: goto L260;
    L680: if (M<=Q) goto L730;
    L690: writeln("SORRY, MY FRIEND, BUT YOU BET TOO MUCH.");
    L700: writeln("YOU HAVE ONLY ",Q," DOLLARS TO BET.");
    L710: goto L650;
    L730: auto C=to!int(14*uniform01)+2;
    L740: if (C<2) goto L730;
    L750: if (C>14) goto L730;
    L760: if (C<11) goto L810;
    L770: if (C==11) goto L830;
    L780: if (C==12) goto L850;
    L790: if (C==13) goto L870;
    L800: if (C==14) goto L890;
    L810: writeln(C);
    L820: goto L910;
    L830: writeln("JACK");
    L840: goto L910;
    L850: writeln("QUEEN");
    L860: goto L910;
    L870: writeln("KING");
    L880: goto L910;
    L890: writeln( "ACE");
    L900: writeln;
    L910: if (C>A) goto L930;
    L920: goto L970;
    L930: if (C>=B) goto L970;
    L950: writeln("YOU WIN!!!");
    L960: goto L210;
    L970: writeln("SORRY, YOU LOSE");
    L980: if (M<Q) goto L240;
    L990: writeln;
    L1000: writeln;
    L1010: writeln("SORRY, FRIEND, BUT YOU BLEW YOUR WAD.");
    L1015: writeln;writeln;
    L1020: write("TRY AGAIN (YES OR NO)? "); auto AS=stdin.readln;
    L1025: writeln;writeln;
    L1030: if (AS.strip.toUpper=="YES") goto L110;
    L1040: writeln("O.K., HOPE YOU HAD FUN!");
}


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/.gitignore
================================================

# Created by https://www.toptal.com/developers/gitignore/api/macos,visualstudiocode,elm
# Edit at https://www.toptal.com/developers/gitignore?templates=macos,visualstudiocode,elm

### Elm ###
# elm-package generated files
elm-stuff
# elm-repl generated files
repl-temp-*

### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon


# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets

# Local History for Visual Studio Code
.history/

# Built Visual Studio Code Extensions
*.vsix

### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide

# Support for Project snippet scope

# End of https://www.toptal.com/developers/gitignore/api/macos,visualstudiocode,elm

# Created by https://www.toptal.com/developers/gitignore/api/node
# Edit at https://www.toptal.com/developers/gitignore?templates=node

### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp

# Docusaurus cache and generated files
.docusaurus

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

### Node Patch ###
# Serverless Webpack directories
.webpack/

# Optional stylelint cache

# SvelteKit build / generate output
.svelte-kit

# End of https://www.toptal.com/developers/gitignore/api/node


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/README.md
================================================
# Acey Ducey

This is an Elm implementation of the `Basic Compouter Games` Game Acey Ducey.

## Build App

- install elm

```bash
yarn
yarn build
```


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/docs/app.js
================================================
(function(scope){
'use strict';

function F(arity, fun, wrapper) {
  wrapper.a = arity;
  wrapper.f = fun;
  return wrapper;
}

function F2(fun) {
  return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
}
function F3(fun) {
  return F(3, fun, function(a) {
    return function(b) { return function(c) { return fun(a, b, c); }; };
  });
}
function F4(fun) {
  return F(4, fun, function(a) { return function(b) { return function(c) {
    return function(d) { return fun(a, b, c, d); }; }; };
  });
}
function F5(fun) {
  return F(5, fun, function(a) { return function(b) { return function(c) {
    return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
  });
}
function F6(fun) {
  return F(6, fun, function(a) { return function(b) { return function(c) {
    return function(d) { return function(e) { return function(f) {
    return fun(a, b, c, d, e, f); }; }; }; }; };
  });
}
function F7(fun) {
  return F(7, fun, function(a) { return function(b) { return function(c) {
    return function(d) { return function(e) { return function(f) {
    return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
  });
}
function F8(fun) {
  return F(8, fun, function(a) { return function(b) { return function(c) {
    return function(d) { return function(e) { return function(f) {
    return function(g) { return function(h) {
    return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
  });
}
function F9(fun) {
  return F(9, fun, function(a) { return function(b) { return function(c) {
    return function(d) { return function(e) { return function(f) {
    return function(g) { return function(h) { return function(i) {
    return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
  });
}

function A2(fun, a, b) {
  return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
}
function A3(fun, a, b, c) {
  return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
}
function A4(fun, a, b, c, d) {
  return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
}
function A5(fun, a, b, c, d, e) {
  return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
}
function A6(fun, a, b, c, d, e, f) {
  return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
}
function A7(fun, a, b, c, d, e, f, g) {
  return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
}
function A8(fun, a, b, c, d, e, f, g, h) {
  return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
}
function A9(fun, a, b, c, d, e, f, g, h, i) {
  return fun.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
}




// EQUALITY

function _Utils_eq(x, y)
{
	for (
		var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack);
		isEqual && (pair = stack.pop());
		isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack)
		)
	{}

	return isEqual;
}

function _Utils_eqHelp(x, y, depth, stack)
{
	if (x === y)
	{
		return true;
	}

	if (typeof x !== 'object' || x === null || y === null)
	{
		typeof x === 'function' && _Debug_crash(5);
		return false;
	}

	if (depth > 100)
	{
		stack.push(_Utils_Tuple2(x,y));
		return true;
	}

	/**_UNUSED/
	if (x.$ === 'Set_elm_builtin')
	{
		x = $elm$core$Set$toList(x);
		y = $elm$core$Set$toList(y);
	}
	if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin')
	{
		x = $elm$core$Dict$toList(x);
		y = $elm$core$Dict$toList(y);
	}
	//*/

	/**/
	if (x.$ < 0)
	{
		x = $elm$core$Dict$toList(x);
		y = $elm$core$Dict$toList(y);
	}
	//*/

	for (var key in x)
	{
		if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack))
		{
			return false;
		}
	}
	return true;
}

var _Utils_equal = F2(_Utils_eq);
var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });



// COMPARISONS

// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
// the particular integer values assigned to LT, EQ, and GT.

function _Utils_cmp(x, y, ord)
{
	if (typeof x !== 'object')
	{
		return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1;
	}

	/**_UNUSED/
	if (x instanceof String)
	{
		var a = x.valueOf();
		var b = y.valueOf();
		return a === b ? 0 : a < b ? -1 : 1;
	}
	//*/

	/**/
	if (typeof x.$ === 'undefined')
	//*/
	/**_UNUSED/
	if (x.$[0] === '#')
	//*/
	{
		return (ord = _Utils_cmp(x.a, y.a))
			? ord
			: (ord = _Utils_cmp(x.b, y.b))
				? ord
				: _Utils_cmp(x.c, y.c);
	}

	// traverse conses until end of a list or a mismatch
	for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES
	return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);
}

var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });
var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });
var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });
var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });

var _Utils_compare = F2(function(x, y)
{
	var n = _Utils_cmp(x, y);
	return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ;
});


// COMMON VALUES

var _Utils_Tuple0 = 0;
var _Utils_Tuple0_UNUSED = { $: '#0' };

function _Utils_Tuple2(a, b) { return { a: a, b: b }; }
function _Utils_Tuple2_UNUSED(a, b) { return { $: '#2', a: a, b: b }; }

function _Utils_Tuple3(a, b, c) { return { a: a, b: b, c: c }; }
function _Utils_Tuple3_UNUSED(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }

function _Utils_chr(c) { return c; }
function _Utils_chr_UNUSED(c) { return new String(c); }


// RECORDS

function _Utils_update(oldRecord, updatedFields)
{
	var newRecord = {};

	for (var key in oldRecord)
	{
		newRecord[key] = oldRecord[key];
	}

	for (var key in updatedFields)
	{
		newRecord[key] = updatedFields[key];
	}

	return newRecord;
}


// APPEND

var _Utils_append = F2(_Utils_ap);

function _Utils_ap(xs, ys)
{
	// append Strings
	if (typeof xs === 'string')
	{
		return xs + ys;
	}

	// append Lists
	if (!xs.b)
	{
		return ys;
	}
	var root = _List_Cons(xs.a, ys);
	xs = xs.b
	for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS
	{
		curr = curr.b = _List_Cons(xs.a, ys);
	}
	return root;
}



var _List_Nil = { $: 0 };
var _List_Nil_UNUSED = { $: '[]' };

function _List_Cons(hd, tl) { return { $: 1, a: hd, b: tl }; }
function _List_Cons_UNUSED(hd, tl) { return { $: '::', a: hd, b: tl }; }


var _List_cons = F2(_List_Cons);

function _List_fromArray(arr)
{
	var out = _List_Nil;
	for (var i = arr.length; i--; )
	{
		out = _List_Cons(arr[i], out);
	}
	return out;
}

function _List_toArray(xs)
{
	for (var out = []; xs.b; xs = xs.b) // WHILE_CONS
	{
		out.push(xs.a);
	}
	return out;
}

var _List_map2 = F3(function(f, xs, ys)
{
	for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES
	{
		arr.push(A2(f, xs.a, ys.a));
	}
	return _List_fromArray(arr);
});

var _List_map3 = F4(function(f, xs, ys, zs)
{
	for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
	{
		arr.push(A3(f, xs.a, ys.a, zs.a));
	}
	return _List_fromArray(arr);
});

var _List_map4 = F5(function(f, ws, xs, ys, zs)
{
	for (var arr = []; ws.b && xs.b && ys.b && zs.b; ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
	{
		arr.push(A4(f, ws.a, xs.a, ys.a, zs.a));
	}
	return _List_fromArray(arr);
});

var _List_map5 = F6(function(f, vs, ws, xs, ys, zs)
{
	for (var arr = []; vs.b && ws.b && xs.b && ys.b && zs.b; vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
	{
		arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a));
	}
	return _List_fromArray(arr);
});

var _List_sortBy = F2(function(f, xs)
{
	return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
		return _Utils_cmp(f(a), f(b));
	}));
});

var _List_sortWith = F2(function(f, xs)
{
	return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
		var ord = A2(f, a, b);
		return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? -1 : 1;
	}));
});



var _JsArray_empty = [];

function _JsArray_singleton(value)
{
    return [value];
}

function _JsArray_length(array)
{
    return array.length;
}

var _JsArray_initialize = F3(function(size, offset, func)
{
    var result = new Array(size);

    for (var i = 0; i < size; i++)
    {
        result[i] = func(offset + i);
    }

    return result;
});

var _JsArray_initializeFromList = F2(function (max, ls)
{
    var result = new Array(max);

    for (var i = 0; i < max && ls.b; i++)
    {
        result[i] = ls.a;
        ls = ls.b;
    }

    result.length = i;
    return _Utils_Tuple2(result, ls);
});

var _JsArray_unsafeGet = F2(function(index, array)
{
    return array[index];
});

var _JsArray_unsafeSet = F3(function(index, value, array)
{
    var length = array.length;
    var result = new Array(length);

    for (var i = 0; i < length; i++)
    {
        result[i] = array[i];
    }

    result[index] = value;
    return result;
});

var _JsArray_push = F2(function(value, array)
{
    var length = array.length;
    var result = new Array(length + 1);

    for (var i = 0; i < length; i++)
    {
        result[i] = array[i];
    }

    result[length] = value;
    return result;
});

var _JsArray_foldl = F3(function(func, acc, array)
{
    var length = array.length;

    for (var i = 0; i < length; i++)
    {
        acc = A2(func, array[i], acc);
    }

    return acc;
});

var _JsArray_foldr = F3(function(func, acc, array)
{
    for (var i = array.length - 1; i >= 0; i--)
    {
        acc = A2(func, array[i], acc);
    }

    return acc;
});

var _JsArray_map = F2(function(func, array)
{
    var length = array.length;
    var result = new Array(length);

    for (var i = 0; i < length; i++)
    {
        result[i] = func(array[i]);
    }

    return result;
});

var _JsArray_indexedMap = F3(function(func, offset, array)
{
    var length = array.length;
    var result = new Array(length);

    for (var i = 0; i < length; i++)
    {
        result[i] = A2(func, offset + i, array[i]);
    }

    return result;
});

var _JsArray_slice = F3(function(from, to, array)
{
    return array.slice(from, to);
});

var _JsArray_appendN = F3(function(n, dest, source)
{
    var destLen = dest.length;
    var itemsToCopy = n - destLen;

    if (itemsToCopy > source.length)
    {
        itemsToCopy = source.length;
    }

    var size = destLen + itemsToCopy;
    var result = new Array(size);

    for (var i = 0; i < destLen; i++)
    {
        result[i] = dest[i];
    }

    for (var i = 0; i < itemsToCopy; i++)
    {
        result[i + destLen] = source[i];
    }

    return result;
});



// LOG

var _Debug_log = F2(function(tag, value)
{
	return value;
});

var _Debug_log_UNUSED = F2(function(tag, value)
{
	console.log(tag + ': ' + _Debug_toString(value));
	return value;
});


// TODOS

function _Debug_todo(moduleName, region)
{
	return function(message) {
		_Debug_crash(8, moduleName, region, message);
	};
}

function _Debug_todoCase(moduleName, region, value)
{
	return function(message) {
		_Debug_crash(9, moduleName, region, value, message);
	};
}


// TO STRING

function _Debug_toString(value)
{
	return '<internals>';
}

function _Debug_toString_UNUSED(value)
{
	return _Debug_toAnsiString(false, value);
}

function _Debug_toAnsiString(ansi, value)
{
	if (typeof value === 'function')
	{
		return _Debug_internalColor(ansi, '<function>');
	}

	if (typeof value === 'boolean')
	{
		return _Debug_ctorColor(ansi, value ? 'True' : 'False');
	}

	if (typeof value === 'number')
	{
		return _Debug_numberColor(ansi, value + '');
	}

	if (value instanceof String)
	{
		return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'");
	}

	if (typeof value === 'string')
	{
		return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"');
	}

	if (typeof value === 'object' && '$' in value)
	{
		var tag = value.$;

		if (typeof tag === 'number')
		{
			return _Debug_internalColor(ansi, '<internals>');
		}

		if (tag[0] === '#')
		{
			var output = [];
			for (var k in value)
			{
				if (k === '$') continue;
				output.push(_Debug_toAnsiString(ansi, value[k]));
			}
			return '(' + output.join(',') + ')';
		}

		if (tag === 'Set_elm_builtin')
		{
			return _Debug_ctorColor(ansi, 'Set')
				+ _Debug_fadeColor(ansi, '.fromList') + ' '
				+ _Debug_toAnsiString(ansi, $elm$core$Set$toList(value));
		}

		if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin')
		{
			return _Debug_ctorColor(ansi, 'Dict')
				+ _Debug_fadeColor(ansi, '.fromList') + ' '
				+ _Debug_toAnsiString(ansi, $elm$core$Dict$toList(value));
		}

		if (tag === 'Array_elm_builtin')
		{
			return _Debug_ctorColor(ansi, 'Array')
				+ _Debug_fadeColor(ansi, '.fromList') + ' '
				+ _Debug_toAnsiString(ansi, $elm$core$Array$toList(value));
		}

		if (tag === '::' || tag === '[]')
		{
			var output = '[';

			value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)

			for (; value.b; value = value.b) // WHILE_CONS
			{
				output += ',' + _Debug_toAnsiString(ansi, value.a);
			}
			return output + ']';
		}

		var output = '';
		for (var i in value)
		{
			if (i === '$') continue;
			var str = _Debug_toAnsiString(ansi, value[i]);
			var c0 = str[0];
			var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
			output += ' ' + (parenless ? str : '(' + str + ')');
		}
		return _Debug_ctorColor(ansi, tag) + output;
	}

	if (typeof DataView === 'function' && value instanceof DataView)
	{
		return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>');
	}

	if (typeof File !== 'undefined' && value instanceof File)
	{
		return _Debug_internalColor(ansi, '<' + value.name + '>');
	}

	if (typeof value === 'object')
	{
		var output = [];
		for (var key in value)
		{
			var field = key[0] === '_' ? key.slice(1) : key;
			output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key]));
		}
		if (output.length === 0)
		{
			return '{}';
		}
		return '{ ' + output.join(', ') + ' }';
	}

	return _Debug_internalColor(ansi, '<internals>');
}

function _Debug_addSlashes(str, isChar)
{
	var s = str
		.replace(/\\/g, '\\\\')
		.replace(/\n/g, '\\n')
		.replace(/\t/g, '\\t')
		.replace(/\r/g, '\\r')
		.replace(/\v/g, '\\v')
		.replace(/\0/g, '\\0');

	if (isChar)
	{
		return s.replace(/\'/g, '\\\'');
	}
	else
	{
		return s.replace(/\"/g, '\\"');
	}
}

function _Debug_ctorColor(ansi, string)
{
	return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;
}

function _Debug_numberColor(ansi, string)
{
	return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;
}

function _Debug_stringColor(ansi, string)
{
	return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;
}

function _Debug_charColor(ansi, string)
{
	return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;
}

function _Debug_fadeColor(ansi, string)
{
	return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;
}

function _Debug_internalColor(ansi, string)
{
	return ansi ? '\x1b[36m' + string + '\x1b[0m' : string;
}

function _Debug_toHexDigit(n)
{
	return String.fromCharCode(n < 10 ? 48 + n : 55 + n);
}


// CRASH


function _Debug_crash(identifier)
{
	throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md');
}


function _Debug_crash_UNUSED(identifier, fact1, fact2, fact3, fact4)
{
	switch(identifier)
	{
		case 0:
			throw new Error('What node should I take over? In JavaScript I need something like:\n\n    Elm.Main.init({\n        node: document.getElementById("elm-node")\n    })\n\nYou need to do this with any Browser.sandbox or Browser.element program.');

		case 1:
			throw new Error('Browser.application programs cannot handle URLs like this:\n\n    ' + document.location.href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.');

		case 2:
			var jsonErrorString = fact1;
			throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString);

		case 3:
			var portName = fact1;
			throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');

		case 4:
			var portName = fact1;
			var problem = fact2;
			throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);

		case 5:
			throw new Error('Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.');

		case 6:
			var moduleName = fact1;
			throw new Error('Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!');

		case 8:
			var moduleName = fact1;
			var region = fact2;
			var message = fact3;
			throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);

		case 9:
			var moduleName = fact1;
			var region = fact2;
			var value = fact3;
			var message = fact4;
			throw new Error(
				'TODO in module `' + moduleName + '` from the `case` expression '
				+ _Debug_regionToString(region) + '\n\nIt received the following value:\n\n    '
				+ _Debug_toString(value).replace('\n', '\n    ')
				+ '\n\nBut the branch that handles it says:\n\n    ' + message.replace('\n', '\n    ')
			);

		case 10:
			throw new Error('Bug in https://github.com/elm/virtual-dom/issues');

		case 11:
			throw new Error('Cannot perform mod 0. Division by zero error.');
	}
}

function _Debug_regionToString(region)
{
	if (region.Q.H === region.V.H)
	{
		return 'on line ' + region.Q.H;
	}
	return 'on lines ' + region.Q.H + ' through ' + region.V.H;
}



// MATH

var _Basics_add = F2(function(a, b) { return a + b; });
var _Basics_sub = F2(function(a, b) { return a - b; });
var _Basics_mul = F2(function(a, b) { return a * b; });
var _Basics_fdiv = F2(function(a, b) { return a / b; });
var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });
var _Basics_pow = F2(Math.pow);

var _Basics_remainderBy = F2(function(b, a) { return a % b; });

// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
var _Basics_modBy = F2(function(modulus, x)
{
	var answer = x % modulus;
	return modulus === 0
		? _Debug_crash(11)
		:
	((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0))
		? answer + modulus
		: answer;
});


// TRIGONOMETRY

var _Basics_pi = Math.PI;
var _Basics_e = Math.E;
var _Basics_cos = Math.cos;
var _Basics_sin = Math.sin;
var _Basics_tan = Math.tan;
var _Basics_acos = Math.acos;
var _Basics_asin = Math.asin;
var _Basics_atan = Math.atan;
var _Basics_atan2 = F2(Math.atan2);


// MORE MATH

function _Basics_toFloat(x) { return x; }
function _Basics_truncate(n) { return n | 0; }
function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }

var _Basics_ceiling = Math.ceil;
var _Basics_floor = Math.floor;
var _Basics_round = Math.round;
var _Basics_sqrt = Math.sqrt;
var _Basics_log = Math.log;
var _Basics_isNaN = isNaN;


// BOOLEANS

function _Basics_not(bool) { return !bool; }
var _Basics_and = F2(function(a, b) { return a && b; });
var _Basics_or  = F2(function(a, b) { return a || b; });
var _Basics_xor = F2(function(a, b) { return a !== b; });



var _String_cons = F2(function(chr, str)
{
	return chr + str;
});

function _String_uncons(string)
{
	var word = string.charCodeAt(0);
	return !isNaN(word)
		? $elm$core$Maybe$Just(
			0xD800 <= word && word <= 0xDBFF
				? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2))
				: _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1))
		)
		: $elm$core$Maybe$Nothing;
}

var _String_append = F2(function(a, b)
{
	return a + b;
});

function _String_length(str)
{
	return str.length;
}

var _String_map = F2(function(func, string)
{
	var len = string.length;
	var array = new Array(len);
	var i = 0;
	while (i < len)
	{
		var word = string.charCodeAt(i);
		if (0xD800 <= word && word <= 0xDBFF)
		{
			array[i] = func(_Utils_chr(string[i] + string[i+1]));
			i += 2;
			continue;
		}
		array[i] = func(_Utils_chr(string[i]));
		i++;
	}
	return array.join('');
});

var _String_filter = F2(function(isGood, str)
{
	var arr = [];
	var len = str.length;
	var i = 0;
	while (i < len)
	{
		var char = str[i];
		var word = str.charCodeAt(i);
		i++;
		if (0xD800 <= word && word <= 0xDBFF)
		{
			char += str[i];
			i++;
		}

		if (isGood(_Utils_chr(char)))
		{
			arr.push(char);
		}
	}
	return arr.join('');
});

function _String_reverse(str)
{
	var len = str.length;
	var arr = new Array(len);
	var i = 0;
	while (i < len)
	{
		var word = str.charCodeAt(i);
		if (0xD800 <= word && word <= 0xDBFF)
		{
			arr[len - i] = str[i + 1];
			i++;
			arr[len - i] = str[i - 1];
			i++;
		}
		else
		{
			arr[len - i] = str[i];
			i++;
		}
	}
	return arr.join('');
}

var _String_foldl = F3(function(func, state, string)
{
	var len = string.length;
	var i = 0;
	while (i < len)
	{
		var char = string[i];
		var word = string.charCodeAt(i);
		i++;
		if (0xD800 <= word && word <= 0xDBFF)
		{
			char += string[i];
			i++;
		}
		state = A2(func, _Utils_chr(char), state);
	}
	return state;
});

var _String_foldr = F3(function(func, state, string)
{
	var i = string.length;
	while (i--)
	{
		var char = string[i];
		var word = string.charCodeAt(i);
		if (0xDC00 <= word && word <= 0xDFFF)
		{
			i--;
			char = string[i] + char;
		}
		state = A2(func, _Utils_chr(char), state);
	}
	return state;
});

var _String_split = F2(function(sep, str)
{
	return str.split(sep);
});

var _String_join = F2(function(sep, strs)
{
	return strs.join(sep);
});

var _String_slice = F3(function(start, end, str) {
	return str.slice(start, end);
});

function _String_trim(str)
{
	return str.trim();
}

function _String_trimLeft(str)
{
	return str.replace(/^\s+/, '');
}

function _String_trimRight(str)
{
	return str.replace(/\s+$/, '');
}

function _String_words(str)
{
	return _List_fromArray(str.trim().split(/\s+/g));
}

function _String_lines(str)
{
	return _List_fromArray(str.split(/\r\n|\r|\n/g));
}

function _String_toUpper(str)
{
	return str.toUpperCase();
}

function _String_toLower(str)
{
	return str.toLowerCase();
}

var _String_any = F2(function(isGood, string)
{
	var i = string.length;
	while (i--)
	{
		var char = string[i];
		var word = string.charCodeAt(i);
		if (0xDC00 <= word && word <= 0xDFFF)
		{
			i--;
			char = string[i] + char;
		}
		if (isGood(_Utils_chr(char)))
		{
			return true;
		}
	}
	return false;
});

var _String_all = F2(function(isGood, string)
{
	var i = string.length;
	while (i--)
	{
		var char = string[i];
		var word = string.charCodeAt(i);
		if (0xDC00 <= word && word <= 0xDFFF)
		{
			i--;
			char = string[i] + char;
		}
		if (!isGood(_Utils_chr(char)))
		{
			return false;
		}
	}
	return true;
});

var _String_contains = F2(function(sub, str)
{
	return str.indexOf(sub) > -1;
});

var _String_startsWith = F2(function(sub, str)
{
	return str.indexOf(sub) === 0;
});

var _String_endsWith = F2(function(sub, str)
{
	return str.length >= sub.length &&
		str.lastIndexOf(sub) === str.length - sub.length;
});

var _String_indexes = F2(function(sub, str)
{
	var subLen = sub.length;

	if (subLen < 1)
	{
		return _List_Nil;
	}

	var i = 0;
	var is = [];

	while ((i = str.indexOf(sub, i)) > -1)
	{
		is.push(i);
		i = i + subLen;
	}

	return _List_fromArray(is);
});


// TO STRING

function _String_fromNumber(number)
{
	return number + '';
}


// INT CONVERSIONS

function _String_toInt(str)
{
	var total = 0;
	var code0 = str.charCodeAt(0);
	var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0;

	for (var i = start; i < str.length; ++i)
	{
		var code = str.charCodeAt(i);
		if (code < 0x30 || 0x39 < code)
		{
			return $elm$core$Maybe$Nothing;
		}
		total = 10 * total + code - 0x30;
	}

	return i == start
		? $elm$core$Maybe$Nothing
		: $elm$core$Maybe$Just(code0 == 0x2D ? -total : total);
}


// FLOAT CONVERSIONS

function _String_toFloat(s)
{
	// check if it is a hex, octal, or binary number
	if (s.length === 0 || /[\sxbo]/.test(s))
	{
		return $elm$core$Maybe$Nothing;
	}
	var n = +s;
	// faster isNaN check
	return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing;
}

function _String_fromList(chars)
{
	return _List_toArray(chars).join('');
}




function _Char_toCode(char)
{
	var code = char.charCodeAt(0);
	if (0xD800 <= code && code <= 0xDBFF)
	{
		return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000
	}
	return code;
}

function _Char_fromCode(code)
{
	return _Utils_chr(
		(code < 0 || 0x10FFFF < code)
			? '\uFFFD'
			:
		(code <= 0xFFFF)
			? String.fromCharCode(code)
			:
		(code -= 0x10000,
			String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00)
		)
	);
}

function _Char_toUpper(char)
{
	return _Utils_chr(char.toUpperCase());
}

function _Char_toLower(char)
{
	return _Utils_chr(char.toLowerCase());
}

function _Char_toLocaleUpper(char)
{
	return _Utils_chr(char.toLocaleUpperCase());
}

function _Char_toLocaleLower(char)
{
	return _Utils_chr(char.toLocaleLowerCase());
}



/**_UNUSED/
function _Json_errorToString(error)
{
	return $elm$json$Json$Decode$errorToString(error);
}
//*/


// CORE DECODERS

function _Json_succeed(msg)
{
	return {
		$: 0,
		a: msg
	};
}

function _Json_fail(msg)
{
	return {
		$: 1,
		a: msg
	};
}

function _Json_decodePrim(decoder)
{
	return { $: 2, b: decoder };
}

var _Json_decodeInt = _Json_decodePrim(function(value) {
	return (typeof value !== 'number')
		? _Json_expecting('an INT', value)
		:
	(-2147483647 < value && value < 2147483647 && (value | 0) === value)
		? $elm$core$Result$Ok(value)
		:
	(isFinite(value) && !(value % 1))
		? $elm$core$Result$Ok(value)
		: _Json_expecting('an INT', value);
});

var _Json_decodeBool = _Json_decodePrim(function(value) {
	return (typeof value === 'boolean')
		? $elm$core$Result$Ok(value)
		: _Json_expecting('a BOOL', value);
});

var _Json_decodeFloat = _Json_decodePrim(function(value) {
	return (typeof value === 'number')
		? $elm$core$Result$Ok(value)
		: _Json_expecting('a FLOAT', value);
});

var _Json_decodeValue = _Json_decodePrim(function(value) {
	return $elm$core$Result$Ok(_Json_wrap(value));
});

var _Json_decodeString = _Json_decodePrim(function(value) {
	return (typeof value === 'string')
		? $elm$core$Result$Ok(value)
		: (value instanceof String)
			? $elm$core$Result$Ok(value + '')
			: _Json_expecting('a STRING', value);
});

function _Json_decodeList(decoder) { return { $: 3, b: decoder }; }
function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; }

function _Json_decodeNull(value) { return { $: 5, c: value }; }

var _Json_decodeField = F2(function(field, decoder)
{
	return {
		$: 6,
		d: field,
		b: decoder
	};
});

var _Json_decodeIndex = F2(function(index, decoder)
{
	return {
		$: 7,
		e: index,
		b: decoder
	};
});

function _Json_decodeKeyValuePairs(decoder)
{
	return {
		$: 8,
		b: decoder
	};
}

function _Json_mapMany(f, decoders)
{
	return {
		$: 9,
		f: f,
		g: decoders
	};
}

var _Json_andThen = F2(function(callback, decoder)
{
	return {
		$: 10,
		b: decoder,
		h: callback
	};
});

function _Json_oneOf(decoders)
{
	return {
		$: 11,
		g: decoders
	};
}


// DECODING OBJECTS

var _Json_map1 = F2(function(f, d1)
{
	return _Json_mapMany(f, [d1]);
});

var _Json_map2 = F3(function(f, d1, d2)
{
	return _Json_mapMany(f, [d1, d2]);
});

var _Json_map3 = F4(function(f, d1, d2, d3)
{
	return _Json_mapMany(f, [d1, d2, d3]);
});

var _Json_map4 = F5(function(f, d1, d2, d3, d4)
{
	return _Json_mapMany(f, [d1, d2, d3, d4]);
});

var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5)
{
	return _Json_mapMany(f, [d1, d2, d3, d4, d5]);
});

var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6)
{
	return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);
});

var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7)
{
	return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
});

var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8)
{
	return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
});


// DECODE

var _Json_runOnString = F2(function(decoder, string)
{
	try
	{
		var value = JSON.parse(string);
		return _Json_runHelp(decoder, value);
	}
	catch (e)
	{
		return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string)));
	}
});

var _Json_run = F2(function(decoder, value)
{
	return _Json_runHelp(decoder, _Json_unwrap(value));
});

function _Json_runHelp(decoder, value)
{
	switch (decoder.$)
	{
		case 2:
			return decoder.b(value);

		case 5:
			return (value === null)
				? $elm$core$Result$Ok(decoder.c)
				: _Json_expecting('null', value);

		case 3:
			if (!_Json_isArray(value))
			{
				return _Json_expecting('a LIST', value);
			}
			return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);

		case 4:
			if (!_Json_isArray(value))
			{
				return _Json_expecting('an ARRAY', value);
			}
			return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);

		case 6:
			var field = decoder.d;
			if (typeof value !== 'object' || value === null || !(field in value))
			{
				return _Json_expecting('an OBJECT with a field named `' + field + '`', value);
			}
			var result = _Json_runHelp(decoder.b, value[field]);
			return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, field, result.a));

		case 7:
			var index = decoder.e;
			if (!_Json_isArray(value))
			{
				return _Json_expecting('an ARRAY', value);
			}
			if (index >= value.length)
			{
				return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value);
			}
			var result = _Json_runHelp(decoder.b, value[index]);
			return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, index, result.a));

		case 8:
			if (typeof value !== 'object' || value === null || _Json_isArray(value))
			{
				return _Json_expecting('an OBJECT', value);
			}

			var keyValuePairs = _List_Nil;
			// TODO test perf of Object.keys and switch when support is good enough
			for (var key in value)
			{
				if (value.hasOwnProperty(key))
				{
					var result = _Json_runHelp(decoder.b, value[key]);
					if (!$elm$core$Result$isOk(result))
					{
						return $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, key, result.a));
					}
					keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs);
				}
			}
			return $elm$core$Result$Ok($elm$core$List$reverse(keyValuePairs));

		case 9:
			var answer = decoder.f;
			var decoders = decoder.g;
			for (var i = 0; i < decoders.length; i++)
			{
				var result = _Json_runHelp(decoders[i], value);
				if (!$elm$core$Result$isOk(result))
				{
					return result;
				}
				answer = answer(result.a);
			}
			return $elm$core$Result$Ok(answer);

		case 10:
			var result = _Json_runHelp(decoder.b, value);
			return (!$elm$core$Result$isOk(result))
				? result
				: _Json_runHelp(decoder.h(result.a), value);

		case 11:
			var errors = _List_Nil;
			for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS
			{
				var result = _Json_runHelp(temp.a, value);
				if ($elm$core$Result$isOk(result))
				{
					return result;
				}
				errors = _List_Cons(result.a, errors);
			}
			return $elm$core$Result$Err($elm$json$Json$Decode$OneOf($elm$core$List$reverse(errors)));

		case 1:
			return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));

		case 0:
			return $elm$core$Result$Ok(decoder.a);
	}
}

function _Json_runArrayDecoder(decoder, value, toElmValue)
{
	var len = value.length;
	var array = new Array(len);
	for (var i = 0; i < len; i++)
	{
		var result = _Json_runHelp(decoder, value[i]);
		if (!$elm$core$Result$isOk(result))
		{
			return $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, i, result.a));
		}
		array[i] = result.a;
	}
	return $elm$core$Result$Ok(toElmValue(array));
}

function _Json_isArray(value)
{
	return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList);
}

function _Json_toElmArray(array)
{
	return A2($elm$core$Array$initialize, array.length, function(i) { return array[i]; });
}

function _Json_expecting(type, value)
{
	return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));
}


// EQUALITY

function _Json_equality(x, y)
{
	if (x === y)
	{
		return true;
	}

	if (x.$ !== y.$)
	{
		return false;
	}

	switch (x.$)
	{
		case 0:
		case 1:
			return x.a === y.a;

		case 2:
			return x.b === y.b;

		case 5:
			return x.c === y.c;

		case 3:
		case 4:
		case 8:
			return _Json_equality(x.b, y.b);

		case 6:
			return x.d === y.d && _Json_equality(x.b, y.b);

		case 7:
			return x.e === y.e && _Json_equality(x.b, y.b);

		case 9:
			return x.f === y.f && _Json_listEquality(x.g, y.g);

		case 10:
			return x.h === y.h && _Json_equality(x.b, y.b);

		case 11:
			return _Json_listEquality(x.g, y.g);
	}
}

function _Json_listEquality(aDecoders, bDecoders)
{
	var len = aDecoders.length;
	if (len !== bDecoders.length)
	{
		return false;
	}
	for (var i = 0; i < len; i++)
	{
		if (!_Json_equality(aDecoders[i], bDecoders[i]))
		{
			return false;
		}
	}
	return true;
}


// ENCODE

var _Json_encode = F2(function(indentLevel, value)
{
	return JSON.stringify(_Json_unwrap(value), null, indentLevel) + '';
});

function _Json_wrap_UNUSED(value) { return { $: 0, a: value }; }
function _Json_unwrap_UNUSED(value) { return value.a; }

function _Json_wrap(value) { return value; }
function _Json_unwrap(value) { return value; }

function _Json_emptyArray() { return []; }
function _Json_emptyObject() { return {}; }

var _Json_addField = F3(function(key, value, object)
{
	object[key] = _Json_unwrap(value);
	return object;
});

function _Json_addEntry(func)
{
	return F2(function(entry, array)
	{
		array.push(_Json_unwrap(func(entry)));
		return array;
	});
}

var _Json_encodeNull = _Json_wrap(null);



// TASKS

function _Scheduler_succeed(value)
{
	return {
		$: 0,
		a: value
	};
}

function _Scheduler_fail(error)
{
	return {
		$: 1,
		a: error
	};
}

function _Scheduler_binding(callback)
{
	return {
		$: 2,
		b: callback,
		c: null
	};
}

var _Scheduler_andThen = F2(function(callback, task)
{
	return {
		$: 3,
		b: callback,
		d: task
	};
});

var _Scheduler_onError = F2(function(callback, task)
{
	return {
		$: 4,
		b: callback,
		d: task
	};
});

function _Scheduler_receive(callback)
{
	return {
		$: 5,
		b: callback
	};
}


// PROCESSES

var _Scheduler_guid = 0;

function _Scheduler_rawSpawn(task)
{
	var proc = {
		$: 0,
		e: _Scheduler_guid++,
		f: task,
		g: null,
		h: []
	};

	_Scheduler_enqueue(proc);

	return proc;
}

function _Scheduler_spawn(task)
{
	return _Scheduler_binding(function(callback) {
		callback(_Scheduler_succeed(_Scheduler_rawSpawn(task)));
	});
}

function _Scheduler_rawSend(proc, msg)
{
	proc.h.push(msg);
	_Scheduler_enqueue(proc);
}

var _Scheduler_send = F2(function(proc, msg)
{
	return _Scheduler_binding(function(callback) {
		_Scheduler_rawSend(proc, msg);
		callback(_Scheduler_succeed(_Utils_Tuple0));
	});
});

function _Scheduler_kill(proc)
{
	return _Scheduler_binding(function(callback) {
		var task = proc.f;
		if (task.$ === 2 && task.c)
		{
			task.c();
		}

		proc.f = null;

		callback(_Scheduler_succeed(_Utils_Tuple0));
	});
}


/* STEP PROCESSES

type alias Process =
  { $ : tag
  , id : unique_id
  , root : Task
  , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack }
  , mailbox : [msg]
  }

*/


var _Scheduler_working = false;
var _Scheduler_queue = [];


function _Scheduler_enqueue(proc)
{
	_Scheduler_queue.push(proc);
	if (_Scheduler_working)
	{
		return;
	}
	_Scheduler_working = true;
	while (proc = _Scheduler_queue.shift())
	{
		_Scheduler_step(proc);
	}
	_Scheduler_working = false;
}


function _Scheduler_step(proc)
{
	while (proc.f)
	{
		var rootTag = proc.f.$;
		if (rootTag === 0 || rootTag === 1)
		{
			while (proc.g && proc.g.$ !== rootTag)
			{
				proc.g = proc.g.i;
			}
			if (!proc.g)
			{
				return;
			}
			proc.f = proc.g.b(proc.f.a);
			proc.g = proc.g.i;
		}
		else if (rootTag === 2)
		{
			proc.f.c = proc.f.b(function(newRoot) {
				proc.f = newRoot;
				_Scheduler_enqueue(proc);
			});
			return;
		}
		else if (rootTag === 5)
		{
			if (proc.h.length === 0)
			{
				return;
			}
			proc.f = proc.f.b(proc.h.shift());
		}
		else // if (rootTag === 3 || rootTag === 4)
		{
			proc.g = {
				$: rootTag === 3 ? 0 : 1,
				b: proc.f.b,
				i: proc.g
			};
			proc.f = proc.f.d;
		}
	}
}



function _Process_sleep(time)
{
	return _Scheduler_binding(function(callback) {
		var id = setTimeout(function() {
			callback(_Scheduler_succeed(_Utils_Tuple0));
		}, time);

		return function() { clearTimeout(id); };
	});
}




// PROGRAMS


var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args)
{
	return _Platform_initialize(
		flagDecoder,
		args,
		impl.aB,
		impl.aJ,
		impl.aH,
		function() { return function() {} }
	);
});



// INITIALIZE A PROGRAM


function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder)
{
	var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined));
	$elm$core$Result$isOk(result) || _Debug_crash(2 /**_UNUSED/, _Json_errorToString(result.a) /**/);
	var managers = {};
	var initPair = init(result.a);
	var model = initPair.a;
	var stepper = stepperBuilder(sendToApp, model);
	var ports = _Platform_setupEffects(managers, sendToApp);

	function sendToApp(msg, viewMetadata)
	{
		var pair = A2(update, msg, model);
		stepper(model = pair.a, viewMetadata);
		_Platform_enqueueEffects(managers, pair.b, subscriptions(model));
	}

	_Platform_enqueueEffects(managers, initPair.b, subscriptions(model));

	return ports ? { ports: ports } : {};
}



// TRACK PRELOADS
//
// This is used by code in elm/browser and elm/http
// to register any HTTP requests that are triggered by init.
//


var _Platform_preload;


function _Platform_registerPreload(url)
{
	_Platform_preload.add(url);
}



// EFFECT MANAGERS


var _Platform_effectManagers = {};


function _Platform_setupEffects(managers, sendToApp)
{
	var ports;

	// setup all necessary effect managers
	for (var key in _Platform_effectManagers)
	{
		var manager = _Platform_effectManagers[key];

		if (manager.a)
		{
			ports = ports || {};
			ports[key] = manager.a(key, sendToApp);
		}

		managers[key] = _Platform_instantiateManager(manager, sendToApp);
	}

	return ports;
}


function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap)
{
	return {
		b: init,
		c: onEffects,
		d: onSelfMsg,
		e: cmdMap,
		f: subMap
	};
}


function _Platform_instantiateManager(info, sendToApp)
{
	var router = {
		g: sendToApp,
		h: undefined
	};

	var onEffects = info.c;
	var onSelfMsg = info.d;
	var cmdMap = info.e;
	var subMap = info.f;

	function loop(state)
	{
		return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg)
		{
			var value = msg.a;

			if (msg.$ === 0)
			{
				return A3(onSelfMsg, router, value, state);
			}

			return cmdMap && subMap
				? A4(onEffects, router, value.i, value.j, state)
				: A3(onEffects, router, cmdMap ? value.i : value.j, state);
		}));
	}

	return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b));
}



// ROUTING


var _Platform_sendToApp = F2(function(router, msg)
{
	return _Scheduler_binding(function(callback)
	{
		router.g(msg);
		callback(_Scheduler_succeed(_Utils_Tuple0));
	});
});


var _Platform_sendToSelf = F2(function(router, msg)
{
	return A2(_Scheduler_send, router.h, {
		$: 0,
		a: msg
	});
});



// BAGS


function _Platform_leaf(home)
{
	return function(value)
	{
		return {
			$: 1,
			k: home,
			l: value
		};
	};
}


function _Platform_batch(list)
{
	return {
		$: 2,
		m: list
	};
}


var _Platform_map = F2(function(tagger, bag)
{
	return {
		$: 3,
		n: tagger,
		o: bag
	}
});



// PIPE BAGS INTO EFFECT MANAGERS
//
// Effects must be queued!
//
// Say your init contains a synchronous command, like Time.now or Time.here
//
//   - This will produce a batch of effects (FX_1)
//   - The synchronous task triggers the subsequent `update` call
//   - This will produce a batch of effects (FX_2)
//
// If we just start dispatching FX_2, subscriptions from FX_2 can be processed
// before subscriptions from FX_1. No good! Earlier versions of this code had
// this problem, leading to these reports:
//
//   https://github.com/elm/core/issues/980
//   https://github.com/elm/core/pull/981
//   https://github.com/elm/compiler/issues/1776
//
// The queue is necessary to avoid ordering issues for synchronous commands.


// Why use true/false here? Why not just check the length of the queue?
// The goal is to detect "are we currently dispatching effects?" If we
// are, we need to bail and let the ongoing while loop handle things.
//
// Now say the queue has 1 element. When we dequeue the final element,
// the queue will be empty, but we are still actively dispatching effects.
// So you could get queue jumping in a really tricky category of cases.
//
var _Platform_effectsQueue = [];
var _Platform_effectsActive = false;


function _Platform_enqueueEffects(managers, cmdBag, subBag)
{
	_Platform_effectsQueue.push({ p: managers, q: cmdBag, r: subBag });

	if (_Platform_effectsActive) return;

	_Platform_effectsActive = true;
	for (var fx; fx = _Platform_effectsQueue.shift(); )
	{
		_Platform_dispatchEffects(fx.p, fx.q, fx.r);
	}
	_Platform_effectsActive = false;
}


function _Platform_dispatchEffects(managers, cmdBag, subBag)
{
	var effectsDict = {};
	_Platform_gatherEffects(true, cmdBag, effectsDict, null);
	_Platform_gatherEffects(false, subBag, effectsDict, null);

	for (var home in managers)
	{
		_Scheduler_rawSend(managers[home], {
			$: 'fx',
			a: effectsDict[home] || { i: _List_Nil, j: _List_Nil }
		});
	}
}


function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers)
{
	switch (bag.$)
	{
		case 1:
			var home = bag.k;
			var effect = _Platform_toEffect(isCmd, home, taggers, bag.l);
			effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]);
			return;

		case 2:
			for (var list = bag.m; list.b; list = list.b) // WHILE_CONS
			{
				_Platform_gatherEffects(isCmd, list.a, effectsDict, taggers);
			}
			return;

		case 3:
			_Platform_gatherEffects(isCmd, bag.o, effectsDict, {
				s: bag.n,
				t: taggers
			});
			return;
	}
}


function _Platform_toEffect(isCmd, home, taggers, value)
{
	function applyTaggers(x)
	{
		for (var temp = taggers; temp; temp = temp.t)
		{
			x = temp.s(x);
		}
		return x;
	}

	var map = isCmd
		? _Platform_effectManagers[home].e
		: _Platform_effectManagers[home].f;

	return A2(map, applyTaggers, value)
}


function _Platform_insert(isCmd, newEffect, effects)
{
	effects = effects || { i: _List_Nil, j: _List_Nil };

	isCmd
		? (effects.i = _List_Cons(newEffect, effects.i))
		: (effects.j = _List_Cons(newEffect, effects.j));

	return effects;
}



// PORTS


function _Platform_checkPortName(name)
{
	if (_Platform_effectManagers[name])
	{
		_Debug_crash(3, name)
	}
}



// OUTGOING PORTS


function _Platform_outgoingPort(name, converter)
{
	_Platform_checkPortName(name);
	_Platform_effectManagers[name] = {
		e: _Platform_outgoingPortMap,
		u: converter,
		a: _Platform_setupOutgoingPort
	};
	return _Platform_leaf(name);
}


var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; });


function _Platform_setupOutgoingPort(name)
{
	var subs = [];
	var converter = _Platform_effectManagers[name].u;

	// CREATE MANAGER

	var init = _Process_sleep(0);

	_Platform_effectManagers[name].b = init;
	_Platform_effectManagers[name].c = F3(function(router, cmdList, state)
	{
		for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS
		{
			// grab a separate reference to subs in case unsubscribe is called
			var currentSubs = subs;
			var value = _Json_unwrap(converter(cmdList.a));
			for (var i = 0; i < currentSubs.length; i++)
			{
				currentSubs[i](value);
			}
		}
		return init;
	});

	// PUBLIC API

	function subscribe(callback)
	{
		subs.push(callback);
	}

	function unsubscribe(callback)
	{
		// copy subs into a new array in case unsubscribe is called within a
		// subscribed callback
		subs = subs.slice();
		var index = subs.indexOf(callback);
		if (index >= 0)
		{
			subs.splice(index, 1);
		}
	}

	return {
		subscribe: subscribe,
		unsubscribe: unsubscribe
	};
}



// INCOMING PORTS


function _Platform_incomingPort(name, converter)
{
	_Platform_checkPortName(name);
	_Platform_effectManagers[name] = {
		f: _Platform_incomingPortMap,
		u: converter,
		a: _Platform_setupIncomingPort
	};
	return _Platform_leaf(name);
}


var _Platform_incomingPortMap = F2(function(tagger, finalTagger)
{
	return function(value)
	{
		return tagger(finalTagger(value));
	};
});


function _Platform_setupIncomingPort(name, sendToApp)
{
	var subs = _List_Nil;
	var converter = _Platform_effectManagers[name].u;

	// CREATE MANAGER

	var init = _Scheduler_succeed(null);

	_Platform_effectManagers[name].b = init;
	_Platform_effectManagers[name].c = F3(function(router, subList, state)
	{
		subs = subList;
		return init;
	});

	// PUBLIC API

	function send(incomingValue)
	{
		var result = A2(_Json_run, converter, _Json_wrap(incomingValue));

		$elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a);

		var value = result.a;
		for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS
		{
			sendToApp(temp.a(value));
		}
	}

	return { send: send };
}



// EXPORT ELM MODULES
//
// Have DEBUG and PROD versions so that we can (1) give nicer errors in
// debug mode and (2) not pay for the bits needed for that in prod mode.
//


function _Platform_export(exports)
{
	scope['Elm']
		? _Platform_mergeExportsProd(scope['Elm'], exports)
		: scope['Elm'] = exports;
}


function _Platform_mergeExportsProd(obj, exports)
{
	for (var name in exports)
	{
		(name in obj)
			? (name == 'init')
				? _Debug_crash(6)
				: _Platform_mergeExportsProd(obj[name], exports[name])
			: (obj[name] = exports[name]);
	}
}


function _Platform_export_UNUSED(exports)
{
	scope['Elm']
		? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports)
		: scope['Elm'] = exports;
}


function _Platform_mergeExportsDebug(moduleName, obj, exports)
{
	for (var name in exports)
	{
		(name in obj)
			? (name == 'init')
				? _Debug_crash(6, moduleName)
				: _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name])
			: (obj[name] = exports[name]);
	}
}




// HELPERS


var _VirtualDom_divertHrefToApp;

var _VirtualDom_doc = typeof document !== 'undefined' ? document : {};


function _VirtualDom_appendChild(parent, child)
{
	parent.appendChild(child);
}

var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args)
{
	// NOTE: this function needs _Platform_export available to work

	/**/
	var node = args['node'];
	//*/
	/**_UNUSED/
	var node = args && args['node'] ? args['node'] : _Debug_crash(0);
	//*/

	node.parentNode.replaceChild(
		_VirtualDom_render(virtualNode, function() {}),
		node
	);

	return {};
});



// TEXT


function _VirtualDom_text(string)
{
	return {
		$: 0,
		a: string
	};
}



// NODE


var _VirtualDom_nodeNS = F2(function(namespace, tag)
{
	return F2(function(factList, kidList)
	{
		for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
		{
			var kid = kidList.a;
			descendantsCount += (kid.b || 0);
			kids.push(kid);
		}
		descendantsCount += kids.length;

		return {
			$: 1,
			c: tag,
			d: _VirtualDom_organizeFacts(factList),
			e: kids,
			f: namespace,
			b: descendantsCount
		};
	});
});


var _VirtualDom_node = _VirtualDom_nodeNS(undefined);



// KEYED NODE


var _VirtualDom_keyedNodeNS = F2(function(namespace, tag)
{
	return F2(function(factList, kidList)
	{
		for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
		{
			var kid = kidList.a;
			descendantsCount += (kid.b.b || 0);
			kids.push(kid);
		}
		descendantsCount += kids.length;

		return {
			$: 2,
			c: tag,
			d: _VirtualDom_organizeFacts(factList),
			e: kids,
			f: namespace,
			b: descendantsCount
		};
	});
});


var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined);



// CUSTOM


function _VirtualDom_custom(factList, model, render, diff)
{
	return {
		$: 3,
		d: _VirtualDom_organizeFacts(factList),
		g: model,
		h: render,
		i: diff
	};
}



// MAP


var _VirtualDom_map = F2(function(tagger, node)
{
	return {
		$: 4,
		j: tagger,
		k: node,
		b: 1 + (node.b || 0)
	};
});



// LAZY


function _VirtualDom_thunk(refs, thunk)
{
	return {
		$: 5,
		l: refs,
		m: thunk,
		k: undefined
	};
}

var _VirtualDom_lazy = F2(function(func, a)
{
	return _VirtualDom_thunk([func, a], function() {
		return func(a);
	});
});

var _VirtualDom_lazy2 = F3(function(func, a, b)
{
	return _VirtualDom_thunk([func, a, b], function() {
		return A2(func, a, b);
	});
});

var _VirtualDom_lazy3 = F4(function(func, a, b, c)
{
	return _VirtualDom_thunk([func, a, b, c], function() {
		return A3(func, a, b, c);
	});
});

var _VirtualDom_lazy4 = F5(function(func, a, b, c, d)
{
	return _VirtualDom_thunk([func, a, b, c, d], function() {
		return A4(func, a, b, c, d);
	});
});

var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e)
{
	return _VirtualDom_thunk([func, a, b, c, d, e], function() {
		return A5(func, a, b, c, d, e);
	});
});

var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f)
{
	return _VirtualDom_thunk([func, a, b, c, d, e, f], function() {
		return A6(func, a, b, c, d, e, f);
	});
});

var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g)
{
	return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() {
		return A7(func, a, b, c, d, e, f, g);
	});
});

var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h)
{
	return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() {
		return A8(func, a, b, c, d, e, f, g, h);
	});
});



// FACTS


var _VirtualDom_on = F2(function(key, handler)
{
	return {
		$: 'a0',
		n: key,
		o: handler
	};
});
var _VirtualDom_style = F2(function(key, value)
{
	return {
		$: 'a1',
		n: key,
		o: value
	};
});
var _VirtualDom_property = F2(function(key, value)
{
	return {
		$: 'a2',
		n: key,
		o: value
	};
});
var _VirtualDom_attribute = F2(function(key, value)
{
	return {
		$: 'a3',
		n: key,
		o: value
	};
});
var _VirtualDom_attributeNS = F3(function(namespace, key, value)
{
	return {
		$: 'a4',
		n: key,
		o: { f: namespace, o: value }
	};
});



// XSS ATTACK VECTOR CHECKS


function _VirtualDom_noScript(tag)
{
	return tag == 'script' ? 'p' : tag;
}

function _VirtualDom_noOnOrFormAction(key)
{
	return /^(on|formAction$)/i.test(key) ? 'data-' + key : key;
}

function _VirtualDom_noInnerHtmlOrFormAction(key)
{
	return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key;
}

function _VirtualDom_noJavaScriptUri(value)
{
	return /^javascript:/i.test(value.replace(/\s/g,'')) ? '' : value;
}

function _VirtualDom_noJavaScriptUri_UNUSED(value)
{
	return /^javascript:/i.test(value.replace(/\s/g,''))
		? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
		: value;
}

function _VirtualDom_noJavaScriptOrHtmlUri(value)
{
	return /^\s*(javascript:|data:text\/html)/i.test(value) ? '' : value;
}

function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value)
{
	return /^\s*(javascript:|data:text\/html)/i.test(value)
		? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
		: value;
}



// MAP FACTS


var _VirtualDom_mapAttribute = F2(function(func, attr)
{
	return (attr.$ === 'a0')
		? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o))
		: attr;
});

function _VirtualDom_mapHandler(func, handler)
{
	var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);

	// 0 = Normal
	// 1 = MayStopPropagation
	// 2 = MayPreventDefault
	// 3 = Custom

	return {
		$: handler.$,
		a:
			!tag
				? A2($elm$json$Json$Decode$map, func, handler.a)
				:
			A3($elm$json$Json$Decode$map2,
				tag < 3
					? _VirtualDom_mapEventTuple
					: _VirtualDom_mapEventRecord,
				$elm$json$Json$Decode$succeed(func),
				handler.a
			)
	};
}

var _VirtualDom_mapEventTuple = F2(function(func, tuple)
{
	return _Utils_Tuple2(func(tuple.a), tuple.b);
});

var _VirtualDom_mapEventRecord = F2(function(func, record)
{
	return {
		t: func(record.t),
		R: record.R,
		O: record.O
	}
});



// ORGANIZE FACTS


function _VirtualDom_organizeFacts(factList)
{
	for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS
	{
		var entry = factList.a;

		var tag = entry.$;
		var key = entry.n;
		var value = entry.o;

		if (tag === 'a2')
		{
			(key === 'className')
				? _VirtualDom_addClass(facts, key, _Json_unwrap(value))
				: facts[key] = _Json_unwrap(value);

			continue;
		}

		var subFacts = facts[tag] || (facts[tag] = {});
		(tag === 'a3' && key === 'class')
			? _VirtualDom_addClass(subFacts, key, value)
			: subFacts[key] = value;
	}

	return facts;
}

function _VirtualDom_addClass(object, key, newClass)
{
	var classes = object[key];
	object[key] = classes ? classes + ' ' + newClass : newClass;
}



// RENDER


function _VirtualDom_render(vNode, eventNode)
{
	var tag = vNode.$;

	if (tag === 5)
	{
		return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode);
	}

	if (tag === 0)
	{
		return _VirtualDom_doc.createTextNode(vNode.a);
	}

	if (tag === 4)
	{
		var subNode = vNode.k;
		var tagger = vNode.j;

		while (subNode.$ === 4)
		{
			typeof tagger !== 'object'
				? tagger = [tagger, subNode.j]
				: tagger.push(subNode.j);

			subNode = subNode.k;
		}

		var subEventRoot = { j: tagger, p: eventNode };
		var domNode = _VirtualDom_render(subNode, subEventRoot);
		domNode.elm_event_node_ref = subEventRoot;
		return domNode;
	}

	if (tag === 3)
	{
		var domNode = vNode.h(vNode.g);
		_VirtualDom_applyFacts(domNode, eventNode, vNode.d);
		return domNode;
	}

	// at this point `tag` must be 1 or 2

	var domNode = vNode.f
		? _VirtualDom_doc.createElementNS(vNode.f, vNode.c)
		: _VirtualDom_doc.createElement(vNode.c);

	if (_VirtualDom_divertHrefToApp && vNode.c == 'a')
	{
		domNode.addEventListener('click', _VirtualDom_divertHrefToApp(domNode));
	}

	_VirtualDom_applyFacts(domNode, eventNode, vNode.d);

	for (var kids = vNode.e, i = 0; i < kids.length; i++)
	{
		_VirtualDom_appendChild(domNode, _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode));
	}

	return domNode;
}



// APPLY FACTS


function _VirtualDom_applyFacts(domNode, eventNode, facts)
{
	for (var key in facts)
	{
		var value = facts[key];

		key === 'a1'
			? _VirtualDom_applyStyles(domNode, value)
			:
		key === 'a0'
			? _VirtualDom_applyEvents(domNode, eventNode, value)
			:
		key === 'a3'
			? _VirtualDom_applyAttrs(domNode, value)
			:
		key === 'a4'
			? _VirtualDom_applyAttrsNS(domNode, value)
			:
		((key !== 'value' && key !== 'checked') || domNode[key] !== value) && (domNode[key] = value);
	}
}



// APPLY STYLES


function _VirtualDom_applyStyles(domNode, styles)
{
	var domNodeStyle = domNode.style;

	for (var key in styles)
	{
		domNodeStyle[key] = styles[key];
	}
}



// APPLY ATTRS


function _VirtualDom_applyAttrs(domNode, attrs)
{
	for (var key in attrs)
	{
		var value = attrs[key];
		typeof value !== 'undefined'
			? domNode.setAttribute(key, value)
			: domNode.removeAttribute(key);
	}
}



// APPLY NAMESPACED ATTRS


function _VirtualDom_applyAttrsNS(domNode, nsAttrs)
{
	for (var key in nsAttrs)
	{
		var pair = nsAttrs[key];
		var namespace = pair.f;
		var value = pair.o;

		typeof value !== 'undefined'
			? domNode.setAttributeNS(namespace, key, value)
			: domNode.removeAttributeNS(namespace, key);
	}
}



// APPLY EVENTS


function _VirtualDom_applyEvents(domNode, eventNode, events)
{
	var allCallbacks = domNode.elmFs || (domNode.elmFs = {});

	for (var key in events)
	{
		var newHandler = events[key];
		var oldCallback = allCallbacks[key];

		if (!newHandler)
		{
			domNode.removeEventListener(key, oldCallback);
			allCallbacks[key] = undefined;
			continue;
		}

		if (oldCallback)
		{
			var oldHandler = oldCallback.q;
			if (oldHandler.$ === newHandler.$)
			{
				oldCallback.q = newHandler;
				continue;
			}
			domNode.removeEventListener(key, oldCallback);
		}

		oldCallback = _VirtualDom_makeCallback(eventNode, newHandler);
		domNode.addEventListener(key, oldCallback,
			_VirtualDom_passiveSupported
			&& { passive: $elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 }
		);
		allCallbacks[key] = oldCallback;
	}
}



// PASSIVE EVENTS


var _VirtualDom_passiveSupported;

try
{
	window.addEventListener('t', null, Object.defineProperty({}, 'passive', {
		get: function() { _VirtualDom_passiveSupported = true; }
	}));
}
catch(e) {}



// EVENT HANDLERS


function _VirtualDom_makeCallback(eventNode, initialHandler)
{
	function callback(event)
	{
		var handler = callback.q;
		var result = _Json_runHelp(handler.a, event);

		if (!$elm$core$Result$isOk(result))
		{
			return;
		}

		var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler);

		// 0 = Normal
		// 1 = MayStopPropagation
		// 2 = MayPreventDefault
		// 3 = Custom

		var value = result.a;
		var message = !tag ? value : tag < 3 ? value.a : value.t;
		var stopPropagation = tag == 1 ? value.b : tag == 3 && value.R;
		var currentEventNode = (
			stopPropagation && event.stopPropagation(),
			(tag == 2 ? value.b : tag == 3 && value.O) && event.preventDefault(),
			eventNode
		);
		var tagger;
		var i;
		while (tagger = currentEventNode.j)
		{
			if (typeof tagger == 'function')
			{
				message = tagger(message);
			}
			else
			{
				for (var i = tagger.length; i--; )
				{
					message = tagger[i](message);
				}
			}
			currentEventNode = currentEventNode.p;
		}
		currentEventNode(message, stopPropagation); // stopPropagation implies isSync
	}

	callback.q = initialHandler;

	return callback;
}

function _VirtualDom_equalEvents(x, y)
{
	return x.$ == y.$ && _Json_equality(x.a, y.a);
}



// DIFF


// TODO: Should we do patches like in iOS?
//
// type Patch
//   = At Int Patch
//   | Batch (List Patch)
//   | Change ...
//
// How could it not be better?
//
function _VirtualDom_diff(x, y)
{
	var patches = [];
	_VirtualDom_diffHelp(x, y, patches, 0);
	return patches;
}


function _VirtualDom_pushPatch(patches, type, index, data)
{
	var patch = {
		$: type,
		r: index,
		s: data,
		t: undefined,
		u: undefined
	};
	patches.push(patch);
	return patch;
}


function _VirtualDom_diffHelp(x, y, patches, index)
{
	if (x === y)
	{
		return;
	}

	var xType = x.$;
	var yType = y.$;

	// Bail if you run into different types of nodes. Implies that the
	// structure has changed significantly and it's not worth a diff.
	if (xType !== yType)
	{
		if (xType === 1 && yType === 2)
		{
			y = _VirtualDom_dekey(y);
			yType = 1;
		}
		else
		{
			_VirtualDom_pushPatch(patches, 0, index, y);
			return;
		}
	}

	// Now we know that both nodes are the same $.
	switch (yType)
	{
		case 5:
			var xRefs = x.l;
			var yRefs = y.l;
			var i = xRefs.length;
			var same = i === yRefs.length;
			while (same && i--)
			{
				same = xRefs[i] === yRefs[i];
			}
			if (same)
			{
				y.k = x.k;
				return;
			}
			y.k = y.m();
			var subPatches = [];
			_VirtualDom_diffHelp(x.k, y.k, subPatches, 0);
			subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches);
			return;

		case 4:
			// gather nested taggers
			var xTaggers = x.j;
			var yTaggers = y.j;
			var nesting = false;

			var xSubNode = x.k;
			while (xSubNode.$ === 4)
			{
				nesting = true;

				typeof xTaggers !== 'object'
					? xTaggers = [xTaggers, xSubNode.j]
					: xTaggers.push(xSubNode.j);

				xSubNode = xSubNode.k;
			}

			var ySubNode = y.k;
			while (ySubNode.$ === 4)
			{
				nesting = true;

				typeof yTaggers !== 'object'
					? yTaggers = [yTaggers, ySubNode.j]
					: yTaggers.push(ySubNode.j);

				ySubNode = ySubNode.k;
			}

			// Just bail if different numbers of taggers. This implies the
			// structure of the virtual DOM has changed.
			if (nesting && xTaggers.length !== yTaggers.length)
			{
				_VirtualDom_pushPatch(patches, 0, index, y);
				return;
			}

			// check if taggers are "the same"
			if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers)
			{
				_VirtualDom_pushPatch(patches, 2, index, yTaggers);
			}

			// diff everything below the taggers
			_VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1);
			return;

		case 0:
			if (x.a !== y.a)
			{
				_VirtualDom_pushPatch(patches, 3, index, y.a);
			}
			return;

		case 1:
			_VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids);
			return;

		case 2:
			_VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids);
			return;

		case 3:
			if (x.h !== y.h)
			{
				_VirtualDom_pushPatch(patches, 0, index, y);
				return;
			}

			var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
			factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);

			var patch = y.i(x.g, y.g);
			patch && _VirtualDom_pushPatch(patches, 5, index, patch);

			return;
	}
}

// assumes the incoming arrays are the same length
function _VirtualDom_pairwiseRefEqual(as, bs)
{
	for (var i = 0; i < as.length; i++)
	{
		if (as[i] !== bs[i])
		{
			return false;
		}
	}

	return true;
}

function _VirtualDom_diffNodes(x, y, patches, index, diffKids)
{
	// Bail if obvious indicators have changed. Implies more serious
	// structural changes such that it's not worth it to diff.
	if (x.c !== y.c || x.f !== y.f)
	{
		_VirtualDom_pushPatch(patches, 0, index, y);
		return;
	}

	var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
	factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);

	diffKids(x, y, patches, index);
}



// DIFF FACTS


// TODO Instead of creating a new diff object, it's possible to just test if
// there *is* a diff. During the actual patch, do the diff again and make the
// modifications directly. This way, there's no new allocations. Worth it?
function _VirtualDom_diffFacts(x, y, category)
{
	var diff;

	// look for changes and removals
	for (var xKey in x)
	{
		if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4')
		{
			var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey);
			if (subDiff)
			{
				diff = diff || {};
				diff[xKey] = subDiff;
			}
			continue;
		}

		// remove if not in the new facts
		if (!(xKey in y))
		{
			diff = diff || {};
			diff[xKey] =
				!category
					? (typeof x[xKey] === 'string' ? '' : null)
					:
				(category === 'a1')
					? ''
					:
				(category === 'a0' || category === 'a3')
					? undefined
					:
				{ f: x[xKey].f, o: undefined };

			continue;
		}

		var xValue = x[xKey];
		var yValue = y[xKey];

		// reference equal, so don't worry about it
		if (xValue === yValue && xKey !== 'value' && xKey !== 'checked'
			|| category === 'a0' && _VirtualDom_equalEvents(xValue, yValue))
		{
			continue;
		}

		diff = diff || {};
		diff[xKey] = yValue;
	}

	// add new stuff
	for (var yKey in y)
	{
		if (!(yKey in x))
		{
			diff = diff || {};
			diff[yKey] = y[yKey];
		}
	}

	return diff;
}



// DIFF KIDS


function _VirtualDom_diffKids(xParent, yParent, patches, index)
{
	var xKids = xParent.e;
	var yKids = yParent.e;

	var xLen = xKids.length;
	var yLen = yKids.length;

	// FIGURE OUT IF THERE ARE INSERTS OR REMOVALS

	if (xLen > yLen)
	{
		_VirtualDom_pushPatch(patches, 6, index, {
			v: yLen,
			i: xLen - yLen
		});
	}
	else if (xLen < yLen)
	{
		_VirtualDom_pushPatch(patches, 7, index, {
			v: xLen,
			e: yKids
		});
	}

	// PAIRWISE DIFF EVERYTHING ELSE

	for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++)
	{
		var xKid = xKids[i];
		_VirtualDom_diffHelp(xKid, yKids[i], patches, ++index);
		index += xKid.b || 0;
	}
}



// KEYED DIFF


function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex)
{
	var localPatches = [];

	var changes = {}; // Dict String Entry
	var inserts = []; // Array { index : Int, entry : Entry }
	// type Entry = { tag : String, vnode : VNode, index : Int, data : _ }

	var xKids = xParent.e;
	var yKids = yParent.e;
	var xLen = xKids.length;
	var yLen = yKids.length;
	var xIndex = 0;
	var yIndex = 0;

	var index = rootIndex;

	while (xIndex < xLen && yIndex < yLen)
	{
		var x = xKids[xIndex];
		var y = yKids[yIndex];

		var xKey = x.a;
		var yKey = y.a;
		var xNode = x.b;
		var yNode = y.b;

		var newMatch = undefined;
		var oldMatch = undefined;

		// check if keys match

		if (xKey === yKey)
		{
			index++;
			_VirtualDom_diffHelp(xNode, yNode, localPatches, index);
			index += xNode.b || 0;

			xIndex++;
			yIndex++;
			continue;
		}

		// look ahead 1 to detect insertions and removals.

		var xNext = xKids[xIndex + 1];
		var yNext = yKids[yIndex + 1];

		if (xNext)
		{
			var xNextKey = xNext.a;
			var xNextNode = xNext.b;
			oldMatch = yKey === xNextKey;
		}

		if (yNext)
		{
			var yNextKey = yNext.a;
			var yNextNode = yNext.b;
			newMatch = xKey === yNextKey;
		}


		// swap x and y
		if (newMatch && oldMatch)
		{
			index++;
			_VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
			_VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts);
			index += xNode.b || 0;

			index++;
			_VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index);
			index += xNextNode.b || 0;

			xIndex += 2;
			yIndex += 2;
			continue;
		}

		// insert y
		if (newMatch)
		{
			index++;
			_VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
			_VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
			index += xNode.b || 0;

			xIndex += 1;
			yIndex += 2;
			continue;
		}

		// remove x
		if (oldMatch)
		{
			index++;
			_VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
			index += xNode.b || 0;

			index++;
			_VirtualDom_diffHelp(xNextNode, yNode, localPatches, index);
			index += xNextNode.b || 0;

			xIndex += 2;
			yIndex += 1;
			continue;
		}

		// remove x, insert y
		if (xNext && xNextKey === yNextKey)
		{
			index++;
			_VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
			_VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
			index += xNode.b || 0;

			index++;
			_VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index);
			index += xNextNode.b || 0;

			xIndex += 2;
			yIndex += 2;
			continue;
		}

		break;
	}

	// eat up any remaining nodes with removeNode and insertNode

	while (xIndex < xLen)
	{
		index++;
		var x = xKids[xIndex];
		var xNode = x.b;
		_VirtualDom_removeNode(changes, localPatches, x.a, xNode, index);
		index += xNode.b || 0;
		xIndex++;
	}

	while (yIndex < yLen)
	{
		var endInserts = endInserts || [];
		var y = yKids[yIndex];
		_VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts);
		yIndex++;
	}

	if (localPatches.length > 0 || inserts.length > 0 || endInserts)
	{
		_VirtualDom_pushPatch(patches, 8, rootIndex, {
			w: localPatches,
			x: inserts,
			y: endInserts
		});
	}
}



// CHANGES FROM KEYED DIFF


var _VirtualDom_POSTFIX = '_elmW6BL';


function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts)
{
	var entry = changes[key];

	// never seen this key before
	if (!entry)
	{
		entry = {
			c: 0,
			z: vnode,
			r: yIndex,
			s: undefined
		};

		inserts.push({ r: yIndex, A: entry });
		changes[key] = entry;

		return;
	}

	// this key was removed earlier, a match!
	if (entry.c === 1)
	{
		inserts.push({ r: yIndex, A: entry });

		entry.c = 2;
		var subPatches = [];
		_VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r);
		entry.r = yIndex;
		entry.s.s = {
			w: subPatches,
			A: entry
		};

		return;
	}

	// this key has already been inserted or moved, a duplicate!
	_VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts);
}


function _VirtualDom_removeNode(changes, localPatches, key, vnode, index)
{
	var entry = changes[key];

	// never seen this key before
	if (!entry)
	{
		var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined);

		changes[key] = {
			c: 1,
			z: vnode,
			r: index,
			s: patch
		};

		return;
	}

	// this key was inserted earlier, a match!
	if (entry.c === 0)
	{
		entry.c = 2;
		var subPatches = [];
		_VirtualDom_diffHelp(vnode, entry.z, subPatches, index);

		_VirtualDom_pushPatch(localPatches, 9, index, {
			w: subPatches,
			A: entry
		});

		return;
	}

	// this key has already been removed or moved, a duplicate!
	_VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index);
}



// ADD DOM NODES
//
// Each DOM node has an "index" assigned in order of traversal. It is important
// to minimize our crawl over the actual DOM, so these indexes (along with the
// descendantsCount of virtual nodes) let us skip touching entire subtrees of
// the DOM if we know there are no patches there.


function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode)
{
	_VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode);
}


// assumes `patches` is non-empty and indexes increase monotonically.
function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)
{
	var patch = patches[i];
	var index = patch.r;

	while (index === low)
	{
		var patchType = patch.$;

		if (patchType === 1)
		{
			_VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode);
		}
		else if (patchType === 8)
		{
			patch.t = domNode;
			patch.u = eventNode;

			var subPatches = patch.s.w;
			if (subPatches.length > 0)
			{
				_VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
			}
		}
		else if (patchType === 9)
		{
			patch.t = domNode;
			patch.u = eventNode;

			var data = patch.s;
			if (data)
			{
				data.A.s = domNode;
				var subPatches = data.w;
				if (subPatches.length > 0)
				{
					_VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
				}
			}
		}
		else
		{
			patch.t = domNode;
			patch.u = eventNode;
		}

		i++;

		if (!(patch = patches[i]) || (index = patch.r) > high)
		{
			return i;
		}
	}

	var tag = vNode.$;

	if (tag === 4)
	{
		var subNode = vNode.k;

		while (subNode.$ === 4)
		{
			subNode = subNode.k;
		}

		return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);
	}

	// tag must be 1 or 2 at this point

	var vKids = vNode.e;
	var childNodes = domNode.childNodes;
	for (var j = 0; j < vKids.length; j++)
	{
		low++;
		var vKid = tag === 1 ? vKids[j] : vKids[j].b;
		var nextLow = low + (vKid.b || 0);
		if (low <= index && index <= nextLow)
		{
			i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode);
			if (!(patch = patches[i]) || (index = patch.r) > high)
			{
				return i;
			}
		}
		low = nextLow;
	}
	return i;
}



// APPLY PATCHES


function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)
{
	if (patches.length === 0)
	{
		return rootDomNode;
	}

	_VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);
	return _VirtualDom_applyPatchesHelp(rootDomNode, patches);
}

function _VirtualDom_applyPatchesHelp(rootDomNode, patches)
{
	for (var i = 0; i < patches.length; i++)
	{
		var patch = patches[i];
		var localDomNode = patch.t
		var newNode = _VirtualDom_applyPatch(localDomNode, patch);
		if (localDomNode === rootDomNode)
		{
			rootDomNode = newNode;
		}
	}
	return rootDomNode;
}

function _VirtualDom_applyPatch(domNode, patch)
{
	switch (patch.$)
	{
		case 0:
			return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u);

		case 4:
			_VirtualDom_applyFacts(domNode, patch.u, patch.s);
			return domNode;

		case 3:
			domNode.replaceData(0, domNode.length, patch.s);
			return domNode;

		case 1:
			return _VirtualDom_applyPatchesHelp(domNode, patch.s);

		case 2:
			if (domNode.elm_event_node_ref)
			{
				domNode.elm_event_node_ref.j = patch.s;
			}
			else
			{
				domNode.elm_event_node_ref = { j: patch.s, p: patch.u };
			}
			return domNode;

		case 6:
			var data = patch.s;
			for (var i = 0; i < data.i; i++)
			{
				domNode.removeChild(domNode.childNodes[data.v]);
			}
			return domNode;

		case 7:
			var data = patch.s;
			var kids = data.e;
			var i = data.v;
			var theEnd = domNode.childNodes[i];
			for (; i < kids.length; i++)
			{
				domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd);
			}
			return domNode;

		case 9:
			var data = patch.s;
			if (!data)
			{
				domNode.parentNode.removeChild(domNode);
				return domNode;
			}
			var entry = data.A;
			if (typeof entry.r !== 'undefined')
			{
				domNode.parentNode.removeChild(domNode);
			}
			entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w);
			return domNode;

		case 8:
			return _VirtualDom_applyPatchReorder(domNode, patch);

		case 5:
			return patch.s(domNode);

		default:
			_Debug_crash(10); // 'Ran into an unknown patch!'
	}
}


function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode)
{
	var parentNode = domNode.parentNode;
	var newNode = _VirtualDom_render(vNode, eventNode);

	if (!newNode.elm_event_node_ref)
	{
		newNode.elm_event_node_ref = domNode.elm_event_node_ref;
	}

	if (parentNode && newNode !== domNode)
	{
		parentNode.replaceChild(newNode, domNode);
	}
	return newNode;
}


function _VirtualDom_applyPatchReorder(domNode, patch)
{
	var data = patch.s;

	// remove end inserts
	var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch);

	// removals
	domNode = _VirtualDom_applyPatchesHelp(domNode, data.w);

	// inserts
	var inserts = data.x;
	for (var i = 0; i < inserts.length; i++)
	{
		var insert = inserts[i];
		var entry = insert.A;
		var node = entry.c === 2
			? entry.s
			: _VirtualDom_render(entry.z, patch.u);
		domNode.insertBefore(node, domNode.childNodes[insert.r]);
	}

	// add end inserts
	if (frag)
	{
		_VirtualDom_appendChild(domNode, frag);
	}

	return domNode;
}


function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch)
{
	if (!endInserts)
	{
		return;
	}

	var frag = _VirtualDom_doc.createDocumentFragment();
	for (var i = 0; i < endInserts.length; i++)
	{
		var insert = endInserts[i];
		var entry = insert.A;
		_VirtualDom_appendChild(frag, entry.c === 2
			? entry.s
			: _VirtualDom_render(entry.z, patch.u)
		);
	}
	return frag;
}


function _VirtualDom_virtualize(node)
{
	// TEXT NODES

	if (node.nodeType === 3)
	{
		return _VirtualDom_text(node.textContent);
	}


	// WEIRD NODES

	if (node.nodeType !== 1)
	{
		return _VirtualDom_text('');
	}


	// ELEMENT NODES

	var attrList = _List_Nil;
	var attrs = node.attributes;
	for (var i = attrs.length; i--; )
	{
		var attr = attrs[i];
		var name = attr.name;
		var value = attr.value;
		attrList = _List_Cons( A2(_VirtualDom_attribute, name, value), attrList );
	}

	var tag = node.tagName.toLowerCase();
	var kidList = _List_Nil;
	var kids = node.childNodes;

	for (var i = kids.length; i--; )
	{
		kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList);
	}
	return A3(_VirtualDom_node, tag, attrList, kidList);
}

function _VirtualDom_dekey(keyedNode)
{
	var keyedKids = keyedNode.e;
	var len = keyedKids.length;
	var kids = new Array(len);
	for (var i = 0; i < len; i++)
	{
		kids[i] = keyedKids[i].b;
	}

	return {
		$: 1,
		c: keyedNode.c,
		d: keyedNode.d,
		e: kids,
		f: keyedNode.f,
		b: keyedNode.b
	};
}




// ELEMENT


var _Debugger_element;

var _Browser_element = _Debugger_element || F4(function(impl, flagDecoder, debugMetadata, args)
{
	return _Platform_initialize(
		flagDecoder,
		args,
		impl.aB,
		impl.aJ,
		impl.aH,
		function(sendToApp, initialModel) {
			var view = impl.aK;
			/**/
			var domNode = args['node'];
			//*/
			/**_UNUSED/
			var domNode = args && args['node'] ? args['node'] : _Debug_crash(0);
			//*/
			var currNode = _VirtualDom_virtualize(domNode);

			return _Browser_makeAnimator(initialModel, function(model)
			{
				var nextNode = view(model);
				var patches = _VirtualDom_diff(currNode, nextNode);
				domNode = _VirtualDom_applyPatches(domNode, currNode, patches, sendToApp);
				currNode = nextNode;
			});
		}
	);
});



// DOCUMENT


var _Debugger_document;

var _Browser_document = _Debugger_document || F4(function(impl, flagDecoder, debugMetadata, args)
{
	return _Platform_initialize(
		flagDecoder,
		args,
		impl.aB,
		impl.aJ,
		impl.aH,
		function(sendToApp, initialModel) {
			var divertHrefToApp = impl.P && impl.P(sendToApp)
			var view = impl.aK;
			var title = _VirtualDom_doc.title;
			var bodyNode = _VirtualDom_doc.body;
			var currNode = _VirtualDom_virtualize(bodyNode);
			return _Browser_makeAnimator(initialModel, function(model)
			{
				_VirtualDom_divertHrefToApp = divertHrefToApp;
				var doc = view(model);
				var nextNode = _VirtualDom_node('body')(_List_Nil)(doc.au);
				var patches = _VirtualDom_diff(currNode, nextNode);
				bodyNode = _VirtualDom_applyPatches(bodyNode, currNode, patches, sendToApp);
				currNode = nextNode;
				_VirtualDom_divertHrefToApp = 0;
				(title !== doc.aI) && (_VirtualDom_doc.title = title = doc.aI);
			});
		}
	);
});



// ANIMATION


var _Browser_cancelAnimationFrame =
	typeof cancelAnimationFrame !== 'undefined'
		? cancelAnimationFrame
		: function(id) { clearTimeout(id); };

var _Browser_requestAnimationFrame =
	typeof requestAnimationFrame !== 'undefined'
		? requestAnimationFrame
		: function(callback) { return setTimeout(callback, 1000 / 60); };


function _Browser_makeAnimator(model, draw)
{
	draw(model);

	var state = 0;

	function updateIfNeeded()
	{
		state = state === 1
			? 0
			: ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 );
	}

	return function(nextModel, isSync)
	{
		model = nextModel;

		isSync
			? ( draw(model),
				state === 2 && (state = 1)
				)
			: ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded),
				state = 2
				);
	};
}



// APPLICATION


function _Browser_application(impl)
{
	var onUrlChange = impl.aD;
	var onUrlRequest = impl.aE;
	var key = function() { key.a(onUrlChange(_Browser_getUrl())); };

	return _Browser_document({
		P: function(sendToApp)
		{
			key.a = sendToApp;
			_Browser_window.addEventListener('popstate', key);
			_Browser_window.navigator.userAgent.indexOf('Trident') < 0 || _Browser_window.addEventListener('hashchange', key);

			return F2(function(domNode, event)
			{
				if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button < 1 && !domNode.target && !domNode.hasAttribute('download'))
				{
					event.preventDefault();
					var href = domNode.href;
					var curr = _Browser_getUrl();
					var next = $elm$url$Url$fromString(href).a;
					sendToApp(onUrlRequest(
						(next
							&& curr.ah === next.ah
							&& curr.Z === next.Z
							&& curr.ae.a === next.ae.a
						)
							? $elm$browser$Browser$Internal(next)
							: $elm$browser$Browser$External(href)
					));
				}
			});
		},
		aB: function(flags)
		{
			return A3(impl.aB, flags, _Browser_getUrl(), key);
		},
		aK: impl.aK,
		aJ: impl.aJ,
		aH: impl.aH
	});
}

function _Browser_getUrl()
{
	return $elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1);
}

var _Browser_go = F2(function(key, n)
{
	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
		n && history.go(n);
		key();
	}));
});

var _Browser_pushUrl = F2(function(key, url)
{
	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
		history.pushState({}, '', url);
		key();
	}));
});

var _Browser_replaceUrl = F2(function(key, url)
{
	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
		history.replaceState({}, '', url);
		key();
	}));
});



// GLOBAL EVENTS


var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} };
var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode;
var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode;

var _Browser_on = F3(function(node, eventName, sendToSelf)
{
	return _Scheduler_spawn(_Scheduler_binding(function(callback)
	{
		function handler(event)	{ _Scheduler_rawSpawn(sendToSelf(event)); }
		node.addEventListener(eventName, handler, _VirtualDom_passiveSupported && { passive: true });
		return function() { node.removeEventListener(eventName, handler); };
	}));
});

var _Browser_decodeEvent = F2(function(decoder, event)
{
	var result = _Json_runHelp(decoder, event);
	return $elm$core$Result$isOk(result) ? $elm$core$Maybe$Just(result.a) : $elm$core$Maybe$Nothing;
});



// PAGE VISIBILITY


function _Browser_visibilityInfo()
{
	return (typeof _VirtualDom_doc.hidden !== 'undefined')
		? { az: 'hidden', av: 'visibilitychange' }
		:
	(typeof _VirtualDom_doc.mozHidden !== 'undefined')
		? { az: 'mozHidden', av: 'mozvisibilitychange' }
		:
	(typeof _VirtualDom_doc.msHidden !== 'undefined')
		? { az: 'msHidden', av: 'msvisibilitychange' }
		:
	(typeof _VirtualDom_doc.webkitHidden !== 'undefined')
		? { az: 'webkitHidden', av: 'webkitvisibilitychange' }
		: { az: 'hidden', av: 'visibilitychange' };
}



// ANIMATION FRAMES


function _Browser_rAF()
{
	return _Scheduler_binding(function(callback)
	{
		var id = _Browser_requestAnimationFrame(function() {
			callback(_Scheduler_succeed(Date.now()));
		});

		return function() {
			_Browser_cancelAnimationFrame(id);
		};
	});
}


function _Browser_now()
{
	return _Scheduler_binding(function(callback)
	{
		callback(_Scheduler_succeed(Date.now()));
	});
}



// DOM STUFF


function _Browser_withNode(id, doStuff)
{
	return _Scheduler_binding(function(callback)
	{
		_Browser_requestAnimationFrame(function() {
			var node = document.getElementById(id);
			callback(node
				? _Scheduler_succeed(doStuff(node))
				: _Scheduler_fail($elm$browser$Browser$Dom$NotFound(id))
			);
		});
	});
}


function _Browser_withWindow(doStuff)
{
	return _Scheduler_binding(function(callback)
	{
		_Browser_requestAnimationFrame(function() {
			callback(_Scheduler_succeed(doStuff()));
		});
	});
}


// FOCUS and BLUR


var _Browser_call = F2(function(functionName, id)
{
	return _Browser_withNode(id, function(node) {
		node[functionName]();
		return _Utils_Tuple0;
	});
});



// WINDOW VIEWPORT


function _Browser_getViewport()
{
	return {
		al: _Browser_getScene(),
		ao: {
			aq: _Browser_window.pageXOffset,
			ar: _Browser_window.pageYOffset,
			ap: _Browser_doc.documentElement.clientWidth,
			Y: _Browser_doc.documentElement.clientHeight
		}
	};
}

function _Browser_getScene()
{
	var body = _Browser_doc.body;
	var elem = _Browser_doc.documentElement;
	return {
		ap: Math.max(body.scrollWidth, body.offsetWidth, elem.scrollWidth, elem.offsetWidth, elem.clientWidth),
		Y: Math.max(body.scrollHeight, body.offsetHeight, elem.scrollHeight, elem.offsetHeight, elem.clientHeight)
	};
}

var _Browser_setViewport = F2(function(x, y)
{
	return _Browser_withWindow(function()
	{
		_Browser_window.scroll(x, y);
		return _Utils_Tuple0;
	});
});



// ELEMENT VIEWPORT


function _Browser_getViewportOf(id)
{
	return _Browser_withNode(id, function(node)
	{
		return {
			al: {
				ap: node.scrollWidth,
				Y: node.scrollHeight
			},
			ao: {
				aq: node.scrollLeft,
				ar: node.scrollTop,
				ap: node.clientWidth,
				Y: node.clientHeight
			}
		};
	});
}


var _Browser_setViewportOf = F3(function(id, x, y)
{
	return _Browser_withNode(id, function(node)
	{
		node.scrollLeft = x;
		node.scrollTop = y;
		return _Utils_Tuple0;
	});
});



// ELEMENT


function _Browser_getElement(id)
{
	return _Browser_withNode(id, function(node)
	{
		var rect = node.getBoundingClientRect();
		var x = _Browser_window.pageXOffset;
		var y = _Browser_window.pageYOffset;
		return {
			al: _Browser_getScene(),
			ao: {
				aq: x,
				ar: y,
				ap: _Browser_doc.documentElement.clientWidth,
				Y: _Browser_doc.documentElement.clientHeight
			},
			ax: {
				aq: x + rect.left,
				ar: y + rect.top,
				ap: rect.width,
				Y: rect.height
			}
		};
	});
}



// LOAD and RELOAD


function _Browser_reload(skipCache)
{
	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
	{
		_VirtualDom_doc.location.reload(skipCache);
	}));
}

function _Browser_load(url)
{
	return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
	{
		try
		{
			_Browser_window.location = url;
		}
		catch(err)
		{
			// Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here.
			// Other browsers reload the page, so let's be consistent about that.
			_VirtualDom_doc.location.reload(false);
		}
	}));
}



var _Bitwise_and = F2(function(a, b)
{
	return a & b;
});

var _Bitwise_or = F2(function(a, b)
{
	return a | b;
});

var _Bitwise_xor = F2(function(a, b)
{
	return a ^ b;
});

function _Bitwise_complement(a)
{
	return ~a;
};

var _Bitwise_shiftLeftBy = F2(function(offset, a)
{
	return a << offset;
});

var _Bitwise_shiftRightBy = F2(function(offset, a)
{
	return a >> offset;
});

var _Bitwise_shiftRightZfBy = F2(function(offset, a)
{
	return a >>> offset;
});



function _Time_now(millisToPosix)
{
	return _Scheduler_binding(function(callback)
	{
		callback(_Scheduler_succeed(millisToPosix(Date.now())));
	});
}

var _Time_setInterval = F2(function(interval, task)
{
	return _Scheduler_binding(function(callback)
	{
		var id = setInterval(function() { _Scheduler_rawSpawn(task); }, interval);
		return function() { clearInterval(id); };
	});
});

function _Time_here()
{
	return _Scheduler_binding(function(callback)
	{
		callback(_Scheduler_succeed(
			A2($elm$time$Time$customZone, -(new Date().getTimezoneOffset()), _List_Nil)
		));
	});
}


function _Time_getZoneName()
{
	return _Scheduler_binding(function(callback)
	{
		try
		{
			var name = $elm$time$Time$Name(Intl.DateTimeFormat().resolvedOptions().timeZone);
		}
		catch (e)
		{
			var name = $elm$time$Time$Offset(new Date().getTimezoneOffset());
		}
		callback(_Scheduler_succeed(name));
	});
}
var $elm$core$Basics$EQ = 1;
var $elm$core$Basics$GT = 2;
var $elm$core$Basics$LT = 0;
var $elm$core$List$cons = _List_cons;
var $elm$core$Dict$foldr = F3(
	function (func, acc, t) {
		foldr:
		while (true) {
			if (t.$ === -2) {
				return acc;
			} else {
				var key = t.b;
				var value = t.c;
				var left = t.d;
				var right = t.e;
				var $temp$func = func,
					$temp$acc = A3(
					func,
					key,
					value,
					A3($elm$core$Dict$foldr, func, acc, right)),
					$temp$t = left;
				func = $temp$func;
				acc = $temp$acc;
				t = $temp$t;
				continue foldr;
			}
		}
	});
var $elm$core$Dict$toList = function (dict) {
	return A3(
		$elm$core$Dict$foldr,
		F3(
			function (key, value, list) {
				return A2(
					$elm$core$List$cons,
					_Utils_Tuple2(key, value),
					list);
			}),
		_List_Nil,
		dict);
};
var $elm$core$Dict$keys = function (dict) {
	return A3(
		$elm$core$Dict$foldr,
		F3(
			function (key, value, keyList) {
				return A2($elm$core$List$cons, key, keyList);
			}),
		_List_Nil,
		dict);
};
var $elm$core$Set$toList = function (_v0) {
	var dict = _v0;
	return $elm$core$Dict$keys(dict);
};
var $elm$core$Elm$JsArray$foldr = _JsArray_foldr;
var $elm$core$Array$foldr = F3(
	function (func, baseCase, _v0) {
		var tree = _v0.c;
		var tail = _v0.d;
		var helper = F2(
			function (node, acc) {
				if (!node.$) {
					var subTree = node.a;
					return A3($elm$core$Elm$JsArray$foldr, helper, acc, subTree);
				} else {
					var values = node.a;
					return A3($elm$core$Elm$JsArray$foldr, func, acc, values);
				}
			});
		return A3(
			$elm$core$Elm$JsArray$foldr,
			helper,
			A3($elm$core$Elm$JsArray$foldr, func, baseCase, tail),
			tree);
	});
var $elm$core$Array$toList = function (array) {
	return A3($elm$core$Array$foldr, $elm$core$List$cons, _List_Nil, array);
};
var $elm$core$Result$Err = function (a) {
	return {$: 1, a: a};
};
var $elm$json$Json$Decode$Failure = F2(
	function (a, b) {
		return {$: 3, a: a, b: b};
	});
var $elm$json$Json$Decode$Field = F2(
	function (a, b) {
		return {$: 0, a: a, b: b};
	});
var $elm$json$Json$Decode$Index = F2(
	function (a, b) {
		return {$: 1, a: a, b: b};
	});
var $elm$core$Result$Ok = function (a) {
	return {$: 0, a: a};
};
var $elm$json$Json$Decode$OneOf = function (a) {
	return {$: 2, a: a};
};
var $elm$core$Basics$False = 1;
var $elm$core$Basics$add = _Basics_add;
var $elm$core$Maybe$Just = function (a) {
	return {$: 0, a: a};
};
var $elm$core$Maybe$Nothing = {$: 1};
var $elm$core$String$all = _String_all;
var $elm$core$Basics$and = _Basics_and;
var $elm$core$Basics$append = _Utils_append;
var $elm$json$Json$Encode$encode = _Json_encode;
var $elm$core$String$fromInt = _String_fromNumber;
var $elm$core$String$join = F2(
	function (sep, chunks) {
		return A2(
			_String_join,
			sep,
			_List_toArray(chunks));
	});
var $elm$core$String$split = F2(
	function (sep, string) {
		return _List_fromArray(
			A2(_String_split, sep, string));
	});
var $elm$json$Json$Decode$indent = function (str) {
	return A2(
		$elm$core$String$join,
		'\n    ',
		A2($elm$core$String$split, '\n', str));
};
var $elm$core$List$foldl = F3(
	function (func, acc, list) {
		foldl:
		while (true) {
			if (!list.b) {
				return acc;
			} else {
				var x = list.a;
				var xs = list.b;
				var $temp$func = func,
					$temp$acc = A2(func, x, acc),
					$temp$list = xs;
				func = $temp$func;
				acc = $temp$acc;
				list = $temp$list;
				continue foldl;
			}
		}
	});
var $elm$core$List$length = function (xs) {
	return A3(
		$elm$core$List$foldl,
		F2(
			function (_v0, i) {
				return i + 1;
			}),
		0,
		xs);
};
var $elm$core$List$map2 = _List_map2;
var $elm$core$Basics$le = _Utils_le;
var $elm$core$Basics$sub = _Basics_sub;
var $elm$core$List$rangeHelp = F3(
	function (lo, hi, list) {
		rangeHelp:
		while (true) {
			if (_Utils_cmp(lo, hi) < 1) {
				var $temp$lo = lo,
					$temp$hi = hi - 1,
					$temp$list = A2($elm$core$List$cons, hi, list);
				lo = $temp$lo;
				hi = $temp$hi;
				list = $temp$list;
				continue rangeHelp;
			} else {
				return list;
			}
		}
	});
var $elm$core$List$range = F2(
	function (lo, hi) {
		return A3($elm$core$List$rangeHelp, lo, hi, _List_Nil);
	});
var $elm$core$List$indexedMap = F2(
	function (f, xs) {
		return A3(
			$elm$core$List$map2,
			f,
			A2(
				$elm$core$List$range,
				0,
				$elm$core$List$length(xs) - 1),
			xs);
	});
var $elm$core$Char$toCode = _Char_toCode;
var $elm$core$Char$isLower = function (_char) {
	var code = $elm$core$Char$toCode(_char);
	return (97 <= code) && (code <= 122);
};
var $elm$core$Char$isUpper = function (_char) {
	var code = $elm$core$Char$toCode(_char);
	return (code <= 90) && (65 <= code);
};
var $elm$core$Basics$or = _Basics_or;
var $elm$core$Char$isAlpha = function (_char) {
	return $elm$core$Char$isLower(_char) || $elm$core$Char$isUpper(_char);
};
var $elm$core$Char$isDigit = function (_char) {
	var code = $elm$core$Char$toCode(_char);
	return (code <= 57) && (48 <= code);
};
var $elm$core$Char$isAlphaNum = function (_char) {
	return $elm$core$Char$isLower(_char) || ($elm$core$Char$isUpper(_char) || $elm$core$Char$isDigit(_char));
};
var $elm$core$List$reverse = function (list) {
	return A3($elm$core$List$foldl, $elm$core$List$cons, _List_Nil, list);
};
var $elm$core$String$uncons = _String_uncons;
var $elm$json$Json$Decode$errorOneOf = F2(
	function (i, error) {
		return '\n\n(' + ($elm$core$String$fromInt(i + 1) + (') ' + $elm$json$Json$Decode$indent(
			$elm$json$Json$Decode$errorToString(error))));
	});
var $elm$json$Json$Decode$errorToString = function (error) {
	return A2($elm$json$Json$Decode$errorToStringHelp, error, _List_Nil);
};
var $elm$json$Json$Decode$errorToStringHelp = F2(
	function (error, context) {
		errorToStringHelp:
		while (true) {
			switch (error.$) {
				case 0:
					var f = error.a;
					var err = error.b;
					var isSimple = function () {
						var _v1 = $elm$core$String$uncons(f);
						if (_v1.$ === 1) {
							return false;
						} else {
							var _v2 = _v1.a;
							var _char = _v2.a;
							var rest = _v2.b;
							return $elm$core$Char$isAlpha(_char) && A2($elm$core$String$all, $elm$core$Char$isAlphaNum, rest);
						}
					}();
					var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']'));
					var $temp$error = err,
						$temp$context = A2($elm$core$List$cons, fieldName, context);
					error = $temp$error;
					context = $temp$context;
					continue errorToStringHelp;
				case 1:
					var i = error.a;
					var err = error.b;
					var indexName = '[' + ($elm$core$String$fromInt(i) + ']');
					var $temp$error = err,
						$temp$context = A2($elm$core$List$cons, indexName, context);
					error = $temp$error;
					context = $temp$context;
					continue errorToStringHelp;
				case 2:
					var errors = error.a;
					if (!errors.b) {
						return 'Ran into a Json.Decode.oneOf with no possibilities' + function () {
							if (!context.b) {
								return '!';
							} else {
								return ' at json' + A2(
									$elm$core$String$join,
									'',
									$elm$core$List$reverse(context));
							}
						}();
					} else {
						if (!errors.b.b) {
							var err = errors.a;
							var $temp$error = err,
								$temp$context = context;
							error = $temp$error;
							context = $temp$context;
							continue errorToStringHelp;
						} else {
							var starter = function () {
								if (!context.b) {
									return 'Json.Decode.oneOf';
								} else {
									return 'The Json.Decode.oneOf at json' + A2(
										$elm$core$String$join,
										'',
										$elm$core$List$reverse(context));
								}
							}();
							var introduction = starter + (' failed in the following ' + ($elm$core$String$fromInt(
								$elm$core$List$length(errors)) + ' ways:'));
							return A2(
								$elm$core$String$join,
								'\n\n',
								A2(
									$elm$core$List$cons,
									introduction,
									A2($elm$core$List$indexedMap, $elm$json$Json$Decode$errorOneOf, errors)));
						}
					}
				default:
					var msg = error.a;
					var json = error.b;
					var introduction = function () {
						if (!context.b) {
							return 'Problem with the given value:\n\n';
						} else {
							return 'Problem with the value at json' + (A2(
								$elm$core$String$join,
								'',
								$elm$core$List$reverse(context)) + ':\n\n    ');
						}
					}();
					return introduction + ($elm$json$Json$Decode$indent(
						A2($elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg));
			}
		}
	});
var $elm$core$Array$branchFactor = 32;
var $elm$core$Array$Array_elm_builtin = F4(
	function (a, b, c, d) {
		return {$: 0, a: a, b: b, c: c, d: d};
	});
var $elm$core$Elm$JsArray$empty = _JsArray_empty;
var $elm$core$Basics$ceiling = _Basics_ceiling;
var $elm$core$Basics$fdiv = _Basics_fdiv;
var $elm$core$Basics$logBase = F2(
	function (base, number) {
		return _Basics_log(number) / _Basics_log(base);
	});
var $elm$core$Basics$toFloat = _Basics_toFloat;
var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling(
	A2($elm$core$Basics$logBase, 2, $elm$core$Array$branchFactor));
var $elm$core$Array$empty = A4($elm$core$Array$Array_elm_builtin, 0, $elm$core$Array$shiftStep, $elm$core$Elm$JsArray$empty, $elm$core$Elm$JsArray$empty);
var $elm$core$Elm$JsArray$initialize = _JsArray_initialize;
var $elm$core$Array$Leaf = function (a) {
	return {$: 1, a: a};
};
var $elm$core$Basics$apL = F2(
	function (f, x) {
		return f(x);
	});
var $elm$core$Basics$apR = F2(
	function (x, f) {
		return f(x);
	});
var $elm$core$Basics$eq = _Utils_equal;
var $elm$core$Basics$floor = _Basics_floor;
var $elm$core$Elm$JsArray$length = _JsArray_length;
var $elm$core$Basics$gt = _Utils_gt;
var $elm$core$Basics$max = F2(
	function (x, y) {
		return (_Utils_cmp(x, y) > 0) ? x : y;
	});
var $elm$core$Basics$mul = _Basics_mul;
var $elm$core$Array$SubTree = function (a) {
	return {$: 0, a: a};
};
var $elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList;
var $elm$core$Array$compressNodes = F2(
	function (nodes, acc) {
		compressNodes:
		while (true) {
			var _v0 = A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodes);
			var node = _v0.a;
			var remainingNodes = _v0.b;
			var newAcc = A2(
				$elm$core$List$cons,
				$elm$core$Array$SubTree(node),
				acc);
			if (!remainingNodes.b) {
				return $elm$core$List$reverse(newAcc);
			} else {
				var $temp$nodes = remainingNodes,
					$temp$acc = newAcc;
				nodes = $temp$nodes;
				acc = $temp$acc;
				continue compressNodes;
			}
		}
	});
var $elm$core$Tuple$first = function (_v0) {
	var x = _v0.a;
	return x;
};
var $elm$core$Array$treeFromBuilder = F2(
	function (nodeList, nodeListSize) {
		treeFromBuilder:
		while (true) {
			var newNodeSize = $elm$core$Basics$ceiling(nodeListSize / $elm$core$Array$branchFactor);
			if (newNodeSize === 1) {
				return A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodeList).a;
			} else {
				var $temp$nodeList = A2($elm$core$Array$compressNodes, nodeList, _List_Nil),
					$temp$nodeListSize = newNodeSize;
				nodeList = $temp$nodeList;
				nodeListSize = $temp$nodeListSize;
				continue treeFromBuilder;
			}
		}
	});
var $elm$core$Array$builderToArray = F2(
	function (reverseNodeList, builder) {
		if (!builder.b) {
			return A4(
				$elm$core$Array$Array_elm_builtin,
				$elm$core$Elm$JsArray$length(builder.e),
				$elm$core$Array$shiftStep,
				$elm$core$Elm$JsArray$empty,
				builder.e);
		} else {
			var treeLen = builder.b * $elm$core$Array$branchFactor;
			var depth = $elm$core$Basics$floor(
				A2($elm$core$Basics$logBase, $elm$core$Array$branchFactor, treeLen - 1));
			var correctNodeList = reverseNodeList ? $elm$core$List$reverse(builder.f) : builder.f;
			var tree = A2($elm$core$Array$treeFromBuilder, correctNodeList, builder.b);
			return A4(
				$elm$core$Array$Array_elm_builtin,
				$elm$core$Elm$JsArray$length(builder.e) + treeLen,
				A2($elm$core$Basics$max, 5, depth * $elm$core$Array$shiftStep),
				tree,
				builder.e);
		}
	});
var $elm$core$Basics$idiv = _Basics_idiv;
var $elm$core$Basics$lt = _Utils_lt;
var $elm$core$Array$initializeHelp = F5(
	function (fn, fromIndex, len, nodeList, tail) {
		initializeHelp:
		while (true) {
			if (fromIndex < 0) {
				return A2(
					$elm$core$Array$builderToArray,
					false,
					{f: nodeList, b: (len / $elm$core$Array$branchFactor) | 0, e: tail});
			} else {
				var leaf = $elm$core$Array$Leaf(
					A3($elm$core$Elm$JsArray$initialize, $elm$core$Array$branchFactor, fromIndex, fn));
				var $temp$fn = fn,
					$temp$fromIndex = fromIndex - $elm$core$Array$branchFactor,
					$temp$len = len,
					$temp$nodeList = A2($elm$core$List$cons, leaf, nodeList),
					$temp$tail = tail;
				fn = $temp$fn;
				fromIndex = $temp$fromIndex;
				len = $temp$len;
				nodeList = $temp$nodeList;
				tail = $temp$tail;
				continue initializeHelp;
			}
		}
	});
var $elm$core$Basics$remainderBy = _Basics_remainderBy;
var $elm$core$Array$initialize = F2(
	function (len, fn) {
		if (len <= 0) {
			return $elm$core$Array$empty;
		} else {
			var tailLen = len % $elm$core$Array$branchFactor;
			var tail = A3($elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn);
			var initialFromIndex = (len - tailLen) - $elm$core$Array$branchFactor;
			return A5($elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail);
		}
	});
var $elm$core$Basics$True = 0;
var $elm$core$Result$isOk = function (result) {
	if (!result.$) {
		return true;
	} else {
		return false;
	}
};
var $elm$json$Json$Decode$map = _Json_map1;
var $elm$json$Json$Decode$map2 = _Json_map2;
var $elm$json$Json$Decode$succeed = _Json_succeed;
var $elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) {
	switch (handler.$) {
		case 0:
			return 0;
		case 1:
			return 1;
		case 2:
			return 2;
		default:
			return 3;
	}
};
var $elm$browser$Browser$External = function (a) {
	return {$: 1, a: a};
};
var $elm$browser$Browser$Internal = function (a) {
	return {$: 0, a: a};
};
var $elm$core$Basics$identity = function (x) {
	return x;
};
var $elm$browser$Browser$Dom$NotFound = $elm$core$Basics$identity;
var $elm$url$Url$Http = 0;
var $elm$url$Url$Https = 1;
var $elm$url$Url$Url = F6(
	function (protocol, host, port_, path, query, fragment) {
		return {X: fragment, Z: host, ac: path, ae: port_, ah: protocol, ai: query};
	});
var $elm$core$String$contains = _String_contains;
var $elm$core$String$length = _String_length;
var $elm$core$String$slice = _String_slice;
var $elm$core$String$dropLeft = F2(
	function (n, string) {
		return (n < 1) ? string : A3(
			$elm$core$String$slice,
			n,
			$elm$core$String$length(string),
			string);
	});
var $elm$core$String$indexes = _String_indexes;
var $elm$core$String$isEmpty = function (string) {
	return string === '';
};
var $elm$core$String$left = F2(
	function (n, string) {
		return (n < 1) ? '' : A3($elm$core$String$slice, 0, n, string);
	});
var $elm$core$String$toInt = _String_toInt;
var $elm$url$Url$chompBeforePath = F5(
	function (protocol, path, params, frag, str) {
		if ($elm$core$String$isEmpty(str) || A2($elm$core$String$contains, '@', str)) {
			return $elm$core$Maybe$Nothing;
		} else {
			var _v0 = A2($elm$core$String$indexes, ':', str);
			if (!_v0.b) {
				return $elm$core$Maybe$Just(
					A6($elm$url$Url$Url, protocol, str, $elm$core$Maybe$Nothing, path, params, frag));
			} else {
				if (!_v0.b.b) {
					var i = _v0.a;
					var _v1 = $elm$core$String$toInt(
						A2($elm$core$String$dropLeft, i + 1, str));
					if (_v1.$ === 1) {
						return $elm$core$Maybe$Nothing;
					} else {
						var port_ = _v1;
						return $elm$core$Maybe$Just(
							A6(
								$elm$url$Url$Url,
								protocol,
								A2($elm$core$String$left, i, str),
								port_,
								path,
								params,
								frag));
					}
				} else {
					return $elm$core$Maybe$Nothing;
				}
			}
		}
	});
var $elm$url$Url$chompBeforeQuery = F4(
	function (protocol, params, frag, str) {
		if ($elm$core$String$isEmpty(str)) {
			return $elm$core$Maybe$Nothing;
		} else {
			var _v0 = A2($elm$core$String$indexes, '/', str);
			if (!_v0.b) {
				return A5($elm$url$Url$chompBeforePath, protocol, '/', params, frag, str);
			} else {
				var i = _v0.a;
				return A5(
					$elm$url$Url$chompBeforePath,
					protocol,
					A2($elm$core$String$dropLeft, i, str),
					params,
					frag,
					A2($elm$core$String$left, i, str));
			}
		}
	});
var $elm$url$Url$chompBeforeFragment = F3(
	function (protocol, frag, str) {
		if ($elm$core$String$isEmpty(str)) {
			return $elm$core$Maybe$Nothing;
		} else {
			var _v0 = A2($elm$core$String$indexes, '?', str);
			if (!_v0.b) {
				return A4($elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Nothing, frag, str);
			} else {
				var i = _v0.a;
				return A4(
					$elm$url$Url$chompBeforeQuery,
					protocol,
					$elm$core$Maybe$Just(
						A2($elm$core$String$dropLeft, i + 1, str)),
					frag,
					A2($elm$core$String$left, i, str));
			}
		}
	});
var $elm$url$Url$chompAfterProtocol = F2(
	function (protocol, str) {
		if ($elm$core$String$isEmpty(str)) {
			return $elm$core$Maybe$Nothing;
		} else {
			var _v0 = A2($elm$core$String$indexes, '#', str);
			if (!_v0.b) {
				return A3($elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Nothing, str);
			} else {
				var i = _v0.a;
				return A3(
					$elm$url$Url$chompBeforeFragment,
					protocol,
					$elm$core$Maybe$Just(
						A2($elm$core$String$dropLeft, i + 1, str)),
					A2($elm$core$String$left, i, str));
			}
		}
	});
var $elm$core$String$startsWith = _String_startsWith;
var $elm$url$Url$fromString = function (str) {
	return A2($elm$core$String$startsWith, 'http://', str) ? A2(
		$elm$url$Url$chompAfterProtocol,
		0,
		A2($elm$core$String$dropLeft, 7, str)) : (A2($elm$core$String$startsWith, 'https://', str) ? A2(
		$elm$url$Url$chompAfterProtocol,
		1,
		A2($elm$core$String$dropLeft, 8, str)) : $elm$core$Maybe$Nothing);
};
var $elm$core$Basics$never = function (_v0) {
	never:
	while (true) {
		var nvr = _v0;
		var $temp$_v0 = nvr;
		_v0 = $temp$_v0;
		continue never;
	}
};
var $elm$core$Task$Perform = $elm$core$Basics$identity;
var $elm$core$Task$succeed = _Scheduler_succeed;
var $elm$core$Task$init = $elm$core$Task$succeed(0);
var $elm$core$List$foldrHelper = F4(
	function (fn, acc, ctr, ls) {
		if (!ls.b) {
			return acc;
		} else {
			var a = ls.a;
			var r1 = ls.b;
			if (!r1.b) {
				return A2(fn, a, acc);
			} else {
				var b = r1.a;
				var r2 = r1.b;
				if (!r2.b) {
					return A2(
						fn,
						a,
						A2(fn, b, acc));
				} else {
					var c = r2.a;
					var r3 = r2.b;
					if (!r3.b) {
						return A2(
							fn,
							a,
							A2(
								fn,
								b,
								A2(fn, c, acc)));
					} else {
						var d = r3.a;
						var r4 = r3.b;
						var res = (ctr > 500) ? A3(
							$elm$core$List$foldl,
							fn,
							acc,
							$elm$core$List$reverse(r4)) : A4($elm$core$List$foldrHelper, fn, acc, ctr + 1, r4);
						return A2(
							fn,
							a,
							A2(
								fn,
								b,
								A2(
									fn,
									c,
									A2(fn, d, res))));
					}
				}
			}
		}
	});
var $elm$core$List$foldr = F3(
	function (fn, acc, ls) {
		return A4($elm$core$List$foldrHelper, fn, acc, 0, ls);
	});
var $elm$core$List$map = F2(
	function (f, xs) {
		return A3(
			$elm$core$List$foldr,
			F2(
				function (x, acc) {
					return A2(
						$elm$core$List$cons,
						f(x),
						acc);
				}),
			_List_Nil,
			xs);
	});
var $elm$core$Task$andThen = _Scheduler_andThen;
var $elm$core$Task$map = F2(
	function (func, taskA) {
		return A2(
			$elm$core$Task$andThen,
			function (a) {
				return $elm$core$Task$succeed(
					func(a));
			},
			taskA);
	});
var $elm$core$Task$map2 = F3(
	function (func, taskA, taskB) {
		return A2(
			$elm$core$Task$andThen,
			function (a) {
				return A2(
					$elm$core$Task$andThen,
					function (b) {
						return $elm$core$Task$succeed(
							A2(func, a, b));
					},
					taskB);
			},
			taskA);
	});
var $elm$core$Task$sequence = function (tasks) {
	return A3(
		$elm$core$List$foldr,
		$elm$core$Task$map2($elm$core$List$cons),
		$elm$core$Task$succeed(_List_Nil),
		tasks);
};
var $elm$core$Platform$sendToApp = _Platform_sendToApp;
var $elm$core$Task$spawnCmd = F2(
	function (router, _v0) {
		var task = _v0;
		return _Scheduler_spawn(
			A2(
				$elm$core$Task$andThen,
				$elm$core$Platform$sendToApp(router),
				task));
	});
var $elm$core$Task$onEffects = F3(
	function (router, commands, state) {
		return A2(
			$elm$core$Task$map,
			function (_v0) {
				return 0;
			},
			$elm$core$Task$sequence(
				A2(
					$elm$core$List$map,
					$elm$core$Task$spawnCmd(router),
					commands)));
	});
var $elm$core$Task$onSelfMsg = F3(
	function (_v0, _v1, _v2) {
		return $elm$core$Task$succeed(0);
	});
var $elm$core$Task$cmdMap = F2(
	function (tagger, _v0) {
		var task = _v0;
		return A2($elm$core$Task$map, tagger, task);
	});
_Platform_effectManagers['Task'] = _Platform_createManager($elm$core$Task$init, $elm$core$Task$onEffects, $elm$core$Task$onSelfMsg, $elm$core$Task$cmdMap);
var $elm$core$Task$command = _Platform_leaf('Task');
var $elm$core$Task$perform = F2(
	function (toMessage, task) {
		return $elm$core$Task$command(
			A2($elm$core$Task$map, toMessage, task));
	});
var $elm$browser$Browser$element = _Browser_element;
var $author$project$Main$NewCard = function (a) {
	return {$: 2, a: a};
};
var $elm$random$Random$Generate = $elm$core$Basics$identity;
var $elm$random$Random$Seed = F2(
	function (a, b) {
		return {$: 0, a: a, b: b};
	});
var $elm$core$Bitwise$shiftRightZfBy = _Bitwise_shiftRightZfBy;
var $elm$random$Random$next = function (_v0) {
	var state0 = _v0.a;
	var incr = _v0.b;
	return A2($elm$random$Random$Seed, ((state0 * 1664525) + incr) >>> 0, incr);
};
var $elm$random$Random$initialSeed = function (x) {
	var _v0 = $elm$random$Random$next(
		A2($elm$random$Random$Seed, 0, 1013904223));
	var state1 = _v0.a;
	var incr = _v0.b;
	var state2 = (state1 + x) >>> 0;
	return $elm$random$Random$next(
		A2($elm$random$Random$Seed, state2, incr));
};
var $elm$time$Time$Name = function (a) {
	return {$: 0, a: a};
};
var $elm$time$Time$Offset = function (a) {
	return {$: 1, a: a};
};
var $elm$time$Time$Zone = F2(
	function (a, b) {
		return {$: 0, a: a, b: b};
	});
var $elm$time$Time$customZone = $elm$time$Time$Zone;
var $elm$time$Time$Posix = $elm$core$Basics$identity;
var $elm$time$Time$millisToPosix = $elm$core$Basics$identity;
var $elm$time$Time$now = _Time_now($elm$time$Time$millisToPosix);
var $elm$time$Time$posixToMillis = function (_v0) {
	var millis = _v0;
	return millis;
};
var $elm$random$Random$init = A2(
	$elm$core$Task$andThen,
	function (time) {
		return $elm$core$Task$succeed(
			$elm$random$Random$initialSeed(
				$elm$time$Time$posixToMillis(time)));
	},
	$elm$time$Time$now);
var $elm$random$Random$step = F2(
	function (_v0, seed) {
		var generator = _v0;
		return generator(seed);
	});
var $elm$random$Random$onEffects = F3(
	function (router, commands, seed) {
		if (!commands.b) {
			return $elm$core$Task$succeed(seed);
		} else {
			var generator = commands.a;
			var rest = commands.b;
			var _v1 = A2($elm$random$Random$step, generator, seed);
			var value = _v1.a;
			var newSeed = _v1.b;
			return A2(
				$elm$core$Task$andThen,
				function (_v2) {
					return A3($elm$random$Random$onEffects, router, rest, newSeed);
				},
				A2($elm$core$Platform$sendToApp, router, value));
		}
	});
var $elm$random$Random$onSelfMsg = F3(
	function (_v0, _v1, seed) {
		return $elm$core$Task$succeed(seed);
	});
var $elm$random$Random$Generator = $elm$core$Basics$identity;
var $elm$random$Random$map = F2(
	function (func, _v0) {
		var genA = _v0;
		return function (seed0) {
			var _v1 = genA(seed0);
			var a = _v1.a;
			var seed1 = _v1.b;
			return _Utils_Tuple2(
				func(a),
				seed1);
		};
	});
var $elm$random$Random$cmdMap = F2(
	function (func, _v0) {
		var generator = _v0;
		return A2($elm$random$Random$map, func, generator);
	});
_Platform_effectManagers['Random'] = _Platform_createManager($elm$random$Random$init, $elm$random$Random$onEffects, $elm$random$Random$onSelfMsg, $elm$random$Random$cmdMap);
var $elm$random$Random$command = _Platform_leaf('Random');
var $elm$random$Random$generate = F2(
	function (tagger, generator) {
		return $elm$random$Random$command(
			A2($elm$random$Random$map, tagger, generator));
	});
var $elm$core$Bitwise$and = _Bitwise_and;
var $elm$core$Basics$negate = function (n) {
	return -n;
};
var $elm$core$Bitwise$xor = _Bitwise_xor;
var $elm$random$Random$peel = function (_v0) {
	var state = _v0.a;
	var word = (state ^ (state >>> ((state >>> 28) + 4))) * 277803737;
	return ((word >>> 22) ^ word) >>> 0;
};
var $elm$random$Random$int = F2(
	function (a, b) {
		return function (seed0) {
			var _v0 = (_Utils_cmp(a, b) < 0) ? _Utils_Tuple2(a, b) : _Utils_Tuple2(b, a);
			var lo = _v0.a;
			var hi = _v0.b;
			var range = (hi - lo) + 1;
			if (!((range - 1) & range)) {
				return _Utils_Tuple2(
					(((range - 1) & $elm$random$Random$peel(seed0)) >>> 0) + lo,
					$elm$random$Random$next(seed0));
			} else {
				var threshhold = (((-range) >>> 0) % range) >>> 0;
				var accountForBias = function (seed) {
					accountForBias:
					while (true) {
						var x = $elm$random$Random$peel(seed);
						var seedN = $elm$random$Random$next(seed);
						if (_Utils_cmp(x, threshhold) < 0) {
							var $temp$seed = seedN;
							seed = $temp$seed;
							continue accountForBias;
						} else {
							return _Utils_Tuple2((x % range) + lo, seedN);
						}
					}
				};
				return accountForBias(seed0);
			}
		};
	});
var $author$project$Main$newCard = A2($elm$random$Random$int, 2, 14);
var $author$project$Main$init = function (_v0) {
	return _Utils_Tuple2(
		{
			a: {d: $elm$core$Maybe$Nothing, g: $elm$core$Maybe$Nothing, w: $elm$core$Maybe$Nothing},
			C: $elm$core$Maybe$Nothing,
			D: $elm$core$Maybe$Nothing,
			i: 100,
			j: 0
		},
		A2($elm$random$Random$generate, $author$project$Main$NewCard, $author$project$Main$newCard));
};
var $elm$core$Platform$Sub$batch = _Platform_batch;
var $elm$core$Platform$Sub$none = $elm$core$Platform$Sub$batch(_List_Nil);
var $author$project$Main$subscriptions = function (_v0) {
	return $elm$core$Platform$Sub$none;
};
var $author$project$Main$NewCardC = function (a) {
	return {$: 3, a: a};
};
var $elm$core$Platform$Cmd$batch = _Platform_batch;
var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil);
var $author$project$Main$calculateNewState = F2(
	function (cardC, model) {
		var _v0 = model.a.d;
		if (!_v0.$) {
			var cardA = _v0.a;
			var _v1 = model.a.g;
			if (!_v1.$) {
				var cardB = _v1.a;
				var currentGame = model.a;
				return (_Utils_eq(cardC, cardA) || _Utils_eq(cardC, cardB)) ? _Utils_Tuple2(
					model,
					A2($elm$random$Random$generate, $author$project$Main$NewCardC, $author$project$Main$newCard)) : (((_Utils_cmp(cardA, cardC) < 0) && (_Utils_cmp(cardC, cardB) < 0)) ? _Utils_Tuple2(
					_Utils_update(
						model,
						{
							a: _Utils_update(
								currentGame,
								{d: $elm$core$Maybe$Nothing, g: $elm$core$Maybe$Nothing}),
							D: $elm$core$Maybe$Just(
								{
									d: model.a.d,
									g: model.a.g,
									w: $elm$core$Maybe$Just(cardC)
								}),
							i: model.i + model.j
						}),
					A2($elm$random$Random$generate, $author$project$Main$NewCard, $author$project$Main$newCard)) : ((_Utils_cmp(model.j, model.i - model.j) > 0) ? _Utils_Tuple2(
					_Utils_update(
						model,
						{
							a: _Utils_update(
								currentGame,
								{d: $elm$core$Maybe$Nothing, g: $elm$core$Maybe$Nothing}),
							D: $elm$core$Maybe$Just(
								{
									d: model.a.d,
									g: model.a.g,
									w: $elm$core$Maybe$Just(cardC)
								}),
							i: model.i - model.j,
							j: model.i - model.j
						}),
					A2($elm$random$Random$generate, $author$project$Main$NewCard, $author$project$Main$newCard)) : _Utils_Tuple2(
					_Utils_update(
						model,
						{
							a: _Utils_update(
								currentGame,
								{d: $elm$core$Maybe$Nothing, g: $elm$core$Maybe$Nothing}),
							D: $elm$core$Maybe$Just(
								{
									d: model.a.d,
									g: model.a.g,
									w: $elm$core$Maybe$Just(cardC)
								}),
							i: model.i - model.j
						}),
					A2($elm$random$Random$generate, $author$project$Main$NewCard, $author$project$Main$newCard))));
			} else {
				return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
			}
		} else {
			return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
		}
	});
var $author$project$Main$update = F2(
	function (msg, model) {
		switch (msg.$) {
			case 0:
				var bet = msg.a;
				return _Utils_Tuple2(
					_Utils_update(
						model,
						{j: bet}),
					$elm$core$Platform$Cmd$none);
			case 1:
				var value = msg.a;
				var _v1 = $elm$core$String$toInt(value);
				if (!_v1.$) {
					var newValue = _v1.a;
					return (_Utils_cmp(newValue, model.i) > 0) ? _Utils_Tuple2(
						_Utils_update(
							model,
							{
								C: $elm$core$Maybe$Just('You cannot bet more than you have'),
								j: model.i
							}),
						$elm$core$Platform$Cmd$none) : _Utils_Tuple2(
						_Utils_update(
							model,
							{C: $elm$core$Maybe$Nothing, j: newValue}),
						$elm$core$Platform$Cmd$none);
				} else {
					return _Utils_Tuple2(
						_Utils_update(
							model,
							{
								C: $elm$core$Maybe$Just('Wrong input for bet')
							}),
						$elm$core$Platform$Cmd$none);
				}
			case 2:
				var card = msg.a;
				var _v2 = model.a.d;
				if (_v2.$ === 1) {
					var currentGame = model.a;
					return (card > 13) ? _Utils_Tuple2(
						model,
						A2($elm$random$Random$generate, $author$project$Main$NewCard, $author$project$Main$newCard)) : _Utils_Tuple2(
						_Utils_update(
							model,
							{
								a: _Utils_update(
									currentGame,
									{
										d: $elm$core$Maybe$Just(card)
									})
							}),
						A2($elm$random$Random$generate, $author$project$Main$NewCard, $author$project$Main$newCard));
				} else {
					var cardA = _v2.a;
					var currentGame = model.a;
					return (_Utils_cmp(card, cardA) < 1) ? _Utils_Tuple2(
						_Utils_update(
							model,
							{
								a: _Utils_update(
									currentGame,
									{
										d: $elm$core$Maybe$Just(card)
									})
							}),
						A2($elm$random$Random$generate, $author$project$Main$NewCard, $author$project$Main$newCard)) : _Utils_Tuple2(
						_Utils_update(
							model,
							{
								a: _Utils_update(
									currentGame,
									{
										g: $elm$core$Maybe$Just(card)
									})
							}),
						$elm$core$Platform$Cmd$none);
				}
			case 4:
				return _Utils_Tuple2(
					model,
					A2($elm$random$Random$generate, $author$project$Main$NewCardC, $author$project$Main$newCard));
			case 3:
				var card = msg.a;
				return A2($author$project$Main$calculateNewState, card, model);
			default:
				return $author$project$Main$init(0);
		}
	});
var $elm$virtual_dom$VirtualDom$style = _VirtualDom_style;
var $elm$html$Html$Attributes$style = $elm$virtual_dom$VirtualDom$style;
var $author$project$Main$centerHeadlineStyle = _List_fromArray(
	[
		A2($elm$html$Html$Attributes$style, 'display', 'grid'),
		A2($elm$html$Html$Attributes$style, 'place-items', 'center'),
		A2($elm$html$Html$Attributes$style, 'margin', '2rem')
	]);
var $elm$html$Html$div = _VirtualDom_node('div');
var $author$project$Main$NewGame = {$: 5};
var $author$project$Main$Play = {$: 4};
var $author$project$Main$UpdateBetValue = function (a) {
	return {$: 1, a: a};
};
var $elm$html$Html$article = _VirtualDom_node('article');
var $elm$html$Html$button = _VirtualDom_node('button');
var $author$project$Main$cardContentPStyle = _List_fromArray(
	[
		A2($elm$html$Html$Attributes$style, 'font-size', '2rem')
	]);
var $author$project$Main$cardToString = function (card) {
	if (!card.$) {
		var value = card.a;
		if (value < 11) {
			return $elm$core$String$fromInt(value);
		} else {
			switch (value) {
				case 11:
					return 'Jack';
				case 12:
					return 'Queen';
				case 13:
					return 'King';
				case 14:
					return 'Ace';
				default:
					return 'impossible value';
			}
		}
	} else {
		return '-';
	}
};
var $author$project$Main$gameStyle = _List_fromArray(
	[
		A2($elm$html$Html$Attributes$style, 'width', '100%'),
		A2($elm$html$Html$Attributes$style, 'max-width', '70rem')
	]);
var $elm$html$Html$input = _VirtualDom_node('input');
var $elm$json$Json$Encode$string = _Json_wrap;
var $elm$html$Html$Attributes$stringProperty = F2(
	function (key, string) {
		return A2(
			_VirtualDom_property,
			key,
			$elm$json$Json$Encode$string(string));
	});
var $elm$html$Html$Attributes$max = $elm$html$Html$Attributes$stringProperty('max');
var $elm$html$Html$Attributes$min = $elm$html$Html$Attributes$stringProperty('min');
var $elm$virtual_dom$VirtualDom$Normal = function (a) {
	return {$: 0, a: a};
};
var $elm$virtual_dom$VirtualDom$on = _VirtualDom_on;
var $elm$html$Html$Events$on = F2(
	function (event, decoder) {
		return A2(
			$elm$virtual_dom$VirtualDom$on,
			event,
			$elm$virtual_dom$VirtualDom$Normal(decoder));
	});
var $elm$html$Html$Events$onClick = function (msg) {
	return A2(
		$elm$html$Html$Events$on,
		'click',
		$elm$json$Json$Decode$succeed(msg));
};
var $elm$html$Html$Events$alwaysStop = function (x) {
	return _Utils_Tuple2(x, true);
};
var $elm$virtual_dom$VirtualDom$MayStopPropagation = function (a) {
	return {$: 1, a: a};
};
var $elm$html$Html$Events$stopPropagationOn = F2(
	function (event, decoder) {
		return A2(
			$elm$virtual_dom$VirtualDom$on,
			event,
			$elm$virtual_dom$VirtualDom$MayStopPropagation(decoder));
	});
var $elm$json$Json$Decode$field = _Json_decodeField;
var $elm$json$Json$Decode$at = F2(
	function (fields, decoder) {
		return A3($elm$core$List$foldr, $elm$json$Json$Decode$field, decoder, fields);
	});
var $elm$json$Json$Decode$string = _Json_decodeString;
var $elm$html$Html$Events$targetValue = A2(
	$elm$json$Json$Decode$at,
	_List_fromArray(
		['target', 'value']),
	$elm$json$Json$Decode$string);
var $elm$html$Html$Events$onInput = function (tagger) {
	return A2(
		$elm$html$Html$Events$stopPropagationOn,
		'input',
		A2(
			$elm$json$Json$Decode$map,
			$elm$html$Html$Events$alwaysStop,
			A2($elm$json$Json$Decode$map, tagger, $elm$html$Html$Events$targetValue)));
};
var $elm$html$Html$p = _VirtualDom_node('p');
var $author$project$Main$standardFontSize = A2($elm$html$Html$Attributes$style, 'font-size', '2rem');
var $elm$virtual_dom$VirtualDom$text = _VirtualDom_text;
var $elm$html$Html$text = $elm$virtual_dom$VirtualDom$text;
var $author$project$Main$showError = function (value) {
	if (!value.$) {
		var string = value.a;
		return A2(
			$elm$html$Html$p,
			_List_fromArray(
				[$author$project$Main$standardFontSize]),
			_List_fromArray(
				[
					$elm$html$Html$text(string)
				]));
	} else {
		return A2($elm$html$Html$div, _List_Nil, _List_Nil);
	}
};
var $author$project$Main$getGameStateMessage = F3(
	function (cardA, cardB, cardC) {
		return ((_Utils_cmp(cardA, cardC) < 0) && (_Utils_cmp(cardB, cardC) > 0)) ? A2(
			$elm$html$Html$div,
			_List_fromArray(
				[$author$project$Main$standardFontSize]),
			_List_fromArray(
				[
					$elm$html$Html$text('You won :)')
				])) : A2(
			$elm$html$Html$div,
			_List_fromArray(
				[$author$project$Main$standardFontSize]),
			_List_fromArray(
				[
					$elm$html$Html$text('You loose :(')
				]));
	});
var $elm$core$Maybe$map3 = F4(
	function (func, ma, mb, mc) {
		if (ma.$ === 1) {
			return $elm$core$Maybe$Nothing;
		} else {
			var a = ma.a;
			if (mb.$ === 1) {
				return $elm$core$Maybe$Nothing;
			} else {
				var b = mb.a;
				if (mc.$ === 1) {
					return $elm$core$Maybe$Nothing;
				} else {
					var c = mc.a;
					return $elm$core$Maybe$Just(
						A3(func, a, b, c));
				}
			}
		}
	});
var $elm$core$Maybe$withDefault = F2(
	function (_default, maybe) {
		if (!maybe.$) {
			var value = maybe.a;
			return value;
		} else {
			return _default;
		}
	});
var $author$project$Main$showLastWinLose = function (game) {
	return A2(
		$elm$core$Maybe$withDefault,
		$elm$html$Html$text('something is wrong'),
		A4($elm$core$Maybe$map3, $author$project$Main$getGameStateMessage, game.d, game.g, game.w));
};
var $author$project$Main$showLastGame = function (game) {
	if (game.$ === 1) {
		return A2(
			$elm$html$Html$div,
			_List_fromArray(
				[$author$project$Main$standardFontSize]),
			_List_fromArray(
				[
					$elm$html$Html$text('This is your first game')
				]));
	} else {
		var value = game.a;
		return A2(
			$elm$html$Html$div,
			_List_Nil,
			_List_fromArray(
				[
					$author$project$Main$showLastWinLose(value),
					A2(
					$elm$html$Html$p,
					$author$project$Main$cardContentPStyle,
					_List_fromArray(
						[
							$elm$html$Html$text(
							'Card 1: ' + $author$project$Main$cardToString(value.d))
						])),
					A2(
					$elm$html$Html$p,
					$author$project$Main$cardContentPStyle,
					_List_fromArray(
						[
							$elm$html$Html$text(
							'Card 2: ' + $author$project$Main$cardToString(value.g))
						])),
					A2(
					$elm$html$Html$p,
					$author$project$Main$cardContentPStyle,
					_List_fromArray(
						[
							$elm$html$Html$text(
							'Drawn Card: ' + $author$project$Main$cardToString(value.w))
						]))
				]));
	}
};
var $elm$html$Html$Attributes$type_ = $elm$html$Html$Attributes$stringProperty('type');
var $elm$html$Html$Attributes$value = $elm$html$Html$Attributes$stringProperty('value');
var $author$project$Main$showGame = function (model) {
	return (model.i <= 0) ? A2(
		$elm$html$Html$article,
		$author$project$Main$gameStyle,
		_List_fromArray(
			[
				A2(
				$elm$html$Html$p,
				$author$project$Main$cardContentPStyle,
				_List_fromArray(
					[
						$elm$html$Html$text('You lose all you money')
					])),
				A2(
				$elm$html$Html$button,
				_List_fromArray(
					[
						$elm$html$Html$Events$onClick($author$project$Main$NewGame),
						$author$project$Main$standardFontSize
					]),
				_List_fromArray(
					[
						$elm$html$Html$text('Again')
					]))
			])) : A2(
		$elm$html$Html$article,
		$author$project$Main$gameStyle,
		_List_fromArray(
			[
				A2(
				$elm$html$Html$p,
				$author$project$Main$cardContentPStyle,
				_List_fromArray(
					[
						$elm$html$Html$text(
						'Currently you have ' + ($elm$core$String$fromInt(model.i) + ' in your pocket.'))
					])),
				A2(
				$elm$html$Html$p,
				$author$project$Main$cardContentPStyle,
				_List_fromArray(
					[
						$elm$html$Html$text(
						'Card 1: ' + $author$project$Main$cardToString(model.a.d))
					])),
				A2(
				$elm$html$Html$p,
				$author$project$Main$cardContentPStyle,
				_List_fromArray(
					[
						$elm$html$Html$text(
						'Card 2: ' + $author$project$Main$cardToString(model.a.g))
					])),
				A2(
				$elm$html$Html$p,
				$author$project$Main$cardContentPStyle,
				_List_fromArray(
					[
						$elm$html$Html$text(
						'Your current bet is ' + $elm$core$String$fromInt(model.j))
					])),
				A2(
				$elm$html$Html$input,
				_List_fromArray(
					[
						$elm$html$Html$Attributes$type_('range'),
						$elm$html$Html$Attributes$max(
						$elm$core$String$fromInt(model.i)),
						$elm$html$Html$Attributes$min('0'),
						$elm$html$Html$Attributes$value(
						$elm$core$String$fromInt(model.j)),
						$elm$html$Html$Events$onInput($author$project$Main$UpdateBetValue)
					]),
				_List_Nil),
				A2(
				$elm$html$Html$button,
				_List_fromArray(
					[
						$elm$html$Html$Events$onClick($author$project$Main$Play),
						$author$project$Main$standardFontSize
					]),
				_List_fromArray(
					[
						$elm$html$Html$text('Play')
					])),
				$author$project$Main$showLastGame(model.D),
				$author$project$Main$showError(model.C)
			]));
};
var $elm$html$Html$h1 = _VirtualDom_node('h1');
var $author$project$Main$headerStyle = _List_fromArray(
	[
		A2($elm$html$Html$Attributes$style, 'font-size', '2rem'),
		A2($elm$html$Html$Attributes$style, 'text-align', 'center')
	]);
var $author$project$Main$showHeader = A2(
	$elm$html$Html$div,
	$author$project$Main$headerStyle,
	_List_fromArray(
		[
			A2(
			$elm$html$Html$h1,
			_List_fromArray(
				[
					A2($elm$html$Html$Attributes$style, 'font-size', '4rem')
				]),
			_List_fromArray(
				[
					$elm$html$Html$text('ACEY DUCEY CARD GAME')
				])),
			A2(
			$elm$html$Html$div,
			_List_Nil,
			_List_fromArray(
				[
					$elm$html$Html$text('Creative Computing Morristown, New Jersey')
				])),
			A2(
			$elm$html$Html$div,
			_List_Nil,
			_List_fromArray(
				[
					$elm$html$Html$text('\n        Acey-Ducey is played in the following manner. The Dealer (Computer) deals two cards face up. \n        You have an option to bet or not bet depending on whether or not you feel the card will have a value between the first two.\n        If you do not want to bet, bet 0.\n        ')
				]))
		]));
var $author$project$Main$view = function (model) {
	return A2(
		$elm$html$Html$div,
		$author$project$Main$centerHeadlineStyle,
		_List_fromArray(
			[
				$author$project$Main$showHeader,
				$author$project$Main$showGame(model)
			]));
};
var $author$project$Main$main = $elm$browser$Browser$element(
	{aB: $author$project$Main$init, aH: $author$project$Main$subscriptions, aJ: $author$project$Main$update, aK: $author$project$Main$view});
_Platform_export({'Main':{'init':$author$project$Main$main(
	$elm$json$Json$Decode$succeed(0))(0)}});}(this));

================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/docs/index.html
================================================
<!DOCTYPE html>
<html>

<head>
    <link rel="stylesheet" href="https://unpkg.com/@picocss/pico@latest/css/pico.min.css">
</head>

<body>
    <div id="elm-app-is-loaded-here"></div>
    <script src="app.min.js"></script>
    <script>
        var app = Elm.Main.init({
            node: document.getElementById("elm-app-is-loaded-here"),
            flags: {}
        });
    </script>
</body>

</html>

================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/elm.json
================================================
{
    "type": "application",
    "source-directories": [
        "src"
    ],
    "elm-version": "0.19.1",
    "dependencies": {
        "direct": {
            "elm/browser": "1.0.2",
            "elm/core": "1.0.5",
            "elm/html": "1.0.0",
            "elm/random": "1.0.0"
        },
        "indirect": {
            "elm/json": "1.1.3",
            "elm/time": "1.0.0",
            "elm/url": "1.0.0",
            "elm/virtual-dom": "1.0.2"
        }
    },
    "test-dependencies": {
        "direct": {},
        "indirect": {}
    }
}


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/package.json
================================================
{
  "name": "01_Acey_Ducey",
  "version": "1.0.0",
  "main": "index.js",
  "repository": "https://github.com/auryn31/01_Acey_Ducey.git",
  "author": "Auryn Engel <auryn.engel@sap.com>",
  "license": "MIT",
  "scripts": {
    "live": "elm-live src/Main.elm --proxy-prefix=/api --proxy-host=http://localhost:8080/api --open --start-page=resources/index.html -- --output=app.js",
    "build": "elm make src/Main.elm --optimize --output docs/app.js && cp -R resources/ docs/"
  },
  "devDependencies": {
    "elm-live": "^4.0.2",
    "uglify-js": "^3.15.3"
  }
}


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/resources/index.html
================================================
<!DOCTYPE html>
<html>

<head>
    <link rel="stylesheet" href="https://unpkg.com/@picocss/pico@latest/css/pico.min.css">
</head>

<body>
    <div id="elm-app-is-loaded-here"></div>
    <script src="app.js"></script>
    <script>
        var app = Elm.Main.init({
            node: document.getElementById("elm-app-is-loaded-here"),
            flags: {}
        });
    </script>
</body>

</html>

================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/src/Main.elm
================================================
module Main exposing (..)

import Browser
import Html exposing (..)
import Html.Attributes exposing (style, type_, value)
import Html.Events exposing (onInput)
import Random


main : Program () Model Msg
main =
    Browser.element
        { init = init
        , view = view
        , update = update
        , subscriptions = subscriptions
        }



-- Models


type alias Model =
    { money : Int
    , currentGame : Game
    , lastGame : Maybe Game
    , moneyBet : Int
    , error : Maybe String
    }


type alias Game =
    { cardA : Maybe Int
    , cardB : Maybe Int
    , cardC : Maybe Int
    }



-- Init


init : () -> ( Model, Cmd Msg )
init _ =
    ( { money = 100, currentGame = { cardA = Nothing, cardB = Nothing, cardC = Nothing }, lastGame = Nothing, moneyBet = 0, error = Nothing }, Random.generate NewCard newCard )



-- Messages


type Msg
    = BetMoney Int
    | UpdateBetValue String
    | NewCard Int
    | NewCardC Int
    | Play
    | NewGame



-- Update


update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    case msg of
        BetMoney bet ->
            ( { model | moneyBet = bet }, Cmd.none )

        UpdateBetValue value ->
            case String.toInt value of
                Just newValue ->
                    if newValue > model.money then
                        ( { model | error = Just "You cannot bet more than you have", moneyBet = model.money }, Cmd.none )

                    else
                        ( { model | moneyBet = newValue, error = Nothing }, Cmd.none )

                Nothing ->
                    ( { model | error = Just "Wrong input for bet" }, Cmd.none )

        NewCard card ->
            case model.currentGame.cardA of
                Nothing ->
                    let
                        currentGame =
                            model.currentGame
                    in
                    if card > 13 then
                        ( model, Random.generate NewCard newCard )

                    else
                        ( { model | currentGame = { currentGame | cardA = Just card } }, Random.generate NewCard newCard )

                Just cardA ->
                    let
                        currentGame =
                            model.currentGame
                    in
                    if card <= cardA then
                        ( { model | currentGame = { currentGame | cardA = Just card } }, Random.generate NewCard newCard )

                    else
                        ( { model | currentGame = { currentGame | cardB = Just card } }, Cmd.none )

        Play ->
            ( model, Random.generate NewCardC newCard )

        NewCardC card ->
            calculateNewState card model

        NewGame ->
            init ()


calculateNewState : Int -> Model -> ( Model, Cmd Msg )
calculateNewState cardC model =
    case model.currentGame.cardA of
        Just cardA ->
            case model.currentGame.cardB of
                Just cardB ->
                    let
                        currentGame =
                            model.currentGame
                    in
                    if cardC == cardA || cardC == cardB then
                        ( model, Random.generate NewCardC newCard )

                    else if cardA < cardC && cardC < cardB then
                        ( { model | money = model.money + model.moneyBet, currentGame = { currentGame | cardA = Nothing, cardB = Nothing }, lastGame = Just { cardA = model.currentGame.cardA, cardB = model.currentGame.cardB, cardC = Just cardC } }, Random.generate NewCard newCard )

                    else if model.moneyBet > model.money - model.moneyBet then
                        ( { model | money = model.money - model.moneyBet, moneyBet = model.money - model.moneyBet, currentGame = { currentGame | cardA = Nothing, cardB = Nothing }, lastGame = Just { cardA = model.currentGame.cardA, cardB = model.currentGame.cardB, cardC = Just cardC } }, Random.generate NewCard newCard )

                    else
                        ( { model | money = model.money - model.moneyBet, currentGame = { currentGame | cardA = Nothing, cardB = Nothing }, lastGame = Just { cardA = model.currentGame.cardA, cardB = model.currentGame.cardB, cardC = Just cardC } }, Random.generate NewCard newCard )

                Nothing ->
                    ( model, Cmd.none )

        Nothing ->
            ( model, Cmd.none )


subscriptions : Model -> Sub Msg
subscriptions _ =
    Sub.none



-- Views


view : Model -> Html Msg
view model =
    div centerHeadlineStyle
        [ showHeader
        , showGame model
        ]


showHeader : Html msg
showHeader =
    div headerStyle
        [ h1 [ style "font-size" "4rem" ] [ text "ACEY DUCEY CARD GAME" ]
        , div [] [ text "Creative Computing Morristown, New Jersey" ]
        , div []
            [ text """
        Acey-Ducey is played in the following manner. The Dealer (Computer) deals two cards face up. 
        You have an option to bet or not bet depending on whether or not you feel the card will have a value between the first two.
        If you do not want to bet, bet 0.
        """
            ]
        ]


showGame : Model -> Html Msg
showGame model =
    if model.money <= 0 then
        article gameStyle
            [ p cardContentPStyle [ text "You lose all you money" ]
            , button [ Html.Events.onClick NewGame, standardFontSize ] [ text "Again" ]
            ]

    else
        article gameStyle
            [ p cardContentPStyle [ text ("Currently you have " ++ String.fromInt model.money ++ " in your pocket.") ]
            , p cardContentPStyle [ text ("Card 1: " ++ cardToString model.currentGame.cardA) ]
            , p cardContentPStyle [ text ("Card 2: " ++ cardToString model.currentGame.cardB) ]
            , p cardContentPStyle [ text ("Your current bet is " ++ String.fromInt model.moneyBet) ]
            , input [ type_ "range", Html.Attributes.max (String.fromInt model.money), Html.Attributes.min "0", Html.Attributes.value (String.fromInt model.moneyBet), onInput UpdateBetValue ] []
            , button [ Html.Events.onClick Play, standardFontSize ] [ text "Play" ]
            , showLastGame model.lastGame
            , showError model.error
            ]


showLastGame : Maybe Game -> Html Msg
showLastGame game =
    case game of
        Nothing ->
            div [ standardFontSize ] [ text "This is your first game" ]

        Just value ->
            div []
                [ showLastWinLose value
                , p cardContentPStyle [ text ("Card 1: " ++ cardToString value.cardA) ]
                , p cardContentPStyle [ text ("Card 2: " ++ cardToString value.cardB) ]
                , p cardContentPStyle [ text ("Drawn Card: " ++ cardToString value.cardC) ]
                ]


showLastWinLose : Game -> Html Msg
showLastWinLose game =
    Maybe.map3 getGameStateMessage game.cardA game.cardB game.cardC |> Maybe.withDefault (text "something is wrong")


getGameStateMessage : Int -> Int -> Int -> Html Msg
getGameStateMessage cardA cardB cardC =
    if cardA < cardC && cardB > cardC then
        div [ standardFontSize ] [ text "You won :)" ]

    else
        div [ standardFontSize ] [ text "You loose :(" ]


showError : Maybe String -> Html Msg
showError value =
    case value of
        Just string ->
            p [ standardFontSize ] [ text string ]

        Nothing ->
            div [] []



-- Helper


cardToString : Maybe Int -> String
cardToString card =
    case card of
        Just value ->
            if value < 11 then
                String.fromInt value

            else
                case value of
                    11 ->
                        "Jack"

                    12 ->
                        "Queen"

                    13 ->
                        "King"

                    14 ->
                        "Ace"

                    _ ->
                        "impossible value"

        Nothing ->
            "-"


newCard : Random.Generator Int
newCard =
    Random.int 2 14



-- Styles


headerStyle : List (Attribute msg)
headerStyle =
    [ style "font-size" "2rem", style "text-align" "center" ]


cardContentPStyle : List (Attribute msg)
cardContentPStyle =
    [ style "font-size" "2rem"
    ]


gameStyle : List (Attribute msg)
gameStyle =
    [ style "width" "100%"
    , style "max-width" "70rem"
    ]


centerHeadlineStyle : List (Attribute msg)
centerHeadlineStyle =
    [ style "display" "grid"
    , style "place-items" "center"
    , style "margin" "2rem"
    ]


standardFontSize : Attribute msg
standardFontSize =
    style "font-size" "2rem"


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/go/main.go
================================================
package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"sort"
	"strconv"
	"strings"
	"time"
)

var welcome = `
Acey-Ducey is played in the following manner
The dealer (computer) deals two cards face up
You have an option to bet or not bet depending
on whether or not you feel the card will have
a value between the first two.
If you do not want to bet, input a 0
  `

func main() {
	rand.Seed(time.Now().UnixNano())
	scanner := bufio.NewScanner(os.Stdin)

	fmt.Println(welcome)

	for {
		play(100)
		fmt.Println("TRY AGAIN (YES OR NO)")
		scanner.Scan()
		response := scanner.Text()
		if strings.ToUpper(response) != "YES" {
			break
		}
	}

	fmt.Println("O.K., HOPE YOU HAD FUN!")
}

func play(money int) {
	scanner := bufio.NewScanner(os.Stdin)
	var bet int

	for {
		// Shuffle the cards
		cards := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
		rand.Shuffle(len(cards), func(i, j int) { cards[i], cards[j] = cards[j], cards[i] })

		// Take the first two for the dealer and sort
		dealerCards := cards[0:2]
		sort.Ints(dealerCards)

		fmt.Printf("YOU NOW HAVE %d DOLLARS.\n\n", money)
		fmt.Printf("HERE ARE YOUR NEXT TWO CARDS:\n%s\n%s", getCardName(dealerCards[0]), getCardName(dealerCards[1]))
		fmt.Printf("\n\n")

		//Check if Bet is Valid
		for {
			fmt.Println("WHAT IS YOUR BET:")
			scanner.Scan()
			b, err := strconv.Atoi(scanner.Text())
			if err != nil {
				fmt.Println("PLEASE ENTER A POSITIVE NUMBER")
				continue
			}
			bet = b

			if bet == 0 {
				fmt.Printf("CHICKEN!\n\n")
				goto there
			}

			if (bet > 0) && (bet <= money) {
				break
			}
		}

		// Draw Players Card
		fmt.Printf("YOUR CARD: %s\n", getCardName(cards[2]))
		if (cards[2] > dealerCards[0]) && (cards[2] < dealerCards[1]) {
			fmt.Println("YOU WIN!!!")
			money = money + bet
		} else {
			fmt.Println("SORRY, YOU LOSE")
			money = money - bet
		}
		fmt.Println()

		if money <= 0 {
			fmt.Printf("%s\n", "SORRY, FRIEND, BUT YOU BLEW YOUR WAD.")
			return
		}
	there:
	}
}

func getCardName(c int) string {
	switch c {
	case 11:
		return "JACK"
	case 12:
		return "QUEEN"
	case 13:
		return "KING"
	case 14:
		return "ACE"
	default:
		return strconv.Itoa(c)
	}
}


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/nim/aceyducey.nim
================================================
import std/[random,strutils]

var
  bet, cardA, cardB, cardC, stash: int
  retry: bool = true

randomize() # Seed the random number generator

proc printGreeting() =
  echo spaces(26),"ACEY DUCEY CARD GAME"
  echo spaces(15),"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY"
  echo """

ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER
THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP
YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING
ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE
A VALUE BETWEEN THE FIRST TWO.
IF YOU DO NOT WANT TO BET, INPUT A 0

"""

proc printBalance() =
  echo "YOU NOW HAVE ", stash," DOLLARS."
  echo ""

proc printCard(aCard: int) =
  case aCard:
  of 11: echo "=== JACK ==="
  of 12: echo "=== QUEEN ==="
  of 13: echo "=== KING ==="
  of 14: echo "=== ACE ==="
  else: echo "=== ", aCard, " ==="

proc drawDealerCards() =
  echo "HERE ARE YOUR NEXT TWO CARDS: "
  cardA = rand 2..14
  cardB = cardA # Copy cardA, so we can test cardB to be different
  while cardB == cardA:
    cardB = rand 2..14
  if cardA > cardB: # Make sure cardA is the smaller card
    swap cardA, cardB
  echo ""
  printCard cardA
  echo ""
  printCard cardB
  echo ""

proc drawPlayerCard() =
  cardC = rand 2..14
  printCard cardC
  echo ""

proc getBet(): int =
  result = stash + 1 #ensure we enter the loop
  while (result < 0) or (result > stash):
    echo "WHAT IS YOUR BET: "
    result = readLine(stdin).parseInt()
    if result > stash:
      echo "SORRY, MY FRIEND, BUT YOU BET TOO MUCH."
      echo "YOU HAVE ONLY ", stash, " DOLLARS TO BET."
    if result == 0:
      echo "CHICKEN!!"

proc tryAgain(): bool =
  echo "TRY AGAIN (YES OR NO)"
  var answer = readLine(stdin).normalize()
  result = (answer == "y") or (answer == "yes")

printGreeting()
while retry:
  stash = 100
  while stash > 0:
    printBalance()
    drawDealerCards()
    bet = getBet()
    echo ""
    drawPlayerCard()
    if (cardC >= cardA) and (cardC <= cardB):
      echo "YOU WIN!!!"
      stash += bet
    else:
      if bet > 0:
        echo "SORRY, YOU LOSE"
        stash -= bet
  echo "SORRY, FRIEND, BUT YOU BLEW YOUR WAD."
  echo ""
  retry = tryAgain()
echo "O.K., HOPE YOU HAD FUN!"


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/.gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.inc  text
*.pas  text
*.pp   text
*.lpk  text
*.lpi  text
*.lps  text
*.lpr  text
*.def  text
*.css  text
*.html text
*.xml  text
*.sql  text

# Declare files that will always have CRLF line endings on checkout.
*.dpk   text eol=crlf
*.dproj text eol=crlf

# Declare files that will always have LF line endings on checkout.


# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.exe binary
*.res binary
*.ico binary
*.dll binary

# Keep these files from archive/exports, mainly from production.
.gitignore      export-ignore
.gitattributes  export-ignore


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/.gitignore
================================================
# Basic Computer Programs project specific
aceyducey
aceyducey.exe

# Compiled l10n files: .mo should be ignored
*.mo

# Ghostwriter backups
*.backup

# nano editor backup files
*.swp

# Uncomment these types if you want even more clean repository. But be careful.
# It can make harm to an existing project source. Read explanations below.
#
# Resource files are binaries containing manifest, project icon and version info.
# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
*.res

# Delphi/Lazarus compiler-generated binaries (safe to delete)
*.exe
*.dll
*.bpl
*.bpi
*.dcp
*.so
*.apk
*.drc
*.map
*.dres
*.rsm
*.tds
*.dcu
*.lib
*.[ao]
*.or
*.ppu
*.dbg
*.compiled

# Delphi autogenerated files (duplicated info)
*.cfg
*Resource.rc

# Delphi local files (user-specific info)
*.local
*.identcache
*.projdata
*.tvsconfig
*.dsk

# Delphi history and backups
__history/
*.~*

# Lazarus history, backups and session
backup/
*.bak
*.lps

# Castalia statistics file
*.stat


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/README.md
================================================
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)

Conversion to [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) by Gustavo Carreno [gcarreno@github](https://github.com/gcarreno)


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/object-pascal/aceyducey.lpi
================================================
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
  <ProjectOptions>
    <Version Value="11"/>
    <General>
      <Flags>
        <MainUnitHasCreateFormStatements Value="False"/>
        <MainUnitHasTitleStatement Value="False"/>
        <MainUnitHasScaledStatement Value="False"/>
      </Flags>
      <SessionStorage Value="InProjectDir"/>
      <MainUnit Value="0"/>
      <Title Value="aceyducey"/>
      <UseAppBundle Value="False"/>
      <ResourceType Value="res"/>
    </General>
    <BuildModes Count="1">
      <Item1 Name="Default" Default="True"/>
    </BuildModes>
    <PublishOptions>
      <Version Value="2"/>
      <UseFileFilters Value="True"/>
    </PublishOptions>
    <RunParams>
      <FormatVersion Value="2"/>
      <Modes Count="0"/>
    </RunParams>
    <Units Count="3">
      <Unit0>
        <Filename Value="aceyducey.pas"/>
        <IsPartOfProject Value="True"/>
      </Unit0>
      <Unit1>
        <Filename Value="game.pas"/>
        <IsPartOfProject Value="True"/>
        <UnitName Value="Game"/>
      </Unit1>
      <Unit2>
        <Filename Value="deck.pas"/>
        <IsPartOfProject Value="True"/>
        <UnitName Value="Deck"/>
      </Unit2>
    </Units>
  </ProjectOptions>
  <CompilerOptions>
    <Version Value="11"/>
    <Target>
      <Filename Value="aceyducey"/>
    </Target>
    <SearchPaths>
      <IncludeFiles Value="$(ProjOutDir)"/>
      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
    </SearchPaths>
  </CompilerOptions>
  <Debugging>
    <Exceptions Count="3">
      <Item1>
        <Name Value="EAbort"/>
      </Item1>
      <Item2>
        <Name Value="ECodetoolError"/>
      </Item2>
      <Item3>
        <Name Value="EFOpenError"/>
      </Item3>
    </Exceptions>
  </Debugging>
</CONFIG>


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/object-pascal/aceyducey.pas
================================================
program aceyducey;

{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}

uses
  Game
, Deck
;

var
  Acey_Ducey: TGame;

begin
  Acey_Ducey:= TGame.Create;
  Acey_Ducey.Run;
end.


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/object-pascal/deck.pas
================================================
unit Deck;

{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}

interface

uses
  Classes
, SysUtils
;

type
{ TDeck }
  TDeck = class
  private
    FDealerLow: Integer;
    FDealerHigh: Integer;
    FPlayer: Integer;

    procedure PrintCard(const ACard: Integer);
  protected
  public
    property DealerLow: Integer
      read FDealerLow;
    property DealerHigh: Integer
      read FDealerHigh;
    property Player: Integer
      read FPlayer;

    procedure DrawCards;
    procedure ShowDealerCards;
    procedure ShowPlayerCard;
    function PlayerWins: Boolean;
  published
  end;

implementation

{ TDeck }

procedure TDeck.PrintCard(const ACard: Integer);
begin
  if ACard < 11 then
  begin
    Write(ACard);
  end;
  if ACard = 11 then
  begin
    Write('JACK');
  end;
  if ACard = 12 then
  begin
    Write('QUEEN');
  end;
  if ACard = 13 then
  begin
    Write('KING');
  end;
  if ACard = 14 then
  begin
    Write('ACE');
  end;
end;

procedure TDeck.DrawCards;
var
  tmp: Integer;
begin
  repeat
    FDealerLow:= Random(14) + 2;
  until (FDealerLow >= 2) and (FDealerLow <= 14);
  repeat
    FDealerHigh:= Random(14) + 2;
  until (FDealerHigh >= 2) and (FDealerHigh <= 14) and (FDealerLow <> FDealerHigh);
  if FDealerLow > FDealerHigh then
  begin
    tmp:= FDealerHigh;
    FDealerHigh:= FDealerLow;
    FDealerLow:= tmp;
  end;
  repeat
    FPlayer:= Random(14) + 2;
  until (FPlayer >= 2) and (FPlayer <= 14);
end;

procedure TDeck.ShowDealerCards;
begin
  Write('HERE ARE YOUR NEXT TWO CARDS: ');
  PrintCard(FDealerLow);
  Write(' ');
  PrintCard(FDealerHigh);
  WriteLN;
  WriteLN;
end;

procedure TDeck.ShowPlayerCard;
begin
  PrintCard(FPlayer);
  WriteLN;
  WriteLN;
end;

function TDeck.PlayerWins: Boolean;
begin
  Result:= (FPlayer > FDealerLow) and (FPlayer < FDealerHigh);
end;

end.


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/object-pascal/game.pas
================================================
unit Game;

{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}

interface

uses
  Classes
, SysUtils
, Crt
, Deck
;

type
{ TGame }
  TGame = class
  private
    FStash: Integer;
    FBet: Integer;
    FDeck: TDeck;

    procedure PrintGreeting;
    procedure PrintBalance;
    function GetBet: Integer;
    function TryAgain: Boolean;
  protected
  public
    constructor Create;
    destructor Destroy; override;

    procedure Run;
  published
  end;

implementation

{ TGame }

procedure TGame.PrintGreeting;
begin
  WriteLN(' ':26, 'ACEY DUCEY CARD GAME');
  WriteLN(' ':15, 'CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY');
  WriteLN;
  WriteLN;
  WriteLN('ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER ');
  WriteLN('THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP');
  WriteLN('YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING');
  WriteLN('ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE');
  WriteLN('A VALUE BETWEEN THE FIRST TWO.');
  WriteLN('IF YOU DO NOT WANT TO BET, INPUT A 0');
  WriteLN;
end;

procedure TGame.PrintBalance;
begin
  WriteLN('YOU NOW HAVE ', FStash,' DOLLARS.');
  WriteLN;
end;

function TGame.GetBet: Integer;
begin
  Result:= 0;
  repeat
    Write('WHAT IS YOUR BET: ');
    ReadLN(Result);
    if Result > FStash then
    begin
      WriteLn('SORRY, MY FRIEND, BUT YOU BET TOO MUCH.');
      WriteLn('YOU HAVE ONLY ', FStash,' DOLLARS TO BET.');
    end;
  until (Result >=0) and (Result <= FStash);
end;

function TGame.TryAgain: Boolean;
var
  answer: String;
begin
  Result:= False;
  Write('TRY AGAIN (YES OR NO)');
  ReadLn(answer);
  Result:= (LowerCase(answer)='yes') or (LowerCase(answer)='y');
end;

constructor TGame.Create;
begin
  Randomize;
  FDeck:= TDeck.Create;
end;

destructor TGame.Destroy;
begin
  FDeck.Free;
  inherited Destroy;
end;

procedure TGame.Run;
begin
  ClrScr;
  PrintGreeting;
  repeat
    FStash:= 100;
    repeat
      PrintBalance;
      FDeck.DrawCards;
      //DrawDealerCards;
      FDeck.ShowDealerCards;
      FBet:= GetBet;
      if FBet = 0 then
      begin
        WriteLN('CHICKEN!!');
        continue;
      end;
      //DrawPlayerCard;
      FDeck.ShowPlayerCard;
      //if (FCardC > FCardA) and (FCardC < FCardB) then
      if FDeck.PlayerWins then
      begin
        WriteLN('YOU WIN!!!');
        Inc(FStash, FBet)
      end
      else
      begin
        WriteLN('SORRY, YOU LOSE');
        Dec(FStash, FBet)
      end;
    until FStash = 0;
    WriteLN('SORRY, FRIEND, BUT YOU BLEW YOUR WAD.');
    WriteLN;
  until not TryAgain;
  WriteLN('O.K., HOPE YOU HAD FUN!');
end;

end.


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/simple/aceyducey.lpi
================================================
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
  <ProjectOptions>
    <Version Value="11"/>
    <General>
      <Flags>
        <MainUnitHasCreateFormStatements Value="False"/>
        <MainUnitHasTitleStatement Value="False"/>
        <MainUnitHasScaledStatement Value="False"/>
      </Flags>
      <SessionStorage Value="InProjectDir"/>
      <MainUnit Value="0"/>
      <Title Value="aceyducey"/>
      <UseAppBundle Value="False"/>
      <ResourceType Value="res"/>
    </General>
    <BuildModes Count="1">
      <Item1 Name="Default" Default="True"/>
    </BuildModes>
    <PublishOptions>
      <Version Value="2"/>
      <UseFileFilters Value="True"/>
    </PublishOptions>
    <RunParams>
      <FormatVersion Value="2"/>
      <Modes Count="0"/>
    </RunParams>
    <Units Count="1">
      <Unit0>
        <Filename Value="aceyducey.pas"/>
        <IsPartOfProject Value="True"/>
      </Unit0>
    </Units>
  </ProjectOptions>
  <CompilerOptions>
    <Version Value="11"/>
    <Target>
      <Filename Value="aceyducey"/>
    </Target>
    <SearchPaths>
      <IncludeFiles Value="$(ProjOutDir)"/>
      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
    </SearchPaths>
  </CompilerOptions>
  <Debugging>
    <Exceptions Count="3">
      <Item1>
        <Name Value="EAbort"/>
      </Item1>
      <Item2>
        <Name Value="ECodetoolError"/>
      </Item2>
      <Item3>
        <Name Value="EFOpenError"/>
      </Item3>
    </Exceptions>
  </Debugging>
</CONFIG>


================================================
FILE: 00_Alternate_Languages/01_Acey_Ducey/pascal/simple/aceyducey.pas
================================================
program aceyducey;

{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}

uses
 Crt;

var
  Stash: Integer;
  CardA: Integer;
  CardB: Integer;
  CardC: Integer;
  Bet: Integer;

procedure PrintGreeting;
begin
  WriteLN(' ':26, 'ACEY DUCEY CARD GAME');
  WriteLN(' ':15, 'CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY');
  WriteLN;
  WriteLN;
  WriteLN('ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER ');
  WriteLN('THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP');
  WriteLN('YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING');
  WriteLN('ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE');
  WriteLN('A VALUE BETWEEN THE FIRST TWO.');
  WriteLN('IF YOU DO NOT WANT TO BET, INPUT A 0');
  WriteLN;
end;

procedure PrintBalance;
begin
  WriteLN('YOU NOW HAVE ', Stash,' DOLLARS.');
  WriteLN;
end;

procedure PrintCard(const ACard: Integer);
begin
  if ACard < 11 then
  begin
    Write(ACard);
  end;
  if ACard = 11 then
  begin
    Write('JACK');
  end;
  if ACard = 12 then
  begin
    Write('QUEEN');
  end;
  if ACard = 13 then
  begin
    Write('KING');
  end;
  if ACard = 14 then
  begin
    Write('ACE');
  end;
end;

procedure DrawDealerCards;
var
  tmp: Integer;
begin
  Write('HERE ARE YOUR NEXT TWO CARDS: ');
  repeat
    CardA:= Random(14) + 2;
  until (CardA >= 2) and (CardA <= 14);
  repeat
    CardB:= Random(14) + 2;
  until (CardB >= 2) and (CardB <= 14) and (CardA <> CardB);
  if CardA > CardB then
  begin
    tmp:= CardB;
    CardB:= CardA;
    CardA:= tmp;
  end;
  PrintCard(CardA);
  Write(' ');
  PrintCard(CardB);
  WriteLN;
  WriteLN;
end;

procedure DrawPlayerCard;
begin
  repeat
    CardC:= Random(14) + 2;
  until (CardC >= 2) and (CardC <= 14);
  PrintCard(CardC);
  WriteLN;
  WriteLN;
end;

function GetBet: Integer;
begin
  Result:= 0;
  repeat
    Write('WHAT IS YOUR BET: ');
    ReadLN(Result);
    if Result > Stash then
    begin
      WriteLn('SORRY, MY FRIEND, BUT YOU BET TOO MUCH.');
      WriteLn('YOU HAVE ONLY ', Stash,' DOLLARS TO BET.');
    end;
  until (Result >=0) and (Result <= Stash);
end;

function TryAgain: Boolean;
var
  answer: String;
begin
  Result:= False;
  Write('TRY AGAIN (YES OR NO)');
  ReadLn(answer);
  Result:= (LowerCase(answer)='yes') or (LowerCase(answer)='y');
end;

begin
  Randomize;
  ClrScr;
  PrintGreeting;
  repeat
    Stash:= 100;
    repeat
      PrintBalance;
      DrawDealerCards;
      Bet:= GetBet;
      if Bet = 0 then
      begin
        WriteLN('CHICKEN!!');
        continue;
      end;
      DrawPlayerCard;
      if (CardC > CardA) and (CardC < CardB) then
      begin
        WriteLN('YOU WIN!!!');
        Inc(Stash, Bet)
      end
      else
      begin
        WriteLN('SORRY, YOU LOSE');
        Dec(Stash, Bet)
      end;
    until Stash = 0;
    WriteLN('SORRY, FRIEND, BUT YOU BLEW YOUR WAD.');
    WriteLN;
  until not TryAgain;
  WriteLN('O.K., HOPE YOU HAD FUN!');
end.


================================================
FILE: 00_Alternate_Languages/02_Amazing/MiniScript/README.md
================================================
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).

Conversion to [MiniScript](https://miniscript.org).

Ways to play:

1. Command-Line MiniScript:
Download for your system from https://miniscript.org/cmdline/, install, and then run the program with a command such as:

```
	miniscript amazing.ms
```
Note that because this program imports "listUtil", you will need to have a the standard MiniScript libraries somewhere in your import path.

2. Mini Micro:
Download Mini Micro from https://miniscript.org/MiniMicro/, launch, and then click the top disk slot and chose "Mount Folder..."  Select the folder containing the MiniScript program and this README file.  Then, at the Mini Micro command prompt, enter:

```
	load "amazing"
	run
```

================================================
FILE: 00_Alternate_Languages/02_Amazing/MiniScript/amazing.ms
================================================
import "listUtil"
print " "*28 + "Amazing Program"
print " "*15 + "Creative Computing  Morristown, New Jersey"
print; print; print; print
while true
	inp = input("What and your width and length? ")
	inp = inp.replace(",", " ")
	fields = inp.split
	h = fields[0].val; v = fields[-1].val
	if h > 1 and v > 1 then break
	print "Meaningless dimensions.  Try again."
end while

// order: keeps track of the order in which each cell was
// visited as we built the maze.  0 means not explored yet.  Indexed in [column][row] order.
// (This is W in the original BASIC program.)
order = list.init2d(h,v, 0)

// walls: keeps track of the walls below and to the right of each cell:
//		0: walls below and to the right
//		1: wall to the right
//		2: wall below
//		3: neither wall
// (This is V in the original BASIC program.)
// Note that a wall to the right can be removed from a
// valid entry by adding 2; a wall below can be removed
// by adding 1.
walls = list.init2d(h,v, 0)
print
print
print
print

// pick an exit at the top of the maze,
// and print the maze top
x = floor(rnd * h)
for i in range(0, h-1)
	if i == x then print ".  ","" else print ".--",""
end for
print "."

// walk from our starting position (by the exit) around
// the maze, clearing a wall on each step
c = 1		// current step number
order[x][0] = c; c += 1
r = x; s = 0		// [r][s] is our current position in the maze
while true
	// collect the set of directions we can move in
	dirs = []
	if r > 0 and order[r-1][s] == 0 then dirs.push "left"
	if s > 0 and order[r][s-1] == 0 then dirs.push "up"
	if r+1 < h and order[r+1][s] == 0 then dirs.push "right"
	if s+1 < v and order[r][s+1] == 0 then dirs.push "down"
	if not dirs then
		//print "Uh-oh, I'm stuck at " + r + "," + s
		// couldn't find any directions for this cell; 
		// find the next already-explored cell
		while true
			r += 1
			if r >= h then
				r = 0
				s += 1			
				if s >= v then s = 0
			end if
			if order[r][s] != 0 then break
		end while
		continue
	end if
	
	// pick a random available direction; move there,
	// clearing the wall in between and updating order
	d = dirs.any
	if d == "left" then
		walls[r-1][s] += 2
		r = r-1
	else if d == "up" then
		walls[r][s-1] += 1
		s = s-1
	else if d == "right" then
		walls[r][s] += 2
		r = r+1
	else if d == "down" then
		walls[r][s] += 1
		s = s+1
	end if
	
	//print "At step " + c + ", at " + r + "," + s
	order[r][s] = c
	c += 1
	if c > h*v then break
end while

// pick an exit at the bottom of the maze
x = floor(rnd * h)
walls[x][v-1] += 1

// print the (rest of the) maze
for j in range(0, v-1)
	print "I", ""
	for i in range(0, h-1)
	if walls[i][j] < 2 then print "  I", "" else print "   ", ""
	end for
	print
	for i in range(0, h-1)
		if walls[i][j] % 2 == 0 then print ":--", "" else print ":  ", ""
	end for
	print "."
end for


================================================
FILE: 00_Alternate_Languages/02_Amazing/README.md
================================================
Please refer to the `readme.md` in the parent folder. 

Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:

1. Popular (by TIOBE index)
2. Memory safe
3. Generally considered a 'scripting' language

We welcome additional ports, but these additional ports are for educational purposes only.

================================================
FILE: 00_Alternate_Languages/02_Amazing/amazing.bas
================================================
10 PRINT TAB(28);"AMAZING PROGRAM"
20 PRINT TAB(15);"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY"
30 PRINT:PRINT:PRINT:PRINT
100 INPUT "WHAT ARE YOUR WIDTH AND LENGTH";H,V
102 IF H<>1 AND V<>1 THEN 110
104 PRINT "MEANINGLESS DIMENSIONS.  TRY AGAIN.":GOTO 100
110 DIM W(H,V),V(H,V)
120 PRINT
130 PRINT
140 PRINT
150 PRINT
160 Q=0:Z=0:X=INT(RND(1)*H+1)
165 FOR I=1 TO H
170 IF I=X THEN 173
171 PRINT ".--";:GOTO 180
173 PRINT ".  ";
180 NEXT I
190 PRINT "."
195 C=1:W(X,1)=C:C=C+1
200 R=X:S=1:GOTO 260
210 IF R<>H THEN 240
215 IF S<>V THEN 230
220 R=1:S=1:GOTO 250
230 R=1:S=S+1:GOTO 250
240 R=R+1
250 IF W(R,S)=0 THEN 210
260 IF R-1=0 THEN 530
265 IF W(R-1,S)<>0 THEN 530
270 IF S-1=0 THEN 390
280 IF W(R,S-1)<>0 THEN 390
290 IF R=H THEN 330
300 IF W(R+1,S)<>0 THEN 330
310 X=INT(RND(1)*3+1)
320 ON X GOTO 790,820,860
330 IF S<>V THEN 340
334 IF Z=1 THEN 370
338 Q=1:GOTO 350
340 IF W(R,S+1)<>0 THEN 370
350 X=INT(RND(1)*3+1)
360 ON X GOTO 790,820,910
370 X=INT(RND(1)*2+1)
380 ON X GOTO 790,820
390 IF R=H THEN 470
400 IF W(R+1,S)<>0 THEN 470
405 IF S<>V THEN 420
410 IF Z=1 THEN 450
415 Q=1:GOTO 430
420 IF W(R,S+1)<>0 THEN 450
430 X=INT(RND(1)*3+1)
440 ON X GOTO 790,860,910
450 X=INT(RND(1)*2+1)
460 ON X GOTO 790,860
470 IF S<>V THEN 490
480 IF Z=1 THEN 520
485 Q=1:GOTO 500
490 IF W(R,S+1)<>0 THEN 520
500 X=INT(RND(1)*2+1)
510 ON X GOTO 790,910
520 GOTO 790
530 IF S-1=0 THEN 670
540 IF W(R,S-1)<>0 THEN 670
545 IF R=H THEN 610
547 IF W(R+1,S)<>0 THEN 610
550 IF S<>V THEN 560
552 IF Z=1 THEN 590
554 Q=1:GOTO 570
560 IF W(R,S+1)<>0 THEN 590
570 X=INT(RND(1)*3+1)
580 ON X GOTO 820,860,910
590 X=INT(RND(1)*2+1)
600 ON X GOTO 820,860
610 IF S<>V THEN 630
620 IF Z=1 THEN 660
625 Q=1:GOTO 640
630 IF W(R,S+1)<>0 THEN 660
640 X=INT(RND(1)*2+1)
650 ON X GOTO 820,910
660 GOTO 820
670 IF R=H THEN 740
680 IF W(R+1,S)<>0 THEN 740
685 IF S<>V THEN 700
690 IF Z=1 THEN 730
695 Q=1:GOTO 710
700 IF W(R,S+1)<>0 THEN 730
710 X=INT(RND(1)*2+1)
720 ON X GOTO 860,910
730 GOTO 860
740 IF S<>V THEN 760
750 IF Z=1 THEN 780
755 Q=1:GOTO 770
760 IF W(R,S+1)<>0 THEN 780
770 GOTO 910
780 GOTO 1000
790 W(R-1,S)=C
800 C=C+1:V(R-1,S)=2:R=R-1
810 IF C=H*V+1 THEN 1010
815 Q=0:GOTO 260
820 W(R,S-1)=C
830 C=C+1
840 V(R,S-1)=1:S=S-1:IF C=H*V+1 THEN 1010
850 Q=0:GOTO 260
860 W(R+1,S)=C
870 C=C+1:IF V(R,S)=0 THEN 880
875 V(R,S)=3:GOTO 890
880 V(R,S)=2
890 R=R+1
900 IF C=H*V+1 THEN 1010
905 GOTO 530
910 IF Q=1 THEN 960
920 W(R,S+1)=C:C=C+1:IF V(R,S)=0 THEN 940
930 V(R,S)=3:GOTO 950
940 V(R,S)=1
950 S=S+1:IF C=H*V+1 THEN 1010
955 GOTO 260
960 Z=1
970 IF V(R,S)=0 THEN 980
975 V(R,S)=3:Q=0:GOTO 1000
980 V(R,S)=1:Q=0:R=1:S=1:GOTO 250
1000 GOTO 210
1010 IF Z=1 THEN 1015
1011 X=INT(RND(1)*H+1)
1012 IF V(X,V)=0 THEN 1014
1013 V(X,V)=3: GOTO 1015
1014 V(X,V)=1
1015 FOR J=1 TO V
1016 PRINT "I";
1017 FOR I=1 TO H
1018 IF V(I,J)<2 THEN 1030
1020 PRINT "   ";
1021 GOTO 1040
1030 PRINT "  I";
1040 NEXT I
1041 PRINT
1043 FOR I=1 TO H
1045 IF V(I,J)=0 THEN 1060
1050 IF V(I,J)=2 THEN 1060
1051 PRINT ":  ";
1052 GOTO 1070
1060 PRINT ":--";
1070 NEXT I
1071 PRINT "."
1072 NEXT J
1073 END


================================================
FILE: 00_Alternate_Languages/02_Amazing/go/main.go
================================================
package main

import (
	"bufio"
	"fmt"
	"log"
	"math/rand"
	"os"
	"strconv"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())

	printWelcome()

	h, w := getDimensions()
	m := NewMaze(h, w)
	m.draw()
}

type direction int64

const (
	LEFT direction = iota
	UP
	RIGHT
	DOWN
)

const (
	EXIT_DOWN  = 1
	EXIT_RIGHT = 2
)

type maze struct {
	width    int
	length   int
	used     [][]int
	walls    [][]int
	enterCol int
}

func NewMaze(w, l int) maze {
	if (w < 2) || (l < 2) {
		log.Fatal("invalid dimensions supplied")
	}

	m := maze{width: w, length: l}

	m.used = make([][]int, l)
	for i := range m.used {
		m.used[i] = make([]int, w)
	}

	m.walls = make([][]int, l)
	for i := range m.walls {
		m.walls[i] = make([]int, w)
	}

	// randomly determine the entry column
	m.enterCol = rand.Intn(w)

	// determine layout of walls
	m.build()

	// add an exit
	col := rand.Intn(m.width - 1)
	row := m.length - 1
	m.walls[row][col] = m.walls[row][col] + 1

	return m
}

func (m *maze) build() {
	row := 0
	col := 0
	count := 2

	for {
		possibleDirs := m.getPossibleDirections(row, col)

		if len(possibleDirs) != 0 {
			row, col, count = m.makeOpening(possibleDirs, row, col, count)
		} else {
			for {
				if col != m.width-1 {
					col = col + 1
				} else if row != m.length-1 {
					row = row + 1
					col = 0
				} else {
					row = 0
					col = 0
				}

				if m.used[row][col] != 0 {
					break
				}
			}
		}

		if count == (m.width*m.length)+1 {
			break
		}
	}

}

func (m *maze) getPossibleDirections(row, col int) []direction {
	possible_dirs := make(map[direction]bool, 4)
	possible_dirs[LEFT] = true
	possible_dirs[UP] = true
	possible_dirs[RIGHT] = true
	possible_dirs[DOWN] = true

	if (col == 0) || (m.used[row][col-1] != 0) {
		possible_dirs[LEFT] = false
	}
	if (row == 0) || (m.used[row-1][col] != 0) {
		possible_dirs[UP] = false
	}
	if (col == m.width-1) || (m.used[row][col+1] != 0) {
		possible_dirs[RIGHT] = false
	}
	if (row == m.length-1) || (m.used[row+1][col] != 0) {
		possible_dirs[DOWN] = false
	}

	ret := make([]direction, 0)
	for d, v := range possible_dirs {
		if v {
			ret = append(ret, d)
		}
	}
	return ret
}

func (m *maze) makeOpening(dirs []direction, row, col, count int) (int, int, int) {
	dir := rand.Intn(len(dirs))

	if dirs[dir] == LEFT {
		col = col - 1
		m.walls[row][col] = int(EXIT_RIGHT)
	} else if dirs[dir] == UP {
		row = row - 1
		m.walls[row][col] = int(EXIT_DOWN)
	} else if dirs[dir] == RIGHT {
		m.walls[row][col] = m.walls[row][col] + EXIT_RIGHT
		col = col + 1
	} else if dirs[dir] == DOWN {
		m.walls[row][col] = m.walls[row][col] + EXIT_DOWN
		row = row + 1
	}

	m.used[row][col] = count
	count = count + 1
	return row, col, count
}

// draw the maze
func (m *maze) draw() {
	for col := 0; col < m.width; col++ {
		if col == m.enterCol {
			fmt.Print(".  ")
		} else {
			fmt.Print(".--")
		}
	}
	fmt.Println(".")

	for row := 0; row < m.length; row++ {
		fmt.Print("|")
		for col := 0; col < m.width; col++ {
			if m.walls[row][col] < 2 {
				fmt.Print("  |")
			} else {
				fmt.Print("   ")
			}
		}
		fmt.Println()
		for col := 0; col < m.width; col++ {
			if (m.walls[row][col] == 0) || (m.walls[row][col] == 2) {
				fmt.Print(":--")
			} else {
				fmt.Print(":  ")
			}
		}
		fmt.Println(".")
	}
}

func printWelcome() {
	fmt.Println("                            AMAZING PROGRAM")
	fmt.Print("               CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\n\n\n")
}

func getDimensions() (int, int) {
	scanner := bufio.NewScanner(os.Stdin)

	fmt.Println("Enter a width ( > 1 ):")
	scanner.Scan()
	w, err := strconv.Atoi(scanner.Text())
	if err != nil {
		log.Fatal("invalid dimension")
	}

	fmt.Println("Enter a height ( > 1 ):")
	scanner.Scan()
	h, err := strconv.Atoi(scanner.Text())
	if err != nil {
		log.Fatal("invalid dimension")
	}

	return w, h
}


================================================
FILE: 00_Alternate_Languages/02_Amazing/pascal/.gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.inc  text
*.pas  text
*.pp   text
*.lpk  text
*.lpi  text
*.lps  text
*.lpr  text
*.def  text
*.css  text
*.html text
*.xml  text
*.sql  text

# Declare files that will always have CRLF line endings on checkout.
*.dpk   text eol=crlf
*.dproj text eol=crlf

# Declare files that will always have LF line endings on checkout.


# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.exe binary
*.res binary
*.ico binary
*.dll binary

# Keep these files from archive/exports, mainly from production.
.gitignore      export-ignore
.gitattributes  export-ignore


================================================
FILE: 00_Alternate_Languages/02_Amazing/pascal/.gitignore
================================================
# Basic Computer Programs project specific
amazing
amazing.exe

# Compiled l10n files: .mo should be ignored
*.mo

# Ghostwriter backups
*.backup

# nano editor backup files
*.swp

# Uncomment these types if you want even more clean repository. But be careful.
# It can make harm to an existing project source. Read explanations below.
#
# Resource files are binaries containing manifest, project icon and version info.
# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
*.res

# Delphi/Lazarus compiler-generated binaries (safe to delete)
*.exe
*.dll
*.bpl
*.bpi
*.dcp
*.so
*.apk
*.drc
*.map
*.dres
*.rsm
*.tds
*.dcu
*.lib
*.[ao]
*.or
*.ppu
*.dbg
*.compiled

# Delphi autogenerated files (duplicated info)
*.cfg
*Resource.rc

# Delphi local files (user-specific info)
*.local
*.identcache
*.projdata
*.tvsconfig
*.dsk

# Delphi history and backups
__history/
*.~*

# Lazarus history, backups and session
backup/
*.bak
*.lps

# Castalia statistics file
*.stat


================================================
FILE: 00_Alternate_Languages/02_Amazing/pascal/README.md
================================================
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)

Conversion to [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language)) by Gustavo Carreno [gcarreno@github](https://github.com/gcarreno)


================================================
FILE: 00_Alternate_Languages/02_Amazing/pascal/object-pascal/amazing.lpi
================================================
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
  <ProjectOptions>
    <Version Value="12"/>
    <General>
      <Flags>
Download .txt
gitextract_eq2gu5pa/

├── .coveragerc
├── .github/
│   └── workflows/
│       ├── check-python.yml
│       ├── file-size.yml
│       └── rust.yml
├── .gitignore
├── .nojekyll
├── .pre-commit-config.yaml
├── 00_Alternate_Languages/
│   ├── 01_Acey_Ducey/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── aceyducey.ms
│   │   ├── README.md
│   │   ├── aceyducey.bas
│   │   ├── c++/
│   │   │   ├── README.md
│   │   │   ├── build/
│   │   │   │   ├── x64/
│   │   │   │   │   ├── Debug/
│   │   │   │   │   │   └── aceyducey.pdb
│   │   │   │   │   └── Release/
│   │   │   │   │       └── aceyducey.pdb
│   │   │   │   └── x86/
│   │   │   │       ├── Debug/
│   │   │   │       │   └── aceyducey.pdb
│   │   │   │       └── Release/
│   │   │   │           └── aceyducey.pdb
│   │   │   └── source/
│   │   │       ├── Aceyducey.cpp
│   │   │       └── Aceyducey.h
│   │   ├── d/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── aceyducey.d
│   │   │   └── aceyducey_literal.d
│   │   ├── elm/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── docs/
│   │   │   │   ├── app.js
│   │   │   │   └── index.html
│   │   │   ├── elm.json
│   │   │   ├── package.json
│   │   │   ├── resources/
│   │   │   │   └── index.html
│   │   │   └── src/
│   │   │       └── Main.elm
│   │   ├── go/
│   │   │   └── main.go
│   │   ├── nim/
│   │   │   └── aceyducey.nim
│   │   └── pascal/
│   │       ├── .gitattributes
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── object-pascal/
│   │       │   ├── aceyducey.lpi
│   │       │   ├── aceyducey.pas
│   │       │   ├── deck.pas
│   │       │   └── game.pas
│   │       └── simple/
│   │           ├── aceyducey.lpi
│   │           └── aceyducey.pas
│   ├── 02_Amazing/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── amazing.ms
│   │   ├── README.md
│   │   ├── amazing.bas
│   │   ├── go/
│   │   │   └── main.go
│   │   └── pascal/
│   │       ├── .gitattributes
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── object-pascal/
│   │       │   ├── amazing.lpi
│   │       │   ├── amazing.pas
│   │       │   ├── amazingapplication.pas
│   │       │   ├── maze.pas
│   │       │   └── room.pas
│   │       └── simple/
│   │           ├── amazing.lpi
│   │           └── amazing.pas
│   ├── 03_Animal/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── animal.ms
│   │   ├── README.md
│   │   ├── animal.bas
│   │   └── go/
│   │       └── main.go
│   ├── 04_Awari/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── awari.ms
│   │   ├── README.md
│   │   ├── awari.bas
│   │   └── elm/
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── docs/
│   │       │   └── index.html
│   │       ├── elm.json
│   │       ├── package.json
│   │       ├── resources/
│   │       │   └── index.html
│   │       └── src/
│   │           └── Main.elm
│   ├── 05_Bagels/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bagels.ms
│   │   ├── README.md
│   │   ├── bagels.bas
│   │   ├── go/
│   │   │   └── main.go
│   │   └── nim/
│   │       └── bagels.nim
│   ├── 06_Banner/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── banner.ms
│   │   ├── README.md
│   │   └── banner.bas
│   ├── 07_Basketball/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── basketball.ms
│   │   ├── README.md
│   │   └── basketball.bas
│   ├── 08_Batnum/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── batnum.ms
│   │   ├── README.md
│   │   ├── batnum.bas
│   │   └── go/
│   │       └── main.go
│   ├── 09_Battle/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── battle.ms
│   │   ├── README.md
│   │   ├── battle.bas
│   │   └── go/
│   │       └── main.go
│   ├── 10_Blackjack/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── blackjack.ms
│   │   ├── README.md
│   │   ├── blackjack.bas
│   │   └── pascal/
│   │       └── README.md
│   ├── 11_Bombardment/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bombardment.ms
│   │   ├── README.md
│   │   ├── bombardment.bas
│   │   └── go/
│   │       └── main.go
│   ├── 12_Bombs_Away/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bombsaway.ms
│   │   ├── README.md
│   │   ├── bombsaway.bas
│   │   └── go/
│   │       └── main.go
│   ├── 13_Bounce/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bounce.ms
│   │   ├── README.md
│   │   └── bounce.bas
│   ├── 14_Bowling/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bowling.ms
│   │   ├── README.md
│   │   └── bowling.bas
│   ├── 15_Boxing/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── boxing.ms
│   │   ├── README.md
│   │   └── boxing.bas
│   ├── 16_Bug/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bug.ms
│   │   ├── README.md
│   │   └── bug.bas
│   ├── 17_Bullfight/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bull.ms
│   │   ├── README.md
│   │   └── bullfight.bas
│   ├── 18_Bullseye/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bullseye.ms
│   │   ├── README.md
│   │   └── bullseye.bas
│   ├── 19_Bunny/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── bunny.ms
│   │   ├── README.md
│   │   └── bunny.bas
│   ├── 20_Buzzword/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── buzzword.ms
│   │   ├── README.md
│   │   ├── buzzword.bas
│   │   ├── go/
│   │   │   └── main.go
│   │   └── nim/
│   │       └── buzzword.nim
│   ├── 21_Calendar/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── calendar.ms
│   │   ├── README.md
│   │   └── calendar.bas
│   ├── 22_Change/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── change.ms
│   │   ├── README.md
│   │   ├── change.bas
│   │   └── go/
│   │       └── main.go
│   ├── 23_Checkers/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── checkers.ms
│   │   ├── README.md
│   │   ├── checkers.annotated.bas
│   │   └── checkers.bas
│   ├── 24_Chemist/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── chemist.ms
│   │   ├── README.md
│   │   └── chemist.bas
│   ├── 25_Chief/
│   │   ├── C/
│   │   │   └── chief.c
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── chief.ms
│   │   ├── README.md
│   │   ├── chief.bas
│   │   └── go/
│   │       └── main.go
│   ├── 26_Chomp/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── chomp.ms
│   │   ├── README.md
│   │   └── chomp.bas
│   ├── 27_Civil_War/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── civilwar.ms
│   │   ├── README.md
│   │   └── civilwar.bas
│   ├── 28_Combat/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── combat.ms
│   │   ├── README.md
│   │   └── combat.bas
│   ├── 29_Craps/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── craps.ms
│   │   ├── README.md
│   │   ├── craps.bas
│   │   ├── distributions.bas
│   │   └── nim/
│   │       └── craps.nim
│   ├── 30_Cube/
│   │   ├── C/
│   │   │   └── cube.c
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── cube.ms
│   │   ├── README.md
│   │   └── cube.bas
│   ├── 31_Depth_Charge/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── depthcharge.ms
│   │   ├── README.md
│   │   ├── depthcharge.bas
│   │   └── go/
│   │       └── main.go
│   ├── 32_Diamond/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── diamond.ms
│   │   ├── README.md
│   │   └── diamond.bas
│   ├── 33_Dice/
│   │   ├── C/
│   │   │   └── dice.c
│   │   ├── Julia/
│   │   │   ├── Dice.jl
│   │   │   └── README.md
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── dice.ms
│   │   ├── README.md
│   │   ├── dice.bas
│   │   ├── go/
│   │   │   └── main.go
│   │   └── nim/
│   │       └── dice.nim
│   ├── 34_Digits/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── digits.ms
│   │   ├── README.md
│   │   ├── digits.bas
│   │   └── go/
│   │       └── main.go
│   ├── 35_Even_Wins/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   ├── evenwins.ms
│   │   │   └── gameofevenwins.ms
│   │   ├── README.md
│   │   ├── evenwins.bas
│   │   ├── gameofevenwins.bas
│   │   └── go/
│   │       └── evenwins.go
│   ├── 36_Flip_Flop/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── flipflop.ms
│   │   ├── README.md
│   │   └── flipflop.bas
│   ├── 37_Football/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   ├── football.ms
│   │   │   └── ftball.ms
│   │   ├── README.md
│   │   ├── football.bas
│   │   └── ftball.bas
│   ├── 38_Fur_Trader/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── furtrader.ms
│   │   ├── README.md
│   │   ├── c/
│   │   │   ├── README.md
│   │   │   └── furtrader.c
│   │   ├── furtrader.bas
│   │   └── go/
│   │       └── main.go
│   ├── 39_Golf/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── golf.ms
│   │   ├── README.md
│   │   └── golf.bas
│   ├── 40_Gomoko/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── gomoko.ms
│   │   ├── README.md
│   │   └── gomoko.bas
│   ├── 41_Guess/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── guess.ms
│   │   ├── README.md
│   │   ├── go/
│   │   │   └── main.go
│   │   └── guess.bas
│   ├── 42_Gunner/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── gunner.ms
│   │   ├── README.md
│   │   ├── go/
│   │   │   └── main.go
│   │   └── gunner.bas
│   ├── 43_Hammurabi/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hammurabi.ms
│   │   ├── README.md
│   │   └── hammurabi.bas
│   ├── 44_Hangman/
│   │   ├── C/
│   │   │   ├── dictionary.txt
│   │   │   └── main.c
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hangman.ms
│   │   ├── README.md
│   │   └── hangman.bas
│   ├── 45_Hello/
│   │   ├── ANSI_C/
│   │   │   └── hello.c
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hello.ms
│   │   ├── README.md
│   │   ├── Swift/
│   │   │   └── hello.swift
│   │   ├── go/
│   │   │   └── main.go
│   │   ├── hello.bas
│   │   └── hello.c
│   ├── 46_Hexapawn/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hexapawn.ms
│   │   ├── README.md
│   │   └── hexapawn.bas
│   ├── 47_Hi-Lo/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hi-lo.ms
│   │   ├── README.md
│   │   ├── go/
│   │   │   └── main.go
│   │   └── hi-lo.bas
│   ├── 48_High_IQ/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── highiq.ms
│   │   ├── README.md
│   │   └── highiq.bas
│   ├── 49_Hockey/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hockey.ms
│   │   ├── README.md
│   │   └── hockey.bas
│   ├── 50_Horserace/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── horserace.ms
│   │   ├── README.md
│   │   └── horserace.bas
│   ├── 51_Hurkle/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── hurkle.ms
│   │   ├── README.md
│   │   └── hurkle.bas
│   ├── 52_Kinema/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── kinema.ms
│   │   ├── README.md
│   │   └── kinema.bas
│   ├── 53_King/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── king.ms
│   │   ├── README.md
│   │   ├── king.bas
│   │   └── king_variable_update.bas
│   ├── 54_Letter/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── letter.ms
│   │   ├── README.md
│   │   └── letter.bas
│   ├── 55_Life/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── life.ms
│   │   ├── README.md
│   │   └── life.bas
│   ├── 56_Life_for_Two/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── lifefortwo.ms
│   │   ├── README.md
│   │   └── lifefortwo.bas
│   ├── 57_Literature_Quiz/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── litquiz.ms
│   │   ├── README.md
│   │   └── litquiz.bas
│   ├── 58_Love/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── love.ms
│   │   ├── README.md
│   │   └── love.bas
│   ├── 59_Lunar_LEM_Rocket/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   ├── lem.ms
│   │   │   ├── lunar.ms
│   │   │   └── rocket.ms
│   │   ├── README.md
│   │   ├── lem.bas
│   │   ├── lunar.bas
│   │   └── rocket.bas
│   ├── 60_Mastermind/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── mastermind.ms
│   │   ├── README.md
│   │   └── mastermind.bas
│   ├── 61_Math_Dice/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── mathdice.ms
│   │   ├── README.md
│   │   ├── mathdice.bas
│   │   └── pascal/
│   │       ├── README.md
│   │       └── mathdice.pas
│   ├── 62_Mugwump/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── mugwump.ms
│   │   ├── README.md
│   │   └── mugwump.bas
│   ├── 63_Name/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── name.ms
│   │   ├── README.md
│   │   └── name.bas
│   ├── 64_Nicomachus/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── nicomachus.ms
│   │   ├── README.md
│   │   └── nicomachus.bas
│   ├── 65_Nim/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── nim.ms
│   │   ├── README.md
│   │   └── nim.bas
│   ├── 66_Number/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── number.ms
│   │   ├── README.md
│   │   └── number.bas
│   ├── 67_One_Check/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── onecheck.ms
│   │   ├── README.md
│   │   └── onecheck.bas
│   ├── 68_Orbit/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── orbit.ms
│   │   ├── README.md
│   │   └── orbit.bas
│   ├── 69_Pizza/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── pizza.ms
│   │   ├── README.md
│   │   └── pizza.bas
│   ├── 70_Poetry/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── poetry.ms
│   │   ├── README.md
│   │   ├── poetry.bas
│   │   └── poetry.pl
│   ├── 71_Poker/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── poker.ms
│   │   ├── README.md
│   │   └── poker.bas
│   ├── 72_Queen/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── queen.ms
│   │   ├── README.md
│   │   └── queen.bas
│   ├── 73_Reverse/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── reverse.ms
│   │   ├── README.md
│   │   └── reverse.bas
│   ├── 74_Rock_Scissors_Paper/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── rockscissors.ms
│   │   ├── README.md
│   │   ├── bash/
│   │   │   └── rockscissors.sh
│   │   ├── nim/
│   │   │   └── rockscissors.nim
│   │   └── rockscissors.bas
│   ├── 75_Roulette/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── roulette.ms
│   │   ├── README.md
│   │   └── roulette.bas
│   ├── 76_Russian_Roulette/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── russianroulette.ms
│   │   ├── README.md
│   │   └── russianroulette.bas
│   ├── 77_Salvo/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── salvo.ms
│   │   ├── README.md
│   │   └── salvo.bas
│   ├── 78_Sine_Wave/
│   │   ├── C++/
│   │   │   ├── README.md
│   │   │   └── sinewave.cpp
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── sinewave.ms
│   │   ├── README.md
│   │   ├── pascal/
│   │   │   └── sinewave.pas
│   │   └── sinewave.bas
│   ├── 79_Slalom/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── slalom.ms
│   │   ├── README.md
│   │   └── slalom.bas
│   ├── 80_Slots/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── slots.ms
│   │   ├── README.md
│   │   └── slots.bas
│   ├── 81_Splat/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── splat.ms
│   │   ├── README.md
│   │   └── splat.bas
│   ├── 82_Stars/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── stars.ms
│   │   ├── README.md
│   │   └── stars.bas
│   ├── 83_Stock_Market/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── stockmarket.ms
│   │   ├── README.md
│   │   └── stockmarket.bas
│   ├── 84_Super_Star_Trek/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── superstartrek.ms
│   │   ├── README.md
│   │   ├── instructions.txt
│   │   ├── superstartrek.bas
│   │   └── superstartrekins.bas
│   ├── 85_Synonym/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── synonym.ms
│   │   ├── README.md
│   │   └── synonym.bas
│   ├── 86_Target/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── target.ms
│   │   ├── README.md
│   │   └── target.bas
│   ├── 87_3-D_Plot/
│   │   ├── 3dplot.bas
│   │   ├── MiniScript/
│   │   │   ├── 3dplot.ms
│   │   │   └── README.md
│   │   ├── README.md
│   │   └── d/
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── threedeeplot.d
│   │       └── threedeeplot_random.d
│   ├── 88_3-D_Tic-Tac-Toe/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── qubit.ms
│   │   ├── README.md
│   │   └── qubit.bas
│   ├── 89_Tic-Tac-Toe/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   ├── tictactoe.ms
│   │   │   └── tictactoe2.ms
│   │   ├── README.md
│   │   ├── go/
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       └── tictactoe1.go
│   │   ├── pascal/
│   │   │   ├── README.md
│   │   │   └── tictactoe1.pas
│   │   ├── tictactoe1.bas
│   │   └── tictactoe2.bas
│   ├── 90_Tower/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── tower.ms
│   │   ├── README.md
│   │   └── tower.bas
│   ├── 91_Train/
│   │   ├── D/
│   │   │   ├── README.md
│   │   │   └── train.d
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── train.ms
│   │   ├── README.md
│   │   ├── nim/
│   │   │   └── train.nim
│   │   └── train.bas
│   ├── 92_Trap/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── trap.ms
│   │   ├── README.md
│   │   └── trap.bas
│   ├── 93_23_Matches/
│   │   ├── 23matches.bas
│   │   ├── MiniScript/
│   │   │   ├── 23matches.ms
│   │   │   └── README.md
│   │   └── README.md
│   ├── 94_War/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── war.ms
│   │   ├── README.md
│   │   ├── d/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   └── war.d
│   │   └── war.bas
│   ├── 95_Weekday/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── weekday.ms
│   │   ├── README.md
│   │   └── weekday.bas
│   ├── 96_Word/
│   │   ├── MiniScript/
│   │   │   ├── README.md
│   │   │   └── word.ms
│   │   ├── README.md
│   │   └── word.bas
│   └── README.md
├── 00_Common/
│   ├── BASIC_Tests/
│   │   ├── InputTest.bas
│   │   ├── OutputTest.bas
│   │   └── RndTest.bas
│   ├── README.md
│   ├── dotnet/
│   │   ├── Directory.Build.props
│   │   ├── Games.Common/
│   │   │   ├── Games.Common.csproj
│   │   │   ├── IO/
│   │   │   │   ├── ConsoleIO.cs
│   │   │   │   ├── IReadWrite.cs
│   │   │   │   ├── InsufficientInputException.cs
│   │   │   │   ├── Strings.cs
│   │   │   │   ├── TextIO.cs
│   │   │   │   ├── Token.cs
│   │   │   │   ├── TokenReader.cs
│   │   │   │   └── Tokenizer.cs
│   │   │   ├── Numbers/
│   │   │   │   └── Number.cs
│   │   │   ├── Randomness/
│   │   │   │   ├── IRandom.cs
│   │   │   │   ├── IRandomExtensions.cs
│   │   │   │   └── RandomNumberGenerator.cs
│   │   │   └── _InternalsVisibleTo.cs
│   │   ├── Games.Common.Test/
│   │   │   ├── Games.Common.Test.csproj
│   │   │   └── IO/
│   │   │       ├── TextIOTests/
│   │   │       │   ├── NumberFormatTests.cs
│   │   │       │   └── ReadMethodTests.cs
│   │   │       ├── TokenReaderTests.cs
│   │   │       ├── TokenTests.cs
│   │   │       └── TokenizerTests.cs
│   │   ├── Games.Common.sln
│   │   └── README.md
│   └── javascript/
│       ├── WebTerminal/
│       │   ├── HtmlTerminal.css
│       │   ├── HtmlTerminal.js
│       │   ├── terminal.html
│       │   └── terminal_tests.mjs
│       └── common.mjs
├── 00_Utilities/
│   ├── DotnetUtils/
│   │   ├── .editorconfig
│   │   ├── DotnetUtils/
│   │   │   ├── DotnetUtils.csproj
│   │   │   ├── Extensions.cs
│   │   │   ├── Functions.cs
│   │   │   ├── Globals.cs
│   │   │   ├── Methods.cs
│   │   │   ├── PortInfo.cs
│   │   │   ├── PortInfos.cs
│   │   │   └── Program.cs
│   │   └── DotnetUtils.sln
│   ├── README.md
│   ├── TODO.md
│   ├── VintageBASIC.xml
│   ├── bas2perl.pl
│   ├── build-index.js
│   ├── find-missing-implementations.js
│   ├── find-unimplemented.js
│   ├── javascript/
│   │   └── style_terminal.css
│   ├── jvmTestUtils/
│   │   └── kotlin/
│   │       └── test/
│   │           └── ConsoleTest.kt
│   ├── markdown_todo.py
│   ├── markdown_todo_rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   ├── python/
│   │   ├── ci-requirements.in
│   │   └── ci-requirements.txt
│   └── yatol.pl
├── 01_Acey_Ducey/
│   ├── README.md
│   ├── aceyducey.bas
│   ├── csharp/
│   │   ├── AceyDucey.csproj
│   │   ├── AceyDucey.sln
│   │   ├── Game.cs
│   │   ├── GameState.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── elixir/
│   │   └── acey_ducey.exs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── AceyDucey.java
│   │       ├── AceyDucey17.java
│   │       ├── AceyDuceyGame.java
│   │       └── Card.java
│   ├── javascript/
│   │   ├── .prettierrc.json
│   │   ├── README.md
│   │   ├── aceyducey.html
│   │   └── aceyducey.js
│   ├── kotlin/
│   │   └── aceyducey.kt
│   ├── lua/
│   │   ├── README.md
│   │   └── acey_ducey.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── aceyducey.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── acey_ducey.py
│   │   └── acey_ducey_oo.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── aceyducey.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── AceyDucey.sln
│       ├── AceyDucey.vb
│       ├── AceyDucey.vbproj
│       ├── Program.vb
│       └── README.md
├── 02_Amazing/
│   ├── README.md
│   ├── amazing.bas
│   ├── csharp/
│   │   ├── Amazing.cs
│   │   ├── Amazing.csproj
│   │   ├── Amazing.sln
│   │   └── README.md
│   ├── java/
│   │   ├── Amazing.java
│   │   ├── AmazingGame.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── amazing.html
│   │   └── amazing.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── amazing.pl
│   ├── python/
│   │   ├── README.md
│   │   └── amazing.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── amazing.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Amazing.sln
│       ├── Amazing.vbproj
│       ├── README.md
│       └── program.vb
├── 03_Animal/
│   ├── README.md
│   ├── animal.bas
│   ├── csharp/
│   │   ├── Animal.csproj
│   │   ├── Animal.sln
│   │   ├── Branch.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   ├── src/
│   │   │   └── Animal.java
│   │   └── test/
│   │       └── AnimalJavaTest.kt
│   ├── javascript/
│   │   ├── README.md
│   │   ├── animal.html
│   │   └── animal.js
│   ├── kotlin/
│   │   ├── README.md
│   │   ├── src/
│   │   │   └── Animal.kt
│   │   └── test/
│   │       └── AnimalKtTest.kt
│   ├── lua/
│   │   ├── Animal.lua
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── animal.pl
│   ├── python/
│   │   ├── README.md
│   │   └── animal.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── animal.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Animal/
│       │   ├── Animal.vbproj
│       │   ├── Branch.vb
│       │   ├── Game.vb
│       │   ├── Program.vb
│       │   └── Shared/
│       │       ├── ConsoleAdapter.vb
│       │       ├── ConsoleAdapterBase.vb
│       │       └── Extensions.vb
│       ├── Animal.Tests/
│       │   ├── Animal.Tests.vbproj
│       │   ├── EndOfInputsException.vb
│       │   ├── MockConsole.vb
│       │   └── TestContainer.vb
│       ├── Animal.sln
│       └── README.md
├── 04_Awari/
│   ├── README.md
│   ├── awari.bas
│   ├── csharp/
│   │   ├── Awari.csproj
│   │   ├── Awari.sln
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── Awari.java
│   │   ├── AwariGame.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── awari.html
│   │   └── awari.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── awari.pl
│   ├── python/
│   │   ├── README.md
│   │   └── awari.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── awari.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Awari.sln
│       ├── Awari.vbproj
│       └── README.md
├── 05_Bagels/
│   ├── README.md
│   ├── bagels.bas
│   ├── csharp/
│   │   ├── BagelNumber.cs
│   │   ├── Bagels.csproj
│   │   ├── Bagels.sln
│   │   ├── Game.cs
│   │   ├── GameBase.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── BagelGame.java
│   │   ├── Bagels.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bagels.html
│   │   └── bagels.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── bagels.kt
│   ├── lua/
│   │   ├── Bagels.lua
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bagels.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bagels.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── bagels.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Bagels.sln
│       ├── Bagels.vbproj
│       └── README.md
├── 06_Banner/
│   ├── README.md
│   ├── banner.bas
│   ├── csharp/
│   │   ├── README.md
│   │   ├── banner.cs
│   │   ├── banner.csproj
│   │   └── banner.sln
│   ├── java/
│   │   ├── Banner.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── banner.html
│   │   └── banner.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── pascal/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── banner.pl
│   ├── python/
│   │   ├── README.md
│   │   └── banner.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── banner.rb
│   └── vbnet/
│       ├── README.md
│       ├── banner.sln
│       ├── banner.vb
│       └── banner.vbproj
├── 07_Basketball/
│   ├── README.md
│   ├── basketball.bas
│   ├── csharp/
│   │   ├── Basketball.csproj
│   │   ├── Basketball.sln
│   │   ├── Clock.cs
│   │   ├── Defense.cs
│   │   ├── Game.cs
│   │   ├── IRandomExtensions.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── JumpShot.cs
│   │   ├── Plays/
│   │   │   ├── BallContest.cs
│   │   │   ├── HomeTeamPlay.cs
│   │   │   ├── Play.cs
│   │   │   └── VisitingTeamPlay.cs
│   │   ├── Probably.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── EndOfFirstHalf.txt
│   │   │   ├── EndOfGame.txt
│   │   │   ├── EndOfSecondHalf.txt
│   │   │   ├── Introduction.txt
│   │   │   ├── Resource.cs
│   │   │   ├── Score.txt
│   │   │   └── TwoMinutesLeft.txt
│   │   ├── Scoreboard.cs
│   │   ├── Shot.cs
│   │   └── Team.cs
│   ├── java/
│   │   ├── Basketball.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── basketball.html
│   │   └── basketball.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── pascal/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   ├── basketball-orig.pl
│   │   └── basketball.pl
│   ├── python/
│   │   ├── README.md
│   │   └── basketball.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── basketball.rb
│   └── vbnet/
│       ├── Basketball.sln
│       ├── Basketball.vbproj
│       └── README.md
├── 08_Batnum/
│   ├── README.md
│   ├── batnum.bas
│   ├── csharp/
│   │   ├── Batnum.csproj
│   │   ├── Batnum.sln
│   │   ├── BatnumGame.cs
│   │   ├── ConsoleUtilities.cs
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   ├── Resources.Designer.cs
│   │   │   ├── Resources.en.resx
│   │   │   ├── Resources.fr.resx
│   │   │   └── Resources.resx
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── BatNum.java
│   │       └── BatNumGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── batnum.html
│   │   └── batnum.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── pascal/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── batnum.pl
│   ├── python/
│   │   ├── README.md
│   │   └── batnum.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── batnum.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Program.vb
│       ├── README.md
│       ├── batnum.sln
│       └── batnum.vbproj
├── 09_Battle/
│   ├── README.md
│   ├── battle.bas
│   ├── csharp/
│   │   ├── Battle.csproj
│   │   ├── Battle.sln
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── .gitignore
│   │   ├── Battle.java
│   │   ├── Input.java
│   │   ├── README.md
│   │   ├── Sea.java
│   │   └── Ship.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── battle.html
│   │   └── battle.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── pascal/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── battle.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Battle.sln
│       ├── Battle.vbproj
│       └── README.md
├── 10_Blackjack/
│   ├── README.md
│   ├── blackjack.bas
│   ├── csharp/
│   │   ├── Blackjack.csproj
│   │   ├── Blackjack.sln
│   │   ├── Card.cs
│   │   ├── Deck.cs
│   │   ├── Game.cs
│   │   ├── Hand.cs
│   │   ├── Player.cs
│   │   ├── Program.cs
│   │   ├── Prompt.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   ├── src/
│   │   │   ├── Blackjack.java
│   │   │   ├── Card.java
│   │   │   ├── Deck.java
│   │   │   ├── Game.java
│   │   │   ├── Player.java
│   │   │   ├── ScoringUtils.java
│   │   │   └── UserIo.java
│   │   └── test/
│   │       ├── DeckTest.java
│   │       ├── GameTest.java
│   │       ├── ScoringUtilsTest.java
│   │       └── UserIoTest.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── blackjack.html
│   │   └── blackjack.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── blackjack.py
│   ├── ruby/
│   │   ├── README.md
│   │   ├── blackjack.rb
│   │   ├── game.rb
│   │   └── model/
│   │       ├── card_kind.rb
│   │       ├── hand.rb
│   │       ├── pack.rb
│   │       └── player.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Blackjack.sln
│       ├── Blackjack.vbproj
│       └── README.md
├── 11_Bombardment/
│   ├── README.md
│   ├── bombardment.bas
│   ├── csharp/
│   │   ├── Bombardment.cs
│   │   ├── Bombardment.csproj
│   │   ├── Bombardment.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Bombardment.java
│   │       └── BombardmentGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bombardment.html
│   │   └── bombardment.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bombardment.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bombardment.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── bombardment.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Bombardment.sln
│       ├── Bombardment.vbproj
│       └── README.md
├── 12_Bombs_Away/
│   ├── README.md
│   ├── bombsaway.bas
│   ├── csharp/
│   │   ├── BombsAway.sln
│   │   ├── BombsAwayConsole/
│   │   │   ├── BombsAwayConsole.csproj
│   │   │   ├── ConsoleUserInterface.cs
│   │   │   └── Program.cs
│   │   ├── BombsAwayGame/
│   │   │   ├── AlliesSide.cs
│   │   │   ├── BombsAwayGame.csproj
│   │   │   ├── EnemyArtillery.cs
│   │   │   ├── Game.cs
│   │   │   ├── GermanySide.cs
│   │   │   ├── IUserInterface.cs
│   │   │   ├── ItalySide.cs
│   │   │   ├── JapanSide.cs
│   │   │   ├── Mission.cs
│   │   │   ├── MissionSide.cs
│   │   │   └── Side.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── BombsAway.java
│   │       └── BombsAwayGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bombsaway.html
│   │   └── bombsaway.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── bombs_away.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── bombsaway.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bombs_away.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── BombsAway.sln
│       ├── BombsAway.vbproj
│       └── README.md
├── 13_Bounce/
│   ├── README.md
│   ├── bounce.bas
│   ├── csharp/
│   │   ├── Bounce.cs
│   │   ├── Bounce.csproj
│   │   ├── Bounce.sln
│   │   ├── Game.cs
│   │   ├── Graph.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Instructions.txt
│   │       ├── Resource.cs
│   │       └── Title.txt
│   ├── java/
│   │   ├── Bounce.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bounce.html
│   │   └── bounce.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bounce.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bounce.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── bounce.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Bounce.sln
│       ├── Bounce.vbproj
│       └── README.md
├── 14_Bowling/
│   ├── README.md
│   ├── bowling.bas
│   ├── csharp/
│   │   ├── Bowling.cs
│   │   ├── Bowling.csproj
│   │   ├── Bowling.sln
│   │   ├── FrameResult.cs
│   │   ├── GameResults.cs
│   │   ├── Pins.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Utility.cs
│   ├── java/
│   │   ├── Bowling.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bowling.html
│   │   └── bowling.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bowling.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bowling.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Bowling.sln
│       ├── Bowling.vbproj
│       └── README.md
├── 15_Boxing/
│   ├── README.md
│   ├── boxing.bas
│   ├── csharp/
│   │   ├── AttackStrategy.cs
│   │   ├── Boxer.cs
│   │   ├── Boxing.csproj
│   │   ├── Boxing.sln
│   │   ├── OpponentAttackStrategy.cs
│   │   ├── PlayerAttackStrategy.cs
│   │   ├── Program.cs
│   │   ├── Punch.cs
│   │   ├── README.md
│   │   ├── Round.cs
│   │   └── Utils.cs
│   ├── java/
│   │   ├── Basic.java
│   │   ├── Boxing.java
│   │   ├── BoxingGame.java
│   │   ├── GameSession.java
│   │   ├── Player.java
│   │   ├── Punch.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── boxing.html
│   │   └── boxing.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── boxing.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── boxing.py
│   │   ├── opponent-profile.json
│   │   └── player-profile.json
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Boxing.sln
│       ├── Boxing.vbproj
│       └── README.md
├── 16_Bug/
│   ├── README.md
│   ├── bug.bas
│   ├── csharp/
│   │   ├── Bug.cs
│   │   ├── Bug.csproj
│   │   ├── Bug.sln
│   │   ├── Game.cs
│   │   ├── Parts/
│   │   │   ├── Body.cs
│   │   │   ├── Feeler.cs
│   │   │   ├── Feelers.cs
│   │   │   ├── Head.cs
│   │   │   ├── IPart.cs
│   │   │   ├── Leg.cs
│   │   │   ├── Legs.cs
│   │   │   ├── Neck.cs
│   │   │   ├── ParentPart.cs
│   │   │   ├── Part.cs
│   │   │   ├── PartCollection.cs
│   │   │   └── Tail.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Instructions.txt
│   │       ├── Introduction.txt
│   │       ├── Message.cs
│   │       ├── PlayAgain.txt
│   │       └── Resource.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Bug.java
│   │       ├── BugGame.java
│   │       ├── ComputerBug.java
│   │       ├── Insect.java
│   │       └── PlayerBug.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bug.html
│   │   └── bug.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── bug.py
│   ├── ruby/
│   │   ├── Bug.rb
│   │   └── README.md
│   └── vbnet/
│       ├── Bug.sln
│       ├── Bug.vbproj
│       └── README.md
├── 17_Bullfight/
│   ├── README.md
│   ├── bullfight.bas
│   ├── csharp/
│   │   ├── Action.cs
│   │   ├── ActionResult.cs
│   │   ├── BullFight.cs
│   │   ├── Bullfight.csproj
│   │   ├── Bullfight.sln
│   │   ├── Controller.cs
│   │   ├── Events/
│   │   │   ├── BullCharging.cs
│   │   │   ├── Event.cs
│   │   │   ├── MatchCompleted.cs
│   │   │   ├── MatchStarted.cs
│   │   │   ├── PlayerGored.cs
│   │   │   └── PlayerSurvived.cs
│   │   ├── Mediator.cs
│   │   ├── Program.cs
│   │   ├── Quality.cs
│   │   ├── README.md
│   │   ├── Reward.cs
│   │   ├── RiskLevel.cs
│   │   └── View.cs
│   ├── java/
│   │   ├── Bullfight.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bullfight.html
│   │   └── bullfight.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── src/
│   │       └── bullfight/
│   │           └── Main.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── bullfight.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Bullfight.sln
│       ├── Bullfight.vbproj
│       └── README.md
├── 18_Bullseye/
│   ├── README.md
│   ├── bullseye.bas
│   ├── csharp/
│   │   ├── Bullseye.csproj
│   │   ├── Bullseye.sln
│   │   ├── BullseyeGame.cs
│   │   ├── Player.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Bullseye.java
│   │       ├── BullseyeGame.java
│   │       ├── Player.java
│   │       └── Shot.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bullseye.html
│   │   └── bullseye.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bullseye.pl
│   ├── python/
│   │   ├── README.md
│   │   └── bullseye.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       ├── main.rs
│   │       └── note on separation of converns for rust projects.md
│   └── vbnet/
│       ├── Bullseye.sln
│       ├── Bullseye.vbproj
│       └── README.md
├── 19_Bunny/
│   ├── README.md
│   ├── bunny.bas
│   ├── csharp/
│   │   ├── BasicData.cs
│   │   ├── Bunny.cs
│   │   ├── Bunny.csproj
│   │   ├── Bunny.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Bunny.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── bunny.html
│   │   └── bunny.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── bunny.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── bunny.py
│   │   └── data.json
│   ├── ruby/
│   │   ├── README.md
│   │   ├── bunny-faithful.rb
│   │   └── bunny-modern.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Bunny.sln
│       ├── Bunny.vbproj
│       └── README.md
├── 20_Buzzword/
│   ├── README.md
│   ├── buzzword.bas
│   ├── csharp/
│   │   ├── Buzzword.csproj
│   │   ├── Buzzword.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Buzzword.java
│   │       ├── BuzzwordSupplier.java
│   │       └── UserInterface.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── buzzword.html
│   │   └── buzzword.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── buzzword.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── buzzword.pl
│   ├── python/
│   │   ├── README.md
│   │   └── buzzword.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── buzzword.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Buzzword.sln
│       ├── Buzzword.vbproj
│       └── README.md
├── 21_Calendar/
│   ├── README.md
│   ├── calendar.bas
│   ├── csharp/
│   │   ├── Calendar.csproj
│   │   ├── Calendar.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── Calendar.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── calendar.html
│   │   └── calendar.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── calendar.pl
│   ├── python/
│   │   ├── README.md
│   │   └── calendar.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── calendar.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Calendar.sln
│       ├── Calendar.vbproj
│       └── README.md
├── 22_Change/
│   ├── README.md
│   ├── change.bas
│   ├── csharp/
│   │   ├── Change.csproj
│   │   ├── Change.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Change.java
│   │       └── ChangeGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── change.html
│   │   └── change.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── change.pl
│   ├── python/
│   │   ├── README.md
│   │   └── change.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Change.sln
│       ├── Change.vbproj
│       └── README.md
├── 23_Checkers/
│   ├── README.md
│   ├── checkers.annotated.bas
│   ├── checkers.bas
│   ├── csharp/
│   │   ├── Checkers.csproj
│   │   ├── Checkers.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── checkers.html
│   │   └── checkers.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── checkers.pl
│   ├── python/
│   │   ├── README.md
│   │   └── checkers.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── checkers.rb
│   └── vbnet/
│       ├── Checkers.sln
│       ├── Checkers.vbproj
│       └── README.md
├── 24_Chemist/
│   ├── README.md
│   ├── chemist.bas
│   ├── csharp/
│   │   ├── Chemist.csproj
│   │   ├── Chemist.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Chemist.java
│   │       └── ChemistGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── chemist.html
│   │   └── chemist.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── chemist.pl
│   ├── python/
│   │   ├── README.md
│   │   └── chemist.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── Chemist.sln
│       ├── Chemist.vbproj
│       └── README.md
├── 25_Chief/
│   ├── README.md
│   ├── chief.bas
│   ├── csharp/
│   │   ├── Chief.csproj
│   │   ├── Chief.sln
│   │   ├── Game.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Math.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Answer.txt
│   │       ├── Believe.txt
│   │       ├── Bet.txt
│   │       ├── Bye.txt
│   │       ├── Instructions.txt
│   │       ├── Lightning.txt
│   │       ├── Original.txt
│   │       ├── Ready.txt
│   │       ├── Resource.cs
│   │       ├── ShutUp.txt
│   │       ├── Title.txt
│   │       └── Working.txt
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Chief.java
│   │       └── ChiefGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── chief.html
│   │   └── chief.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── chief.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── chief.pl
│   ├── python/
│   │   ├── README.md
│   │   └── chief.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── chief.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Chief.sln
│       ├── Chief.vbproj
│       └── README.md
├── 26_Chomp/
│   ├── README.md
│   ├── chomp.bas
│   ├── csharp/
│   │   ├── Chomp.csproj
│   │   ├── Chomp.sln
│   │   ├── Cookie.cs
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── PlayerNumber.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Coordinates.txt
│   │       ├── HereWeGo.txt
│   │       ├── HowManyColumns.txt
│   │       ├── HowManyPlayers.txt
│   │       ├── HowManyRows.txt
│   │       ├── Introduction.txt
│   │       ├── NoFair.txt
│   │       ├── Player.txt
│   │       ├── Resource.cs
│   │       ├── Rules.txt
│   │       ├── TooManyColumns.txt
│   │       ├── TooManyRows.txt
│   │       └── YouLose.txt
│   ├── java/
│   │   ├── Chomp.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── chomp.html
│   │   └── chomp.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── chomp.pl
│   ├── python/
│   │   ├── README.md
│   │   └── chomp.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Chomp.sln
│       ├── Chomp.vbproj
│       └── README.md
├── 27_Civil_War/
│   ├── README.md
│   ├── civilwar.bas
│   ├── csharp/
│   │   ├── Army.cs
│   │   ├── Battle.cs
│   │   ├── CivilWar.csproj
│   │   ├── CivilWar.sln
│   │   ├── ConsoleUtils.cs
│   │   ├── GameOptions.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── src/
│   │       └── CivilWar.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── civilwar.html
│   │   └── civilwar.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── Civilwar.py
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── CivilWar.sln
│       ├── CivilWar.vbproj
│       └── README.md
├── 28_Combat/
│   ├── README.md
│   ├── combat.bas
│   ├── csharp/
│   │   ├── ArmedForces.cs
│   │   ├── Ceasefire.cs
│   │   ├── Combat.csproj
│   │   ├── Combat.sln
│   │   ├── Controller.cs
│   │   ├── FinalCampaign.cs
│   │   ├── InitialCampaign.cs
│   │   ├── MilitaryBranch.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── View.cs
│   │   ├── WarResult.cs
│   │   └── WarState.cs
│   ├── java/
│   │   ├── Combat.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── combat.html
│   │   └── combat.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── combat.pl
│   ├── python/
│   │   ├── README.md
│   │   └── combat.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Combat.sln
│       ├── Combat.vbproj
│       └── README.md
├── 29_Craps/
│   ├── README.md
│   ├── craps.bas
│   ├── csharp/
│   │   ├── .gitignore
│   │   ├── Craps/
│   │   │   ├── Craps.csproj
│   │   │   ├── CrapsGame.cs
│   │   │   ├── Dice.cs
│   │   │   ├── Program.cs
│   │   │   └── UserInterface.cs
│   │   ├── Craps.sln
│   │   ├── CrapsTester/
│   │   │   ├── CrapsTester.csproj
│   │   │   └── CrapsTests.cs
│   │   └── README.md
│   ├── distributions.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Craps.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── craps.html
│   │   └── craps.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── craps.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── craps.pl
│   ├── python/
│   │   ├── README.md
│   │   └── craps.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── craps.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── craps_game.rs
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Craps.sln
│       ├── Craps.vbproj
│       └── README.md
├── 30_Cube/
│   ├── README.md
│   ├── csharp/
│   │   ├── Cube.csproj
│   │   ├── Cube.sln
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── RandomExtensions.cs
│   │   ├── Resources/
│   │   │   ├── Balance.txt
│   │   │   ├── Bang.txt
│   │   │   ├── BetAgain.txt
│   │   │   ├── Bust.txt
│   │   │   ├── Congratulations.txt
│   │   │   ├── Goodbye.txt
│   │   │   ├── HowMuch.txt
│   │   │   ├── IllegalMove.txt
│   │   │   ├── Instructions.txt
│   │   │   ├── Introduction.txt
│   │   │   ├── NextMove.txt
│   │   │   ├── Resource.cs
│   │   │   ├── TryAgain.txt
│   │   │   ├── Wager.txt
│   │   │   └── YourMove.txt
│   │   └── ZerosGenerator.cs
│   ├── cube.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Cube.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── cube.html
│   │   └── cube.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── cube.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── cube.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── game.rs
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Cube.sln
│       ├── Cube.vbproj
│       └── README.md
├── 31_Depth_Charge/
│   ├── README.md
│   ├── csharp/
│   │   ├── Controller.cs
│   │   ├── DepthCharge.csproj
│   │   ├── DepthCharge.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── View.cs
│   ├── depthcharge.bas
│   ├── java/
│   │   ├── DepthCharge.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── depthcharge.html
│   │   └── depthcharge.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── depth-charge.pl
│   ├── python/
│   │   ├── README.md
│   │   └── depth_charge.py
│   ├── ruby/
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── depthcharge.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── DepthCharge.sln
│       ├── DepthCharge.vbproj
│       └── README.md
├── 32_Diamond/
│   ├── README.md
│   ├── csharp/
│   │   ├── Diamond.csproj
│   │   ├── Diamond.sln
│   │   ├── Pattern.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Introduction.txt
│   │   │   ├── Resource.cs
│   │   │   ├── Rules.txt
│   │   │   └── TypeNumber.txt
│   │   └── StringBuilderExtensions.cs
│   ├── diamond.bas
│   ├── java/
│   │   ├── Diamond.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── diamond.html
│   │   └── diamond.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── diamond.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── diamond.pl
│   ├── python/
│   │   ├── README.md
│   │   └── diamond.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── diamond.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── Diamond.sln
│       ├── Diamond.vbproj
│       └── README.md
├── 33_Dice/
│   ├── README.md
│   ├── csharp/
│   │   ├── Dice.csproj
│   │   ├── Dice.sln
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── RollGenerator.cs
│   ├── dice.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Dice.java
│   │       └── DiceGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── dice.html
│   │   └── dice.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── dice.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── dice.pl
│   ├── python/
│   │   ├── README.md
│   │   └── dice.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── dice.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Dice.sln
│       ├── Dice.vbproj
│       ├── README.md
│       └── program.vb
├── 34_Digits/
│   ├── README.md
│   ├── csharp/
│   │   ├── Digits.csproj
│   │   ├── Digits.sln
│   │   ├── Game.cs
│   │   ├── Guesser.cs
│   │   ├── IOExtensions.cs
│   │   ├── Matrix.cs
│   │   ├── Memory.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── ForInstructions.txt
│   │       ├── GuessResult.txt
│   │       ├── Headings.txt
│   │       ├── IWin.txt
│   │       ├── Instructions.txt
│   │       ├── Introduction.txt
│   │       ├── ItsATie.txt
│   │       ├── Resource.cs
│   │       ├── TenNumbers.txt
│   │       ├── Thanks.txt
│   │       ├── TryAgain.txt
│   │       ├── WantToTryAgain.txt
│   │       └── YouWin.txt
│   ├── digits.bas
│   ├── java/
│   │   ├── Digits.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── digits.html
│   │   └── digits.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── digits.pl
│   ├── python/
│   │   ├── Digits.py
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Digits.sln
│       ├── Digits.vbproj
│       └── README.md
├── 35_Even_Wins/
│   ├── README.md
│   ├── csharp/
│   │   ├── EvenWins.csproj
│   │   ├── EvenWins.sln
│   │   └── README.md
│   ├── evenwins.bas
│   ├── gameofevenwins.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── evenwins.html
│   │   ├── evenwins.js
│   │   ├── gameofevenwins.html
│   │   └── gameofevenwins.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── evenwins.pl
│   ├── python/
│   │   ├── README.md
│   │   └── evenwins.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── EvenWins.sln
│       ├── EvenWins.vbproj
│       └── README.md
├── 36_Flip_Flop/
│   ├── README.md
│   ├── csharp/
│   │   ├── FlipFlop.cs
│   │   ├── FlipFlop.csproj
│   │   ├── FlipFlop.sln
│   │   └── README.md
│   ├── flipflop.bas
│   ├── java/
│   │   ├── FlipFlop.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── flipflop.html
│   │   └── flipflop.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── flipflop-game.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── flipflop.pl
│   ├── python/
│   │   ├── README.md
│   │   └── flipflop.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── flipflop.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── game.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── FlipFlop.sln
│       ├── FlipFlop.vbproj
│       └── README.md
├── 37_Football/
│   ├── README.md
│   ├── csharp/
│   │   ├── Football.csproj
│   │   ├── Football.sln
│   │   └── README.md
│   ├── football.bas
│   ├── ftball.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── football.html
│   │   ├── football.js
│   │   ├── ftball.html
│   │   └── ftball.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   ├── data.json
│   │   └── football.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Football.sln
│       ├── Football.vbproj
│       └── README.md
├── 38_Fur_Trader/
│   ├── README.md
│   ├── c/
│   │   ├── README.md
│   │   └── furtrader.c
│   ├── csharp/
│   │   ├── FurTrader.csproj
│   │   ├── FurTrader.sln
│   │   ├── Game.cs
│   │   ├── GameState.cs
│   │   ├── Program.cs
│   │   └── README.md
│   ├── furtrader.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── FurTrader.java
│   │       ├── FurTraderGame.java
│   │       └── Pelt.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── furtrader.html
│   │   └── furtrader.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── furtrader.pl
│   ├── python/
│   │   ├── README.md
│   │   └── furtrader.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── FurTrader.sln
│       ├── FurTrader.vbproj
│       └── README.md
├── 39_Golf/
│   ├── README.md
│   ├── csharp/
│   │   ├── Golf.csproj
│   │   ├── Golf.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── golf.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── golf.html
│   │   └── golf.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── golf.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Golf.sln
│       ├── Golf.vbproj
│       └── README.md
├── 40_Gomoko/
│   ├── README.md
│   ├── csharp/
│   │   ├── Gomoko.csproj
│   │   ├── Gomoko.sln
│   │   └── README.md
│   ├── gomoko.bas
│   ├── java/
│   │   ├── Gomoko.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── gomoko.html
│   │   └── gomoko.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── gomoko.pl
│   ├── python/
│   │   ├── Gomoko.py
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Gomoko.sln
│       ├── Gomoko.vbproj
│       └── README.md
├── 41_Guess/
│   ├── README.md
│   ├── csharp/
│   │   ├── Game.cs
│   │   ├── Guess.csproj
│   │   ├── Guess.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── BlankLines.txt
│   │       ├── Good.txt
│   │       ├── Introduction.txt
│   │       ├── Limit.txt
│   │       ├── Resource.cs
│   │       ├── ShouldHave.txt
│   │       ├── ThatsIt.txt
│   │       ├── Thinking.txt
│   │       ├── TooHigh.txt
│   │       ├── TooLow.txt
│   │       └── VeryGood.txt
│   ├── guess.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Guess.java
│   │       └── GuessGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── guess.html
│   │   └── guess.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── guess.pl
│   ├── python/
│   │   ├── README.md
│   │   └── guess.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── guess.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Guess.sln
│       ├── Guess.vbproj
│       └── README.md
├── 42_Gunner/
│   ├── README.md
│   ├── csharp/
│   │   ├── Gunner.csproj
│   │   ├── Gunner.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── gunner.bas
│   ├── java/
│   │   ├── Gunner.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── gunner.html
│   │   └── gunner.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── gunner.pl
│   ├── python/
│   │   ├── README.md
│   │   └── gunner.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Gunner.sln
│       ├── Gunner.vbproj
│       └── README.md
├── 43_Hammurabi/
│   ├── README.md
│   ├── csharp/
│   │   ├── ActionResult.cs
│   │   ├── Controller.cs
│   │   ├── GameResult.cs
│   │   ├── GameState.cs
│   │   ├── GreatOffence.cs
│   │   ├── Hammurabi.csproj
│   │   ├── Hammurabi.sln
│   │   ├── PerformanceRating.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Rules.cs
│   │   └── View.cs
│   ├── hammurabi.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Hamurabi.java
│   │       └── HamurabiGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hammurabi.html
│   │   └── hammurabi.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── lib/
│   │       └── BasicComputerGames/
│   │           └── Hammurabi.pm
│   ├── python/
│   │   ├── README.md
│   │   └── hamurabi.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Hammurabi.sln
│       ├── Hammurabi.vbproj
│       └── README.md
├── 44_Hangman/
│   ├── README.md
│   ├── csharp/
│   │   ├── Graphic.cs
│   │   ├── Hangman.csproj
│   │   ├── Hangman.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── hangman.bas
│   ├── java/
│   │   ├── Hangman.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hangman.html
│   │   └── hangman.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── hangman.pl
│   ├── python/
│   │   ├── README.md
│   │   └── hangman.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── hangman.rb
│   └── vbnet/
│       ├── Hangman.sln
│       ├── Hangman.vbproj
│       └── README.md
├── 45_Hello/
│   ├── README.md
│   ├── csharp/
│   │   ├── Hello.csproj
│   │   ├── Hello.sln
│   │   └── README.md
│   ├── hello.bas
│   ├── java/
│   │   ├── Hello.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hello.html
│   │   └── hello.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── hello.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── hello.pl
│   ├── python/
│   │   ├── README.md
│   │   └── hello.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── hello.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Hello.sln
│       ├── Hello.vbproj
│       └── README.md
├── 46_Hexapawn/
│   ├── README.md
│   ├── csharp/
│   │   ├── Board.cs
│   │   ├── Cell.cs
│   │   ├── Computer.cs
│   │   ├── Game.cs
│   │   ├── GameSeries.cs
│   │   ├── Hexapawn.csproj
│   │   ├── Hexapawn.sln
│   │   ├── Human.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Move.cs
│   │   ├── Pawn.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Instructions.txt
│   │       ├── Resource.cs
│   │       └── Title.txt
│   ├── hexapawn.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hexapawn.html
│   │   └── hexapawn.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── hexapawn.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Hexapawn.sln
│       ├── Hexapawn.vbproj
│       └── README.md
├── 47_Hi-Lo/
│   ├── README.md
│   ├── csharp/
│   │   ├── HiLo.csproj
│   │   ├── HiLo.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── hi-lo.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── HiLo.java
│   │       └── HiLoGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hi-lo.html
│   │   └── hi-lo.js
│   ├── kotlin/
│   │   ├── HiLo.kt
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── hilo.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── hi-lo.pl
│   ├── python/
│   │   ├── README.md
│   │   └── hilo.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── hi_lo.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── HiLo.sln
│       ├── HiLo.vbproj
│       └── README.md
├── 48_High_IQ/
│   ├── README.md
│   ├── csharp/
│   │   ├── HighIQ.csproj
│   │   ├── HighIQ.sln
│   │   └── README.md
│   ├── d/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── highiq.d
│   ├── highiq.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── HighIQ.java
│   │       └── HighIQGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── highiq.html
│   │   └── highiq.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── High_IQ.py
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── HighIQ.sln
│       ├── HighIQ.vbproj
│       └── README.md
├── 49_Hockey/
│   ├── README.md
│   ├── csharp/
│   │   ├── Hockey.csproj
│   │   ├── Hockey.sln
│   │   └── README.md
│   ├── hockey.bas
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hockey.html
│   │   └── hockey.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── hockey.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Hockey.sln
│       ├── Hockey.vbproj
│       └── README.md
├── 50_Horserace/
│   ├── README.md
│   ├── csharp/
│   │   ├── Horserace.csproj
│   │   ├── Horserace.sln
│   │   └── README.md
│   ├── horserace.bas
│   ├── java/
│   │   ├── Horserace.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── horserace.html
│   │   └── horserace.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── horserace.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── game.rs
│   │       ├── horses.rs
│   │       ├── main.rs
│   │       ├── players.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Horserace.sln
│       ├── Horserace.vbproj
│       └── README.md
├── 51_Hurkle/
│   ├── README.md
│   ├── csharp/
│   │   ├── .gitignore
│   │   ├── CardinalDirection.cs
│   │   ├── ConsoleHurkleView.cs
│   │   ├── FailedGuessViewModel.cs
│   │   ├── GamePoint.cs
│   │   ├── GuessViewModel.cs
│   │   ├── Hurkle.csproj
│   │   ├── Hurkle.sln
│   │   ├── HurkleGame.cs
│   │   ├── IHurkleView.cs
│   │   ├── LossViewModel.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── VictoryViewModel.cs
│   ├── hurkle.bas
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Hurkle.java
│   │       └── HurkleGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── hurkle.html
│   │   └── hurkle.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── hurkle.pl
│   ├── python/
│   │   ├── README.md
│   │   └── hurkle.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── hurkle.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── game.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── Hurkle.sln
│       ├── Hurkle.vbproj
│       └── README.md
├── 52_Kinema/
│   ├── README.md
│   ├── csharp/
│   │   ├── Kinema.csproj
│   │   ├── Kinema.sln
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Kinema.java
│   │       └── KinemaGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── kinema.html
│   │   └── kinema.js
│   ├── kinema.bas
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── kinema.pl
│   ├── python/
│   │   ├── README.md
│   │   └── kinema.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── kinema.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Kinema.sln
│       ├── Kinema.vbproj
│       └── README.md
├── 53_King/
│   ├── README.md
│   ├── csharp/
│   │   ├── Country.cs
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── King.csproj
│   │   ├── King.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Reign.cs
│   │   ├── Resources/
│   │   │   ├── DeathsPollution.txt
│   │   │   ├── DeathsStarvation.txt
│   │   │   ├── Emigration.txt
│   │   │   ├── EndAlso.txt
│   │   │   ├── EndCongratulations.txt
│   │   │   ├── EndConsequences.txt
│   │   │   ├── EndForeignWorkers.txt
│   │   │   ├── EndManyDead.txt
│   │   │   ├── EndMoneyLeftOver.txt
│   │   │   ├── EndOneThirdDead.txt
│   │   │   ├── FuneralExpenses.txt
│   │   │   ├── GiveRallodsError.txt
│   │   │   ├── GiveRallodsPrompt.txt
│   │   │   ├── Goodbye.txt
│   │   │   ├── Harvest.txt
│   │   │   ├── HarvestReason.txt
│   │   │   ├── Immigration.txt
│   │   │   ├── InstructionsPrompt.txt
│   │   │   ├── InstructionsText.txt
│   │   │   ├── InsufficientReserves.txt
│   │   │   ├── LandPlanted.txt
│   │   │   ├── PlantLandError1.txt
│   │   │   ├── PlantLandError2.txt
│   │   │   ├── PlantLandError3.txt
│   │   │   ├── PlantLandPrompt.txt
│   │   │   ├── PollutionError.txt
│   │   │   ├── PollutionPrompt.txt
│   │   │   ├── Resource.cs
│   │   │   ├── SavedCountrymenPrompt.txt
│   │   │   ├── SavedLandError.txt
│   │   │   ├── SavedLandPrompt.txt
│   │   │   ├── SavedTreasuryPrompt.txt
│   │   │   ├── SavedWorkersPrompt.txt
│   │   │   ├── SavedYearsError.txt
│   │   │   ├── SavedYearsPrompt.txt
│   │   │   ├── SellLandError.txt
│   │   │   ├── SellLandErrorReason.txt
│   │   │   ├── SellLandPrompt.txt
│   │   │   ├── StatusSansWorkers.txt
│   │   │   ├── StatusWithWorkers.txt
│   │   │   ├── Title.txt
│   │   │   ├── TourismDecrease.txt
│   │   │   ├── TourismEarnings.txt
│   │   │   ├── TourismReason.txt
│   │   │   └── WorkerMigration.txt
│   │   ├── Result.cs
│   │   ├── ValidityTest.cs
│   │   └── Year.cs
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── king.html
│   │   └── king.js
│   ├── king.bas
│   ├── king_variable_update.bas
│   ├── kotlin/
│   │   ├── King.kt
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   ├── king.py
│   │   └── king_variable_update.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── King.sln
│       ├── King.vbproj
│       └── README.md
├── 54_Letter/
│   ├── README.md
│   ├── csharp/
│   │   ├── Game.cs
│   │   ├── GameState.cs
│   │   ├── Letter.csproj
│   │   ├── Letter.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Letter.java
│   │       └── LetterGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── letter.html
│   │   └── letter.js
│   ├── kotlin/
│   │   └── README.md
│   ├── letter.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── letter.pl
│   ├── python/
│   │   ├── README.md
│   │   └── letter.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── letter.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Letter.sln
│       ├── Letter.vbproj
│       └── README.md
├── 55_Life/
│   ├── README.md
│   ├── csharp/
│   │   ├── .gitignore
│   │   ├── Life.csproj
│   │   ├── Life.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── java/
│   │           └── Life.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── life.html
│   │   └── life.js
│   ├── kotlin/
│   │   └── README.md
│   ├── life.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── life.pl
│   ├── python/
│   │   ├── README.md
│   │   └── life.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── life.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Life.sln
│       ├── Life.vbproj
│       └── README.md
├── 56_Life_for_Two/
│   ├── README.md
│   ├── csharp/
│   │   ├── Board.cs
│   │   ├── Coordinates.cs
│   │   ├── Game.cs
│   │   ├── Generation.cs
│   │   ├── IOExtensions.cs
│   │   ├── Life.cs
│   │   ├── LifeforTwo.csproj
│   │   ├── LifeforTwo.sln
│   │   ├── Piece.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Draw.txt
│   │       ├── IllegalCoords.txt
│   │       ├── InitialPieces.txt
│   │       ├── Player.txt
│   │       ├── Resource.cs
│   │       ├── SameCoords.txt
│   │       ├── Title.txt
│   │       └── Winner.txt
│   ├── java/
│   │   ├── LifeForTwo.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── lifefortwo.html
│   │   └── lifefortwo.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lifefortwo.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── lifefortwo.pl
│   ├── python/
│   │   ├── README.md
│   │   └── life_for_two.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── LifeforTwo.sln
│       ├── LifeforTwo.vbproj
│       └── README.md
├── 57_Literature_Quiz/
│   ├── README.md
│   ├── csharp/
│   │   ├── LiteratureQuiz.csproj
│   │   ├── LiteratureQuiz.sln
│   │   ├── README.md
│   │   └── litquiz.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── LiteratureQuiz.java
│   │       └── LiteratureQuizGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── litquiz.html
│   │   ├── litquiz.js
│   │   └── litquiz.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── litquiz.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── litquiz.pl
│   ├── python/
│   │   ├── README.md
│   │   └── litquiz.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── LiteratureQuiz.sln
│       ├── LiteratureQuiz.vbproj
│       └── README.md
├── 58_Love/
│   ├── README.md
│   ├── csharp/
│   │   ├── Love.csproj
│   │   ├── Love.sln
│   │   ├── LovePattern.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Intro.txt
│   │   │   └── Resource.cs
│   │   ├── SourceCharacters.cs
│   │   └── StringBuilderExtensions.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Love.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── love.html
│   │   └── love.js
│   ├── kotlin/
│   │   └── README.md
│   ├── love.bas
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── love.pl
│   ├── python/
│   │   ├── README.md
│   │   └── love.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── love.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Love.sln
│       ├── Love.vbproj
│       └── README.md
├── 59_Lunar_LEM_Rocket/
│   ├── README.md
│   ├── csharp/
│   │   ├── LunarLEMRocket.csproj
│   │   ├── LunarLEMRocket.sln
│   │   └── README.md
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── lem.html
│   │   ├── lem.js
│   │   ├── lunar.html
│   │   └── lunar.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lem.bas
│   ├── lua/
│   │   └── README.md
│   ├── lunar.bas
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── lunar.py
│   ├── rocket.bas
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── README.md
│   │   └── rocket/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   └── vbnet/
│       ├── LunarLEMRocket.sln
│       ├── LunarLEMRocket.vbproj
│       └── README.md
├── 60_Mastermind/
│   ├── README.md
│   ├── csharp/
│   │   ├── Code.cs
│   │   ├── CodeFactory.cs
│   │   ├── ColorInfo.cs
│   │   ├── Colors.cs
│   │   ├── Command.cs
│   │   ├── Controller.cs
│   │   ├── EnumerableExtensions.cs
│   │   ├── Mastermind.csproj
│   │   ├── Mastermind.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── TurnResult.cs
│   │   └── View.cs
│   ├── java/
│   │   ├── Mastermind.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── mastermind.html
│   │   └── mastermind.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── mastermind.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── mastermind.pl
│   ├── python/
│   │   ├── README.md
│   │   └── mastermind.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Mastermind/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── Mastermind_refactored_for_conventions/
│   │       ├── Cargo.toml
│   │       ├── README.md
│   │       └── src/
│   │           ├── lib.rs
│   │           └── main.rs
│   └── vbnet/
│       ├── Mastermind.sln
│       ├── Mastermind.vbproj
│       └── README.md
├── 61_Math_Dice/
│   ├── README.md
│   ├── csharp/
│   │   ├── GameState.cs
│   │   ├── MathDice.csproj
│   │   ├── MathDice.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── StringExtensions.cs
│   ├── java/
│   │   ├── Die.java
│   │   ├── MathDice.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── mathdice.html
│   │   └── mathdice.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── mathdice.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── mathdice.pl
│   ├── python/
│   │   ├── README.md
│   │   └── mathdice.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── mathdice.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── MathDice.sln
│       ├── MathDice.vbproj
│       └── README.md
├── 62_Mugwump/
│   ├── README.md
│   ├── csharp/
│   │   ├── Distance.cs
│   │   ├── Game.cs
│   │   ├── Grid.cs
│   │   ├── IRandomExtensions.cs
│   │   ├── Mugwump.cs
│   │   ├── Mugwump.csproj
│   │   ├── Mugwump.sln
│   │   ├── Position.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Strings/
│   │   │   └── Intro.txt
│   │   └── TextIOExtensions.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Mugwump.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── mugwump.html
│   │   └── mugwump.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── mugwump.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── mugwump.pl
│   ├── python/
│   │   ├── README.md
│   │   └── mugwump.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── coordinate.rs
│   │       ├── draw.rs
│   │       ├── game.rs
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Mugwump.sln
│       ├── Mugwump.vbproj
│       └── README.md
├── 63_Name/
│   ├── README.md
│   ├── csharp/
│   │   ├── Name.csproj
│   │   ├── Name.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── StringExtensions.cs
│   ├── java/
│   │   ├── Name.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── name.html
│   │   └── name.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── name.lua
│   ├── name.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── name.pl
│   ├── python/
│   │   ├── README.md
│   │   └── name.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── name.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Name.sln
│       ├── Name.vbproj
│       └── README.md
├── 64_Nicomachus/
│   ├── README.md
│   ├── csharp/
│   │   ├── Nicomachus.csproj
│   │   ├── Nicomachus.sln
│   │   ├── README.md
│   │   └── program.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Nicomachus.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── nicomachus.html
│   │   └── nicomachus.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── nicomachus.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── nicomachus.pl
│   ├── python/
│   │   ├── README.md
│   │   └── nicomachus.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Nicomachus.sln
│       ├── Nicomachus.vbproj
│       └── README.md
├── 65_Nim/
│   ├── README.md
│   ├── csharp/
│   │   ├── Nim.csproj
│   │   ├── Nim.sln
│   │   └── README.md
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── nim.html
│   │   └── nim.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── nim.bas
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── Traditional_NIM.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── nim.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Nim.sln
│       ├── Nim.vbproj
│       └── README.md
├── 66_Number/
│   ├── README.md
│   ├── csharp/
│   │   ├── Number.csproj
│   │   ├── Number.sln
│   │   ├── README.md
│   │   └── program.cs
│   ├── java/
│   │   ├── 1/
│   │   │   └── Number.java
│   │   ├── 2/
│   │   │   └── Number.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── number.html
│   │   └── number.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── number.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── number.pl
│   ├── python/
│   │   ├── README.md
│   │   └── number.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Number.sln
│       ├── Number.vbproj
│       └── README.md
├── 67_One_Check/
│   ├── README.md
│   ├── csharp/
│   │   ├── Board.cs
│   │   ├── Game.cs
│   │   ├── Move.cs
│   │   ├── OneCheck.csproj
│   │   ├── OneCheck.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Bye.txt
│   │       ├── From.txt
│   │       ├── IllegalMove.txt
│   │       ├── Introduction.txt
│   │       ├── Resource.cs
│   │       ├── Results.txt
│   │       ├── To.txt
│   │       ├── TryAgain.txt
│   │       └── YesOrNo.txt
│   ├── java/
│   │   ├── OneCheck.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── onecheck.html
│   │   └── onecheck.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── onecheck.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── onecheck.pl
│   ├── python/
│   │   ├── README.md
│   │   └── onecheck.py
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── OneCheck.sln
│       ├── OneCheck.vbproj
│       └── README.md
├── 68_Orbit/
│   ├── README.md
│   ├── csharp/
│   │   ├── Orbit.csproj
│   │   ├── Orbit.sln
│   │   ├── README.md
│   │   └── program.cs
│   ├── java/
│   │   ├── Orbit.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── orbit.html
│   │   └── orbit.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── orbit.bas
│   ├── perl/
│   │   ├── README.md
│   │   └── orbit.pl
│   ├── python/
│   │   ├── README.md
│   │   └── orbit.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── orbit.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       └── main.rs
│   └── vbnet/
│       ├── Orbit.sln
│       ├── Orbit.vbproj
│       └── README.md
├── 69_Pizza/
│   ├── README.md
│   ├── csharp/
│   │   ├── CustomerMap.cs
│   │   ├── Pizza.csproj
│   │   ├── Pizza.sln
│   │   ├── PizzaGame.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── StringBuilderExtensions.cs
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Pizza.java
│   │       └── PizzaGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── pizza.html
│   │   └── pizza.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── pizza.pl
│   ├── pizza.bas
│   ├── python/
│   │   ├── README.md
│   │   └── pizza.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── pizza.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Pizza.sln
│       ├── Pizza.vbproj
│       └── README.md
├── 70_Poetry/
│   ├── README.md
│   ├── csharp/
│   │   ├── Context.cs
│   │   ├── Phrase.cs
│   │   ├── Poem.cs
│   │   ├── Poetry.csproj
│   │   ├── Poetry.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   └── Resources/
│   │       ├── Resource.cs
│   │       └── Title.txt
│   ├── java/
│   │   ├── Poetry.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── poetry.html
│   │   └── poetry.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── poetry.pl
│   ├── poetry.bas
│   ├── python/
│   │   ├── README.md
│   │   ├── poetry.pl
│   │   └── poetry.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── poetry.rb
│   └── vbnet/
│       ├── Poetry.sln
│       ├── Poetry.vbproj
│       └── README.md
├── 71_Poker/
│   ├── README.md
│   ├── csharp/
│   │   ├── Cards/
│   │   │   ├── Card.cs
│   │   │   ├── Deck.cs
│   │   │   ├── Hand.cs
│   │   │   ├── HandRank.cs
│   │   │   ├── Rank.cs
│   │   │   └── Suit.cs
│   │   ├── Game.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Players/
│   │   │   ├── Computer.cs
│   │   │   ├── Human.cs
│   │   │   └── Player.cs
│   │   ├── Poker.csproj
│   │   ├── Poker.sln
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Instructions.txt
│   │   │   ├── Resource.cs
│   │   │   └── Title.txt
│   │   ├── Strategies/
│   │   │   ├── Bet.cs
│   │   │   ├── Bluff.cs
│   │   │   ├── Check.cs
│   │   │   ├── Fold.cs
│   │   │   ├── None.cs
│   │   │   ├── Raise.cs
│   │   │   └── Strategy.cs
│   │   └── Table.cs
│   ├── java/
│   │   ├── Poker.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── poker.html
│   │   └── poker.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── poker.bas
│   ├── python/
│   │   └── README.md
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── Poker.sln
│       ├── Poker.vbproj
│       └── README.md
├── 72_Queen/
│   ├── README.md
│   ├── csharp/
│   │   ├── Computer.cs
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── Move.cs
│   │   ├── Position.cs
│   │   ├── Program.cs
│   │   ├── Queen.csproj
│   │   ├── Queen.sln
│   │   ├── README.md
│   │   ├── RandomExtensions.cs
│   │   └── Resources/
│   │       ├── AnyonePrompt.txt
│   │       ├── Board.txt
│   │       ├── ComputerMove.txt
│   │       ├── Congratulations.txt
│   │       ├── Forfeit.txt
│   │       ├── IWin.txt
│   │       ├── IllegalMove.txt
│   │       ├── IllegalStart.txt
│   │       ├── Instructions.txt
│   │       ├── InstructionsPrompt.txt
│   │       ├── MovePrompt.txt
│   │       ├── Resource.cs
│   │       ├── StartPrompt.txt
│   │       ├── Thanks.txt
│   │       ├── Title.txt
│   │       └── YesOrNo.txt
│   ├── java/
│   │   ├── Queen.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── queen.html
│   │   └── queen.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── queen.pl
│   ├── python/
│   │   ├── .flake8
│   │   ├── README.md
│   │   └── queen.py
│   ├── queen.bas
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── ai.rs
│   │       ├── game.rs
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── Queen.sln
│       ├── Queen.vbproj
│       └── README.md
├── 73_Reverse/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Reverse/
│   │   │   ├── Program.cs
│   │   │   ├── Reverse.csproj
│   │   │   └── Reverser.cs
│   │   ├── Reverse.Tests/
│   │   │   ├── Generators/
│   │   │   │   └── PositiveIntegerGenerator.cs
│   │   │   ├── Reverse.Tests.csproj
│   │   │   ├── ReverserTests.cs
│   │   │   └── TestReverser.cs
│   │   └── Reverse.sln
│   ├── java/
│   │   ├── README.md
│   │   └── Reverse.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── reverse.html
│   │   └── reverse.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── reverse.pl
│   ├── python/
│   │   ├── README.md
│   │   └── reverse.py
│   ├── reverse.bas
│   ├── ruby/
│   │   ├── README.md
│   │   └── reverse.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── README.md
│       ├── Reverse.sln
│       ├── Reverse.vb
│       └── Reverse.vbproj
├── 74_Rock_Scissors_Paper/
│   ├── README.md
│   ├── csharp/
│   │   ├── Choice.cs
│   │   ├── Choices.cs
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── RockScissorsPaper.csproj
│   │   └── RockScissorsPaper.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── RockScissors.java
│   ├── javascript/
│   │   ├── README.md
│   │   └── rockscissors.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── rockscissors.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── rockscissors.pl
│   ├── python/
│   │   ├── README.md
│   │   └── rockscissors.py
│   ├── rockscissors.bas
│   ├── ruby/
│   │   ├── README.md
│   │   └── rockscissors.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── README.md
│       ├── RockScissorsPaper.sln
│       └── RockScissorsPaper.vbproj
├── 75_Roulette/
│   ├── README.md
│   ├── csharp/
│   │   ├── Bet.cs
│   │   ├── BetType.cs
│   │   ├── Croupier.cs
│   │   ├── Game.cs
│   │   ├── IOExtensions.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── AgainPrompt.txt
│   │   │   ├── BetAlready.txt
│   │   │   ├── BetPrompt.txt
│   │   │   ├── BrokeHouse.txt
│   │   │   ├── Check.txt
│   │   │   ├── CheckPrompt.txt
│   │   │   ├── HowManyBetsPrompt.txt
│   │   │   ├── Instructions.txt
│   │   │   ├── InstructionsPrompt.txt
│   │   │   ├── LastDollar.txt
│   │   │   ├── Outcome.txt
│   │   │   ├── Resource.cs
│   │   │   ├── Slot.txt
│   │   │   ├── Spinning.txt
│   │   │   ├── Thanks.txt
│   │   │   ├── Title.txt
│   │   │   └── Totals.txt
│   │   ├── Roulette.csproj
│   │   ├── Roulette.sln
│   │   ├── Slot.cs
│   │   ├── Table.cs
│   │   └── Wheel.cs
│   ├── java/
│   │   ├── README.md
│   │   ├── iterative/
│   │   │   └── Roulette.java
│   │   └── oop/
│   │       ├── Bet.java
│   │       ├── Roulette.java
│   │       └── Wheel.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── roulette.html
│   │   └── roulette.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   ├── make-roulette-test.pl
│   │   ├── roulette-test.t
│   │   └── roulette.pl
│   ├── python/
│   │   ├── README.md
│   │   └── roulette.py
│   ├── roulette.bas
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── main.rs
│   │       └── util.rs
│   └── vbnet/
│       ├── README.md
│       ├── Roulette.sln
│       └── Roulette.vbproj
├── 76_Russian_Roulette/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── RussianRoulette.csproj
│   │   └── RussianRoulette.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── RussianRoulette.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── russianroulette.html
│   │   └── russianroulette.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── russianroulette.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── russianroulette.pl
│   ├── python/
│   │   ├── README.md
│   │   └── russianroulette.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── russianroulette.rb
│   ├── russianroulette.bas
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── README.md
│       ├── RussianRoulette.sln
│       └── RussianRoulette.vbproj
├── 77_Salvo/
│   ├── README.md
│   ├── csharp/
│   │   ├── Coordinate.cs
│   │   ├── Extensions/
│   │   │   ├── IOExtensions.cs
│   │   │   └── RandomExtensions.cs
│   │   ├── Fleet.cs
│   │   ├── Game.cs
│   │   ├── Offset.cs
│   │   ├── Position.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Coordinates.txt
│   │   │   ├── IHaveMoreShotsThanSquares.txt
│   │   │   ├── IHaveShots.txt
│   │   │   ├── IHit.txt
│   │   │   ├── IWon.txt
│   │   │   ├── Illegal.txt
│   │   │   ├── Resource.cs
│   │   │   ├── SeeShots.txt
│   │   │   ├── ShotBefore.txt
│   │   │   ├── Start.txt
│   │   │   ├── Title.txt
│   │   │   ├── Turn.txt
│   │   │   ├── WhereAreYourShips.txt
│   │   │   ├── YouHaveMoreShotsThanSquares.txt
│   │   │   ├── YouHaveShots.txt
│   │   │   ├── YouHit.txt
│   │   │   └── YouWon.txt
│   │   ├── Salvo.csproj
│   │   ├── Salvo.sln
│   │   ├── Ships/
│   │   │   ├── Battleship.cs
│   │   │   ├── Cruiser.cs
│   │   │   ├── Destroyer.cs
│   │   │   └── Ship.cs
│   │   ├── Targetting/
│   │   │   ├── ComputerShotSelector.cs
│   │   │   ├── HumanShotSelector.cs
│   │   │   ├── KnownHitsShotSelectionStrategy.cs
│   │   │   ├── SearchPattern.cs
│   │   │   ├── SearchPatternShotSelector.cs
│   │   │   ├── ShotSelectionStrategy.cs
│   │   │   └── ShotSelector.cs
│   │   ├── TurnHandler.cs
│   │   └── Winner.cs
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── salvo.html
│   │   └── salvo.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── salvo.py
│   ├── ruby/
│   │   └── README.md
│   ├── salvo.bas
│   └── vbnet/
│       ├── README.md
│       ├── Salvo.sln
│       └── Salvo.vbproj
├── 78_Sine_Wave/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── SineWave.csproj
│   │   └── SineWave.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── SineWave.java
│   ├── javascript/
│   │   ├── README.md
│   │   └── sinewave.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── sinewave.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── sinewave.pl
│   ├── python/
│   │   ├── README.md
│   │   └── sinewave.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── sinewave.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── sinewave.bas
│   └── vbnet/
│       ├── README.md
│       ├── SineWave.sln
│       └── SineWave.vbproj
├── 79_Slalom/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Slalom.csproj
│   │   ├── Slalom.sln
│   │   └── program.cs
│   ├── java/
│   │   ├── README.md
│   │   └── Slalom.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── slalom.html
│   │   └── slalom.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── slalom.py
│   ├── ruby/
│   │   └── README.md
│   ├── slalom.bas
│   └── vbnet/
│       ├── README.md
│       ├── Slalom.sln
│       └── Slalom.vbproj
├── 80_Slots/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Slots.csproj
│   │   ├── Slots.sln
│   │   └── slots.csx
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Slots.java
│   │       └── SlotsGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── slots.html
│   │   └── slots.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── slots.pl
│   ├── python/
│   │   ├── README.md
│   │   └── slots.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── slots.rb
│   ├── slots.bas
│   └── vbnet/
│       ├── README.md
│       ├── Slots.sln
│       └── Slots.vbproj
├── 81_Splat/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Splat.csproj
│   │   └── Splat.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Splat.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── splat.html
│   │   └── splat.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── splat.pl
│   ├── python/
│   │   ├── README.md
│   │   └── splat.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── celestial_body.rs
│   │       ├── game.rs
│   │       ├── main.rs
│   │       ├── stats.rs
│   │       └── utility.rs
│   ├── splat.bas
│   └── vbnet/
│       ├── README.md
│       ├── Splat.sln
│       └── Splat.vbproj
├── 82_Stars/
│   ├── README.md
│   ├── csharp/
│   │   ├── Game.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Instructions.txt
│   │   │   ├── Resource.cs
│   │   │   └── Title.txt
│   │   ├── Stars.csproj
│   │   └── Stars.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Stars.java
│   │       └── StarsGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── stars.html
│   │   └── stars.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── stars.pl
│   ├── python/
│   │   ├── README.md
│   │   └── stars.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── stars.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── rust_JWB/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── stars.bas
│   └── vbnet/
│       ├── README.md
│       ├── Stars.sln
│       └── Stars.vbproj
├── 83_Stock_Market/
│   ├── README.md
│   ├── csharp/
│   │   ├── Assets.cs
│   │   ├── Broker.cs
│   │   ├── Company.cs
│   │   ├── Controller.cs
│   │   ├── Extensions/
│   │   │   ├── EnumerableExtensions.cs
│   │   │   ├── ImmutableArrayExtensions.cs
│   │   │   └── RandomExtensions.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── StockMarket.cs
│   │   ├── StockMarket.csproj
│   │   ├── StockMarket.sln
│   │   ├── TradingDay.cs
│   │   ├── TransactionResult.cs
│   │   └── View.cs
│   ├── java/
│   │   ├── README.md
│   │   └── StockMarket.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── stockmarket.html
│   │   └── stockmarket.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── Stock_Market.py
│   ├── ruby/
│   │   └── README.md
│   ├── stockmarket.bas
│   └── vbnet/
│       ├── README.md
│       ├── StockMarket.sln
│       └── StockMarket.vbproj
├── 84_Super_Star_Trek/
│   ├── README.md
│   ├── csharp/
│   │   ├── Commands/
│   │   │   ├── Command.cs
│   │   │   ├── CommandExtensions.cs
│   │   │   └── CommandResult.cs
│   │   ├── Game.cs
│   │   ├── IRandomExtensions.cs
│   │   ├── IReadWriteExtensions.cs
│   │   ├── Objects/
│   │   │   ├── Enterprise.cs
│   │   │   ├── Klingon.cs
│   │   │   ├── Star.cs
│   │   │   └── Starbase.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── CombatArea.txt
│   │   │   ├── Congratulations.txt
│   │   │   ├── CourtMartial.txt
│   │   │   ├── Destroyed.txt
│   │   │   ├── EndOfMission.txt
│   │   │   ├── Enterprise.txt
│   │   │   ├── Instructions.txt
│   │   │   ├── LowShields.txt
│   │   │   ├── NoEnemyShips.txt
│   │   │   ├── NoStarbase.txt
│   │   │   ├── NowEntering.txt
│   │   │   ├── Orders.txt
│   │   │   ├── PermissionDenied.txt
│   │   │   ├── Protected.txt
│   │   │   ├── RegionNames.txt
│   │   │   ├── RelievedOfCommand.txt
│   │   │   ├── RepairEstimate.txt
│   │   │   ├── RepairPrompt.txt
│   │   │   ├── ReplayPrompt.txt
│   │   │   ├── ShieldsDropped.txt
│   │   │   ├── ShieldsSet.txt
│   │   │   ├── ShortRangeSensorsOut.txt
│   │   │   ├── StartText.txt
│   │   │   ├── Stranded.txt
│   │   │   ├── Strings.cs
│   │   │   └── Title.txt
│   │   ├── Space/
│   │   │   ├── Coordinates.cs
│   │   │   ├── Course.cs
│   │   │   ├── Galaxy.cs
│   │   │   ├── Quadrant.cs
│   │   │   └── QuadrantInfo.cs
│   │   ├── StringExtensions.cs
│   │   ├── SuperStarTrek.csproj
│   │   ├── SuperStarTrek.sln
│   │   ├── Systems/
│   │   │   ├── ComputerFunctions/
│   │   │   │   ├── ComputerFunction.cs
│   │   │   │   ├── CumulativeGalacticRecord.cs
│   │   │   │   ├── DirectionDistanceCalculator.cs
│   │   │   │   ├── GalacticReport.cs
│   │   │   │   ├── GalaxyRegionMap.cs
│   │   │   │   ├── NavigationCalculator.cs
│   │   │   │   ├── StarbaseDataCalculator.cs
│   │   │   │   ├── StatusReport.cs
│   │   │   │   └── TorpedoDataCalculator.cs
│   │   │   ├── DamageControl.cs
│   │   │   ├── LibraryComputer.cs
│   │   │   ├── LongRangeSensors.cs
│   │   │   ├── PhaserControl.cs
│   │   │   ├── PhotonTubes.cs
│   │   │   ├── ShieldControl.cs
│   │   │   ├── ShortRangeSensors.cs
│   │   │   ├── Subsystem.cs
│   │   │   └── WarpEngines.cs
│   │   └── Utils/
│   │       └── DirectionAndDistance.cs
│   ├── instructions.txt
│   ├── java/
│   │   ├── Enterprise.java
│   │   ├── GalaxyMap.java
│   │   ├── GameCallback.java
│   │   ├── README.md
│   │   ├── SuperStarTrekGame.java
│   │   ├── SuperStarTrekInstructions.java
│   │   └── Util.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── cli.mjs
│   │   ├── index.html
│   │   ├── package.json
│   │   └── superstartrek.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   ├── superstartrek.py
│   │   └── superstartrekins.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── readme.md
│   │   └── src/
│   │       ├── commands.rs
│   │       ├── input.rs
│   │       ├── main.rs
│   │       ├── model.rs
│   │       └── view.rs
│   ├── superstartrek.bas
│   ├── superstartrekins.bas
│   └── vbnet/
│       ├── README.md
│       ├── SuperStarTrek.sln
│       └── SuperStarTrek.vbproj
├── 85_Synonym/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Synonym.cs
│   │   ├── Synonym.csproj
│   │   └── Synonym.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Synonym.java
│   │       ├── SynonymGame.java
│   │       └── SynonymList.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── synonym.html
│   │   └── synonym.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── Synonym.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── synonym.pl
│   ├── python/
│   │   ├── README.md
│   │   └── synonym.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── synonim.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── synonym.bas
│   └── vbnet/
│       ├── README.md
│       ├── Synonym.sln
│       └── Synonym.vbproj
├── 86_Target/
│   ├── README.md
│   ├── csharp/
│   │   ├── Angle.cs
│   │   ├── Explosion.cs
│   │   ├── FiringRange.cs
│   │   ├── Game.cs
│   │   ├── Offset.cs
│   │   ├── Point.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── RandomExtensions.cs
│   │   ├── Strings/
│   │   │   └── TitleAndInstructions.txt
│   │   ├── Target.csproj
│   │   └── Target.sln
│   ├── java/
│   │   ├── README.md
│   │   └── Target.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── target.html
│   │   └── target.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── target.pl
│   ├── python/
│   │   ├── README.md
│   │   └── target.py
│   ├── ruby/
│   │   └── README.md
│   ├── target.bas
│   └── vbnet/
│       ├── README.md
│       ├── Target.sln
│       └── Target.vbproj
├── 87_3-D_Plot/
│   ├── 3dplot.bas
│   ├── README.md
│   ├── csharp/
│   │   ├── Function.cs
│   │   ├── Plot.csproj
│   │   ├── Plot.sln
│   │   ├── Program.cs
│   │   └── README.md
│   ├── d/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── threedeeplot.d
│   │   └── threedeeplot_random.d
│   ├── java/
│   │   ├── Plot3D.java
│   │   └── README.md
│   ├── javascript/
│   │   ├── 3dplot.html
│   │   ├── 3dplot.js
│   │   └── README.md
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── 3dplot.pl
│   │   └── README.md
│   ├── python/
│   │   ├── 3dplot.py
│   │   └── README.md
│   ├── ruby/
│   │   ├── 3dplot.rb
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── Plot.sln
│       ├── Plot.vbproj
│       └── README.md
├── 88_3-D_Tic-Tac-Toe/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── Qubic.cs
│   │   ├── QubicData.cs
│   │   ├── README.md
│   │   ├── ThreeDTicTacToe.csproj
│   │   └── ThreeDTicTacToe.sln
│   ├── java/
│   │   └── README.md
│   ├── javascript/
│   │   ├── README.md
│   │   ├── qubit.html
│   │   └── qubit.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   └── README.md
│   ├── python/
│   │   ├── README.md
│   │   └── qubit.py
│   ├── qubit.bas
│   ├── ruby/
│   │   └── README.md
│   └── vbnet/
│       ├── README.md
│       ├── ThreeDTicTacToe.sln
│       └── ThreeDTicTacToe.vbproj
├── 89_Tic-Tac-Toe/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── TicTacToe.sln
│   │   ├── tictactoe1/
│   │   │   ├── Program.cs
│   │   │   └── tictactoe1.csproj
│   │   └── tictactoe2/
│   │       ├── Program.cs
│   │       └── tictactoe2.csproj
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Board.java
│   │       └── TicTacToe2.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── tictactoe1.html
│   │   ├── tictactoe1.js
│   │   ├── tictactoe2.html
│   │   └── tictactoe2.js
│   ├── kotlin/
│   │   ├── Board.kt
│   │   ├── README.md
│   │   └── TicTacToe2.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── tictactoe2.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── TicTacToe_Hard.py
│   │   └── tictactoe2.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── tictactoe1.bas
│   ├── tictactoe2.bas
│   └── vbnet/
│       ├── README.md
│       ├── TicTacToe.sln
│       └── TicTacToe.vbproj
├── 90_Tower/
│   ├── README.md
│   ├── csharp/
│   │   ├── Game.cs
│   │   ├── Models/
│   │   │   ├── Needle.cs
│   │   │   └── Towers.cs
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Resources/
│   │   │   ├── Congratulations.txt
│   │   │   ├── DiskCountPrompt.txt
│   │   │   ├── DiskCountQuit.txt
│   │   │   ├── DiskCountRetry.txt
│   │   │   ├── DiskNotInPlay.txt
│   │   │   ├── DiskPrompt.txt
│   │   │   ├── DiskQuit.txt
│   │   │   ├── DiskRetry.txt
│   │   │   ├── DiskUnavailable.txt
│   │   │   ├── IllegalMove.txt
│   │   │   ├── Instructions.txt
│   │   │   ├── Intro.txt
│   │   │   ├── NeedlePrompt.txt
│   │   │   ├── NeedleQuit.txt
│   │   │   ├── NeedleRetry.txt
│   │   │   ├── PlayAgainPrompt.txt
│   │   │   ├── Strings.cs
│   │   │   ├── TaskFinished.txt
│   │   │   ├── Thanks.txt
│   │   │   ├── Title.txt
│   │   │   ├── TooManyMoves.txt
│   │   │   └── YesNoPrompt.txt
│   │   ├── Tower.csproj
│   │   ├── Tower.sln
│   │   └── UI/
│   │       ├── Input.cs
│   │       ├── Prompt.cs
│   │       └── TowerDisplay.cs
│   ├── java/
│   │   ├── README.md
│   │   └── Tower.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── tower.html
│   │   └── tower.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── tower.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── tower.pl
│   ├── python/
│   │   ├── README.md
│   │   └── tower.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── disk.rs
│   │       ├── game.rs
│   │       ├── main.rs
│   │       ├── needle.rs
│   │       └── util.rs
│   ├── tower.bas
│   └── vbnet/
│       ├── README.md
│       ├── Tower.sln
│       └── Tower.vbproj
├── 91_Train/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── Train/
│   │   │   ├── TrainGame.cs
│   │   │   └── TrainGame.csproj
│   │   ├── Train.sln
│   │   └── TrainTests/
│   │       ├── TrainGameTests.cs
│   │       └── TrainTests.csproj
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       └── Train.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── train.html
│   │   └── train.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   ├── README.md
│   │   └── train.lua
│   ├── perl/
│   │   ├── README.md
│   │   └── train.pl
│   ├── python/
│   │   ├── README.md
│   │   └── train.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── train.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       ├── lib.rs
│   │       └── main.rs
│   ├── train.bas
│   └── vbnet/
│       ├── README.md
│       ├── Train.sln
│       └── Train.vbproj
├── 92_Trap/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Trap.csproj
│   │   └── Trap.sln
│   ├── java/
│   │   ├── README.md
│   │   └── src/
│   │       ├── Trap.java
│   │       └── TrapGame.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── trap.html
│   │   └── trap.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── trap.pl
│   ├── python/
│   │   ├── README.md
│   │   └── trap.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── trap.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── trap.bas
│   └── vbnet/
│       ├── README.md
│       ├── Trap.sln
│       └── Trap.vbproj
├── 93_23_Matches/
│   ├── 23matches.bas
│   ├── README.md
│   ├── csharp/
│   │   ├── 23Matches.cs
│   │   └── csharp.csproj
│   ├── java/
│   │   ├── CoinSide.java
│   │   ├── Messages.java
│   │   ├── README.md
│   │   ├── TwentyThreeMatches.java
│   │   └── TwentyThreeMatchesGame.java
│   ├── javascript/
│   │   ├── 23matches.html
│   │   ├── 23matches.js
│   │   └── README.md
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── 23matches.pl
│   │   └── README.md
│   ├── python/
│   │   ├── 23matches.py
│   │   └── README.md
│   ├── ruby/
│   │   ├── 23_matches.rb
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   └── vbnet/
│       ├── README.md
│       ├── TwentyThreeMatches.sln
│       └── TwentyThreeMatches.vbproj
├── 94_War/
│   ├── README.md
│   ├── csharp/
│   │   ├── README.md
│   │   ├── War/
│   │   │   ├── Cards.cs
│   │   │   ├── Program.cs
│   │   │   ├── UserInterface.cs
│   │   │   └── War.csproj
│   │   ├── War.sln
│   │   └── WarTester/
│   │       ├── Tests.cs
│   │       └── WarTester.csproj
│   ├── d/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── war.d
│   ├── java/
│   │   ├── README.md
│   │   └── War.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── war.html
│   │   └── war.js
│   ├── kotlin/
│   │   ├── README.md
│   │   └── War.kt
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── war.pl
│   ├── python/
│   │   ├── README.md
│   │   ├── cards.json
│   │   └── war.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── war.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── vbnet/
│   │   ├── README.md
│   │   ├── War.sln
│   │   └── War.vbproj
│   └── war.bas
├── 95_Weekday/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── Weekday.csproj
│   │   └── Weekday.sln
│   ├── java/
│   │   ├── README.md
│   │   └── Weekday.java
│   ├── javascript/
│   │   ├── README.md
│   │   ├── weekday.html
│   │   └── weekday.js
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── weekday.pl
│   ├── python/
│   │   ├── README.md
│   │   └── weekday.py
│   ├── ruby/
│   │   └── README.md
│   ├── rust/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   └── src/
│   │       └── main.rs
│   ├── vbnet/
│   │   ├── README.md
│   │   ├── Weekday.sln
│   │   └── Weekday.vbproj
│   └── weekday.bas
├── 96_Word/
│   ├── README.md
│   ├── csharp/
│   │   ├── Program.cs
│   │   ├── README.md
│   │   ├── word.csproj
│   │   └── word.sln
│   ├── d/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   └── word.d
│   ├── java/
│   │   ├── README.md
│   │   └── Word.java
│   ├── javascript/
│   │   ├── README.md
│   │   └── word.mjs
│   ├── kotlin/
│   │   └── README.md
│   ├── lua/
│   │   └── README.md
│   ├── perl/
│   │   ├── README.md
│   │   └── word.pl
│   ├── python/
│   │   ├── README.md
│   │   └── word.py
│   ├── ruby/
│   │   ├── README.md
│   │   └── word.rb
│   ├── rust/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       ├── main.rs
│   │       ├── progress.rs
│   │       └── word_game.rs
│   ├── vbnet/
│   │   ├── Program.vb
│   │   ├── README.md
│   │   ├── word.sln
│   │   └── word.vbproj
│   └── word.bas
├── HOW_TO_RUN_THE_GAMES.md
├── LICENSE
├── README.md
├── index.html
└── pyproject.toml
Download .txt
Showing preview only (526K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6880 symbols across 984 files)

FILE: 00_Alternate_Languages/01_Acey_Ducey/c++/source/Aceyducey.cpp
  function main (line 6) | int main()
  function WelcomeMessage (line 20) | void WelcomeMessage()
  function Play (line 37) | void Play(bool& isPlaying)
  function isGameOver (line 88) | bool isGameOver()
  function DrawCard (line 99) | void DrawCard(short int& Card)

FILE: 00_Alternate_Languages/01_Acey_Ducey/elm/docs/app.js
  function F (line 4) | function F(arity, fun, wrapper) {
  function F2 (line 10) | function F2(fun) {
  function F3 (line 13) | function F3(fun) {
  function F4 (line 18) | function F4(fun) {
  function F5 (line 23) | function F5(fun) {
  function F6 (line 28) | function F6(fun) {
  function F7 (line 34) | function F7(fun) {
  function F8 (line 40) | function F8(fun) {
  function F9 (line 47) | function F9(fun) {
  function A2 (line 55) | function A2(fun, a, b) {
  function A3 (line 58) | function A3(fun, a, b, c) {
  function A4 (line 61) | function A4(fun, a, b, c, d) {
  function A5 (line 64) | function A5(fun, a, b, c, d, e) {
  function A6 (line 67) | function A6(fun, a, b, c, d, e, f) {
  function A7 (line 70) | function A7(fun, a, b, c, d, e, f, g) {
  function A8 (line 73) | function A8(fun, a, b, c, d, e, f, g, h) {
  function A9 (line 76) | function A9(fun, a, b, c, d, e, f, g, h, i) {
  function _Utils_eq (line 85) | function _Utils_eq(x, y)
  function _Utils_eqHelp (line 97) | function _Utils_eqHelp(x, y, depth, stack)
  function _Utils_cmp (line 157) | function _Utils_cmp(x, y, ord)
  function _Utils_Tuple2 (line 209) | function _Utils_Tuple2(a, b) { return { a: a, b: b }; }
  function _Utils_Tuple2_UNUSED (line 210) | function _Utils_Tuple2_UNUSED(a, b) { return { $: '#2', a: a, b: b }; }
  function _Utils_Tuple3 (line 212) | function _Utils_Tuple3(a, b, c) { return { a: a, b: b, c: c }; }
  function _Utils_Tuple3_UNUSED (line 213) | function _Utils_Tuple3_UNUSED(a, b, c) { return { $: '#3', a: a, b: b, c...
  function _Utils_chr (line 215) | function _Utils_chr(c) { return c; }
  function _Utils_chr_UNUSED (line 216) | function _Utils_chr_UNUSED(c) { return new String(c); }
  function _Utils_update (line 221) | function _Utils_update(oldRecord, updatedFields)
  function _Utils_ap (line 243) | function _Utils_ap(xs, ys)
  function _List_Cons (line 270) | function _List_Cons(hd, tl) { return { $: 1, a: hd, b: tl }; }
  function _List_Cons_UNUSED (line 271) | function _List_Cons_UNUSED(hd, tl) { return { $: '::', a: hd, b: tl }; }
  function _List_fromArray (line 276) | function _List_fromArray(arr)
  function _List_toArray (line 286) | function _List_toArray(xs)
  function _JsArray_singleton (line 350) | function _JsArray_singleton(value)
  function _JsArray_length (line 355) | function _JsArray_length(array)
  function _Debug_todo (line 516) | function _Debug_todo(moduleName, region)
  function _Debug_todoCase (line 523) | function _Debug_todoCase(moduleName, region, value)
  function _Debug_toString (line 533) | function _Debug_toString(value)
  function _Debug_toString_UNUSED (line 538) | function _Debug_toString_UNUSED(value)
  function _Debug_toAnsiString (line 543) | function _Debug_toAnsiString(ansi, value)
  function _Debug_addSlashes (line 664) | function _Debug_addSlashes(str, isChar)
  function _Debug_ctorColor (line 684) | function _Debug_ctorColor(ansi, string)
  function _Debug_numberColor (line 689) | function _Debug_numberColor(ansi, string)
  function _Debug_stringColor (line 694) | function _Debug_stringColor(ansi, string)
  function _Debug_charColor (line 699) | function _Debug_charColor(ansi, string)
  function _Debug_fadeColor (line 704) | function _Debug_fadeColor(ansi, string)
  function _Debug_internalColor (line 709) | function _Debug_internalColor(ansi, string)
  function _Debug_toHexDigit (line 714) | function _Debug_toHexDigit(n)
  function _Debug_crash (line 723) | function _Debug_crash(identifier)
  function _Debug_crash_UNUSED (line 729) | function _Debug_crash_UNUSED(identifier, fact1, fact2, fact3, fact4)
  function _Debug_regionToString (line 785) | function _Debug_regionToString(region)
  function _Basics_toFloat (line 835) | function _Basics_toFloat(x) { return x; }
  function _Basics_truncate (line 836) | function _Basics_truncate(n) { return n | 0; }
  function _Basics_isInfinite (line 837) | function _Basics_isInfinite(n) { return n === Infinity || n === -Infinit...
  function _Basics_not (line 849) | function _Basics_not(bool) { return !bool; }
  function _String_uncons (line 861) | function _String_uncons(string)
  function _String_length (line 878) | function _String_length(str)
  function _String_reverse (line 927) | function _String_reverse(str)
  function _String_trim (line 1001) | function _String_trim(str)
  function _String_trimLeft (line 1006) | function _String_trimLeft(str)
  function _String_trimRight (line 1011) | function _String_trimRight(str)
  function _String_words (line 1016) | function _String_words(str)
  function _String_lines (line 1021) | function _String_lines(str)
  function _String_toUpper (line 1026) | function _String_toUpper(str)
  function _String_toLower (line 1031) | function _String_toLower(str)
  function _String_fromNumber (line 1116) | function _String_fromNumber(number)
  function _String_toInt (line 1124) | function _String_toInt(str)
  function _String_toFloat (line 1148) | function _String_toFloat(s)
  function _String_fromList (line 1160) | function _String_fromList(chars)
  function _Char_toCode (line 1168) | function _Char_toCode(char)
  function _Char_fromCode (line 1178) | function _Char_fromCode(code)
  function _Char_toUpper (line 1193) | function _Char_toUpper(char)
  function _Char_toLower (line 1198) | function _Char_toLower(char)
  function _Char_toLocaleUpper (line 1203) | function _Char_toLocaleUpper(char)
  function _Char_toLocaleLower (line 1208) | function _Char_toLocaleLower(char)
  function _Json_succeed (line 1225) | function _Json_succeed(msg)
  function _Json_fail (line 1233) | function _Json_fail(msg)
  function _Json_decodePrim (line 1241) | function _Json_decodePrim(decoder)
  function _Json_decodeList (line 1282) | function _Json_decodeList(decoder) { return { $: 3, b: decoder }; }
  function _Json_decodeArray (line 1283) | function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; }
  function _Json_decodeNull (line 1285) | function _Json_decodeNull(value) { return { $: 5, c: value }; }
  function _Json_decodeKeyValuePairs (line 1305) | function _Json_decodeKeyValuePairs(decoder)
  function _Json_mapMany (line 1313) | function _Json_mapMany(f, decoders)
  function _Json_oneOf (line 1331) | function _Json_oneOf(decoders)
  function _Json_runHelp (line 1403) | function _Json_runHelp(decoder, value)
  function _Json_runArrayDecoder (line 1514) | function _Json_runArrayDecoder(decoder, value, toElmValue)
  function _Json_isArray (line 1530) | function _Json_isArray(value)
  function _Json_toElmArray (line 1535) | function _Json_toElmArray(array)
  function _Json_expecting (line 1540) | function _Json_expecting(type, value)
  function _Json_equality (line 1548) | function _Json_equality(x, y)
  function _Json_listEquality (line 1594) | function _Json_listEquality(aDecoders, bDecoders)
  function _Json_wrap_UNUSED (line 1619) | function _Json_wrap_UNUSED(value) { return { $: 0, a: value }; }
  function _Json_unwrap_UNUSED (line 1620) | function _Json_unwrap_UNUSED(value) { return value.a; }
  function _Json_wrap (line 1622) | function _Json_wrap(value) { return value; }
  function _Json_unwrap (line 1623) | function _Json_unwrap(value) { return value; }
  function _Json_emptyArray (line 1625) | function _Json_emptyArray() { return []; }
  function _Json_emptyObject (line 1626) | function _Json_emptyObject() { return {}; }
  function _Json_addEntry (line 1634) | function _Json_addEntry(func)
  function _Scheduler_succeed (line 1649) | function _Scheduler_succeed(value)
  function _Scheduler_fail (line 1657) | function _Scheduler_fail(error)
  function _Scheduler_binding (line 1665) | function _Scheduler_binding(callback)
  function _Scheduler_receive (line 1692) | function _Scheduler_receive(callback)
  function _Scheduler_rawSpawn (line 1705) | function _Scheduler_rawSpawn(task)
  function _Scheduler_spawn (line 1720) | function _Scheduler_spawn(task)
  function _Scheduler_rawSend (line 1727) | function _Scheduler_rawSend(proc, msg)
  function _Scheduler_kill (line 1741) | function _Scheduler_kill(proc)
  function _Scheduler_enqueue (line 1774) | function _Scheduler_enqueue(proc)
  function _Scheduler_step (line 1790) | function _Scheduler_step(proc)
  function _Process_sleep (line 1838) | function _Process_sleep(time)
  function _Platform_initialize (line 1872) | function _Platform_initialize(flagDecoder, args, init, update, subscript...
  function _Platform_registerPreload (line 1906) | function _Platform_registerPreload(url)
  function _Platform_setupEffects (line 1919) | function _Platform_setupEffects(managers, sendToApp)
  function _Platform_createManager (line 1941) | function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, sub...
  function _Platform_instantiateManager (line 1953) | function _Platform_instantiateManager(info, sendToApp)
  function _Platform_leaf (line 2013) | function _Platform_leaf(home)
  function _Platform_batch (line 2026) | function _Platform_batch(list)
  function _Platform_enqueueEffects (line 2079) | function _Platform_enqueueEffects(managers, cmdBag, subBag)
  function _Platform_dispatchEffects (line 2094) | function _Platform_dispatchEffects(managers, cmdBag, subBag)
  function _Platform_gatherEffects (line 2110) | function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers)
  function _Platform_toEffect (line 2137) | function _Platform_toEffect(isCmd, home, taggers, value)
  function _Platform_insert (line 2156) | function _Platform_insert(isCmd, newEffect, effects)
  function _Platform_checkPortName (line 2172) | function _Platform_checkPortName(name)
  function _Platform_outgoingPort (line 2185) | function _Platform_outgoingPort(name, converter)
  function _Platform_setupOutgoingPort (line 2200) | function _Platform_setupOutgoingPort(name)
  function _Platform_incomingPort (line 2255) | function _Platform_incomingPort(name, converter)
  function _Platform_setupIncomingPort (line 2276) | function _Platform_setupIncomingPort(name, sendToApp)
  function _Platform_export (line 2319) | function _Platform_export(exports)
  function _Platform_mergeExportsProd (line 2327) | function _Platform_mergeExportsProd(obj, exports)
  function _Platform_export_UNUSED (line 2340) | function _Platform_export_UNUSED(exports)
  function _Platform_mergeExportsDebug (line 2348) | function _Platform_mergeExportsDebug(moduleName, obj, exports)
  function _VirtualDom_appendChild (line 2371) | function _VirtualDom_appendChild(parent, child)
  function _VirtualDom_text (line 2400) | function _VirtualDom_text(string)
  function _VirtualDom_custom (line 2475) | function _VirtualDom_custom(factList, model, render, diff)
  function _VirtualDom_thunk (line 2506) | function _VirtualDom_thunk(refs, thunk)
  function _VirtualDom_noScript (line 2623) | function _VirtualDom_noScript(tag)
  function _VirtualDom_noOnOrFormAction (line 2628) | function _VirtualDom_noOnOrFormAction(key)
  function _VirtualDom_noInnerHtmlOrFormAction (line 2633) | function _VirtualDom_noInnerHtmlOrFormAction(key)
  function _VirtualDom_noJavaScriptUri (line 2638) | function _VirtualDom_noJavaScriptUri(value)
  function _VirtualDom_noJavaScriptUri_UNUSED (line 2643) | function _VirtualDom_noJavaScriptUri_UNUSED(value)
  function _VirtualDom_noJavaScriptOrHtmlUri (line 2650) | function _VirtualDom_noJavaScriptOrHtmlUri(value)
  function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED (line 2655) | function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value)
  function _VirtualDom_mapHandler (line 2674) | function _VirtualDom_mapHandler(func, handler)
  function _VirtualDom_organizeFacts (line 2718) | function _VirtualDom_organizeFacts(factList)
  function _VirtualDom_addClass (line 2746) | function _VirtualDom_addClass(object, key, newClass)
  function _VirtualDom_render (line 2757) | function _VirtualDom_render(vNode, eventNode)
  function _VirtualDom_applyFacts (line 2824) | function _VirtualDom_applyFacts(domNode, eventNode, facts)
  function _VirtualDom_applyStyles (line 2851) | function _VirtualDom_applyStyles(domNode, styles)
  function _VirtualDom_applyAttrs (line 2866) | function _VirtualDom_applyAttrs(domNode, attrs)
  function _VirtualDom_applyAttrsNS (line 2882) | function _VirtualDom_applyAttrsNS(domNode, nsAttrs)
  function _VirtualDom_applyEvents (line 2901) | function _VirtualDom_applyEvents(domNode, eventNode, events)
  function _VirtualDom_makeCallback (line 2957) | function _VirtualDom_makeCallback(eventNode, initialHandler)
  function _VirtualDom_equalEvents (line 3009) | function _VirtualDom_equalEvents(x, y)
  function _VirtualDom_diff (line 3028) | function _VirtualDom_diff(x, y)
  function _VirtualDom_pushPatch (line 3036) | function _VirtualDom_pushPatch(patches, type, index, data)
  function _VirtualDom_diffHelp (line 3050) | function _VirtualDom_diffHelp(x, y, patches, index)
  function _VirtualDom_pairwiseRefEqual (line 3180) | function _VirtualDom_pairwiseRefEqual(as, bs)
  function _VirtualDom_diffNodes (line 3193) | function _VirtualDom_diffNodes(x, y, patches, index, diffKids)
  function _VirtualDom_diffFacts (line 3217) | function _VirtualDom_diffFacts(x, y, category)
  function _VirtualDom_diffKids (line 3286) | function _VirtualDom_diffKids(xParent, yParent, patches, index)
  function _VirtualDom_diffKeyedKids (line 3326) | function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex)
  function _VirtualDom_insertNode (line 3493) | function _VirtualDom_insertNode(changes, localPatches, key, vnode, yInde...
  function _VirtualDom_removeNode (line 3535) | function _VirtualDom_removeNode(changes, localPatches, key, vnode, index)
  function _VirtualDom_addDomNodes (line 3583) | function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode)
  function _VirtualDom_addDomNodesHelp (line 3590) | function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, hi...
  function _VirtualDom_applyPatches (line 3685) | function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, ...
  function _VirtualDom_applyPatchesHelp (line 3696) | function _VirtualDom_applyPatchesHelp(rootDomNode, patches)
  function _VirtualDom_applyPatch (line 3711) | function _VirtualDom_applyPatch(domNode, patch)
  function _VirtualDom_applyPatchRedraw (line 3786) | function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode)
  function _VirtualDom_applyPatchReorder (line 3804) | function _VirtualDom_applyPatchReorder(domNode, patch)
  function _VirtualDom_applyPatchReorderEndInsertsHelp (line 3836) | function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch)
  function _VirtualDom_virtualize (line 3857) | function _VirtualDom_virtualize(node)
  function _VirtualDom_dekey (line 3898) | function _VirtualDom_dekey(keyedNode)
  function _Browser_makeAnimator (line 4007) | function _Browser_makeAnimator(model, draw)
  function _Browser_application (line 4039) | function _Browser_application(impl)
  function _Browser_getUrl (line 4082) | function _Browser_getUrl()
  function handler (line 4124) | function handler(event)	{ _Scheduler_rawSpawn(sendToSelf(event)); }
  function _Browser_visibilityInfo (line 4141) | function _Browser_visibilityInfo()
  function _Browser_rAF (line 4162) | function _Browser_rAF()
  function _Browser_now (line 4177) | function _Browser_now()
  function _Browser_withNode (line 4190) | function _Browser_withNode(id, doStuff)
  function _Browser_withWindow (line 4205) | function _Browser_withWindow(doStuff)
  function _Browser_getViewport (line 4232) | function _Browser_getViewport()
  function _Browser_getScene (line 4245) | function _Browser_getScene()
  function _Browser_getViewportOf (line 4269) | function _Browser_getViewportOf(id)
  function _Browser_getElement (line 4304) | function _Browser_getElement(id)
  function _Browser_reload (line 4334) | function _Browser_reload(skipCache)
  function _Browser_load (line 4342) | function _Browser_load(url)
  function _Bitwise_complement (line 4376) | function _Bitwise_complement(a)
  function _Time_now (line 4398) | function _Time_now(millisToPosix)
  function _Time_here (line 4415) | function _Time_here()
  function _Time_getZoneName (line 4426) | function _Time_getZoneName()

FILE: 00_Alternate_Languages/01_Acey_Ducey/go/main.go
  function main (line 23) | func main() {
  function play (line 42) | func play(money int) {
  function getCardName (line 99) | func getCardName(c int) string {

FILE: 00_Alternate_Languages/02_Amazing/go/main.go
  function main (line 13) | func main() {
  type direction (line 23) | type direction
  constant LEFT (line 26) | LEFT direction = iota
  constant UP (line 27) | UP
  constant RIGHT (line 28) | RIGHT
  constant DOWN (line 29) | DOWN
  constant EXIT_DOWN (line 33) | EXIT_DOWN  = 1
  constant EXIT_RIGHT (line 34) | EXIT_RIGHT = 2
  type maze (line 37) | type maze struct
    method build (line 76) | func (m *maze) build() {
    method getPossibleDirections (line 111) | func (m *maze) getPossibleDirections(row, col int) []direction {
    method makeOpening (line 140) | func (m *maze) makeOpening(dirs []direction, row, col, count int) (int...
    method draw (line 163) | func (m *maze) draw() {
  function NewMaze (line 45) | func NewMaze(w, l int) maze {
  function printWelcome (line 194) | func printWelcome() {
  function getDimensions (line 199) | func getDimensions() (int, int) {

FILE: 00_Alternate_Languages/03_Animal/go/main.go
  type node (line 11) | type node struct
    method update (line 28) | func (n *node) update(newQuestion, newAnswer, newAnimal string) {
    method isLeaf (line 42) | func (n *node) isLeaf() bool {
  function newNode (line 17) | func newNode(text string, yes_node, no_node *node) *node {
  function listKnownAnimals (line 46) | func listKnownAnimals(root *node) {
  function parseInput (line 65) | func parseInput(message string, checkList bool, rootNode *node) string {
  function avoidVoidInput (line 93) | func avoidVoidInput(message string) string {
  function printIntro (line 108) | func printIntro() {
  function main (line 115) | func main() {

FILE: 00_Alternate_Languages/05_Bagels/go/main.go
  constant MAXGUESSES (line 13) | MAXGUESSES int = 20
  function printWelcome (line 15) | func printWelcome() {
  function printRules (line 20) | func printRules() {
  function getNumber (line 29) | func getNumber() []string {
  function getValidGuess (line 36) | func getValidGuess(guessNumber int) string {
  function buildResultString (line 68) | func buildResultString(num []string, guess string) string {
  function main (line 102) | func main() {

FILE: 00_Alternate_Languages/08_Batnum/go/main.go
  type StartOption (line 11) | type StartOption
  constant StartUndefined (line 14) | StartUndefined StartOption = iota
  constant ComputerFirst (line 15) | ComputerFirst
  constant PlayerFirst (line 16) | PlayerFirst
  type WinOption (line 19) | type WinOption
  constant WinUndefined (line 22) | WinUndefined WinOption = iota
  constant TakeLast (line 23) | TakeLast
  constant AvoidLast (line 24) | AvoidLast
  type GameOptions (line 27) | type GameOptions struct
  function NewOptions (line 35) | func NewOptions() *GameOptions {
  function getPileSize (line 50) | func getPileSize() int {
  function getWinOption (line 66) | func getWinOption() WinOption {
  function getStartOption (line 79) | func getStartOption() StartOption {
  function getMinMax (line 92) | func getMinMax() (int, int) {
  function playerMove (line 116) | func playerMove(pile, min, max int, win WinOption) (bool, int) {
  function computerPick (line 154) | func computerPick(pile, min, max int, win WinOption) int {
  function computerMove (line 178) | func computerMove(pile, min, max int, win WinOption) (bool, int) {
  function play (line 199) | func play(pile, min, max int, start StartOption, win WinOption) {
  function printIntro (line 220) | func printIntro() {
  function main (line 236) | func main() {

FILE: 00_Alternate_Languages/09_Battle/go/main.go
  constant SEA_WIDTH (line 14) | SEA_WIDTH        = 6
  constant DESTROYER_LENGTH (line 15) | DESTROYER_LENGTH = 2
  constant CRUISER_LENGTH (line 16) | CRUISER_LENGTH   = 3
  constant CARRIER_LENGTH (line 17) | CARRIER_LENGTH   = 4
  type Point (line 20) | type Point
  type Vector (line 21) | type Vector
  type Sea (line 22) | type Sea
  function NewSea (line 24) | func NewSea() Sea {
  function getRandomVector (line 34) | func getRandomVector() Vector {
  function addVector (line 48) | func addVector(p Point, v Vector) Point {
  function isWithinSea (line 57) | func isWithinSea(p Point, s Sea) bool {
  function valueAt (line 61) | func valueAt(p Point, s Sea) int {
  function reportInputError (line 65) | func reportInputError() {
  function getNextTarget (line 69) | func getNextTarget(s Sea) Point {
  function setValueAt (line 100) | func setValueAt(value int, p Point, s Sea) {
  function hasShip (line 104) | func hasShip(s Sea, code int) bool {
  function countSunk (line 117) | func countSunk(s Sea, codes []int) int {
  function placeShip (line 129) | func placeShip(s Sea, size, code int) {
  function setupShips (line 166) | func setupShips(s Sea) {
  function printIntro (line 175) | func printIntro() {
  function printInstructions (line 184) | func printInstructions() {
  function printEncodedSea (line 193) | func printEncodedSea(s Sea) {
  function wipeout (line 203) | func wipeout(s Sea) bool {
  function main (line 212) | func main() {

FILE: 00_Alternate_Languages/11_Bombardment/go/main.go
  function displayField (line 28) | func displayField() {
  function printIntro (line 40) | func printIntro() {
  function positionList (line 61) | func positionList() []int {
  function generateEnemyPositions (line 70) | func generateEnemyPositions() []int {
  function isValidPosition (line 76) | func isValidPosition(p int) bool {
  function promptForPlayerPositions (line 80) | func promptForPlayerPositions() []int {
  function promptPlayerForTarget (line 110) | func promptPlayerForTarget() int {
  function generateAttackSequence (line 126) | func generateAttackSequence() []int {
  function attack (line 133) | func attack(target int, positions *[]int, hitMsg, missMsg string, progre...
  function main (line 155) | func main() {

FILE: 00_Alternate_Languages/12_Bombs_Away/go/main.go
  type Choice (line 13) | type Choice struct
  function playerSurvived (line 18) | func playerSurvived() {
  function playerDeath (line 22) | func playerDeath() {
  function missionSuccess (line 29) | func missionSuccess() {
  function deathWithChance (line 37) | func deathWithChance(probability float64) bool {
  function startNonKamikaziAttack (line 41) | func startNonKamikaziAttack() {
  function missionFailure (line 67) | func missionFailure() {
  function playItaly (line 100) | func playItaly() {
  function playAllies (line 107) | func playAllies() {
  function playJapan (line 114) | func playJapan() {
  function playGermany (line 127) | func playGermany() {
  function playGame (line 134) | func playGame() {
  function main (line 149) | func main() {
  function getInputFromList (line 160) | func getInputFromList(prompt string, choices []Choice) Choice {
  function getIntInput (line 175) | func getIntInput(prompt string) int {

FILE: 00_Alternate_Languages/20_Buzzword/go/main.go
  function main (line 12) | func main() {

FILE: 00_Alternate_Languages/22_Change/go/main.go
  function printWelcome (line 11) | func printWelcome() {
  function computeChange (line 22) | func computeChange(cost, payment float64) {
  function main (line 85) | func main() {

FILE: 00_Alternate_Languages/25_Chief/C/chief.c
  function guess_number (line 17) | float guess_number(float number){
  function game (line 23) | void game(){
  function show_solution (line 64) | void show_solution(float guess){
  function main (line 73) | void main(){

FILE: 00_Alternate_Languages/25_Chief/go/main.go
  function printLightning (line 11) | func printLightning() {
  function printSolution (line 43) | func printSolution(n float64) {
  function play (line 49) | func play() {
  function getFloat (line 84) | func getFloat(prompt string) float64 {
  function getYesNo (line 99) | func getYesNo(prompt string) bool {
  function main (line 108) | func main() {

FILE: 00_Alternate_Languages/30_Cube/C/cube.c
  type coords (line 12) | typedef struct{
  function instuctions (line 18) | void instuctions(){
  function game (line 39) | void game(int money){
  function init (line 115) | void init(){
  function main (line 140) | void main(){

FILE: 00_Alternate_Languages/31_Depth_Charge/go/main.go
  type Position (line 14) | type Position
  function NewPosition (line 16) | func NewPosition() Position {
  function showWelcome (line 21) | func showWelcome() {
  function getNumCharges (line 28) | func getNumCharges() (int, int) {
  function askForNewGame (line 43) | func askForNewGame() {
  function showShotResult (line 55) | func showShotResult(shot, location Position) {
  function getShot (line 84) | func getShot() Position {
  function getRandomPosition (line 109) | func getRandomPosition(searchArea int) Position {
  function playGame (line 117) | func playGame(searchArea, numCharges int) {
  function main (line 150) | func main() {

FILE: 00_Alternate_Languages/33_Dice/C/dice.c
  function percent (line 5) | float percent(int number, int total){
  function main (line 11) | int main(){

FILE: 00_Alternate_Languages/33_Dice/go/main.go
  function printWelcome (line 12) | func printWelcome() {
  function main (line 25) | func main() {

FILE: 00_Alternate_Languages/34_Digits/go/main.go
  function printIntro (line 12) | func printIntro() {
  function readInteger (line 20) | func readInteger(prompt string) int {
  function printInstructions (line 36) | func printInstructions() {
  function readTenNumbers (line 49) | func readTenNumbers() []int {
  function printSummary (line 60) | func printSummary(correct int) {
  function buildArray (line 76) | func buildArray(val, row, col int) [][]int {
  function main (line 88) | func main() {

FILE: 00_Alternate_Languages/35_Even_Wins/go/evenwins.go
  constant MAXTAKE (line 11) | MAXTAKE = 4
  type PlayerType (line 13) | type PlayerType
  constant HUMAN (line 16) | HUMAN PlayerType = iota
  constant COMPUTER (line 17) | COMPUTER
  type Game (line 20) | type Game struct
    method printBoard (line 48) | func (g *Game) printBoard() {
    method gameOver (line 56) | func (g *Game) gameOver() {
    method humanTurn (line 79) | func (g *Game) humanTurn() {
    method computerTurn (line 110) | func (g *Game) computerTurn() {
    method play (line 137) | func (g *Game) play(playersTurn PlayerType) {
  function NewGame (line 26) | func NewGame() Game {
  function printIntro (line 33) | func printIntro() {
  function getPlural (line 71) | func getPlural(count int) string {
  function getFirstPlayer (line 156) | func getFirstPlayer() PlayerType {
  function main (line 176) | func main() {

FILE: 00_Alternate_Languages/38_Fur_Trader/c/furtrader.c
  function printAtColumn (line 33) | void printAtColumn( int column, const char *words )
  function print (line 42) | void print( const char *words )
  function showIntroduction (line 48) | void showIntroduction()
  function getNumericInput (line 65) | int getNumericInput()
  function getYesOrNo (line 91) | char getYesOrNo()
  function getFortChoice (line 118) | int getFortChoice()
  function showFortComment (line 145) | void showFortComment( int which_fort )
  function getFursPurchase (line 182) | void getFursPurchase( int *furs )
  function zeroInventory (line 201) | void zeroInventory( int *player_fur_count )
  function sumInventory (line 214) | int sumInventory( int *player_fur_count )
  function randomAB (line 231) | float randomAB(float a, float b)
  function randFloat (line 236) | float randFloat()
  function main (line 248) | int main( void )

FILE: 00_Alternate_Languages/38_Fur_Trader/go/main.go
  constant MAXFURS (line 15) | MAXFURS    = 190
  constant STARTFUNDS (line 16) | STARTFUNDS = 600
  type Fur (line 19) | type Fur
  constant FUR_MINK (line 22) | FUR_MINK Fur = iota
  constant FUR_BEAVER (line 23) | FUR_BEAVER
  constant FUR_ERMINE (line 24) | FUR_ERMINE
  constant FUR_FOX (line 25) | FUR_FOX
  type Fort (line 28) | type Fort
  constant FORT_MONTREAL (line 31) | FORT_MONTREAL Fort = iota
  constant FORT_QUEBEC (line 32) | FORT_QUEBEC
  constant FORT_NEWYORK (line 33) | FORT_NEWYORK
  type GameState (line 36) | type GameState
  constant STARTING (line 39) | STARTING GameState = iota
  constant TRADING (line 40) | TRADING
  constant CHOOSINGFORT (line 41) | CHOOSINGFORT
  constant TRAVELLING (line 42) | TRAVELLING
  function FURS (line 45) | func FURS() []string {
  function FORTS (line 49) | func FORTS() []string {
  type Player (line 53) | type Player struct
    method totalFurs (line 65) | func (p *Player) totalFurs() int {
    method lostFurs (line 73) | func (p *Player) lostFurs() {
  function NewPlayer (line 58) | func NewPlayer() Player {
  function printTitle (line 79) | func printTitle() {
  function printIntro (line 87) | func printIntro() {
  function getFortChoice (line 97) | func getFortChoice() Fort {
  function printFortComment (line 123) | func printFortComment(f Fort) {
  function getYesOrNo (line 145) | func getYesOrNo() string {
  function getFursPurchase (line 158) | func getFursPurchase() []int {
  function main (line 181) | func main() {

FILE: 00_Alternate_Languages/41_Guess/go/main.go
  function printIntro (line 13) | func printIntro() {
  function getLimit (line 24) | func getLimit() (int, int) {
  function main (line 43) | func main() {

FILE: 00_Alternate_Languages/42_Gunner/go/main.go
  function printIntro (line 14) | func printIntro() {
  function getFloat (line 25) | func getFloat() float64 {
  function play (line 40) | func play() {
  function main (line 108) | func main() {

FILE: 00_Alternate_Languages/44_Hangman/C/main.c
  function print_hangman (line 19) | void print_hangman(int stage){
  function main (line 99) | void main(void){

FILE: 00_Alternate_Languages/45_Hello/ANSI_C/hello.c
  function main (line 12) | int main() {
  function tab (line 147) | void tab(int number_of_spaces) {
  function get_input (line 153) | void get_input(char *input_buffer) {
  function strings_match (line 159) | int strings_match(char *string1, char *string2) {

FILE: 00_Alternate_Languages/45_Hello/go/main.go
  type PROBLEM_TYPE (line 11) | type PROBLEM_TYPE
  constant SEX (line 14) | SEX PROBLEM_TYPE = iota
  constant HEALTH (line 15) | HEALTH
  constant MONEY (line 16) | MONEY
  constant JOB (line 17) | JOB
  constant UKNOWN (line 18) | UKNOWN
  function getYesOrNo (line 21) | func getYesOrNo() (bool, bool, string) {
  function printTntro (line 35) | func printTntro() {
  function askEnjoyQuestion (line 43) | func askEnjoyQuestion(user string) {
  function promptForProblems (line 65) | func promptForProblems(user string) PROBLEM_TYPE {
  function promptTooMuchOrTooLittle (line 89) | func promptTooMuchOrTooLittle() (bool, bool) {
  function solveSexProblem (line 103) | func solveSexProblem(user string) {
  function solveHealthProblem (line 124) | func solveHealthProblem(user string) {
  function solveMoneyProblem (line 131) | func solveMoneyProblem(user string) {
  function solveJobProblem (line 137) | func solveJobProblem(user string) {
  function askQuestionLoop (line 144) | func askQuestionLoop(user string) {
  function goodbyeUnhappy (line 179) | func goodbyeUnhappy(user string) {
  function goodbyeHappy (line 186) | func goodbyeHappy(user string) {
  function askForFee (line 190) | func askForFee(user string) {
  function main (line 220) | func main() {

FILE: 00_Alternate_Languages/45_Hello/hello.c
  function main (line 12) | int main() {
  function tab (line 147) | void tab(int number_of_spaces) {
  function get_input (line 153) | void get_input(char *input_buffer) {
  function strings_match (line 159) | int strings_match(char *string1, char *string2) {

FILE: 00_Alternate_Languages/47_Hi-Lo/go/main.go
  constant MAX_ATTEMPTS (line 13) | MAX_ATTEMPTS = 6
  function printIntro (line 15) | func printIntro() {
  function main (line 28) | func main() {

FILE: 00_Alternate_Languages/78_Sine_Wave/C++/sinewave.cpp
  function main (line 5) | int main()

FILE: 00_Alternate_Languages/89_Tic-Tac-Toe/go/src/tictactoe1.go
  function main (line 8) | func main() {
  function computerMoves (line 69) | func computerMoves(move int) {
  function readYourMove (line 73) | func readYourMove() int {
  function move (line 85) | func move(number int) int {

FILE: 00_Common/dotnet/Games.Common.Test/IO/TextIOTests/NumberFormatTests.cs
  class NumberFormatTests (line 8) | public class NumberFormatTests
    method Write_Float_FormatsNumberSameAsBasic (line 10) | [Theory]
    method WriteLine_Float_FormatsNumberSameAsBasic (line 22) | [Theory]
    method WriteFloatTestCases (line 34) | public static TheoryData<float, string> WriteFloatTestCases()
    method Write_Int_FormatsNumberSameAsBasic (line 46) | [Theory]
    method WriteLine_Int_FormatsNumberSameAsBasic (line 58) | [Theory]
    method WriteIntTestCases (line 70) | public static TheoryData<int, string> WriteIntTestCases()

FILE: 00_Common/dotnet/Games.Common.Test/IO/TextIOTests/ReadMethodTests.cs
  class ReadMethodTests (line 18) | public class ReadMethodTests
    method ReadingValuesHasExpectedPromptsAndResults (line 20) | [Theory]
    method ReadNumbers_ArrayEmpty_ThrowsArgumentException (line 46) | [Fact]
    method ReadStringTestCases (line 58) | public static TheoryData<Func<IReadWrite, string>, string, string, str...
    method Read2StringsTestCases (line 69) | public static TheoryData<Func<IReadWrite, TwoStrings>, string, string,...
    method ReadNumberTestCases (line 85) | public static TheoryData<Func<IReadWrite, float>, string, string, floa...
    method Read2NumbersTestCases (line 96) | public static TheoryData<Func<IReadWrite, TwoNumbers>, string, string,...
    method Read3NumbersTestCases (line 112) | public static TheoryData<Func<IReadWrite, ThreeNumbers>, string, strin...
    method Read4NumbersTestCases (line 128) | public static TheoryData<Func<IReadWrite, FourNumbers>, string, string...
    method ReadNumbersTestCases (line 144) | public static TheoryData<Func<IReadWrite, IReadOnlyList<float>>, strin...

FILE: 00_Common/dotnet/Games.Common.Test/IO/TokenReaderTests.cs
  class TokenReaderTests (line 13) | public class TokenReaderTests
    method TokenReaderTests (line 17) | public TokenReaderTests()
    method ReadTokens_QuantityNeededZero_ThrowsArgumentException (line 22) | [Fact]
    method ReadTokens_ReadingValuesHasExpectedPromptsAndResults (line 35) | [Theory]
    method ReadTokens_Numeric_ReadingValuesHasExpectedPromptsAndResults (line 54) | [Theory]
    method ReadTokensTestCases (line 73) | public static TheoryData<string, uint, string, string, string[]> ReadT...
    method ReadNumericTokensTestCases (line 90) | public static TheoryData<string, uint, string, string, float[]> ReadNu...

FILE: 00_Common/dotnet/Games.Common.Test/IO/TokenTests.cs
  class TokenTests (line 6) | public class TokenTests
    method Ctor_PopulatesProperties (line 8) | [Theory]
    method TokenTestCases (line 19) | public static TheoryData<string, bool, float> TokenTestCases() => new()

FILE: 00_Common/dotnet/Games.Common.Test/IO/TokenizerTests.cs
  class TokenizerTests (line 7) | public class TokenizerTests
    method ParseTokens_SplitsStringIntoExpectedTokens (line 9) | [Theory]
    method TokenizerTestCases (line 18) | public static TheoryData<string, string[]> TokenizerTestCases() => new()

FILE: 00_Common/dotnet/Games.Common/IO/ConsoleIO.cs
  class ConsoleIO (line 9) | public sealed class ConsoleIO : TextIO
    method ConsoleIO (line 11) | public ConsoleIO()
    method ReadCharacter (line 16) | public override char ReadCharacter() => Console.ReadKey(intercept: tru...

FILE: 00_Common/dotnet/Games.Common/IO/IReadWrite.cs
  type IReadWrite (line 8) | public interface IReadWrite
    method ReadCharacter (line 14) | char ReadCharacter();
    method ReadNumber (line 21) | float ReadNumber(string prompt);
    method Read2Numbers (line 28) | (float, float) Read2Numbers(string prompt);
    method Read3Numbers (line 35) | (float, float, float) Read3Numbers(string prompt);
    method Read4Numbers (line 42) | (float, float, float, float) Read4Numbers(string prompt);
    method ReadNumbers (line 49) | void ReadNumbers(string prompt, float[] values);
    method ReadString (line 56) | string ReadString(string prompt);
    method Read2Strings (line 63) | (string, string) Read2Strings(string prompt);
    method Write (line 69) | void Write(string message);
    method WriteLine (line 75) | void WriteLine(string message = "");
    method Write (line 81) | void Write(Number value);
    method WriteLine (line 87) | void WriteLine(Number value);
    method Write (line 93) | void Write(object value);
    method WriteLine (line 99) | void WriteLine(object value);
    method Write (line 106) | void Write(string format, params object[] values);
    method WriteLine (line 113) | void WriteLine(string format, params object[] values);
    method Write (line 119) | void Write(Stream stream, bool keepOpen = false);

FILE: 00_Common/dotnet/Games.Common/IO/InsufficientInputException.cs
  class InsufficientInputException (line 3) | public class InsufficientInputException : Exception
    method InsufficientInputException (line 5) | public InsufficientInputException()

FILE: 00_Common/dotnet/Games.Common/IO/Strings.cs
  class Strings (line 3) | internal static class Strings

FILE: 00_Common/dotnet/Games.Common/IO/TextIO.cs
  class TextIO (line 14) | public class TextIO : IReadWrite
    method TextIO (line 21) | public TextIO(TextReader input, TextWriter output)
    method ReadCharacter (line 29) | public virtual char ReadCharacter()
    method ReadNumber (line 38) | public float ReadNumber(string prompt) => ReadNumbers(prompt, 1)[0];
    method Read2Numbers (line 40) | public (float, float) Read2Numbers(string prompt)
    method Read3Numbers (line 46) | public (float, float, float) Read3Numbers(string prompt)
    method Read4Numbers (line 52) | public (float, float, float, float) Read4Numbers(string prompt)
    method ReadNumbers (line 58) | public void ReadNumbers(string prompt, float[] values)
    method ReadNumbers (line 69) | private IReadOnlyList<float> ReadNumbers(string prompt, uint quantity) =>
    method ReadString (line 76) | public string ReadString(string prompt)
    method Read2Strings (line 81) | public (string, string) Read2Strings(string prompt)
    method ReadStrings (line 87) | private IReadOnlyList<string> ReadStrings(string prompt, uint quantity...
    method ReadLine (line 90) | internal string ReadLine(string prompt)
    method Write (line 96) | public void Write(string value) => _output.Write(value);
    method WriteLine (line 98) | public void WriteLine(string value = "") => _output.WriteLine(value);
    method Write (line 100) | public void Write(Number value) => _output.Write(value.ToString());
    method WriteLine (line 102) | public void WriteLine(Number value) => _output.WriteLine(value.ToStrin...
    method Write (line 104) | public void Write(object value) => _output.Write(value.ToString());
    method WriteLine (line 106) | public void WriteLine(object value) => _output.WriteLine(value.ToStrin...
    method Write (line 108) | public void Write(string format, params object[] values) => _output.Wr...
    method WriteLine (line 110) | public void WriteLine(string format, params object[] values) => _outpu...
    method Write (line 112) | public void Write(Stream stream, bool keepOpen = false)
    method GetString (line 123) | private string GetString(float value) => value < 0 ? $"{value} " : $" ...

FILE: 00_Common/dotnet/Games.Common/IO/Token.cs
  class Token (line 6) | internal class Token
    method Token (line 10) | internal Token(string value)
    method ToString (line 30) | public override string ToString() => String;
    class Builder (line 32) | internal class Builder
      method Append (line 38) | public Builder Append(char character)
      method SetIsQuoted (line 47) | public Builder SetIsQuoted()
      method Build (line 53) | public Token Build()

FILE: 00_Common/dotnet/Games.Common/IO/TokenReader.cs
  class TokenReader (line 11) | internal class TokenReader
    method TokenReader (line 16) | private TokenReader(TextIO io, Predicate<Token> isTokenValid)
    method ForStrings (line 27) | public static TokenReader ForStrings(TextIO io) => new(io, t => true);
    method ForNumbers (line 34) | public static TokenReader ForNumbers(TextIO io) => new(io, t => t.IsNu...
    method ReadTokens (line 42) | public IEnumerable<Token> ReadTokens(string prompt, uint quantityNeeded)
    method ReadValidTokens (line 68) | private IEnumerable<Token> ReadValidTokens(string prompt, uint maxCount)
    method ReadLineOfTokens (line 97) | private IEnumerable<Token> ReadLineOfTokens(string prompt, uint maxCount)

FILE: 00_Common/dotnet/Games.Common/IO/Tokenizer.cs
  class Tokenizer (line 9) | internal class Tokenizer
    method Tokenizer (line 16) | private Tokenizer(string input) => _characters = new Queue<char>(input);
    method ParseTokens (line 18) | public static IEnumerable<Token> ParseTokens(string input)
    method ParseTokens (line 25) | private IEnumerable<Token> ParseTokens()
    method Consume (line 36) | public (Token, bool) Consume(Queue<char> characters)
    type ITokenizerState (line 50) | private interface ITokenizerState
      method Consume (line 54) | (ITokenizerState, Token.Builder) Consume(char character, Token.Build...
    type LookForStartOfTokenState (line 57) | private struct LookForStartOfTokenState : ITokenizerState
      method Consume (line 59) | public (ITokenizerState, Token.Builder) Consume(char character, Toke...
    type InTokenState (line 69) | private struct InTokenState : ITokenizerState
      method Consume (line 71) | public (ITokenizerState, Token.Builder) Consume(char character, Toke...
    type InQuotedTokenState (line 77) | private struct InQuotedTokenState : ITokenizerState
      method Consume (line 79) | public (ITokenizerState, Token.Builder) Consume(char character, Toke...
    type ExpectSeparatorState (line 85) | private struct ExpectSeparatorState : ITokenizerState
      method Consume (line 87) | public (ITokenizerState, Token.Builder) Consume(char character, Toke...
    type IgnoreRestOfLineState (line 93) | private struct IgnoreRestOfLineState : ITokenizerState
      method Consume (line 95) | public (ITokenizerState, Token.Builder) Consume(char character, Toke...
    type AtEndOfTokenState (line 99) | private struct AtEndOfTokenState : ITokenizerState
      method Consume (line 101) | public (ITokenizerState, Token.Builder) Consume(char character, Toke...

FILE: 00_Common/dotnet/Games.Common/Numbers/Number.cs
  type Number (line 6) | public struct Number
    method Number (line 10) | public Number (float value)
    method ToString (line 19) | public override string ToString() => _value < 0 ? $"{_value} " : $" {_...

FILE: 00_Common/dotnet/Games.Common/Randomness/IRandom.cs
  type IRandom (line 6) | public interface IRandom
    method NextFloat (line 12) | float NextFloat();
    method PreviousFloat (line 18) | float PreviousFloat();
    method Reseed (line 24) | void Reseed(int seed);

FILE: 00_Common/dotnet/Games.Common/Randomness/IRandomExtensions.cs
  class IRandomExtensions (line 9) | public static class IRandomExtensions
    method NextFloat (line 15) | public static float NextFloat(this IRandom random, float exclusiveMaxi...
    method NextFloat (line 22) | public static float NextFloat(this IRandom random, float inclusiveMini...
    method Next (line 29) | public static int Next(this IRandom random, int exclusiveMaximum) => T...
    method Next (line 35) | public static int Next(this IRandom random, int inclusiveMinimum, int ...
    method PreviousFloat (line 43) | public static float PreviousFloat(this IRandom random, float exclusive...
    method PreviousFloat (line 51) | public static float PreviousFloat(this IRandom random, float inclusive...
    method Previous (line 59) | public static int Previous(this IRandom random, int exclusiveMaximum) =>
    method Previous (line 66) | public static int Previous(this IRandom random, int inclusiveMinimum, ...
    method Scale (line 69) | private static float Scale(float zeroToOne, float exclusiveMaximum)
    method Scale (line 79) | private static float Scale(float zeroToOne, float inclusiveMinimum, fl...
    method ToInt (line 90) | private static int ToInt(float value) => (int)Math.Floor(value);

FILE: 00_Common/dotnet/Games.Common/Randomness/RandomNumberGenerator.cs
  class RandomNumberGenerator (line 6) | public class RandomNumberGenerator : IRandom
    method RandomNumberGenerator (line 11) | public RandomNumberGenerator()
    method NextFloat (line 17) | public float NextFloat() => _previous = (float)_random.NextDouble();
    method PreviousFloat (line 19) | public float PreviousFloat() => _previous;
    method Reseed (line 21) | public void Reseed(int seed) => _random = new Random(seed);

FILE: 00_Common/javascript/WebTerminal/HtmlTerminal.js
  class HtmlTerminal (line 10) | class HtmlTerminal {
    method constructor (line 37) | constructor($output) {
    method #newLine (line 71) | #newLine(text) {
    method #handleKey (line 84) | #handleKey(e) {
    method clear (line 104) | clear() {
    method inserHtml (line 114) | inserHtml(htmlContent) {
    method write (line 130) | write(text) {
    method writeln (line 160) | writeln(text) {
    method input (line 174) | input(callback) {

FILE: 00_Common/javascript/WebTerminal/terminal_tests.mjs
  function main (line 5) | async function main() {

FILE: 00_Common/javascript/common.mjs
  function print (line 13) | function print(...messages) {
  function println (line 25) | function println(...messages) {
  function tab (line 35) | function tab(length) {
  function input (line 48) | async function input(message = '') {

FILE: 00_Utilities/DotnetUtils/DotnetUtils/Extensions.cs
  class Extensions (line 6) | public static class Extensions {
    method SelectT (line 7) | public static IEnumerable<TResult> SelectT<T1, T2, TResult>(this IEnum...
    method SelectT (line 9) | public static IEnumerable<TResult> SelectT<T1, T2, T3, TResult>(this I...
    method WithIndex (line 11) | public static IEnumerable<(T1, T2, int)> WithIndex<T1, T2>(this IEnume...
    method None (line 13) | public static bool None<T>(this IEnumerable<T> src, Func<T, bool>? pre...
    method IsNullOrWhitespace (line 18) | public static bool IsNullOrWhitespace([NotNullWhen(false)] this string...
    method RelativePath (line 20) | [return: NotNullIfNotNull("path")]

FILE: 00_Utilities/DotnetUtils/DotnetUtils/Functions.cs
  class Functions (line 6) | public static class Functions {
    method getValue (line 7) | public static string? getValue(string path, params string[] names) {
    method getValue (line 13) | public static string? getValue(XElement? parent, params string[] names) {
    method getChoice (line 23) | public static int getChoice(int maxValue) => getChoice(0, maxValue);
    method getChoice (line 25) | public static int getChoice(int minValue, int maxValue) {

FILE: 00_Utilities/DotnetUtils/DotnetUtils/Globals.cs
  class Globals (line 3) | public static class Globals {

FILE: 00_Utilities/DotnetUtils/DotnetUtils/Methods.cs
  class Methods (line 5) | public static class Methods {
    method RunProcess (line 6) | public static ProcessResult RunProcess(string filename, string argumen...
    method RunProcess (line 21) | public static ProcessResult RunProcess(Process process, string input =...
    method RunProcessAsync (line 48) | public static Task<ProcessResult> RunProcessAsync(Process process, str...
  type ProcessResult (line 81) | public sealed record ProcessResult(int ExitCode, string StdOut, string S...

FILE: 00_Utilities/DotnetUtils/DotnetUtils/PortInfo.cs
  type PortInfo (line 7) | public record PortInfo(

FILE: 00_Utilities/DotnetUtils/DotnetUtils/PortInfos.cs
  class PortInfos (line 7) | public static class PortInfos {
    method PortInfos (line 10) | static PortInfos() {

FILE: 00_Utilities/build-index.js
  constant TITLE (line 14) | const TITLE = 'BASIC Computer Games';
  constant JAVASCRIPT_FOLDER (line 15) | const JAVASCRIPT_FOLDER = 'javascript';
  constant IGNORE_FOLDERS_START_WITH (line 16) | const IGNORE_FOLDERS_START_WITH = ['.', '00_', 'buildJvm', 'Sudoku'];
  constant IGNORE_FILES (line 17) | const IGNORE_FILES = [
  function createGameLinks (line 22) | function createGameLinks(game) {
  function createIndexHtml (line 52) | function createIndexHtml(title, games) {
  function findJSFilesInFolder (line 89) | function findJSFilesInFolder(folder) {
  function main (line 114) | function main() {

FILE: 00_Utilities/find-missing-implementations.js
  constant ROOT_PATH (line 13) | const ROOT_PATH = "../.";

FILE: 00_Utilities/find-unimplemented.js
  constant ROOT_PATH (line 14) | const ROOT_PATH = "../.";

FILE: 00_Utilities/markdown_todo.py
  function has_implementation (line 5) | def has_implementation(lang: str, file_list: List[str], subdir_list: Lis...
  function get_data (line 14) | def get_data(checklist_orig: List[str], root_dir: str = "..") -> List[Li...
  function write_file (line 77) | def write_file(path: str, languages: List[str], strings_done: List[List[...

FILE: 00_Utilities/markdown_todo_rust/src/main.rs
  constant ROOT_DIR (line 12) | const ROOT_DIR: &str = "../../";
  constant LANGUAGES (line 13) | const LANGUAGES: [(&str,&str); 10] = [ //first element of tuple is the l...
  constant OUTPUT_PATH (line 25) | const OUTPUT_PATH: &str = "../../todo.md";
  function main (line 27) | fn main() {
  function print_lang_extension_table (line 213) | fn print_lang_extension_table() {
  function get_str_from_user (line 227) | fn get_str_from_user(prompt:&str) -> String {
  function get_yn_from_user (line 243) | fn get_yn_from_user(prompt:&str) -> bool {
  function list_files (line 260) | fn list_files(path: &Path) -> Vec<PathBuf> {
  function _list_files (line 265) | fn _list_files(vec: &mut Vec<PathBuf>, path: &Path) {

FILE: 01_Acey_Ducey/csharp/Game.cs
  class Game (line 10) | internal class Game
    method GameLoop (line 26) | internal void GameLoop()
    method PlayGame (line 44) | private void PlayGame()
    method PlayTurn (line 71) | private void PlayTurn(GameState state)
    method PlayTurn_GetBetAmount (line 175) | private int PlayTurn_GetBetAmount(int currentMoney)
    method GetCard (line 221) | private int GetCard()
    method DisplayCard (line 230) | private void DisplayCard(int card)
    method DisplayIntroText (line 265) | private void DisplayIntroText()
    method TryAgain (line 300) | private bool TryAgain()

FILE: 01_Acey_Ducey/csharp/GameState.cs
  class GameState (line 10) | internal class GameState
    method GameState (line 31) | internal GameState()

FILE: 01_Acey_Ducey/csharp/Program.cs
  class Program (line 9) | class Program
    method Main (line 16) | static void Main(string[] args)

FILE: 01_Acey_Ducey/elixir/acey_ducey.exs
  class Game (line 37) | defmodule Game
    method play (line 42) | def play(), do: play(%__MODULE__{})
    method play (line 46) | def play(%__MODULE__{deck: deck, funds: funds} = game) do
    method prompt_to_place_bet (line 67) | defp prompt_to_place_bet(funds) do
    method win? (line 76) | defp win?({_, first}, {_, second}, {_, third}) do
    method format (line 86) | defp format({suit, value}) do

FILE: 01_Acey_Ducey/java/src/AceyDucey.java
  class AceyDucey (line 11) | public class AceyDucey {
    method AceyDucey (line 38) | public AceyDucey() {
    method playAgain (line 49) | public boolean playAgain() {
    method play (line 68) | public void play() {
    method playerWon (line 100) | private boolean playerWon() {
    method displayPlayerCard (line 107) | private void displayPlayerCard() {
    method getBet (line 114) | private int getBet() {
    method displayBalance (line 134) | private void displayBalance() {
    method displayCards (line 138) | private void displayCards() {
    method drawCards (line 146) | private void drawCards() {
    method randomCard (line 155) | private Card randomCard() {
    method intro (line 160) | public void intro() {

FILE: 01_Acey_Ducey/java/src/AceyDucey17.java
  class AceyDucey17 (line 11) | public class AceyDucey17 {
    method main (line 13) | public static void main(String[] args) {
    method playGame (line 33) | public static void playGame() {
    method determineWinnings (line 54) | public static int determineWinnings(Card lowCard, Card highCard, int b...
    method stillInterested (line 69) | public static boolean stillInterested(){
    method getBet (line 85) | public static int getBet(int cashOnHand){
    method inputNumber (line 99) | public static int inputNumber() {
    method getRandomCard (line 126) | public static Card getRandomCard(int from, int to){
    method between (line 130) | public boolean between(Card lower, Card higher){
    method toString (line 134) | @Override

FILE: 01_Acey_Ducey/java/src/AceyDuceyGame.java
  class AceyDuceyGame (line 5) | public class AceyDuceyGame {
    method main (line 7) | public static void main(String[] args) {

FILE: 01_Acey_Ducey/java/src/Card.java
  class Card (line 5) | public class Card {
    method Card (line 9) | Card(int value) {
    method init (line 13) | private void init(int value) {
    method getValue (line 38) | public int getValue() {
    method getName (line 42) | public String getName() {

FILE: 01_Acey_Ducey/javascript/aceyducey.js
  function getRandomCard (line 20) | function getRandomCard() {
  function newGameCards (line 30) | function newGameCards() {
  function getCardValue (line 47) | function getCardValue(card) {
  function main (line 72) | async function main() {
  function isValidYesNoString (line 148) | function isValidYesNoString(string) {
  function isValidYesString (line 152) | function isValidYesString(string) {
  function isValidNoString (line 156) | function isValidNoString(string) {
  function print (line 160) | function print(string) {
  function input (line 171) | function input() {
  function printInline (line 206) | function printInline(string) {
  function spaces (line 216) | function spaces(numberOfSpaces) {

FILE: 01_Acey_Ducey/python/acey_ducey.py
  function play_game (line 26) | def play_game() -> None:
  function main (line 68) | def main() -> None:

FILE: 01_Acey_Ducey/python/acey_ducey_oo.py
  class Card (line 17) | class Card(NamedTuple):
    method __str__ (line 21) | def __str__(self) -> str:
  class Deck (line 27) | class Deck:
    method __init__ (line 28) | def __init__(self) -> None:
    method build (line 32) | def build(self) -> None:
    method shuffle (line 37) | def shuffle(self) -> None:
    method deal (line 40) | def deal(self) -> Card:
  class Game (line 44) | class Game:
    method __init__ (line 45) | def __init__(self) -> None:
    method play (line 53) | def play(self) -> None:
  function game_loop (line 101) | def game_loop() -> None:
  function main (line 113) | def main() -> None:

FILE: 01_Acey_Ducey/ruby/aceyducey.rb
  function card_name (line 64) | def card_name(card)

FILE: 01_Acey_Ducey/rust/src/main.rs
  type Card (line 5) | struct Card(u8);
    method new_random (line 8) | fn new_random(rng: &mut ThreadRng) -> Card {
    method fmt (line 14) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type CardsPool (line 29) | struct CardsPool(Card, Card, Card);
    method new (line 32) | fn new() -> CardsPool {
    method is_in_win_range (line 45) | fn is_in_win_range(&self) -> bool {
  function main (line 50) | fn main() {
  function hello (line 101) | fn hello() {
  function get_bet (line 113) | fn get_bet(user_bank: u16) -> u16 {

FILE: 02_Amazing/csharp/Amazing.cs
  class AmazingGame (line 6) | class AmazingGame
    method GetDelimitedValue (line 14) | private static int GetDelimitedValue(String text, int pos)
    method Tab (line 26) | private static String Tab(int spaces)
    method Random (line 31) | public static int Random(int min, int max)
    method Play (line 37) | public void Play()
    method SetCellExit (line 83) | private Cell SetCellExit(Grid grid, Cell cell, List<Direction> possibl...
    method WriteMaze (line 109) | private void WriteMaze(int width, Grid grid, int enterCol)
    method GetPossibleDirs (line 139) | private List<Direction> GetPossibleDirs(Grid grid, Cell cell)
    method DisplayTextAndGetInput (line 166) | private String DisplayTextAndGetInput(String text)
    type Direction (line 173) | private enum Direction
    class Cell (line 181) | public class Cell
      method Cell (line 189) | public Cell(int row, int col)
    class Grid (line 198) | public class Grid
      method Grid (line 210) | public Grid(int length, int width)
      method SetupEntrance (line 227) | public int SetupEntrance()
      method SetupExit (line 234) | public void SetupExit()
      method StartingCell (line 240) | public Cell StartingCell()
      method IsPrevColSet (line 245) | public bool IsPrevColSet(Cell cell)
      method IsPrevRowSet (line 250) | public bool IsPrevRowSet(Cell cell)
      method IsNextColSet (line 255) | public bool IsNextColSet(Cell cell)
      method IsNextRowSet (line 260) | public bool IsNextRowSet(Cell cell)
      method GetPrevCol (line 265) | public Cell GetPrevCol(Cell cell)
      method GetPrevRow (line 270) | public Cell GetPrevRow(Cell cell)
      method GetNextCol (line 275) | public Cell GetNextCol(Cell cell)
      method GetNextRow (line 280) | public Cell GetNextRow(Cell cell)
      method GetFirstUnset (line 285) | public Cell GetFirstUnset(Cell cell)
  class Program (line 313) | class Program
    method Main (line 315) | static void Main(string[] args)

FILE: 02_Amazing/java/Amazing.java
  class Amazing (line 11) | public class Amazing {
    method Amazing (line 19) | public Amazing() {
    method getDelimitedValue (line 23) | private static int getDelimitedValue(String text, int pos) {
    method tab (line 32) | private static String tab(int spaces) {
    method random (line 38) | public static int random(int min, int max) {
    method play (line 43) | public void play() {
    method setCellExit (line 81) | private Cell setCellExit(Grid grid, Cell cell, ArrayList<Direction> po...
    method writeMaze (line 99) | private void writeMaze(int width, Grid grid, int enterCol) {
    method getPossibleDirs (line 131) | private ArrayList<Direction> getPossibleDirs(Grid grid, Cell cell) {
    method displayTextAndGetInput (line 149) | private String displayTextAndGetInput(String text) {
    type Direction (line 154) | enum Direction {
    class Cell (line 161) | public static class Cell {
      method Cell (line 168) | public Cell(int row, int col) {
    class Grid (line 174) | public static class Grid {
      method Grid (line 183) | public Grid(int length, int width) {
      method setupEntrance (line 197) | public int setupEntrance() {
      method setupExit (line 203) | public void setupExit() {
      method startingCell (line 208) | public Cell startingCell() {
      method isPrevColSet (line 212) | public boolean isPrevColSet(Cell cell) {
      method isPrevRowSet (line 216) | public boolean isPrevRowSet(Cell cell) {
      method isNextColSet (line 220) | public boolean isNextColSet(Cell cell) {
      method isNextRowSet (line 224) | public boolean isNextRowSet(Cell cell) {
      method getPrevCol (line 228) | public Cell getPrevCol(Cell cell) {
      method getPrevRow (line 232) | public Cell getPrevRow(Cell cell) {
      method getNextCol (line 236) | public Cell getNextCol(Cell cell) {
      method getNextRow (line 240) | public Cell getNextRow(Cell cell) {
      method getFirstUnset (line 244) | public Cell getFirstUnset(Cell cell) {

FILE: 02_Amazing/java/AmazingGame.java
  class AmazingGame (line 1) | public class AmazingGame {
    method main (line 2) | public static void main(String[] args) {

FILE: 02_Amazing/javascript/amazing.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 54) | async function main()

FILE: 02_Amazing/python/amazing.py
  class Maze (line 9) | class Maze:
    method __init__ (line 10) | def __init__(self, width: int, length: int) -> None:
    method add_exit (line 28) | def add_exit(self) -> None:
    method display (line 34) | def display(self) -> None:
  class Direction (line 57) | class Direction(enum.Enum):
  class Position (line 65) | class Position:
  function main (line 75) | def main() -> None:
  function print_intro (line 82) | def print_intro() -> None:
  function build_maze (line 87) | def build_maze(width: int, length: int) -> Maze:
  function make_opening (line 128) | def make_opening(
  function get_possible_directions (line 155) | def get_possible_directions(maze: Maze, pos: Position) -> List[Direction]:
  function get_maze_dimensions (line 173) | def get_maze_dimensions() -> Tuple[int, int]:

FILE: 02_Amazing/ruby/amazing.rb
  class BasicArrayTwoD (line 13) | class BasicArrayTwoD
    method initialize (line 14) | def initialize(rows, cols)
    method [] (line 18) | def [](row, col = nil)
    method []= (line 26) | def []=(row, col, n)
    method to_s (line 30) | def to_s(width: max_width, row_hilite: nil, col_hilite: nil)
    method max_width (line 42) | def max_width
  class Maze (line 47) | class Maze
    method initialize (line 63) | def initialize(width, height)
    method draw (line 73) | def draw
    method create (line 84) | def create
    method draw_top (line 141) | def draw_top(entry, width)
    method draw_row (line 153) | def draw_row(row)
    method draw_bottom (line 165) | def draw_bottom(row)
    method debug (line 177) | def debug(walls, row, col)
  class Amazing (line 186) | class Amazing
    method run (line 187) | def run
    method draw_header (line 201) | def draw_header
    method ask_dimensions (line 207) | def ask_dimensions

FILE: 02_Amazing/rust/src/main.rs
  function main (line 4) | fn main() {
  function get_user_input (line 171) | fn get_user_input(prompt: &str) -> usize {

FILE: 03_Animal/csharp/Branch.cs
  class Branch (line 3) | public class Branch
    method ToString (line 13) | public override string ToString()

FILE: 03_Animal/java/src/Animal.java
  class Animal (line 16) | public class Animal {
    method main (line 18) | public static void main(String[] args) {
    method askForInformationAndSave (line 76) | private static void askForInformationAndSave(Scanner scan, AnimalNode ...
    method addNewAnimal (line 89) | private static void addNewAnimal(Node current,
    method askQuestionAndGetReply (line 109) | private static boolean askQuestionAndGetReply(QuestionNode questionNod...
    method readYesOrNo (line 114) | private static boolean readYesOrNo(Scanner scanner) {
    method printKnownAnimals (line 130) | private static void printKnownAnimals(Node root) {
    method collectLeafNodes (line 140) | private static List<AnimalNode> collectLeafNodes(Node root) {
    method readMainChoice (line 152) | private static String readMainChoice(Scanner scan) {
    method printIntro (line 157) | private static void printIntro() {
    method printTree (line 167) | private static void printTree(Node root) {
    method print (line 173) | private static void print(Node root, StringBuilder buffer, String pref...
    type Node (line 189) | private interface Node {
    class QuestionNode (line 192) | private static class QuestionNode implements Node {
      method QuestionNode (line 197) | public QuestionNode(String question, Node trueAnswer, Node falseAnsw...
      method getQuestion (line 203) | public String getQuestion() {
      method getTrueAnswer (line 207) | public Node getTrueAnswer() {
      method setTrueAnswer (line 211) | public void setTrueAnswer(Node trueAnswer) {
      method getFalseAnswer (line 215) | public Node getFalseAnswer() {
      method setFalseAnswer (line 219) | public void setFalseAnswer(Node falseAnswer) {
      method toString (line 223) | @Override
    class AnimalNode (line 229) | private static class AnimalNode implements Node {
      method AnimalNode (line 232) | public AnimalNode(String animal) {
      method getAnimal (line 236) | public String getAnimal() {
      method toString (line 240) | @Override

FILE: 03_Animal/javascript/animal.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function show_animals (line 71) | function show_animals() {
  function main (line 100) | async function main()

FILE: 03_Animal/python/animal.py
  class Node (line 46) | class Node:
    method __init__ (line 51) | def __init__(
    method update_node (line 60) | def update_node(
    method is_leaf (line 76) | def is_leaf(self) -> bool:
  function list_known_animals (line 80) | def list_known_animals(root_node: Optional[Node]) -> None:
  function parse_input (line 96) | def parse_input(message: str, check_list: bool, root_node: Optional[Node...
  function avoid_void_input (line 111) | def avoid_void_input(message: str) -> str:
  function print_intro (line 118) | def print_intro() -> None:
  function main (line 125) | def main() -> None:

FILE: 03_Animal/ruby/animal.rb
  function intro (line 3) | def intro
  function ask (line 16) | def ask(question)
  function add_guess (line 23) | def add_guess(animals, guess)
  function get_all_animals (line 27) | def get_all_animals(feature, animals = Set.new)
  function create_feature (line 33) | def create_feature(current_animal)
  function guess_loop (line 45) | def guess_loop(feature)
  function main (line 74) | def main

FILE: 03_Animal/rust/src/main.rs
  function main (line 59) | fn main() {
  function read_input (line 107) | fn read_input() -> String {
  function keep_playing (line 115) | fn keep_playing() -> bool {
  function yes_no (line 121) | fn yes_no() -> bool {
  type BTree (line 133) | struct BTree {
    method new (line 143) | fn new(value: String, yes: String, no: String) -> BTree {
    method get_yes_key (line 154) | fn get_yes_key(&self) -> usize {
    method get_no_key (line 160) | fn get_no_key(&self) -> usize {
    method is_leaf (line 165) | fn is_leaf(&self) -> bool {
    method yes (line 171) | fn yes(&mut self) {
    method no (line 178) | fn no(&mut self) {
    method set (line 186) | fn set(&mut self, value: String, yes: String, no: String) {
    method get (line 195) | fn get(&self) -> String {
    method restart (line 203) | fn restart(&mut self) {
  function test_new (line 213) | fn test_new() {
  function test_get (line 225) | fn test_get() {
  function test_set (line 232) | fn test_set() {
  function test_yes (line 245) | fn test_yes() {
  function test_no (line 255) | fn test_no() {
  function test_is_leaf (line 265) | fn test_is_leaf() {
  function test_get_key (line 273) | fn test_get_key() {
  function test_restart (line 283) | fn test_restart() {

FILE: 04_Awari/csharp/Game.cs
  class Game (line 3) | public class Game
    method Reset (line 16) | public void Reset()
    method IsLegalPlayerMove (line 28) | public bool IsLegalPlayerMove(int move) =>
    method PlayerMove (line 32) | public void PlayerMove(int move) => MoveAndRegister(move - 1, _playerH...
    method ComputerTurn (line 34) | public List<int> ComputerTurn()
    method GetOutcome (line 48) | public GameOutcome GetOutcome()
    method MoveAndRegister (line 64) | private void MoveAndRegister(int pit, int homePosition)
    method Move (line 97) | private static int Move(int[] beans, int pit, int homePosition)
    method ComputerMove (line 124) | private int ComputerMove()
    method DetermineComputerMove (line 134) | private int DetermineComputerMove()
    method SimulateMove (line 157) | private int SimulateMove(int move)
    method ScoreBestNextPlayerMove (line 200) | private static int ScoreBestNextPlayerMove(int[] hypotheticalBeans)
    method ScoreNextPlayerMove (line 218) | private static int ScoreNextPlayerMove(int[] hypotheticalBeans, int move)
  type GameState (line 248) | public enum GameState
  type GameWinner (line 257) | public enum GameWinner
  type GameOutcome (line 264) | public record struct GameOutcome(GameWinner Winner, int Difference);

FILE: 04_Awari/java/Awari.java
  class Awari (line 4) | public class Awari{
    method Awari (line 13) | Awari(){
    method printBoard (line 32) | private void printBoard(){
    method playerMove (line 50) | private void playerMove(boolean val){
    method computerMove (line 99) | private void computerMove(boolean value){
    method distribute (line 167) | private int distribute(int seeds, int pos){
    method calculateOpposite (line 182) | private int calculateOpposite(int pos){
    method isGameOver (line 186) | private boolean isGameOver(boolean show){

FILE: 04_Awari/java/AwariGame.java
  class AwariGame (line 1) | public class AwariGame {
    method main (line 2) | public static void main(String[] args) {

FILE: 04_Awari/javascript/awari.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function show_number (line 57) | function show_number(number)
  function show_board (line 65) | function show_board()
  function do_move (line 84) | function do_move()
  function adjust_board (line 106) | function adjust_board()
  function computer_move (line 128) | function computer_move()
  function main (line 179) | async function main()

FILE: 04_Awari/python/awari.py
  function draw_pit (line 84) | def draw_pit(line: str, board, pit_index) -> str:
  function draw_board (line 92) | def draw_board(board) -> None:
  function play_game (line 116) | def play_game(board: List[int]) -> None:
  function computer_move (line 159) | def computer_move(msg: str, board) -> Tuple[int, bool, int, str]:
  function game_over (line 259) | def game_over(board) -> None:
  function do_capture (line 277) | def do_capture(m, home, board) -> None:
  function do_move (line 283) | def do_move(m, home, board) -> int:
  function player_has_stones (line 297) | def player_has_stones(board) -> bool:
  function computer_has_stones (line 301) | def computer_has_stones(board: Dict[int, int]) -> bool:
  function execute_move (line 305) | def execute_move(move, home: int, board) -> Tuple[int, bool, int]:
  function player_move_again (line 329) | def player_move_again(board) -> Tuple[int, bool, int]:
  function player_move (line 334) | def player_move(board) -> Tuple[int, bool, int]:
  function main (line 352) | def main() -> None:

FILE: 04_Awari/ruby/awari.rb
  function print_number (line 5) | def print_number(n)
  function input (line 15) | def input(prompt)
  class Game (line 51) | class Game
    method initialize (line 52) | def initialize(history, non_win_count)
    method play (line 64) | def play
    method game_over (line 106) | def game_over
    method end_game (line 111) | def end_game
    method perform_move (line 131) | def perform_move(move, home_pit)
    method update_history (line 139) | def update_history(current_move)
    method print_beans (line 147) | def print_beans
    method get_move (line 169) | def get_move(prompt)
    method distribute_beans (line 180) | def distribute_beans(start_pit, home_pit, beans = @beans)
    method print_bean (line 201) | def print_bean(bean_count)
    method get_integer_input (line 206) | def get_integer_input(prompt)
    method get_computer_move (line 227) | def get_computer_move

FILE: 04_Awari/rust/src/main.rs
  function main (line 7) | fn main() {
  type DistributeResult (line 20) | enum DistributeResult {
  type Game (line 30) | struct Game {
    method step_through (line 48) | fn step_through(&mut self, mut index: usize) -> usize {
    method play_turn (line 68) | fn play_turn(&mut self, is_repeat: bool) -> bool {
    method process_choice (line 138) | pub fn process_choice(&mut self, index: usize) -> DistributeResult {
    method is_game_over (line 158) | fn is_game_over(&self) -> bool {
    method draw (line 164) | fn draw(&self) {
  method default (line 36) | fn default() -> Self {
  function player_prompt (line 194) | pub fn player_prompt(message: &str) -> usize {

FILE: 05_Bagels/csharp/BagelNumber.cs
  type BagelValidation (line 7) | public enum BagelValidation
  class BagelNumber (line 14) | public class BagelNumber
    method ToString (line 19) | public override string ToString()
    method CreateSecretNumber (line 24) | public static BagelNumber CreateSecretNumber(int numDigits)
    method IsValid (line 36) | public static BagelValidation IsValid(string number, int length)
    method BagelNumber (line 50) | public BagelNumber(string number)
    method BagelNumber (line 75) | public BagelNumber(int[] digits)
    method GetDigits (line 80) | private static  int[] GetDigits(int numDigits)
    method Shuffle (line 88) | private static void Shuffle(int[] digits)
    method CompareTo (line 100) | public (int pico, int fermi) CompareTo(BagelNumber other)

FILE: 05_Bagels/csharp/Game.cs
  class Game (line 7) | public class Game : GameBase
    method GameLoop (line 9) | public void GameLoop()
    method PlayRound (line 28) | private bool  PlayRound()
    method PrintError (line 70) | private void PrintError(BagelValidation isValid)
    method PrintList (line 91) | private void PrintList(string msg, int repeat)
    method DisplayIntroText (line 97) | private void DisplayIntroText()

FILE: 05_Bagels/csharp/GameBase.cs
  class GameBase (line 5) | public class GameBase
    method TryAgain (line 13) | protected bool TryAgain()

FILE: 05_Bagels/csharp/Program.cs
  class Program (line 3) | public class Program
    method Main (line 5) | public static void Main(string[] args)

FILE: 05_Bagels/java/BagelGame.java
  class BagelGame (line 18) | public class BagelGame {
    type GameState (line 23) | enum GameState {
    method BagelGame (line 33) | public BagelGame() {
    method BagelGame (line 38) | public BagelGame(long seed) {
    method BagelGame (line 43) | public BagelGame(Random rand) {
    method isOver (line 65) | public boolean isOver() {
    method isWon (line 69) | public boolean isWon() {
    method getGuessNum (line 73) | public int getGuessNum() {
    method getSecretAsString (line 77) | public String getSecretAsString() {
    method toString (line 86) | @Override
    method validateGuess (line 95) | public String validateGuess(String guess) {
    method makeGuess (line 126) | public String makeGuess(String s) throws IllegalArgumentException {

FILE: 05_Bagels/java/Bagels.java
  class Bagels (line 35) | public class Bagels {
    method main (line 37) | public static void main(String[] args) {
    method getValidGuess (line 97) | private static String getValidGuess(BagelGame game) {
    method getReplayResponse (line 117) | private static boolean getReplayResponse() {

FILE: 05_Bagels/javascript/bagels.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 64) | async function main()

FILE: 05_Bagels/python/bagels.py
  function print_rules (line 39) | def print_rules() -> None:
  function pick_number (line 47) | def pick_number() -> List[str]:
  function get_valid_guess (line 56) | def get_valid_guess(guesses: int) -> str:
  function build_result_string (line 79) | def build_result_string(num: List[str], guess: str) -> str:
  function main (line 105) | def main() -> None:

FILE: 05_Bagels/ruby/bagels.rb
  function print_instructions (line 6) | def print_instructions
  function generate_target (line 15) | def generate_target
  function puts_clue_for (line 22) | def puts_clue_for(guess_number, target_number)

FILE: 05_Bagels/rust/src/main.rs
  type Digits (line 6) | type Digits = [u8; 3];
  function main (line 8) | fn main() -> io::Result<()> {
  function print_header (line 38) | fn print_header() {
  function print_rules (line 45) | fn print_rules() {
  function read_lowercase_input (line 54) | fn read_lowercase_input() -> io::Result<String> {
  function generate_random_digits (line 60) | fn generate_random_digits() -> Digits {
  function guess (line 70) | fn guess(solution: Digits) -> io::Result<bool> {
  function read_valid_guess (line 102) | fn read_valid_guess(round: u8) -> io::Result<Digits> {

FILE: 06_Banner/csharp/banner.cs
  class Banner (line 7) | class Banner
    method GetNumber (line 74) | private int GetNumber(string DisplayText)
    method GetBool (line 96) | private bool GetBool(string DisplayText)
    method GetString (line 108) | private string GetString(string DisplayText)
    method GetInput (line 117) | private void GetInput()
    method PrintChar (line 133) | private void PrintChar(char ch)
    method PrintBanner (line 220) | private void PrintBanner()
    method Play (line 237) | public void Play()
  class Program (line 244) | class Program
    method Main (line 246) | static void Main(string[] args)

FILE: 06_Banner/java/Banner.java
  class Banner (line 18) | public class Banner {
    method Banner (line 22) | public Banner() {
    method play (line 28) | public void play() {
    method main (line 217) | public static void main(String[] args) {

FILE: 06_Banner/javascript/banner.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 93) | async function main()

FILE: 06_Banner/python/banner.py
  function print_banner (line 55) | def print_banner() -> None:

FILE: 07_Basketball/csharp/Clock.cs
  class Clock (line 6) | internal class Clock
    method Clock (line 11) | public Clock(IReadWrite io) => _io = io;
    method Increment (line 17) | public void Increment(Scoreboard scoreboard)
    method StartOvertime (line 24) | public void StartOvertime() => time = 93;

FILE: 07_Basketball/csharp/Defense.cs
  class Defense (line 3) | internal class Defense
    method Defense (line 7) | public Defense(float value) => Set(value);
    method Set (line 9) | public void Set(float value) => _value = value;

FILE: 07_Basketball/csharp/Game.cs
  class Game (line 8) | internal class Game
    method Game (line 15) | private Game(Clock clock, Scoreboard scoreboard, TextIO io, IRandom ra...
    method Create (line 23) | public static Game Create(TextIO io, IRandom random)
    method Play (line 40) | public void Play()
    method IsGameOver (line 60) | private bool IsGameOver()

FILE: 07_Basketball/csharp/IRandomExtensions.cs
  class IRandomExtensions (line 5) | internal static class IRandomExtensions
    method NextShot (line 7) | internal static Shot NextShot(this IRandom random) => Shot.Get(random....

FILE: 07_Basketball/csharp/IReadWriteExtensions.cs
  class IReadWriteExtensions (line 5) | internal static class IReadWriteExtensions
    method ReadDefense (line 7) | public static float ReadDefense(this IReadWrite io, string prompt)
    method TryReadInteger (line 16) | private static bool TryReadInteger(this IReadWrite io, string prompt, ...
    method ReadShot (line 23) | public static Shot? ReadShot(this IReadWrite io, string prompt)

FILE: 07_Basketball/csharp/JumpShot.cs
  class JumpShot (line 3) | public class JumpShot : Shot
    method JumpShot (line 5) | public JumpShot()

FILE: 07_Basketball/csharp/Plays/BallContest.cs
  class BallContest (line 6) | internal class BallContest
    method BallContest (line 13) | internal BallContest(float probability, string messageFormat, IReadWri...
    method Resolve (line 21) | internal bool Resolve(Scoreboard scoreboard)

FILE: 07_Basketball/csharp/Plays/HomeTeamPlay.cs
  class HomeTeamPlay (line 6) | internal class HomeTeamPlay : Play
    method HomeTeamPlay (line 14) | public HomeTeamPlay(TextIO io, IRandom random, Clock clock, Defense de...
    method Resolve (line 24) | internal override bool Resolve(Scoreboard scoreboard)
    method Resolve (line 53) | private bool Resolve(JumpShot shot, Scoreboard scoreboard) =>
    method Resolve (line 61) | private bool Resolve(Shot shot, Scoreboard scoreboard) =>
    method ResolveShotOffTarget (line 69) | private bool ResolveShotOffTarget(Scoreboard scoreboard) =>
    method ResolveHomeRebound (line 74) | private bool ResolveHomeRebound(Scoreboard scoreboard, Action<Scoreboa...
    method ResolvePossibleSteal (line 78) | private void ResolvePossibleSteal(Scoreboard scoreboard)
    method ResolveShotOffTheRim (line 89) | private void ResolveShotOffTheRim(Scoreboard scoreboard) =>

FILE: 07_Basketball/csharp/Plays/Play.cs
  class Play (line 6) | internal abstract class Play
    method Play (line 12) | public Play(IReadWrite io, IRandom random, Clock clock)
    method ClockIncrementsToHalfTime (line 19) | protected bool ClockIncrementsToHalfTime(Scoreboard scoreboard)
    method Resolve (line 25) | internal abstract bool Resolve(Scoreboard scoreboard);
    method ResolveFreeThrows (line 27) | protected void ResolveFreeThrows(Scoreboard scoreboard, string message...
    method Resolve (line 33) | protected Probably Resolve(string message) => Resolve(message, 1f);
    method Resolve (line 35) | protected Probably Resolve(string message, float defenseFactor)

FILE: 07_Basketball/csharp/Plays/VisitingTeamPlay.cs
  class VisitingTeamPlay (line 6) | internal class VisitingTeamPlay : Play
    method VisitingTeamPlay (line 12) | public VisitingTeamPlay(TextIO io, IRandom random, Clock clock, Defens...
    method Resolve (line 20) | internal override bool Resolve(Scoreboard scoreboard)
    method Resolve (line 44) | private bool Resolve(JumpShot shot, Scoreboard scoreboard) =>
    method Resolve (line 51) | private bool Resolve(Shot shot, Scoreboard scoreboard) =>
    method ResolveBadShot (line 56) | private bool ResolveBadShot(Scoreboard scoreboard, string message, flo...
    method ResolveVisitorsRebound (line 61) | private bool ResolveVisitorsRebound(Scoreboard scoreboard)

FILE: 07_Basketball/csharp/Probably.cs
  type Probably (line 11) | internal struct Probably
    method Probably (line 17) | internal Probably(float defenseFactor, IRandom random, bool? result = ...
    method Do (line 24) | public Probably Do(float probability, Action action) =>
    method Do (line 29) | public Probably Do(float probability, Func<bool> action) =>
    method Or (line 34) | public Probably Or(float probability, Action action) => Do(probability...
    method Or (line 36) | public Probably Or(float probability, Func<bool> action) => Do(probabi...
    method Or (line 38) | public bool Or(Action action) => _result ?? Resolve(action) ?? false;
    method Resolve (line 40) | private bool? Resolve(Action action)
    method Resolve (line 46) | private bool? Resolve(Func<bool> action) => action.Invoke();
    method ShouldResolveAction (line 48) | private readonly bool ShouldResolveAction(float probability) =>

FILE: 07_Basketball/csharp/Resources/Resource.cs
  class Resource (line 6) | internal static class Resource
    class Streams (line 8) | internal static class Streams
    class Formats (line 14) | internal static class Formats
    method GetString (line 22) | private static string GetString([CallerMemberName] string? name = null)
    method GetStream (line 29) | private static Stream GetStream([CallerMemberName] string? name = null...

FILE: 07_Basketball/csharp/Scoreboard.cs
  class Scoreboard (line 6) | internal class Scoreboard
    method Scoreboard (line 11) | public Scoreboard(Team home, Team visitors, IReadWrite io)
    method AddBasket (line 25) | public void AddBasket(string message) => AddScore(2, message);
    method AddFreeThrows (line 27) | public void AddFreeThrows(uint count, string message) => AddScore(coun...
    method AddScore (line 29) | private void AddScore(uint score, string message)
    method Turnover (line 39) | public void Turnover(string? message = null)
    method Display (line 46) | public void Display(string? format = null) =>

FILE: 07_Basketball/csharp/Shot.cs
  class Shot (line 3) | public class Shot
    method Shot (line 7) | public Shot(string name)
    method TryGet (line 12) | public static bool TryGet(int shotNumber, out Shot? shot)
    method Get (line 27) | public static Shot Get(float shotNumber) =>
    method ToString (line 36) | public override string ToString() => _name;

FILE: 07_Basketball/csharp/Team.cs
  type Team (line 5) | internal record Team(string Name, Play PlayResolver)

FILE: 07_Basketball/java/Basketball.java
  class Basketball (line 10) | public class Basketball {
    method Basketball (line 20) | public Basketball() {
    method add_points (line 66) | private void add_points(int team, int points) {
    method ball_passed_back (line 72) | private void ball_passed_back() {
    method change_defense (line 78) | private void change_defense() {
    method foul_shots (line 96) | private void foul_shots(int team) {
    method halftime (line 117) | private void halftime() {
    method print_score (line 124) | private void print_score() {
    method start_of_period (line 129) | private void start_of_period() {
    method two_minute_warning (line 142) | private void two_minute_warning() {
    method dartmouth_jump_shot (line 147) | private void dartmouth_jump_shot() {
    method dartmouth_non_jump_shot (line 219) | private void dartmouth_non_jump_shot() {
    method dartmouth_ball (line 283) | private void dartmouth_ball() {
    method opponent_jumpshot (line 334) | private void opponent_jumpshot() {
    method opponent_non_jumpshot (line 394) | private void opponent_non_jumpshot() {
    method opponent_ball (line 448) | private void opponent_ball() {
    method main (line 462) | public static void main(String[] args) {

FILE: 07_Basketball/javascript/basketball.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function two_minutes (line 52) | function two_minutes()
  function show_scores (line 59) | function show_scores()
  function score_computer (line 64) | function score_computer()
  function score_player (line 70) | function score_player()
  function half_time (line 76) | function half_time()
  function foul (line 85) | function foul()
  function player_play (line 101) | function player_play()
  function computer_play (line 208) | function computer_play()
  function main (line 302) | async function main()

FILE: 07_Basketball/python/basketball.py
  function print_intro (line 12) | def print_intro() -> None:
  class Basketball (line 29) | class Basketball:
    method __init__ (line 30) | def __init__(self) -> None:
    method add_points (line 45) | def add_points(self, team: Literal[0, 1], points: Literal[0, 1, 2]) ->...
    method ball_passed_back (line 54) | def ball_passed_back(self) -> None:
    method change_defense (line 58) | def change_defense(self) -> None:
    method foul_shots (line 72) | def foul_shots(self, team: Literal[0, 1]) -> None:
    method halftime (line 87) | def halftime(self) -> None:
    method print_score (line 93) | def print_score(self) -> None:
    method start_of_period (line 97) | def start_of_period(self) -> None:
    method two_minute_warning (line 107) | def two_minute_warning(self) -> None:
    method dartmouth_jump_shot (line 111) | def dartmouth_jump_shot(self) -> None:
    method dartmouth_non_jump_shot (line 162) | def dartmouth_non_jump_shot(self) -> None:
    method dartmouth_ball (line 209) | def dartmouth_ball(self) -> None:
    method opponent_jumpshot (line 245) | def opponent_jumpshot(self) -> None:
    method opponent_non_jumpshot (line 289) | def opponent_non_jumpshot(self) -> None:
    method opponent_ball (line 330) | def opponent_ball(self) -> None:
  function get_defense_choice (line 346) | def get_defense_choice(defense_choices: List[float]) -> float:
  function get_dartmouth_ball_choice (line 364) | def get_dartmouth_ball_choice(shot_choices: List[Literal[0, 1, 2, 3, 4]]...
  function get_opponents_name (line 382) | def get_opponents_name() -> str:

FILE: 07_Basketball/ruby/basketball.rb
  class Basketball (line 1) | class Basketball
    method initialize (line 3) | def initialize
    method dartmouth_ball (line 33) | def dartmouth_ball
    method add_points (line 64) | def add_points team, points
    method ball_passed_back (line 69) | def ball_passed_back
    method change_defense (line 73) | def change_defense
    method foul_shots (line 78) | def foul_shots team
    method halftime (line 93) | def halftime
    method print_score (line 99) | def print_score
    method start_of_period (line 103) | def start_of_period
    method two_minute_warning (line 114) | def two_minute_warning
    method dartmouth_jump_shot (line 118) | def dartmouth_jump_shot
    method dartmouth_non_jump_shot (line 174) | def dartmouth_non_jump_shot
    method opponent_jumpshot (line 226) | def opponent_jumpshot
    method opponent_non_jumpshot (line 275) | def opponent_non_jumpshot
    method opponent_ball (line 320) | def opponent_ball
    method get_defense (line 335) | def get_defense defense_choices, type = "starting"

FILE: 08_Batnum/csharp/BatnumGame.cs
  type WinOptions (line 10) | public enum WinOptions
  type Players (line 22) | public enum Players
  class BatnumGame (line 28) | public class BatnumGame
    method BatnumGame (line 30) | public BatnumGame(int pileSize, WinOptions winCriteria, int minTake, i...
    method TakeTurn (line 56) | public string TakeTurn()
    method PlayerTurn (line 67) | private string PlayerTurn()
    method ComputerTurn (line 88) | private string ComputerTurn()

FILE: 08_Batnum/csharp/ConsoleUtilities.cs
  class ConsoleUtilities (line 9) | public static class ConsoleUtilities
    method AskNumberRangeQuestion (line 19) | public static (int min, int max) AskNumberRangeQuestion(string questio...
    method AskNumberQuestion (line 47) | public static int AskNumberQuestion(string question, Func<int, bool> V...
    method CenterText (line 70) | public static string CenterText(string content)
    method WriteLineWordWrap (line 82) | public static void WriteLineWordWrap(string paragraph, int tabSize = 4)

FILE: 08_Batnum/csharp/Properties/Resources.Designer.cs
  class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: 08_Batnum/java/src/BatNum.java
  class BatNum (line 13) | public class BatNum {
    type GAME_STATE (line 15) | private enum GAME_STATE {
    type WIN_OPTION (line 37) | enum WIN_OPTION {
    type WINNER (line 43) | enum WINNER {
    method BatNum (line 58) | public BatNum() {
    method play (line 69) | public void play() {
    method calculateComputersTurn (line 219) | private int calculateComputersTurn(int pileSizeLeft) {
    method intro (line 231) | private void intro() {
    method displayTextAndGetNumber (line 253) | private int displayTextAndGetNumber(String text) {
    method displayTextAndGetInput (line 263) | private String displayTextAndGetInput(String text) {
    method simulateTabs (line 274) | private String simulateTabs(int spaces) {
    method getDelimitedValue (line 288) | private int getDelimitedValue(String text, int pos) {

FILE: 08_Batnum/java/src/BatNumGame.java
  class BatNumGame (line 1) | public class BatNumGame {
    method main (line 3) | public static void main(String[] args) {

FILE: 08_Batnum/javascript/batnum.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 08_Batnum/python/batnum.py
  class WinOptions (line 5) | class WinOptions(IntEnum):
    method _missing_ (line 11) | def _missing_(cls, value: Any) -> "WinOptions":
  class StartOptions (line 24) | class StartOptions(IntEnum):
    method _missing_ (line 30) | def _missing_(cls, value: Any) -> "StartOptions":
  function print_intro (line 43) | def print_intro() -> None:
  function get_params (line 63) | def get_params() -> Tuple[int, int, int, StartOptions, WinOptions]:
  function get_pile_size (line 84) | def get_pile_size() -> int:
  function get_win_option (line 95) | def get_win_option() -> WinOptions:
  function get_min_max (line 102) | def get_min_max() -> Tuple[int, int]:
  function get_start_option (line 112) | def get_start_option() -> StartOptions:
  function player_move (line 119) | def player_move(
  function computer_pick (line 147) | def computer_pick(
  function computer_move (line 160) | def computer_move(
  function play_game (line 189) | def play_game(
  function main (line 219) | def main() -> None:

FILE: 08_Batnum/ruby/batnum.rb
  function instructions (line 3) | def instructions
  function ask_for_pile_size (line 17) | def ask_for_pile_size
  function ask_for_goal (line 27) | def ask_for_goal
  function ask_for_min_max_take (line 35) | def ask_for_min_max_take
  function ask_who_makes_first_move (line 47) | def ask_who_makes_first_move
  function ask_for_player_take (line 55) | def ask_for_player_take(min_take:, max_take:)
  function battle (line 64) | def battle(pile:, goal:, min_take:, max_take:, first_move:)
  function main (line 112) | def main

FILE: 08_Batnum/rust/src/main.rs
  function print_intro (line 4) | fn print_intro() {
  type Params (line 32) | struct Params {
    method get_params (line 53) | pub fn get_params() -> Self {
    method get_pile_size (line 68) | fn get_pile_size() -> usize {
    method get_win_option (line 74) | fn get_win_option() -> WinOption {
    method get_start_option (line 95) | fn get_start_option() -> StartOption {
    method get_min_max (line 116) | fn get_min_max() -> (usize, usize) {
  type StartOption (line 41) | enum StartOption {
  type WinOption (line 47) | enum WinOption {
  function read_input_integer (line 129) | fn read_input_integer() -> usize {
  function player_move (line 153) | fn player_move(pile_size: &mut usize, params: &Params) -> bool {
  function computer_pick (line 180) | fn computer_pick(pile_size: usize, params: &Params) -> usize {
  function computer_move (line 200) | fn computer_move(pile_size: &mut usize, params: &Params) -> bool {
  function play_game (line 216) | fn play_game(params: &Params) {
  function main (line 233) | fn main() -> ! {

FILE: 09_Battle/csharp/Game.cs
  class Game (line 6) | public class Game
    method Run (line 12) | public void Run()
    method SetShip (line 32) | private bool SetShip(int shipType, int shipNum)
    method DisplayIntro (line 217) | public void DisplayIntro()
    method UserInteraction (line 227) | public void UserInteraction()
    method IsValid (line 335) | public bool IsValid(int[] input) => input.Length == 2 && input.All(Val...
    method Valid (line 337) | public bool Valid(int value) => value > 0 && value < 7;
    method Print (line 339) | public void Print(string str = "") => Console.WriteLine(str);
    method Write (line 341) | public void Write(string value) => Console.Write(value);
    method Tab (line 343) | public string Tab(int pos) => new String(' ', pos);
    method Rnd (line 345) | public int Rnd(int seed) => random.Next(seed);

FILE: 09_Battle/csharp/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main(string[] args)

FILE: 09_Battle/java/Battle.java
  class Battle (line 12) | public class Battle {
    method main (line 39) | public static void main(String args[]) {
    method Battle (line 46) | public Battle(int scale, int[] shipSizes, int[] shipCounts) {
    method play (line 87) | public void play() {

FILE: 09_Battle/java/Input.java
  class Input (line 9) | public class Input {
    method Input (line 16) | public Input(int seaSize) {
    method readCoordinates (line 22) | public boolean readCoordinates() throws IOException {
    method x (line 65) | public int x() { return coords[0]; }
    method y (line 66) | public int y() { return coords[1]; }

FILE: 09_Battle/java/Sea.java
  class Sea (line 2) | class Sea {
    method Sea (line 11) | public Sea(int make_size) {
    method size (line 16) | public int size() { return size; }
    method encodedDump (line 20) | public String encodedDump() {
    method isEmpty (line 34) | public boolean isEmpty(int x, int y) {
    method get (line 43) | public int get(int x, int y) {
    method set (line 47) | public void set(int x, int y, int value) {
    method index (line 52) | private int index(int x, int y) {

FILE: 09_Battle/java/Ship.java
  class Ship (line 8) | class Ship {
    method Ship (line 26) | public Ship(int i, int sz) {
    method id (line 33) | public int id() { return id; }
    method size (line 35) | public int size() { return size; }
    method hit (line 38) | public void hit(int x, int y) {
    method isSunk (line 54) | public boolean isSunk() { return sunk; }
    method wasHit (line 57) | public boolean wasHit(int x, int y) {
    method placeRandom (line 70) | public void placeRandom(Sea s) {
    method place (line 90) | public boolean place(Sea s, int x, int y, int orient) {
    method extendShip (line 154) | private boolean extendShip(Sea s, int fromX, int fromY, int toX, int t...

FILE: 09_Battle/javascript/battle.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 53) | async function main()

FILE: 09_Battle/python/battle.py
  function random_vector (line 15) | def random_vector() -> Tuple[int, int]:
  function add_vector (line 26) | def add_vector(point: PointType, vector: VectorType) -> PointType:
  function place_ship (line 30) | def place_ship(sea: SeaType, size: int, code: int) -> None:
  function print_encoded_sea (line 56) | def print_encoded_sea(sea: SeaType) -> None:
  function is_within_sea (line 61) | def is_within_sea(point: PointType, sea: SeaType) -> bool:
  function has_ship (line 65) | def has_ship(sea: SeaType, code: int) -> bool:
  function count_sunk (line 69) | def count_sunk(sea: SeaType, *codes: int) -> int:
  function value_at (line 73) | def value_at(point: PointType, sea: SeaType) -> int:
  function set_value_at (line 77) | def set_value_at(value: int, point: PointType, sea: SeaType) -> None:
  function get_next_target (line 81) | def get_next_target(sea: SeaType) -> PointType:
  function setup_ships (line 102) | def setup_ships(sea: SeaType) -> None:
  function main (line 111) | def main() -> None:

FILE: 09_Battle/rust/src/main.rs
  type ShipLength (line 10) | enum ShipLength {
  type Point (line 17) | struct Point(i8, i8);
    type Output (line 20) | type Output = Self;
    method add (line 22) | fn add(self, rhs: Self) -> Self::Output {
    method is_outside (line 28) | pub fn is_outside(&self, width: usize) -> bool {
    method userinput2coordinate (line 33) | pub fn userinput2coordinate(self) -> Self {
  type Ship (line 38) | struct Ship(Vec<Point>);
    method new (line 41) | pub fn new(length: ShipLength) -> Self {
    method random_vector (line 63) | fn random_vector() -> Point {
    method collide (line 75) | pub fn collide(&self, see: &[Vec<i8>]) -> bool {
    method place (line 79) | pub fn place(self, see: &mut [Vec<i8>], code: i8) {
  type Report (line 86) | enum Report {
  type See (line 92) | struct See {
    constant WIDTH (line 97) | pub const WIDTH: usize = 6;
    method place_ship (line 99) | fn place_ship(data: &mut [Vec<i8>], length: ShipLength, code: i8) {
    method new (line 110) | pub fn new() -> Self {
    method report (line 123) | pub fn report(&mut self, point: Point) -> Report {
    method has_ship (line 136) | pub fn has_ship(&self, code: i8) -> bool {
    method has_any_ship (line 140) | pub fn has_any_ship(&self) -> bool {
    method count_sunk (line 144) | pub fn count_sunk(&self, ship: ShipLength) -> i32 {
    method fmt (line 157) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function input_point (line 168) | fn input_point() -> Result<Point, ()> {
  function get_next_target (line 185) | fn get_next_target() -> Point {
  function main (line 204) | fn main() {

FILE: 10_Blackjack/csharp/Card.cs
  class Card (line 3) | public class Card
    method Card (line 7) | public Card(int index)

FILE: 10_Blackjack/csharp/Deck.cs
  class Deck (line 6) | public class Deck
    method Deck (line 13) | public Deck()
    method Reshuffle (line 25) | private void Reshuffle()
    method DrawCard (line 41) | public Card DrawCard()
    method Discard (line 51) | public void Discard(IEnumerable<Card> cards)

FILE: 10_Blackjack/csharp/Game.cs
  class Game (line 7) | public class Game
    method Game (line 14) | public Game(int numberOfPlayers)
    method PlayGame (line 23) | public void PlayGame()
    method PlayRound (line 34) | public void PlayRound()
    method GetPlayerBets (line 94) | private void GetPlayerBets()
    method DealHands (line 101) | private void DealHands()
    method PlayHand (line 120) | private void PlayHand(Player player)
    method TakeHit (line 173) | private bool TakeHit(Hand hand)
    method PromptForAnotherHit (line 185) | private bool PromptForAnotherHit()
    method TallyResults (line 190) | private void TallyResults()
    method CalculateWinnings (line 209) | private int CalculateWinnings(Player player, Hand hand)
    method ResetRoundState (line 220) | private void ResetRoundState()

FILE: 10_Blackjack/csharp/Hand.cs
  class Hand (line 6) | public class Hand
    method AddCard (line 11) | public Card AddCard(Card card)
    method Discard (line 18) | public void Discard(Deck deck)
    method SplitHand (line 25) | public void SplitHand(Hand secondHand)

FILE: 10_Blackjack/csharp/Player.cs
  class Player (line 3) | public class Player
    method Player (line 5) | public Player(int index)

FILE: 10_Blackjack/csharp/Program.cs
  class Program (line 5) | static class Program
    method Main (line 7) | static void Main(string[] args)
    method OfferInstructions (line 22) | private static void OfferInstructions()

FILE: 10_Blackjack/csharp/Prompt.cs
  class Prompt (line 5) | public static class Prompt
    method ForYesNo (line 7) | public static bool ForYesNo(string prompt)
    method ForInteger (line 21) | public static int ForInteger(string prompt, int minimum = 1, int maxim...
    method ForCommandCharacter (line 35) | public static string ForCommandCharacter(string prompt, string allowed...
    method WriteNotUnderstood (line 53) | private static void WriteNotUnderstood()

FILE: 10_Blackjack/java/src/Blackjack.java
  class Blackjack (line 30) | public class Blackjack {
    method main (line 31) | public static void main(String[] args) {

FILE: 10_Blackjack/java/src/Card.java
  type Suit (line 14) | public enum Suit {
  method toString (line 27) | public String toString() {
  method toProseString (line 51) | public String toProseString() {

FILE: 10_Blackjack/java/src/Deck.java
  class Deck (line 6) | public class Deck {
    method Deck (line 20) | public Deck(Function<LinkedList<Card>, LinkedList<Card>> shuffleAlgori...
    method deal (line 30) | public Card deal() {
    method reshuffle (line 40) | public void reshuffle() {
    method size (line 54) | public int size() {
    method getCards (line 62) | public List<Card> getCards() {

FILE: 10_Blackjack/java/src/Game.java
  class Game (line 9) | public class Game {
    method Game (line 14) | public Game(Deck deck, UserIo userIo) {
    method run (line 22) | public void run() {
    method collectInsurance (line 103) | protected void collectInsurance(Iterable<Player> players) {
    method printInitialDeal (line 128) | private void printInitialDeal(List<Player> players, Player dealer) {
    method play (line 157) | protected void play(Player player) {
    method play (line 161) | private void play(Player player, int handNumber) {
    method shouldPlayDealer (line 234) | protected boolean shouldPlayDealer(List<Player> players){
    method playDealer (line 258) | protected void playDealer(Player dealer) {
    method evaluateRound (line 289) | protected void evaluateRound(List<Player> players, Player dealer) {
    method betsAreValid (line 339) | public boolean betsAreValid(Collection<Player> players) {

FILE: 10_Blackjack/java/src/Player.java
  class Player (line 8) | public class Player {
    method Player (line 21) | public Player(int playerNumber) {
    method getPlayerNumber (line 31) | public int getPlayerNumber() {
    method getCurrentBet (line 35) | public double getCurrentBet() {
    method setCurrentBet (line 39) | public void setCurrentBet(double currentBet) {
    method getSplitBet (line 43) | public double getSplitBet() {
    method getInsuranceBet (line 47) | public double getInsuranceBet() {
    method setInsuranceBet (line 51) | public void setInsuranceBet(double insuranceBet) {
    method recordRound (line 59) | public void recordRound(double totalBet) {
    method getTotal (line 70) | public double getTotal() {
    method dealCard (line 79) | public void dealCard(Card card) {
    method dealCard (line 89) | public void dealCard(Card card, int handNumber) {
    method canSplit (line 103) | public boolean canSplit() {
    method isSplit (line 117) | public boolean isSplit() {
    method split (line 124) | public void split() {
    method canDoubleDown (line 136) | public boolean canDoubleDown(int handNumber) {
    method doubleDown (line 152) | public void doubleDown(Card card, int handNumber) {
    method resetHand (line 166) | public void resetHand() {
    method getHand (line 171) | public List<Card> getHand() {
    method getHand (line 180) | public List<Card> getHand(int handNumber) {

FILE: 10_Blackjack/java/src/ScoringUtils.java
  class ScoringUtils (line 3) | public final class ScoringUtils {
    method scoreHand (line 12) | public static final int scoreHand(List<Card> hand) {
    method compareHands (line 37) | public static final int compareHands(List<Card> handA, List<Card> hand...

FILE: 10_Blackjack/java/src/UserIo.java
  class UserIo (line 17) | public class UserIo {
    method UserIo (line 30) | public UserIo(Reader in, Writer out) {
    method println (line 40) | public void println(String text) {
    method println (line 50) | public void println(String text, int leftPad) {
    method print (line 60) | public void print(String text) {
    method readLine (line 71) | private String readLine() {
    method prompt (line 89) | public String prompt(String prompt) {
    method promptBoolean (line 99) | public boolean promptBoolean(String prompt) {
    method promptInt (line 120) | public int promptInt(String prompt) {
    method promptDouble (line 145) | public double promptDouble(String prompt) {

FILE: 10_Blackjack/java/test/DeckTest.java
  class DeckTest (line 5) | public class DeckTest {
    method testInit (line 7) | @Test

FILE: 10_Blackjack/java/test/GameTest.java
  class GameTest (line 22) | public class GameTest {
    method resetIo (line 31) | @BeforeEach
    method playerGets (line 40) | private void playerGets(int value, Card.Suit suit) {
    method playerSays (line 44) | private void playerSays(String action) {
    method initGame (line 48) | private void initGame() {
    method printOutput (line 57) | @AfterEach
    method shouldQuitOnCtrlD (line 62) | @Test
    method collectInsuranceNo (line 76) | @Test
    method collectInsuranceYes (line 94) | @Test
    method collectInsuranceYesTooMuch (line 115) | @Test
    method collectInsuranceYesNegative (line 136) | @Test
    method collectInsuranceYesTwoPlayers (line 157) | @Test
    method playEndOnStay (line 184) | @Test
    method playHitUntilBust (line 201) | @Test
    method playDoubleDown (line 224) | @Test
    method playDoubleDownLate (line 245) | @Test
    method playSplitEndOnStay (line 267) | @Test
    method playSplitHitUntilBust (line 290) | @Test
    method playSplitHitUntilBustHand2 (line 313) | @Test
    method playSplitDoubleDown (line 337) | @Test
    method playSplitTwice (line 367) | @Test
    method playSplitTwiceHand2 (line 391) | @Test
    method evaluateRoundWithSplitHands (line 415) | @Test
    method evaluateRoundWithInsurance (line 447) | @Test
    method evaluateRoundWithPush (line 473) | @Test
    method shouldPlayDealerBust (line 497) | @Test
    method ShouldPlayer (line 524) | @Test
    method shouldPlayDealerNonNaturalBlackjack (line 551) | @Test
    method shouldPlayDealerNonBlackjack (line 569) | @Test
    method playDealerLessThanSeventeen (line 586) | @Test
    method playDealerMoreThanSeventeen (line 604) | @Test

FILE: 10_Blackjack/java/test/ScoringUtilsTest.java
  class ScoringUtilsTest (line 9) | public class ScoringUtilsTest {
    method scoreHandHardAce (line 11) | @Test
    method scoreHandMultipleAces (line 27) | @Test
    method compareHandsAWins (line 43) | @Test
    method compareHandsBwins (line 59) | @Test
    method compareHandsAWinsWithNaturalBlackJack (line 76) | @Test
    method compareHandsBWinsWithNaturalBlackJack (line 94) | @Test
    method compareHandsTieBothBlackJack (line 111) | @Test
    method compareHandsTieNoBlackJack (line 127) | @Test
    method compareHandsTieBust (line 143) | @Test
    method compareHandsABusted (line 160) | @Test
    method compareHandsBBusted (line 177) | @Test

FILE: 10_Blackjack/java/test/UserIoTest.java
  class UserIoTest (line 15) | public class UserIoTest {
    method testPromptBooleanAcceptsNo (line 17) | @ParameterizedTest(name = "''{0}'' is accepted as ''no''")
    method testPromptBooleanAcceptsYes (line 33) | @ParameterizedTest(name = "''{0}'' is accepted as ''yes''")
    method testPromptIntAcceptsNumbers (line 49) | @ParameterizedTest(name = "''{0}'' is accepted as number")
    method testPromptIntRepromptsOnNonNumeric (line 69) | @Test

FILE: 10_Blackjack/javascript/blackjack.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function af (line 66) | function af(q) {
  function reshuffle (line 70) | function reshuffle()
  function get_card (line 84) | function get_card()
  function card_print (line 92) | function card_print(x)
  function alt_card_print (line 98) | function alt_card_print(x)
  function add_card (line 104) | function add_card(which)
  function evaluate_hand (line 135) | function evaluate_hand(which)
  function add_card_to_row (line 145) | function add_card_to_row(i, x) {
  function discard_row (line 158) | function discard_row(i) {
  function print_total (line 167) | function print_total(i) {
  function total_aa (line 174) | function total_aa()
  function total_ab (line 180) | function total_ab()
  function total_ac (line 186) | function total_ac()
  function process_input (line 192) | function process_input(str)
  function main (line 208) | async function main()

FILE: 10_Blackjack/python/blackjack.py
  class PlayerType (line 14) | class PlayerType(enum.Enum):
  class Play (line 19) | class Play(enum.Enum):
  class Card (line 26) | class Card(NamedTuple):
    method value (line 30) | def value(self) -> int:
  class Hand (line 52) | class Hand(NamedTuple):
    method add_card (line 55) | def add_card(self, card: Card) -> None:
    method get_total (line 59) | def get_total(self) -> int:
    method discard_hand (line 69) | def discard_hand(self, deck: "Decks") -> None:
  class Decks (line 78) | class Decks(NamedTuple):
    method new (line 83) | def new(cls) -> "Decks":
    method shuffle (line 100) | def shuffle(self) -> None:
    method draw_card (line 104) | def draw_card(self) -> Card:
  class Player (line 127) | class Player:
    method new (line 136) | def new(cls, player_type: PlayerType, index: int) -> "Player":
    method get_name (line 147) | def get_name(self) -> str:
    method get_bet (line 150) | def get_bet(self) -> None:
    method hand_as_string (line 160) | def hand_as_string(self, hide_dealer: bool) -> str:
    method get_play (line 183) | def get_play(self) -> Play:
  class Game (line 214) | class Game:
    method new (line 220) | def new(cls, num_players: int) -> "Game":
    method _print_stats (line 232) | def _print_stats(self) -> None:
    method stats_as_string (line 236) | def stats_as_string(self) -> str:
    method play_game (line 249) | def play_game(self) -> None:
  function main (line 386) | def main() -> None:
  function print_welcome_screen (line 403) | def print_welcome_screen() -> None:
  function print_instructions (line 412) | def print_instructions() -> None:
  function get_number_from_user_input (line 437) | def get_number_from_user_input(prompt: str, min_value: int, max_value: i...
  function get_char_from_user_input (line 453) | def get_char_from_user_input(prompt: str, valid_results: List[str]) -> str:
  function clear (line 464) | def clear() -> None:

FILE: 10_Blackjack/ruby/blackjack.rb
  function intro (line 3) | def intro
  function ask_for_players_count (line 7) | def ask_for_players_count

FILE: 10_Blackjack/ruby/game.rb
  class Game (line 6) | class Game
    method initialize (line 14) | def initialize(players_count)
    method start (line 21) | def start
    method collect_bets_and_deal (line 33) | def collect_bets_and_deal
    method play_players (line 46) | def play_players
    method check_for_insurance_bets (line 52) | def check_for_insurance_bets
    method play_dealer (line 64) | def play_dealer
    method settle (line 79) | def settle
    method print_players_and_dealer_hands (line 91) | def print_players_and_dealer_hands
    method play_hand (line 97) | def play_hand player, hand

FILE: 10_Blackjack/ruby/model/card_kind.rb
  type Model (line 1) | module Model
    class CardKind (line 2) | class CardKind
      method initialize (line 3) | def initialize(label, value)
      method same_value? (line 29) | def same_value?(other_card)
      method + (line 33) | def +(other)

FILE: 10_Blackjack/ruby/model/hand.rb
  type Model (line 3) | module Model
    class Hand (line 4) | class Hand
      method initialize (line 10) | def initialize(bet, cards, is_split_hand: false)
      method is_playing? (line 20) | def is_playing?
      method is_busted? (line 24) | def is_busted?
      method is_standing? (line 28) | def is_standing?
      method is_blackjack? (line 32) | def is_blackjack?
      method total (line 36) | def total(is_dealer: false)
      method can_split? (line 54) | def can_split?
      method split (line 58) | def split
      method hit (line 66) | def hit(card)
      method double_down (line 75) | def double_down(card)
      method stand (line 84) | def stand
      method check_busted (line 93) | def check_busted

FILE: 10_Blackjack/ruby/model/pack.rb
  type Model (line 3) | module Model
    class Pack (line 4) | class Pack
      method initialize (line 5) | def initialize
      method reshuffle_if_necessary (line 10) | def reshuffle_if_necessary
      method draw (line 15) | def draw
      method reshuffle (line 22) | def reshuffle

FILE: 10_Blackjack/ruby/model/player.rb
  type Model (line 3) | module Model
    class Player (line 4) | class Player
      method initialize (line 5) | def initialize(id)
      method deal_initial_hand (line 18) | def deal_initial_hand(hand)
      method has_split_hand? (line 25) | def has_split_hand?
      method can_split? (line 29) | def can_split?
      method split (line 33) | def split
      method bet_insurance (line 39) | def bet_insurance(bet)
      method update_balance (line 55) | def update_balance(dealer_hand)
      method get_balance_update (line 77) | def get_balance_update(hand, dealer_hand)

FILE: 10_Blackjack/rust/src/main.rs
  type PlayerType (line 13) | enum PlayerType {
  method to_string (line 18) | fn to_string(&self) -> String {
  type Play (line 25) | enum Play {
  method to_string (line 32) | fn to_string(&self) -> String {
  type CARD (line 42) | struct CARD<'a> {
  function new (line 50) | fn new(card_name: &str) -> CARD {
  function determine_value_from_name (line 58) | fn determine_value_from_name(card_name: &str) -> u8 {
  type HAND (line 82) | struct HAND<'a> {
  function new (line 89) | fn new() -> HAND<'a> {
  function add_card (line 96) | fn add_card(&mut self, card: CARD<'a>) {
  function get_total (line 103) | fn get_total(&self) -> usize {
  function discard_hand (line 120) | fn discard_hand(&mut self, deck: &mut DECKS<'a>) {
  type DECKS (line 127) | struct DECKS<'a> {
  function new (line 135) | fn new() -> DECKS<'a> {
  function shuffle (line 161) | fn shuffle(&mut self) {
  function draw_card (line 169) | fn draw_card(&mut self) -> CARD<'a> {
  type PLAYER (line 190) | struct PLAYER<'a> {
  function new (line 203) | fn new(player_type: PlayerType, index: usize) -> PLAYER<'a> {
  function get_name (line 207) | fn get_name(&self) -> String {
  function get_bet (line 214) | fn get_bet(&mut self) {
  function hand_as_string (line 230) | fn hand_as_string(&self, hide_dealer:bool) -> String {
  function get_play (line 280) | fn get_play(&self) -> Play {
  type GAME (line 314) | struct GAME<'a> {
  function new (line 323) | fn new(num_players:usize) -> GAME<'a> {
  function _print_stats (line 348) | fn _print_stats(&self) {
  function stats_as_string (line 355) | fn stats_as_string(&self) -> String {
  function play_game (line 372) | fn play_game(&mut self) {
  constant CARD_NAMES (line 496) | const CARD_NAMES: [&str;13] = ["ACE","2","3","4","5","6","7","8","9","10...
  constant STARTING_BALANCE (line 497) | const STARTING_BALANCE: usize = 100;
  function main (line 499) | fn main() {
  function welcome (line 526) | fn welcome() {
  function instructions (line 537) | fn instructions() {
  function get_number_from_user_input (line 563) | fn get_number_from_user_input(prompt: &str, min:usize, max:usize) -> usi...
  function get_char_from_user_input (line 598) | fn get_char_from_user_input(prompt: &str, valid_results: &Vec<char>) -> ...
  function clear (line 632) | fn clear() {

FILE: 11_Bombardment/csharp/Bombardment.cs
  class Bombardment (line 13) | internal class Bombardment
    method PrintStartingMessage (line 22) | private void PrintStartingMessage()
    method PlaceComputerPlatoons (line 61) | private void PlaceComputerPlatoons()
    method StoreHumanPositions (line 74) | private void StoreHumanPositions()
    method HumanTurn (line 87) | private void HumanTurn()
    method GenerateComputerGuess (line 121) | private int GenerateComputerGuess()
    method ComputerTurn (line 134) | private void ComputerTurn()
    method Play (line 166) | public void Play()

FILE: 11_Bombardment/csharp/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main(string[] args)

FILE: 11_Bombardment/java/src/Bombardment.java
  class Bombardment (line 13) | public class Bombardment {
    type GAME_STATE (line 18) | private enum GAME_STATE {
    method Bombardment (line 45) | public Bombardment() {
    method play (line 56) | public void play() {
    method uniqueComputerGuess (line 163) | private int uniqueComputerGuess() {
    method computersChosenPlatoons (line 188) | private HashSet<Integer> computersChosenPlatoons() {
    method showPlayerProgress (line 214) | private void showPlayerProgress(int hits) {
    method showComputerProgress (line 225) | private void showComputerProgress(int hits, int lastGuess) {
    method showProgress (line 237) | private void showProgress(int hits, String[] messages) {
    method updatePlayerHits (line 247) | private int updatePlayerHits(int fireLocation) {
    method updateComputerHits (line 262) | private int updateComputerHits(int fireLocation) {
    method didPlayerHitComputerPlatoon (line 277) | private boolean didPlayerHitComputerPlatoon(int fireLocation) {
    method didComputerHitPlayerPlatoon (line 287) | private boolean didComputerHitPlayerPlatoon(int fireLocation) {
    method drawBattlefield (line 294) | private void drawBattlefield() {
    method intro (line 303) | private void intro() {
    method init (line 324) | private void init() {
    method getDelimitedValue (line 343) | private int getDelimitedValue(String text, int pos) {
    method displayTextAndGetInput (line 355) | private String displayTextAndGetInput(String text) {
    method randomNumber (line 365) | private int randomNumber() {

FILE: 11_Bombardment/java/src/BombardmentGame.java
  class BombardmentGame (line 1) | public class BombardmentGame {
    method main (line 3) | public static void main(String[] args) {

FILE: 11_Bombardment/javascript/bombardment.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 11_Bombardment/python/bombardment.py
  function print_intro (line 7) | def print_intro() -> None:
  function display_field (line 27) | def display_field() -> None:
  function positions_list (line 34) | def positions_list() -> List[int]:
  function generate_enemy_positions (line 38) | def generate_enemy_positions() -> Set[int]:
  function is_valid_position (line 45) | def is_valid_position(pos: int) -> bool:
  function prompt_for_player_positions (line 49) | def prompt_for_player_positions() -> Set[int]:
  function prompt_player_for_target (line 65) | def prompt_player_for_target() -> int:
  function attack (line 76) | def attack(
  function init_enemy (line 95) | def init_enemy() -> Callable[[], int]:
  function main (line 130) | def main() -> None:

FILE: 11_Bombardment/ruby/bombardment.rb
  class Battlefield (line 3) | class Battlefield
    method with_random_platoon_placements (line 8) | def with_random_platoon_placements
    method valid_platoon_placement? (line 12) | def valid_platoon_placement?(i)
    method initialize (line 17) | def initialize(platoon_placements)
    method fire_missile_at (line 23) | def fire_missile_at(outpost)
    method remaining_platoons_count (line 27) | def remaining_platoons_count
  class Game (line 32) | class Game
    method initialize (line 33) | def initialize(player_battlefield:, computer_battlefield:)
    method play (line 38) | def play
    method finished? (line 59) | def finished?
    method get_integer_answer_to (line 66) | def get_integer_answer_to(question)
    method print_computer_success_message (line 71) | def print_computer_success_message(computer_choice)
    method print_player_success_message (line 90) | def print_player_success_message
  function print_matrix (line 131) | def print_matrix
  function ask_for_platoon_placements (line 138) | def ask_for_platoon_placements
  function start_game (line 151) | def start_game

FILE: 11_Bombardment/rust/src/main.rs
  function main (line 5) | fn main() {
  function player_turn (line 61) | fn player_turn(ai_positions: &mut Vec<u8>) -> bool {
  function ai_turn (line 90) | fn ai_turn(all_positions: &mut Vec<u8>, player_positions: &mut Vec<u8>) ...
  function get_text_from_number (line 127) | fn get_text_from_number(n: usize) -> &'static str {

FILE: 12_Bombs_Away/csharp/BombsAwayConsole/ConsoleUserInterface.cs
  class ConsoleUserInterface (line 6) | internal class ConsoleUserInterface : BombsAwayGame.IUserInterface
    method Output (line 12) | public void Output(string message)
    method Choose (line 23) | public int Choose(string message, IList<string> choices)
    method ConsoleKeysFromList (line 51) | private ISet<ConsoleKey> ConsoleKeysFromList(IList<string> list)
    method ListIndexFromConsoleKey (line 63) | private int ListIndexFromConsoleKey(ConsoleKey key)
    method ReadChoice (line 73) | private ConsoleKey? ReadChoice(ISet<ConsoleKey> allowedKeys)
    method ReadKey (line 83) | private ConsoleKeyInfo ReadKey()
    method ChooseYesOrNo (line 96) | public bool ChooseYesOrNo(string message)
    method InputInteger (line 117) | public int InputInteger()

FILE: 12_Bombs_Away/csharp/BombsAwayGame/AlliesSide.cs
  class AlliesSide (line 6) | internal class AlliesSide : MissionSide
    method AlliesSide (line 8) | public AlliesSide(IUserInterface ui)

FILE: 12_Bombs_Away/csharp/BombsAwayGame/EnemyArtillery.cs
  type EnemyArtillery (line 8) | internal record class EnemyArtillery(string Name, int Accuracy);

FILE: 12_Bombs_Away/csharp/BombsAwayGame/Game.cs
  class Game (line 6) | public class Game
    method Game (line 14) | public Game(IUserInterface ui)
    method Play (line 22) | public void Play()
    type SideDescriptor (line 34) | private record class SideDescriptor(string Name, Func<Side> CreateSide);
    method ChooseSide (line 40) | private Side ChooseSide()

FILE: 12_Bombs_Away/csharp/BombsAwayGame/GermanySide.cs
  class GermanySide (line 6) | internal class GermanySide : MissionSide
    method GermanySide (line 8) | public GermanySide(IUserInterface ui)

FILE: 12_Bombs_Away/csharp/BombsAwayGame/IUserInterface.cs
  type IUserInterface (line 10) | public interface IUserInterface
    method Output (line 16) | void Output(string message);
    method Choose (line 24) | int Choose(string message, IList<string> choices);
    method ChooseYesOrNo (line 31) | bool ChooseYesOrNo(string message);
    method InputInteger (line 37) | int InputInteger();

FILE: 12_Bombs_Away/csharp/BombsAwayGame/ItalySide.cs
  class ItalySide (line 6) | internal class ItalySide : MissionSide
    method ItalySide (line 8) | public ItalySide(IUserInterface ui)

FILE: 12_Bombs_Away/csharp/BombsAwayGame/JapanSide.cs
  class JapanSide (line 6) | internal class JapanSide : Side
    method JapanSide (line 8) | public JapanSide(IUserInterface ui)
    method Play (line 17) | public override void Play()

FILE: 12_Bombs_Away/csharp/BombsAwayGame/Mission.cs
  type Mission (line 8) | internal record class Mission(string Name, string Description);

FILE: 12_Bombs_Away/csharp/BombsAwayGame/MissionSide.cs
  class MissionSide (line 6) | internal abstract class MissionSide : Side
    method MissionSide (line 12) | public MissionSide(IUserInterface ui)
    method Play (line 25) | public override void Play()
    method ChooseMission (line 40) | private Mission ChooseMission()
    method MissionCountFromUI (line 62) | private int MissionCountFromUI()
    method CommentOnMissionCount (line 98) | private void CommentOnMissionCount(int missionCount)
    method AttemptMission (line 114) | private void AttemptMission(int missionCount)
    method MissedTarget (line 129) | private void MissedTarget()
    method ChooseEnemyArtillery (line 160) | private EnemyArtillery ChooseEnemyArtillery()
    method EnemyHitRatePercentFromUI (line 184) | private int EnemyHitRatePercentFromUI()

FILE: 12_Bombs_Away/csharp/BombsAwayGame/Side.cs
  class Side (line 6) | internal abstract class Side
    method Side (line 12) | public Side(IUserInterface ui)
    method Play (line 20) | public abstract void Play();
    method RandomFrac (line 36) | protected double RandomFrac() => _random.NextDouble();
    method RandomInteger (line 44) | protected int RandomInteger(int minValue, int maxValue) => _random.Nex...
    method MissionSucceeded (line 49) | protected void MissionSucceeded()
    method EnemyCounterattack (line 75) | protected void EnemyCounterattack(EnemyArtillery artillery, int hitRat...
    method MissionFailed (line 90) | protected void MissionFailed()

FILE: 12_Bombs_Away/java/src/BombsAway.java
  class BombsAway (line 18) | public class BombsAway {
    type GAME_STATE (line 27) | private enum GAME_STATE {
    type SIDE (line 44) | public enum SIDE {
      method SIDE (line 52) | SIDE(int value) {
      method getValue (line 56) | public int getValue() {
    type TARGET (line 63) | public enum TARGET {
      method TARGET (line 73) | TARGET(int value) {
      method getValue (line 77) | public int getValue() {
    type ENEMY_DEFENCES (line 82) | public enum ENEMY_DEFENCES {
      method ENEMY_DEFENCES (line 89) | ENEMY_DEFENCES(int value) {
      method getValue (line 93) | public int getValue() {
    type AIRCRAFT (line 98) | public enum AIRCRAFT {
      method AIRCRAFT (line 106) | AIRCRAFT(int value) {
      method getValue (line 110) | public int getValue() {
    method BombsAway (line 129) | public BombsAway() {
    method play (line 141) | public void play() {
    method intro (line 354) | public void intro() {
    method getSide (line 363) | private SIDE getSide(String message) {
    method getTarget (line 380) | private TARGET getTarget(String message) {
    method getPlane (line 398) | private AIRCRAFT getPlane(String message) {
    method getEnemyDefences (line 418) | private ENEMY_DEFENCES getEnemyDefences(String message) {
    method displayTargetMessage (line 431) | private void displayTargetMessage(TARGET target) {
    method getNumberFromKeyboard (line 463) | private int getNumberFromKeyboard(String message) {
    method yesEntered (line 475) | private boolean yesEntered(String text) {
    method stringIsAnyValue (line 488) | private boolean stringIsAnyValue(String text, String... values) {
    method displayTextAndGetInput (line 507) | private String displayTextAndGetInput(String text) {
    method randomNumber (line 518) | private double randomNumber(int range) {

FILE: 12_Bombs_Away/java/src/BombsAwayGame.java
  class BombsAwayGame (line 1) | public class BombsAwayGame {
    method main (line 3) | public static void main(String[] args) {

FILE: 12_Bombs_Away/javascript/bombsaway.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 12_Bombs_Away/python/bombs_away.py
  function _stdin_choice (line 11) | def _stdin_choice(prompt: str, *, choices: Iterable[str]) -> str:
  function player_survived (line 19) | def player_survived() -> None:
  function player_death (line 23) | def player_death() -> None:
  function mission_success (line 30) | def mission_success() -> None:
  function death_with_chance (line 35) | def death_with_chance(p_death: float) -> bool:
  function commence_non_kamikazi_attack (line 45) | def commence_non_kamikazi_attack() -> None:
  function mission_failure (line 73) | def mission_failure() -> None:
  function play_italy (line 119) | def play_italy() -> None:
  function play_allies (line 135) | def play_allies() -> None:
  function play_japan (line 151) | def play_japan() -> None:
  function play_germany (line 159) | def play_germany() -> None:
  function play_game (line 176) | def play_game() -> None:

FILE: 12_Bombs_Away/rust/src/main.rs
  type Italy (line 8) | struct Italy;
  type Allies (line 9) | struct Allies;
  type Japan (line 10) | struct Japan;
  type Germany (line 11) | struct Germany;
  type ParseChoiceTargetError (line 14) | struct ParseChoiceTargetError;
  type ThreeTarget (line 17) | enum ThreeTarget {
  type Err (line 24) | type Err = ParseChoiceTargetError;
  method from_str (line 26) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  type FourTarget (line 37) | enum FourTarget {
  type Err (line 45) | type Err = ParseChoiceTargetError;
  method from_str (line 47) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  type Brefing (line 59) | pub trait Brefing {
    method prompt (line 61) | fn prompt<'a>(&self) -> &'a str;
    method targets_to_messages (line 62) | fn targets_to_messages<'a>(&self, target: Self::TargetOption) -> &'a str;
    type TargetOption (line 66) | type TargetOption = ThreeTarget;
    method prompt (line 68) | fn prompt<'a>(&self) -> &'a str {
    method targets_to_messages (line 72) | fn targets_to_messages<'a>(&self, target: Self::TargetOption) -> &'a s...
    type TargetOption (line 82) | type TargetOption = FourTarget;
    method prompt (line 84) | fn prompt<'a>(&self) -> &'a str {
    method targets_to_messages (line 88) | fn targets_to_messages<'a>(&self, target: Self::TargetOption) -> &'a s...
    type TargetOption (line 99) | type TargetOption = ThreeTarget;
    method prompt (line 101) | fn prompt<'a>(&self) -> &'a str {
    method targets_to_messages (line 105) | fn targets_to_messages<'a>(&self, target: Self::TargetOption) -> &'a s...
  type Side (line 114) | enum Side {
    method from (line 122) | fn from(value: FourTarget) -> Self {
  function stdin_choice (line 132) | fn stdin_choice<C: FromStr>(prompt: &str) -> C {
  function stdin_y_or_n (line 148) | fn stdin_y_or_n(prompt: &str) -> bool {
  function commence_non_kamikazi_attack (line 157) | fn commence_non_kamikazi_attack() {
  function play_japan (line 188) | fn play_japan() {
  function player_death (line 203) | fn player_death() {
  function mission_success (line 210) | fn mission_success() {
  function mission_failure (line 219) | fn mission_failure() {
  function player_survived (line 264) | fn player_survived() {
  function death_with_chance (line 268) | fn death_with_chance(p_death: f32) -> bool {
  function main (line 274) | fn main() {

FILE: 13_Bounce/csharp/Bounce.cs
  class Bounce (line 9) | internal class Bounce
    method Bounce (line 15) | internal Bounce(float velocity)
    method Plot (line 25) | public float Plot(Graph graph, float startTime)
    method Next (line 37) | public Bounce Next(float elasticity) => new Bounce(_velocity * elastic...

FILE: 13_Bounce/csharp/Game.cs
  class Game (line 5) | internal class Game
    method Game (line 9) | public Game(IReadWrite io)
    method Play (line 14) | public void Play(Func<bool> playAgain)

FILE: 13_Bounce/csharp/Graph.cs
  class Graph (line 8) | internal class Graph
    method Graph (line 12) | public Graph(float maxHeight, float timeIncrement)
    method Plot (line 24) | public void Plot(float time, float height)
    method ToString (line 35) | public override string ToString()
    class Row (line 47) | internal class Row
      method Row (line 54) | public Row(string label)
      method ToString (line 72) | public override string ToString() => new string(_chars);
    class Axis (line 75) | internal class Axis
      method Axis (line 81) | internal Axis(float maxTimePlotted, float timeIncrement)
      method ToString (line 93) | public override string ToString()
    class Labels (line 101) | internal class Labels : Row
      method Labels (line 103) | public Labels()
      method Add (line 108) | public void Add(int column, string label)

FILE: 13_Bounce/csharp/IReadWriteExtensions.cs
  class IReadWriteExtensions (line 3) | internal static class IReadWriteExtensions
    method ReadParameter (line 5) | internal static float ReadParameter(this IReadWrite io, string parameter)

FILE: 13_Bounce/csharp/Resources/Resource.cs
  class Resource (line 6) | internal static class Resource
    class Streams (line 8) | internal static class Streams
    method GetStream (line 14) | private static Stream GetStream([CallerMemberName] string? name = null)

FILE: 13_Bounce/java/Bounce.java
  class Bounce (line 16) | public class Bounce {
    method Bounce (line 20) | public Bounce() {
    method play (line 26) | public void play() {
    method showIntro (line 33) | private void showIntro() {
    method startGame (line 41) | private void startGame() {
    method main (line 162) | public static void main(String[] args) {

FILE: 13_Bounce/javascript/bounce.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 13_Bounce/python/bounce.py
  function print_centered (line 14) | def print_centered(msg: str) -> None:
  function print_header (line 19) | def print_header(title: str) -> None:
  function print_instructions (line 27) | def print_instructions() -> None:
  function get_initial_conditions (line 38) | def get_initial_conditions() -> Tuple[float, float, float]:
  function print_at_tab (line 49) | def print_at_tab(line: str, tab: int, s: str) -> str:
  function run_simulation (line 54) | def run_simulation(delta_t: float, v0: float, coeff_rest: float) -> None:
  function main (line 99) | def main() -> None:

FILE: 13_Bounce/ruby/bounce.rb
  function calc_velocity_for_bounce (line 25) | def calc_velocity_for_bounce(v0, bounce, coefficient)
  function calc_bounce_total_time (line 30) | def calc_bounce_total_time(v0, bounce, coefficient)
  function calc_ball_height (line 36) | def calc_ball_height(v0, bounce, coefficient, t)
  function heighest_position_in_next_bounce (line 41) | def heighest_position_in_next_bounce(time_in_bounce, v0, i, c)
  function intro (line 47) | def intro
  function plot_header (line 66) | def plot_header
  function plot_bouncing_ball (line 71) | def plot_bouncing_ball(strobbing_time, v0, c)
  function plot_footer (line 127) | def plot_footer (plot_width, strobbing_time)
  function game_loop (line 153) | def game_loop

FILE: 13_Bounce/rust/src/main.rs
  function input (line 11) | fn input(msg: &str) -> String {
  function main (line 19) | fn main() {

FILE: 14_Bowling/csharp/Bowling.cs
  class Bowling (line 9) | public class Bowling
    method Play (line 15) | public void Play()
    method ShowBanner (line 23) | private static void ShowBanner()
    method MaybeShowInstructions (line 35) | private static void MaybeShowInstructions()
    method Setup (line 46) | private void Setup()
    method GameLoop (line 54) | private void GameLoop()
    method InitGameResults (line 131) | private GameResults[] InitGameResults()
    method ShowPins (line 141) | private void ShowPins(int player, int frame, int ball)
    method ResetGameResults (line 159) | private void ResetGameResults(GameResults[] gameResults)
    method ShowGameResults (line 169) | private void ShowGameResults(GameResults[] gameResults)

FILE: 14_Bowling/csharp/FrameResult.cs
  class FrameResult (line 9) | public class FrameResult
    type Points (line 11) | public enum Points { None, Error, Spare, Strike };
    method Reset (line 17) | public void Reset()

FILE: 14_Bowling/csharp/GameResults.cs
  class GameResults (line 9) | public class GameResults
    method GameResults (line 14) | public GameResults()

FILE: 14_Bowling/csharp/Pins.cs
  class Pins (line 9) | public class Pins
    type State (line 11) | public enum State { Up, Down };
    method Pins (line 17) | public Pins()
    method Roll (line 26) | public int Roll()
    method Reset (line 44) | public void Reset()
    method GetPinsDown (line 51) | public int GetPinsDown()

FILE: 14_Bowling/csharp/Program.cs
  class Program (line 9) | public static class Program
    method Main (line 11) | public static void Main()

FILE: 14_Bowling/csharp/Utility.cs
  class Utility (line 9) | internal static class Utility
    method PadInt (line 11) | public static string PadInt(int value, int width)
    method InputInt (line 15) | public static int InputInt()
    method InputString (line 25) | public static string InputString()
    method PrintInt (line 31) | public static void PrintInt(int value, bool newLine = false)
    method PrintString (line 35) | public static void PrintString(bool newLine = true)
    method PrintString (line 39) | public static void PrintString(int tab, bool newLine = true)
    method PrintString (line 43) | public static void PrintString(string value, bool newLine = true)
    method PrintString (line 47) | public static void PrintString(int tab, string value, bool newLine = t...

FILE: 14_Bowling/java/Bowling.java
  class Bowling (line 16) | public class Bowling {
    method Bowling (line 20) | public Bowling() {
    method play (line 26) | public void play() {
    method showIntro (line 33) | private static void showIntro() {
    method startGame (line 41) | private void startGame() {
    method printRules (line 260) | public static void printRules() {
    method main (line 271) | public static void main(String[] args) {

FILE: 14_Bowling/javascript/bowling.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 14_Bowling/python/bowling.py
  function simulate_roll (line 5) | def simulate_roll(pins: List[int]) -> None:
  function calculate_score (line 12) | def calculate_score(rolls: List[int]) -> int:
  class Player (line 35) | class Player:
    method __init__ (line 36) | def __init__(self, name: str) -> None:
    method play_frame (line 40) | def play_frame(self, frame: int) -> None:
    method __str__ (line 76) | def __str__(self) -> str:
    method show (line 79) | def show(self, pins: List[int]) -> None:
  function centre_text (line 90) | def centre_text(text: str, width: int) -> str:
  function main (line 95) | def main() -> None:

FILE: 15_Boxing/csharp/AttackStrategy.cs
  class AttackStrategy (line 3) | public abstract class AttackStrategy
    method AttackStrategy (line 10) | public AttackStrategy(Boxer other, Stack<Action> work, Action notifyGa...
    method Attack (line 17) | public void Attack()
    method GetPunch (line 34) | protected abstract AttackPunch GetPunch();
    method FullSwing (line 35) | protected abstract void FullSwing();
    method Hook (line 36) | protected abstract void Hook();
    method Uppercut (line 37) | protected abstract void Uppercut();
    method Jab (line 38) | protected abstract void Jab();
    method RegisterKnockout (line 40) | protected void RegisterKnockout(string knockoutMessage)
    type AttackPunch (line 47) | protected record AttackPunch(Punch Punch, bool IsBestPunch);

FILE: 15_Boxing/csharp/Boxer.cs
  class Boxer (line 3) | public class Boxer
    method SetName (line 13) | public void SetName(string prompt)
    method ResetForNewRound (line 26) | public void ResetForNewRound() => DamageTaken = 0;
    method RecordWin (line 28) | public void RecordWin() => _wins += 1;
    method ToString (line 32) | public override string ToString() => Name;
  class Opponent (line 35) | public class Opponent : Boxer
    method SetRandomPunches (line 37) | public void SetRandomPunches()

FILE: 15_Boxing/csharp/OpponentAttackStrategy.cs
  class OpponentAttackStrategy (line 6) | public class OpponentAttackStrategy : AttackStrategy
    method OpponentAttackStrategy (line 10) | public OpponentAttackStrategy(Opponent opponent, Boxer player,  Action...
    method GetPunch (line 15) | protected override AttackPunch GetPunch()
    method FullSwing (line 21) | protected override void FullSwing() // 720
    method Hook (line 51) | protected override void Hook() // 810
    method Uppercut (line 63) | protected override void Uppercut() // 860
    method Jab (line 90) | protected override void Jab() // 640
    method RegisterOtherKnockedOut (line 113) | private void RegisterOtherKnockedOut()

FILE: 15_Boxing/csharp/PlayerAttackStrategy.cs
  class PlayerAttackStrategy (line 5) | public class PlayerAttackStrategy : AttackStrategy
    method PlayerAttackStrategy (line 9) | public PlayerAttackStrategy(Boxer player, Opponent opponent, Action no...
    method GetPunch (line 12) | protected override AttackPunch GetPunch()
    method FullSwing (line 18) | protected override void FullSwing() // 340
    method Uppercut (line 48) | protected override void Uppercut() // 520
    method Hook (line 74) | protected override void Hook() // 450
    method Jab (line 100) | protected override void Jab()

FILE: 15_Boxing/csharp/Punch.cs
  type Punch (line 3) | public enum Punch

FILE: 15_Boxing/csharp/Round.cs
  class Round (line 3) | class Round
    method Round (line 15) | public Round(Boxer player, Opponent opponent, int round)
    method Start (line 29) | public void Start()
    method CheckOpponentWin (line 42) | public void CheckOpponentWin()
    method CheckPlayerWin (line 51) | public void CheckPlayerWin()
    method ResetPlayers (line 60) | private void ResetPlayers()
    method RoundBegins (line 67) | private void RoundBegins()
    method CheckRoundWinner (line 78) | private void CheckRoundWinner()
    method DecideWhoAttacks (line 92) | private void DecideWhoAttacks()

FILE: 15_Boxing/csharp/Utils.cs
  class GameUtils (line 2) | public static class GameUtils
    method PrintPunchDescription (line 5) | public static void PrintPunchDescription() =>
    method PunchDesc (line 8) | private static string PunchDesc(Punch punch) => $"({(int)punch}) {punc...
    method GetPunch (line 10) | public static Punch GetPunch(string prompt)
    method RollSatisfies (line 23) | public static bool RollSatisfies(int upperLimit, Predicate<int> predic...
    method ToFriendlyString (line 25) | public static string ToFriendlyString(this Punch punch)

FILE: 15_Boxing/java/Basic.java
  class Basic (line 6) | final class Basic {
    method randomOf (line 8) | public static int randomOf(int base) {
    class Console (line 16) | public static class Console {
      method readLine (line 19) | public String readLine() {
      method readInt (line 23) | public int readInt() {
      method print (line 41) | public void print(String message, Object... args) {

FILE: 15_Boxing/java/Boxing.java
  class Boxing (line 9) | public class Boxing {
    method play (line 15) | public void play() {
    method opponentPunch (line 45) | private boolean opponentPunch() {
    method playerPunch (line 111) | private void playerPunch() {
    method showRoundWinner (line 177) | private void showRoundWinner(int roundNro) {
    method showWinner (line 187) | private void showWinner() {
    method loadPlayers (line 201) | private void loadPlayers() {
    method showIntro (line 222) | private void showIntro () {

FILE: 15_Boxing/java/BoxingGame.java
  class BoxingGame (line 1) | public class BoxingGame {
    method main (line 3) | public static void main(String[] args) {

FILE: 15_Boxing/java/GameSession.java
  class GameSession (line 5) | public class GameSession {
    method GameSession (line 15) | GameSession(Player player, Player opponent) {
    method getPlayer (line 20) | public Player getPlayer() { return player;}
    method getOpponent (line 21) | public Player getOpponent() { return opponent;}
    method setKnocked (line 23) | public void setKnocked() {
    method resetPoints (line 27) | public void resetPoints() {
    method addPlayerPoints (line 32) | public void addPlayerPoints(int ptos) { playerPoints+=ptos;}
    method addOpponentPoints (line 33) | public void addOpponentPoints(int ptos) { opponentPoints+=ptos;}
    method getPoints (line 35) | public int getPoints(Player player) {
    method addRoundWind (line 42) | public void addRoundWind(Player player) {
    method isOver (line 46) | public boolean isOver() {
    method isRoundWinner (line 50) | public boolean isRoundWinner(Player player) {
    method isGameWinner (line 57) | public boolean isGameWinner(Player player) {
    method isPlayerKnocked (line 64) | public boolean isPlayerKnocked() {

FILE: 15_Boxing/java/Player.java
  class Player (line 4) | public class Player {
    method Player (line 10) | public Player(String name, Punch bestPunch, Punch vulnerability) {
    method Player (line 20) | public Player(String name) {
    method isPlayer (line 35) | public boolean isPlayer() { return isPlayer; }
    method getName (line 36) | public String getName() { return  name; }
    method getBestPunch (line 37) | public Punch getBestPunch() { return bestPunch; }
    method hitVulnerability (line 39) | public boolean hitVulnerability(Punch punch) {

FILE: 15_Boxing/java/Punch.java
  type Punch (line 6) | public enum Punch {
    method Punch (line 14) | Punch(int code) {
    method getCode (line 18) | int getCode() { return  code;}
    method fromCode (line 20) | public static Punch fromCode(int code) {
    method random (line 24) | public static Punch random() {

FILE: 15_Boxing/javascript/boxing.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 15_Boxing/python/boxing.py
  class PunchProfile (line 9) | class PunchProfile(NamedTuple):
    method is_hit (line 21) | def is_hit(self) -> bool:
  class Player (line 26) | class Player:
    method get_punch_choice (line 39) | def get_punch_choice(self) -> Literal[1, 2, 3, 4]:
  function get_vulnerability (line 55) | def get_vulnerability() -> int:
  function get_opponent_stats (line 60) | def get_opponent_stats() -> Tuple[int, int]:
  function read_punch_profiles (line 69) | def read_punch_profiles(filepath: Path) -> Dict[Literal[1, 2, 3, 4], Pun...
  function main (line 78) | def main() -> None:
  function is_opponents_turn (line 133) | def is_opponents_turn() -> bool:
  function play_round (line 137) | def play_round(round_number: int, player: Player, opponent: Player) -> N...

FILE: 16_Bug/csharp/Bug.cs
  class Bug (line 7) | internal class Bug
    method TryAdd (line 13) | public bool TryAdd(IPart part, out Message message) => _body.TryAdd(pa...
    method ToString (line 15) | public string ToString(string pronoun, char feelerCharacter)

FILE: 16_Bug/csharp/Game.cs
  class Game (line 8) | internal class Game
    method Game (line 13) | public Game(IReadWrite io, IRandom random)
    method Play (line 19) | public void Play()
    method BuildBugs (line 32) | private void BuildBugs()
    method TryBuild (line 64) | private bool TryBuild(Bug bug, Func<Message, string> messageTransform)

FILE: 16_Bug/csharp/Parts/Body.cs
  class Body (line 6) | internal class Body : ParentPart
    method Body (line 12) | public Body()
    method TryAddCore (line 19) | protected override bool TryAddCore(IPart part, out Message message)
    method AppendTo (line 29) | public void AppendTo(StringBuilder builder, char feelerCharacter)

FILE: 16_Bug/csharp/Parts/Feeler.cs
  class Feeler (line 3) | internal class Feeler : IPart

FILE: 16_Bug/csharp/Parts/Feelers.cs
  class Feelers (line 6) | internal class Feelers : PartCollection
    method Feelers (line 8) | public Feelers()
    method AppendTo (line 13) | public void AppendTo(StringBuilder builder, char character) => AppendT...

FILE: 16_Bug/csharp/Parts/Head.cs
  class Head (line 6) | internal class Head : ParentPart
    method Head (line 10) | public Head()
    method TryAddCore (line 17) | protected override bool TryAddCore(IPart part, out Message message)
    method AppendTo (line 24) | public void AppendTo(StringBuilder builder, char feelerCharacter)

FILE: 16_Bug/csharp/Parts/IPart.cs
  type IPart (line 3) | internal interface IPart

FILE: 16_Bug/csharp/Parts/Leg.cs
  class Leg (line 3) | internal class Leg : IPart

FILE: 16_Bug/csharp/Parts/Legs.cs
  class Legs (line 6) | internal class Legs : PartCollection
    method Legs (line 8) | public Legs()
    method AppendTo (line 13) | public void AppendTo(StringBuilder builder) => AppendTo(builder, 6, 2,...

FILE: 16_Bug/csharp/Parts/Neck.cs
  class Neck (line 6) | internal class Neck : ParentPart
    method Neck (line 10) | public Neck()
    method TryAddCore (line 17) | protected override bool TryAddCore(IPart part, out Message message)
    method AppendTo (line 25) | public void AppendTo(StringBuilder builder, char feelerCharacter)

FILE: 16_Bug/csharp/Parts/ParentPart.cs
  class ParentPart (line 5) | internal abstract class ParentPart : Part
    method ParentPart (line 7) | public ParentPart(Message addedMessage, Message duplicateMessage)
    method TryAdd (line 12) | public bool TryAdd(IPart part, out Message message)
    method TryAddCore (line 20) | protected abstract bool TryAddCore(IPart part, out Message message);
    method ReportDoNotHave (line 22) | private bool ReportDoNotHave(out Message message)

FILE: 16_Bug/csharp/Parts/Part.cs
  class Part (line 5) | internal class Part : IPart
    method Part (line 10) | public Part(Message addedMessage, Message duplicateMessage)
    method TryAdd (line 22) | public bool TryAdd(out Message message)

FILE: 16_Bug/csharp/Parts/PartCollection.cs
  class PartCollection (line 6) | internal class PartCollection
    method PartCollection (line 13) | public PartCollection(int maxCount, Message addedMessage, Message full...
    method TryAddOne (line 22) | public bool TryAddOne(out Message message)
    method AppendTo (line 35) | protected void AppendTo(StringBuilder builder, int offset, int length,...

FILE: 16_Bug/csharp/Parts/Tail.cs
  class Tail (line 6) | internal class Tail : Part
    method Tail (line 8) | public Tail()
    method AppendTo (line 13) | public void AppendTo(StringBuilder builder)

FILE: 16_Bug/csharp/Resources/Message.cs
  class Message (line 5) | internal class Message
    method Message (line 29) | private Message(string common)
    method Message (line 34) | private Message(string i, string you)
    method DoNotHaveA (line 43) | public static Message DoNotHaveA(Part part) => new($"do not have a {pa...
    method ForValue (line 45) | public Message ForValue(int quantity) => new(string.Format(I, quantity...

FILE: 16_Bug/csharp/Resources/Resource.cs
  class Resource (line 6) | internal static class Resource
    class Streams (line 8) | internal static class Streams
    method GetStream (line 15) | private static Stream GetStream([CallerMemberName] string? name = null...

FILE: 16_Bug/java/src/Bug.java
  class Bug (line 13) | public class Bug {
    type GAME_STATE (line 18) | private enum GAME_STATE {
    method Bug (line 40) | public Bug() {
    method play (line 54) | public void play() {
    method draw (line 162) | private void draw(Insect bug) {
    method intro (line 172) | private void intro() {
    method instructions (line 180) | private void instructions() {
    method noEntered (line 207) | private boolean noEntered(String text) {
    method stringIsAnyValue (line 220) | private boolean stringIsAnyValue(String text, String... values) {
    method displayTextAndGetInput (line 239) | private String displayTextAndGetInput(String text) {
    method randomNumber (line 249) | private int randomNumber() {

FILE: 16_Bug/java/src/BugGame.java
  class BugGame (line 3) | public class BugGame {
    method main (line 5) | public static void main(String[] args) {

FILE: 16_Bug/java/src/ComputerBug.java
  class ComputerBug (line 1) | public class ComputerBug extends Insect {
    method ComputerBug (line 5) | public ComputerBug() {

FILE: 16_Bug/java/src/Insect.java
  class Insect (line 10) | public class Insect {
    type PARTS (line 20) | public enum PARTS {
    method Insect (line 46) | public Insect() {
    method addBody (line 55) | public String addBody() {
    method addBodyMessage (line 73) | private String addBodyMessage(boolean wasAdded) {
    method addNeck (line 90) | public String addNeck() {
    method addHead (line 111) | public String addHead() {
    method addFeelers (line 133) | public String addFeelers() {
    method addTail (line 154) | public String addTail() {
    method addLeg (line 175) | public String addLeg() {
    method init (line 218) | public void init() {
    method addMessages (line 235) | public void addMessages(String[] messages, PARTS bodyPart) {
    method draw (line 270) | public ArrayList<String> draw() {
    method complete (line 342) | public boolean complete() {
    method addSpaces (line 357) | private String addSpaces(int number) {

FILE: 16_Bug/java/src/PlayerBug.java
  class PlayerBug (line 1) | public class PlayerBug extends Insect {
    method PlayerBug (line 5) | public PlayerBug() {

FILE: 16_Bug/javascript/bug.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 34) | function tab(space)
  function waitNSeconds (line 42) | function waitNSeconds(n) {
  function scrollToBottom (line 46) | function scrollToBottom() {
  function draw_head (line 50) | function draw_head()
  function drawFeelers (line 60) | function drawFeelers(feelerCount, character) {
  function drawNeck (line 70) | function drawNeck() {
  function drawBody (line 75) | function drawBody(computerTailCount) {
  function drawFeet (line 84) | function drawFeet(computerFeetCount) {
  function drawBug (line 93) | function drawBug(playerFeelerCount, playerHeadCount, playerNeckCount, pl...
  function main (line 113) | async function main()

FILE: 16_Bug/python/bug.py
  class State (line 8) | class State:
    method is_finished (line 17) | def is_finished(self) -> bool:
    method display (line 26) | def display(self) -> None:
  function print_n_newlines (line 39) | def print_n_newlines(n: int) -> None:
  function print_feelers (line 44) | def print_feelers(n_feelers: int, is_player: bool = True) -> None:
  function print_head (line 52) | def print_head() -> None:
  function print_neck (line 61) | def print_neck() -> None:
  function print_body (line 66) | def print_body(has_tail: bool = False) -> None:
  function print_legs (line 74) | def print_legs(n_legs: int) -> None:
  function handle_roll (line 82) | def handle_roll(diceroll: Literal[1, 2, 3, 4, 5, 6], state: State) -> bool:
  function main (line 154) | def main() -> None:

FILE: 16_Bug/ruby/Bug.rb
  class BugGame (line 1) | class BugGame
    method initialize (line 7) | def initialize
    method run (line 13) | def run
    method play (line 47) | def play player
    method one_part (line 70) | def one_part player, part, part_needed
    method two_parts (line 83) | def two_parts player, part, part_needed
    method is_completed? (line 101) | def is_completed? player
    method print_bug (line 105) | def print_bug player
    method instructions (line 113) | def instructions
    method antennae_and_leg (line 142) | def antennae_and_leg player, part
    method head (line 154) | def head player
    method neck (line 165) | def neck player
    method body (line 171) | def body player

FILE: 17_Bullfight/csharp/Action.cs
  type Action (line 7) | public enum Action

FILE: 17_Bullfight/csharp/ActionResult.cs
  type ActionResult (line 12) | public enum ActionResult

FILE: 17_Bullfight/csharp/BullFight.cs
  class BullFight (line 9) | public static class BullFight
    method Begin (line 25) | public static IEnumerable<Events.Event> Begin(Mediator mediator)

FILE: 17_Bullfight/csharp/Controller.cs
  class Controller (line 8) | public static class Controller
    method StartGame (line 13) | public static void StartGame()
    method GetPlayerIntention (line 34) | public static (Action action, RiskLevel riskLevel) GetPlayerIntention(...
    method GetPlayerRunsFromRing (line 96) | public static bool GetPlayerRunsFromRing()
    method GetYesOrNo (line 113) | public static bool GetYesOrNo()

FILE: 17_Bullfight/csharp/Events/BullCharging.cs
  type BullCharging (line 6) | public sealed record BullCharging(int PassNumber) : Event;

FILE: 17_Bullfight/csharp/Events/Event.cs
  type Event (line 6) | public abstract record Event();

FILE: 17_Bullfight/csharp/Events/MatchCompleted.cs
  type MatchCompleted (line 6) | public sealed record MatchCompleted(ActionResult Result, bool ExtremeBra...

FILE: 17_Bullfight/csharp/Events/MatchStarted.cs
  type MatchStarted (line 6) | public sealed record MatchStarted(

FILE: 17_Bullfight/csharp/Events/PlayerGored.cs
  type PlayerGored (line 6) | public sealed record PlayerGored(bool Panicked, bool FirstGoring) : Event;

FILE: 17_Bullfight/csharp/Events/PlayerSurvived.cs
  type PlayerSurvived (line 6) | public sealed record PlayerSurvived() : Event;

FILE: 17_Bullfight/csharp/Mediator.cs
  class Mediator (line 14) | public class Mediator
    method Dodge (line 18) | public void Dodge(RiskLevel riskLevel) =>
    method Kill (line 21) | public void Kill(RiskLevel riskLevel) =>
    method Panic (line 24) | public void Panic() =>
    method RunFromRing (line 27) | public void RunFromRing() =>
    method ContinueFighting (line 30) | public void ContinueFighting() =>
    method GetInput (line 39) | public T GetInput<T>()

FILE: 17_Bullfight/csharp/Program.cs
  class Program (line 3) | class Program
    method Main (line 5) | static void Main()

FILE: 17_Bullfight/csharp/Quality.cs
  type Quality (line 11) | public enum Quality

FILE: 17_Bullfight/csharp/Reward.cs
  type Reward (line 6) | public enum Reward

FILE: 17_Bullfight/csharp/RiskLevel.cs
  type RiskLevel (line 6) | public enum RiskLevel

FILE: 17_Bullfight/csharp/View.cs
  class View (line 8) | public static class View
    method ShowBanner (line 12) | public static void ShowBanner()
    method ShowInstructions (line 21) | public static void ShowInstructions()
    method ShowSeparator (line 44) | public static void ShowSeparator()
    method ShowStartingConditions (line 50) | public static void ShowStartingConditions(Events.MatchStarted matchSta...
    method ShowStartOfPass (line 106) | public static void ShowStartOfPass(int passNumber)
    method ShowPlayerGored (line 113) | public static void ShowPlayerGored(bool playerPanicked, bool firstGoring)
    method ShowPlayerSurvives (line 123) | public static void ShowPlayerSurvives()
    method ShowPlayerFoolhardy (line 129) | public static void ShowPlayerFoolhardy()
    method ShowFinalResult (line 134) | public static void ShowFinalResult(ActionResult result, bool extremeBr...
    method PromptShowInstructions (line 196) | public static void PromptShowInstructions()
    method PromptKillBull (line 201) | public static void PromptKillBull()
    method PromptKillBullBrief (line 207) | public static void PromptKillBullBrief()
    method PromptKillMethod (line 212) | public static void PromptKillMethod()
    method PromptCapeMove (line 221) | public static void PromptCapeMove()
    method PromptCapeMoveBrief (line 226) | public static void PromptCapeMoveBrief()
    method PromptDontPanic (line 231) | public static void PromptDontPanic()
    method PromptRunFromRing (line 237) | public static void PromptRunFromRing()

FILE: 17_Bullfight/java/Bullfight.java
  class Bullfight (line 9) | public class Bullfight {
    method main (line 13) | public static void main(String[] args) {
    method printBullGradeInfo (line 84) | private static void printBullGradeInfo(BullGrade bullGrade) {
    method crowdReaction (line 93) | private static void crowdReaction(GameState gameState, BullGrade bullG...
    method handleCapeMove (line 124) | private static GameState handleCapeMove(int capeMove, Random random, S...
    method stateAfterGoring (line 144) | private static GameState stateAfterGoring(Random random, Scanner scann...
    method calculateCrowdReactionScore (line 160) | private static double calculateCrowdReactionScore(GameState gameState,...
    method calculateGameScore (line 168) | private static double calculateGameScore(GameState gameState, BullGrad...
    method readInt (line 172) | private static int readInt(String prompt, Scanner scanner) {
    method readCapeMove (line 185) | private static int readCapeMove(String initialPrompt, Scanner scanner) {
    method readYesOrNo (line 198) | private static BooleanAnswer readYesOrNo(Scanner scanner) {
    method printInstructions (line 211) | private static void printInstructions() {
    method printHeader (line 229) | private static void printHeader() {
    method randomNumber1or2 (line 238) | private static int randomNumber1or2(Random random) {
    method firstStage (line 242) | private static double firstStage(String horseType, String suffix, Bull...
    method getPerformanceRating (line 282) | public static String getPerformanceRating(int t) {
    method attemptKillBull (line 297) | private static GameState attemptKillBull(BullGrade bullGrade, Random r...
    method readAndHandleForfeitDecision (line 339) | private static GameState readAndHandleForfeitDecision(Random random, S...
    method readInstructionsChoice (line 361) | private static boolean readInstructionsChoice(Scanner scan) {
    type BooleanAnswer (line 369) | private enum BooleanAnswer {
    type BullGrade (line 373) | private enum BullGrade {
      method BullGrade (line 382) | BullGrade(int value) {
      method getValue (line 386) | public int getValue() {
      method fromValue (line 390) | public static BullGrade fromValue(int value) {
    class GameState (line 404) | private static class GameState {
      method GameState (line 412) | public GameState() {
      method newCopy (line 421) | public GameState newCopy() {
    type MatadorStatus (line 433) | private enum MatadorStatus {
      method MatadorStatus (line 441) | MatadorStatus(double value) {
      method getValue (line 445) | public double getValue() {
    type BullStatus (line 450) | private enum BullStatus {
      method BullStatus (line 456) | BullStatus(double value) {
      method getValue (line 460) | public double getValue() {

FILE: 17_Bullfight/javascript/bullfight.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function af (line 55) | function af(k)
  function cf (line 60) | function cf(q)
  function df (line 65) | function df(q)
  function setup_helpers (line 70) | function setup_helpers()
  function main (line 106) | async function main()

FILE: 17_Bullfight/python/bullfight.py
  function print_n_newlines (line 6) | def print_n_newlines(n: int) -> None:
  function determine_player_kills (line 11) | def determine_player_kills(
  function calculate_final_score (line 46) | def calculate_final_score(
  function print_header (line 68) | def print_header() -> None:
  function print_instructions (line 74) | def print_instructions() -> None:
  function print_intro (line 96) | def print_intro() -> None:
  function ask_bool (line 104) | def ask_bool(prompt: str) -> bool:
  function ask_int (line 115) | def ask_int() -> int:
  function did_bull_hit (line 125) | def did_bull_hit(
  function handle_bullkill_attempt (line 156) | def handle_bullkill_attempt(
  function final_message (line 191) | def final_message(
  function main (line 221) | def main() -> None:

FILE: 18_Bullseye/csharp/BullseyeGame.cs
  class BullseyeGame (line 6) | public class BullseyeGame
    method BullseyeGame (line 14) | public BullseyeGame()
    method Run (line 21) | public void Run()
    method SetupGame (line 32) | private void SetupGame()
    method PlayGame (line 91) | private void PlayGame()
    method PrintResults (line 191) | private void PrintResults()
    method PrintIntroduction (line 213) | private void PrintIntroduction()

FILE: 18_Bullseye/csharp/Player.cs
  class Player (line 6) | public class Player
    method Player (line 12) | public Player(string name)

FILE: 18_Bullseye/csharp/Program.cs
  class Program (line 5) | public static class Program
    method Main (line 9) | public static void Main(string[] args)

FILE: 18_Bullseye/java/src/Bullseye.java
  class Bullseye (line 13) | public class Bullseye {
    type GAME_STATE (line 25) | private enum GAME_STATE {
    method Bullseye (line 43) | public Bullseye() {
    method play (line 62) | public void play() {
    method intro (line 135) | private void intro() {
    method calculatePlayerPoints (line 156) | private int calculatePlayerPoints(int playerThrow) {
    method getPlayersThrow (line 201) | private int getPlayersThrow(Player player) {
    method chooseNumberOfPlayers (line 223) | private int chooseNumberOfPlayers() {
    method displayTextAndGetInput (line 234) | private String displayTextAndGetInput(String text) {
    method paddedString (line 248) | private String paddedString(String first, String second, String third) {

FILE: 18_Bullseye/java/src/BullseyeGame.java
  class BullseyeGame (line 1) | public class BullseyeGame {
    method main (line 3) | public static void main(String[] args) {

FILE: 18_Bullseye/java/src/Player.java
  class Player (line 5) | public class Player {
    method Player (line 11) | Player(String name) {
    method addScore (line 16) | public void addScore(int score) {
    method getName (line 20) | public String getName() {
    method getScore (line 24) | public int getScore() {

FILE: 18_Bullseye/java/src/Shot.java
  class Shot (line 6) | public class Shot {
    method Shot (line 11) | Shot(double[] shots) {
    method getShot (line 16) | public double getShot(int index) {

FILE: 18_Bullseye/javascript/bullseye.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 50) | async function main()

FILE: 18_Bullseye/python/bullseye.py
  class Player (line 7) | class Player:
  function print_intro (line 12) | def print_intro() -> None:
  function print_outro (line 35) | def print_outro(players: List[Player], winners: List[int]) -> None:
  function main (line 45) | def main() -> None:

FILE: 18_Bullseye/rust/src/lib.rs
  type Config (line 10) | pub struct Config {
    method new (line 15) | pub fn new() -> Result<Config, Box<dyn Error>> {
  type Player (line 44) | pub struct Player {
    method from (line 49) | fn from(name: &str) -> Player {
  function run (line 55) | pub fn run(config: &mut Config) -> Result<(), Box<dyn Error>> {
  function get_string_from_user_input (line 153) | fn get_string_from_user_input(prompt: &str) -> Result<String, Box<dyn Er...
  function get_number_from_input (line 177) | fn get_number_from_input<T:Display + PartialOrd + FromStr>(prompt: &str,...

FILE: 18_Bullseye/rust/src/main.rs
  function main (line 15) | fn main() {
  function welcome (line 36) | fn welcome() {

FILE: 19_Bunny/csharp/BasicData.cs
  class BasicData (line 9) | internal class BasicData
    method BasicData (line 15) | public BasicData(int[] data)
    method Read (line 20) | public int Read()

FILE: 19_Bunny/csharp/Bunny.cs
  class Bunny (line 3) | internal class Bunny
    method Run (line 24) | public void Run()
    method PrintLines (line 68) | private static void PrintLines(int count)
    method PrintSpaces (line 73) | private static int PrintSpaces(int count)
    method PrintString (line 79) | public static void PrintString(int tab, string value, bool newLine = t...

FILE: 19_Bunny/csharp/Program.cs
  class Program (line 9) | public static class Program
    method Main (line 11) | public static void Main()

FILE: 19_Bunny/java/src/Bunny.java
  class Bunny (line 14) | public class Bunny {
    method Bunny (line 29) | public Bunny() {
    method process (line 36) | public void process() {
    method intro (line 99) | private void intro() {
    method addSpaces (line 111) | private String addSpaces(int spaces) {
    method loadData (line 136) | private ArrayList<Integer> loadData() {
    method main (line 162) | public static void main(String[] args) {

FILE: 19_Bunny/javascript/bunny.js
  function print (line 5) | function print(str)
  function tab (line 10) | function tab(space)

FILE: 19_Bunny/python/bunny.py
  function print_intro (line 11) | def print_intro() -> None:
  function main (line 17) | def main() -> None:

FILE: 19_Bunny/ruby/bunny-faithful.rb
  function main (line 42) | def main

FILE: 19_Bunny/ruby/bunny-modern.rb
  function main (line 80) | def main
  function puts_centered (line 93) | def puts_centered(str)
  function print_bunny_text (line 100) | def print_bunny_text(text)

FILE: 19_Bunny/rust/src/main.rs
  constant DATA (line 27) | const DATA: [i32;233] = [
  function main (line 45) | fn main() {

FILE: 20_Buzzword/csharp/Program.cs
  class Program (line 5) | class Program
    method Header (line 10) | static void Header()
    method Instructions (line 25) | static void Instructions()
    method Capitalize (line 53) | static string Capitalize(string input)
    method GeneratePhrase (line 69) | static string GeneratePhrase()
    method Decision (line 82) | static bool Decision()
    method Main (line 97) | static void Main(string[] args)

FILE: 20_Buzzword/java/src/Buzzword.java
  class Buzzword (line 3) | public class Buzzword {
    method main (line 5) | public static void main(final String[] args) {

FILE: 20_Buzzword/java/src/BuzzwordSupplier.java
  class BuzzwordSupplier (line 7) | public class BuzzwordSupplier implements Supplier<String> {
    method get (line 33) | @Override

FILE: 20_Buzzword/java/src/UserInterface.java
  class UserInterface (line 9) | public class UserInterface implements Runnable {
    method UserInterface (line 33) | public UserInterface(final Scanner input,
    method run (line 41) | @Override

FILE: 20_Buzzword/javascript/buzzword.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 59) | async function main()

FILE: 20_Buzzword/python/buzzword.py
  function main (line 24) | def main() -> None:

FILE: 20_Buzzword/rust/src/main.rs
  function main (line 4) | fn main() {

FILE: 21_Calendar/csharp/Program.cs
  class Program (line 10) | class Program
    method Tab (line 13) | static string Tab(int numspaces)
    method Main (line 27) | static void Main(string[] args)

FILE: 21_Calendar/java/Calendar.java
  class Calendar (line 13) | public class Calendar {
    method play (line 21) | public void play() {
    method showIntro (line 28) | private static void showIntro() {
    method startGame (line 36) | private void startGame() {
    method main (line 168) | public static void main(String[] args) {

FILE: 21_Calendar/javascript/calendar.js
  function print (line 5) | function print(str)
  function tab (line 10) | function tab(space)

FILE: 21_Calendar/python/calendar.py
  function parse_input (line 25) | def parse_input() -> Tuple[int, bool]:
  function calendar (line 67) | def calendar(weekday: int, leap_year: bool) -> None:
  function main (line 140) | def main() -> None:

FILE: 21_Calendar/ruby/calendar.rb
  class Calendar (line 1) | class Calendar
    method parse_input (line 2) | def parse_input
    method start (line 47) | def start(weekday, leap_year)

FILE: 21_Calendar/rust/src/main.rs
  constant WIDTH (line 3) | const WIDTH: usize = 64;
  constant DAYS_WIDTH (line 4) | const DAYS_WIDTH: usize = WIDTH / 8;
  constant MONTH_WIDTH (line 5) | const MONTH_WIDTH: usize = WIDTH - (DAYS_WIDTH * 2);
  constant DAY_NUMS_WIDTH (line 6) | const DAY_NUMS_WIDTH: usize = WIDTH / 7;
  constant DAYS (line 8) | const DAYS: [&str; 7] = [
  function main (line 18) | fn main() {
  function prompt (line 36) | fn prompt() -> (String, bool) {
  function get_months_and_days (line 72) | fn get_months_and_days(leap_year: bool) -> (Vec<(String, u8)>, u16) {
  function print_between (line 111) | fn print_between(s: String, w: usize, star: bool) {
  function print_header (line 120) | fn print_header(month: String, days_passed: u16, days_left: u16) {
  function print_days (line 135) | fn print_days(current_day_index: &mut usize, days: u8) {

FILE: 22_Change/csharp/Program.cs
  class Program (line 5) | class Program
    method Header (line 10) | static void Header()
    method GetInput (line 31) | static (bool status, double price, double payment) GetInput()
    method PrintChange (line 56) | static void PrintChange(double change)
    method Main (line 99) | static void Main(string[] args)

FILE: 22_Change/java/src/Change.java
  class Change (line 13) | public class Change {
    type GAME_STATE (line 18) | private enum GAME_STATE {
    method Change (line 32) | public Change() {
    method play (line 41) | public void play() {
    method calculateChange (line 86) | private void calculateChange() {
    method intro (line 145) | private void intro() {
    method displayTextAndGetNumber (line 161) | private double displayTextAndGetNumber(String text) {
    method displayTextAndGetInput (line 171) | private String displayTextAndGetInput(String text) {
    method simulateTabs (line 182) | private String simulateTabs(int spaces) {

FILE: 22_Change/java/src/ChangeGame.java
  class ChangeGame (line 1) | public class ChangeGame {
    method main (line 2) | public static void main(String[] args) {

FILE: 22_Change/javascript/change.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 22_Change/python/change.py
  function print_centered (line 12) | def print_centered(msg: str) -> None:
  function print_header (line 17) | def print_header(title: str) -> None:
  function print_introduction (line 22) | def print_introduction() -> None:
  function pennies_to_dollar_string (line 27) | def pennies_to_dollar_string(p: float) -> str:
  function compute_change (line 32) | def compute_change() -> None:
  function main (line 91) | def main() -> None:

FILE: 22_Change/rust/src/main.rs
  function main (line 3) | fn main() {
  function welcome (line 112) | fn welcome() {
  function get_dollar_value_in_cents_from_user (line 119) | fn get_dollar_value_in_cents_from_user(prompt:&str) -> i16 {

FILE: 23_Checkers/javascript/checkers.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function try_computer (line 47) | function try_computer()
  function eval_move (line 69) | function eval_move()
  function more_captures (line 101) | function more_captures() {
  function main (line 122) | async function main()

FILE: 23_Checkers/python/checkers.py
  class MoveRecord (line 25) | class MoveRecord(NamedTuple):
  function print_centered (line 33) | def print_centered(msg: str) -> None:
  function print_header (line 38) | def print_header(title: str) -> None:
  function get_coordinates (line 43) | def get_coordinates(prompt: str) -> Tuple[int, int]:
  function is_legal_board_coordinate (line 61) | def is_legal_board_coordinate(x: int, y: int) -> bool:
  class Board (line 65) | class Board:
    method __init__ (line 66) | def __init__(self) -> None:
    method __str__ (line 78) | def __str__(self) -> str:
    method get_spaces (line 98) | def get_spaces(self) -> Iterator[Tuple[int, int]]:
    method get_spaces_with_computer_pieces (line 103) | def get_spaces_with_computer_pieces(self) -> Iterator[Tuple[int, int]]:
    method get_spaces_with_human_pieces (line 109) | def get_spaces_with_human_pieces(self) -> Iterator[Tuple[int, int]]:
    method get_legal_deltas_for_space (line 115) | def get_legal_deltas_for_space(self, x: int, y: int) -> Iterator[Tuple...
    method get_legal_moves (line 124) | def get_legal_moves(self, x: int, y: int) -> Iterator[MoveRecord]:
    method pick_computer_move (line 131) | def pick_computer_move(self) -> Optional[MoveRecord]:
    method check_move (line 148) | def check_move(
    method evaluate_move (line 172) | def evaluate_move(
    method remove_r_pieces (line 208) | def remove_r_pieces(self, move_record: MoveRecord) -> None:
    method remove_pieces (line 216) | def remove_pieces(
    method play_computer_move (line 227) | def play_computer_move(self, move_record: MoveRecord) -> None:
    method try_extend (line 277) | def try_extend(
    method get_human_move (line 295) | def get_human_move(self) -> Tuple[int, int, int, int]:
    method get_human_extension (line 323) | def get_human_extension(
    method play_human_move (line 343) | def play_human_move(
    method check_pieces (line 352) | def check_pieces(self) -> bool:
  function print_instructions (line 362) | def print_instructions() -> None:
  function print_human_won (line 374) | def print_human_won() -> None:
  function print_computer_won (line 378) | def print_computer_won() -> None:
  function play_game (line 382) | def play_game() -> None:
  function main (line 409) | def main() -> None:

FILE: 23_Checkers/ruby/checkers.rb
  function main (line 70) | def main
  function game_loop (line 106) | def game_loop(board)
  function my_turn (line 121) | def my_turn(board, jumpStart = nil)
  function players_turn (line 169) | def players_turn(board)
  function get_player_move (line 202) | def get_player_move(board, jumpFrom = nil)
  function read_coord (line 232) | def read_coord(prompt)
  function confirm_quit (line 249) | def confirm_quit
  function parse_coord (line 260) | def parse_coord(coord)
  class Board (line 292) | class Board
    method initialize (line 295) | def initialize
    method [] (line 313) | def [](coord)
    method []= (line 318) | def []=(coord, value)
    method text (line 330) | def text(indent = BOARD_TEXT_INDENT)
    method mine_at? (line 349) | def mine_at?(coord)
    method king_at? (line 353) | def king_at?(coord)
    method opponent_at? (line 357) | def opponent_at?(coord)
    method empty_at? (line 361) | def empty_at?(coord)
    method all_coords (line 366) | def all_coords
    method my_pieces (line 378) | def my_pieces
    method all_coords (line 386) | def all_coords
    method legal_move? (line 401) | def legal_move?(is_me, move)
    method make_move! (line 433) | def make_move!(move)
    method bestMoveFrom (line 455) | def bestMoveFrom(coord, mustJump)
    method ratedMove (line 484) | def ratedMove(from, to)
  class Coord (line 526) | class Coord
    method initialize (line 532) | def initialize(x, y)
    method valid? (line 537) | def valid?
    method == (line 542) | def ==(other)
    method to_s (line 547) | def to_s
    method by (line 553) | def by(x, y)
  class Move (line 566) | class Move
    method initialize (line 572) | def initialize(from, to, rating = -99)
    method invalid (line 581) | def self.invalid
    method valid? (line 587) | def valid?
    method jump? (line 603) | def jump?
    method midpoint (line 609) | def midpoint
    method betterOf (line 616) | def betterOf(otherMove)
    method to_s (line 622) | def to_s
    method delta (line 635) | def delta
    method magnitude (line 641) | def magnitude

FILE: 24_Chemist/java/src/Chemist.java
  class Chemist (line 13) | public class Chemist {
    type GAME_STATE (line 20) | private enum GAME_STATE {
    method Chemist (line 33) | public Chemist() {
    method play (line 42) | public void play() {
    method intro (line 98) | private void intro() {
    method displayTextAndGetNumber (line 117) | private int displayTextAndGetNumber(String text) {
    method displayTextAndGetInput (line 127) | private String displayTextAndGetInput(String text) {
    method simulateTabs (line 138) | private String simulateTabs(int spaces) {

FILE: 24_Chemist/java/src/ChemistGame.java
  class ChemistGame (line 1) | public class ChemistGame {
    method main (line 2) | public static void main(String[] args) {

FILE: 24_Chemist/javascript/chemist.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 24_Chemist/python/chemist.py
  function play_scenario (line 14) | def play_scenario() -> bool:
  function show_failure (line 37) | def show_failure() -> None:
  function show_success (line 42) | def show_success() -> None:
  function show_ending (line 46) | def show_ending() -> None:
  function main (line 51) | def main() -> None:

FILE: 24_Chemist/rust/src/lib.rs
  type Config (line 12) | pub struct Config {
    method new (line 16) | pub fn new() -> Result<Config, Box<dyn Error>> {
  function run (line 27) | pub fn run(_config: &Config) -> Result<(), Box<dyn Error>> {
  function get_string_from_user_input (line 89) | fn get_string_from_user_input(prompt: &str) -> Result<String, Box<dyn Er...
  function get_number_from_input (line 112) | fn get_number_from_input<T:Display + PartialOrd + FromStr>(prompt: &str,...

FILE: 24_Chemist/rust/src/main.rs
  function main (line 12) | fn main() {
  function welcome (line 33) | fn welcome() {

FILE: 25_Chief/csharp/Game.cs
  class Game (line 5) | internal class Game
    method Game (line 9) | public Game(IReadWrite io)
    method Play (line 14) | internal void Play()
    method DoIntroduction (line 39) | private void DoIntroduction()

FILE: 25_Chief/csharp/IReadWriteExtensions.cs
  class IReadWriteExtensions (line 3) | internal static class IReadWriteExtensions
    method ReadYes (line 5) | internal static bool ReadYes(this IReadWrite io, string format, Number...
    method ReadYes (line 7) | internal static bool ReadYes(this IReadWrite io, string prompt) =>

FILE: 25_Chief/csharp/Math.cs
  class Math (line 5) | public static class Math
    method CalculateOriginal (line 7) | public static float CalculateOriginal(float result) => (result + 1 - 5...
    method ShowWorking (line 9) | public static string ShowWorking(Number value) =>

FILE: 25_Chief/csharp/Resources/Resource.cs
  class Resource (line 6) | internal static class Resource
    class Streams (line 8) | internal static class Streams
    class Formats (line 17) | internal static class Formats
    class Prompts (line 23) | internal static class Prompts
    method GetString (line 31) | private static string GetString([CallerMemberName] string? name = null)
    method GetStream (line 38) | private static Stream GetStream([CallerMemberName] string? name = null)

FILE: 25_Chief/java/src/Chief.java
  class Chief (line 13) | public class Chief {
    type GAME_STATE (line 15) | private enum GAME_STATE {
    method Chief (line 32) | public Chief() {
    method play (line 43) | public void play() {
    method tabbedSpaces (line 142) | private String tabbedSpaces(int spaces) {
    method instructions (line 148) | private void instructions() {
    method intro (line 156) | private void intro() {
    method yesEntered (line 170) | private boolean yesEntered(String text) {
    method stringIsAnyValue (line 182) | private boolean stringIsAnyValue(String text, String... values) {
    method displayTextAndGetInput (line 201) | private String displayTextAndGetInput(String text) {

FILE: 25_Chief/java/src/ChiefGame.java
  class ChiefGame (line 1) | public class ChiefGame {
    method main (line 3) | public static void main(String[] args) {

FILE: 25_Chief/javascript/chief.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 46) | async function main()

FILE: 25_Chief/python/chief.py
  function print_lightning_bolt (line 1) | def print_lightning_bolt() -> None:
  function print_solution (line 19) | def print_solution(n: float) -> None:
  function game (line 28) | def game() -> None:

FILE: 25_Chief/ruby/chief.rb
  function tab (line 1) | def tab(size)
  function input (line 10) | def input
  function bye (line 14) | def bye
  function main (line 18) | def main

FILE: 25_Chief/rust/src/main.rs
  function print_center (line 3) | fn print_center(text: String, width: usize) {
  function send_lightening (line 12) | fn send_lightening() {
  function check_yes_answer (line 47) | fn check_yes_answer() -> bool {
  function main (line 58) | fn main() {

FILE: 26_Chomp/csharp/Cookie.cs
  class Cookie (line 5) | internal class Cookie
    method Cookie (line 11) | public Cookie(int rowCount, int columnCount)
    method TryChomp (line 26) | public bool TryChomp(int row, int column, out char chomped)
    method ToString (line 47) | public override string ToString()

FILE: 26_Chomp/csharp/Game.cs
  class Game (line 3) | internal class Game
    method Game (line 7) | public Game(IReadWrite io)
    method Play (line 12) | internal void Play()
    method Play (line 34) | private PlayerNumber Play(Cookie cookie, PlayerNumber player)
    method Chomp (line 48) | private bool Chomp(Cookie cookie, PlayerNumber player)

FILE: 26_Chomp/csharp/IOExtensions.cs
  class IOExtensions (line 3) | internal static class IOExtensions
    method ReadParameters (line 5) | public static (float, int, int) ReadParameters(this IReadWrite io)
    method ReadNumberWithMax (line 12) | private static int ReadNumberWithMax(this IReadWrite io, string initia...

FILE: 26_Chomp/csharp/PlayerNumber.cs
  class PlayerNumber (line 3) | internal class PlayerNumber
    method PlayerNumber (line 10) | public PlayerNumber(float playerCount)
    method Increment (line 19) | private PlayerNumber Increment()
    method ToString (line 31) | public override string ToString() => (_number >= 0 ? " " : "") + _numb...

FILE: 26_Chomp/csharp/Resources/Resource.cs
  class Resource (line 6) | internal static class Resource
    class Streams (line 8) | internal static class Streams
    class Formats (line 16) | internal static class Formats
    class Prompts (line 22) | internal static class Prompts
    class Strings (line 31) | internal static class Strings
    method GetString (line 37) | private static string GetString([CallerMemberName] string? name = null)
    method GetStream (line 45) | private static Stream GetStream([CallerMemberName] string? name = null...

FILE: 26_Chomp/java/Chomp.java
  class Chomp (line 2) | public class Chomp{
    method Chomp (line 8) | Chomp(){
    method startGame (line 27) | private void startGame(){
    method printBoard (line 67) | private void printBoard(){
    method move (line 89) | private void move(int player){
    method main (line 154) | public static void main(String []args){

FILE: 26_Chomp/javascript/chomp.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function init_board (line 49) | function init_board()
  function show_board (line 57) | function show_board()
  function main (line 77) | async function main()

FILE: 26_Chomp/python/chomp.py
  class Canvas (line 10) | class Canvas:
    method __init__ (line 13) | def __init__(self, width=9, height=9, fill="*") -> None:
    method render (line 20) | def render(self) -> str:
    method chomp (line 28) | def chomp(self, r, c) -> str:
  function play_game (line 42) | def play_game() -> None:
  function main (line 109) | def main() -> None:

FILE: 27_Civil_War/csharp/Army.cs
  class Army (line 7) | public class Army
    type Resource (line 9) | private enum Resource
    method Army (line 16) | public Army(Side side)
    method PrepareBattle (line 63) | public void PrepareBattle(int men, int casualties)
    method AllocateResources (line 73) | public virtual void AllocateResources()
    method EnterResource (line 89) | private bool EnterResource(Resource resource)
    method DisplayMorale (line 115) | public virtual void DisplayMorale()
    method ChooseStrategy (line 120) | public virtual bool ChooseStrategy(bool isReplay) => EnterStrategy(tru...
    method EnterStrategy (line 122) | protected bool EnterStrategy(bool canSurrender, string hint)
    method CalculateLosses (line 146) | public virtual void CalculateLosses(Army opponent)
    method RecordResult (line 162) | public void RecordResult(Side winner)
    method LearnStrategy (line 180) | protected virtual void LearnStrategy() { }
    method DisplayWarResult (line 182) | public void DisplayWarResult(Army opponent)
    method DisplayStrategies (line 195) | public virtual void DisplayStrategies() { }
  class ComputerArmy (line 198) | class ComputerArmy : Army
    method ComputerArmy (line 203) | public ComputerArmy(Side side) : base(side) { }
    method AllocateResources (line 207) | public override void AllocateResources() { }
    method DisplayMorale (line 209) | public override void DisplayMorale() { }
    method ChooseStrategy (line 211) | public override bool ChooseStrategy(bool isReplay)
    method LearnStrategy (line 232) | protected override void LearnStrategy()
    method CalculateLosses (line 249) | public override void CalculateLosses(Army opponent)
    method DisplayStrategies (line 255) | public override void DisplayStrategies()

FILE: 27_Civil_War/csharp/Battle.cs
  type Side (line 6) | public enum Side { Confederate, Union, Both }
  type Option (line 7) | public enum Option { Battle, Replay, Quit }
  type Battle (line 9) | public record Battle(string Name, int[] Men, int[] Casualties, Side Offe...

FILE: 27_Civil_War/csharp/ConsoleUtils.cs
  class ConsoleUtils (line 8) | static class ConsoleUtils
    method InputYesOrNo (line 10) | public static bool InputYesOrNo()
    method WriteWordWrap (line 28) | public static void WriteWordWrap(string text)
    method WriteTable (line 52) | public static void WriteTable<T>(ICollection<T> items, List<TableRow<T...
    type TableRow (line 98) | public record TableRow<T>(string Name, Func<T, object> Data, string Be...

FILE: 27_Civil_War/csharp/GameOptions.cs
  type GameOptions (line 7) | public record GameOptions(bool TwoPlayers, bool ShowDescriptions)

FILE: 27_Civil_War/java/src/CivilWar.java
  class CivilWar (line 11) | @SuppressWarnings("SpellCheckingInspection")
    method main (line 49) | public static void main(String[] args) {
    method gameLoop (line 64) | private void gameLoop() {
    method startBattle (line 116) | private BattleState startBattle() {
    method getUnionTroops (line 233) | private int getUnionTroops(HistoricalDatum battle) {
    method getConfedTroops (line 237) | private int getConfedTroops(HistoricalDatum battle) {
    method moraleForArmy (line 241) | private String moraleForArmy(BattleState battleState, int armyIdx) {
    type OffensiveStatus (line 267) | private enum OffensiveStatus {
      method OffensiveStatus (line 272) | OffensiveStatus(String label) {
    method offensiveLogic (line 277) | private void offensiveLogic(HistoricalDatum battle) {
    method simulateUnionLosses (line 308) | private UnionLosses simulateUnionLosses(HistoricalDatum battle) {
    method calcLosses (line 325) | private void calcLosses(BattleState battle) {
    method reset (line 412) | private void reset() {
    method complete (line 419) | private void complete() {
    method findWinner (line 455) | private Winner findWinner(double confLosses, double unionLosses) {
    type Winner (line 475) | private enum Winner {
    method unionStrategy (line 479) | private void unionStrategy() {
    method CivilWar (line 509) | public CivilWar(PrintStream out) {
    method showCredits (line 547) | private void showCredits() {
    method updateStrategies (line 555) | private void updateStrategies(int strategy) {
    method showHelp (line 575) | private void showHelp() {
    method rightAlignInt (line 605) | private String rightAlignInt(int number) {
    method rightAlignInt (line 610) | private String rightAlignInt(double number) {
    method inputString (line 614) | private static String inputString(Predicate<String> validator, String ...
    method inputInt (line 628) | private static int inputInt(Predicate<Integer> validator, Function<Int...
    method isYes (line 642) | private static boolean isYes(String s) {
    method isNo (line 650) | private static boolean isNo(String s) {
    class BattleState (line 658) | private static class BattleState {
      method BattleState (line 662) | public BattleState(HistoricalDatum data) {
    class ArmyPair (line 667) | private static class ArmyPair<T> {
      method ArmyPair (line 671) | public ArmyPair(T confederate, T union) {
    class BattleResults (line 677) | private static class BattleResults {
      method getTotal (line 682) | public int getTotal() {
    class ArmyResources (line 687) | private static class ArmyResources {
      method getTotal (line 695) | public int getTotal() {

FILE: 27_Civil_War/javascript/civilwar.js
  function print (line 6) | function print(str)
  function input (line 11) | function input()
  function tab (line 37) | function tab(space)
  function main (line 71) | async function main()

FILE: 27_Civil_War/python/Civilwar.py
  class AttackState (line 12) | class AttackState(enum.Enum):
  class PlayerStat (line 23) | class PlayerStat:
    method set_available_money (line 48) | def set_available_money(self):
    method get_cost (line 54) | def get_cost(self) -> float:
    method get_army_factor (line 57) | def get_army_factor(self) -> float:
    method get_present_men (line 60) | def get_present_men(self) -> float:
  function simulate_losses (line 64) | def simulate_losses(player1: PlayerStat, player2: PlayerStat) -> float:
  function update_army (line 73) | def update_army(player: PlayerStat, enemy: PlayerStat, use_factor=False)...
  function get_choice (line 91) | def get_choice(prompt: str, choices: List[str]) -> str:
  function get_morale (line 99) | def get_morale(stat: PlayerStat, enemy: PlayerStat) -> float:
  function main (line 107) | def main() -> None:

FILE: 28_Combat/csharp/ArmedForces.cs
  type ArmedForces (line 8) | public record ArmedForces

FILE: 28_Combat/csharp/Ceasefire.cs
  class Ceasefire (line 8) | public sealed class Ceasefire : WarState
    method Ceasefire (line 45) | public Ceasefire(ArmedForces computerForces, ArmedForces playerForces,...
    method AttackWithArmy (line 51) | protected override (WarState nextState, string message) AttackWithArmy...
    method AttackWithNavy (line 54) | protected override (WarState nextState, string message) AttackWithNavy...
    method AttackWithAirForce (line 57) | protected override (WarState nextState, string message) AttackWithAirF...

FILE: 28_Combat/csharp/Controller.cs
  class Controller (line 8) | public class Controller
    method GetInitialForces (line 16) | public static ArmedForces GetInitialForces(ArmedForces computerForces)
    method GetAttackBranch (line 50) | public static MilitaryBranch GetAttackBranch(WarState state, bool isFi...
    method GetAttackSize (line 75) | public static int GetAttackSize(int troopsAvailable)
    method InputInteger (line 92) | public static int InputInteger()

FILE: 28_Combat/csharp/FinalCampaign.cs
  class FinalCampaign (line 6) | public sealed class FinalCampaign : WarState
    method FinalCampaign (line 17) | public FinalCampaign(ArmedForces computerForces, ArmedForces playerFor...
    method AttackWithArmy (line 22) | protected override (WarState nextState, string message) AttackWithArmy...
    method AttackWithNavy (line 52) | protected override (WarState nextState, string message) AttackWithNavy...
    method AttackWithAirForce (line 86) | protected override (WarState nextState, string message) AttackWithAirF...

FILE: 28_Combat/csharp/InitialCampaign.cs
  class InitialCampaign (line 6) | public sealed class InitialCampaign : WarState
    method InitialCampaign (line 17) | public InitialCampaign(ArmedForces computerForces, ArmedForces playerF...
    method AttackWithArmy (line 22) | protected override (WarState nextState, string message) AttackWithArmy...
    method AttackWithNavy (line 83) | protected override (WarState nextState, string message) AttackWithNavy...
    method AttackWithAirForce (line 132) | protected override (WarState nextState, string message) AttackWithAirF...

FILE: 28_Combat/csharp/MilitaryBranch.cs
  type MilitaryBranch (line 6) | public enum MilitaryBranch

FILE: 28_Combat/csharp/Program.cs
  class Program (line 3) | class Program
    method Main (line 5) | static void Main()

FILE: 28_Combat/csharp/View.cs
  class View (line 8) | public static class View
    method ShowBanner (line 10) | public static void ShowBanner()
    method ShowInstructions (line 16) | public static void ShowInstructions()
    method ShowDistributeForces (line 25) | public static void ShowDistributeForces()
    method ShowMessage (line 32) | public static void ShowMessage(string message)
    method ShowResult (line 37) | public static void ShowResult(WarState finalState)
    method PromptArmySize (line 61) | public static void PromptArmySize(int computerArmySize)
    method PromptNavySize (line 66) | public static void PromptNavySize(int computerNavySize)
    method PromptAirForceSize (line 71) | public static void PromptAirForceSize(int computerAirForceSize)
    method PromptFirstAttackBranch (line 76) | public static void PromptFirstAttackBranch()
    method PromptNextAttackBranch (line 83) | public static void PromptNextAttackBranch(ArmedForces computerForces, ...
    method PromptAttackSize (line 99) | public static void PromptAttackSize()
    method PromptValidInteger (line 105) | public static void Promp
Condensed preview — 3600 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,686K chars).
[
  {
    "path": ".coveragerc",
    "chars": 24,
    "preview": "[run]\nomit =\n    *test*\n"
  },
  {
    "path": ".github/workflows/check-python.yml",
    "chars": 963,
    "preview": "name: Check Python code\n\non: [push, pull_request]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n    strategy:\n      matrix"
  },
  {
    "path": ".github/workflows/file-size.yml",
    "chars": 885,
    "preview": "name: File Size Check\n\non: [push, pull_request]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n"
  },
  {
    "path": ".github/workflows/rust.yml",
    "chars": 480,
    "preview": "name: Rust\n\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n    branches: [ \"main\" ]\n\nenv:\n  CARGO_TERM_COLOR: alwa"
  },
  {
    "path": ".gitignore",
    "chars": 302,
    "preview": ".local/\n.vscode/\n.gradle/\nnode_modules/\nbuildJvm/bin\nbuildJvm/*/build/\n\n.classpath\n.project\n.settings\n.metadata\n*.iml\n*."
  },
  {
    "path": ".nojekyll",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 949,
    "preview": "# pre-commit run --all-files\nrepos:\n-   repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v4.1.0\n    hooks:\n"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/MiniScript/README.md",
    "chars": 640,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/MiniScript/aceyducey.ms",
    "chars": 1447,
    "preview": "print \" \"*26 + \"Acey Ducey Card Game\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint\nprint\nprint \"Ace"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/README.md",
    "chars": 648,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/aceyducey.bas",
    "chars": 2123,
    "preview": "10 PRINT TAB(26);\"ACEY DUCEY CARD GAME\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n21 PRINT\n22 PRINT\n"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/c++/README.md",
    "chars": 251,
    "preview": "Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)\n\nConversion to [C++14](https://"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/c++/source/Aceyducey.cpp",
    "chars": 2676,
    "preview": "#include <iostream>\n#include <time.h>\n#include \"Aceyducey.h\"\n\n\nint main()\n{\n    //Setting Seed for the Random Generator\n"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/c++/source/Aceyducey.h",
    "chars": 126,
    "preview": "#pragma once\n\nvoid WelcomeMessage();\nvoid DrawCard(short int& Card);\nvoid Play(bool& isPlaying);\nbool isGameOver();\nint "
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/d/.gitignore",
    "chars": 12,
    "preview": "*.exe\n*.obj\n"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/d/README.md",
    "chars": 1402,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html)\n\nConverted to [D](https://dlang"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/d/aceyducey.d",
    "chars": 4340,
    "preview": "@safe: // Make @safe the default for this file, enforcing memory-safety.\n\nvoid main()\n{\n    import std.stdio : write, wr"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/d/aceyducey_literal.d",
    "chars": 3260,
    "preview": "void main()\n{\n    import std;\n\n    L10: writef(\"%26s\", ' '); writeln(\"ACEY DUCEY CARD GAME\");\n    L20: writef(\"%15s\", ' "
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/elm/.gitignore",
    "chars": 3534,
    "preview": "\n# Created by https://www.toptal.com/developers/gitignore/api/macos,visualstudiocode,elm\n# Edit at https://www.toptal.co"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/elm/README.md",
    "chars": 150,
    "preview": "# Acey Ducey\n\nThis is an Elm implementation of the `Basic Compouter Games` Game Acey Ducey.\n\n## Build App\n\n- install elm"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/elm/docs/app.js",
    "chars": 127576,
    "preview": "(function(scope){\n'use strict';\n\nfunction F(arity, fun, wrapper) {\n  wrapper.a = arity;\n  wrapper.f = fun;\n  return wrap"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/elm/docs/index.html",
    "chars": 401,
    "preview": "<!DOCTYPE html>\n<html>\n\n<head>\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@picocss/pico@latest/css/pico.min.css\""
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/elm/elm.json",
    "chars": 552,
    "preview": "{\n    \"type\": \"application\",\n    \"source-directories\": [\n        \"src\"\n    ],\n    \"elm-version\": \"0.19.1\",\n    \"dependen"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/elm/package.json",
    "chars": 559,
    "preview": "{\n  \"name\": \"01_Acey_Ducey\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"repository\": \"https://github.com/auryn31/01_"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/elm/resources/index.html",
    "chars": 397,
    "preview": "<!DOCTYPE html>\n<html>\n\n<head>\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@picocss/pico@latest/css/pico.min.css\""
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/elm/src/Main.elm",
    "chars": 8639,
    "preview": "module Main exposing (..)\n\nimport Browser\nimport Html exposing (..)\nimport Html.Attributes exposing (style, type_, value"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/go/main.go",
    "chars": 2284,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"math/rand\"\r\n\t\"os\"\r\n\t\"sort\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n\t\"time\"\r\n)\r\n\r\nvar welc"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/nim/aceyducey.nim",
    "chars": 2166,
    "preview": "import std/[random,strutils]\n\nvar\n  bet, cardA, cardB, cardC, stash: int\n  retry: bool = true\n\nrandomize() # Seed the ra"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/.gitattributes",
    "chars": 804,
    "preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Explicitly declare text files yo"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/.gitignore",
    "chars": 1013,
    "preview": "# Basic Computer Programs project specific\naceyducey\naceyducey.exe\n\n# Compiled l10n files: .mo should be ignored\n*.mo\n\n#"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/README.md",
    "chars": 240,
    "preview": "Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)\n\nConversion to [Pascal](https:/"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/object-pascal/aceyducey.lpi",
    "chars": 1773,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<CONFIG>\n  <ProjectOptions>\n    <Version Value=\"11\"/>\n    <General>\n      <Flags>"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/object-pascal/aceyducey.pas",
    "chars": 169,
    "preview": "program aceyducey;\n\n{$IFDEF FPC}\n{$mode objfpc}{$H+}\n{$ENDIF}\n\nuses\n  Game\n, Deck\n;\n\nvar\n  Acey_Ducey: TGame;\n\nbegin\n  A"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/object-pascal/deck.pas",
    "chars": 1807,
    "preview": "unit Deck;\n\n{$IFDEF FPC}\n{$mode objfpc}{$H+}\n{$ENDIF}\n\ninterface\n\nuses\n  Classes\n, SysUtils\n;\n\ntype\n{ TDeck }\n  TDeck = "
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/object-pascal/game.pas",
    "chars": 2554,
    "preview": "unit Game;\n\n{$IFDEF FPC}\n{$mode objfpc}{$H+}\n{$ENDIF}\n\ninterface\n\nuses\n  Classes\n, SysUtils\n, Crt\n, Deck\n;\n\ntype\n{ TGame"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/simple/aceyducey.lpi",
    "chars": 1495,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<CONFIG>\n  <ProjectOptions>\n    <Version Value=\"11\"/>\n    <General>\n      <Flags>"
  },
  {
    "path": "00_Alternate_Languages/01_Acey_Ducey/pascal/simple/aceyducey.pas",
    "chars": 2861,
    "preview": "program aceyducey;\n\n{$IFDEF FPC}\n{$mode objfpc}{$H+}\n{$ENDIF}\n\nuses\n Crt;\n\nvar\n  Stash: Integer;\n  CardA: Integer;\n  Car"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/MiniScript/README.md",
    "chars": 777,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/MiniScript/amazing.ms",
    "chars": 2828,
    "preview": "import \"listUtil\"\nprint \" \"*28 + \"Amazing Program\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; pr"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/amazing.bas",
    "chars": 3067,
    "preview": "10 PRINT TAB(28);\"AMAZING PROGRAM\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT:PR"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/go/main.go",
    "chars": 4042,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"log\"\r\n\t\"math/rand\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n\t\"time\"\r\n)\r\n\r\nfunc main() {\r\n\trand."
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/.gitattributes",
    "chars": 804,
    "preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Explicitly declare text files yo"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/.gitignore",
    "chars": 1009,
    "preview": "# Basic Computer Programs project specific\namazing\namazing.exe\n\n# Compiled l10n files: .mo should be ignored\n*.mo\n\n# Gho"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/README.md",
    "chars": 240,
    "preview": "Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)\n\nConversion to [Pascal](https:/"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/object-pascal/amazing.lpi",
    "chars": 1881,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<CONFIG>\n  <ProjectOptions>\n    <Version Value=\"12\"/>\n    <General>\n      <Flags>"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/object-pascal/amazing.pas",
    "chars": 213,
    "preview": "program amazing;\n\n{$IFDEF FPC}\n{$mode ObjFPC}{$H+}\n{$ENDIF}\n\nuses\n  AmazingApplication, maze, Room;\n\nvar\n  AmazingApp: T"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/object-pascal/amazingapplication.pas",
    "chars": 1583,
    "preview": "unit AmazingApplication;\n\n{$IFDEF FPC}\n{$mode ObjFPC}{$H+}\n{$ENDIF}\n\ninterface\n\nuses\n  Classes\n, SysUtils\n, Crt\n, Maze\n;"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/object-pascal/maze.pas",
    "chars": 5533,
    "preview": "unit Maze;\n\n{$IFDEF FPC}\n{$mode ObjFPC}{$H+}\n{$ENDIF}\n\ninterface\n\nuses\n  Classes\n, SysUtils\n, Room\n;\n\ntype\n  TDirection "
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/object-pascal/room.pas",
    "chars": 826,
    "preview": "unit Room;\n\n{$IFDEF FPC}\n{$mode ObjFPC}{$H+}\n{$ENDIF}\n\ninterface\n\nuses\n  Classes\n, SysUtils\n;\n\ntype\n{ TRoom }\n  TRoom = "
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/simple/amazing.lpi",
    "chars": 1514,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<CONFIG>\n  <ProjectOptions>\n    <Version Value=\"12\"/>\n    <General>\n      <Flags>"
  },
  {
    "path": "00_Alternate_Languages/02_Amazing/pascal/simple/amazing.pas",
    "chars": 5484,
    "preview": "program Amazing;\n\n{$IFDEF FPC}\n{$mode objfpc}{$H+}\n{$ENDIF}\n\nuses\n  Crt;\n\ntype\n  TDirection = (dUp, dRight, dDown, dLeft"
  },
  {
    "path": "00_Alternate_Languages/03_Animal/MiniScript/README.md",
    "chars": 634,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/03_Animal/MiniScript/animal.ms",
    "chars": 2460,
    "preview": "print \" \"*32 + \"Animal\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nprint \"Play 'Gue"
  },
  {
    "path": "00_Alternate_Languages/03_Animal/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/03_Animal/animal.bas",
    "chars": 1957,
    "preview": "10 PRINT TAB(32);\"ANIMAL\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT: PRINT: PRINT\n40 PRINT "
  },
  {
    "path": "00_Alternate_Languages/03_Animal/go/main.go",
    "chars": 3501,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"log\"\r\n\t\"os\"\r\n\t\"strings\"\r\n)\r\n\r\ntype node struct {\r\n\ttext    string\r\n\tyesNod"
  },
  {
    "path": "00_Alternate_Languages/04_Awari/MiniScript/README.md",
    "chars": 632,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/04_Awari/MiniScript/awari.ms",
    "chars": 4473,
    "preview": "print \" \"*34 + \"Awari\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\n\n// Keep a list of the opening moves "
  },
  {
    "path": "00_Alternate_Languages/04_Awari/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/04_Awari/awari.bas",
    "chars": 2017,
    "preview": "5 PRINT TAB(34);\"AWARI\"\n7 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n10 DATA 0\n15 DIM B(13),G(13),F(50):"
  },
  {
    "path": "00_Alternate_Languages/04_Awari/elm/.gitignore",
    "chars": 3542,
    "preview": "\n# Created by https://www.toptal.com/developers/gitignore/api/macos,visualstudiocode,elm\n# Edit at https://www.toptal.co"
  },
  {
    "path": "00_Alternate_Languages/04_Awari/elm/README.md",
    "chars": 140,
    "preview": "# Awari\n\nThis is an Elm implementation of the `Basic Compouter Games` Game Awari.\n\n## Build App\n\n- install elm\n\n```bash\n"
  },
  {
    "path": "00_Alternate_Languages/04_Awari/elm/docs/index.html",
    "chars": 393,
    "preview": "<!DOCTYPE html>\n<html>\n\n<head>\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@picocss/pico@latest/css/pico.min.css\""
  },
  {
    "path": "00_Alternate_Languages/04_Awari/elm/elm.json",
    "chars": 517,
    "preview": "{\n    \"type\": \"application\",\n    \"source-directories\": [\n        \"src\"\n    ],\n    \"elm-version\": \"0.19.1\",\n    \"dependen"
  },
  {
    "path": "00_Alternate_Languages/04_Awari/elm/package.json",
    "chars": 421,
    "preview": "{\n  \"name\": \"04_Awari\",\n  \"version\": \"1.0.0\",\n  \"main\": \"index.js\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"live\": \"elm-"
  },
  {
    "path": "00_Alternate_Languages/04_Awari/elm/resources/index.html",
    "chars": 393,
    "preview": "<!DOCTYPE html>\n<html>\n\n<head>\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@picocss/pico@latest/css/pico.min.css\""
  },
  {
    "path": "00_Alternate_Languages/04_Awari/elm/src/Main.elm",
    "chars": 10523,
    "preview": "module Main exposing (main)\n\nimport Array exposing (Array, repeat)\nimport Browser\nimport Html exposing (..)\nimport Html."
  },
  {
    "path": "00_Alternate_Languages/05_Bagels/MiniScript/README.md",
    "chars": 634,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/05_Bagels/MiniScript/bagels.ms",
    "chars": 2399,
    "preview": "print \" \"*33 + \"BAGELS\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"; print; print\n// *** BAGELS Number G"
  },
  {
    "path": "00_Alternate_Languages/05_Bagels/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/05_Bagels/bagels.bas",
    "chars": 2192,
    "preview": "5 PRINT TAB(33);\"BAGELS\"\n10 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\":PRINT:PRINT\n15 REM *** BAGLES NUM"
  },
  {
    "path": "00_Alternate_Languages/05_Bagels/go/main.go",
    "chars": 3664,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"math/rand\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n\t\"time\"\r\n)\r\n\r\nconst MAXGUESSES "
  },
  {
    "path": "00_Alternate_Languages/05_Bagels/nim/bagels.nim",
    "chars": 2806,
    "preview": "import std/[random,strutils]\n\n# BAGLES NUMBER GUESSING GAME\n# ORIGINAL SOURCE UNKNOWN BUT SUSPECTED TO BE\n# LAWRENCE HAL"
  },
  {
    "path": "00_Alternate_Languages/06_Banner/MiniScript/README.md",
    "chars": 634,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/06_Banner/MiniScript/banner.ms",
    "chars": 3038,
    "preview": "blockWidth = input(\"Horizontal? \").val\nif blockWidth <= 1 then blockWidth = 3\n\nblockHeight = input(\"Vertical? \").val\nif "
  },
  {
    "path": "00_Alternate_Languages/06_Banner/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/06_Banner/banner.bas",
    "chars": 2628,
    "preview": "10 INPUT \"HORIZONTAL\";X\n20 INPUT \"VERTICAL\";Y\n21 INPUT \"CENTERED\";L$\n22 G1=0:IF L$>\"P\" THEN G1=1\n23 INPUT \"CHARACTER (TY"
  },
  {
    "path": "00_Alternate_Languages/07_Basketball/MiniScript/README.md",
    "chars": 642,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/07_Basketball/MiniScript/basketball.ms",
    "chars": 7406,
    "preview": "print \" \"*31 + \"Basketball\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nprint \"This "
  },
  {
    "path": "00_Alternate_Languages/07_Basketball/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/07_Basketball/basketball.bas",
    "chars": 5222,
    "preview": "5 PRINT TAB(31);\"BASKETBALL\"\n7 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n8 PRINT:PRINT:PRINT\n10 PRINT \""
  },
  {
    "path": "00_Alternate_Languages/08_Batnum/MiniScript/README.md",
    "chars": 634,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/08_Batnum/MiniScript/batnum.ms",
    "chars": 3120,
    "preview": "print \" \"*33 + \"Batnum\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nprint \"This prog"
  },
  {
    "path": "00_Alternate_Languages/08_Batnum/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/08_Batnum/batnum.bas",
    "chars": 2187,
    "preview": "10 PRINT TAB(33);\"BATNUM\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT\n110 PRINT \""
  },
  {
    "path": "00_Alternate_Languages/08_Batnum/go/main.go",
    "chars": 5684,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n)\r\n\r\ntype StartOption int8\r\n\r\nconst (\r\n\tStart"
  },
  {
    "path": "00_Alternate_Languages/09_Battle/MiniScript/README.md",
    "chars": 819,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/09_Battle/MiniScript/battle.ms",
    "chars": 4605,
    "preview": "print \" \"*33 + \"Battle\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\n// -- BATTLE WRITTEN BY RAY WESTERGA"
  },
  {
    "path": "00_Alternate_Languages/09_Battle/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/09_Battle/battle.bas",
    "chars": 4966,
    "preview": "5 PRINT TAB(33);\"BATTLE\"\n7 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n10 REM -- BATTLE WRITTEN BY RAY WE"
  },
  {
    "path": "00_Alternate_Languages/09_Battle/go/main.go",
    "chars": 5084,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"math/rand\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n\t\"time\"\r\n)\r\n\r\nconst (\r\n\tSEA_WID"
  },
  {
    "path": "00_Alternate_Languages/10_Blackjack/MiniScript/README.md",
    "chars": 901,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/10_Blackjack/MiniScript/blackjack.ms",
    "chars": 9075,
    "preview": "import \"listUtil\"\nprint \" \"*31 + \"Black Jack\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; "
  },
  {
    "path": "00_Alternate_Languages/10_Blackjack/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/10_Blackjack/blackjack.bas",
    "chars": 7937,
    "preview": "2 PRINT TAB(31);\"BLACK JACK\"\n4 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n6 PRINT:PRINT:PRINT\n10 DEF FNA"
  },
  {
    "path": "00_Alternate_Languages/10_Blackjack/pascal/README.md",
    "chars": 174,
    "preview": "Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)\n\nConversion to [Pascal](https:/"
  },
  {
    "path": "00_Alternate_Languages/11_Bombardment/MiniScript/README.md",
    "chars": 644,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/11_Bombardment/MiniScript/bombardment.ms",
    "chars": 3000,
    "preview": "print \" \"*33 + \"Bombardment\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nprint \"You "
  },
  {
    "path": "00_Alternate_Languages/11_Bombardment/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/11_Bombardment/bombardment.bas",
    "chars": 2688,
    "preview": "10 PRINT TAB(33);\"BOMBARDMENT\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT\n100 PR"
  },
  {
    "path": "00_Alternate_Languages/11_Bombardment/go/main.go",
    "chars": 5067,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"math/rand\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n\t\"time\"\r\n)\r\n\r\n// Messages corre"
  },
  {
    "path": "00_Alternate_Languages/12_Bombs_Away/MiniScript/README.md",
    "chars": 640,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/12_Bombs_Away/MiniScript/bombsaway.ms",
    "chars": 3283,
    "preview": "\ngetNum = function(prompt, maxVal=5)\n\twhile true\n\t\tnum = floor(input(prompt + \"? \").val)\n\t\tif num > 0 and num <= maxVal "
  },
  {
    "path": "00_Alternate_Languages/12_Bombs_Away/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/12_Bombs_Away/bombsaway.bas",
    "chars": 2865,
    "preview": "8 PRINT \"YOU ARE A PILOT IN A WORLD WAR II BOMBER.\"\n10 INPUT \"WHAT SIDE -- ITALY(1), ALLIES(2), JAPAN(3), GERMANY(4)\";A\n"
  },
  {
    "path": "00_Alternate_Languages/12_Bombs_Away/go/main.go",
    "chars": 5386,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"math/rand\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n\t\"time\"\r\n)\r\n\r\ntype Choice struc"
  },
  {
    "path": "00_Alternate_Languages/13_Bounce/MiniScript/README.md",
    "chars": 634,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/13_Bounce/MiniScript/bounce.ms",
    "chars": 1419,
    "preview": "print \" \"*33 + \"Bounce\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nt = [0]*21\nprint"
  },
  {
    "path": "00_Alternate_Languages/13_Bounce/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/13_Bounce/bounce.bas",
    "chars": 1310,
    "preview": "10 PRINT TAB(33);\"BOUNCE\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT\n90 DIM T(20"
  },
  {
    "path": "00_Alternate_Languages/14_Bowling/MiniScript/README.md",
    "chars": 636,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/14_Bowling/MiniScript/bowling.ms",
    "chars": 3459,
    "preview": "import \"listUtil\"\n\nprint \" \"*34 + \"Bowl\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print"
  },
  {
    "path": "00_Alternate_Languages/14_Bowling/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/14_Bowling/bowling.bas",
    "chars": 2386,
    "preview": "10 PRINT TAB(34);\"BOWL\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT\n270 DIM C(15)"
  },
  {
    "path": "00_Alternate_Languages/15_Boxing/MiniScript/README.md",
    "chars": 634,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/15_Boxing/MiniScript/boxing.ms",
    "chars": 4663,
    "preview": "print \" \"*33 + \"Boxing\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nprint \"Boxing Ol"
  },
  {
    "path": "00_Alternate_Languages/15_Boxing/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/15_Boxing/boxing.bas",
    "chars": 3241,
    "preview": "1 PRINT TAB(33);\"BOXING\"\n2 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n3 PRINT:PRINT:PRINT\n4 PRINT \"BOXIN"
  },
  {
    "path": "00_Alternate_Languages/16_Bug/MiniScript/README.md",
    "chars": 628,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/16_Bug/MiniScript/bug.ms",
    "chars": 4990,
    "preview": "print \" \"*34 + \"Bug\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nprint \"The game Bug"
  },
  {
    "path": "00_Alternate_Languages/16_Bug/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/16_Bug/bug.bas",
    "chars": 5799,
    "preview": "10 PRINT TAB(34);\"BUG\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT\n40 REM\n50 A=0:"
  },
  {
    "path": "00_Alternate_Languages/17_Bullfight/MiniScript/README.md",
    "chars": 630,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/17_Bullfight/MiniScript/bull.ms",
    "chars": 5291,
    "preview": "print \" \"*34 + \"Bull\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n\ngetYesNo = functi"
  },
  {
    "path": "00_Alternate_Languages/17_Bullfight/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/17_Bullfight/bullfight.bas",
    "chars": 5001,
    "preview": "10 PRINT TAB(34);\"BULL\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 DEF FNA(K)=INT(RND(1)*2+1)\n200 "
  },
  {
    "path": "00_Alternate_Languages/18_Bullseye/MiniScript/README.md",
    "chars": 937,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/18_Bullseye/MiniScript/bullseye.ms",
    "chars": 1696,
    "preview": "print \" \"*32 + \"Bullseye\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n\nprint \"In thi"
  },
  {
    "path": "00_Alternate_Languages/18_Bullseye/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/18_Bullseye/bullseye.bas",
    "chars": 1632,
    "preview": "5 PRINT TAB(32);\"BULLSEYE\"\n10 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n20 PRINT:PRINT:PRINT\n30 PRINT \""
  },
  {
    "path": "00_Alternate_Languages/19_Bunny/MiniScript/README.md",
    "chars": 928,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/19_Bunny/MiniScript/bunny.ms",
    "chars": 1301,
    "preview": "print \" \"*33 + \"Bunny\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n\ndata = []\ndata +"
  },
  {
    "path": "00_Alternate_Languages/19_Bunny/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/19_Bunny/bunny.bas",
    "chars": 1352,
    "preview": "10 PRINT TAB(33);\"BUNNY\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT: PRINT: PRINT\n100 REM  \""
  },
  {
    "path": "00_Alternate_Languages/20_Buzzword/MiniScript/README.md",
    "chars": 928,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/20_Buzzword/MiniScript/buzzword.ms",
    "chars": 1210,
    "preview": "print \" \"*26 + \"Buzzword Generator\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n\npri"
  },
  {
    "path": "00_Alternate_Languages/20_Buzzword/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/20_Buzzword/buzzword.bas",
    "chars": 1293,
    "preview": "10 PRINT TAB(26);\"BUZZWORD GENERATOR\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT"
  },
  {
    "path": "00_Alternate_Languages/20_Buzzword/go/main.go",
    "chars": 1812,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"math/rand\"\r\n\t\"os\"\r\n\t\"strings\"\r\n\t\"time\"\r\n)\r\n\r\nfunc main() {\r\n\trand.Seed(tim"
  },
  {
    "path": "00_Alternate_Languages/20_Buzzword/nim/buzzword.nim",
    "chars": 1301,
    "preview": "import std/[random,strutils]\n\nrandomize()\n\nconst\n  words1 = [\"ABILITY\",\"BASAL\",\"BEHAVIORAL\",\"CHILD-CENTERED\",\"DIFFERENTI"
  },
  {
    "path": "00_Alternate_Languages/21_Calendar/MiniScript/README.md",
    "chars": 638,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/21_Calendar/MiniScript/calendar.ms",
    "chars": 2287,
    "preview": "import \"stringUtil\"\n\nprint \" \"*32 + \"Calendar\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print;"
  },
  {
    "path": "00_Alternate_Languages/21_Calendar/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/21_Calendar/calendar.bas",
    "chars": 1564,
    "preview": "10 PRINT TAB(32);\"CALENDAR\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT\n100 REM  "
  },
  {
    "path": "00_Alternate_Languages/22_Change/MiniScript/README.md",
    "chars": 931,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/22_Change/MiniScript/change.ms",
    "chars": 1464,
    "preview": "print \" \"*33 + \"Change\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n\nprint \"I, your "
  },
  {
    "path": "00_Alternate_Languages/22_Change/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/22_Change/change.bas",
    "chars": 1239,
    "preview": "2 PRINT TAB(33);\"CHANGE\"\n4 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n5 PRINT:PRINT:PRINT\n6 PRINT \"I, YO"
  },
  {
    "path": "00_Alternate_Languages/22_Change/go/main.go",
    "chars": 2144,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"math\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n)\r\n\r\nfunc printWelcome() {\r\n\tfmt.Println(\"      "
  },
  {
    "path": "00_Alternate_Languages/23_Checkers/MiniScript/README.md",
    "chars": 638,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/23_Checkers/MiniScript/checkers.ms",
    "chars": 7559,
    "preview": "print \" \"*32 + \"Checkers\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n\nprint \"This i"
  },
  {
    "path": "00_Alternate_Languages/23_Checkers/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/23_Checkers/checkers.annotated.bas",
    "chars": 8539,
    "preview": "     # Annotated version of CHECKERS.BAS, modified to improve readability.\n     #\n     # I've made the following changes"
  },
  {
    "path": "00_Alternate_Languages/23_Checkers/checkers.bas",
    "chars": 3251,
    "preview": "5 PRINT TAB(32);\"CHECKERS\"\n10 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n15 PRINT:PRINT:PRINT\n20 PRINT \""
  },
  {
    "path": "00_Alternate_Languages/24_Chemist/MiniScript/README.md",
    "chars": 934,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/24_Chemist/MiniScript/chemist.ms",
    "chars": 1103,
    "preview": "print \" \"*33 + \"Chemist\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nprint \"The fict"
  },
  {
    "path": "00_Alternate_Languages/24_Chemist/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/24_Chemist/chemist.bas",
    "chars": 1072,
    "preview": "3 PRINT TAB(33);\"CHEMIST\"\n6 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n8 PRINT:PRINT:PRINT\n10 PRINT \"THE"
  },
  {
    "path": "00_Alternate_Languages/25_Chief/C/chief.c",
    "chars": 2856,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n\n//check if windows or linux for the clear"
  },
  {
    "path": "00_Alternate_Languages/25_Chief/MiniScript/README.md",
    "chars": 1074,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/25_Chief/MiniScript/chief.ms",
    "chars": 1631,
    "preview": "print \" \"*30 + \"Chief\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\nprint \"I am chief"
  },
  {
    "path": "00_Alternate_Languages/25_Chief/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/25_Chief/chief.bas",
    "chars": 1565,
    "preview": "2 PRINT TAB(30) \"CHIEF\"\n4 PRINT TAB(15) \"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n6 PRINT:PRINT:PRINT\n10 PRINT \"I AM "
  },
  {
    "path": "00_Alternate_Languages/25_Chief/go/main.go",
    "chars": 3143,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n)\r\n\r\nfunc printLightning() {\r\n\tfmt.Println(\"*"
  },
  {
    "path": "00_Alternate_Languages/26_Chomp/MiniScript/README.md",
    "chars": 632,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/26_Chomp/MiniScript/chomp.ms",
    "chars": 2778,
    "preview": "print \" \"*33 + \"Chomp\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n// *** THE GAME O"
  },
  {
    "path": "00_Alternate_Languages/26_Chomp/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/26_Chomp/chomp.bas",
    "chars": 2628,
    "preview": "10 PRINT TAB(33);\"CHOMP\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT:PRINT:PRINT\n40 DIM A(10,"
  },
  {
    "path": "00_Alternate_Languages/27_Civil_War/MiniScript/README.md",
    "chars": 638,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/27_Civil_War/MiniScript/civilwar.ms",
    "chars": 14195,
    "preview": "print \" \"*26 + \"Civil War\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n// ORIGINAL G"
  },
  {
    "path": "00_Alternate_Languages/27_Civil_War/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/27_Civil_War/civilwar.bas",
    "chars": 13545,
    "preview": "2 PRINT TAB(26) \"CIVIL WAR\"\n4 PRINT TAB(15) \"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n6 PRINT : PRINT : PRINT\n20 REM "
  },
  {
    "path": "00_Alternate_Languages/28_Combat/MiniScript/README.md",
    "chars": 634,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/28_Combat/MiniScript/combat.ms",
    "chars": 4095,
    "preview": "print \" \"*33 + \"Combat\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n\nprintInColumns2"
  },
  {
    "path": "00_Alternate_Languages/28_Combat/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/28_Combat/combat.bas",
    "chars": 3238,
    "preview": "1 PRINT TAB(33);\"COMBAT\"\n2 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n3 PRINT: PRINT: PRINT\n4 PRINT \"I A"
  },
  {
    "path": "00_Alternate_Languages/29_Craps/MiniScript/README.md",
    "chars": 632,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/29_Craps/MiniScript/craps.ms",
    "chars": 2333,
    "preview": "// Craps\n// Ported from BASIC to MiniScript by Joe Strout (2023)\n\nprint \" \"*33 + \"CRAPS\"\nprint \" \"*15 + \"CREATIVE COMPUT"
  },
  {
    "path": "00_Alternate_Languages/29_Craps/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/29_Craps/craps.bas",
    "chars": 2100,
    "preview": "5 PRINT TAB(33);\"CRAPS\"\n10 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n12 PRINT:PRINT:PRINT\n15 LET R=0\n20"
  },
  {
    "path": "00_Alternate_Languages/29_Craps/distributions.bas",
    "chars": 953,
    "preview": "10 PRINT \"DISTRIBUTION OF DICE ROLLS WITH  INT(7*RND(1))  VS  INT(6*RND(1)+1)\"\n20 DIM A(12)\n30 DIM B(12)\n100 FOR X = 1 T"
  },
  {
    "path": "00_Alternate_Languages/29_Craps/nim/craps.nim",
    "chars": 2251,
    "preview": "import std/[random,strutils]\n\nvar\n  wager, winnings, rollResult: int\n  stillplaying: bool = true\n\nrandomize() # Seed the"
  },
  {
    "path": "00_Alternate_Languages/30_Cube/C/cube.c",
    "chars": 4664,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <time.h>\n\n//check if windows or linux for the clear screen\n#ifdef _WIN32"
  },
  {
    "path": "00_Alternate_Languages/30_Cube/MiniScript/README.md",
    "chars": 630,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/30_Cube/MiniScript/cube.ms",
    "chars": 3342,
    "preview": "print \" \"*34 + \"Bullseye\"\nprint \" \"*15 + \"Creative Computing  Morristown, New Jersey\"\nprint; print; print\n\nif input(\"Do "
  },
  {
    "path": "00_Alternate_Languages/30_Cube/README.md",
    "chars": 244,
    "preview": "#### External Links\n - Common Lisp: https://github.com/koalahedron/lisp-computer-games/blob/master/01%20Acey%20Ducey/com"
  },
  {
    "path": "00_Alternate_Languages/30_Cube/cube.bas",
    "chars": 4078,
    "preview": "10 PRINT TAB(34);\"CUBE\"\n20 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n30 PRINT : PRINT : PRINT\n100 PRINT"
  },
  {
    "path": "00_Alternate_Languages/31_Depth_Charge/MiniScript/README.md",
    "chars": 647,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/31_Depth_Charge/MiniScript/depthcharge.ms",
    "chars": 2938,
    "preview": "// Depth Charge\r\n// Originally by Dana Noftle (1978)\r\n// Translated from BASIC to MiniScript by Ryushinaka and Joe Strou"
  },
  {
    "path": "00_Alternate_Languages/31_Depth_Charge/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/31_Depth_Charge/depthcharge.bas",
    "chars": 1386,
    "preview": "2 PRINT TAB(30);\"DEPTH CHARGE\"\n4 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n6 PRINT: PRINT: PRINT\n20 INP"
  },
  {
    "path": "00_Alternate_Languages/31_Depth_Charge/go/main.go",
    "chars": 3512,
    "preview": "package main\r\n\r\nimport (\r\n\t\"bufio\"\r\n\t\"fmt\"\r\n\t\"math\"\r\n\t\"math/rand\"\r\n\t\"os\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n\t\"time\"\r\n)\r\n\r\ntype Pos"
  },
  {
    "path": "00_Alternate_Languages/32_Diamond/MiniScript/README.md",
    "chars": 636,
    "preview": "Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).\n\nConversion to [MiniScript](ht"
  },
  {
    "path": "00_Alternate_Languages/32_Diamond/MiniScript/diamond.ms",
    "chars": 574,
    "preview": "// Diamond\n//\n// Ported from BASIC to MiniScript by Joe Strout\n\nprint \" \"*33 + \"DIAMOND\"\nprint \" \"*15 + \"CREATIVE COMPUT"
  },
  {
    "path": "00_Alternate_Languages/32_Diamond/README.md",
    "chars": 402,
    "preview": "Please refer to the `readme.md` in the parent folder. \n\nEach subfolder represents a port of this program to a language w"
  },
  {
    "path": "00_Alternate_Languages/32_Diamond/diamond.bas",
    "chars": 562,
    "preview": "1 PRINT TAB(33);\"DIAMOND\"\n2 PRINT TAB(15);\"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY\"\n3 PRINT:PRINT:PRINT\n4 PRINT \"FOR "
  },
  {
    "path": "00_Alternate_Languages/33_Dice/C/dice.c",
    "chars": 813,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <time.h>\n\nfloat percent(int number, int total){\n    float percent;\n    p"
  },
  {
    "path": "00_Alternate_Languages/33_Dice/Julia/Dice.jl",
    "chars": 2199,
    "preview": "#=\nPort of Dice from BASIC Computer Games (1978)\n\nThis \"game\" simulates a given number of dice rolls, and returns the \nc"
  },
  {
    "path": "00_Alternate_Languages/33_Dice/Julia/README.md",
    "chars": 140,
    "preview": "Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)\n\nConversion to [Python](https:/"
  }
]

// ... and 3400 more files (download for full content)

About this extraction

This page contains the full source code of the coding-horror/basic-computer-games GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3600 files (6.7 MB), approximately 1.9M tokens, and a symbol index with 6880 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!