fork download
  1. process.stdin.resume();
  2. process.stdin.setEncoding('utf8');
  3.  
  4. var remainder = '';
  5. var inputLines = [];
  6.  
  7. process.stdin.on('data', function(chunk) {
  8. var lines = chunk.toString().split('\n');
  9. lines.unshift(remainder + lines.shift());
  10. remainder = lines.pop();
  11. lines.forEach(function(line) {
  12. if(line === '42'){
  13. process.exit();
  14. }
  15. if(line.trim() !== ''){
  16. inputLines.push(line);
  17. }
  18. });
  19. });
  20.  
  21. process.stdin.on('end', function() {
  22. var s = (inputLines[0] || remainder).trim();
  23. var n = s.length;
  24.  
  25. var prefix = new Array(n);
  26. var balance = 0;
  27. for (var i = 0; i < n; i++) {
  28. if (s[i] === '(') {
  29. balance++;
  30. } else {
  31. balance--;
  32. }
  33. prefix[i] = balance;
  34. }
  35.  
  36. if (balance !== 2 && balance !== -2) {
  37. process.stdout.write('0');
  38. return;
  39. }
  40.  
  41. var minPrefix = new Array(n);
  42. minPrefix[0] = prefix[0];
  43. for (var i = 1; i < n; i++) {
  44. minPrefix[i] = Math.min(minPrefix[i - 1], prefix[i]);
  45. }
  46.  
  47. var minSuffix = new Array(n);
  48. minSuffix[n - 1] = prefix[n - 1];
  49. for (var i = n - 2; i >= 0; i--) {
  50. minSuffix[i] = Math.min(prefix[i], minSuffix[i + 1]);
  51. }
  52.  
  53. var ans = 0;
  54. if (balance === 2) {
  55. for (var i = 0; i < n; i++) {
  56. if (s[i] === '(') {
  57. if (i > 0 && minPrefix[i - 1] < 0) continue;
  58. if (minSuffix[i] >= 2) ans++;
  59. }
  60. }
  61. } else {
  62. for (var i = 0; i < n; i++) {
  63. if (s[i] === ')') {
  64. if (i > 0 && minPrefix[i - 1] < 0) continue;
  65. if (minSuffix[i] >= -2) ans++;
  66. }
  67. }
  68. }
  69.  
  70. process.stdout.write(ans.toString());
  71. });
  72.  
Success #stdin #stdout 0.09s 36072KB
stdin
((())())
stdout
Standard output is empty