Created
November 2, 2011 17:12
-
-
Save ogatatsu/1334248 to your computer and use it in GitHub Desktop.
ほむ語変換機
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 = "ッ" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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