def main
(args
: Array
[String
]) { val secret
= List
('3',
'_',
'r',
'@',
'!',
'?',
'a')
// Just a Map from Char to Char
'@' -> 'a',
'x' -> 'y',
'?' -> 'm',
'4' -> 't',
'3' -> 'e',
'r' -> 'p')
val decoded
: List
[Char
] = for { // let's yield (build) a new list x <- secret // let x iterate on Chars of the List secret
y <- key get x // let y be the value looked up in the Map (if exists, otherwise skip)
} yield y.
toUpper // append y uppercased to the List we are building
val collected
= decoded.
mkString // join the Chars to form a String
// sliding(2) returns an iterator over sliding windows of length 2 the string
// zipWithIndex transforms the iterator to yield (A, index) instead just A, for some type A
// so slice is a String of length 2
(slice, i) <- collected.sliding(2).zipWithIndex
} println(" " * i + slice) // print the string slice "animated"
}
}
b2JqZWN0IE1haW4gewoKICBkZWYgbWFpbihhcmdzOiBBcnJheVtTdHJpbmddKSB7CiAgICB2YWwgc2VjcmV0ID0gTGlzdCgnMycsICdfJywgJ3InLCAnQCcsICchJywgJz8nLCAnYScpCiAgICAKICAgIC8vIEp1c3QgYSBNYXAgZnJvbSBDaGFyIHRvIENoYXIKICAgIHZhbCBrZXkgPSBNYXAoCiAgICAgICAgJ0AnIC0+ICdhJywKICAgICAgICAneCcgLT4gJ3knLAogICAgICAgICc/JyAtPiAnbScsCiAgICAgICAgJzQnIC0+ICd0JywKICAgICAgICAnMycgLT4gJ2UnLCAKICAgICAgICAncicgLT4gJ3AnKQogICAgICAgIAogICAgdmFsIGRlY29kZWQ6IExpc3RbQ2hhcl0gPSBmb3IgeyAvLyBsZXQncyB5aWVsZCAoYnVpbGQpIGEgbmV3IGxpc3QKICAgICAgeCA8LSBzZWNyZXQJLy8gbGV0IHggaXRlcmF0ZSBvbiBDaGFycyBvZiB0aGUgTGlzdCBzZWNyZXQKICAgICAgeSA8LSBrZXkgZ2V0IHggICAgLy8gbGV0IHkgYmUgdGhlIHZhbHVlIGxvb2tlZCB1cCBpbiB0aGUgTWFwIChpZiBleGlzdHMsIG90aGVyd2lzZSBza2lwKQogICAgfSB5aWVsZCB5LnRvVXBwZXIgICAvLyBhcHBlbmQgeSB1cHBlcmNhc2VkIHRvIHRoZSBMaXN0IHdlIGFyZSBidWlsZGluZwogICAgCiAgICB2YWwgY29sbGVjdGVkID0gZGVjb2RlZC5ta1N0cmluZyAvLyBqb2luIHRoZSBDaGFycyB0byBmb3JtIGEgU3RyaW5nCiAgICAKICAgIGZvciB7CiAgICAgIC8vIHNsaWRpbmcoMikgcmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIHNsaWRpbmcgd2luZG93cyBvZiBsZW5ndGggMiB0aGUgc3RyaW5nCiAgICAgIC8vIHppcFdpdGhJbmRleCB0cmFuc2Zvcm1zIHRoZSBpdGVyYXRvciB0byB5aWVsZCAoQSwgaW5kZXgpIGluc3RlYWQganVzdCBBLCBmb3Igc29tZSB0eXBlIEEKICAgICAgLy8gc28gc2xpY2UgaXMgYSBTdHJpbmcgb2YgbGVuZ3RoIDIKICAgICAgKHNsaWNlLCBpKSA8LSBjb2xsZWN0ZWQuc2xpZGluZygyKS56aXBXaXRoSW5kZXgKICAgIH0gcHJpbnRsbigiICIgKiBpICsgc2xpY2UpIC8vIHByaW50IHRoZSBzdHJpbmcgc2xpY2UgImFuaW1hdGVkIgogICAgCiAgfQoKfQ==