fork download
  1. import java.util.*;
  2. class M{
  3. static int l,
  4. k;
  5. static char[][] z;
  6. static Set p = new HashSet();
  7.  
  8. static String c(String[] a){
  9. int x=0,
  10. y=0,
  11. n,
  12. t,
  13. u,
  14. v,
  15. w = t = u = v = -1;
  16. l = a.length;
  17. k = a[0].length();
  18. z = new char[l][k];
  19. for(String s:a){
  20. for(char c:s.toCharArray()){
  21. z[x][y++] = c;
  22. }
  23. x++;
  24. y = 0;
  25. }
  26. for(x=0; x<l; x++){
  27. for(y=0; y<k; y++){
  28. n = 0;
  29. if(z[x][y] > 32){ // [x,y] is not a space
  30. if(x < 1 | (x > 0 && z[x-1][y] < 33)){
  31. n++;
  32. }
  33. if(y < 1 | (y > 0 && z[x][y-1] < 33)){
  34. n++;
  35. }
  36. if(x > l-2 | (x < l-1 && z[x+1][y] < 33)){
  37. n++;
  38. }
  39. if(y > k-2 | (y < k-1 && z[x][y+1] < 33)){
  40. n++;
  41. }
  42. }
  43. if(n > 2 & t < 0){
  44. t = x;
  45. u = y;
  46. }
  47. if(n > 2 & t > v){
  48. v = x;
  49. w = y;
  50. }
  51. }
  52. }
  53. if(v+w > t+u){
  54. p(t, u);
  55. return n(""+z[t][u], t, u);
  56. }
  57. p(v, w);
  58. return n(""+z[v][w], v, w);
  59. }
  60.  
  61. static String n(String r, int x, int y){
  62. int a,b;
  63. if(x > 0 && z[a=x-1][b=y] > 32 & q(a,b)){
  64. p(a, b);
  65. return n(r+z[a][b], a, b);
  66. }
  67. if(y > 0 && z[a=x][b=y-1] > 32 & q(a,b)){
  68. p(a, b);
  69. return n(r+z[a][b], a, b);
  70. }
  71. if(x < l-1 && z[a=x+1][b=y] > 32 & q(a,b)){
  72. p(a, b);
  73. return n(r+z[a][b], a, b);
  74. }
  75. if(y < k-1 && z[a=x][b=y+1] > 32 & q(a, b)){
  76. p(a, b);
  77. return n(r+z[a][b], a, b);
  78. }
  79. return r;
  80. }
  81.  
  82. static boolean q(int x, int y){
  83. return !p.contains(x+","+y);
  84. }
  85.  
  86. static void p(int x, int y){
  87. p.add(x+","+y);
  88. }
  89.  
  90. public static void main(String[] a){
  91. System.out.println(c(new String[]{ "Hel ",
  92. " l rin",
  93. " o,IAmASt g",
  94. " S",
  95. " !ekan" }));
  96. p = new HashSet();
  97. System.out.println(c(new String[]{ "Python" }));
  98. p = new HashSet();
  99. System.out.println(c(new String[]{ "P ngPu Code ",
  100. "r i z d G",
  101. "o m z n o",
  102. "gram lesA lf" }));
  103. p = new HashSet();
  104. System.out.println(c(new String[]{ " ~ zyx tsr XWVUTSR",
  105. " }|{ wvu q Y Q",
  106. "! p Z `ab P",
  107. "\"#$ 6789:; o [ _ c O",
  108. " % 5 < n \\]^ d N",
  109. "('& 432 = m e M",
  110. ") 1 > lkjihgf L",
  111. "*+,-./0 ? K",
  112. " @ABCDEFGHIJ" }));
  113. p = new HashSet();
  114. System.out.println(c(new String[]{ " tSyrep ",
  115. " r p ",
  116. " in Sli ",
  117. " g Sile",
  118. " Snakes n",
  119. "Ser ylt",
  120. "a eh ilS ",
  121. "fe w t ",
  122. " emo h ",
  123. " Sre " }));
  124. }
  125. }
Success #stdin #stdout 0.03s 711168KB
stdin
Standard input is empty
stdout
Hello,IAmAStringSnake!
Python
ProgrammingPuzzlesAndCodeGolf
~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
SlipperyStringSnakesSilentlySlitherSomewhereSafe