Skip to content

Instantly share code, notes, and snippets.

@ogatatsu
Created November 2, 2011 17:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ogatatsu/1334248 to your computer and use it in GitHub Desktop.
Save ogatatsu/1334248 to your computer and use it in GitHub Desktop.
ほむ語変換機
abstract class LangConverter {
val `0`: String
val `1`: String
val sep: String
private def binaryStringToLang(s: String): String = {
s.map {
case '0' => `0`
case '1' => `1`
}.mkString + sep
}
private def langToBinaryString(s: String): String = {
if(s.isEmpty) ""
else if(s startsWith `0`) "0" + langToBinaryString(s.drop(`0`.size))
else if(s startsWith `1`) "1" + langToBinaryString(s.drop(`1`.size))
else throw new IllegalArgumentException("不正な入力です。")
}
def toLang(s: String): String = {
s.map(_.toString.getBytes("utf-8"))
.map(_.map(_.toInt).map(_ & 0xFF).map(Integer.toBinaryString).map(binaryStringToLang))
.flatten
.mkString
}
def langTo(s: String): String = {
val bytes = s.split(sep)
.map(langToBinaryString)
.map(java.lang.Integer.parseInt(_:String, 2))
.map(_.toByte)
.toArray
new String(bytes, "utf-8")
}
}
object HomLangConverter extends LangConverter {
val `0` = "む"
val `1` = "ほ"
val sep = "っ"
}
object TilloLangConverter extends LangConverter {
val `0` = "ロ"
val `1` = "ティ"
val sep = "ッ"
}
scala> HomLangConverter.toLang("その必要はないわ")
res0: String = ほほほむむむほほっほむむむむむむほっほむむほほほむほっほほほむむ
むほほっほむむむむむむほっほむほむほほほむっほほほむむほむほっほむほほほほほほっ
ほむむむむほむほっほほほむほむむむっほむほむむほほむっほむむむむむむほっほほほむ
むむほほっほむむむむむむほっほむほむほほほほっほほほむむむほほっほむむむむむむほ
っほむほむほむほむっほほほむむむほほっほむむむむむむほっほむむむむほむむっほほほ
むむむほほっほむむむむむほむっほむむむほほほほっ
scala> HomLangConverter.langTo(res0)
res1: String = その必要はないわ
scala> TilloLangConverter.toLang("もう何も恐くない")
res2: String = ティティティロロロティティッティロロロロロティロッティロロロロロティロッティティティロロロティティッティロロロロロロティッティロロ
ロロティティロッティティティロロティロロッティロティティティティロティッティロロティロティロティッティティティロロロティティッティロロロロロティロッティロロロロ
ロティロッティティティロロティティロッティロロロロロロティッティロロティロロロロッティティティロロロティティッティロロロロロロティッティロロロティティティティッ
ティティティロロロティティッティロロロロロロティッティロティロティロティロッティティティロロロティティッティロロロロロロティッティロロロロティロロッ
scala> TilloLangConverter.langTo(res2)
res3: String = もう何も恐くない
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment