offcode 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1038) hide show
  1. package/README.md +38 -2
  2. package/data/index.json +1 -0
  3. package/data/problems/01-matrix.json +1 -0
  4. package/data/problems/1-bit-and-2-bit-characters.json +1 -0
  5. package/data/problems/132-pattern.json +1 -0
  6. package/data/problems/2-keys-keyboard.json +1 -0
  7. package/data/problems/24-game.json +1 -0
  8. package/data/problems/3sum-closest.json +1 -0
  9. package/data/problems/3sum-smaller.json +1 -0
  10. package/data/problems/3sum-with-multiplicity.json +1 -0
  11. package/data/problems/3sum.json +1 -0
  12. package/data/problems/4-keys-keyboard.json +1 -0
  13. package/data/problems/4sum-ii.json +1 -0
  14. package/data/problems/4sum.json +1 -0
  15. package/data/problems/accounts-merge.json +1 -0
  16. package/data/problems/add-binary.json +1 -0
  17. package/data/problems/add-bold-tag-in-string.json +1 -0
  18. package/data/problems/add-digits.json +1 -0
  19. package/data/problems/add-one-row-to-tree.json +1 -0
  20. package/data/problems/add-strings.json +1 -0
  21. package/data/problems/add-to-array-form-of-integer.json +1 -0
  22. package/data/problems/add-two-numbers-ii.json +1 -0
  23. package/data/problems/add-two-numbers.json +1 -0
  24. package/data/problems/additive-number.json +1 -0
  25. package/data/problems/advantage-shuffle.json +1 -0
  26. package/data/problems/alien-dictionary.json +1 -0
  27. package/data/problems/all-nodes-distance-k-in-binary-tree.json +1 -0
  28. package/data/problems/all-oone-data-structure.json +1 -0
  29. package/data/problems/all-paths-from-source-to-target.json +1 -0
  30. package/data/problems/all-possible-full-binary-trees.json +1 -0
  31. package/data/problems/ambiguous-coordinates.json +1 -0
  32. package/data/problems/android-unlock-patterns.json +1 -0
  33. package/data/problems/arithmetic-slices-ii-subsequence.json +1 -0
  34. package/data/problems/arithmetic-slices.json +1 -0
  35. package/data/problems/arranging-coins.json +1 -0
  36. package/data/problems/array-nesting.json +1 -0
  37. package/data/problems/array-of-doubled-pairs.json +1 -0
  38. package/data/problems/array-partition.json +1 -0
  39. package/data/problems/assign-cookies.json +1 -0
  40. package/data/problems/asteroid-collision.json +1 -0
  41. package/data/problems/available-captures-for-rook.json +1 -0
  42. package/data/problems/average-of-levels-in-binary-tree.json +1 -0
  43. package/data/problems/backspace-string-compare.json +1 -0
  44. package/data/problems/bag-of-tokens.json +1 -0
  45. package/data/problems/balanced-binary-tree.json +1 -0
  46. package/data/problems/base-7.json +1 -0
  47. package/data/problems/baseball-game.json +1 -0
  48. package/data/problems/basic-absolute-value.json +1 -0
  49. package/data/problems/basic-array-max.json +1 -0
  50. package/data/problems/basic-array-min.json +1 -0
  51. package/data/problems/basic-array-sum-rec.json +1 -0
  52. package/data/problems/basic-array-sum.json +1 -0
  53. package/data/problems/basic-average-floor.json +1 -0
  54. package/data/problems/basic-bubble-sort.json +1 -0
  55. package/data/problems/basic-calculator-ii.json +1 -0
  56. package/data/problems/basic-calculator-iii.json +1 -0
  57. package/data/problems/basic-calculator-iv.json +1 -0
  58. package/data/problems/basic-calculator.json +1 -0
  59. package/data/problems/basic-collatz-steps.json +1 -0
  60. package/data/problems/basic-contains-value.json +1 -0
  61. package/data/problems/basic-count-above.json +1 -0
  62. package/data/problems/basic-count-char.json +1 -0
  63. package/data/problems/basic-count-digits.json +1 -0
  64. package/data/problems/basic-count-evens.json +1 -0
  65. package/data/problems/basic-count-pairs.json +1 -0
  66. package/data/problems/basic-count-vowels.json +1 -0
  67. package/data/problems/basic-count-words.json +1 -0
  68. package/data/problems/basic-countdown.json +1 -0
  69. package/data/problems/basic-double-array.json +1 -0
  70. package/data/problems/basic-factorial-rec.json +1 -0
  71. package/data/problems/basic-factorial.json +1 -0
  72. package/data/problems/basic-fibonacci.json +1 -0
  73. package/data/problems/basic-find-index.json +1 -0
  74. package/data/problems/basic-gcd.json +1 -0
  75. package/data/problems/basic-grade-letter.json +1 -0
  76. package/data/problems/basic-has-duplicate.json +1 -0
  77. package/data/problems/basic-is-even.json +1 -0
  78. package/data/problems/basic-is-leap-year.json +1 -0
  79. package/data/problems/basic-is-sorted.json +1 -0
  80. package/data/problems/basic-max-frequency.json +1 -0
  81. package/data/problems/basic-max-of-three.json +1 -0
  82. package/data/problems/basic-max-of-two.json +1 -0
  83. package/data/problems/basic-palindrome-text.json +1 -0
  84. package/data/problems/basic-power-rec.json +1 -0
  85. package/data/problems/basic-power.json +1 -0
  86. package/data/problems/basic-repeat-string.json +1 -0
  87. package/data/problems/basic-reverse-array.json +1 -0
  88. package/data/problems/basic-reverse-number.json +1 -0
  89. package/data/problems/basic-reverse-text-rec.json +1 -0
  90. package/data/problems/basic-reverse-text.json +1 -0
  91. package/data/problems/basic-second-largest.json +1 -0
  92. package/data/problems/basic-sort-two.json +1 -0
  93. package/data/problems/basic-staircase.json +1 -0
  94. package/data/problems/basic-string-length.json +1 -0
  95. package/data/problems/basic-sum-1-to-n.json +1 -0
  96. package/data/problems/basic-sum-digits-rec.json +1 -0
  97. package/data/problems/basic-sum-multiples.json +1 -0
  98. package/data/problems/basic-sum-of-digits.json +1 -0
  99. package/data/problems/basic-temperature-advice.json +1 -0
  100. package/data/problems/basic-to-upper.json +1 -0
  101. package/data/problems/basic-triangle-sum.json +1 -0
  102. package/data/problems/battleships-in-a-board.json +1 -0
  103. package/data/problems/beautiful-arrangement-ii.json +1 -0
  104. package/data/problems/beautiful-arrangement.json +1 -0
  105. package/data/problems/beautiful-array.json +1 -0
  106. package/data/problems/best-meeting-point.json +1 -0
  107. package/data/problems/best-time-to-buy-and-sell-stock-ii.json +1 -0
  108. package/data/problems/best-time-to-buy-and-sell-stock-iii.json +1 -0
  109. package/data/problems/best-time-to-buy-and-sell-stock-iv.json +1 -0
  110. package/data/problems/best-time-to-buy-and-sell-stock-with-cooldown.json +1 -0
  111. package/data/problems/best-time-to-buy-and-sell-stock-with-transaction-fee.json +1 -0
  112. package/data/problems/best-time-to-buy-and-sell-stock.json +1 -0
  113. package/data/problems/binary-gap.json +1 -0
  114. package/data/problems/binary-number-with-alternating-bits.json +1 -0
  115. package/data/problems/binary-search-tree-iterator.json +1 -0
  116. package/data/problems/binary-search.json +1 -0
  117. package/data/problems/binary-subarrays-with-sum.json +1 -0
  118. package/data/problems/binary-tree-cameras.json +1 -0
  119. package/data/problems/binary-tree-inorder-traversal.json +1 -0
  120. package/data/problems/binary-tree-level-order-traversal-ii.json +1 -0
  121. package/data/problems/binary-tree-level-order-traversal.json +1 -0
  122. package/data/problems/binary-tree-longest-consecutive-sequence-ii.json +1 -0
  123. package/data/problems/binary-tree-longest-consecutive-sequence.json +1 -0
  124. package/data/problems/binary-tree-maximum-path-sum.json +1 -0
  125. package/data/problems/binary-tree-paths.json +1 -0
  126. package/data/problems/binary-tree-postorder-traversal.json +1 -0
  127. package/data/problems/binary-tree-preorder-traversal.json +1 -0
  128. package/data/problems/binary-tree-pruning.json +1 -0
  129. package/data/problems/binary-tree-right-side-view.json +1 -0
  130. package/data/problems/binary-tree-tilt.json +1 -0
  131. package/data/problems/binary-tree-upside-down.json +1 -0
  132. package/data/problems/binary-tree-vertical-order-traversal.json +1 -0
  133. package/data/problems/binary-tree-zigzag-level-order-traversal.json +1 -0
  134. package/data/problems/binary-trees-with-factors.json +1 -0
  135. package/data/problems/binary-watch.json +1 -0
  136. package/data/problems/bitwise-and-of-numbers-range.json +1 -0
  137. package/data/problems/bitwise-ors-of-subarrays.json +1 -0
  138. package/data/problems/boats-to-save-people.json +1 -0
  139. package/data/problems/bold-words-in-string.json +1 -0
  140. package/data/problems/bomb-enemy.json +1 -0
  141. package/data/problems/boundary-of-binary-tree.json +1 -0
  142. package/data/problems/brick-wall.json +1 -0
  143. package/data/problems/bricks-falling-when-hit.json +1 -0
  144. package/data/problems/broken-calculator.json +1 -0
  145. package/data/problems/buddy-strings.json +1 -0
  146. package/data/problems/build-a-matrix-with-conditions.json +1 -0
  147. package/data/problems/bulb-switcher-ii.json +1 -0
  148. package/data/problems/bulb-switcher.json +1 -0
  149. package/data/problems/bulls-and-cows.json +1 -0
  150. package/data/problems/burst-balloons.json +1 -0
  151. package/data/problems/bus-routes.json +1 -0
  152. package/data/problems/can-i-win.json +1 -0
  153. package/data/problems/can-place-flowers.json +1 -0
  154. package/data/problems/candy-crush.json +1 -0
  155. package/data/problems/candy.json +1 -0
  156. package/data/problems/capacity-to-ship-packages-within-d-days.json +1 -0
  157. package/data/problems/car-fleet.json +1 -0
  158. package/data/problems/car-pooling.json +1 -0
  159. package/data/problems/card-flipping-game.json +1 -0
  160. package/data/problems/cat-and-mouse.json +1 -0
  161. package/data/problems/chalkboard-xor-game.json +1 -0
  162. package/data/problems/champagne-tower.json +1 -0
  163. package/data/problems/cheapest-flights-within-k-stops.json +1 -0
  164. package/data/problems/check-completeness-of-a-binary-tree.json +1 -0
  165. package/data/problems/cherry-pickup.json +1 -0
  166. package/data/problems/circular-array-loop.json +1 -0
  167. package/data/problems/climbing-stairs.json +1 -0
  168. package/data/problems/clone-graph.json +1 -0
  169. package/data/problems/closest-binary-search-tree-value-ii.json +1 -0
  170. package/data/problems/closest-binary-search-tree-value.json +1 -0
  171. package/data/problems/closest-leaf-in-a-binary-tree.json +1 -0
  172. package/data/problems/coin-change-ii.json +1 -0
  173. package/data/problems/coin-change.json +1 -0
  174. package/data/problems/coin-path.json +1 -0
  175. package/data/problems/combination-sum-ii.json +1 -0
  176. package/data/problems/combination-sum-iii.json +1 -0
  177. package/data/problems/combination-sum-iv.json +1 -0
  178. package/data/problems/combination-sum.json +1 -0
  179. package/data/problems/combinations.json +1 -0
  180. package/data/problems/compare-version-numbers.json +1 -0
  181. package/data/problems/complete-binary-tree-inserter.json +1 -0
  182. package/data/problems/complex-number-multiplication.json +1 -0
  183. package/data/problems/concatenated-words.json +1 -0
  184. package/data/problems/concatenation-of-array.json +1 -0
  185. package/data/problems/consecutive-numbers-sum.json +1 -0
  186. package/data/problems/construct-binary-tree-from-inorder-and-postorder-traversal.json +1 -0
  187. package/data/problems/construct-binary-tree-from-preorder-and-inorder-traversal.json +1 -0
  188. package/data/problems/construct-binary-tree-from-preorder-and-postorder-traversal.json +1 -0
  189. package/data/problems/construct-binary-tree-from-string.json +1 -0
  190. package/data/problems/construct-quad-tree.json +1 -0
  191. package/data/problems/construct-string-from-binary-tree.json +1 -0
  192. package/data/problems/construct-the-rectangle.json +1 -0
  193. package/data/problems/contain-virus.json +1 -0
  194. package/data/problems/container-with-most-water.json +1 -0
  195. package/data/problems/contains-duplicate-ii.json +1 -0
  196. package/data/problems/contains-duplicate-iii.json +1 -0
  197. package/data/problems/contains-duplicate.json +1 -0
  198. package/data/problems/contiguous-array.json +1 -0
  199. package/data/problems/continuous-subarray-sum.json +1 -0
  200. package/data/problems/convert-a-number-to-hexadecimal.json +1 -0
  201. package/data/problems/convert-binary-search-tree-to-sorted-doubly-linked-list.json +1 -0
  202. package/data/problems/convert-bst-to-greater-tree.json +1 -0
  203. package/data/problems/convert-sorted-array-to-binary-search-tree.json +1 -0
  204. package/data/problems/convert-sorted-list-to-binary-search-tree.json +1 -0
  205. package/data/problems/convex-polygon.json +1 -0
  206. package/data/problems/copy-list-with-random-pointer.json +1 -0
  207. package/data/problems/count-and-say.json +1 -0
  208. package/data/problems/count-binary-substrings.json +1 -0
  209. package/data/problems/count-complete-tree-nodes.json +1 -0
  210. package/data/problems/count-different-palindromic-subsequences.json +1 -0
  211. package/data/problems/count-good-nodes-in-binary-tree.json +1 -0
  212. package/data/problems/count-numbers-with-unique-digits.json +1 -0
  213. package/data/problems/count-of-range-sum.json +1 -0
  214. package/data/problems/count-of-smaller-numbers-after-self.json +1 -0
  215. package/data/problems/count-primes.json +1 -0
  216. package/data/problems/count-the-repetitions.json +1 -0
  217. package/data/problems/count-unique-characters-of-all-substrings-of-a-given-string.json +1 -0
  218. package/data/problems/count-univalue-subtrees.json +1 -0
  219. package/data/problems/counting-bits.json +1 -0
  220. package/data/problems/couples-holding-hands.json +1 -0
  221. package/data/problems/course-schedule-ii.json +1 -0
  222. package/data/problems/course-schedule-iii.json +1 -0
  223. package/data/problems/course-schedule-iv.json +1 -0
  224. package/data/problems/course-schedule.json +1 -0
  225. package/data/problems/cousins-in-binary-tree.json +1 -0
  226. package/data/problems/cracking-the-safe.json +1 -0
  227. package/data/problems/create-maximum-number.json +1 -0
  228. package/data/problems/custom-sort-string.json +1 -0
  229. package/data/problems/cut-off-trees-for-golf-event.json +1 -0
  230. package/data/problems/daily-temperatures.json +1 -0
  231. package/data/problems/data-stream-as-disjoint-intervals.json +1 -0
  232. package/data/problems/decode-string.json +1 -0
  233. package/data/problems/decode-ways-ii.json +1 -0
  234. package/data/problems/decode-ways.json +1 -0
  235. package/data/problems/decoded-string-at-index.json +1 -0
  236. package/data/problems/degree-of-an-array.json +1 -0
  237. package/data/problems/delete-and-earn.json +1 -0
  238. package/data/problems/delete-columns-to-make-sorted-ii.json +1 -0
  239. package/data/problems/delete-columns-to-make-sorted-iii.json +1 -0
  240. package/data/problems/delete-columns-to-make-sorted.json +1 -0
  241. package/data/problems/delete-leaves-with-a-given-value.json +1 -0
  242. package/data/problems/delete-node-in-a-bst.json +1 -0
  243. package/data/problems/delete-node-in-a-linked-list.json +1 -0
  244. package/data/problems/delete-operation-for-two-strings.json +1 -0
  245. package/data/problems/design-add-and-search-words-data-structure.json +1 -0
  246. package/data/problems/design-circular-deque.json +1 -0
  247. package/data/problems/design-circular-queue.json +1 -0
  248. package/data/problems/design-compressed-string-iterator.json +1 -0
  249. package/data/problems/design-excel-sum-formula.json +1 -0
  250. package/data/problems/design-hashmap.json +1 -0
  251. package/data/problems/design-hashset.json +1 -0
  252. package/data/problems/design-hit-counter.json +1 -0
  253. package/data/problems/design-in-memory-file-system.json +1 -0
  254. package/data/problems/design-linked-list.json +1 -0
  255. package/data/problems/design-log-storage-system.json +1 -0
  256. package/data/problems/design-phone-directory.json +1 -0
  257. package/data/problems/design-search-autocomplete-system.json +1 -0
  258. package/data/problems/design-snake-game.json +1 -0
  259. package/data/problems/design-tic-tac-toe.json +1 -0
  260. package/data/problems/design-twitter.json +1 -0
  261. package/data/problems/detect-capital.json +1 -0
  262. package/data/problems/detect-squares.json +1 -0
  263. package/data/problems/di-string-match.json +1 -0
  264. package/data/problems/diagonal-traverse.json +1 -0
  265. package/data/problems/diameter-of-binary-tree.json +1 -0
  266. package/data/problems/different-ways-to-add-parentheses.json +1 -0
  267. package/data/problems/distinct-subsequences-ii.json +1 -0
  268. package/data/problems/distinct-subsequences.json +1 -0
  269. package/data/problems/distribute-candies.json +1 -0
  270. package/data/problems/distribute-coins-in-binary-tree.json +1 -0
  271. package/data/problems/divide-two-integers.json +1 -0
  272. package/data/problems/domino-and-tromino-tiling.json +1 -0
  273. package/data/problems/dota2-senate.json +1 -0
  274. package/data/problems/dungeon-game.json +1 -0
  275. package/data/problems/edit-distance.json +1 -0
  276. package/data/problems/elimination-game.json +1 -0
  277. package/data/problems/employee-free-time.json +1 -0
  278. package/data/problems/employee-importance.json +1 -0
  279. package/data/problems/encode-and-decode-strings.json +1 -0
  280. package/data/problems/encode-and-decode-tinyurl.json +1 -0
  281. package/data/problems/encode-n-ary-tree-to-binary-tree.json +1 -0
  282. package/data/problems/encode-string-with-shortest-length.json +1 -0
  283. package/data/problems/equal-rational-numbers.json +1 -0
  284. package/data/problems/equal-tree-partition.json +1 -0
  285. package/data/problems/erect-the-fence.json +1 -0
  286. package/data/problems/escape-the-ghosts.json +1 -0
  287. package/data/problems/evaluate-division.json +1 -0
  288. package/data/problems/evaluate-reverse-polish-notation.json +1 -0
  289. package/data/problems/exam-room.json +1 -0
  290. package/data/problems/excel-sheet-column-number.json +1 -0
  291. package/data/problems/excel-sheet-column-title.json +1 -0
  292. package/data/problems/exclusive-time-of-functions.json +1 -0
  293. package/data/problems/expression-add-operators.json +1 -0
  294. package/data/problems/expressive-words.json +1 -0
  295. package/data/problems/extra-characters-in-a-string.json +1 -0
  296. package/data/problems/factor-combinations.json +1 -0
  297. package/data/problems/factorial-trailing-zeroes.json +1 -0
  298. package/data/problems/fair-candy-swap.json +1 -0
  299. package/data/problems/falling-squares.json +1 -0
  300. package/data/problems/fibonacci-number.json +1 -0
  301. package/data/problems/find-all-anagrams-in-a-string.json +1 -0
  302. package/data/problems/find-all-duplicates-in-an-array.json +1 -0
  303. package/data/problems/find-all-numbers-disappeared-in-an-array.json +1 -0
  304. package/data/problems/find-anagram-mappings.json +1 -0
  305. package/data/problems/find-and-replace-in-string.json +1 -0
  306. package/data/problems/find-and-replace-pattern.json +1 -0
  307. package/data/problems/find-bottom-left-tree-value.json +1 -0
  308. package/data/problems/find-critical-and-pseudo-critical-edges-in-minimum-spanning-tree.json +1 -0
  309. package/data/problems/find-duplicate-file-in-system.json +1 -0
  310. package/data/problems/find-duplicate-subtrees.json +1 -0
  311. package/data/problems/find-eventual-safe-states.json +1 -0
  312. package/data/problems/find-first-and-last-position-of-element-in-sorted-array.json +1 -0
  313. package/data/problems/find-in-mountain-array.json +1 -0
  314. package/data/problems/find-k-closest-elements.json +1 -0
  315. package/data/problems/find-k-pairs-with-smallest-sums.json +1 -0
  316. package/data/problems/find-k-th-smallest-pair-distance.json +1 -0
  317. package/data/problems/find-largest-value-in-each-tree-row.json +1 -0
  318. package/data/problems/find-leaves-of-binary-tree.json +1 -0
  319. package/data/problems/find-median-from-data-stream.json +1 -0
  320. package/data/problems/find-minimum-in-rotated-sorted-array-ii.json +1 -0
  321. package/data/problems/find-minimum-in-rotated-sorted-array.json +1 -0
  322. package/data/problems/find-mode-in-binary-search-tree.json +1 -0
  323. package/data/problems/find-peak-element.json +1 -0
  324. package/data/problems/find-permutation.json +1 -0
  325. package/data/problems/find-pivot-index.json +1 -0
  326. package/data/problems/find-right-interval.json +1 -0
  327. package/data/problems/find-smallest-letter-greater-than-target.json +1 -0
  328. package/data/problems/find-the-celebrity.json +1 -0
  329. package/data/problems/find-the-closest-palindrome.json +1 -0
  330. package/data/problems/find-the-derangement-of-an-array.json +1 -0
  331. package/data/problems/find-the-difference.json +1 -0
  332. package/data/problems/find-the-duplicate-number.json +1 -0
  333. package/data/problems/find-the-index-of-the-first-occurrence-in-a-string.json +1 -0
  334. package/data/problems/find-the-shortest-superstring.json +1 -0
  335. package/data/problems/find-the-town-judge.json +1 -0
  336. package/data/problems/first-bad-version.json +1 -0
  337. package/data/problems/first-missing-positive.json +1 -0
  338. package/data/problems/first-unique-character-in-a-string.json +1 -0
  339. package/data/problems/fizz-buzz.json +1 -0
  340. package/data/problems/flatten-2d-vector.json +1 -0
  341. package/data/problems/flatten-a-multilevel-doubly-linked-list.json +1 -0
  342. package/data/problems/flatten-binary-tree-to-linked-list.json +1 -0
  343. package/data/problems/flatten-nested-list-iterator.json +1 -0
  344. package/data/problems/flip-binary-tree-to-match-preorder-traversal.json +1 -0
  345. package/data/problems/flip-equivalent-binary-trees.json +1 -0
  346. package/data/problems/flip-game-ii.json +1 -0
  347. package/data/problems/flip-game.json +1 -0
  348. package/data/problems/flip-string-to-monotone-increasing.json +1 -0
  349. package/data/problems/flipping-an-image.json +1 -0
  350. package/data/problems/flood-fill.json +1 -0
  351. package/data/problems/fraction-addition-and-subtraction.json +1 -0
  352. package/data/problems/fraction-to-recurring-decimal.json +1 -0
  353. package/data/problems/freedom-trail.json +1 -0
  354. package/data/problems/friends-of-appropriate-ages.json +1 -0
  355. package/data/problems/frog-jump.json +1 -0
  356. package/data/problems/fruit-into-baskets.json +1 -0
  357. package/data/problems/game-of-life.json +1 -0
  358. package/data/problems/gas-station.json +1 -0
  359. package/data/problems/generalized-abbreviation.json +1 -0
  360. package/data/problems/generate-parentheses.json +1 -0
  361. package/data/problems/generate-random-point-in-a-circle.json +1 -0
  362. package/data/problems/global-and-local-inversions.json +1 -0
  363. package/data/problems/goat-latin.json +1 -0
  364. package/data/problems/graph-valid-tree.json +1 -0
  365. package/data/problems/gray-code.json +1 -0
  366. package/data/problems/greatest-common-divisor-of-strings.json +1 -0
  367. package/data/problems/greatest-common-divisor-traversal.json +1 -0
  368. package/data/problems/group-anagrams.json +1 -0
  369. package/data/problems/group-shifted-strings.json +1 -0
  370. package/data/problems/groups-of-special-equivalent-strings.json +1 -0
  371. package/data/problems/guess-number-higher-or-lower-ii.json +1 -0
  372. package/data/problems/guess-number-higher-or-lower.json +1 -0
  373. package/data/problems/guess-the-word.json +1 -0
  374. package/data/problems/h-index-ii.json +1 -0
  375. package/data/problems/h-index.json +1 -0
  376. package/data/problems/hamming-distance.json +1 -0
  377. package/data/problems/hand-of-straights.json +1 -0
  378. package/data/problems/happy-number.json +1 -0
  379. package/data/problems/heaters.json +1 -0
  380. package/data/problems/house-robber-ii.json +1 -0
  381. package/data/problems/house-robber-iii.json +1 -0
  382. package/data/problems/house-robber.json +1 -0
  383. package/data/problems/image-overlap.json +1 -0
  384. package/data/problems/image-smoother.json +1 -0
  385. package/data/problems/implement-magic-dictionary.json +1 -0
  386. package/data/problems/implement-queue-using-stacks.json +1 -0
  387. package/data/problems/implement-rand10-using-rand7.json +1 -0
  388. package/data/problems/implement-stack-using-queues.json +1 -0
  389. package/data/problems/implement-trie-prefix-tree.json +1 -0
  390. package/data/problems/increasing-order-search-tree.json +1 -0
  391. package/data/problems/increasing-triplet-subsequence.json +1 -0
  392. package/data/problems/inorder-successor-in-bst-ii.json +1 -0
  393. package/data/problems/inorder-successor-in-bst.json +1 -0
  394. package/data/problems/insert-delete-getrandom-o1-duplicates-allowed.json +1 -0
  395. package/data/problems/insert-delete-getrandom-o1.json +1 -0
  396. package/data/problems/insert-greatest-common-divisors-in-linked-list.json +1 -0
  397. package/data/problems/insert-interval.json +1 -0
  398. package/data/problems/insert-into-a-binary-search-tree.json +1 -0
  399. package/data/problems/insert-into-a-sorted-circular-linked-list.json +1 -0
  400. package/data/problems/insertion-sort-list.json +1 -0
  401. package/data/problems/integer-break.json +1 -0
  402. package/data/problems/integer-replacement.json +1 -0
  403. package/data/problems/integer-to-english-words.json +1 -0
  404. package/data/problems/integer-to-roman.json +1 -0
  405. package/data/problems/interleaving-string.json +1 -0
  406. package/data/problems/intersection-of-two-arrays-ii.json +1 -0
  407. package/data/problems/intersection-of-two-arrays.json +1 -0
  408. package/data/problems/intersection-of-two-linked-lists.json +1 -0
  409. package/data/problems/interval-list-intersections.json +1 -0
  410. package/data/problems/invert-binary-tree.json +1 -0
  411. package/data/problems/ip-to-cidr.json +1 -0
  412. package/data/problems/ipo.json +1 -0
  413. package/data/problems/is-graph-bipartite.json +1 -0
  414. package/data/problems/is-subsequence.json +1 -0
  415. package/data/problems/island-perimeter.json +1 -0
  416. package/data/problems/isomorphic-strings.json +1 -0
  417. package/data/problems/jewels-and-stones.json +1 -0
  418. package/data/problems/jump-game-ii.json +1 -0
  419. package/data/problems/jump-game-vii.json +1 -0
  420. package/data/problems/jump-game.json +1 -0
  421. package/data/problems/k-closest-points-to-origin.json +1 -0
  422. package/data/problems/k-diff-pairs-in-an-array.json +1 -0
  423. package/data/problems/k-empty-slots.json +1 -0
  424. package/data/problems/k-inverse-pairs-array.json +1 -0
  425. package/data/problems/k-similar-strings.json +1 -0
  426. package/data/problems/k-th-smallest-in-lexicographical-order.json +1 -0
  427. package/data/problems/k-th-smallest-prime-fraction.json +1 -0
  428. package/data/problems/k-th-symbol-in-grammar.json +1 -0
  429. package/data/problems/keyboard-row.json +1 -0
  430. package/data/problems/keys-and-rooms.json +1 -0
  431. package/data/problems/kill-process.json +1 -0
  432. package/data/problems/knight-dialer.json +1 -0
  433. package/data/problems/knight-probability-in-chessboard.json +1 -0
  434. package/data/problems/koko-eating-bananas.json +1 -0
  435. package/data/problems/kth-largest-element-in-a-stream.json +1 -0
  436. package/data/problems/kth-largest-element-in-an-array.json +1 -0
  437. package/data/problems/kth-smallest-element-in-a-bst.json +1 -0
  438. package/data/problems/kth-smallest-element-in-a-sorted-matrix.json +1 -0
  439. package/data/problems/kth-smallest-number-in-multiplication-table.json +1 -0
  440. package/data/problems/largest-bst-subtree.json +1 -0
  441. package/data/problems/largest-component-size-by-common-factor.json +1 -0
  442. package/data/problems/largest-divisible-subset.json +1 -0
  443. package/data/problems/largest-number-at-least-twice-of-others.json +1 -0
  444. package/data/problems/largest-number.json +1 -0
  445. package/data/problems/largest-palindrome-product.json +1 -0
  446. package/data/problems/largest-perimeter-triangle.json +1 -0
  447. package/data/problems/largest-plus-sign.json +1 -0
  448. package/data/problems/largest-rectangle-in-histogram.json +1 -0
  449. package/data/problems/largest-sum-of-averages.json +1 -0
  450. package/data/problems/largest-time-for-given-digits.json +1 -0
  451. package/data/problems/largest-triangle-area.json +1 -0
  452. package/data/problems/last-stone-weight-ii.json +1 -0
  453. package/data/problems/last-stone-weight.json +1 -0
  454. package/data/problems/leaf-similar-trees.json +1 -0
  455. package/data/problems/least-operators-to-express-number.json +1 -0
  456. package/data/problems/lemonade-change.json +1 -0
  457. package/data/problems/length-of-last-word.json +1 -0
  458. package/data/problems/length-of-longest-fibonacci-subsequence.json +1 -0
  459. package/data/problems/letter-case-permutation.json +1 -0
  460. package/data/problems/letter-combinations-of-a-phone-number.json +1 -0
  461. package/data/problems/lexicographical-numbers.json +1 -0
  462. package/data/problems/lfu-cache.json +1 -0
  463. package/data/problems/license-key-formatting.json +1 -0
  464. package/data/problems/line-reflection.json +1 -0
  465. package/data/problems/linked-list-components.json +1 -0
  466. package/data/problems/linked-list-cycle-ii.json +1 -0
  467. package/data/problems/linked-list-cycle.json +1 -0
  468. package/data/problems/linked-list-random-node.json +1 -0
  469. package/data/problems/logger-rate-limiter.json +1 -0
  470. package/data/problems/logical-or-of-two-binary-grids-represented-as-quad-trees.json +1 -0
  471. package/data/problems/lonely-pixel-i.json +1 -0
  472. package/data/problems/lonely-pixel-ii.json +1 -0
  473. package/data/problems/long-pressed-name.json +1 -0
  474. package/data/problems/longest-absolute-file-path.json +1 -0
  475. package/data/problems/longest-common-prefix.json +1 -0
  476. package/data/problems/longest-common-subsequence.json +1 -0
  477. package/data/problems/longest-consecutive-sequence.json +1 -0
  478. package/data/problems/longest-continuous-increasing-subsequence.json +1 -0
  479. package/data/problems/longest-happy-string.json +1 -0
  480. package/data/problems/longest-harmonious-subsequence.json +1 -0
  481. package/data/problems/longest-increasing-path-in-a-matrix.json +1 -0
  482. package/data/problems/longest-increasing-subsequence.json +1 -0
  483. package/data/problems/longest-line-of-consecutive-one-in-matrix.json +1 -0
  484. package/data/problems/longest-mountain-in-array.json +1 -0
  485. package/data/problems/longest-palindrome.json +1 -0
  486. package/data/problems/longest-palindromic-subsequence.json +1 -0
  487. package/data/problems/longest-palindromic-substring.json +1 -0
  488. package/data/problems/longest-repeating-character-replacement.json +1 -0
  489. package/data/problems/longest-substring-with-at-least-k-repeating-characters.json +1 -0
  490. package/data/problems/longest-substring-with-at-most-k-distinct-characters.json +1 -0
  491. package/data/problems/longest-substring-with-at-most-two-distinct-characters.json +1 -0
  492. package/data/problems/longest-substring-without-repeating-characters.json +1 -0
  493. package/data/problems/longest-turbulent-subarray.json +1 -0
  494. package/data/problems/longest-uncommon-subsequence-i.json +1 -0
  495. package/data/problems/longest-uncommon-subsequence-ii.json +1 -0
  496. package/data/problems/longest-univalue-path.json +1 -0
  497. package/data/problems/longest-valid-parentheses.json +1 -0
  498. package/data/problems/longest-word-in-dictionary-through-deleting.json +1 -0
  499. package/data/problems/longest-word-in-dictionary.json +1 -0
  500. package/data/problems/loud-and-rich.json +1 -0
  501. package/data/problems/lowest-common-ancestor-of-a-binary-search-tree.json +1 -0
  502. package/data/problems/lowest-common-ancestor-of-a-binary-tree.json +1 -0
  503. package/data/problems/lru-cache.json +1 -0
  504. package/data/problems/magic-squares-in-grid.json +1 -0
  505. package/data/problems/magical-string.json +1 -0
  506. package/data/problems/majority-element-ii.json +1 -0
  507. package/data/problems/majority-element.json +1 -0
  508. package/data/problems/making-a-large-island.json +1 -0
  509. package/data/problems/map-sum-pairs.json +1 -0
  510. package/data/problems/masking-personal-information.json +1 -0
  511. package/data/problems/matchsticks-to-square.json +1 -0
  512. package/data/problems/max-area-of-island.json +1 -0
  513. package/data/problems/max-chunks-to-make-sorted-ii.json +1 -0
  514. package/data/problems/max-chunks-to-make-sorted.json +1 -0
  515. package/data/problems/max-consecutive-ones-ii.json +1 -0
  516. package/data/problems/max-consecutive-ones.json +1 -0
  517. package/data/problems/max-increase-to-keep-city-skyline.json +1 -0
  518. package/data/problems/max-points-on-a-line.json +1 -0
  519. package/data/problems/max-stack.json +1 -0
  520. package/data/problems/max-sum-of-rectangle-no-larger-than-k.json +1 -0
  521. package/data/problems/maximal-rectangle.json +1 -0
  522. package/data/problems/maximal-square.json +1 -0
  523. package/data/problems/maximize-distance-to-closest-person.json +1 -0
  524. package/data/problems/maximum-average-subarray-i.json +1 -0
  525. package/data/problems/maximum-average-subarray-ii.json +1 -0
  526. package/data/problems/maximum-binary-tree-ii.json +1 -0
  527. package/data/problems/maximum-binary-tree.json +1 -0
  528. package/data/problems/maximum-depth-of-binary-tree.json +1 -0
  529. package/data/problems/maximum-depth-of-n-ary-tree.json +1 -0
  530. package/data/problems/maximum-distance-in-arrays.json +1 -0
  531. package/data/problems/maximum-frequency-stack.json +1 -0
  532. package/data/problems/maximum-gap.json +1 -0
  533. package/data/problems/maximum-length-of-pair-chain.json +1 -0
  534. package/data/problems/maximum-length-of-repeated-subarray.json +1 -0
  535. package/data/problems/maximum-product-of-three-numbers.json +1 -0
  536. package/data/problems/maximum-product-of-word-lengths.json +1 -0
  537. package/data/problems/maximum-product-subarray.json +1 -0
  538. package/data/problems/maximum-size-subarray-sum-equals-k.json +1 -0
  539. package/data/problems/maximum-subarray.json +1 -0
  540. package/data/problems/maximum-sum-circular-subarray.json +1 -0
  541. package/data/problems/maximum-sum-of-3-non-overlapping-subarrays.json +1 -0
  542. package/data/problems/maximum-swap.json +1 -0
  543. package/data/problems/maximum-vacation-days.json +1 -0
  544. package/data/problems/maximum-width-of-binary-tree.json +1 -0
  545. package/data/problems/maximum-width-ramp.json +1 -0
  546. package/data/problems/maximum-xor-of-two-numbers-in-an-array.json +1 -0
  547. package/data/problems/median-of-two-sorted-arrays.json +1 -0
  548. package/data/problems/meeting-rooms-ii.json +1 -0
  549. package/data/problems/meeting-rooms-iii.json +1 -0
  550. package/data/problems/meeting-rooms.json +1 -0
  551. package/data/problems/merge-intervals.json +1 -0
  552. package/data/problems/merge-k-sorted-lists.json +1 -0
  553. package/data/problems/merge-sorted-array.json +1 -0
  554. package/data/problems/merge-strings-alternately.json +1 -0
  555. package/data/problems/merge-triplets-to-form-target-triplet.json +1 -0
  556. package/data/problems/merge-two-binary-trees.json +1 -0
  557. package/data/problems/merge-two-sorted-lists.json +1 -0
  558. package/data/problems/middle-of-the-linked-list.json +1 -0
  559. package/data/problems/min-cost-climbing-stairs.json +1 -0
  560. package/data/problems/min-cost-to-connect-all-points.json +1 -0
  561. package/data/problems/min-stack.json +1 -0
  562. package/data/problems/minesweeper.json +1 -0
  563. package/data/problems/mini-parser.json +1 -0
  564. package/data/problems/minimize-malware-spread-ii.json +1 -0
  565. package/data/problems/minimize-malware-spread.json +1 -0
  566. package/data/problems/minimize-max-distance-to-gas-station.json +1 -0
  567. package/data/problems/minimum-absolute-difference-in-bst.json +1 -0
  568. package/data/problems/minimum-add-to-make-parentheses-valid.json +1 -0
  569. package/data/problems/minimum-area-rectangle-ii.json +1 -0
  570. package/data/problems/minimum-area-rectangle.json +1 -0
  571. package/data/problems/minimum-array-end.json +1 -0
  572. package/data/problems/minimum-ascii-delete-sum-for-two-strings.json +1 -0
  573. package/data/problems/minimum-cost-for-tickets.json +1 -0
  574. package/data/problems/minimum-cost-to-hire-k-workers.json +1 -0
  575. package/data/problems/minimum-cost-to-merge-stones.json +1 -0
  576. package/data/problems/minimum-depth-of-binary-tree.json +1 -0
  577. package/data/problems/minimum-distance-between-bst-nodes.json +1 -0
  578. package/data/problems/minimum-factorization.json +1 -0
  579. package/data/problems/minimum-falling-path-sum.json +1 -0
  580. package/data/problems/minimum-genetic-mutation.json +1 -0
  581. package/data/problems/minimum-height-trees.json +1 -0
  582. package/data/problems/minimum-increment-to-make-array-unique.json +1 -0
  583. package/data/problems/minimum-index-sum-of-two-lists.json +1 -0
  584. package/data/problems/minimum-interval-to-include-each-query.json +1 -0
  585. package/data/problems/minimum-moves-to-equal-array-elements-ii.json +1 -0
  586. package/data/problems/minimum-moves-to-equal-array-elements.json +1 -0
  587. package/data/problems/minimum-number-of-arrows-to-burst-balloons.json +1 -0
  588. package/data/problems/minimum-number-of-k-consecutive-bit-flips.json +1 -0
  589. package/data/problems/minimum-number-of-refueling-stops.json +1 -0
  590. package/data/problems/minimum-path-sum.json +1 -0
  591. package/data/problems/minimum-size-subarray-sum.json +1 -0
  592. package/data/problems/minimum-swaps-to-make-sequences-increasing.json +1 -0
  593. package/data/problems/minimum-time-difference.json +1 -0
  594. package/data/problems/minimum-unique-word-abbreviation.json +1 -0
  595. package/data/problems/minimum-window-subsequence.json +1 -0
  596. package/data/problems/minimum-window-substring.json +1 -0
  597. package/data/problems/mirror-reflection.json +1 -0
  598. package/data/problems/missing-number.json +1 -0
  599. package/data/problems/missing-ranges.json +1 -0
  600. package/data/problems/monotone-increasing-digits.json +1 -0
  601. package/data/problems/monotonic-array.json +1 -0
  602. package/data/problems/most-common-word.json +1 -0
  603. package/data/problems/most-frequent-subtree-sum.json +1 -0
  604. package/data/problems/most-profit-assigning-work.json +1 -0
  605. package/data/problems/most-stones-removed-with-same-row-or-column.json +1 -0
  606. package/data/problems/move-zeroes.json +1 -0
  607. package/data/problems/moving-average-from-data-stream.json +1 -0
  608. package/data/problems/multiply-strings.json +1 -0
  609. package/data/problems/my-calendar-i.json +1 -0
  610. package/data/problems/my-calendar-ii.json +1 -0
  611. package/data/problems/my-calendar-iii.json +1 -0
  612. package/data/problems/n-ary-tree-level-order-traversal.json +1 -0
  613. package/data/problems/n-ary-tree-postorder-traversal.json +1 -0
  614. package/data/problems/n-ary-tree-preorder-traversal.json +1 -0
  615. package/data/problems/n-queens-ii.json +1 -0
  616. package/data/problems/n-queens.json +1 -0
  617. package/data/problems/n-repeated-element-in-size-2n-array.json +1 -0
  618. package/data/problems/n-th-tribonacci-number.json +1 -0
  619. package/data/problems/nested-list-weight-sum-ii.json +1 -0
  620. package/data/problems/nested-list-weight-sum.json +1 -0
  621. package/data/problems/network-delay-time.json +1 -0
  622. package/data/problems/new-21-game.json +1 -0
  623. package/data/problems/next-closest-time.json +1 -0
  624. package/data/problems/next-greater-element-i.json +1 -0
  625. package/data/problems/next-greater-element-ii.json +1 -0
  626. package/data/problems/next-greater-element-iii.json +1 -0
  627. package/data/problems/next-permutation.json +1 -0
  628. package/data/problems/nim-game.json +1 -0
  629. package/data/problems/non-decreasing-array.json +1 -0
  630. package/data/problems/non-decreasing-subsequences.json +1 -0
  631. package/data/problems/non-negative-integers-without-consecutive-ones.json +1 -0
  632. package/data/problems/non-overlapping-intervals.json +1 -0
  633. package/data/problems/nth-digit.json +1 -0
  634. package/data/problems/nth-magical-number.json +1 -0
  635. package/data/problems/number-complement.json +1 -0
  636. package/data/problems/number-of-1-bits.json +1 -0
  637. package/data/problems/number-of-atoms.json +1 -0
  638. package/data/problems/number-of-boomerangs.json +1 -0
  639. package/data/problems/number-of-connected-components-in-an-undirected-graph.json +1 -0
  640. package/data/problems/number-of-corner-rectangles.json +1 -0
  641. package/data/problems/number-of-digit-one.json +1 -0
  642. package/data/problems/number-of-distinct-islands-ii.json +1 -0
  643. package/data/problems/number-of-distinct-islands.json +1 -0
  644. package/data/problems/number-of-islands-ii.json +1 -0
  645. package/data/problems/number-of-islands.json +1 -0
  646. package/data/problems/number-of-lines-to-write-string.json +1 -0
  647. package/data/problems/number-of-longest-increasing-subsequence.json +1 -0
  648. package/data/problems/number-of-matching-subsequences.json +1 -0
  649. package/data/problems/number-of-music-playlists.json +1 -0
  650. package/data/problems/number-of-provinces.json +1 -0
  651. package/data/problems/number-of-recent-calls.json +1 -0
  652. package/data/problems/number-of-segments-in-a-string.json +1 -0
  653. package/data/problems/number-of-squareful-arrays.json +1 -0
  654. package/data/problems/number-of-subarrays-with-bounded-maximum.json +1 -0
  655. package/data/problems/numbers-at-most-n-given-digit-set.json +1 -0
  656. package/data/problems/numbers-with-same-consecutive-differences.json +1 -0
  657. package/data/problems/odd-even-jump.json +1 -0
  658. package/data/problems/odd-even-linked-list.json +1 -0
  659. package/data/problems/one-edit-distance.json +1 -0
  660. package/data/problems/ones-and-zeroes.json +1 -0
  661. package/data/problems/online-election.json +1 -0
  662. package/data/problems/online-stock-span.json +1 -0
  663. package/data/problems/open-the-lock.json +1 -0
  664. package/data/problems/optimal-account-balancing.json +1 -0
  665. package/data/problems/optimal-division.json +1 -0
  666. package/data/problems/orderly-queue.json +1 -0
  667. package/data/problems/out-of-boundary-paths.json +1 -0
  668. package/data/problems/output-contest-matches.json +1 -0
  669. package/data/problems/pacific-atlantic-water-flow.json +1 -0
  670. package/data/problems/paint-fence.json +1 -0
  671. package/data/problems/paint-house-ii.json +1 -0
  672. package/data/problems/paint-house.json +1 -0
  673. package/data/problems/palindrome-linked-list.json +1 -0
  674. package/data/problems/palindrome-number.json +1 -0
  675. package/data/problems/palindrome-pairs.json +1 -0
  676. package/data/problems/palindrome-partitioning-ii.json +1 -0
  677. package/data/problems/palindrome-partitioning.json +1 -0
  678. package/data/problems/palindrome-permutation-ii.json +1 -0
  679. package/data/problems/palindrome-permutation.json +1 -0
  680. package/data/problems/palindromic-substrings.json +1 -0
  681. package/data/problems/pancake-sorting.json +1 -0
  682. package/data/problems/parse-lisp-expression.json +1 -0
  683. package/data/problems/partition-array-into-disjoint-intervals.json +1 -0
  684. package/data/problems/partition-equal-subset-sum.json +1 -0
  685. package/data/problems/partition-labels.json +1 -0
  686. package/data/problems/partition-list.json +1 -0
  687. package/data/problems/partition-to-k-equal-sum-subsets.json +1 -0
  688. package/data/problems/pascals-triangle-ii.json +1 -0
  689. package/data/problems/pascals-triangle.json +1 -0
  690. package/data/problems/patching-array.json +1 -0
  691. package/data/problems/path-sum-ii.json +1 -0
  692. package/data/problems/path-sum-iii.json +1 -0
  693. package/data/problems/path-sum-iv.json +1 -0
  694. package/data/problems/path-sum.json +1 -0
  695. package/data/problems/path-with-minimum-effort.json +1 -0
  696. package/data/problems/peak-index-in-a-mountain-array.json +1 -0
  697. package/data/problems/peeking-iterator.json +1 -0
  698. package/data/problems/perfect-number.json +1 -0
  699. package/data/problems/perfect-rectangle.json +1 -0
  700. package/data/problems/perfect-squares.json +1 -0
  701. package/data/problems/permutation-in-string.json +1 -0
  702. package/data/problems/permutation-sequence.json +1 -0
  703. package/data/problems/permutations-ii.json +1 -0
  704. package/data/problems/permutations.json +1 -0
  705. package/data/problems/plus-one-linked-list.json +1 -0
  706. package/data/problems/plus-one.json +1 -0
  707. package/data/problems/poor-pigs.json +1 -0
  708. package/data/problems/populating-next-right-pointers-in-each-node-ii.json +1 -0
  709. package/data/problems/populating-next-right-pointers-in-each-node.json +1 -0
  710. package/data/problems/positions-of-large-groups.json +1 -0
  711. package/data/problems/possible-bipartition.json +1 -0
  712. package/data/problems/pour-water.json +1 -0
  713. package/data/problems/power-of-four.json +1 -0
  714. package/data/problems/power-of-three.json +1 -0
  715. package/data/problems/power-of-two.json +1 -0
  716. package/data/problems/powerful-integers.json +1 -0
  717. package/data/problems/powx-n.json +1 -0
  718. package/data/problems/predict-the-winner.json +1 -0
  719. package/data/problems/prefix-and-suffix-search.json +1 -0
  720. package/data/problems/preimage-size-of-factorial-zeroes-function.json +1 -0
  721. package/data/problems/prime-number-of-set-bits-in-binary-representation.json +1 -0
  722. package/data/problems/prime-palindrome.json +1 -0
  723. package/data/problems/print-binary-tree.json +1 -0
  724. package/data/problems/prison-cells-after-n-days.json +1 -0
  725. package/data/problems/product-of-array-except-self.json +1 -0
  726. package/data/problems/profitable-schemes.json +1 -0
  727. package/data/problems/projection-area-of-3d-shapes.json +1 -0
  728. package/data/problems/push-dominoes.json +1 -0
  729. package/data/problems/pyramid-transition-matrix.json +1 -0
  730. package/data/problems/queue-reconstruction-by-height.json +1 -0
  731. package/data/problems/rabbits-in-forest.json +1 -0
  732. package/data/problems/race-car.json +1 -0
  733. package/data/problems/random-flip-matrix.json +1 -0
  734. package/data/problems/random-pick-index.json +1 -0
  735. package/data/problems/random-pick-with-blacklist.json +1 -0
  736. package/data/problems/random-pick-with-weight.json +1 -0
  737. package/data/problems/random-point-in-non-overlapping-rectangles.json +1 -0
  738. package/data/problems/range-addition-ii.json +1 -0
  739. package/data/problems/range-addition.json +1 -0
  740. package/data/problems/range-module.json +1 -0
  741. package/data/problems/range-sum-of-bst.json +1 -0
  742. package/data/problems/range-sum-query-2d-immutable.json +1 -0
  743. package/data/problems/range-sum-query-2d-mutable.json +1 -0
  744. package/data/problems/range-sum-query-immutable.json +1 -0
  745. package/data/problems/range-sum-query-mutable.json +1 -0
  746. package/data/problems/ransom-note.json +1 -0
  747. package/data/problems/reach-a-number.json +1 -0
  748. package/data/problems/reachable-nodes-in-subdivided-graph.json +1 -0
  749. package/data/problems/reaching-points.json +1 -0
  750. package/data/problems/read-n-characters-given-read4-ii-call-multiple-times.json +1 -0
  751. package/data/problems/read-n-characters-given-read4.json +1 -0
  752. package/data/problems/rearrange-string-k-distance-apart.json +1 -0
  753. package/data/problems/reconstruct-itinerary.json +1 -0
  754. package/data/problems/reconstruct-original-digits-from-english.json +1 -0
  755. package/data/problems/recover-binary-search-tree.json +1 -0
  756. package/data/problems/rectangle-area-ii.json +1 -0
  757. package/data/problems/rectangle-area.json +1 -0
  758. package/data/problems/rectangle-overlap.json +1 -0
  759. package/data/problems/redundant-connection-ii.json +1 -0
  760. package/data/problems/redundant-connection.json +1 -0
  761. package/data/problems/regions-cut-by-slashes.json +1 -0
  762. package/data/problems/regular-expression-matching.json +1 -0
  763. package/data/problems/relative-ranks.json +1 -0
  764. package/data/problems/remove-9.json +1 -0
  765. package/data/problems/remove-boxes.json +1 -0
  766. package/data/problems/remove-comments.json +1 -0
  767. package/data/problems/remove-duplicate-letters.json +1 -0
  768. package/data/problems/remove-duplicates-from-sorted-array-ii.json +1 -0
  769. package/data/problems/remove-duplicates-from-sorted-array.json +1 -0
  770. package/data/problems/remove-duplicates-from-sorted-list-ii.json +1 -0
  771. package/data/problems/remove-duplicates-from-sorted-list.json +1 -0
  772. package/data/problems/remove-element.json +1 -0
  773. package/data/problems/remove-invalid-parentheses.json +1 -0
  774. package/data/problems/remove-k-digits.json +1 -0
  775. package/data/problems/remove-linked-list-elements.json +1 -0
  776. package/data/problems/remove-nth-node-from-end-of-list.json +1 -0
  777. package/data/problems/reorder-data-in-log-files.json +1 -0
  778. package/data/problems/reorder-list.json +1 -0
  779. package/data/problems/reordered-power-of-2.json +1 -0
  780. package/data/problems/reorganize-string.json +1 -0
  781. package/data/problems/repeated-dna-sequences.json +1 -0
  782. package/data/problems/repeated-string-match.json +1 -0
  783. package/data/problems/repeated-substring-pattern.json +1 -0
  784. package/data/problems/replace-words.json +1 -0
  785. package/data/problems/reshape-the-matrix.json +1 -0
  786. package/data/problems/restore-ip-addresses.json +1 -0
  787. package/data/problems/reveal-cards-in-increasing-order.json +1 -0
  788. package/data/problems/reverse-bits.json +1 -0
  789. package/data/problems/reverse-integer.json +1 -0
  790. package/data/problems/reverse-linked-list-ii.json +1 -0
  791. package/data/problems/reverse-linked-list.json +1 -0
  792. package/data/problems/reverse-nodes-in-k-group.json +1 -0
  793. package/data/problems/reverse-only-letters.json +1 -0
  794. package/data/problems/reverse-pairs.json +1 -0
  795. package/data/problems/reverse-string-ii.json +1 -0
  796. package/data/problems/reverse-string.json +1 -0
  797. package/data/problems/reverse-vowels-of-a-string.json +1 -0
  798. package/data/problems/reverse-words-in-a-string-ii.json +1 -0
  799. package/data/problems/reverse-words-in-a-string-iii.json +1 -0
  800. package/data/problems/reverse-words-in-a-string.json +1 -0
  801. package/data/problems/rle-iterator.json +1 -0
  802. package/data/problems/robot-return-to-origin.json +1 -0
  803. package/data/problems/robot-room-cleaner.json +1 -0
  804. package/data/problems/roman-to-integer.json +1 -0
  805. package/data/problems/rotate-array.json +1 -0
  806. package/data/problems/rotate-function.json +1 -0
  807. package/data/problems/rotate-image.json +1 -0
  808. package/data/problems/rotate-list.json +1 -0
  809. package/data/problems/rotate-string.json +1 -0
  810. package/data/problems/rotated-digits.json +1 -0
  811. package/data/problems/rotting-oranges.json +1 -0
  812. package/data/problems/russian-doll-envelopes.json +1 -0
  813. package/data/problems/same-tree.json +1 -0
  814. package/data/problems/satisfiability-of-equality-equations.json +1 -0
  815. package/data/problems/score-after-flipping-matrix.json +1 -0
  816. package/data/problems/score-of-parentheses.json +1 -0
  817. package/data/problems/scramble-string.json +1 -0
  818. package/data/problems/search-a-2d-matrix-ii.json +1 -0
  819. package/data/problems/search-a-2d-matrix.json +1 -0
  820. package/data/problems/search-in-a-binary-search-tree.json +1 -0
  821. package/data/problems/search-in-a-sorted-array-of-unknown-size.json +1 -0
  822. package/data/problems/search-in-rotated-sorted-array-ii.json +1 -0
  823. package/data/problems/search-in-rotated-sorted-array.json +1 -0
  824. package/data/problems/search-insert-position.json +1 -0
  825. package/data/problems/second-minimum-node-in-a-binary-tree.json +1 -0
  826. package/data/problems/self-crossing.json +1 -0
  827. package/data/problems/self-dividing-numbers.json +1 -0
  828. package/data/problems/sentence-screen-fitting.json +1 -0
  829. package/data/problems/sentence-similarity-ii.json +1 -0
  830. package/data/problems/sentence-similarity.json +1 -0
  831. package/data/problems/sequence-reconstruction.json +1 -0
  832. package/data/problems/serialize-and-deserialize-binary-tree.json +1 -0
  833. package/data/problems/serialize-and-deserialize-bst.json +1 -0
  834. package/data/problems/serialize-and-deserialize-n-ary-tree.json +1 -0
  835. package/data/problems/set-intersection-size-at-least-two.json +1 -0
  836. package/data/problems/set-matrix-zeroes.json +1 -0
  837. package/data/problems/set-mismatch.json +1 -0
  838. package/data/problems/shifting-letters.json +1 -0
  839. package/data/problems/shopping-offers.json +1 -0
  840. package/data/problems/short-encoding-of-words.json +1 -0
  841. package/data/problems/shortest-bridge.json +1 -0
  842. package/data/problems/shortest-completing-word.json +1 -0
  843. package/data/problems/shortest-distance-from-all-buildings.json +1 -0
  844. package/data/problems/shortest-distance-to-a-character.json +1 -0
  845. package/data/problems/shortest-palindrome.json +1 -0
  846. package/data/problems/shortest-path-to-get-all-keys.json +1 -0
  847. package/data/problems/shortest-path-visiting-all-nodes.json +1 -0
  848. package/data/problems/shortest-subarray-with-sum-at-least-k.json +1 -0
  849. package/data/problems/shortest-unsorted-continuous-subarray.json +1 -0
  850. package/data/problems/shortest-word-distance-ii.json +1 -0
  851. package/data/problems/shortest-word-distance-iii.json +1 -0
  852. package/data/problems/shortest-word-distance.json +1 -0
  853. package/data/problems/shuffle-an-array.json +1 -0
  854. package/data/problems/similar-rgb-color.json +1 -0
  855. package/data/problems/similar-string-groups.json +1 -0
  856. package/data/problems/simplify-path.json +1 -0
  857. package/data/problems/single-element-in-a-sorted-array.json +1 -0
  858. package/data/problems/single-number-ii.json +1 -0
  859. package/data/problems/single-number-iii.json +1 -0
  860. package/data/problems/single-number.json +1 -0
  861. package/data/problems/single-threaded-cpu.json +1 -0
  862. package/data/problems/sliding-puzzle.json +1 -0
  863. package/data/problems/sliding-window-maximum.json +1 -0
  864. package/data/problems/sliding-window-median.json +1 -0
  865. package/data/problems/smallest-good-base.json +1 -0
  866. package/data/problems/smallest-range-covering-elements-from-k-lists.json +1 -0
  867. package/data/problems/smallest-range-i.json +1 -0
  868. package/data/problems/smallest-range-ii.json +1 -0
  869. package/data/problems/smallest-rectangle-enclosing-black-pixels.json +1 -0
  870. package/data/problems/smallest-rotation-with-highest-score.json +1 -0
  871. package/data/problems/smallest-string-starting-from-leaf.json +1 -0
  872. package/data/problems/smallest-subtree-with-all-the-deepest-nodes.json +1 -0
  873. package/data/problems/snakes-and-ladders.json +1 -0
  874. package/data/problems/solve-the-equation.json +1 -0
  875. package/data/problems/sort-an-array.json +1 -0
  876. package/data/problems/sort-array-by-parity-ii.json +1 -0
  877. package/data/problems/sort-array-by-parity.json +1 -0
  878. package/data/problems/sort-characters-by-frequency.json +1 -0
  879. package/data/problems/sort-colors.json +1 -0
  880. package/data/problems/sort-list.json +1 -0
  881. package/data/problems/sort-transformed-array.json +1 -0
  882. package/data/problems/soup-servings.json +1 -0
  883. package/data/problems/sparse-matrix-multiplication.json +1 -0
  884. package/data/problems/special-binary-string.json +1 -0
  885. package/data/problems/spiral-matrix-ii.json +1 -0
  886. package/data/problems/spiral-matrix-iii.json +1 -0
  887. package/data/problems/spiral-matrix.json +1 -0
  888. package/data/problems/split-array-into-consecutive-subsequences.json +1 -0
  889. package/data/problems/split-array-into-fibonacci-sequence.json +1 -0
  890. package/data/problems/split-array-largest-sum.json +1 -0
  891. package/data/problems/split-array-with-equal-sum.json +1 -0
  892. package/data/problems/split-array-with-same-average.json +1 -0
  893. package/data/problems/split-bst.json +1 -0
  894. package/data/problems/split-concatenated-strings.json +1 -0
  895. package/data/problems/split-linked-list-in-parts.json +1 -0
  896. package/data/problems/sqrtx.json +1 -0
  897. package/data/problems/squares-of-a-sorted-array.json +1 -0
  898. package/data/problems/squirrel-simulation.json +1 -0
  899. package/data/problems/stamping-the-sequence.json +1 -0
  900. package/data/problems/stickers-to-spell-word.json +1 -0
  901. package/data/problems/stone-game-ii.json +1 -0
  902. package/data/problems/stone-game-iii.json +1 -0
  903. package/data/problems/stone-game.json +1 -0
  904. package/data/problems/strange-printer.json +1 -0
  905. package/data/problems/string-compression.json +1 -0
  906. package/data/problems/string-to-integer-atoi.json +1 -0
  907. package/data/problems/string-without-aaa-or-bbb.json +1 -0
  908. package/data/problems/strobogrammatic-number-ii.json +1 -0
  909. package/data/problems/strobogrammatic-number-iii.json +1 -0
  910. package/data/problems/strobogrammatic-number.json +1 -0
  911. package/data/problems/strong-password-checker.json +1 -0
  912. package/data/problems/student-attendance-record-i.json +1 -0
  913. package/data/problems/student-attendance-record-ii.json +1 -0
  914. package/data/problems/subarray-product-less-than-k.json +1 -0
  915. package/data/problems/subarray-sum-equals-k.json +1 -0
  916. package/data/problems/subarray-sums-divisible-by-k.json +1 -0
  917. package/data/problems/subarrays-with-k-different-integers.json +1 -0
  918. package/data/problems/subdomain-visit-count.json +1 -0
  919. package/data/problems/subsets-ii.json +1 -0
  920. package/data/problems/subsets.json +1 -0
  921. package/data/problems/substring-with-concatenation-of-all-words.json +1 -0
  922. package/data/problems/subtree-of-another-tree.json +1 -0
  923. package/data/problems/sudoku-solver.json +1 -0
  924. package/data/problems/sum-of-all-subset-xor-totals.json +1 -0
  925. package/data/problems/sum-of-distances-in-tree.json +1 -0
  926. package/data/problems/sum-of-even-numbers-after-queries.json +1 -0
  927. package/data/problems/sum-of-left-leaves.json +1 -0
  928. package/data/problems/sum-of-square-numbers.json +1 -0
  929. package/data/problems/sum-of-subarray-minimums.json +1 -0
  930. package/data/problems/sum-of-subsequence-widths.json +1 -0
  931. package/data/problems/sum-of-two-integers.json +1 -0
  932. package/data/problems/sum-root-to-leaf-numbers.json +1 -0
  933. package/data/problems/summary-ranges.json +1 -0
  934. package/data/problems/super-egg-drop.json +1 -0
  935. package/data/problems/super-palindromes.json +1 -0
  936. package/data/problems/super-pow.json +1 -0
  937. package/data/problems/super-ugly-number.json +1 -0
  938. package/data/problems/super-washing-machines.json +1 -0
  939. package/data/problems/surface-area-of-3d-shapes.json +1 -0
  940. package/data/problems/surrounded-regions.json +1 -0
  941. package/data/problems/swap-adjacent-in-lr-string.json +1 -0
  942. package/data/problems/swap-nodes-in-pairs.json +1 -0
  943. package/data/problems/swim-in-rising-water.json +1 -0
  944. package/data/problems/symmetric-tree.json +1 -0
  945. package/data/problems/tag-validator.json +1 -0
  946. package/data/problems/tallest-billboard.json +1 -0
  947. package/data/problems/target-sum.json +1 -0
  948. package/data/problems/task-scheduler.json +1 -0
  949. package/data/problems/teemo-attacking.json +1 -0
  950. package/data/problems/ternary-expression-parser.json +1 -0
  951. package/data/problems/text-justification.json +1 -0
  952. package/data/problems/the-maze-ii.json +1 -0
  953. package/data/problems/the-maze-iii.json +1 -0
  954. package/data/problems/the-maze.json +1 -0
  955. package/data/problems/the-skyline-problem.json +1 -0
  956. package/data/problems/third-maximum-number.json +1 -0
  957. package/data/problems/three-equal-parts.json +1 -0
  958. package/data/problems/time-based-key-value-store.json +1 -0
  959. package/data/problems/to-lower-case.json +1 -0
  960. package/data/problems/toeplitz-matrix.json +1 -0
  961. package/data/problems/top-k-frequent-elements.json +1 -0
  962. package/data/problems/top-k-frequent-words.json +1 -0
  963. package/data/problems/total-hamming-distance.json +1 -0
  964. package/data/problems/transform-to-chessboard.json +1 -0
  965. package/data/problems/transpose-matrix.json +1 -0
  966. package/data/problems/trapping-rain-water-ii.json +1 -0
  967. package/data/problems/trapping-rain-water.json +1 -0
  968. package/data/problems/triangle.json +1 -0
  969. package/data/problems/trim-a-binary-search-tree.json +1 -0
  970. package/data/problems/triples-with-bitwise-and-equal-to-zero.json +1 -0
  971. package/data/problems/two-sum-ii-input-array-is-sorted.json +1 -0
  972. package/data/problems/two-sum-iii-data-structure-design.json +1 -0
  973. package/data/problems/two-sum-iv-input-is-a-bst.json +1 -0
  974. package/data/problems/two-sum.json +1 -0
  975. package/data/problems/ugly-number-ii.json +1 -0
  976. package/data/problems/ugly-number.json +1 -0
  977. package/data/problems/uncommon-words-from-two-sentences.json +1 -0
  978. package/data/problems/unique-binary-search-trees-ii.json +1 -0
  979. package/data/problems/unique-binary-search-trees.json +1 -0
  980. package/data/problems/unique-email-addresses.json +1 -0
  981. package/data/problems/unique-morse-code-words.json +1 -0
  982. package/data/problems/unique-paths-ii.json +1 -0
  983. package/data/problems/unique-paths-iii.json +1 -0
  984. package/data/problems/unique-paths.json +1 -0
  985. package/data/problems/unique-substrings-in-wraparound-string.json +1 -0
  986. package/data/problems/unique-word-abbreviation.json +1 -0
  987. package/data/problems/univalued-binary-tree.json +1 -0
  988. package/data/problems/utf-8-validation.json +1 -0
  989. package/data/problems/valid-anagram.json +1 -0
  990. package/data/problems/valid-mountain-array.json +1 -0
  991. package/data/problems/valid-number.json +1 -0
  992. package/data/problems/valid-palindrome-ii.json +1 -0
  993. package/data/problems/valid-palindrome.json +1 -0
  994. package/data/problems/valid-parentheses.json +1 -0
  995. package/data/problems/valid-parenthesis-string.json +1 -0
  996. package/data/problems/valid-perfect-square.json +1 -0
  997. package/data/problems/valid-permutations-for-di-sequence.json +1 -0
  998. package/data/problems/valid-square.json +1 -0
  999. package/data/problems/valid-sudoku.json +1 -0
  1000. package/data/problems/valid-tic-tac-toe-state.json +1 -0
  1001. package/data/problems/valid-triangle-number.json +1 -0
  1002. package/data/problems/valid-word-abbreviation.json +1 -0
  1003. package/data/problems/valid-word-square.json +1 -0
  1004. package/data/problems/validate-binary-search-tree.json +1 -0
  1005. package/data/problems/validate-ip-address.json +1 -0
  1006. package/data/problems/validate-stack-sequences.json +1 -0
  1007. package/data/problems/verify-preorder-sequence-in-binary-search-tree.json +1 -0
  1008. package/data/problems/verify-preorder-serialization-of-a-binary-tree.json +1 -0
  1009. package/data/problems/verifying-an-alien-dictionary.json +1 -0
  1010. package/data/problems/vertical-order-traversal-of-a-binary-tree.json +1 -0
  1011. package/data/problems/vowel-spellchecker.json +1 -0
  1012. package/data/problems/walking-robot-simulation.json +1 -0
  1013. package/data/problems/walls-and-gates.json +1 -0
  1014. package/data/problems/water-and-jug-problem.json +1 -0
  1015. package/data/problems/wiggle-sort-ii.json +1 -0
  1016. package/data/problems/wiggle-sort.json +1 -0
  1017. package/data/problems/wiggle-subsequence.json +1 -0
  1018. package/data/problems/wildcard-matching.json +1 -0
  1019. package/data/problems/word-abbreviation.json +1 -0
  1020. package/data/problems/word-break-ii.json +1 -0
  1021. package/data/problems/word-break.json +1 -0
  1022. package/data/problems/word-ladder-ii.json +1 -0
  1023. package/data/problems/word-ladder.json +1 -0
  1024. package/data/problems/word-pattern-ii.json +1 -0
  1025. package/data/problems/word-pattern.json +1 -0
  1026. package/data/problems/word-search-ii.json +1 -0
  1027. package/data/problems/word-search.json +1 -0
  1028. package/data/problems/word-squares.json +1 -0
  1029. package/data/problems/word-subsets.json +1 -0
  1030. package/data/problems/x-of-a-kind-in-a-deck-of-cards.json +1 -0
  1031. package/data/problems/zigzag-conversion.json +1 -0
  1032. package/data/problems/zigzag-iterator.json +1 -0
  1033. package/data/problems/zuma-game.json +1 -0
  1034. package/dist/cli.js +793 -0
  1035. package/dist/web/assets/index-DCYvZg7a.js +150 -0
  1036. package/dist/web/assets/index-gSBueMfH.css +1 -0
  1037. package/dist/web/index.html +13 -0
  1038. package/package.json +44 -4
