Skip to content

Instantly share code, notes, and snippets.

@modalsoul
Created June 3, 2012 06:27
Show Gist options
  • Save modalsoul/2862228 to your computer and use it in GitHub Desktop.
Save modalsoul/2862228 to your computer and use it in GitHub Desktop.
みなとRuby会議01 ソーシャルコーディング[English Numerals] Scala版回答
import scala.collection.immutable.Map
/**
* Created with IntelliJ IDEA.
* User: modal_soul
* Date: 12/06/02
* Time: 23:06
*/
// 1桁のイミュータブルマップの作成
val oneDigit = Map(
0 -> "zero", 1 -> "one", 2 -> "two", 3 -> "three", 4 -> "four", 5 -> "five", 6 -> "six", 7 -> "seven", 8 -> "eight", 9 -> "nine"
)
// 2桁で19以下のイミュータブルマップの作成
val twoDigitOf19AndUnder = Map(
10 -> "ten", 11 -> "eleven", 12 -> "tweleve", 13 -> "thirteen", 14 -> "fourteen", 15 -> "fifteen", 16 -> "sixteen", 17 -> "seventeen", 18 -> "eighteen", 19 -> "nineteen"
)
// 2桁で20以上のイミュータブルマップの作成
val twoDigitOf20AndOver = Map(
2 -> "twenty", 3 -> "thirty", 4 -> "fourty", 5 -> "fifty", 6 -> "sixty", 7 -> "seventy", 8 -> "eighty", 9 -> "ninety"
)
// 下2桁を判定
def twoDigitTranslate(input:Int):String = {
(input/10) match {
// 10未満の場合
case (0) => oneDigit(input)
// 10以上の場合
case (1) => twoDigitOf19AndUnder(input)
// 20以上の場合
case (_) =>
(input%10) match{
case (0) => twoDigitOf20AndOver(input/10)
case (_) => {
twoDigitOf20AndOver(input/10) + "-" + oneDigit(input % 10)
}
}
}
}
// 上2桁を判定
def fourDigitTranslate(input:Int):String = {
(input/10) match {
// 1000未満の場合
case (0) => {
oneDigit(input).union(" hundred")
}
// 2000未満の場合
case (1) => {
// 1100未満の場合
if(input%10==0){
oneDigit(input/10).union(" thousand")
}
// 1100以上の場合
else{
twoDigitOf19AndUnder(input).union(" hundred")
}
}
// 2000以上の場合
case (_) => {
oneDigit(input/10).union(" thousand")// + "and" +oneDigit(input%10).union(" hundred ")
}
}
}
// コマンドライン引数の取得
val num:Int = args(0).toInt
// 100以上の場合
if(num > 99){
// 下2桁が0の場合
if(num%10 == 0){
println(fourDigitTranslate(num/100).capitalize)
}
// 下2桁が0以外の場合
else {
println(fourDigitTranslate(num/100).capitalize + " and " + twoDigitTranslate(num%100))
}
}
// 99以下の場合
else {
println(twoDigitTranslate(num).capitalize)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment