Basics of Scala

Descripción del contenido de la página

Conversión de antiguos programas de BASIC a Scala para aprender los rudimentos de este lenguaje.

Etiquetas:

3D Plot

/*
3D Plot

Original version in BASIC:
  Creative Computing (Morristown, New Jersey, USA), ca. 1980.

This version in Scala:
  Copyright (c) 2023, Marcos Cruz (programandala.net)
  SPDX-License-Identifier: Fair

Written in 2023-08, 2023-09.

Last modified: 20231103T2352+0100.
*/

def home() =
  print("\u001B[H")

def clear() =
  print("\u001B[2J")
  home()

def showCredits() =
  println("3D Plot\n")
  println("Original version in BASIC:")
  println("    Creative computing (Morristown, New Jersey, USA), ca. 1980.\n")
  println("This version in Scala:")
  println("    Copyright (c) 2023, Marcos Cruz (programandala.net)")
  println("    SPDX-License-Identifier: Fair\n")
  println("Press any key to start the program.")
  io.StdIn.readLine("")


def a(z: Double): Double =
  30 * math.exp(-z * z / 100)

def draw() =

  val width = 56
  val space = ' '
  val dot = '*'
  var line = new Array[Char](width)

  var l = 0
  var y1 = 0
  var z = 0

  var x = -30.0
  while x <= 30 do
    line = Array.fill(width){space}
    l = 0
    y1 = 5 * (math.sqrt(900 - x * x) / 5).toInt
    for y <- y1 to -y1 by -5 do
      z = (25 + a(math.sqrt(x * x + (y * y)))-0.7 * y).toInt
      if z > l then
        l = z
        line(z) = dot
    for pos <- 0 until width do
      print(line(pos))
    println()
    x += 1.5

@main def main() =
  clear()
  showCredits()
  clear()
  draw()

Bagels

/*
Bagels

Original version in BASIC:
  D. Resek, P. Rowe, 1978.
  Creative Computing (Morristown, New Jersey, USA), 1978.

This version in Scala:
  Copyright (c) 2023, Marcos Cruz (programandala.net)
  SPDX-License-Identifier: Fair

Written in 2023-09/10, 2023-11.

Last modified: 20231104T0112+0100.
*/

// Move the cursor to the home position.
def home() =
  print("\u001B[H")

// Clear the screen and move the cursor to the home position.
def clear() =
  print("\u001B[2J")
  home()

// Print the given prompt and wait until the user enters an empty string.
def pressEnter(prompt : String) =
  var ok = false
  while !ok do
    ok = io.StdIn.readLine(prompt) == ""
  end while

def printTitle() =
  clear()
  println("Bagels")
  println("Number guessing game\n")

// Clear the screen, display the credits and wait for a keypress.
def printCredits() =
  printTitle()
  println("Original source unknown but suspected to be:")
  println("    Lawrence Hall of Science, U.C. Berkely.\n")
  println("Original version in BASIC:")
  println("    D. Resek, P. Rowe, 1978.")
  println("    Creative computing (Morristown, New Jersey, USA), 1978.\n")
  println("This version in Scala:")
  println("    Copyright (c) 2023, Marcos Cruz (programandala.net)")
  println("    SPDX-License-Identifier: Fair\n")
  pressEnter("Press Enter to read the instructions. ")

// Clear the screen, print the instructions and wait for a keypress.
def printInstructions() =
  printTitle()
  println("I am thinking of a three-digit number that has no two digits the same.")
  println("Try to guess it and I will give you clues as follows:\n")
  println("   PICO   - one digit correct but in the wrong position")
  println("   FERMI  - one digit correct and in the right position")
  println("   BAGELS - no digits correct")
  pressEnter("\nPress Enter to start. ")

val Digits = 3

// Return three random digits.
def random() : Array[Int]  =
  val randomDigit = new Array[Int](Digits)
  var digit = 0
  for i <- 0 until Digits do
    var validDigit = false
    while !validDigit do
      digit = util.Random.nextInt(10)
      validDigit = !randomDigit.contains(digit)
    end while
    randomDigit(i) = digit
  end for
  randomDigit

