Advertisement
bashor

kotlin_sol_2.2

Jan 11th, 2012
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.16 KB | None | 0 0
  1. // 2) Число в римской записи перевести в десятичную.
  2.  
  3. // 1     I
  4. // 4     IV
  5. // 5     V
  6. // 9     IX
  7. // 10    X
  8. // 40    XL
  9. // 50    L
  10. // 90    XC
  11. // 100   C
  12. // 400   CD
  13. // 500   D
  14. // 900   CM
  15. // 1000  M
  16.  
  17. // http://ru.wikipedia.org/wiki/Римские_цифры
  18.  
  19. import java.util.*
  20.  
  21. inline fun convertSymbol(c : Char) =
  22.   when(c) {
  23.     'I' -> 1
  24.     'V' -> 5
  25.     'X' -> 10
  26.     'L' -> 50
  27.     'C' -> 100
  28.     'D' -> 500
  29.     'M' -> 1000
  30.   }
  31.  
  32. class StringIterator(val s : String){
  33.   inline fun next() = if (i < s.length) s[i++] else throw NoSuchElementException()
  34.   inline fun hasNext() = i < s.length
  35.   private var i = 0
  36. }
  37.  
  38. inline fun String.iterator() = StringIterator(this)
  39.  
  40. fun convert(s : String) : Int {
  41.   var r = 0
  42.   var prev = 0
  43.   for (i in s) {
  44.     val cur = convertSymbol(i)
  45.  
  46.     if (prev < cur)
  47.       prev *= -1
  48.    
  49.     r += prev
  50.     prev = cur
  51.   }
  52.   r += prev
  53.  
  54.   return r
  55. }
  56.  
  57. // example input: I IV V IX X XL L XC C CD D CM M CDXCIX LDVLIV XDIX VDIV ID XCV VC XL MDCCCCLXXXXVIIII
  58. fun main(args : Array<String>) {
  59.   for (s in args)
  60.     System.out?.println("$s\t==>\t${convert(s)}")
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement