0votos

Kata CodeBreaker en Scala

por josejuan hace 6 años

Me costó entender que no se pedía obtener la clave... :P

Consigue descifrar el código de seguridad para acceder al super laboratorio científico del doctor Maligno. No te será fácil, pero seguro que será divertido!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import util.Random 
 
object s10_Kata_CodeBreaker { 
 
    val DIGIT = "RAMVNI" 
    val KEYSTRENGTH = 4 
    val COUNTDOWN = 10 
 
    def getKey = 0.until(KEYSTRENGTH).foldLeft("")((s, _) => s + DIGIT(Random.nextInt(DIGIT.length))) 
 
    def checkKey(a: Array[Char], b: Array[Char]) = { 
        var R = "" 
        val f = (r: Char, s: Int, t: Int) => {R += r; a(s) = '+'; b(t) = '-'} 
        0.until(a.length).filter(n => a(n) == b(n)).foreach(n => f('X', n, n)) 
        0.until(a.length).filter(n => a contains b(n)).foreach(n => f('*', a indexOf b(n), n)) 
 
    def main(args: Array[String]) { 
        var i = true 
        println("(Enter \"quit\" to exit.)") 
        while(i) { 
            var e = true 
            var r = COUNTDOWN 
            val k = getKey 
            println("Key has changed (%s). Enter key:" format k) 
            while(i && e && r > 0) { 
                val l = Console.readLine 
                i = l != "quit" 
                e = k != l 
                r -= 1 
                println( 
                    if(e) "Result \"%s\". %d retries.".format(checkKey(k.toArray, l.toArray), r) 
                    else "Correct!") 
        println("Bye!") 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.