fork download
  1. import java.util.function.IntPredicate;
  2.  
  3. /*
  4. プログラミングのお題スレ Part15
  5. //mevius.5ch.net/test/read.cgi/tech/1564310397/245
  6.  
  7. 245 名前:デフォルトの名無しさん[sage] 投稿日:2019/08/31(土) 08:45:29.92 ID:h26kuCJS
  8. お題
  9. >>228 を求めることができる
  10. 特に最適化を施さないナイーブな実装(例えば>>238 )を書いて
  11. その実行にかかる時間(ミリ秒、秒等)を計測し出力してください
  12.  
  13. なお遅い言語処理系で1億以下が無理な場合は1千万以下でも構いません
  14.  
  15.  
  16. > 228 名前:デフォルトの名無しさん[] 投稿日:2019/08/30(金) 06:09:58.43 ID:N+Bub+CM
  17. > お題
  18. > 1億以下の同じ数字でできている数(1,22,777など)をすべて表示する
  19.  
  20.  
  21. > 238 名前:デフォルトの名無しさん[sage] 投稿日:2019/08/30(金) 16:39:32.33 ID:BnHn7wdj
  22. > 遅いけど perl5
  23. > for (1..100_000_000) { print if s{\A (.) \1* \z}{$& }x }
  24. > 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 111 222 333 444 555 666 777 888 999
  25. > 1111 2222 3333 4444 5555 6666 7777 8888 9999 11111 22222 33333 44444 55555 66666
  26. > 77777 88888 99999 111111 222222 333333 444444 555555 666666 777777 888888 999999
  27. > 1111111 2222222 3333333 4444444 5555555 6666666 7777777 8888888 9999999 11111111
  28. > 22222222 33333333 44444444 55555555 66666666 77777777 88888888 99999999
  29.  */
  30. class Ideone
  31. {
  32. public static void main(String[] args)
  33. {
  34. // Intel Pentium G6950@2.8GHzでの1億以下での結果
  35. // 整数演算: 1,073ms
  36. // 正規表現: 46,450ms
  37.  
  38. Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
  39. test("整数演算", 1_0000_0000, Ideone::hoge);
  40. test("正規表現", 1000_0000, Ideone::hage);
  41.  
  42. }
  43.  
  44. static void test(String s, int n, IntPredicate predicate)
  45. {
  46. long st = System.currentTimeMillis();
  47. for (int i = 1; i <= n; i++)
  48. {
  49. if (predicate.test(i)) System.out.println(i);
  50. }
  51. long et = System.currentTimeMillis();
  52. System.out.printf("%s(%,d): %,dms%n", s, n, et - st);
  53. }
  54.  
  55. static boolean hoge(int i)
  56. {
  57. for (int n = i % 10; i != 0; i /= 10)
  58. if (i % 10 != n) return false;
  59. return true;
  60. }
  61.  
  62. static boolean hage(int i)
  63. {
  64. return Integer.toString(i).matches("(.)\\1*");
  65. }
  66. }
  67.  
Success #stdin #stdout 3.16s 109204KB
stdin
Standard input is empty
stdout
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
111
222
333
444
555
666
777
888
999
1111
2222
3333
4444
5555
6666
7777
8888
9999
11111
22222
33333
44444
55555
66666
77777
88888
99999
111111
222222
333333
444444
555555
666666
777777
888888
999999
1111111
2222222
3333333
4444444
5555555
6666666
7777777
8888888
9999999
11111111
22222222
33333333
44444444
55555555
66666666
77777777
88888888
99999999
整数演算(100,000,000): 495ms
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
111
222
333
444
555
666
777
888
999
1111
2222
3333
4444
5555
6666
7777
8888
9999
11111
22222
33333
44444
55555
66666
77777
88888
99999
111111
222222
333333
444444
555555
666666
777777
888888
999999
1111111
2222222
3333333
4444444
5555555
6666666
7777777
8888888
9999999
正規表現(10,000,000): 2,592ms