// Prints the given prompt, waits until the user enters a valid integer and
// returns it.
def getNumber(prompt : String) : Int =
  var number = 0
  var ok = false
  while !ok do
    try
      number = io.StdIn.readLine(prompt).trim.toInt
      ok = true
    catch
    case _ => println("Invalid number.")
  end while
  number

// Prompts the user to enter a command and returns it trimmed.
def getString(prompt : String = "> ") : String =
  io.StdIn.readLine(prompt).trim

// Return `true` if any of the elements of the given string is repeated;
// otherwise return `false`.
def isAnyRepeated(s: String) : Boolean =
  s.size != s.toSet.size

def containsOnlyDigits(s: String) : Boolean =
  var ok = true
  s.foreach(char => ok = ok && char.toChar.isDigit)
  ok

// Print the given prompt and get a three-digit number from the user.
def input(prompt : String) : Array[Int]  =
  val ASCII_0 = 48
  val userDigit = new Array[Int](Digits)
  var inputString = ""
  var done = false
  while !done do
    inputString = getString(prompt)
    if inputString.size != Digits then
      println(s"Remember it's a ${Digits}-digit number.")
    else
      if containsOnlyDigits(inputString) then
        if isAnyRepeated(inputString) then
          println("Remember my number has no two digits the same.")
        else
          done = true
        end if
      else
        println("What?")
      end if
    end if
  end while
  for i <- 0 until Digits do
    userDigit(i) = inputString(i).asDigit
  end for
  userDigit

// Return `true` if the given string is "yes" or a synonym.
def isYes(answer : String) : Boolean  =
  Array("ok", "yeah", "yes", "y").contains(answer)

// Return `true` if the given string is "no" or a synonym.
def isNo(answer : String) : Boolean  =
  Array("no", "nope", "n").contains(answer)

// Print the given prompt, wait until the user enters a valid yes/no
// string, and return `true` for "yes" or `false` for "no".
def yes(prompt : String) : Boolean  =
  var answer = ""
  while !(isYes(answer) || isNo(answer)) do
    answer = getString(prompt)
  isYes(answer)

// Init and run the game loop.
def play() =
  val TRIES = 20
  var score = 0
  var playing = true
  var userNumber = new Array[Int](Digits)
  while playing do
    clear()
    var computerNumber = random()
    println("O.K.  I have a number in mind.")
    var fermi = 0
    var pico  = 0
    var guess = 1 // counter
    while fermi != Digits && guess <= TRIES do
      userNumber = input(s"Guess #${guess}: ")
      fermi = 0
      pico = 0
      for i <- 0 until Digits do
        for j <- 0 until Digits do
          if computerNumber(i) == userNumber(j) then
            if i == j then
              fermi += 1
            else
              pico += 1
            end if
          end if
        end for
      end for
      print("PICO ".repeat(pico))
      print("FERMI ".repeat(fermi))
      if pico + fermi == 0 then
        print("BAGELS")
      end if
      println()
      guess += 1
    end while
    if fermi == Digits then
      println("You got it!!!")
      score += 1
    else
      println("Oh well.")
      print(s"That's $TRIES guesses.  My number was ")
      computerNumber.foreach(print)
      println(".")
    end if
    if !yes("Play again? ") then
      playing = false
    end if
  end while // play loop
  if score != 0 then
    println(s"A ${score}-point bagels, buff!!")
  end if
  println("Hope you had fun.  Bye.")

@main def main() =
  printCredits()
  printInstructions()
  play()

Bunny

/*
Bunny

Original version in BASIC:
  Creative Computing (Morristown, New Jersey, USA), 1978.

This version in Scala:
  Copyright (c) 2023, Marcos Cruz (programandala.net)
  SPDX-License-Identifier: Fair

Written in 2023-08, 2023-09.

Last modified: 20231209T2009+0100.
*/

// Move the cursor to the top left position of the terminal.
def home() =
  print("\u001B[H")

// Clear the terminal and move the cursor to the top left position.
def clearScreen() =
  print("\u001B[2J")
  home()

// Clear the screen, print the credits and wait for the Enter key.
def printCredits() =
  clearScreen()
  println("Bunny\n")
  println("Original version in BASIC:")
  println("    Creative Computing (Morristown, New Jersey, USA), 1978.\n")
  println("This version in Scala:")
  println("    Copyright (c) 2023, Marcos Cruz (programandala.net)")
  println("    SPDX-License-Identifier: Fair\n")
  println("Press Enter to start the program.")
  io.StdIn.readLine("")

val Width = 53
var line = new Array[Int](Width) // buffer

// Clear the line buffer with spaces.
def clearLine() =
  var column = 0
  for column <- 0 until Width do
    line(column) = ' '.toInt

val letter = Array('B', 'U', 'N', 'N', 'Y')
var letters = letter.length

val EOL : Int = -1 // end of line identifier
var data : Array[Int] = Array(
  1, 2, EOL, 0, 2, 45, 50, EOL, 0, 5, 43, 52, EOL, 0, 7, 41, 52, EOL,
  1, 9, 37, 50, EOL, 2, 11, 36, 50, EOL, 3, 13, 34, 49, EOL, 4, 14,
  32, 48, EOL, 5, 15, 31, 47, EOL, 6, 16, 30, 45, EOL, 7, 17, 29, 44,
  EOL, 8, 19, 28, 43, EOL, 9, 20, 27, 41, EOL, 10, 21, 26, 40, EOL,
  11, 22, 25, 38, EOL, 12, 22, 24, 36, EOL, 13, 34, EOL, 14, 33, EOL,
  15, 31, EOL, 17, 29, EOL, 18, 27, EOL, 19, 26, EOL, 16, 28, EOL,
  13, 30, EOL, 11, 31, EOL, 10, 32, EOL, 8, 33, EOL, 7, 34, EOL, 6,
  13, 16, 34, EOL, 5, 12, 16, 35, EOL, 4, 12, 16, 35, EOL, 3, 12, 15,
  35, EOL, 2, 35, EOL, 1, 35, EOL, 2, 34, EOL, 3, 34, EOL, 4, 33,
  EOL, 6, 33, EOL, 10, 32, 34, 34, EOL, 14, 17, 19, 25, 28, 31, 35,
  35, EOL, 15, 19, 23, 30, 36, 36, EOL, 14, 18, 21, 21, 24, 30, 37, 37,
  EOL, 13, 18, 23, 29, 33, 38, EOL, 12, 29, 31, 33, EOL, 11, 13, 17,
  17, 19, 19, 22, 22, 24, 31, EOL, 10, 11, 17, 18, 22, 22, 24, 24, 29,
  29, EOL, 22, 23, 26, 29, EOL, 27, 29, EOL, 28, 29, EOL)

def printLine() =
  for i <- line do
    print(i.toChar)
  println()

var dataIndex = 0

def datum() =
  dataIndex += 1
  data(dataIndex - 1)

// Draw the graphic out of `data` and `letter`.
def draw() =
  clearScreen()
  clearLine()
  while dataIndex < data.length do
    val firstColumn = datum()
    if firstColumn == EOL then
      printLine()
      clearLine()
    else
      val lastColumn = datum()
      for column <- firstColumn to lastColumn do
        line(column) = letter(column % letters).toInt

@main def main() =
  printCredits()
  draw()

Diamond

/*
Diamond

Original version in BASIC:
  Example included in Vintage BASIC 1.0.3.
  http://www.vintage-basic.net

This version in Scala:
  Copyright (c) 2023, Marcos Cruz (programandala.net)
  SPDX-License-Identifier: Fair

Written on 2023-08-25.

Last modified: 20231103T2352+0100.
*/

val lines = 17

@main def diamond() =

  var i = 1
  var j = 1

  while i <= lines / 2 + 1 do
    j = 1
    while j <= (lines + 1) / 2 - i + 1 do
      print(" ")
      j += 1
    j = 1
    while j <= i * 2 - 1 do
      print("*")
      j += 1
    println()
    i += 1

  i = 1
  while i <= lines / 2 do
    j = 1
    while j <= i + 1 do
      print(" ")
      j += 1
    j = 1
    while j <= ((lines + 1) / 2 - i) * 2 - 1 do
      print("*")
      j += 1
    println()
    i += 1

Math

