Last active
May 4, 2021 21:46
-
-
Save zeratax/de6dda9f29295f60a6baf920ae3161fc 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
{ | |
"kana": [ | |
{"hiragana": "あ","romaji":"a", "value": 1}, | |
{"hiragana": "い","romaji":"i", "value": 2}, | |
{"hiragana": "う","romaji":"u", "value": 3}, | |
{"hiragana": "え","romaji":"r", "value": 4}, | |
{"hiragana": "お","romaji":"o", "value": 5}, | |
{"hiragana": "か","romaji":"ka", "value": 6}, | |
{"hiragana": "き","romaji":"ki", "value": 7}, | |
{"hiragana": "く","romaji":"ku", "value": 8}, | |
{"hiragana": "け","romaji":"ke", "value": 9}, | |
{"hiragana": "こ","romaji":"ko", "value": 10}, | |
{"hiragana": "さ","romaji":"sa", "value": 11}, | |
{"hiragana": "し","romaji":"shi", "value": 12}, | |
{"hiragana": "す","romaji":"su", "value": 13}, | |
{"hiragana": "せ","romaji":"se", "value": 14}, | |
{"hiragana": "そ","romaji":"so", "value": 15}, | |
{"hiragana": "た","romaji":"ta", "value": 16}, | |
{"hiragana": "ち","romaji":"chi", "value": 17}, | |
{"hiragana": "つ","romaji":"tsu", "value": 18}, | |
{"hiragana": "て","romaji":"te", "value": 19}, | |
{"hiragana": "と","romaji":"to", "value": 20}, | |
{"hiragana": "な","romaji":"na", "value": 21}, | |
{"hiragana": "に","romaji":"ni", "value": 22}, | |
{"hiragana": "ぬ","romaji":"nu", "value": 23}, | |
{"hiragana": "ね","romaji":"ne", "value": 24}, | |
{"hiragana": "の","romaji":"no", "value": 25}, | |
{"hiragana": "は","romaji":"ha", "value": 26}, | |
{"hiragana": "ひ","romaji":"hi", "value": 27}, | |
{"hiragana": "ふ","romaji":"fu", "value": 28}, | |
{"hiragana": "へ","romaji":"he", "value": 29}, | |
{"hiragana": "ほ","romaji":"ho", "value": 30}, | |
{"hiragana": "ま","romaji":"ma", "value": 31}, | |
{"hiragana": "み","romaji":"mi", "value": 32}, | |
{"hiragana": "む","romaji":"mu", "value": 33}, | |
{"hiragana": "め","romaji":"me", "value": 34}, | |
{"hiragana": "も","romaji":"mo", "value": 35}, | |
{"hiragana": "や","romaji":"ya", "value": 36}, | |
{"hiragana": "ゆ","romaji":"yu", "value": 37}, | |
{"hiragana": "よ","romaji":"yo", "value": 38}, | |
{"hiragana": "ら","romaji":"ra", "value": 39}, | |
{"hiragana": "り","romaji":"ri", "value": 40}, | |
{"hiragana": "る","romaji":"ru", "value": 41}, | |
{"hiragana": "れ","romaji":"re", "value": 42}, | |
{"hiragana": "ろ","romaji":"ro", "value": 43}, | |
{"hiragana": "わ","romaji":"wa", "value": 44}, | |
{"hiragana": "を","romaji":"wo", "value": 45}, | |
{"hiragana": "ん","romaji":"n", "value": 46} | |
] | |
} |
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
require "json" | |
class Kana | |
include JSON::Serializable | |
@[JSON::Field(key: "hiragana")] | |
getter hiragana : String | |
@[JSON::Field(key: "romaji")] | |
getter romaji : String | |
@[JSON::Field(key: "value")] | |
getter value : Int32 | |
end | |
class Kanas | |
include JSON::Serializable | |
@[JSON::Field(key: "kana")] | |
@kana : Array(Kana) | |
def hiragana(kana) | |
@kana.find { |i| kana == i.hiragana } | |
end | |
def romaji(character) | |
@kana.find { |i| kana == i.character } | |
end | |
def value(number : Int32) | |
if number > @kana.size | |
raise "no matching kana!" | |
end | |
@kana[number] | |
end | |
def size | |
@kana.size | |
end | |
end | |
kana_json = File.read(Path.posix "./src/kana.json") | |
kanas = Kanas.from_json(kana_json) | |
vowels = ['a', 'i', 'o', 'u', 'e'] | |
output_path = Path.posix "./output.json" | |
File.open(output_path, "w") { |f| f << %Q({"names": [\n) } | |
combinations = (1..kanas.size).to_a | |
combinations.repeated_permutations(8).each do |combination| | |
kana = combination.map { |x| kanas.value(x-1) } | |
hiragana = kana.map { |x| x.hiragana }.join | |
romaji = kana.map { |x| x.romaji }.join | |
if (romaji.chars & vowels).size == 8 && romaji.chars.size == 15 && combination.sum == 134 | |
File.open(output_path, "a") { |f| f << %Q({"hiragana": "#{hiragana}", "romaji": "#{romaji}"},\n) } | |
end | |
end | |
File.open(output_path, "a") { |f| f << "]}" } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment