fork download
  1. // ↓無視ここから
  2. process.stdin.resume();
  3. process.stdin.setEncoding('utf8');
  4.  
  5. // your code goes here
  6. const lodash = {
  7. union:function union(arr1, arr2) {
  8. var _uniq=function(arr) {
  9. return arr.filter(function(elm, ind, ary) {
  10. return ary.indexOf(elm) === ind; });
  11. };
  12. var con = arr1.concat(arr2);
  13. var rtn = _uniq(con);
  14. return rtn;
  15. }
  16. }
  17. const nodeRange = {
  18. range:function(a, b, step) {
  19. if (arguments.length === 1) {
  20. b = a;
  21. a = 0;
  22. }
  23. step = step || 1;
  24. var x, r = [];
  25. for (x = a; (b - x) * step > 0; x += step) {
  26. r.push(x);
  27. }
  28. return r;
  29. }
  30. };
  31. // ↑無視ここまで
  32.  
  33.  
  34.  
  35. // ↑は以下の代わり
  36. // const lodash = require('lodash');
  37. // const nodeRange = require("range");
  38.  
  39. // lodash.union(a,b)→aとbの和集合
  40. // nodeRange.range→Pythonのrangeと同等
  41.  
  42. convertAnchor = (anchor) => {
  43. const rangeList = anchor.split(",").map(item => {
  44. if (item.indexOf("-") >= 0) {
  45. return item
  46. .split("-")
  47. .map(x => Number(x))
  48. .sort((a, b) => a - b);
  49. } else {
  50. return [Number(item), Number(item)];
  51. }
  52. });
  53. let targets = [];
  54. rangeList.forEach(range => {
  55. const start = range[0];
  56. const end = range[1];
  57. if (start === 0 && end === 0)
  58. return;
  59. else if (start === 0 && end > 0 && end <= 10000)
  60. targets = lodash.union(targets, nodeRange.range(1, end + 1));
  61. else if (start > 0 && start <= 10000 && end > 0 && end <= 10000)
  62. targets = lodash.union(targets, nodeRange.range(start, end + 1));
  63. else if (start > 0 && start <= 10000 && end > 10000)
  64. targets = lodash.union(targets, nodeRange.range(start, 10000 + 1));
  65. else if (start > 10000 && end > 10000)
  66. return;
  67. });
  68. return targets.sort((a, b) => a - b);
  69. }
  70.  
  71. // 基本
  72. console.log(convertAnchor("1"))
  73. console.log(convertAnchor("1-3"))
  74. console.log(convertAnchor("1,3"))
  75. console.log(convertAnchor("1,1"))
  76. console.log(convertAnchor("1-1"))
  77. console.log(convertAnchor("000001"))
  78.  
  79. // 有効範囲外の除外(1〜10000まで有効)
  80. console.log(convertAnchor("0"))
  81. console.log(convertAnchor("28944"))
  82. console.log(convertAnchor("0-2,9998-10002"))
  83.  
  84. // ソート
  85. console.log(convertAnchor("3,4,1,2"))
  86.  
  87. // 範囲指定が逆
  88. console.log(convertAnchor("4-1"))
  89.  
  90.  
  91.  
  92.  
  93.  
Success #stdin #stdout 0.09s 26440KB
stdin
Standard input is empty
stdout
[ 1 ]
[ 1, 2, 3 ]
[ 1, 3 ]
[ 1 ]
[ 1 ]
[ 1 ]
[]
[]
[ 1, 2, 9998, 9999, 10000 ]
[ 1, 2, 3, 4 ]
[ 1, 2, 3, 4 ]