/*
Math

Original version in BASIC:
  Example included in Vintage BASIC 1.0.3.
  http://www.vintage-basic.net

This version in Scala:
  Copyright (c) 2023, Marcos Cruz (programandala.net)
  SPDX-License-Identifier: Fair

Written on 2023-08-26.

Last modified: 20231103T2352+0100.
*/

@main def main() =

  print("Enter a number: ")
  var n : Float =
  try
    io.StdIn.readFloat()
  catch
    case e: NumberFormatException => 0.0

  print(s"ABS($n) = math.abs($n) = "); println(math.abs(n))
  print(s"ATN($n) = math.atan($n) = "); println(math.atan(n))
  print(s"COS($n) = math.cos($n) = "); println(math.cos(n))
  print(s"EXP($n) = math.exp($n) = "); println(math.exp(n))
  print(s"INT($n) = $n.toInt = "); println(n.toInt)
  print(s"LOG($n) = math.log($n) = "); println(math.log(n))
  print(s"SGN($n) = math.signum($n) = "); println(math.signum(n))
  print(s"SQR($n) = math.sqrt($n) = "); println(math.sqrt(n))
  print(s"TAN($n) = math.tan($n) = "); println(math.tan(n))

Mugwump

// Mugwump
//
// Original version in BASIC:
//   Written by Bud Valenti's students of Project SOLO (Pittsburg, Pennsylvania, USA).
//   Slightly modified by Bob Albrecht of People's Computer Company.
//   Published by Creative Computing (Morristown, New Jersey, USA), 1978.
//   - https://www.atariarchives.org/basicgames/showpage.php?page=114
//   - http://vintage-basic.net/games.html
//
// This version in Scala:
//   Copyright (c) 2023, Marcos Cruz (programandala.net)
//   SPDX-License-Identifier: Fair
//
// Written in 2023-09, 2023-11.
//
// Last modified: 20231104T0113+0100.

val GridSize = 10
val Turns = 10
val Mugwumps = 4

class Mugwump :
  var hidden : Boolean = true
  var x : Int = 0
  var y : Int = 0
  def reveal() =
    hidden = false
  def init() =
    hidden = true
    x = util.Random.nextInt(GridSize)
    y = util.Random.nextInt(GridSize)

// Moves the cursor to the top left position of the terminal.
def home() =
  print("\u001B[H")

// Clears the terminal and moves the cursor to the top left position.
def clear() =
  print("\u001B[2J")
  home()

// Prompts the user to enter a command and returns it trimmed.
def command(prompt : String = "> ") : String =
  io.StdIn.readLine(prompt).trim

// Prints the given prompt, waits until the user enters a valid integer and
// returns it.
def getNumber(prompt : String) : Int =
  var number = 0
  var ok = false
  while !ok do
    try
      number = command(prompt).toInt
      ok = true
    catch
    case _ => println("Invalid number.")
  number

// Prints the given prompt and waits until the user enters an empty string.
def pressEnter(prompt : String) =
  var ok = false
  while !ok do
    ok = io.StdIn.readLine(prompt) == ""

// Returns `true` if the given string is "yes" or a synonym.
def isYes(answer : String) : Boolean =
  answer.toLowerCase match
    case "ok" => true
    case "yeah" => true
    case "yes" => true
    case "y" => true
    case _ => false

// Returns `true` if the given string is "no" or a synonym.
def isNo(answer : String) : Boolean =
  answer.toLowerCase match
    case "no" => true
    case "nope" => true
    case "n" => true
    case _ => false

// Prints the given prompt, waits until the user enters a valid yes/no
// string, and returns `true` for "yes" or `false` for "no".
def yes(prompt : String) : Boolean =
  var answer : String = ""
  while !(isYes(answer) || isNo(answer)) do
    answer = command(prompt)
  isYes(answer)

// Clears the screen, prints the credits and asks the user to press enter.
def printCredits() =
  clear()
  println("Mugwump\n")
  println("Original version in BASIC:")
  println("    Written by Bud Valenti's students of Project SOLO (Pittsburg, Pennsylvania, USA).")
  println("    Slightly modified by Bob Albrecht of People's Computer Company.")
  println("    Published by Creative Computing (Morristown, New Jersey, USA), 1978.")
  println("    - https://www.atariarchives.org/basicgames/showpage.php?page=114")
  println("    - http://vintage-basic.net/games.html\n")
  println("This version in Scala:")
  println("    Copyright (c) 2023, Marcos Cruz (programandala.net)")
  println("    SPDX-License-Identifier: Fair\n")
  pressEnter("Press Enter to read the instructions. ")

