diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2023-12-12 18:26:27 -0500 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2023-12-12 18:26:27 -0500 |
commit | c7e2188850370689a2467d6241097250d325bd0f (patch) | |
tree | 726aff678c98cd6984a43b022602e7dba8ef5863 /generator/generator.cpp | |
parent | 1e34d9d675a50f1ccc1a43d3c2fed94ba3e5351b (diff) | |
download | lingo-randomizer-c7e2188850370689a2467d6241097250d325bd0f.tar.gz lingo-randomizer-c7e2188850370689a2467d6241097250d325bd0f.tar.bz2 lingo-randomizer-c7e2188850370689a2467d6241097250d325bd0f.zip |
Generate wanderlust and paintings
Diffstat (limited to 'generator/generator.cpp')
-rw-r--r-- | generator/generator.cpp | 94 |
1 files changed, 93 insertions, 1 deletions
diff --git a/generator/generator.cpp b/generator/generator.cpp index 0639492..cd13051 100644 --- a/generator/generator.cpp +++ b/generator/generator.cpp | |||
@@ -857,6 +857,25 @@ void generator::run() { | |||
857 | } | 857 | } |
858 | } | 858 | } |
859 | 859 | ||
860 | // Orange addition | ||
861 | std::vector<std::string> orange_addition; | ||
862 | { | ||
863 | hatkirby::progress ppgs("Generating orange addition puzzles...", | ||
864 | wanderlust_.size()); | ||
865 | |||
866 | for (const auto& [cipher, form_id] : wanderlust_) { | ||
867 | for (const auto& [cipher2, form_id2] : wanderlust_) { | ||
868 | if (cipher2 >= cipher) { | ||
869 | break; | ||
870 | } | ||
871 | if (wanderlust_.count(cipher - cipher2)) { | ||
872 | orange_addition.push_back(fmt::format( | ||
873 | "[{},{},{}]", form_id2, wanderlust_[cipher - cipher2], form_id)); | ||
874 | } | ||
875 | } | ||
876 | } | ||
877 | } | ||
878 | |||
860 | // Count up all of the generated puzzles. | 879 | // Count up all of the generated puzzles. |
861 | int total_puzzles = 0; | 880 | int total_puzzles = 0; |
862 | int reusable_words = 0; | 881 | int reusable_words = 0; |
@@ -916,6 +935,27 @@ void generator::run() { | |||
916 | std::ofstream output_file(outputPath_); | 935 | std::ofstream output_file(outputPath_); |
917 | output_file << "extends Node\n\nvar forms = [" | 936 | output_file << "extends Node\n\nvar forms = [" |
918 | << hatkirby::implode(form_entry, ",") << "]" << std::endl; | 937 | << hatkirby::implode(form_entry, ",") << "]" << std::endl; |
938 | |||
939 | std::vector<std::string> painting_entries; | ||
940 | { | ||
941 | std::list<std::string> paintings(readFile(datadirPath_ / "paintings.txt")); | ||
942 | for (const std::string& line : paintings) { | ||
943 | auto parts = hatkirby::split<std::vector<std::string>>(line, ","); | ||
944 | painting_entries.push_back( | ||
945 | fmt::format("[\"{}\",\"{}\"]", parts[0], parts[1])); | ||
946 | } | ||
947 | } | ||
948 | output_file << "var paintings = [" << hatkirby::implode(painting_entries, ",") | ||
949 | << "]" << std::endl; | ||
950 | |||
951 | std::vector<std::string> cipher_lines; | ||
952 | for (const auto& [cipher, form_id] : wanderlust_) { | ||
953 | cipher_lines.push_back(std::to_string(form_id)); | ||
954 | } | ||
955 | output_file << "var wanderlust = [" << hatkirby::implode(cipher_lines, ",") | ||
956 | << "]" << std::endl; | ||
957 | output_file << "var addition = [" << hatkirby::implode(orange_addition, ",") | ||
958 | << "]" << std::endl; | ||
919 | } | 959 | } |
920 | 960 | ||
921 | size_t generator::LookupOrCreatePronunciation(const std::string& phonemes) { | 961 | size_t generator::LookupOrCreatePronunciation(const std::string& phonemes) { |
@@ -996,7 +1036,59 @@ size_t generator::LookupOrCreateForm(const std::string& word) { | |||
996 | } else { | 1036 | } else { |
997 | size_t form_id = forms_.size(); | 1037 | size_t form_id = forms_.size(); |
998 | form_by_text_[word] = form_id; | 1038 | form_by_text_[word] = form_id; |
999 | forms_.push_back({.id = form_id, .text = word}); | 1039 | std::optional<int> ciphered; |
1040 | if (std::all_of(word.begin(), word.end(), [](char ch) { | ||
1041 | return ch == 'w' || ch == 'a' || ch == 'n' || ch == 'd' || | ||
1042 | ch == 'e' || ch == 'r' || ch == 'l' || ch == 'u' || | ||
1043 | ch == 's' || ch == 't'; | ||
1044 | })) { | ||
1045 | ciphered = 0; | ||
1046 | std::string to_cipher = word; | ||
1047 | while (!to_cipher.empty()) { | ||
1048 | *ciphered *= 10; | ||
1049 | switch (to_cipher.back()) { | ||
1050 | case 'w': { | ||
1051 | *ciphered += 1; | ||
1052 | break; | ||
1053 | } | ||
1054 | case 'a': { | ||
1055 | *ciphered += 2; | ||
1056 | break; | ||
1057 | } | ||
1058 | case 'n': { | ||
1059 | *ciphered += 3; | ||
1060 | break; | ||
1061 | } | ||
1062 | case 'd': { | ||
1063 | *ciphered += 4; | ||
1064 | break; | ||
1065 | } | ||
1066 | case 'e': { | ||
1067 | *ciphered += 5; | ||
1068 | break; | ||
1069 | } | ||
1070 | case 'r': { | ||
1071 | *ciphered += 6; | ||
1072 | break; | ||
1073 | } | ||
1074 | case 'l': { | ||
1075 | *ciphered += 7; | ||
1076 | break; | ||
1077 | } | ||
1078 | case 'u': { | ||
1079 | *ciphered += 8; | ||
1080 | break; | ||
1081 | } | ||
1082 | case 's': { | ||
1083 | *ciphered += 9; | ||
1084 | break; | ||
1085 | } | ||
1086 | } | ||
1087 | to_cipher.pop_back(); | ||
1088 | } | ||
1089 | wanderlust_[*ciphered] = form_id; | ||
1090 | } | ||
1091 | forms_.push_back({.id = form_id, .text = word, .ciphered = ciphered}); | ||
1000 | 1092 | ||
1001 | std::string sortedText = word; | 1093 | std::string sortedText = word; |
1002 | std::sort(sortedText.begin(), sortedText.end()); | 1094 | std::sort(sortedText.begin(), sortedText.end()); |