import java.nio.charset.Charset;
//プログラミングのお題スレ Part15
//mevius.5ch.net/test/read.cgi/tech/1564310397/932
//
//932 名前:デフォルトの名無しさん[] 投稿日:2019/11/10(日) 21:37:46.78 ID:OK7x/7YO
//文字コードがシフトJISでもUnicodeでも3つ以上の連番となる文字列(最長一致)を、
//コード範囲とともにすべて表示せよ。例えば、それらのうちの1つに関する表示は、
//
//824F..8258
//FF10..FF19
//01234566789
//
//となる。なお、シフトJISには機種依存文字を含んで構わない。
// 940 名前:デフォルトの名無しさん[] 投稿日:2019/11/11(月) 22:37:18.90 ID:hxYpUSvR
// >>935
// 正解。Windowsには機種依存文字
//
// 8754..875D
// 2160..2169
// ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ
//
// などもあるが、機種依存文字を含んでも構わないという出題だったので、
// 含まなくてもOK。
class Ideone
{
// static final Charset CHARSET = Charset.forName("MS932");
// static final Charset CHARSET = Charset.forName("Shift-JIS");
// static final Charset CHARSET = Charset.forName("x-MS932_0213");
static final Charset CHARSET = Charset.forName("x-SJIS_0213");
public static void main
(String[] args
) {
int u = 0;
int c = convert(u);
for (int unicode = 1; unicode < 1048576 + 65536; unicode++)
{
int code = convert(unicode);
if (unicode - u != code - c)
{
int len = unicode - u;
if (len >= 3)
{
StringBuilder sb = new StringBuilder();
for (int i = u; i < unicode; i++)
sb.appendCodePoint(i);
System.
out.
printf("UNICODE:%X..%X %s:%X..%X %s%n", u, u
+ len
- 1, CHARSET, c, c
+ len
- 1, sb
); }
u = unicode;
c = code;
}
}
}
static int convert(int unicode)
{
return bytesToInt(string.getBytes(CHARSET));
}
static int bytesToInt(byte... bytes)
{
int result = 0;
for (byte b : bytes)
result = result << 8 | b & 0xFF;
return result;
}
}
aW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKIAovL+ODl+ODreOCsOODqeODn+ODs+OCsOOBruOBiumhjOOCueODrCBQYXJ0MTUgCi8vbWV2aXVzLjVjaC5uZXQvdGVzdC9yZWFkLmNnaS90ZWNoLzE1NjQzMTAzOTcvOTMyCi8vCi8vOTMyIOWQjeWJje+8muODh+ODleOCqeODq+ODiOOBruWQjeeEoeOBl+OBleOCk1tdIOaKleeov+aXpe+8mjIwMTkvMTEvMTAo5pelKSAyMTozNzo0Ni43OCBJRDpPSzd4LzdZTwovL+aWh+Wtl+OCs+ODvOODieOBjOOCt+ODleODiEpJU+OBp+OCglVuaWNvZGXjgafjgoIz44Gk5Lul5LiK44Gu6YCj55Wq44Go44Gq44KL5paH5a2X5YiX77yI5pyA6ZW35LiA6Ie077yJ44KS44CBCi8v44Kz44O844OJ56+E5Zuy44Go44Go44KC44Gr44GZ44G544Gm6KGo56S644Gb44KI44CC5L6L44GI44Gw44CB44Gd44KM44KJ44Gu44GG44Gh44GuMeOBpOOBq+mWouOBmeOCi+ihqOekuuOBr+OAgQovLwovLzgyNEYuLjgyNTgKLy9GRjEwLi5GRjE5Ci8v77yQ77yR77yS77yT77yU77yV77yW77yW77yX77yY77yZCi8vCi8v44Go44Gq44KL44CC44Gq44GK44CB44K344OV44OISklT44Gr44Gv5qmf56iu5L6d5a2Y5paH5a2X44KS5ZCr44KT44Gn5qeL44KP44Gq44GE44CCCgovLyA5NDAg5ZCN5YmN77ya44OH44OV44Kp44Or44OI44Gu5ZCN54Sh44GX44GV44KTW10g5oqV56i/5pel77yaMjAxOS8xMS8xMSjmnIgpIDIyOjM3OjE4LjkwIElEOmh4WXBVU3ZSCi8vID4+OTM1Ci8vIOato+ino+OAgldpbmRvd3Pjgavjga/mqZ/nqK7kvp3lrZjmloflrZcKLy8gCi8vIDg3NTQuLjg3NUQKLy8gMjE2MC4uMjE2OQovLyDihaDihaHihaLihaPihaTihaXihabihafihajihakKLy8gCi8vIOOBquOBqeOCguOBguOCi+OBjOOAgeapn+eoruS+neWtmOaWh+Wtl+OCkuWQq+OCk+OBp+OCguani+OCj+OBquOBhOOBqOOBhOOBhuWHuumhjOOBoOOBo+OBn+OBruOBp+OAgQovLyDlkKvjgb7jgarjgY/jgabjgoJPS+OAggpjbGFzcyBJZGVvbmUKewovLyAgICBzdGF0aWMgZmluYWwgQ2hhcnNldCBDSEFSU0VUID0gQ2hhcnNldC5mb3JOYW1lKCJNUzkzMiIpOwovLyAgICBzdGF0aWMgZmluYWwgQ2hhcnNldCBDSEFSU0VUID0gQ2hhcnNldC5mb3JOYW1lKCJTaGlmdC1KSVMiKTsKICAgIC8vIHN0YXRpYyBmaW5hbCBDaGFyc2V0IENIQVJTRVQgPSBDaGFyc2V0LmZvck5hbWUoIngtTVM5MzJfMDIxMyIpOwoJc3RhdGljIGZpbmFsIENoYXJzZXQgQ0hBUlNFVCA9IENoYXJzZXQuZm9yTmFtZSgieC1TSklTXzAyMTMiKTsKIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgIHsKICAgICAgICBpbnQgdSA9IDA7CiAgICAgICAgaW50IGMgPSBjb252ZXJ0KHUpOwogICAgICAgIGZvciAoaW50IHVuaWNvZGUgPSAxOyB1bmljb2RlIDwgMTA0ODU3NiArIDY1NTM2OyB1bmljb2RlKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgY29kZSA9IGNvbnZlcnQodW5pY29kZSk7CiAgICAgICAgICAgIGlmICh1bmljb2RlIC0gdSAhPSBjb2RlIC0gYykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGxlbiA9IHVuaWNvZGUgLSB1OwogICAgICAgICAgICAgICAgaWYgKGxlbiA+PSAzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSB1OyBpIDwgdW5pY29kZTsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmRDb2RlUG9pbnQoaSk7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIlVOSUNPREU6JVguLiVYICVzOiVYLi4lWCAlcyVuIiwgdSwgdSArIGxlbiAtIDEsIENIQVJTRVQsIGMsIGMgKyBsZW4gLSAxLCBzYik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1ID0gdW5pY29kZTsKICAgICAgICAgICAgICAgIGMgPSBjb2RlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogCiAgICBzdGF0aWMgaW50IGNvbnZlcnQoaW50IHVuaWNvZGUpCiAgICB7CiAgICAgICAgY2hhcltdIHV0ZjE2ID0gQ2hhcmFjdGVyLnRvQ2hhcnModW5pY29kZSk7CiAgICAgICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZy52YWx1ZU9mKHV0ZjE2KTsKICAgICAgICByZXR1cm4gYnl0ZXNUb0ludChzdHJpbmcuZ2V0Qnl0ZXMoQ0hBUlNFVCkpOwogICAgfQogCiAgICBzdGF0aWMgaW50IGJ5dGVzVG9JbnQoYnl0ZS4uLiBieXRlcykKICAgIHsKICAgICAgICBpbnQgcmVzdWx0ID0gMDsKICAgICAgICBmb3IgKGJ5dGUgYiA6IGJ5dGVzKQogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgPDwgOCB8IGIgJiAweEZGOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Cn0=