// Clears the screen, prints the instructions and asks the user to press enter.
def printInstructions() =
  clear()
  println("Mugwump\n")
  println("The object of this game is to find four mugwumps")
  println("hidden on a 10 by 10 grid.  Homebase is position 0,0.")
  println("Any guess you make must be two numbers with each")
  println("number between 0 and 9, inclusive.  First number")
  println("is distance to right of homebase and second number")
  println("is distance above homebase.\n")
  print(s"You get ${Turns} tries.  After each try, you will see\n")
  println("how far you are from each mugwump.\n")
  pressEnter("Press Enter to start. ")

// Prints the given prompt, then waits until the user enters a valid coord and
// returns it.
def getCoord(prompt : String) : Int =
  var coord : Int = 0
  var right = false
  while !right do
    coord = getNumber(prompt)
    if coord < 0 || coord >= GridSize then
      print(s"Invalid value ${coord}: not in range [0, ${GridSize - 1}].\n")
    else
      right = true
  coord

// Returns `true` if the given mugwump is hidden in the given coords.
def isHere(m : Mugwump, x : Int, y : Int) : Boolean =
  m.hidden && m.x == x && m.y == y

// Returns the distance between the given mugwump and the given coords.
def distance(m : Mugwump, x : Int, y : Int) : Int =
  math.sqrt(math.pow((m.x - x), 2) + math.pow((m.y - y), 2)).toInt

// If the given number is greater than 1, this method returns a plural ending
// (default: "s"); otherwise it returns a singular ending (default: an empty
// string).
def plural(n : Int, plural : String = "s", singular : String = "") : String =
  if n > 1 then plural else singular

// Prints the mugwumps found in the given coordinates and returns the count.
def foundAt(mugwump : Array[Mugwump], x : Int, y : Int) : Int =
  var found : Int = 0
  for m <- 0 until Mugwumps do
    if isHere(mugwump(m), x, y) then
      mugwump(m).reveal()
      found += 1
      print(s"You have found mugwump ${m}!\n")
    end if
  end for
  found

// Runs the game.
def play() =

  var found : Int = 0 // counter
  var turn : Int = 0 // counter
  var m : Int = 0
  var x : Int = 0
  var y : Int = 0
  var gameOver = false

  val mugwump = new Array[Mugwump](Mugwumps)
  for m <- 0 until Mugwumps do
    mugwump(m) = new Mugwump

  while !gameOver do // game

    clear()

    for m <- 0 until Mugwumps do
      mugwump(m).init()

    found = 0
    turn = 0
    while turn < Turns && found < Mugwumps do
      turn += 1
      print(s"Turn number ${turn}\n\n")
      print(s"What is your guess (in range [0, ${GridSize - 1}])?\n")
      x = getCoord("Distance right of homebase (x-axis): ")
      y = getCoord("Distance above homebase (y-axis): ")
      print(s"\nYour guess is ($x, $y).\n")
      found += foundAt(mugwump, x, y)
      if found < Mugwumps then
        for m <- 0 until Mugwumps do
          if mugwump(m).hidden then
            print(s"You are ${distance(mugwump(m), x, y)} units from mugwump ${m}.\n")
          end if
        end for
        println("")
      end if
    end while // turns

    if found == Mugwumps then
      print(s"\nYou got them all in ${turn} turn${plural(turn)}!\n\n")
      println("That was fun! let's play again…")
      println("Four more mugwumps are now in hiding.")
    else
      print(s"\nSorry, that's ${Turns} tr${plural(Turns, "ies", "y")}.\n\n")
      println("Here is where they're hiding:")
      for m <- 0 until Mugwumps do
        if mugwump(m).hidden then
          print(s"Mugwump $m is at (${mugwump(m).x}, ${mugwump(m).y}).\n")
        end if
      end for
    end if

    println("")
    gameOver = !yes("Do you want to play again? ")

  end while // game

