Skip to content

Instantly share code, notes, and snippets.

@oripwk
Last active July 2, 2022 04:26
Show Gist options
  • Save oripwk/fd0b6efb1ffb8a2c4a8805b8422a73a2 to your computer and use it in GitHub Desktop.
Save oripwk/fd0b6efb1ffb8a2c4a8805b8422a73a2 to your computer and use it in GitHub Desktop.
Françaises conjugaisons
import scala.io.StdIn
import scala.util.Random
object Main {
def main(args: Array[String]): Unit = {
val product: List[(String, String, String)] = for {
verb <- verbs.toList
person <- persons
time <- times
} yield (verb, person, time)
val rand = new Random()
var wrong = 0
var total = 0
sys.addShutdownHook {
println(s"correct: ${total - wrong} wrong: $wrong")
}
while (true) {
val i = rand.nextInt(product.size)
val (verb, person, time) = product(i)
println(s"$person $verb $time")
val answer = StdIn.readLine()
total += 1
check(person, time, verb, answer) map { correct =>
wrong += 1
println(s"WRONG! $correct")
} getOrElse println("CORRECT!")
println("---")
}
}
def check(person: String, time: String, verb: String, answer: String): Option[String] = {
val conj = map(verb)(person)(time)
val expected = s"$person $conj"
if (expected == answer) None
else Some(expected)
}
val map = Map(
"parler" -> Map(
"je"-> Map(
"present" -> "parle",
"imparfait" -> "parlais",
"futur" -> "parlerai",
"conditionnel" -> "parlerais"
),
"tu"-> Map(
"present" -> "parles",
"imparfait" -> "parlais",
"futur" -> "parleras",
"conditionnel" -> "parlerais"
),
"il"-> Map(
"present" -> "parle",
"imparfait" -> "parlait",
"futur" -> "parlera",
"conditionnel" -> "parlerait"
),
"elle"-> Map(
"present" -> "parle",
"imparfait" -> "parlait",
"futur" -> "parlera",
"conditionnel" -> "parlerait"
),
"on"-> Map(
"present" -> "parle",
"imparfait" -> "parlait",
"futur" -> "parlera",
"conditionnel" -> "parlerait"
),
"nous"-> Map(
"present" -> "parlons",
"imparfait" -> "parlions",
"futur" -> "parlerons",
"conditionnel" -> "parlerions"
),
"vous"-> Map(
"present" -> "parlez",
"imparfait" -> "parliez",
"futur" -> "parlerez",
"conditionnel" -> "parleriez"
),
"ils"-> Map(
"present" -> "parlent",
"imparfait" -> "parlaient",
"futur" -> "parleront",
"conditionnel" -> "parleraient"
),
"elles"-> Map(
"present" -> "parlent",
"imparfait" -> "parlaient",
"futur" -> "parleront",
"conditionnel" -> "parleraient"
)
),
"tuer" -> Map(
"je"-> Map(
"present" -> "tue",
"imparfait" -> "tuais",
"futur" -> "tuerai",
"conditionnel" -> "tuerais"
),
"tu"-> Map(
"present" -> "tues",
"imparfait" -> "tuais",
"futur" -> "tueras",
"conditionnel" -> "tuerais"
),
"il"-> Map(
"present" -> "tue",
"imparfait" -> "tuait",
"futur" -> "tuera",
"conditionnel" -> "tuerait"
),
"elle"-> Map(
"present" -> "tue",
"imparfait" -> "tuait",
"futur" -> "tuera",
"conditionnel" -> "tuerait"
),
"on"-> Map(
"present" -> "tue",
"imparfait" -> "tuait",
"futur" -> "tuera",
"conditionnel" -> "tuerait"
),
"nous"-> Map(
"present" -> "tuons",
"imparfait" -> "tuions",
"futur" -> "tuerons",
"conditionnel" -> "tuerions"
),
"vous"-> Map(
"present" -> "tuez",
"imparfait" -> "tuiez",
"futur" -> "tuerez",
"conditionnel" -> "tueriez"
),
"ils"-> Map(
"present" -> "tuent",
"imparfait" -> "tuaient",
"futur" -> "tueront",
"conditionnel" -> "tueraient"
),
"elles"-> Map(
"present" -> "tuent",
"imparfait" -> "tuaient",
"futur" -> "tueront",
"conditionnel" -> "tueraient"
)
),
"bleuir" -> Map(
"je"-> Map(
"present" -> "bleuis",
"imparfait" -> "bleuissais",
"futur" -> "bleuirai",
"conditionnel" -> "bleuirais"
),
"tu"-> Map(
"present" -> "bleuis",
"imparfait" -> "bleuissais",
"futur" -> "bleuiras",
"conditionnel" -> "bleuirais"
),
"il"-> Map(
"present" -> "bleuit",
"imparfait" -> "bleuissait",
"futur" -> "bleuira",
"conditionnel" -> "bleuirait"
),
"elle"-> Map(
"present" -> "bleuit",
"imparfait" -> "bleuissait",
"futur" -> "bleuira",
"conditionnel" -> "bleuirait"
),
"on"-> Map(
"present" -> "bleuit",
"imparfait" -> "bleuissait",
"futur" -> "bleuira",
"conditionnel" -> "bleuirait"
),
"nous"-> Map(
"present" -> "bleuissons",
"imparfait" -> "bleuissions",
"futur" -> "bleuirons",
"conditionnel" -> "bleuirions"
),
"vous"-> Map(
"present" -> "bleuissez",
"imparfait" -> "bleuissiez",
"futur" -> "bleuirez",
"conditionnel" -> "bleuiriez"
),
"ils"-> Map(
"present" -> "bleuissent",
"imparfait" -> "bleuissaient",
"futur" -> "bleuiront",
"conditionnel" -> "bleuiraient"
),
"elles"-> Map(
"present" -> "bleuissent",
"imparfait" -> "bleuissaient",
"futur" -> "bleuiront",
"conditionnel" -> "bleuiraient"
)
),
"rougir" -> Map(
"je"-> Map(
"present" -> "rougis",
"imparfait" -> "rougissais",
"futur" -> "rougirai",
"conditionnel" -> "rougirais"
),
"tu"-> Map(
"present" -> "rougis",
"imparfait" -> "rougissais",
"futur" -> "rougiras",
"conditionnel" -> "rougirais"
),
"il"-> Map(
"present" -> "rougit",
"imparfait" -> "rougissait",
"futur" -> "rougira",
"conditionnel" -> "rougirait"
),
"elle"-> Map(
"present" -> "rougit",
"imparfait" -> "rougissait",
"futur" -> "rougira",
"conditionnel" -> "rougirait"
),
"on"-> Map(
"present" -> "rougit",
"imparfait" -> "rougissait",
"futur" -> "rougira",
"conditionnel" -> "rougirait"
),
"nous"-> Map(
"present" -> "rougissons",
"imparfait" -> "rougissions",
"futur" -> "rougirons",
"conditionnel" -> "rougirions"
),
"vous"-> Map(
"present" -> "rougissez",
"imparfait" -> "rougissiez",
"futur" -> "rougirez",
"conditionnel" -> "rougiriez"
),
"ils"-> Map(
"present" -> "rougissent",
"imparfait" -> "rougissaient",
"futur" -> "rougiront",
"conditionnel" -> "rougiraient"
),
"elles"-> Map(
"present" -> "rougissent",
"imparfait" -> "rougissaient",
"futur" -> "rougiront",
"conditionnel" -> "rougiraient"
)
)
)
val verbs: Iterable[String] = map.keys
val persons: Iterable[String] = map.values.head.keys
val times: Iterable[String] = map.values.head.values.head.keys
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment