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には機種依存文字を含んで構わない。
class Ideone
{
// static final Charset CHARSET = Charset.forName("MS932");
static final Charset CHARSET = Charset.forName("Shift-JIS");
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;
}
}
aW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKCi8v44OX44Ot44Kw44Op44Of44Oz44Kw44Gu44GK6aGM44K544OsIFBhcnQxNSAKLy9tZXZpdXMuNWNoLm5ldC90ZXN0L3JlYWQuY2dpL3RlY2gvMTU2NDMxMDM5Ny85MzIKLy8KLy85MzIg5ZCN5YmN77ya44OH44OV44Kp44Or44OI44Gu5ZCN54Sh44GX44GV44KTW10g5oqV56i/5pel77yaMjAxOS8xMS8xMCjml6UpIDIxOjM3OjQ2Ljc4IElEOk9LN3gvN1lPCi8v5paH5a2X44Kz44O844OJ44GM44K344OV44OISklT44Gn44KCVW5pY29kZeOBp+OCgjPjgaTku6XkuIrjga7pgKPnlarjgajjgarjgovmloflrZfliJfvvIjmnIDplbfkuIDoh7TvvInjgpLjgIEKLy/jgrPjg7zjg4nnr4Tlm7LjgajjgajjgoLjgavjgZnjgbnjgabooajnpLrjgZvjgojjgILkvovjgYjjgbDjgIHjgZ3jgozjgonjga7jgYbjgaHjga4x44Gk44Gr6Zai44GZ44KL6KGo56S644Gv44CBCi8vCi8vODI0Ri4uODI1OAovL0ZGMTAuLkZGMTkKLy/vvJDvvJHvvJLvvJPvvJTvvJXvvJbvvJbvvJfvvJjvvJkKLy8KLy/jgajjgarjgovjgILjgarjgYrjgIHjgrfjg5Xjg4hKSVPjgavjga/mqZ/nqK7kvp3lrZjmloflrZfjgpLlkKvjgpPjgafmp4vjgo/jgarjgYTjgIIKY2xhc3MgSWRlb25lCnsKLy8gIHN0YXRpYyBmaW5hbCBDaGFyc2V0IENIQVJTRVQgPSBDaGFyc2V0LmZvck5hbWUoIk1TOTMyIik7CiAgICBzdGF0aWMgZmluYWwgQ2hhcnNldCBDSEFSU0VUID0gQ2hhcnNldC5mb3JOYW1lKCJTaGlmdC1KSVMiKTsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIGludCB1ID0gMDsKICAgICAgICBpbnQgYyA9IGNvbnZlcnQodSk7CiAgICAgICAgZm9yIChpbnQgdW5pY29kZSA9IDE7IHVuaWNvZGUgPCAxMDQ4NTc2ICsgNjU1MzY7IHVuaWNvZGUrKykKICAgICAgICB7CiAgICAgICAgICAgIGludCBjb2RlID0gY29udmVydCh1bmljb2RlKTsKICAgICAgICAgICAgaWYgKHVuaWNvZGUgLSB1ICE9IGNvZGUgLSBjKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgbGVuID0gdW5pY29kZSAtIHU7CiAgICAgICAgICAgICAgICBpZiAobGVuID49IDMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IHU7IGkgPCB1bmljb2RlOyBpKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZENvZGVQb2ludChpKTsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiVU5JQ09ERTolWC4uJVggJXM6JVguLiVYICVzJW4iLCB1LCB1ICsgbGVuIC0gMSwgQ0hBUlNFVCwgYywgYyArIGxlbiAtIDEsIHNiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHUgPSB1bmljb2RlOwogICAgICAgICAgICAgICAgYyA9IGNvZGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGludCBjb252ZXJ0KGludCB1bmljb2RlKQogICAgewogICAgICAgIGNoYXJbXSB1dGYxNiA9IENoYXJhY3Rlci50b0NoYXJzKHVuaWNvZGUpOwogICAgICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmcudmFsdWVPZih1dGYxNik7CiAgICAgICAgcmV0dXJuIGJ5dGVzVG9JbnQoc3RyaW5nLmdldEJ5dGVzKENIQVJTRVQpKTsKICAgIH0KCiAgICBzdGF0aWMgaW50IGJ5dGVzVG9JbnQoYnl0ZS4uLiBieXRlcykKICAgIHsKICAgICAgICBpbnQgcmVzdWx0ID0gMDsKICAgICAgICBmb3IgKGJ5dGUgYiA6IGJ5dGVzKQogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgPDwgOCB8IGIgJiAweEZGOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Cn0K