@main def main() =
  printCredits()
  printInstructions()
  play()

Russian Roulette

/*
Russian Roulette

Original version in BASIC:
  Creative Computing (Morristown, New Jersey, USA), ca. 1980.

This version in Scala:
  Copyright (c) 2023, Marcos Cruz (programandala.net)
  SPDX-License-Identifier: Fair

Written in 2023-09.

Last modified: 20231103T2352+0100.
*/

// Move the cursor to the top left position of the terminal.
def home() =
  print("\u001B[H")

// Clear the terminal and move the cursor to the top left position.
def clear() =
  print("\u001B[2J")
  home()

// Prompts the user to enter a command and returns it trimmed.
def command(prompt : String = "> ") : String =
  io.StdIn.readLine(prompt).trim

// Prints the given prompt and waits until the user enters an empty string.
def pressEnter(prompt : String) =
  var ok = false
  while !ok do
    ok = io.StdIn.readLine(prompt) == ""

def pressEnterToStart() =
  pressEnter("Press Enter to start. ")

def printCredits() =
  clear()
  println("Russian Roulette\n")
  println("Original version in BASIC:")
  println("    Creative Computing (Morristown, New Jersey, USA), ca. 1980.\n")
  println("This version in Scala:")
  println("    Copyright (c) 2023, Marcos Cruz (programandala.net)")
  println("    SPDX-License-Identifier: Fair\n")
  pressEnterToStart()

def printCommands() =
  println("Type 'f' to spin chamber and pull trigger.")
  println("Type 'g' to give up, and play again.")
  println("Type 'q' to quit.")

def printInstructions() =
  clear()
  println("Here is a revolver.")
  printCommands()
  println()

def play() =
  var gameOver = false
  while !gameOver do // game loop
    printInstructions()
    var times = 0
    var playing = true
    while playing do // play loop
       command() match
          case "f"  => // fire
            if util.Random.nextInt(100) > 83 then
              println("Bang! You're dead!")
              println("Condolences will be sent to your relatives.")
              playing = false
            else
              times += 1
              if times > 10 then
                println("You win!")
                println("Let someone else blow his brains out.")
                playing = false
              else
                println("Click.")
          case "g"  => // give up
            println("Chicken!")
            playing = false
          case "q"  => // quit
            playing = false
            gameOver = true
          case _ =>
            println("Wrong action.")
            printCommands()
    end while // play loop
    pressEnterToStart()
  end while // game loop

@main def main() =
  printCredits()
  play()
  println("Bye!")

Sine Wave

/*
Sine Wave

Original version in BASIC:
  Creative Computing (Morristown, New Jersey, USA), ca. 1980.

This version in Scala:
  Copyright (c) 2023, Marcos Cruz (programandala.net)
  SPDX-License-Identifier: Fair

Written in 2023-08, 2023-09.

Last modified: 20231103T2352+0100.
*/

def home() =
  print("\u001B[H")

def clear() =
  print("\u001B[2J")
  home()

val order = Array("first", "second")

var word = Array("", "")

def getWords() =
  clear()
  for w <- Seq(0, 1) do
    word(w) = io.StdIn.readLine(s"Enter the ${order(w)} word: ")

def showCredits() =
  clear()
  println("Sine Wave\n")
  println("Original version in BASIC:")
  println("    Creative Computing (Morristown, New Jersey, USA), ca. 1980.\n")
  println("This version in Scala:")
  println("    Copyright (c) 2023, Marcos Cruz (programandala.net)")
  println("    SPDX-License-Identifier: Fair\n")
  println("Press Enter to start the program.")
  io.StdIn.readLine("")

def draw() =
  clear()
  var even = true
  var angle = 0.0
  while angle <= 40 do
    print(" " * (26 + 25 * math.sin(angle)).toInt)
    println(word(if even then 0 else 1))
    even = !even
    angle += 0.25

@main def main() =
  showCredits()
  getWords()
  draw()

Strings

// Strings
//
// Original version in BASIC:
//   Example included in Vintage BASIC 1.0.3.
//   http://www.vintage-basic.net
//
// This version in Scala:
//   Copyright (c) 2023, Marcos Cruz (programandala.net)
//   SPDX-License-Identifier: Fair
//
// Written in 2023-09-28/29.
//
// Last modified: 20231209T2008+0100.

