mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-12 15:50:20 -08:00
Merge branch 'coding-horror:main' into miniscript-batch-5
This commit is contained in:
@@ -4,66 +4,68 @@ 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("\n")
|
||||
echo("ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER ")
|
||||
echo("THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP")
|
||||
echo("YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING")
|
||||
echo("ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE")
|
||||
echo("A VALUE BETWEEN THE FIRST TWO.")
|
||||
echo("IF YOU DO NOT WANT TO BET, INPUT A 0")
|
||||
echo("")
|
||||
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("")
|
||||
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, " ===")
|
||||
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)
|
||||
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)
|
||||
cardB = rand 2..14
|
||||
if cardA > cardB: # Make sure cardA is the smaller card
|
||||
swap(cardA, cardB)
|
||||
echo("")
|
||||
printCard(cardA)
|
||||
echo("")
|
||||
printCard(cardB)
|
||||
echo("")
|
||||
swap cardA, cardB
|
||||
echo ""
|
||||
printCard cardA
|
||||
echo ""
|
||||
printCard cardB
|
||||
echo ""
|
||||
|
||||
proc drawPlayerCard() =
|
||||
cardC = rand(2..14)
|
||||
printCard(cardC)
|
||||
echo("")
|
||||
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: ")
|
||||
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 bet == 0:
|
||||
echo("CHICKEN!!")
|
||||
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)")
|
||||
echo "TRY AGAIN (YES OR NO)"
|
||||
var answer = readLine(stdin).normalize()
|
||||
case answer:
|
||||
of "yes", "y": result = true
|
||||
else: result = false
|
||||
result = (answer == "y") or (answer == "yes")
|
||||
|
||||
printGreeting()
|
||||
while retry:
|
||||
@@ -72,15 +74,16 @@ while retry:
|
||||
printBalance()
|
||||
drawDealerCards()
|
||||
bet = getBet()
|
||||
echo("")
|
||||
echo ""
|
||||
drawPlayerCard()
|
||||
if (cardC >= cardA) and (cardC <= cardB):
|
||||
echo("YOU WIN!!!")
|
||||
echo "YOU WIN!!!"
|
||||
stash += bet
|
||||
else:
|
||||
echo("SORRY, YOU LOSE")
|
||||
stash -= bet
|
||||
echo("SORRY, FRIEND, BUT YOU BLEW YOUR WAD.");
|
||||
echo("")
|
||||
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!");
|
||||
echo "O.K., HOPE YOU HAD FUN!"
|
||||
|
||||
@@ -10,6 +10,8 @@ var
|
||||
prompt: string
|
||||
stillplaying: bool = true
|
||||
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
# Seed 3 unique random numbers; indicate if they're all unique
|
||||
proc genSeed(): bool =
|
||||
for i in 1..3:
|
||||
@@ -24,19 +26,19 @@ proc playGame() =
|
||||
# We want 3 unique random numbers: loop until we get them!
|
||||
while unique == false:
|
||||
unique = genSeed()
|
||||
echo("O.K. I HAVE A NUMBER IN MIND.")
|
||||
echo "O.K. I HAVE A NUMBER IN MIND."
|
||||
for i in 1..20:
|
||||
var c, d: int = 0
|
||||
echo("GUESS #", i)
|
||||
echo "GUESS #", i
|
||||
prompt = readLine(stdin).normalize()
|
||||
if (prompt.len() != 3):
|
||||
echo("TRY GUESSING A THREE-DIGIT NUMBER.")
|
||||
echo "TRY GUESSING A THREE-DIGIT NUMBER."
|
||||
continue
|
||||
for z in 1..3:
|
||||
b[z] = prompt.substr(z-1, z-1).parseInt() # Convert string digits to array ints
|
||||
if (b[1] == b[2]) or (b[2] == b[3]) or (b[3] == b[1]):
|
||||
echo("OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND")
|
||||
echo("HAS NO TWO DIGITS THE SAME.")
|
||||
echo "OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND"
|
||||
echo "HAS NO TWO DIGITS THE SAME."
|
||||
# Figure out the PICOs
|
||||
if (a[1] == b[2]): c += 1
|
||||
if (a[1] == b[3]): c += 1
|
||||
@@ -51,45 +53,45 @@ proc playGame() =
|
||||
if (d != 3):
|
||||
if (c != 0):
|
||||
for j in 1..c:
|
||||
echo("PICO")
|
||||
echo "PICO"
|
||||
if (d != 0):
|
||||
for j in 1..d:
|
||||
echo("FERMI")
|
||||
echo "FERMI"
|
||||
if (c == 0) and (d == 0):
|
||||
echo("BAGELS")
|
||||
echo "BAGELS"
|
||||
# If we have 3 FERMIs, we win!
|
||||
else:
|
||||
echo("YOU GOT IT!!!")
|
||||
echo("")
|
||||
echo "YOU GOT IT!!!"
|
||||
echo ""
|
||||
wincount += 1
|
||||
youwin = true
|
||||
break
|
||||
# Only invoke if we've tried 20 guesses without winning
|
||||
if (youwin == false):
|
||||
echo("OH WELL.")
|
||||
echo("THAT'S TWENTY GUESSES. MY NUMBER WAS ", a[1], a[2], a[3])
|
||||
if not youwin:
|
||||
echo "OH WELL."
|
||||
echo "THAT'S TWENTY GUESSES. MY NUMBER WAS ", a[1], a[2], a[3]
|
||||
|
||||
# main program
|
||||
echo(spaces(33), "BAGELS")
|
||||
echo(spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
|
||||
echo("\n\n")
|
||||
echo("WOULD YOU LIKE THE RULES (YES OR NO)")
|
||||
echo spaces(33), "BAGELS"
|
||||
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
echo "\n\n"
|
||||
echo "WOULD YOU LIKE THE RULES (YES OR NO)"
|
||||
prompt = readLine(stdin).normalize()
|
||||
if (prompt.substr(0, 0) == "y"):
|
||||
echo("I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS")
|
||||
echo("MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:")
|
||||
echo(" PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION")
|
||||
echo(" FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION")
|
||||
echo(" BAGELS - NO DIGITS CORRECT")
|
||||
echo("")
|
||||
if prompt.substr(0, 0) == "y":
|
||||
echo "I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS"
|
||||
echo "MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:"
|
||||
echo " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION"
|
||||
echo " FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION"
|
||||
echo " BAGELS - NO DIGITS CORRECT"
|
||||
echo ""
|
||||
while(stillplaying == true):
|
||||
playGame()
|
||||
echo("PLAY AGAIN (YES OR NO)")
|
||||
echo "PLAY AGAIN (YES OR NO)"
|
||||
prompt = readLine(stdin).normalize()
|
||||
if (prompt.substr(0, 0) != "y"):
|
||||
if prompt.substr(0, 0) != "y":
|
||||
stillplaying = false
|
||||
if wincount > 0:
|
||||
echo("")
|
||||
echo("A ", wincount, " POINT BAGELS BUFF!!")
|
||||
echo("")
|
||||
echo("HOPE YOU HAD FUN. BYE.")
|
||||
echo ""
|
||||
echo "A ", wincount, " POINT BAGELS BUFF!!"
|
||||
echo ""
|
||||
echo "HOPE YOU HAD FUN. BYE."
|
||||
|
||||
34
00_Alternate_Languages/20_Buzzword/nim/buzzword.nim
Normal file
34
00_Alternate_Languages/20_Buzzword/nim/buzzword.nim
Normal file
@@ -0,0 +1,34 @@
|
||||
import std/[random,strutils]
|
||||
|
||||
randomize()
|
||||
|
||||
const
|
||||
words1 = ["ABILITY","BASAL","BEHAVIORAL","CHILD-CENTERED","DIFFERENTIATED","DISCOVERY","FLEXIBLE",
|
||||
"HETEROGENEOUS","HOMOGENEOUS","MANIPULATIVE","MODULAR","TAVISTOCK","INDIVIDUALIZED"]
|
||||
words2 = ["LEARNING","EVALUATIVE","OBJECTIVE","COGNITIVE","ENRICHMENT","SCHEDULING","HUMANISTIC",
|
||||
"INTEGRATED","NON-GRADED","TRAINING","VERTICAL AGE","MOTIVATIONAL","CREATIVE"]
|
||||
words3 = ["GROUPING","MODIFICATION","ACCOUNTABILITY","PROCESS","CORE CURRICULUM","ALGORITHM", "PERFORMANCE",
|
||||
"REINFORCEMENT","OPEN CLASSROOM","RESOURCE","STRUCTURE","FACILITY","ENVIRONMENT"]
|
||||
|
||||
var
|
||||
stillplaying: bool = true
|
||||
prompt: string
|
||||
|
||||
echo spaces(26), "BUZZWORD GENERATOR"
|
||||
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
echo "\n"
|
||||
echo "THIS PROGRAM PRINTS HIGHLY ACCEPTABLE PHRASES IN"
|
||||
echo "'EDUCATOR-SPEAK' THAT YOU CAN WORK INTO REPORTS"
|
||||
echo "AND SPEECHES. AFTER EACH PHRASE, HIT 'ENTER' FOR"
|
||||
echo "ANOTHER PHRASE, OR TYPE 'N' TO QUIT."
|
||||
echo "\n"
|
||||
echo "HERE'S THE FIRST PHRASE..."
|
||||
|
||||
while stillplaying:
|
||||
echo ""
|
||||
echo words1[rand(0..12)], " ", words2[rand(0..12)], " ", words3[rand(0..12)]
|
||||
prompt = readLine(stdin).normalize()
|
||||
if prompt.substr(0, 0) == "n":
|
||||
stillplaying = false
|
||||
|
||||
echo "COME BACK WHEN YOU NEED HELP WITH ANOTHER REPORT!"
|
||||
68
00_Alternate_Languages/29_Craps/nim/craps.nim
Normal file
68
00_Alternate_Languages/29_Craps/nim/craps.nim
Normal file
@@ -0,0 +1,68 @@
|
||||
import std/[random,strutils]
|
||||
|
||||
var
|
||||
wager, winnings, rollResult: int
|
||||
stillplaying: bool = true
|
||||
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
proc tryAgain(): bool =
|
||||
echo "WANT TO PLAY AGAIN? (YES OR NO)"
|
||||
var answer = readLine(stdin).normalize()
|
||||
result = (answer == "y") or (answer == "yes")
|
||||
|
||||
proc takePoint(point: int) =
|
||||
var flag = true
|
||||
while flag:
|
||||
var pointRoll: int = (rand 1..6) + (rand 1..6) # roll dice, then add the sum
|
||||
if pointRoll == 7:
|
||||
echo pointRoll, "- CRAPS. YOU LOSE."
|
||||
echo "YOU LOSE ", wager, " DOLLARS."
|
||||
winnings -= wager
|
||||
flag = false
|
||||
if pointRoll == point:
|
||||
echo point, "- A WINNER.........CONGRATS!!!!!!!!"
|
||||
echo "AT 2 TO 1 ODDS PAYS YOU...LET ME SEE... ", 2*wager, " DOLLARS"
|
||||
winnings += (2*wager)
|
||||
flag = false
|
||||
if flag:
|
||||
echo pointRoll, " - NO POINT. I WILL ROLL AGAIN"
|
||||
|
||||
echo spaces(33), "CRAPS"
|
||||
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
echo "\n"
|
||||
echo "2,3,12 ARE LOSERS; 4,5,6,8,9,10 ARE POINTS; 7,11 ARE NATURAL WINNERS."
|
||||
winnings = 0
|
||||
|
||||
# play the game
|
||||
while stillplaying:
|
||||
echo ""
|
||||
echo "INPUT THE AMOUNT OF YOUR WAGER."
|
||||
wager = readline(stdin).parseInt()
|
||||
echo "I WILL NOW THROW THE DICE"
|
||||
rollResult = (rand 1..6) + (rand 1..6) # roll dice, then add the sum
|
||||
case rollResult:
|
||||
of 7, 11:
|
||||
echo rollResult, "- NATURAL....A WINNER!!!!"
|
||||
echo rollResult, " PAYS EVEN MONEY, YOU WIN ", wager, " DOLLARS"
|
||||
winnings += wager
|
||||
of 2:
|
||||
echo rollResult, "- SNAKE EYES....YOU LOSE."
|
||||
echo "YOU LOSE ", wager, " DOLLARS."
|
||||
winnings -= wager
|
||||
of 3, 12:
|
||||
echo rollResult, "- CRAPS...YOU LOSE."
|
||||
echo "YOU LOSE ", wager, " DOLLARS."
|
||||
winnings -= wager
|
||||
else:
|
||||
echo rollResult, " IS THE POINT. I WILL ROLL AGAIN"
|
||||
takePoint(rollResult)
|
||||
if winnings < 0: echo "YOU ARE NOW UNDER $", winnings
|
||||
if winnings > 0: echo "YOU ARE NOW AHEAD $", winnings
|
||||
if winnings == 0: echo "YOU ARE NOW EVEN AT 0"
|
||||
stillplaying = tryAgain()
|
||||
|
||||
# done playing
|
||||
if winnings < 0: echo "TOO BAD, YOU ARE IN THE HOLE. COME AGAIN."
|
||||
if winnings > 0: echo "CONGRATULATIONS---YOU CAME OUT A WINNER. COME AGAIN!"
|
||||
if winnings == 0: echo "CONGRATULATIONS---YOU CAME OUT EVEN, NOT BAD FOR AN AMATEUR"
|
||||
@@ -6,17 +6,19 @@ var
|
||||
z: string
|
||||
retry: bool = true
|
||||
|
||||
echo(spaces(34), "DICE")
|
||||
echo(spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
|
||||
echo("\n")
|
||||
echo("THIS PROGRAM SIMULATES THE ROLLING OF A PAIR OF DICE.")
|
||||
echo("YOU ENTER THE NUMBER OF TIMES YOU WANT THE COMPUTER TO")
|
||||
echo("'ROLL' THE DICE. WATCH OUT, VERY LARGE NUMBERS TAKE")
|
||||
echo("A LONG TIME. IN PARTICULAR, NUMBERS OVER 5000.")
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
echo spaces(34), "DICE"
|
||||
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
echo "\n"
|
||||
echo "THIS PROGRAM SIMULATES THE ROLLING OF A PAIR OF DICE."
|
||||
echo "YOU ENTER THE NUMBER OF TIMES YOU WANT THE COMPUTER TO"
|
||||
echo "'ROLL' THE DICE. WATCH OUT, VERY LARGE NUMBERS TAKE"
|
||||
echo "A LONG TIME. IN PARTICULAR, NUMBERS OVER 5000."
|
||||
|
||||
while(retry):
|
||||
echo("\n")
|
||||
echo("HOW MANY ROLLS")
|
||||
echo "\n"
|
||||
echo "HOW MANY ROLLS"
|
||||
x = readLine(stdin).parseInt()
|
||||
for v in 2..12:
|
||||
f[v] = 0 # Initialize array to 0
|
||||
@@ -25,14 +27,11 @@ while(retry):
|
||||
b = rand(1..6) # Die 2
|
||||
r = a + b # Sum of dice
|
||||
f[r] += 1 # Increment array count of dice sum result
|
||||
echo()
|
||||
echo("TOTAL SPOTS: ", "NUMBER OF TIMES")
|
||||
echo ""
|
||||
echo "TOTAL SPOTS: ", "NUMBER OF TIMES"
|
||||
for v in 2..12:
|
||||
echo(v, ": ", f[v]) # Print out counts for each possible result
|
||||
echo("\n")
|
||||
echo("TRY AGAIN?")
|
||||
echo v, ": ", f[v] # Print out counts for each possible result
|
||||
echo "\n"
|
||||
echo "TRY AGAIN?"
|
||||
z = readLine(stdin).normalize()
|
||||
if (z=="yes") or (z=="y"):
|
||||
retry = true
|
||||
else:
|
||||
retry = false
|
||||
retry = (z=="yes") or (z=="y")
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
import std/[random,strformat,strutils]
|
||||
|
||||
type
|
||||
symbol = enum
|
||||
PAPER = 1, SCISSORS = 2, ROCK = 3
|
||||
|
||||
var
|
||||
cpuChoice, playerChoice, turns: int
|
||||
cpuWins, playerWins, ties: int = 0
|
||||
|
||||
randomize()
|
||||
|
||||
# Function: player makes a choice
|
||||
proc choose(): int =
|
||||
echo "3=ROCK...2=SCISSORS...1=PAPER...WHAT'S YOUR CHOICE?"
|
||||
result = readLine(stdin).parseInt()
|
||||
|
||||
# Function: determine the outcome
|
||||
proc outcome(p: symbol, c: symbol): string =
|
||||
if p == c:
|
||||
ties += 1
|
||||
result = "TIE GAME. NO WINNER."
|
||||
else:
|
||||
const
|
||||
winTable = [
|
||||
PAPER: (ROCK, "COVERS"),
|
||||
SCISSORS: (PAPER, "CUTS"),
|
||||
ROCK: (SCISSORS, "CRUSHES")
|
||||
]
|
||||
let (winCond, winVerb) = winTable[p]
|
||||
if winCond == c:
|
||||
playerWins += 1
|
||||
result = fmt"{p} {winVerb} {c}. YOU WIN."
|
||||
else:
|
||||
let (_, winVerb) = winTable[c]
|
||||
cpuWins += 1
|
||||
result = fmt"{c} {winVerb} {p}. I WIN."
|
||||
|
||||
# Start the game
|
||||
echo spaces(21), "GAME OF ROCK, SCISSORS, PAPER"
|
||||
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
echo "\n"
|
||||
echo "HOW MANY GAMES?"
|
||||
turns = readLine(stdin).parseInt()
|
||||
while turns > 10:
|
||||
echo "SORRY, BUT WE AREN'T ALLOWED TO PLAY THAT MANY."
|
||||
turns = readLine(stdin).parseInt()
|
||||
|
||||
# Play the game
|
||||
for i in 1..turns:
|
||||
echo ""
|
||||
echo "GAME NUMBER ", i
|
||||
playerChoice = choose()
|
||||
while playerChoice != 1 and playerChoice != 2 and playerChoice != 3:
|
||||
echo "INVALID"
|
||||
playerChoice = choose()
|
||||
cpuChoice = rand(1..3) # match against range in symbol
|
||||
echo "THIS IS MY CHOICE... ", symbol(cpuChoice)
|
||||
echo outcome(symbol(playerChoice), symbol(cpuChoice))
|
||||
|
||||
# Results
|
||||
echo ""
|
||||
echo "HERE IS THE FINAL GAME SCORE:"
|
||||
echo "I HAVE WON ", cpuWins," GAME(S)."
|
||||
echo "YOU HAVE WON ", playerWins," GAME(S)."
|
||||
echo "AND ", ties," GAME(S) ENDED IN A TIE."
|
||||
echo ""
|
||||
echo "THANKS FOR PLAYING!!"
|
||||
38
00_Alternate_Languages/91_Train/nim/train.nim
Normal file
38
00_Alternate_Languages/91_Train/nim/train.nim
Normal file
@@ -0,0 +1,38 @@
|
||||
import std/[random,strutils]
|
||||
|
||||
var
|
||||
carSpeed, diff, err, guess, trainSpeed, carTime: int
|
||||
stillplaying: bool = true
|
||||
|
||||
randomize() # Seed the random number generator
|
||||
|
||||
# Return a tuple that'll be carSpeed, diff, trainSpeed
|
||||
proc randomNumbers(): (int,int,int) =
|
||||
result = (rand(41..65), rand(6..20), rand(21..39))
|
||||
|
||||
# Do we want to play again?
|
||||
proc tryAgain(): bool =
|
||||
echo "ANOTHER PROBLEM (YES OR NO)"
|
||||
var answer = readLine(stdin).normalize()
|
||||
result = (answer == "y") or (answer == "yes")
|
||||
|
||||
echo spaces(33), "TRAIN"
|
||||
echo spaces(15), "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
echo "\n"
|
||||
echo "TIME - SPEED DISTANCE EXERCISE"
|
||||
|
||||
while stillplaying:
|
||||
echo ""
|
||||
(carSpeed, diff, trainSpeed) = randomNumbers() # Get random numbers for prompt
|
||||
echo "A CAR TRAVELING ", carSpeed, " MPH CAN MAKE A CERTAIN TRIP IN"
|
||||
echo diff, " HOURS LESS THAN A TRAIN TRAVELING AT ", trainSpeed, " MPH."
|
||||
echo "HOW LONG DOES THE TRIP TAKE BY CAR?"
|
||||
guess = readLine(stdin).parseInt() # Get guess
|
||||
carTime = (diff * trainSpeed / (carSpeed - trainSpeed)).toInt() # Calculate answer
|
||||
err = (((carTime - guess) * 100) / guess).toInt().abs() # Calculate error to an absolute value
|
||||
if err > 5: # Error within 5%?
|
||||
echo "SORRY. YOU WERE OFF BY ", err, " PERCENT."
|
||||
else:
|
||||
echo "GOOD! ANSWER WITHIN ", err, " PERCENT."
|
||||
echo "CORRECT ANSWER IS ", carTime, " HOURS."
|
||||
stillplaying = tryAgain()
|
||||
97
01_Acey_Ducey/elixir/acey_ducey.exs
Normal file
97
01_Acey_Ducey/elixir/acey_ducey.exs
Normal file
@@ -0,0 +1,97 @@
|
||||
########################################################
|
||||
#
|
||||
# Acey Ducey
|
||||
#
|
||||
# From: BASIC Computer Games (1978)
|
||||
# Edited by David Ahl
|
||||
#
|
||||
# "This is a simulation of the Acey Ducey card game.
|
||||
# In the game, the dealer (the computer) deals two
|
||||
# cards face up. You have an option to bet or not to
|
||||
# bet depending on whether or not you feel the next
|
||||
# card dealt will have a value between the first two.
|
||||
#
|
||||
# "Your initial money is set to $100. The game keeps
|
||||
# going on until you lose all your money or interrupt
|
||||
# the program.
|
||||
#
|
||||
# "The original BASIC program author was Bill Palmby
|
||||
# of Prairie View, Illinois."
|
||||
#
|
||||
# To run this file:
|
||||
# > mix run acey_ducey.exs --no-mix-exs
|
||||
#
|
||||
# This uses the following techniques:
|
||||
#
|
||||
# - The `Game` module uses a recursive `play/1` function.
|
||||
# - The `Game` module stores the game state in a `%Game{}` struct.
|
||||
# - The classic 52 playing card deck is set as a module attribute generated via a comprehension.
|
||||
# - The deck is automatically shuffled when there are less than 3 cards remaining in the deck.
|
||||
# - The initial deck defaults to an empty list which triggers a shuffle when the game begins.
|
||||
# - The initial funds defaults to 100 but it can be explicitly set in the `%Game{}` struct.
|
||||
# - The prompt to place a bet will automatically re-prompt when given an invalid input.
|
||||
# - The bets are assumed to be the whole integers for simplicity.
|
||||
#
|
||||
########################################################
|
||||
|
||||
defmodule Game do
|
||||
@deck for suit <- [:spades, :hearts, :clubs, :diamonds], value <- 1..13, do: {suit, value}
|
||||
|
||||
defstruct funds: 100, deck: []
|
||||
|
||||
def play(), do: play(%__MODULE__{}) # for convenience
|
||||
|
||||
def play(%__MODULE__{funds: funds}) when funds <= 0, do: IO.puts("~~~ game over ~~~")
|
||||
def play(%__MODULE__{deck: deck} = game) when length(deck) < 3, do: play(%{game | deck: Enum.shuffle(@deck)})
|
||||
def play(%__MODULE__{deck: deck, funds: funds} = game) do
|
||||
IO.gets("<hit enter>\n")
|
||||
|
||||
[first_card, second_card, third_card | remaining_deck] = deck
|
||||
|
||||
IO.puts("~~~ new round ~~~")
|
||||
IO.puts("first card: #{format(first_card)}")
|
||||
IO.puts("second card: #{format(second_card)}\n")
|
||||
IO.puts("funds: $#{funds}")
|
||||
|
||||
bet = prompt_to_place_bet(funds)
|
||||
new_funds = if win?(first_card, second_card, third_card), do: funds + bet, else: funds - bet
|
||||
|
||||
IO.puts("\nthird card: #{format(third_card)}")
|
||||
IO.puts("funds: $#{funds} => $#{new_funds}")
|
||||
IO.puts("~~~ end round ~~~\n")
|
||||
|
||||
play(%{game | deck: remaining_deck, funds: new_funds})
|
||||
end
|
||||
|
||||
# re-prompt if invalid integer and/or out of bounds
|
||||
defp prompt_to_place_bet(funds) do
|
||||
input = IO.gets("place your bet: $")
|
||||
case Integer.parse(input) do
|
||||
{bet, _} when bet in 0..funds -> bet
|
||||
_ -> prompt_to_place_bet(funds)
|
||||
end
|
||||
end
|
||||
|
||||
# for a stricter win condition (non-inclusive)
|
||||
defp win?({_, first}, {_, second}, {_, third}) do
|
||||
[floor, ceiling] = Enum.sort([first, second])
|
||||
(floor < third) && (third < ceiling)
|
||||
end
|
||||
# for a looser win condition (inclusive)
|
||||
#defp win?({_, first}, {_, second}, {_, third}) do
|
||||
#[_, middle, _] = Enum.sort([first, second, third])
|
||||
#middle == third
|
||||
#end
|
||||
|
||||
defp format({suit, value}) do
|
||||
case value do
|
||||
1 -> "ace of #{suit}"
|
||||
11 -> "prince of #{suit}"
|
||||
12 -> "queen of #{suit}"
|
||||
13 -> "king of #{suit}"
|
||||
value -> "#{value} of #{suit}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Game.play() # equivalent to Game.play(%Game{funds: 100, deck: 100})
|
||||
@@ -7,7 +7,6 @@ https://www.atariarchives.org/basicgames/showpage.php?page=2
|
||||
import random
|
||||
|
||||
cards = {
|
||||
1: "1",
|
||||
2: "2",
|
||||
3: "3",
|
||||
4: "4",
|
||||
@@ -16,22 +15,25 @@ cards = {
|
||||
7: "7",
|
||||
8: "8",
|
||||
9: "9",
|
||||
10: "Jack",
|
||||
11: "Queen",
|
||||
12: "King",
|
||||
13: "Ace",
|
||||
10: "10",
|
||||
11: "Jack",
|
||||
12: "Queen",
|
||||
13: "King",
|
||||
14: "Ace",
|
||||
}
|
||||
|
||||
|
||||
def play_game() -> None:
|
||||
cash = 100
|
||||
while cash > 0:
|
||||
print(f"You now have {cash} dollars\n")
|
||||
print("Here are you next two cards")
|
||||
round_cards = list(cards.keys())
|
||||
random.shuffle(round_cards)
|
||||
card_a, card_b, card_c = round_cards.pop(), round_cards.pop(), round_cards.pop()
|
||||
if card_a > card_b:
|
||||
round_cards = list(cards.keys()) # gather cards from dictionary
|
||||
card_a = random.choice(round_cards) # choose a card
|
||||
card_b = card_a # clone the first card, so we avoid the same number for the second card
|
||||
while (card_a == card_b): # if the cards are the same, choose another card
|
||||
card_b = random.choice(round_cards)
|
||||
card_c = random.choice(round_cards) # choose last card
|
||||
if card_a > card_b: # swap cards if card_a is greater than card_b
|
||||
card_a, card_b = card_b, card_a
|
||||
print(f" {cards[card_a]}")
|
||||
print(f" {cards[card_b]}\n")
|
||||
@@ -53,7 +55,7 @@ def play_game() -> None:
|
||||
print("Please enter a positive number")
|
||||
print(f" {cards[card_c]}")
|
||||
if bet > 0:
|
||||
if card_a < card_c < card_b:
|
||||
if card_a <= card_c <= card_b:
|
||||
print("You win!!!")
|
||||
cash += bet * 2
|
||||
else:
|
||||
@@ -82,4 +84,5 @@ If you do not want to bet, input a 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
random.seed()
|
||||
main()
|
||||
|
||||
@@ -8,6 +8,7 @@ Python port by Aviyam Fischer, 2022
|
||||
"""
|
||||
|
||||
from typing import List, Literal, NamedTuple, TypeAlias, get_args
|
||||
import random
|
||||
|
||||
Suit: TypeAlias = Literal["\u2665", "\u2666", "\u2663", "\u2660"]
|
||||
Rank: TypeAlias = Literal[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
|
||||
@@ -34,8 +35,6 @@ class Deck:
|
||||
self.cards.append(Card(suit, rank))
|
||||
|
||||
def shuffle(self) -> None:
|
||||
import random
|
||||
|
||||
random.shuffle(self.cards)
|
||||
|
||||
def deal(self) -> Card:
|
||||
@@ -72,7 +71,7 @@ class Game:
|
||||
if 0 < bet <= self.money:
|
||||
|
||||
print(f"Your deal:\t {player_card}")
|
||||
if card_a.rank < player_card.rank < card_b.rank:
|
||||
if card_a.rank <= player_card.rank <= card_b.rank:
|
||||
print("You Win!")
|
||||
self.money += bet
|
||||
else:
|
||||
@@ -87,9 +86,6 @@ class Game:
|
||||
else:
|
||||
print("You would lose, so it was wise of you to chicken out!")
|
||||
|
||||
self.not_done = False
|
||||
break
|
||||
|
||||
if len(self.deck.cards) <= 3:
|
||||
print("You ran out of cards. Game over.")
|
||||
self.not_done = False
|
||||
@@ -129,4 +125,5 @@ def main() -> None:
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
random.seed()
|
||||
main()
|
||||
|
||||
8
25_Chief/rust/Cargo.toml
Normal file
8
25_Chief/rust/Cargo.toml
Normal file
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "rust"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
3
25_Chief/rust/README.md
Normal file
3
25_Chief/rust/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)
|
||||
|
||||
Conversion to [Rust](https://www.rust-lang.org/) by [Jadi](https://github.com/jadijadi)
|
||||
133
25_Chief/rust/src/main.rs
Normal file
133
25_Chief/rust/src/main.rs
Normal file
@@ -0,0 +1,133 @@
|
||||
use std::io;
|
||||
|
||||
fn print_center(text: String, width: usize) {
|
||||
let pad_size: usize = if width > text.len() {
|
||||
(width - text.len()) / 2
|
||||
} else {
|
||||
0
|
||||
};
|
||||
println!("{}{}", " ".repeat(pad_size), text);
|
||||
}
|
||||
|
||||
fn send_lightening() {
|
||||
println!(
|
||||
"YOU HAVE MADE ME MAD!!!
|
||||
THERE MUST BE A GREAT LIGHTNING BOLT!
|
||||
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X XXX
|
||||
X X
|
||||
XX X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
X X
|
||||
XX
|
||||
X
|
||||
*
|
||||
|
||||
#########################
|
||||
|
||||
I HOPE YOU BELIEVE ME NOW, FOR YOUR SAKE!!"
|
||||
);
|
||||
}
|
||||
|
||||
fn check_yes_answer() -> bool {
|
||||
// reads from input and return true if it starts with Y or y
|
||||
|
||||
let mut answer: String = String::new();
|
||||
io::stdin()
|
||||
.read_line(&mut answer)
|
||||
.expect("Error reading from stdin");
|
||||
|
||||
answer.to_uppercase().starts_with('Y')
|
||||
}
|
||||
|
||||
fn main() {
|
||||
const PAGE_WIDTH: usize = 64;
|
||||
print_center("CHIEF".to_string(), PAGE_WIDTH);
|
||||
print_center(
|
||||
"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY".to_string(),
|
||||
PAGE_WIDTH,
|
||||
);
|
||||
println!("\n\n\n");
|
||||
|
||||
println!("I AM CHIEF NUMBERS FREEK, THE GREAT INDIAN MATH GOD.");
|
||||
println!("ARE YOU READY TO TAKE THE TEST YOU CALLED ME OUT FOR?");
|
||||
|
||||
if !check_yes_answer() {
|
||||
println!("SHUT UP, PALE FACE WITH WISE TONGUE.");
|
||||
}
|
||||
|
||||
println!("TAKE A NUMBER AND ADD 3. DIVIDE THIS NUMBER BY 5 AND");
|
||||
println!("MULTIPLY BY 8. DIVIDE BY 5 AND ADD THE SAME. SUBTRACT 1.");
|
||||
println!(" WHAT DO YOU HAVE?");
|
||||
|
||||
// read a float number
|
||||
let mut answer: String = String::new();
|
||||
io::stdin()
|
||||
.read_line(&mut answer)
|
||||
.expect("Error reading from stdin");
|
||||
let guess: f32 = answer.trim().parse().expect("Input not a number");
|
||||
|
||||
let calculated_answer: f32 = (guess + 1.0 - 5.0) * 5.0 / 8.0 * 5.0 - 3.0;
|
||||
|
||||
println!("I BET YOUR NUMBER WAS {calculated_answer}. AM I RIGHT?");
|
||||
|
||||
if check_yes_answer() {
|
||||
println!("BYE!!!");
|
||||
} else {
|
||||
println!("WHAT WAS YOUR ORIGINAL NUMBER?");
|
||||
|
||||
// read a float number
|
||||
let mut answer: String = String::new();
|
||||
io::stdin()
|
||||
.read_line(&mut answer)
|
||||
.expect("Error reading from stdin");
|
||||
let claimed: f32 = answer.trim().parse().expect("Input not a number");
|
||||
|
||||
println!("SO YOU THINK YOU'RE SO SMART, EH?");
|
||||
println!("NOW WATCH.");
|
||||
println!(
|
||||
"{claimed} PLUS 3 EQUALS {}. THIS DIVIDED BY 5 EQUALS {};",
|
||||
claimed + 3.0,
|
||||
(claimed + 3.0) / 5.0
|
||||
);
|
||||
println!(
|
||||
"THIS TIMES 8 EQUALS {}. IF WE DIVIDE BY 5 AND ADD 5,",
|
||||
(claimed + 3.0) / 5.0 * 8.0
|
||||
);
|
||||
println!(
|
||||
"WE GET {} , WHICH, MINUS 1, EQUALS {}.",
|
||||
((claimed + 3.0) / 5.0 * 8.0 / 5.0) + 5.0,
|
||||
((claimed + 3.0) / 5.0 * 8.0 / 5.0) + 4.0
|
||||
);
|
||||
println!("NOW DO YOU BELIEVE ME?");
|
||||
|
||||
if check_yes_answer() {
|
||||
println!("BYE!!!");
|
||||
} else {
|
||||
send_lightening();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Porting notes:
|
||||
// In floating point arithmetics in "modern" languages we might see
|
||||
// unfamiliar situations such as 6.9999999 instead of 7 and such.
|
||||
// resolving this needs using specific mathematical libraries which
|
||||
// IMO is out of scope in these basic programs
|
||||
///////////////////////////////////////////////////////////////////
|
||||
@@ -28,7 +28,7 @@
|
||||
440 A(I,J)=1
|
||||
500 REM *** COMPUTER TRIES AN INTELLIGENT MOVE ***
|
||||
510 FOR E=-1 TO 1: FOR F=-1 TO 1: IF E+F-E*F=0 THEN 590
|
||||
540 X=I+F: Y=J+F: GOSUB 910
|
||||
540 X=I+E: Y=J+F: GOSUB 910
|
||||
570 IF L=0 THEN 590
|
||||
580 IF A(X,Y)=1 THEN 710
|
||||
590 NEXT F: NEXT E
|
||||
|
||||
8
58_Love/rust/Cargo.toml
Normal file
8
58_Love/rust/Cargo.toml
Normal file
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "rust"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
3
58_Love/rust/README.md
Normal file
3
58_Love/rust/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)
|
||||
|
||||
Conversion to [Rust](https://www.rust-lang.org/) by Jadi.
|
||||
92
58_Love/rust/src/main.rs
Normal file
92
58_Love/rust/src/main.rs
Normal file
@@ -0,0 +1,92 @@
|
||||
use std::io;
|
||||
|
||||
fn show_intro() {
|
||||
// Displays the intro text
|
||||
println!("\n Love");
|
||||
println!("Creative Computing Morristown, New Jersey");
|
||||
println!("\n\n");
|
||||
println!("A tribute to the great American artist, Robert Indiana.");
|
||||
println!("His great work will be reproduced with a message of");
|
||||
println!("your choice up to 60 characters. If you can't think of");
|
||||
println!("a message, simple type the word 'love'\n"); // (sic)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
enum PrintOrPass {
|
||||
Print,
|
||||
Pass,
|
||||
}
|
||||
|
||||
let data = [
|
||||
vec![60],
|
||||
vec![1, 12, 26, 9, 12],
|
||||
vec![3, 8, 24, 17, 8],
|
||||
vec![4, 6, 23, 21, 6],
|
||||
vec![4, 6, 22, 12, 5, 6, 5],
|
||||
vec![4, 6, 21, 11, 8, 6, 4],
|
||||
vec![4, 6, 21, 10, 10, 5, 4],
|
||||
vec![4, 6, 21, 9, 11, 5, 4],
|
||||
vec![4, 6, 21, 8, 11, 6, 4],
|
||||
vec![4, 6, 21, 7, 11, 7, 4],
|
||||
vec![4, 6, 21, 6, 11, 8, 4],
|
||||
vec![4, 6, 19, 1, 1, 5, 11, 9, 4],
|
||||
vec![4, 6, 19, 1, 1, 5, 10, 10, 4],
|
||||
vec![4, 6, 18, 2, 1, 6, 8, 11, 4],
|
||||
vec![4, 6, 17, 3, 1, 7, 5, 13, 4],
|
||||
vec![4, 6, 15, 5, 2, 23, 5],
|
||||
vec![1, 29, 5, 17, 8],
|
||||
vec![1, 29, 9, 9, 12],
|
||||
vec![1, 13, 5, 40, 1],
|
||||
vec![1, 13, 5, 40, 1],
|
||||
vec![4, 6, 13, 3, 10, 6, 12, 5, 1],
|
||||
vec![5, 6, 11, 3, 11, 6, 14, 3, 1],
|
||||
vec![5, 6, 11, 3, 11, 6, 15, 2, 1],
|
||||
vec![6, 6, 9, 3, 12, 6, 16, 1, 1],
|
||||
vec![6, 6, 9, 3, 12, 6, 7, 1, 10],
|
||||
vec![7, 6, 7, 3, 13, 6, 6, 2, 10],
|
||||
vec![7, 6, 7, 3, 13, 14, 10],
|
||||
vec![8, 6, 5, 3, 14, 6, 6, 2, 10],
|
||||
vec![8, 6, 5, 3, 14, 6, 7, 1, 10],
|
||||
vec![9, 6, 3, 3, 15, 6, 16, 1, 1],
|
||||
vec![9, 6, 3, 3, 15, 6, 15, 2, 1],
|
||||
vec![10, 6, 1, 3, 16, 6, 14, 3, 1],
|
||||
vec![10, 10, 16, 6, 12, 5, 1],
|
||||
vec![11, 8, 13, 27, 1],
|
||||
vec![11, 8, 13, 27, 1],
|
||||
vec![60],
|
||||
];
|
||||
|
||||
const ROW_LEN: usize = 60;
|
||||
show_intro();
|
||||
|
||||
let mut input: String = String::new();
|
||||
io::stdin().read_line(&mut input).expect("No valid input");
|
||||
let input = if input.len() == 1 {
|
||||
"LOVE"
|
||||
} else {
|
||||
input.trim()
|
||||
};
|
||||
// repeat the answer to fill the whole line, we will show chunks of this when needed
|
||||
let input = input.repeat(ROW_LEN / (input.len()) + 1);
|
||||
|
||||
// Now lets display the Love
|
||||
print!("{}", "\n".repeat(9));
|
||||
for row in data {
|
||||
let mut print_or_pass = PrintOrPass::Print;
|
||||
let mut current_start = 0;
|
||||
for count in row {
|
||||
match print_or_pass {
|
||||
PrintOrPass::Print => {
|
||||
print!("{}", &input[current_start..count + current_start]);
|
||||
print_or_pass = PrintOrPass::Pass;
|
||||
}
|
||||
PrintOrPass::Pass => {
|
||||
print!("{}", " ".repeat(count));
|
||||
print_or_pass = PrintOrPass::Print;
|
||||
}
|
||||
}
|
||||
current_start += count;
|
||||
}
|
||||
println!();
|
||||
}
|
||||
}
|
||||
@@ -335,7 +335,6 @@ class Game:
|
||||
" THE USS ENTERPRISE --- NCC-1701\n"
|
||||
"\n\n\n\n"
|
||||
)
|
||||
self.world = World()
|
||||
world = self.world
|
||||
print(
|
||||
"YOUR ORDERS ARE AS FOLLOWS:\n"
|
||||
|
||||
9
85_Synonym/rust/Cargo.toml
Normal file
9
85_Synonym/rust/Cargo.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "rust"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
rand = "0.8.5"
|
||||
3
85_Synonym/rust/README.md
Normal file
3
85_Synonym/rust/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)
|
||||
|
||||
Conversion to [Rust](https://www.rust-lang.org/) by [Jadi](https://github.com/jadijadi)
|
||||
102
85_Synonym/rust/src/main.rs
Normal file
102
85_Synonym/rust/src/main.rs
Normal file
@@ -0,0 +1,102 @@
|
||||
use rand::seq::SliceRandom;
|
||||
use rand::thread_rng;
|
||||
use rand::Rng;
|
||||
use std::io::{self, Write};
|
||||
|
||||
fn print_centered(text: &str, width: usize) {
|
||||
let pad_size: usize = if width > text.len() {
|
||||
(width - text.len()) / 2
|
||||
} else {
|
||||
0
|
||||
};
|
||||
println!("{}{}", " ".repeat(pad_size), text);
|
||||
}
|
||||
|
||||
fn print_instructions() {
|
||||
println!("A SYNONYM OF A WORD MEANS ANOTHER WORD IN THE ENGLISH");
|
||||
println!("LANGUAGE WHICH HAS THE SAME OR VERY NEARLY THE SAME MEANING.");
|
||||
println!("I CHOOSE A WORD -- YOU TYPE A SYNONYM.");
|
||||
println!("IF YOU CAN'T THINK OF A SYNONYM, TYPE THE WORD 'HELP'");
|
||||
println!("AND I WILL TELL YOU A SYNONYM.\n");
|
||||
}
|
||||
|
||||
fn ask_question(mut this_question: Vec<&str>) {
|
||||
let right_words = ["RIGHT", "CORRECT", "FINE", "GOOD!", "CHECK"];
|
||||
|
||||
// use the first one in the main question
|
||||
let base_word = this_question.remove(0);
|
||||
|
||||
loop {
|
||||
print!(" WHAT IS A SYNONYM OF {base_word}? ");
|
||||
io::stdout().flush().unwrap();
|
||||
let mut answer: String = String::new();
|
||||
io::stdin()
|
||||
.read_line(&mut answer)
|
||||
.expect("Failed to read the line");
|
||||
let answer = answer.trim();
|
||||
if answer == "HELP" {
|
||||
// remove one random from the answers and show it
|
||||
let random_index = thread_rng().gen_range(0..this_question.len());
|
||||
println!(
|
||||
"**** A SYNONYM OF {base_word} IS {}.",
|
||||
this_question.remove(random_index)
|
||||
);
|
||||
} else if this_question.contains(&answer) {
|
||||
println!("{}", right_words.choose(&mut rand::thread_rng()).unwrap());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
const PAGE_WIDTH: usize = 64;
|
||||
|
||||
let mut synonyms = vec![
|
||||
vec!["FIRST", "START", "BEGINNING", "ONSET", "INITIAL"],
|
||||
vec!["SIMILAR", "ALIKE", "SAME", "LIKE", "RESEMBLING"],
|
||||
vec!["MODEL", "PATTERN", "PROTOTYPE", "STANDARD", "CRITERION"],
|
||||
vec!["SMALL", "INSIGNIFICANT", "LITTLE", "TINY", "MINUTE"],
|
||||
vec!["STOP", "HALT", "STAY", "ARREST", "CHECK", "STANDSTILL"],
|
||||
vec![
|
||||
"HOUSE",
|
||||
"DWELLING",
|
||||
"RESIDENCE",
|
||||
"DOMICILE",
|
||||
"LODGING",
|
||||
"HABITATION",
|
||||
],
|
||||
vec!["PIT", "HOLE", "HOLLOW", "WELL", "GULF", "CHASM", "ABYSS"],
|
||||
vec!["PUSH", "SHOVE", "THRUST", "PROD", "POKE", "BUTT", "PRESS"],
|
||||
vec!["RED", "ROUGE", "SCARLET", "CRIMSON", "FLAME", "RUBY"],
|
||||
vec![
|
||||
"PAIN",
|
||||
"SUFFERING",
|
||||
"HURT",
|
||||
"MISERY",
|
||||
"DISTRESS",
|
||||
"ACHE",
|
||||
"DISCOMFORT",
|
||||
],
|
||||
];
|
||||
|
||||
synonyms.shuffle(&mut thread_rng());
|
||||
|
||||
print_centered("SYNONYM", PAGE_WIDTH);
|
||||
print_centered("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY", PAGE_WIDTH);
|
||||
println!("\n\n\n");
|
||||
|
||||
print_instructions();
|
||||
|
||||
for this_question in synonyms {
|
||||
ask_question(this_question)
|
||||
}
|
||||
println!("SYNONYM DRILL COMPLETED.");
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
// Poring Notes
|
||||
// Poring Note: The "HELP" function .removes a variable
|
||||
// from lists and shows it. This can lead to errors when
|
||||
// the list becomes empty. But since the same issue happens
|
||||
// on the original BASIC program, kept it intact
|
||||
////////////////////////////////////////////////////////////
|
||||
Reference in New Issue
Block a user