From 2c2b1996edde8f799d3a123e2716a073c417acf5 Mon Sep 17 00:00:00 2001 From: JoeStrout Date: Tue, 1 Aug 2023 08:19:51 -0700 Subject: [PATCH] Added MiniScript version of 34_Digits. --- .../34_Digits/MiniScript/README.md | 16 +++ .../34_Digits/MiniScript/digits.ms | 99 +++++++++++++++++++ 34_Digits/README.md | 3 +- 3 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 00_Alternate_Languages/34_Digits/MiniScript/README.md create mode 100644 00_Alternate_Languages/34_Digits/MiniScript/digits.ms diff --git a/00_Alternate_Languages/34_Digits/MiniScript/README.md b/00_Alternate_Languages/34_Digits/MiniScript/README.md new file mode 100644 index 000000000..290b4b7c8 --- /dev/null +++ b/00_Alternate_Languages/34_Digits/MiniScript/README.md @@ -0,0 +1,16 @@ +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 digits.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 BASIC program. Then, at the Mini Micro command prompt, enter: + + load "digits" + run diff --git a/00_Alternate_Languages/34_Digits/MiniScript/digits.ms b/00_Alternate_Languages/34_Digits/MiniScript/digits.ms new file mode 100644 index 000000000..2abde907d --- /dev/null +++ b/00_Alternate_Languages/34_Digits/MiniScript/digits.ms @@ -0,0 +1,99 @@ +import "listUtil" + +print " "*33 + "Digits" +print " "*15 + "Creative Computing Morristown, New Jersey" +print; print; print + +printInColumns = function(a, b, c, d) + print (a+" "*16)[:16] + (b+" "*16)[:16] + (c+" "*16)[:16] + (d+" "*16)[:16] +end function + +print "This is a game of guessing." +print "For instructions, type '1', else type '0'" +if input != "0" then + print + print "Please take a piece of paper and write down" + print "the digits '0', '1', or '2' thirty times at random." + print "Arrange them in three lines of ten digits each." + print "I will ask for then ten at a time." + print "I will always guess them first and then look at your" + print "next number to see if i was right. By pure luck," + print "I ought to be right ten times. But i hope to do better" + print "than that *****" + print; print +end if + +a = 0; b = 1; c = 3 + +while true + m = list.init2d(27, 3, 1) + k = list.init2d(3, 3, 9) + l = list.init2d(9, 3, 3) + l[0][0] = 2; l[4][1] = 2; l[8][2] = 2 + z=26; z1=8; z2=2 + qtyRight = 0 + guess = 0 + for t in range(1,3) + while true + print + print "Ten numbers, please"; + n = input.replace(",", " ").replace(" ", "").split + if n.len != 10 then continue + valid = true + for i in n.indexes + n[i] = n[i].val + if n[i] < 0 or n[i] > 2 then + print "Only use the digits '0', '1', or '2'." + print "Let's try again." + valid = false + break + end if + end for + if valid then break + end while + + print; printInColumns "My guess","Your no.","Result","No. right"; print + for u in range(0, 9) + yourNum = n[u]; s=0 + for j in range(0,2) + s1 = a*k[z2][j] + b*l[z1][j] + c*m[z][j] + if s > s1 then continue + if s < s1 or rnd >= 0.5 then + s = s1; guess = j + end if + end for + if guess == yourNum then + outcome = " right" + qtyRight += 1 + else + outcome = " wrong" + end if + printInColumns " "+guess, " " + yourNum, outcome, qtyRight + + m[z][yourNum] += 1 + l[z1][yourNum] += 1 + k[z2][yourNum] += 1 + z -= floor(z/9)*9 + z = 3*z + yourNum + z1 = z - floor(z/9)*9 + z2 = yourNum + end for + end for + + print + if qtyRight > 10 then + print "I guessed more than 1/3 of your numbers." + print "I win." + print char(7) * 10 + else if qtyRight < 10 then + print "I guessed less than 1/3 of your numbers." + print "You beat me. Congratulations *****" + else + print "I guessed exactly 1/3 of your numbers." + print "It's a tie game." + end if + print "Do you want to try again (1 for yes, 0 for no)"; + if input != "1" then break +end while + +print; print "Thanks for the game." diff --git a/34_Digits/README.md b/34_Digits/README.md index 569122c8e..6e82efda5 100644 --- a/34_Digits/README.md +++ b/34_Digits/README.md @@ -18,4 +18,5 @@ http://www.vintage-basic.net/games.html #### Porting Notes -(please note any difficulties or challenges in porting here) +- The program contains a lot of mysterious and seemingly arbitrary constants. It's not clear there is any logic or rationality behind it. +- The key equation involved in the guess (line 700) involves a factor of `A`, but `A` is always 0, making that term meaningless. As a result, all the work to build and update array K and value Z2 appear to be meaningless, too.