// Prompts the user to enter a command and returns it trimmed.
def readString(prompt : String = "") : String =
  scala.io.StdIn.readLine(prompt).trim

// Prompts the user to enter an integer and returns it.
def readInteger(prompt : String = "") : Int =
  var integer = 0
  var ok = false
  while !ok do
    try
      integer = readString(prompt).toInt
      ok = true
    catch
    case _ => println("That wasn't a valid integer.")
  integer

@main def main() =

  val s = readString("Enter a string: ")
  val n = readInteger("Enter an integer: ")

  print(s"ASC(\"$s\") --> ")
  print(s"\"$s\"(0).toChar.toInt --> ")
  println(s"${s(0).toChar.toInt}")

  print(s"CHR$$($n) --> ")
  print(s"$n.toChar --> ")
  println(s"'${n.toChar}'")

  print(s"LEFT$$(\"$s\", $n) --> ")
  print(s"\"$s\".substring(0, $n.min(\"$s\".size)) --> ")
  println(s"\"${s.substring(0, n.min(s.size))}\"")

  print(s"MID$$(\"$s\", $n) --> ")
  print(s"\"$s\".substring(($n - 1).min(\"$s\".size)) --> ")
  println(s"\"${s.substring((n - 1).min(s.size))}\"")

  print(s"MID$$(\"$s\", $n, 3) --> ")
  print(s"\"$s\".substring(($n - 1).min(\"$s\".size), ($n - 1 + 3).min(\"$s\".size)) --> ")
  println(s"\"${s.substring((n - 1).min(s.size), (n - 1 + 3).min(s.size))}\"")

  print(s"RIGHT$$(\"$s\", $n) --> ")
  print(s"\"$s\".substring((\"$s\".size - $n).max(0)) --> ")
  println(s"\"${s.substring((s.size - n).max(0))}\"")

  print(s"LEN(\"$s\") --> ")
  print(s"\"$s\".size --> ")
  println(s.size)

  print(s"VAL(\"$s\") --> ")
  print(s"try \"$s\".trim.toFloat catch case _ => (0.0) --> ")
  println(try s.trim.toFloat catch case _ => (0.0))

  print(s"STR$$($n) --> ")
  print(s"$n.toString --> ")
  println(s"\"${n.toString}\"")

  print(s"SPC($n) --> ")
  print(s"\" \".repeat($n) --> ")
  println(s"\"${" ".repeat(n)}\"")

Páginas relacionadas

