Merge pull request #878 from unquietwiki/main

Two more Nim ports + minor cleanup
This commit is contained in:
Jeff Atwood
2023-08-05 07:49:43 -07:00
committed by GitHub
5 changed files with 199 additions and 90 deletions

View File

@@ -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: ")
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("")
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,15 @@ 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")
echo "SORRY, YOU LOSE"
stash -= bet
echo("SORRY, FRIEND, BUT YOU BLEW YOUR WAD.");
echo("")
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!"

View File

@@ -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."

View 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"

View File

@@ -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")

View 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()