feat: 添加马尔可夫链成语生成器实现

实现基于马尔可夫链的成语生成器,包含核心算法和成语数据文件。程序能够读取成语库并生成新的四字成语组合,同时标记已存在的成语。

新增markov_chain.cpp实现核心逻辑,包含字符串处理、概率模型和随机生成功能。添加markov_chain.txt作为成语数据源,包含200个常用成语及其编号。
This commit is contained in:
Zengtudor 2025-11-23 11:25:11 +08:00
parent 62cdfbed7b
commit beb67e3eaa
2 changed files with 286 additions and 0 deletions

View File

@ -0,0 +1,67 @@
#include <cstdint>
#include <iostream>
#include <istream>
#include <map>
#include <random>
#include <set>
#include <string>
#include <unordered_set>
#include <vector>
using ll = int64_t;
#define sl static inline
const int cnsize=3;
ll ltmp;
std::map<std::string, std::vector<std::string>> m;
std::vector<std::string> startw;
std::random_device rd;
std::mt19937 mt(rd());
std::unordered_set<std::string> old;
sl std::vector<std::string> stovs(const std::string &s){
std::vector<std::string> ret;
for(int i=0;i<s.size();i+=3){
std::string ns;
for(int j=0;j<cnsize&&i+j<s.size();j++){
ns=ns+s[i+j];
}
ret.emplace_back(ns);
}
return ret;
}
int main(){
while(std::cin>>ltmp){
std::string b;
std::cin>>b;
std::vector<std::string> strs=stovs(b);
// for(auto &i:strs){
// std::cout<<i<<"\n";
// }
old.emplace(b);
startw.push_back(strs[0]);
for(int i=1;i<strs.size();i++){
m[strs[i-1]].push_back(strs[i]);
}
}
std::uniform_int_distribution<int> uv(0,startw.size()-1);
for(int i=1;i<=20;i++){
// std::cout<<"i="<<i<<"\n";
std::string now=startw[uv(mt)];
std::string all;
for(int j=1;j<=4;j++){
all+=now;
// std::cout<<now;
if(m[now].size()==0)break;
std::uniform_int_distribution<int> uvm(0,m[now].size()-1);
now=m[now][uvm(mt)];
}
std::cout<<all;
if(old.count(all)){
std::cout<<" "<<"[is old]";
}
std::cout<<"\n";
}
}

219
src/11/23/markov_chain.txt Normal file
View File

@ -0,0 +1,219 @@
1 一帆風順
2 一見如故
3 一清二楚
4 一塵不染
5 一落千丈
6 一成不變
7 一箭雙雕
8 一言難盡
9 一暴十寒
10 一絲不苟
11 九牛一毛
12 人山人海
13 人聲鼎沸
14 人跡罕至
15 人心難測
16 人才輩出
17 人定勝天
18 人浮於事
19 人情世故
20 人傑地靈
21 大公無私
22 大驚小怪
23 大材小用
24 大器晚成
25 大同小異
26 大張旗鼓
27 大言不慚
28 大快朵頤
29 大有可為
30 大惑不解
31 天南地北
32 天經地義
33 天馬行空
34 天衣無縫
35 天翻地覆
36 天長地久
37 天涯比鄰
38 天道酬勤
39 天人交戰
40 天花亂墜
41 心猿意馬
42 心神不寧
43 心滿意足
44 心急如焚
45 心安理得
46 心領神會
47 心血來潮
48 心花怒放
49 心甘情願
50 心驚膽戰
51 水落石出
52 水深火熱
53 水乳交融
54 水泄不通
55 水到渠成
56 水天一色
57 水中撈月
58 水火不容
59 水泛銀光
60 水光瀲灩
61 火冒三丈
62 火樹銀花
63 火上加油
64 火眼金睛
65 火急火燎
66 火燒眉毛
67 火中取栗
68 火光沖天
69 火傘高張
70 火爆脾氣
71 虎頭蛇尾
72 虎視眈眈
73 虎背熊腰
74 虎口拔牙
75 虎虎生風
76 虎落平陽
77 虎踞龍盤
78 虎將雄兵
79 虎穴龍潭
80 虎嘯風生
81 雪上加霜
82 雪中送炭
83 雪恥報仇
84 雪落無痕
85 雪泥鴻爪
86 雪擁藍關
87 雪山飛狐
88 雪過天晴
89 雪兆豐年
90 雪白晶瑩
91 風平浪靜
92 風雨如晦
93 風吹草動
94 風調雨順
95 風捲殘雲
96 風花雪月
97 風華絶代
98 風光旖旎
99 風馳電掣
100 風起雲湧
101 雲淡風輕
102 雲霧繚繞
103 雲消雲散
104 雲蒸霞蔚
105 雲集四方
106 雲開日出
107 雲程發軔
108 雲躍龍驤
109 雲深不知
110 雲飛雨散
111 明察秋毫
112 明爭暗鬥
113 明目張膽
114 明察暗訪
115 明心見性
116 明亮耀眼
117 明哲保身
118 明火執仗
119 明辨是非
120 明鏡高懸
121 虛懷若谷
122 虛與委蛇
123 虛張聲勢
124 虛實相生
125 虛名虛利
126 虛心學習
127 虛席以待
128 虛誇浮誇
129 虛堂懸鏡
130 虛言詐語
131 高瞻遠矚
132 高山流水
133 高談闊論
134 高風亮節
135 高朋滿座
136 高不可攀
137 高官厚祿
138 高屋建瓴
139 高視闊步
140 高枕無憂
141 安然無恙
142 安居樂業
143 安步當車
144 安然度日
145 安貧樂道
146 安身立命
147 安之若素
148 安土重遷
149 安然自得
150 安分守己
151 白日做夢
152 白璧無瑕
153 白駒過隙
154 白紙黑字
155 白雪皚皚
156 白頭偕老
157 白雲蒼狗
158 白衣天使
159 白手起家
160 白話連篇
161 金玉滿堂
162 金枝玉葉
163 金石為開
164 金榜題名
165 金聲玉振
166 金戈鐵馬
167 金光閃閃
168 金玉其外
169 金鼓齊鳴
170 金碧輝煌
171 石破天驚
172 石沉大海
173 石火電光
174 石破驚天
175 石壓草枯
176 石室金匱
177 石心鐵腸
178 石泉清冽
179 石橋流水
180 石室藏書
181 夜深人靜
182 夜闌人靜
183 夜以繼日
184 夜色迷離
185 夜幕降臨
186 夜雨對床
187 夜光如晝
188 夜半鐘聲
189 夜色朦朧
190 夜寂無聲
191 龍飛鳳舞
192 龍爭虎鬥
193 龍盤虎踞
194 龍馬精神
195 龍鳳呈祥
196 龍吟虎嘯
197 龍躍鳳鳴
198 龍行虎步
199 龍驤虎步
200 龍章鳳彩