Basics off
Metaproyecto sobre los proyectos «Basics of…».
Basics of 8th
Conversión de antiguos programas de BASIC a 8th para aprender los rudimentos de este lenguaje.
Basics of Ada
Conversión de antiguos programas de BASIC a Ada para aprender los rudimentos de este lenguaje.
Basics of Arturo
Conversión de antiguos programas de BASIC a Arturo para aprender los rudimentos de este lenguaje.
Basics of C#
Conversión de antiguos programas de BASIC a C# para aprender los rudimentos de este lenguaje.
Basics of C3
Conversión de antiguos programas de BASIC a C3 para aprender los rudimentos de este lenguaje.
Basics of Chapel
Conversión de antiguos programas de BASIC a Chapel para aprender los rudimentos de este lenguaje.
Basics of Clojure
Conversión de antiguos programas de BASIC a Clojure para aprender los rudimentos de este lenguaje.
Basics of Crystal
Conversión de antiguos programas de BASIC a Crystal para aprender los rudimentos de este lenguaje.
Basics of D
Conversión de antiguos programas de BASIC a D para aprender los rudimentos de este lenguaje.
Basics of Elixir
Conversión de antiguos programas de BASIC a Elixir para aprender los rudimentos de este lenguaje.
Basics of F#
Conversión de antiguos programas de BASIC a F# para aprender los rudimentos de este lenguaje.
Basics of Factor
Conversión de antiguos programas de BASIC a Factor para aprender los rudimentos de este lenguaje.
Basics of FreeBASIC
Conversión de antiguos programas de BASIC a FreeBASIC para aprender los rudimentos de este lenguaje.
Basics of Gleam
Conversión de antiguos programas de BASIC a Gleam para aprender los rudimentos de este lenguaje.
Basics of Go
Conversión de antiguos programas de BASIC a Go para aprender los rudimentos de este lenguaje.
Basics of Hare
Conversión de antiguos programas de BASIC a Hare para aprender los rudimentos de este lenguaje.
Basics of Haxe
Conversión de antiguos programas de BASIC a Haxe para aprender los rudimentos de este lenguaje.
Basics of Icon
Conversión de antiguos programas de BASIC a Icon para aprender los rudimentos de este lenguaje.
Basics of Io
Conversión de antiguos programas de BASIC a Io para aprender los rudimentos de este lenguaje.
Basics of Janet
Conversión de antiguos programas de BASIC a Janet para aprender los rudimentos de este lenguaje.
Basics of Julia
Conversión de antiguos programas de BASIC a Julia para aprender los rudimentos de este lenguaje.
Basics of Kotlin
Conversión de antiguos programas de BASIC a Kotlin para aprender los rudimentos de este lenguaje.
Basics of Lobster
Conversión de antiguos programas de BASIC a Lobster para aprender los rudimentos de este lenguaje.
Basics of Lua
Conversión de antiguos programas de BASIC a Lua para aprender los rudimentos de este lenguaje.
Basics of Nature
Conversión de antiguos programas de BASIC a Nature para aprender los rudimentos de este lenguaje.
Basics of Neat
Conversión de antiguos programas de BASIC a Neat para aprender los rudimentos de este lenguaje.
Basics of Neko
Conversión de antiguos programas de BASIC a Neko para aprender los rudimentos de este lenguaje.
Basics of Nelua
Conversión de antiguos programas de BASIC a Nelua para aprender los rudimentos de este lenguaje.
Basics of Nim
Conversión de antiguos programas de BASIC a Nim para aprender los rudimentos de este lenguaje.
Basics of Nit
Conversión de antiguos programas de BASIC a Nit para aprender los rudimentos de este lenguaje.
Basics of Oberon-07
Conversión de antiguos programas de BASIC a Oberon-07 para aprender los rudimentos de este lenguaje.
Basics of OCaml
Conversión de antiguos programas de BASIC a OCaml para aprender los rudimentos de este lenguaje.
Basics of Odin
Conversión de antiguos programas de BASIC a Odin para aprender los rudimentos de este lenguaje.
Basics of Pike
Conversión de antiguos programas de BASIC a Pike para aprender los rudimentos de este lenguaje.
Basics of Pony
Conversión de antiguos programas de BASIC a Pony para aprender los rudimentos de este lenguaje.
Basics of Python
Conversión de antiguos programas de BASIC a Python para aprender los rudimentos de este lenguaje.
Basics of Racket
Conversión de antiguos programas de BASIC a Racket para aprender los rudimentos de este lenguaje.
Basics of Raku
Conversión de antiguos programas de BASIC a Raku para aprender los rudimentos de este lenguaje.
Basics of Retro
Conversión de antiguos programas de BASIC a Retro para aprender los rudimentos de este lenguaje.
Basics of Rexx
Conversión de antiguos programas de BASIC a Rexx para aprender los rudimentos de este lenguaje.
Basics of Ring
Conversión de antiguos programas de BASIC a Ring para aprender los rudimentos de este lenguaje.
Basics of Rust
Conversión de antiguos programas de BASIC a Rust para aprender los rudimentos de este lenguaje.
Basics of Scheme
Conversión de antiguos programas de BASIC a Scheme para aprender los rudimentos de este lenguaje.
Basics of Styx
Conversión de antiguos programas de BASIC a Styx para aprender los rudimentos de este lenguaje.
Basics of Swift
Conversión de antiguos programas de BASIC a Swift para aprender los rudimentos de este lenguaje.
Basics of V
Conversión de antiguos programas de BASIC a V para aprender los rudimentos de este lenguaje.
Basics of Vala
Conversión de antiguos programas de BASIC a Vala para aprender los rudimentos de este lenguaje.
Basics of Zig
Conversión de antiguos programas de BASIC a Zig para aprender los rudimentos de este lenguaje.

Enlaces externos relacionados