背景
百度貼吧是以興趣主題聚合志同道合者的互動(dòng)平臺(tái)规婆,同好網(wǎng)友聚集在這里交流話(huà)題、展示自我蝉稳、結(jié)交朋友抒蚜。在這里,人才輩出耘戚,金句頻出嗡髓,新梗無(wú)限。
其中收津,丁真宇宙是貼吧老哥創(chuàng)造的集大成者饿这,可文可武,他的文字格式一般為一眼丁真(yy丁真撞秋,前2字的拼音首字母為y),鑒定為:假长捧。為了探索丁真宇宙還有多少發(fā)揮空間,我想窮舉一下這個(gè)yy組合數(shù)量有多少種吻贿。
Java實(shí)現(xiàn)
首先我們要拿到中文漢字的集合串结,這里用的是pinyin4j庫(kù)的數(shù)據(jù)集:
數(shù)據(jù)集分兩列,左列為漢字的unicode編碼舅列,右側(cè)為該漢字對(duì)應(yīng)的拼音奉芦,有些漢字是多拼音。我要做的便是將他重新映射為y拼音首字母開(kāi)頭對(duì)應(yīng)的漢字?jǐn)?shù)組剧蹂。
實(shí)現(xiàn)如下:
import com.alibaba.fastjson.JSON;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public static void main(String[] args) throws IOException {
long count = 0;
Map<String, List<Character>> map = new HashMap<>();
final String resourceName = "/pinyindb/unicode_to_hanyu_pinyin.txt";
try (BufferedReader bReader = new BufferedReader(new InputStreamReader(PinyinHelper.class.getResourceAsStream(resourceName)))) {
String line;
while ((line = bReader.readLine()) != null) {
String[] lineArr = line.split(" ");
String pinyin = lineArr[1].substring(1, lineArr[1].length() - 1);
String[] pinyinArr = pinyin.split(",");
for (String py : pinyinArr) {
if (py.charAt(0) == 'y') {
count++;
String hex = lineArr[0];
int decimal = Integer.parseInt(hex,16);
char chinese = (char)decimal;
if (map.containsKey(py)) {
List<Character> list = map.get(py);
list.add(chinese);
map.put(py,list);
} else {
List<Character> list = new ArrayList<>();
list.add(chinese);
map.put(py,list);
}
}
}
}
System.out.println("數(shù)量:"+count+"集合:"+JSON.toJSONString(map));
}
}
結(jié)果
運(yùn)行后声功,得到y(tǒng)拼音首字母開(kāi)頭的漢字有2084個(gè),其中包含簡(jiǎn)體字和繁體字宠叼,哪怕算是一半繁體字先巴,也還有1000簡(jiǎn)體字其爵,如果再排除疊字丁真(目前我還沒(méi)見(jiàn)過(guò)云云丁真這樣的組合,一般沒(méi)啥含義伸蚯,忽略不計(jì))摩渺,還有部分語(yǔ)氣詞類(lèi)的漢字,比如“喲”剂邮,“唷”等摇幻,然后計(jì)算結(jié)果:950x949=901550,90萬(wàn)挥萌!
我的評(píng)價(jià)是未來(lái)可期4乱觥(贏^^贏)