package/dist/cli.js ADDED
@@ -0,0 +1,793 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli.jsx
4
+ import React2 from "react";
5
+ import { render } from "ink";
6
+ import fs7 from "node:fs";
7
+ import path6 from "node:path";
8
+ import { fileURLToPath as fileURLToPath3 } from "node:url";
9
+
10
+ // src/App.jsx
11
+ import React, { useEffect, useMemo, useState } from "react";
12
+ import fs5 from "node:fs";
13
+ import { Box, Text, useApp, useInput, useStdout } from "ink";
14
+
15
+ // src/data.js
16
+ import fs from "node:fs";
17
+ import path from "node:path";
18
+ import { fileURLToPath } from "node:url";
19
+ var here = path.dirname(fileURLToPath(import.meta.url));
20
+ var dataDir = path.resolve(here, "..", "data");
21
+ var indexCache;
22
+ function loadIndex() {
23
+ if (!indexCache) indexCache = JSON.parse(fs.readFileSync(path.join(dataDir, "index.json"), "utf8"));
24
+ return indexCache;
25
+ }
26
+ function loadProblem(slug) {
27
+ const f = path.join(dataDir, "problems", `${String(slug).replace(/[^a-z0-9-]/gi, "")}.json`);
28
+ return fs.existsSync(f) ? JSON.parse(fs.readFileSync(f, "utf8")) : null;
29
+ }
30
+ function filterProblems({ q = "", difficulty = "All", category = "" } = {}) {
31
+ const n = q.trim().toLowerCase();
32
+ return loadIndex().filter((p) => {
33
+ if (difficulty !== "All" && p.difficulty !== difficulty) return false;
34
+ if (category && p.category !== category) return false;
35
+ return !n || String(p.label) === n || p.title.toLowerCase().includes(n) || p.category.includes(n);
36
+ });
37
+ }
38
+ var allCategories = () => [...new Set(loadIndex().map((p) => p.category))].sort();
39
+ function examplesMd(p) {
40
+ return (p.examples || []).map((e, i) => `**Example ${i + 1}**
41
+
42
+ \`\`\`
43
+ Input: ${e.input}
44
+ Output: ${e.output}${e.explanation ? `
45
+
46
+ ${e.explanation}` : ""}
47
+ \`\`\``).join("\n\n");
48
+ }
49
+ var descriptionMd = (p) => `${p.statement.trim()}
50
+
51
+ ${examplesMd(p)}`;
52
+ var hintsMd = (p) => p.hints.length ? p.hints.map((h, i) => `**Hint ${i + 1}.** ${h}`).join("\n\n") : "No hints.";
53
+ var solutionMd = (p) => p.solution.trim() || "No solution.";
54
+ function plain(md) {
55
+ return md.replace(/```[a-z]*\n?/g, "").replace(/\*\*(.*?)\*\*/g, "$1").replace(/`([^`]*)`/g, "$1").replace(/^#{1,6}\s*/gm, "").replace(/\n{3,}/g, "\n\n");
56
+ }
57
+
58
+ // src/scaffold.js
59
+ import fs2 from "node:fs";
60
+ import path2 from "node:path";
61
+ var LANGS = {
62
+ go: { label: "Go", ext: "go" },
63
+ python: { label: "Python", ext: "py" },
64
+ cpp: { label: "C++", ext: "cpp" }
65
+ };
66
+ var LANG_KEYS = Object.keys(LANGS);
67
+ var langFromExt = (f) => LANG_KEYS.find((k) => LANGS[k].ext === path2.extname(f).slice(1));
68
+ function solutionPath(p, lang, base = process.cwd()) {
69
+ return path2.join(base, "offcode", `${p.label}-${p.slug}`, `solution.${LANGS[lang].ext}`);
70
+ }
71
+ function scaffold(slug, lang = "go", base = process.cwd()) {
72
+ if (!LANGS[lang]) throw new Error(`lang must be one of: ${LANG_KEYS.join(", ")}`);
73
+ const p = loadProblem(slug);
74
+ if (!p) throw new Error(`problem not found: ${slug}`);
75
+ const file2 = solutionPath(p, lang, base);
76
+ if (fs2.existsSync(file2)) return { file: file2, created: false };
77
+ fs2.mkdirSync(path2.dirname(file2), { recursive: true });
78
+ let code = p.starter[lang];
79
+ if (lang === "go") code = code.replace(/\{\s*\}\s*$/, '{\n panic("not implemented")\n}');
80
+ if (lang === "python" && /:\s*$/.test(code)) code = code.trimEnd() + "\n pass";
81
+ fs2.writeFileSync(file2, code + "\n");
82
+ return { file: file2, created: true };
83
+ }
84
+
85
+ // src/judge.js
86
+ import fs3 from "node:fs";
87
+ import os from "node:os";
88
+ import path3 from "node:path";
89
+ import { spawnSync } from "node:child_process";
90
+ var JUDGE_LANGS = ["go", "python"];
91
+ var TL_MS = 15e3;
92
+ function resolveArg(raw) {
93
+ if (typeof raw === "string" && raw.startsWith("@javascript:")) {
94
+ const v = new Function(`return (${raw.slice(12)})`)();
95
+ return typeof v === "string" ? v : JSON.stringify(v);
96
+ }
97
+ return raw;
98
+ }
99
+ var norm = (v) => v === null ? null : v;
100
+ function deepEq(a, b) {
101
+ if (Array.isArray(a) && Array.isArray(b)) return a.length === b.length && a.every((x, i) => deepEq(x, b[i]));
102
+ if (typeof a === "number" && typeof b === "number") return Math.abs(a - b) < 1e-5;
103
+ return a === b;
104
+ }
105
+ function canon(v) {
106
+ if (Array.isArray(v)) return JSON.stringify(v.map((x) => JSON.parse(canon(x))).sort((x, y) => JSON.stringify(x) < JSON.stringify(y) ? -1 : 1));
107
+ return JSON.stringify(v);
108
+ }
109
+ function same(got, exp, loose) {
110
+ if (got === null && Array.isArray(exp) && exp.length === 0) return true;
111
+ if (deepEq(norm(got), exp)) return true;
112
+ return loose && Array.isArray(got) && Array.isArray(exp) && canon(got) === canon(exp);
113
+ }
114
+ function parseGoSig(src) {
115
+ const m = src.match(/func\s+(\w+)\s*\(([^)]*)\)\s*([^{\n]*)\{/);
116
+ if (!m) throw new Error("Go: cannot find the solution function signature");
117
+ const raw = m[2].split(",").map((s) => s.trim()).filter(Boolean);
118
+ const params = [];
119
+ let pending = [];
120
+ for (const part of raw) {
121
+ const bits = part.split(/\s+/);
122
+ if (bits.length === 1) pending.push(bits[0]);
123
+ else {
124
+ for (const n of pending) params.push({ name: n, type: bits.slice(1).join(" ") });
125
+ pending = [];
126
+ params.push({ name: bits[0], type: bits.slice(1).join(" ") });
127
+ }
128
+ }
129
+ return { name: m[1], params, ret: m[3].trim() };
130
+ }
131
+ var GO_HELPERS = `
132
+ type ListNode struct { Val int; Next *ListNode }
133
+ type TreeNode struct { Val int; Left *TreeNode; Right *TreeNode }
134
+ func mkList(raw string) *ListNode { var a []int; json.Unmarshal([]byte(raw), &a); var h *ListNode; for i := len(a)-1; i >= 0; i-- { h = &ListNode{a[i], h} }; return h }
135
+ func mkLists(raw string) []*ListNode { var a [][]int; json.Unmarshal([]byte(raw), &a); r := make([]*ListNode, len(a)); for i, x := range a { for j := len(x)-1; j >= 0; j-- { r[i] = &ListNode{x[j], r[i]} } }; return r }
136
+ func mkTree(raw string) *TreeNode {
137
+ var a []*int; json.Unmarshal([]byte(raw), &a)
138
+ if len(a) == 0 || a[0] == nil { return nil }
139
+ root := &TreeNode{Val: *a[0]}; q := []*TreeNode{root}; i := 1
140
+ for len(q) > 0 && i < len(a) {
141
+ n := q[0]; q = q[1:]
142
+ if i < len(a) && a[i] != nil { n.Left = &TreeNode{Val: *a[i]}; q = append(q, n.Left) }; i++
143
+ if i < len(a) && a[i] != nil { n.Right = &TreeNode{Val: *a[i]}; q = append(q, n.Right) }; i++
144
+ }
145
+ return root
146
+ }
147
+ func chars(raw string) [][]byte { var a [][]string; json.Unmarshal([]byte(raw), &a); r := make([][]byte, len(a)); for i, x := range a { r[i] = make([]byte, len(x)); for j, s := range x { if len(s) > 0 { r[i][j] = s[0] } } }; return r }
148
+ func atoi(s string) int { n, _ := strconv.Atoi(strings.TrimSpace(s)); return n }
149
+ func ser(v interface{}) string {
150
+ switch x := v.(type) {
151
+ case *ListNode:
152
+ a := []int{}; for n := x; n != nil; n = n.Next { a = append(a, n.Val) }; b, _ := json.Marshal(a); return string(b)
153
+ case *TreeNode:
154
+ if x == nil { return "[]" }
155
+ out := []string{}; q := []*TreeNode{x}
156
+ for len(q) > 0 { n := q[0]; q = q[1:]; if n == nil { out = append(out, "null"); continue }; out = append(out, strconv.Itoa(n.Val)); q = append(q, n.Left, n.Right) }
157
+ for len(out) > 0 && out[len(out)-1] == "null" { out = out[:len(out)-1] }
158
+ return "[" + strings.Join(out, ",") + "]"
159
+ }
160
+ b, err := json.Marshal(v); if err != nil { return "null" }; return string(b)
161
+ }
162
+ `;
163
+ function goConv(t, i) {
164
+ const r = `raw[${i}]`;
165
+ if (t === "int") return `atoi(${r})`;
166
+ if (t === "string") return r;
167
+ if (t === "bool") return `${r} == "true"`;
168
+ if (t === "*ListNode") return `mkList(${r})`;
169
+ if (t === "[]*ListNode") return `mkLists(${r})`;
170
+ if (t === "*TreeNode") return `mkTree(${r})`;
171
+ if (t === "[][]byte") return `chars(${r})`;
172
+ return null;
173
+ }
174
+ function goHarness(sig) {
175
+ const decl = [];
176
+ const args2 = sig.params.map((p, i) => {
177
+ const c = goConv(p.type, i);
178
+ if (c) return c;
179
+ decl.push(`var a${i} ${p.type}; json.Unmarshal([]byte(raw[${i}]), &a${i})`);
180
+ return `a${i}`;
181
+ });
182
+ return `package main
183
+ import ("bufio";"encoding/json";"fmt";"os";"strconv";"strings")
184
+ ${GO_HELPERS}
185
+ func run(raw []string) (res string, err string) {
186
+ defer func() { if r := recover(); r != nil { err = fmt.Sprint(r) } }()
187
+ ${decl.join("\n ")}
188
+ return ser(${sig.name}(${args2.map((a, i) => a.startsWith("a") && /^a\d+$/.test(a) ? a : a).join(", ")})), ""
189
+ }
190
+ func main() {
191
+ rd := bufio.NewReaderSize(os.Stdin, 1<<26)
192
+ var tests [][]string
193
+ if err := json.NewDecoder(rd).Decode(&tests); err != nil { fmt.Println("{\\"fatal\\":\\"bad input\\"}"); return }
194
+ w := bufio.NewWriter(os.Stdout)
195
+ for _, t := range tests {
196
+ r, e := run(t)
197
+ if e != "" { eb, _ := json.Marshal(e); fmt.Fprintf(w, "{\\"error\\":%s}\\n", eb) } else { fmt.Fprintf(w, "{\\"out\\":%s}\\n", r) }
198
+ w.Flush()
199
+ }
200
+ }
201
+ `;
202
+ }
203
+ var PY_PRE = `from typing import *
204
+ import sys, json, collections, heapq, bisect, math, itertools, functools
205
+ from collections import *
206
+ class ListNode:
207
+ def __init__(self, val=0, next=None):
208
+ self.val = val
209
+ self.next = next
210
+ class TreeNode:
211
+ def __init__(self, val=0, left=None, right=None):
212
+ self.val = val
213
+ self.left = left
214
+ self.right = right
215
+ `;
216
+ var PY_POST = (fn, types) => `
217
+ def __mk_list(a):
218
+ h = None
219
+ for x in reversed(a): h = ListNode(x, h)
220
+ return h
221
+ def __mk_tree(a):
222
+ if not a or a[0] is None: return None
223
+ root = TreeNode(a[0]); q = collections.deque([root]); i = 1
224
+ while q and i < len(a):
225
+ n = q.popleft()
226
+ if i < len(a) and a[i] is not None: n.left = TreeNode(a[i]); q.append(n.left)
227
+ i += 1
228
+ if i < len(a) and a[i] is not None: n.right = TreeNode(a[i]); q.append(n.right)
229
+ i += 1
230
+ return root
231
+ def __ser(v):
232
+ if isinstance(v, ListNode):
233
+ r = []
234
+ while v: r.append(v.val); v = v.next
235
+ return r
236
+ if isinstance(v, TreeNode):
237
+ out = []; q = collections.deque([v])
238
+ while q:
239
+ n = q.popleft()
240
+ if n is None: out.append(None); continue
241
+ out.append(n.val); q.append(n.left); q.append(n.right)
242
+ while out and out[-1] is None: out.pop()
243
+ return out
244
+ if isinstance(v, (list, tuple, set)): return [__ser(x) for x in v]
245
+ return v
246
+ __types = ${JSON.stringify(types)}
247
+ def __conv(t, raw):
248
+ if t == 'int': return int(raw.strip())
249
+ if t == 'string': return raw
250
+ if t == 'boolean': return raw.strip() == 'true'
251
+ v = json.loads(raw)
252
+ if t == 'list_node': return __mk_list(v)
253
+ if t == 'list_node_array': return [__mk_list(x) for x in v]
254
+ if t == 'tree_node': return __mk_tree(v)
255
+ return v
256
+ def __main():
257
+ tests = json.load(sys.stdin)
258
+ sol = Solution()
259
+ f = getattr(sol, ${JSON.stringify(fn)})
260
+ for raw in tests:
261
+ try:
262
+ r = __ser(f(*[__conv(t, x) for t, x in zip(__types, raw)]))
263
+ sys.stdout.write(json.dumps({"out": r}) + "\\n")
264
+ except BaseException as e:
265
+ sys.stdout.write(json.dumps({"error": type(e).__name__ + ": " + str(e)}) + "\\n")
266
+ sys.stdout.flush()
267
+ __main()
268
+ `;
269
+ function pyMethod(src) {
270
+ const m = src.match(/class\s+Solution[\s\S]*?def\s+(\w+)\s*\(self/);
271
+ return m ? m[1] : null;
272
+ }
273
+ function judge({ slug, lang, code, filter }) {
274
+ const p = loadProblem(slug);
275
+ if (!p) throw new Error(`problem not found: ${slug}`);
276
+ if (!p.expected) return { verdict: "UNSUPPORTED", message: "No reference outputs for this problem (design/interactive/graph problem)." };
277
+ if (!JUDGE_LANGS.includes(lang)) return { verdict: "UNSUPPORTED", message: `Judge supports: ${JUDGE_LANGS.join(", ")} (C++ judge not built yet).` };
278
+ const tmp = fs3.mkdtempSync(path3.join(os.tmpdir(), "offcode-"));
279
+ try {
280
+ const tests = p.tests.map((t) => t.map(resolveArg));
281
+ let cmd2, args2;
282
+ const t0 = Date.now();
283
+ if (lang === "go") {
284
+ const sig = parseGoSig(code);
285
+ if (/^\s*type\s+(ListNode|TreeNode)\b/m.test(code)) throw new Error("Remove your own ListNode/TreeNode type: offcode provides it.");
286
+ fs3.writeFileSync(path3.join(tmp, "go.mod"), "module offcodejudge\n\ngo 1.18\n");
287
+ fs3.writeFileSync(path3.join(tmp, "solution.go"), code);
288
+ fs3.writeFileSync(path3.join(tmp, "harness.go"), goHarness(sig));
289
+ const b = spawnSync("go", ["build", "-o", path3.join(tmp, process.platform === "win32" ? "sol.exe" : "sol"), "."], { cwd: tmp, encoding: "utf8", timeout: 12e4 });
290
+ if (b.error) return { verdict: "ERROR", message: b.error.code === "ENOENT" ? "`go` not found in PATH" : b.error.message };
291
+ if (b.status !== 0) return { verdict: "CE", message: (b.stderr || b.stdout).replace(new RegExp(tmp.replace(/\\/g, "\\\\"), "g"), ".").trim() };
292
+ cmd2 = path3.join(tmp, process.platform === "win32" ? "sol.exe" : "sol");
293
+ args2 = [];
294
+ } else {
295
+ const fn = pyMethod(code);
296
+ if (!fn) throw new Error("Python: need `class Solution` with a method");
297
+ const types = p.params.map((x) => x.type === "boolean" ? "boolean" : x.type);
298
+ fs3.writeFileSync(path3.join(tmp, "sol.py"), PY_PRE + code + "\n" + PY_POST(fn, types));
299
+ const cands = process.platform === "win32" ? [["python"], ["py", "-3"], ["python3"]] : [["python3"], ["python"]];
300
+ const found = cands.find((c) => !spawnSync(c[0], [...c.slice(1), "--version"], { encoding: "utf8" }).error);
301
+ if (!found) return { verdict: "ERROR", message: "python not found in PATH" };
302
+ cmd2 = found[0];
303
+ args2 = [...found.slice(1), path3.join(tmp, "sol.py")];
304
+ }
305
+ const r = spawnSync(cmd2, args2, { input: JSON.stringify(tests), encoding: "utf8", env: { ...process.env, PYTHONIOENCODING: "utf-8", PYTHONUTF8: "1" }, windowsHide: true, timeout: TL_MS, maxBuffer: 1 << 28 });
306
+ if (r.error && r.error.code === "ENOENT") return { verdict: "ERROR", message: `\`${cmd2}\` not found in PATH` };
307
+ const lines = (r.stdout || "").split(/\r?\n/).filter(Boolean).map((l) => {
308
+ try {
309
+ return JSON.parse(l);
310
+ } catch {
311
+ return { error: l.slice(0, 200) };
312
+ }
313
+ });
314
+ const timedOut = r.error && r.error.code === "ETIMEDOUT";
315
+ const results = [];
316
+ let passed = 0;
317
+ for (let i = 0; i < tests.length; i++) {
318
+ const o = lines[i];
319
+ const input = p.params.map((x, k) => `${x.name} = ${String(tests[i][k]).slice(0, 120)}`).join(", ");
320
+ const exp = p.expected[i];
321
+ if (!o) {
322
+ results.push({ i, status: timedOut ? "TLE" : "RE", input, expected: exp, got: null, error: timedOut ? `exceeded ${TL_MS / 1e3}s` : (r.stderr || "").slice(0, 400) });
323
+ break;
324
+ }
325
+ if (o.error) {
326
+ results.push({ i, status: "RE", input, expected: exp, got: null, error: o.error });
327
+ break;
328
+ }
329
+ if (same(o.out, exp, p.loose)) {
330
+ passed++;
331
+ results.push({ i, status: "AC" });
332
+ } else {
333
+ results.push({ i, status: "WA", input, expected: exp, got: o.out });
334
+ break;
335
+ }
336
+ }
337
+ const fail = results.find((x) => x.status !== "AC");
338
+ return { verdict: fail ? fail.status : "AC", passed, total: tests.length, ms: Date.now() - t0, fail, results: results.map((x) => x.status) };
339
+ } catch (e) {
340
+ return { verdict: "ERROR", message: e.message };
341
+ } finally {
342
+ fs3.rmSync(tmp, { recursive: true, force: true });
343
+ }
344
+ }
345
+
346
+ // src/progress.js
347
+ import fs4 from "node:fs";
348
+ import os2 from "node:os";
349
+ import path4 from "node:path";
350
+ var file = path4.join(os2.homedir(), ".offcode", "progress.json");
351
+ function loadProgress() {
352
+ try {
353
+ return JSON.parse(fs4.readFileSync(file, "utf8"));
354
+ } catch {
355
+ return {};
356
+ }
357
+ }
358
+ function markSolved(slug, lang) {
359
+ const p = loadProgress();
360
+ p[slug] = { lang, at: (/* @__PURE__ */ new Date()).toISOString() };
361
+ fs4.mkdirSync(path4.dirname(file), { recursive: true });
362
+ fs4.writeFileSync(file, JSON.stringify(p, null, 1));
363
+ }
364
+
365
+ // src/App.jsx
366
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
367
+ var DIFFS = ["All", "Easy", "Medium", "Hard"];
368
+ var dcolor = (d) => ({ Easy: "green", Medium: "yellow", Hard: "red" })[d];
369
+ var next = (arr, v) => arr[(arr.indexOf(v) + 1) % arr.length];
370
+ function useSize() {
371
+ const { stdout } = useStdout();
372
+ const [s, setS] = useState({ w: stdout.columns || 100, h: stdout.rows || 30 });
373
+ useEffect(() => {
374
+ const f = () => setS({ w: stdout.columns || 100, h: stdout.rows || 30 });
375
+ stdout.on("resize", f);
376
+ return () => stdout.off("resize", f);
377
+ }, [stdout]);
378
+ return s;
379
+ }
380
+ function wrap(text, width) {
381
+ const out = [];
382
+ for (const raw of text.split("\n")) {
383
+ let line = raw.replace(/\t/g, " ");
384
+ if (!line) {
385
+ out.push("");
386
+ continue;
387
+ }
388
+ while (line.length > width) {
389
+ let cut = line.lastIndexOf(" ", width);
390
+ if (cut < width / 2) cut = width;
391
+ out.push(line.slice(0, cut));
392
+ line = line.slice(cut).trimStart();
393
+ }
394
+ out.push(line);
395
+ }
396
+ return out;
397
+ }
398
+ var Keys = ({ items }) => /* @__PURE__ */ jsx(Box, { children: items.map(([k, v]) => /* @__PURE__ */ jsxs(Box, { marginRight: 2, children: [
399
+ /* @__PURE__ */ jsx(Text, { bold: true, color: "cyan", children: k }),
400
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
401
+ " ",
402
+ v
403
+ ] })
404
+ ] }, k)) });
405
+ function Top({ w, right }) {
406
+ return /* @__PURE__ */ jsxs(Box, { width: w, justifyContent: "space-between", paddingX: 1, children: [
407
+ /* @__PURE__ */ jsxs(Text, { bold: true, children: [
408
+ "offcode ",
409
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "by Limon Das" })
410
+ ] }),
411
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: right })
412
+ ] });
413
+ }
414
+ function ListScreen({ onOpen, lang, setLang, progress }) {
415
+ const { exit } = useApp();
416
+ const { w, h } = useSize();
417
+ const [q, setQ] = useState("");
418
+ const [typing, setTyping] = useState(false);
419
+ const [diff, setDiff] = useState("All");
420
+ const [cursor, setCursor] = useState(0);
421
+ const items = useMemo(() => filterProblems({ q, difficulty: diff }), [q, diff]);
422
+ const bodyH = Math.max(6, h - 4);
423
+ const rows = bodyH - 2;
424
+ const top = Math.min(Math.max(0, cursor - Math.floor(rows / 2)), Math.max(0, items.length - rows));
425
+ const sel = items[cursor];
426
+ const leftW = Math.max(38, Math.floor(w * 0.52));
427
+ const rightW = w - leftW;
428
+ const preview = useMemo(() => {
429
+ if (!sel) return [];
430
+ const p = loadProblem(sel.slug);
431
+ return wrap(plain(descriptionMd(p)), rightW - 4).slice(0, rows);
432
+ }, [sel, rightW, rows]);
433
+ const solved = Object.keys(progress).length;
434
+ useInput((input, key) => {
435
+ if (typing) {
436
+ if (key.return || key.escape) setTyping(false);
437
+ else if (key.backspace || key.delete) {
438
+ setQ((s) => s.slice(0, -1));
439
+ setCursor(0);
440
+ } else if (input && !key.ctrl && !key.meta) {
441
+ setQ((s) => s + input);
442
+ setCursor(0);
443
+ }
444
+ return;
445
+ }
446
+ if (input === "q") exit();
447
+ else if (input === "/") setTyping(true);
448
+ else if (input === "f") {
449
+ setDiff((d) => next(DIFFS, d));
450
+ setCursor(0);
451
+ } else if (input === "l") setLang((l) => next(LANG_KEYS, l));
452
+ else if (input === "c") {
453
+ setQ("");
454
+ setDiff("All");
455
+ setCursor(0);
456
+ } else if (key.downArrow || input === "j") setCursor((c) => Math.min(items.length - 1, c + 1));
457
+ else if (key.upArrow || input === "k") setCursor((c) => Math.max(0, c - 1));
458
+ else if (key.pageDown) setCursor((c) => Math.min(items.length - 1, c + rows));
459
+ else if (key.pageUp) setCursor((c) => Math.max(0, c - rows));
460
+ else if (input === "g") setCursor(0);
461
+ else if (input === "G") setCursor(items.length - 1);
462
+ else if (key.return && sel) onOpen(sel.slug);
463
+ });
464
+ const titleW = leftW - 4 - 6 - 8 - 4;
465
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", width: w, height: h - 1, children: [
466
+ /* @__PURE__ */ jsx(Top, { w, right: `${items.length} problems ${solved} solved ${LANGS[lang].label}` }),
467
+ /* @__PURE__ */ jsxs(Box, { paddingX: 1, children: [
468
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "search " }),
469
+ /* @__PURE__ */ jsx(Text, { color: typing ? "cyan" : void 0, children: q || (typing ? "" : "(press /)") }),
470
+ typing && /* @__PURE__ */ jsx(Text, { color: "cyan", children: "_" }),
471
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: " difficulty " }),
472
+ /* @__PURE__ */ jsx(Text, { color: dcolor(diff), bold: true, children: diff })
473
+ ] }),
474
+ /* @__PURE__ */ jsxs(Box, { height: bodyH, children: [
475
+ /* @__PURE__ */ jsxs(Box, { width: leftW, borderStyle: "round", borderColor: typing ? "gray" : "cyan", flexDirection: "column", paddingX: 1, children: [
476
+ items.slice(top, top + rows).map((p, i) => {
477
+ const on = top + i === cursor;
478
+ const done = progress[p.slug];
479
+ return /* @__PURE__ */ jsxs(Box, { children: [
480
+ /* @__PURE__ */ jsxs(Text, { color: on ? "cyan" : void 0, bold: on, children: [
481
+ on ? ">" : " ",
482
+ " "
483
+ ] }),
484
+ /* @__PURE__ */ jsx(Text, { color: "green", children: done ? "\u2713" : " " }),
485
+ /* @__PURE__ */ jsxs(Text, { dimColor: !on, children: [
486
+ " ",
487
+ String(p.label).padStart(4),
488
+ " "
489
+ ] }),
490
+ /* @__PURE__ */ jsx(Text, { bold: on, wrap: "truncate-end", children: p.title.padEnd(titleW).slice(0, titleW) }),
491
+ /* @__PURE__ */ jsxs(Text, { color: dcolor(p.difficulty), children: [
492
+ " ",
493
+ p.difficulty.padEnd(6)
494
+ ] })
495
+ ] }, p.slug);
496
+ }),
497
+ !items.length && /* @__PURE__ */ jsx(Text, { dimColor: true, children: "no match" })
498
+ ] }),
499
+ /* @__PURE__ */ jsx(Box, { width: rightW, borderStyle: "round", borderColor: "gray", flexDirection: "column", paddingX: 1, children: sel && /* @__PURE__ */ jsxs(Fragment, { children: [
500
+ /* @__PURE__ */ jsxs(Text, { bold: true, children: [
501
+ sel.label,
502
+ ". ",
503
+ sel.title
504
+ ] }),
505
+ /* @__PURE__ */ jsxs(Text, { children: [
506
+ /* @__PURE__ */ jsx(Text, { color: dcolor(sel.difficulty), children: sel.difficulty }),
507
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
508
+ " ",
509
+ sel.category,
510
+ sel.judge ? "" : " (no judge)"
511
+ ] })
512
+ ] }),
513
+ /* @__PURE__ */ jsx(Text, { children: " " }),
514
+ preview.slice(0, rows - 3).map((l, i) => /* @__PURE__ */ jsx(Text, { children: l }, i))
515
+ ] }) })
516
+ ] }),
517
+ /* @__PURE__ */ jsx(Box, { paddingX: 1, children: typing ? /* @__PURE__ */ jsx(Keys, { items: [["enter", "done"], ["esc", "done"]] }) : /* @__PURE__ */ jsx(Keys, { items: [["j/k", "move"], ["enter", "open"], ["/", "search"], ["f", "filter"], ["l", "lang"], ["q", "quit"]] }) })
518
+ ] });
519
+ }
520
+ var TABS = ["description", "hints", "solution", "judge"];
521
+ function Detail({ slug, lang, setLang, onBack, onSolved }) {
522
+ const { w, h } = useSize();
523
+ const p = useMemo(() => loadProblem(slug), [slug]);
524
+ const [tab, setTab] = useState("description");
525
+ const [scroll, setScroll] = useState(0);
526
+ const [msg, setMsg] = useState("");
527
+ const [result, setResult] = useState(null);
528
+ const [busy, setBusy] = useState(false);
529
+ const rows = Math.max(5, h - 9);
530
+ const file2 = solutionPath(p, lang);
531
+ const lines = useMemo(() => {
532
+ if (tab === "judge") return [];
533
+ const md = tab === "description" ? descriptionMd(p) : tab === "hints" ? hintsMd(p) : solutionMd(p);
534
+ return wrap(plain(md), w - 6);
535
+ }, [p, tab, w]);
536
+ const max = Math.max(0, lines.length - rows);
537
+ function runJudge() {
538
+ if (!JUDGE_LANGS.includes(lang)) {
539
+ setResult({ verdict: "UNSUPPORTED", message: `Judge supports go and python. Press l to switch.` });
540
+ setTab("judge");
541
+ return;
542
+ }
543
+ if (!fs5.existsSync(file2)) {
544
+ setResult({ verdict: "ERROR", message: `No file yet. Press n to create ${file2}` });
545
+ setTab("judge");
546
+ return;
547
+ }
548
+ setTab("judge");
549
+ setBusy(true);
550
+ setResult(null);
551
+ setTimeout(() => {
552
+ const r = judge({ slug, lang, code: fs5.readFileSync(file2, "utf8") });
553
+ setBusy(false);
554
+ setResult(r);
555
+ if (r.verdict === "AC") {
556
+ markSolved(slug, lang);
557
+ onSolved();
558
+ }
559
+ }, 60);
560
+ }
561
+ useInput((input, key) => {
562
+ if (busy) return;
563
+ if (key.escape || input === "b") onBack();
564
+ else if (key.downArrow || input === "j") setScroll((s) => Math.min(max, s + 1));
565
+ else if (key.upArrow || input === "k") setScroll((s) => Math.max(0, s - 1));
566
+ else if (key.pageDown || input === " ") setScroll((s) => Math.min(max, s + rows));
567
+ else if (key.pageUp) setScroll((s) => Math.max(0, s - rows));
568
+ else if (["1", "2", "3", "4"].includes(input)) {
569
+ setTab(TABS[Number(input) - 1]);
570
+ setScroll(0);
571
+ } else if (key.tab) {
572
+ setTab((t) => next(TABS, t));
573
+ setScroll(0);
574
+ } else if (input === "l") setLang((l) => next(LANG_KEYS, l));
575
+ else if (input === "n") {
576
+ try {
577
+ const r = scaffold(slug, lang);
578
+ setMsg(`${r.created ? "created" : "exists"}: ${r.file}`);
579
+ } catch (e) {
580
+ setMsg(e.message);
581
+ }
582
+ } else if (input === "r") runJudge();
583
+ });
584
+ const fail = result?.fail;
585
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", width: w, height: h - 1, children: [
586
+ /* @__PURE__ */ jsx(Top, { w, right: `${LANGS[lang].label}${p.expected ? "" : " (no judge)"}` }),
587
+ /* @__PURE__ */ jsxs(Box, { paddingX: 1, children: [
588
+ /* @__PURE__ */ jsxs(Text, { bold: true, children: [
589
+ p.label,
590
+ ". ",
591
+ p.title,
592
+ " "
593
+ ] }),
594
+ /* @__PURE__ */ jsx(Text, { color: dcolor(p.difficulty), children: p.difficulty }),
595
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
596
+ " ",
597
+ p.category
598
+ ] })
599
+ ] }),
600
+ /* @__PURE__ */ jsx(Box, { paddingX: 1, children: TABS.map((t, i) => /* @__PURE__ */ jsx(Box, { marginRight: 1, children: /* @__PURE__ */ jsxs(Text, { inverse: t === tab, bold: t === tab, children: [
601
+ " ",
602
+ i + 1,
603
+ " ",
604
+ t,
605
+ " "
606
+ ] }) }, t)) }),
607
+ /* @__PURE__ */ jsxs(Box, { borderStyle: "round", borderColor: "gray", flexDirection: "column", paddingX: 1, height: rows + 2, children: [
608
+ tab !== "judge" && lines.slice(scroll, scroll + rows).map((l, i) => /* @__PURE__ */ jsx(Text, { children: l }, i)),
609
+ tab === "judge" && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
610
+ /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
611
+ "file: ",
612
+ file2
613
+ ] }),
614
+ busy && /* @__PURE__ */ jsx(Text, { color: "yellow", children: "judging..." }),
615
+ !busy && !result && /* @__PURE__ */ jsx(Text, { dimColor: true, children: "press r to run the judge on your file" }),
616
+ result && /* @__PURE__ */ jsxs(Fragment, { children: [
617
+ /* @__PURE__ */ jsx(Text, { children: " " }),
618
+ /* @__PURE__ */ jsxs(Text, { bold: true, color: result.verdict === "AC" ? "green" : "red", children: [
619
+ result.verdict === "AC" ? "Accepted" : result.verdict,
620
+ result.total ? ` ${result.passed}/${result.total} tests ${result.ms} ms` : ""
621
+ ] }),
622
+ result.message && wrap(result.message, w - 8).slice(0, rows - 4).map((l, i) => /* @__PURE__ */ jsx(Text, { color: "red", children: l }, i)),
623
+ fail && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
624
+ /* @__PURE__ */ jsxs(Text, { children: [
625
+ "test ",
626
+ fail.i + 1,
627
+ ": ",
628
+ fail.status
629
+ ] }),
630
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "input " }),
631
+ /* @__PURE__ */ jsx(Text, { children: fail.input }),
632
+ fail.expected !== void 0 && /* @__PURE__ */ jsxs(Text, { children: [
633
+ "expected ",
634
+ JSON.stringify(fail.expected).slice(0, w - 16)
635
+ ] }),
636
+ fail.got !== void 0 && fail.got !== null && /* @__PURE__ */ jsxs(Text, { children: [
637
+ "got ",
638
+ JSON.stringify(fail.got).slice(0, w - 16)
639
+ ] }),
640
+ fail.error && /* @__PURE__ */ jsx(Text, { color: "red", children: String(fail.error).slice(0, w - 10) })
641
+ ] })
642
+ ] })
643
+ ] })
644
+ ] }),
645
+ /* @__PURE__ */ jsx(Box, { paddingX: 1, children: /* @__PURE__ */ jsx(Text, { color: "cyan", children: msg }) }),
646
+ /* @__PURE__ */ jsx(Box, { paddingX: 1, children: /* @__PURE__ */ jsx(Keys, { items: [["1-4", "tab"], ["j/k", "scroll"], ["n", "new file"], ["r", "run judge"], ["l", "lang"], ["esc", "back"]] }) })
647
+ ] });
648
+ }
649
+ function App() {
650
+ const [slug, setSlug] = useState(null);
651
+ const [lang, setLang] = useState("go");
652
+ const [progress, setProgress] = useState(loadProgress());
653
+ return slug ? /* @__PURE__ */ jsx(Detail, { slug, lang, setLang, onBack: () => setSlug(null), onSolved: () => setProgress(loadProgress()) }) : /* @__PURE__ */ jsx(ListScreen, { onOpen: setSlug, lang, setLang, progress });
654
+ }
655
+
656
+ // src/server.js
657
+ import http from "node:http";
658
+ import fs6 from "node:fs";
659
+ import path5 from "node:path";
660
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
661
+ var here2 = path5.dirname(fileURLToPath2(import.meta.url));
662
+ var webDir = path5.join(here2, "web");
663
+ var MIME = { ".html": "text/html; charset=utf-8", ".js": "text/javascript", ".css": "text/css", ".svg": "image/svg+xml", ".json": "application/json" };
664
+ var send = (res, code, body) => {
665
+ res.writeHead(code, { "content-type": "application/json" });
666
+ res.end(JSON.stringify(body));
667
+ };
668
+ var readBody = (req) => new Promise((ok) => {
669
+ let b = "";
670
+ req.on("data", (c) => b += c);
671
+ req.on("end", () => ok(b));
672
+ });
673
+ function startServer({ port = 3e3, host = "127.0.0.1" } = {}) {
674
+ const server = http.createServer(async (req, res) => {
675
+ const url = new URL(req.url, `http://${req.headers.host}`);
676
+ try {
677
+ if (url.pathname === "/api/meta") return send(res, 200, { categories: allCategories(), progress: loadProgress() });
678
+ if (url.pathname === "/api/problems") {
679
+ const items = filterProblems({ q: url.searchParams.get("q") || "", difficulty: url.searchParams.get("difficulty") || "All", category: url.searchParams.get("category") || "" });
680
+ return send(res, 200, { total: items.length, items });
681
+ }
682
+ if (url.pathname.startsWith("/api/problem/")) {
683
+ const p = loadProblem(decodeURIComponent(url.pathname.slice(13)));
684
+ if (!p) return send(res, 404, { error: "not found" });
685
+ return send(res, 200, {
686
+ slug: p.slug,
687
+ id: p.label,
688
+ title: p.title,
689
+ difficulty: p.difficulty,
690
+ category: p.category,
691
+ judge: !!p.expected,
692
+ starter: p.starter,
693
+ md: { description: descriptionMd(p), hints: hintsMd(p), solution: solutionMd(p) }
694
+ });
695
+ }
696
+ if (url.pathname === "/api/scaffold" && req.method === "POST") {
697
+ const { slug, lang } = JSON.parse(await readBody(req) || "{}");
698
+ return send(res, 200, scaffold(slug, lang in LANGS ? lang : "go"));
699
+ }
700
+ if (url.pathname === "/api/judge" && req.method === "POST") {
701
+ const { slug, lang, code } = JSON.parse(await readBody(req) || "{}");
702
+ const r = judge({ slug, lang, code });
703
+ if (r.verdict === "AC") markSolved(slug, lang);
704
+ return send(res, 200, r);
705
+ }
706
+ let rel = url.pathname === "/" ? "/index.html" : url.pathname;
707
+ const f = path5.join(webDir, path5.normalize(rel).replace(/^(\.\.[/\\])+/, ""));
708
+ if (!f.startsWith(webDir) || !fs6.existsSync(f) || fs6.statSync(f).isDirectory()) {
709
+ res.writeHead(404);
710
+ return res.end("not found");
711
+ }
712
+ res.writeHead(200, { "content-type": MIME[path5.extname(f)] || "application/octet-stream" });
713
+ fs6.createReadStream(f).pipe(res);
714
+ } catch (e) {
715
+ send(res, 500, { error: e.message });
716
+ }
717
+ });
718
+ return new Promise((resolve, reject) => {
719
+ server.once("error", reject);
720
+ server.listen(port, host, () => resolve({ server, url: `http://${host}:${port}` }));
721
+ });
722
+ }
723
+
724
+ // src/cli.jsx
725
+ import { jsx as jsx2 } from "react/jsx-runtime";
726
+ var args = process.argv.slice(2);
727
+ var cmd = args[0];
728
+ var flag = (n, d) => {
729
+ const i = args.indexOf(`--${n}`);
730
+ return i > -1 ? args[i + 1] : d;
731
+ };
732
+ var HELP = `offcode by Limon Das (npm: offcode)
733
+
734
+ offcode terminal UI
735
+ offcode serve [--port 3000] web UI
736
+ offcode list [query] search problems
737
+ offcode pick <slug> [--lang go|python|cpp] create starter file in ./offcode/
738
+ offcode judge <file> judge ./offcode/<id>-<slug>/solution.go|py
739
+ offcode --version
740
+ `;
741
+ if (!cmd) {
742
+ const out = process.stdout;
743
+ out.write("\x1B[?1049h\x1B[H");
744
+ const app = render(/* @__PURE__ */ jsx2(App, {}));
745
+ app.waitUntilExit().then(() => {
746
+ out.write("\x1B[?1049l");
747
+ });
748
+ } else if (cmd === "serve") {
749
+ startServer({ port: Number(flag("port", 3e3)) }).then(({ url }) => console.log(`offcode web UI: ${url}`)).catch((e) => {
750
+ console.error(e.message);
751
+ process.exit(1);
752
+ });
753
+ } else if (cmd === "list") {
754
+ for (const p of filterProblems({ q: args[1] || "" }).slice(0, 60))
755
+ console.log(`${String(p.label).padStart(5)} ${p.title} [${p.difficulty}]${p.judge ? "" : " (no judge)"}`);
756
+ } else if (cmd === "pick") {
757
+ try {
758
+ const r = scaffold(args[1], flag("lang", "go"));
759
+ console.log(`${r.created ? "created" : "exists"}: ${r.file}`);
760
+ } catch (e) {
761
+ console.error(e.message, `
762
+ langs: ${LANG_KEYS.join(", ")}`);
763
+ process.exit(1);
764
+ }
765
+ } else if (cmd === "judge") {
766
+ const file2 = args[1];
767
+ if (!file2 || !fs7.existsSync(file2)) {
768
+ console.error("usage: offcode judge <file>");
769
+ process.exit(1);
770
+ }
771
+ const slug = path6.basename(path6.dirname(path6.resolve(file2))).replace(/^b?\d+-/, "");
772
+ const lang = langFromExt(file2);
773
+ if (!loadProblem(slug)) {
774
+ console.error(`cannot tell the problem from folder name: ${slug}`);
775
+ process.exit(1);
776
+ }
777
+ const r = judge({ slug, lang, code: fs7.readFileSync(file2, "utf8") });
778
+ if (r.verdict === "AC") markSolved(slug, lang);
779
+ console.log(r.verdict === "AC" ? `Accepted ${r.passed}/${r.total} ${r.ms} ms` : `${r.verdict}${r.total ? ` ${r.passed}/${r.total}` : ""}`);
780
+ if (r.message) console.log(r.message);
781
+ if (r.fail) {
782
+ console.log(`test ${r.fail.i + 1}: ${r.fail.input}`);
783
+ if (r.fail.expected !== void 0) console.log(`expected: ${JSON.stringify(r.fail.expected).slice(0, 300)}`);
784
+ if (r.fail.got !== void 0 && r.fail.got !== null) console.log(`got: ${JSON.stringify(r.fail.got).slice(0, 300)}`);
785
+ if (r.fail.error) console.log(r.fail.error);
786
+ }
787
+ process.exit(r.verdict === "AC" ? 0 : 1);
788
+ } else if (cmd === "--version" || cmd === "-v") {
789
+ const here3 = path6.dirname(fileURLToPath3(import.meta.url));
790
+ console.log(JSON.parse(fs7.readFileSync(path6.join(here3, "..", "package.json"), "utf8")).version);
791
+ } else {
792
+ console.log(HELP);
793
+ }