File tree Expand file tree Collapse file tree 7 files changed +72
-99
lines changed Expand file tree Collapse file tree 7 files changed +72
-99
lines changed Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ const logger = require("koa-logger");
10
10
const passport = require ( "./middleware/passport" ) ;
11
11
const index = require ( "./routes/index" ) ;
12
12
const users = require ( "./routes/users" ) ;
13
+ const dailyProblem = require ( "./routes/dailyProblem" ) ;
13
14
const lectures = require ( "./routes/lectures" ) ;
14
15
const mockUserInfo = require ( "./middleware/mockUserInfo" ) ;
15
16
@@ -50,6 +51,7 @@ app.use(async (ctx, next) => {
50
51
app . use ( index . routes ( ) , index . allowedMethods ( ) ) ;
51
52
app . use ( users . routes ( ) , users . allowedMethods ( ) ) ;
52
53
app . use ( lectures . routes ( ) , lectures . allowedMethods ( ) ) ;
54
+ app . use ( dailyProblem . routes ( ) , dailyProblem . allowedMethods ( ) ) ;
53
55
54
56
// error-handling
55
57
app . on ( "error" , ( err , ctx ) => {
Original file line number Diff line number Diff line change
1
+ const router = require ( "koa-router" ) ( ) ;
2
+ const solutions = require ( "../static/solution/solutions.json" ) ;
3
+ const { decrypt } = require ( "../utils/crypto" ) ;
4
+
5
+ const { success } = require ( "../utils/request" ) ;
6
+
7
+ router . get ( "/api/v1/daily-problem" , async ( ctx ) => {
8
+ // 1. 获取当前时间
9
+ // 2. 根据当前时间和活动开始时间计算当前是 Day 几
10
+ // 3. 根据 Day 几 计算出具体返回哪一个题目
11
+
12
+ ctx . body = success ( {
13
+ day : 1 ,
14
+ title : "66. 加一" ,
15
+ link : "https://leetcode-cn.com/problems/plus-one" ,
16
+ tags : [ "基础篇" , "数组" ] , // 目前所有 README 都是没有的。因此如果没有的话,你可以先不返回,有的话就返回。后面我慢慢补
17
+ pres : [ "数组的遍历(正向遍历和反向遍历)" ] ,
18
+ description : `
19
+ 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
20
+
21
+ 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
22
+
23
+ 你可以假设除了整数 0 之外,这个整数不会以零开头。
24
+
25
+ 示例 1:
26
+
27
+ 输入: [1,2,3]
28
+ 输出: [1,2,4]
29
+ 解释: 输入数组表示数字 123。
30
+ 示例 2:
31
+
32
+ 输入: [4,3,2,1]
33
+ 输出: [4,3,2,2]
34
+ 解释: 输入数组表示数字 4321。
35
+ ` ,
36
+ } ) ;
37
+ } ) ;
38
+
39
+ router . get ( "/api/v1/daily-problem/solution" , async ( ctx ) => {
40
+ // 逻辑和上面类似,只是返回值为 Markdown
41
+ ctx . body = success ( {
42
+ content : decrypt ( solutions [ 1 ] . content ) ,
43
+ } ) ;
44
+ } ) ;
45
+
46
+ module . exports = router ;
Original file line number Diff line number Diff line change @@ -257,11 +257,11 @@ const lectures = {
257
257
} ;
258
258
259
259
// 先导
260
- lectures . intro [ "-2 " ] . content = encrypt (
260
+ lectures . intro [ "-4 " ] . content = encrypt (
261
261
Buffer . from ( fs . readFileSync ( "./-1.intro-01.md" ) , "utf8" )
262
262
) ;
263
263
264
- lectures . intro [ "-1 " ] . content = encrypt (
264
+ lectures . intro [ "-3 " ] . content = encrypt (
265
265
Buffer . from ( fs . readFileSync ( "./-2.intro-02.md" ) , "utf8" )
266
266
) ;
267
267
Load Diff Large diffs are not rendered by default.
Load Diff Large diffs are not rendered by default.
Original file line number Diff line number Diff line change
1
+ const fs = require ( "fs" ) ;
2
+
3
+ const { encrypt } = require ( "../../utils/crypto.js" ) ;
4
+
5
+ const solutions = {
6
+ 1 : { } ,
7
+ } ;
8
+
9
+ [ 1 ] . forEach ( ( i ) => {
10
+ solutions [ i ] . content = encrypt (
11
+ Buffer . from ( fs . readFileSync ( `./d${ i } .md` ) , "utf8" )
12
+ ) ;
13
+ } ) ;
14
+
15
+ fs . writeFileSync ( "./solutions.json" , JSON . stringify ( solutions ) ) ;
Original file line number Diff line number Diff line change
1
+ {
2
+ "1" : {
3
+ "content": "0961e884611df7d4ac47a79a9e3b6f2a73993341aebd41ad6fc7d3caafc892fcc3222bedaf0b7fcdfb836cbe24eca71cb8280288853818d3b129f73dfffaf134e373656b9ebeabb04a634b67711aa6b1b10b920e4b7166f434b925a46078550897d84bd1813143e4aec5d6f95f054e48ae519fcdbda2034784033b768d6ed37af0a6122a666d4f5f7baa6cbb4fd837b55477069068281749ced7107bddb2fa0776760f0766e9ce2e50542c87ac1a675c4eefee9227377a0db75bb45432932999b7d16e9b014db50ef7f42d18d7213d02fc36b2356775ce9f47289b9f6a0c13cda1cfb81fe6a36a8af5372e30e7d3d192136b35f3c4a7640d4679826a532e43f9f00eee96e8d246c9216f1466fc3f057198aabc6db51ff922bf712a46b0cd08911b65f0cf09a486af0e98336807947640ebb92259ede3c5180516b5f31fc850f54966edcc376c0c6cd9de5f9ab8d003d0c2a188c6c8b3951fae788f8f505f56cc84caf19912df39db300350af81f70a7a729dda71c25895f7e5ed70e92473668f76bf26456a6f0563aa8568fae061b18fd6701198f98dcf7de177718652182e75a8eb1f7e1876a86697d1796992b09b766f715a6eae55d1ee222375b6546066353bff13afb639c70e5d24fab6fdafe4bddd58f4113d8c99f5f556d349e1d5ff10cf7785bb8c20634cc98d81021d9defc094c9e513feba15de9c158a31de8911da9b23353321821d698c51cc47b6edf0f4e546477f73e0ca39e7c80a48602a7c9c4fc594f9c8e583bffb0856a4f1fc827c746b382c078d068b8e122a7d19ca01056e1e3ac5fbc394b84b3978555c98485e379b599e1a34f542feb81760f9bd6450e7f47864ae584c17712fed0dc9b96417aaaefca58ddc5236a5b4d0011d3b2b74453222eca819d4bd95e8166ecb53f7dbd86f142fde67a7449f4faacc17a8cfc168e4521ededfe78471145fe006602133ddb89dcb69e8a6c5a37ff52ec8a16186c31d93343233a41ef2c81f38f063e492b817035358f3527dc8d91350fb8c2fa4c362d50866236cdef2090c222b2f8018b9aec571ca7d671f7dccdb55efc664b979140fb7d02cb665ab36d3b86383041c83e7acea38832d72cacdeb813076826829827a1b7d4ebb5b9a6c8e2bd73e917b20e6fbaf4a292b8296fcd12b7b4b05522e13050732d6d8f319361ebeaacc26b732185b6a2eadbc7ff02172de1dce46dcc880fce4e1ccde7ccc1c8ad996ed49b5988996a5e3fdb328976c9530df3d20e35ba68408f43603aba168e0acb85a207d81b2a28b724e4eeacd9fe8d287e98f84e81fa1e45352f1548a0c19b4bd219b9def48e53431a6f88cd09b71c52672d27db04127c971e4815c4b1ced9aac8db6a4e68a88773ea89bd0d4b277f62005b158bdbd90b9fd4afeccc2c76570feae1bc9906c1d3a35ebc284636da18e1f1d86a9796c0204c2bc7734b442ae12bd70a226f6fed8c84789b62816c1049f2956b0bf90730774861814a2b5180ff5e86bb5a9d04f5a3c1976779f7284074e2e69cfda22c14b1560b3cb45a0195eb3fee0188a12735156c746796f8e2d068ea3ec74b3bdbea9371d72f89b9f887e4fc39b787d9e19632efe303b9d5a03597af2cdb439f3051b363299475d7f589604176edbe0da4acc35a5347a2b14dfd03f761b9e670666646a11578dde75a9adb83913d47da68e06c8d91641245a2bbecb882dcfab027ca4bf03a907f9dcde8aa10dcd4b21f25ce3b4049862200769877ffd2ed3a2b05e1abf103987c18fedd4d46a00269b088c6b4c2b31d5d6a910f4f2f415a7510742abf33351eee74c52b96d2a7ffbc62be1d5a586d908047376dc8187a998b1a1bfaafc7e00e831994c0704428bd7bd030a2f2e16194139e9d2b2722009af26ff6fbf9fd6204678295e0916c169684ea24dba68c97ef0349bbd6d2a40012565c8cf03f43e6f11ff311673a53fbc1874ce48a82c49f4015aec309e97bb685ecc4c459bf5eec2e823bc2b805ddf3fc6f33537e592aabcda40318d8440cb10947cc3034e458f90e8431fb942e1fd971eb0e9e522809b04a6616b60c193d7c03f53f575582f2dfe70b59434b85f4f835b9e343771a60b17b09a898391871a6558a1d4ecebc12d34094a94fd11328b08aaf09bb204365a108557738cf68e55ce3854fca2b85e266fd03db370bc3219124af7d07f9f3605181fcead6af10717a239cbddbc9aa9561644ff598a7fc1832b6d54fe2e534f032e3458206f9b2dd186a73eee77df368746fcd41c33e0ef8a24635ac98169770bdb1a4372a0aa76829837e5b1899726861b94b447d1d40ab4fa3ddffd352e519ed2eee7afe56355cb786eb3916f2197cd42d562d0caf6efe1e96d8f6b08e1530d7047ea31a417f0db8907eb17f716b9699990098193a85f1160b17ae418487715f84eb21a19b5d88b769e67cefbf4f307aadb44118bba524c0113e762f37b1dfbf782b6850fda1b36b4c013c3a54b19e25c69c0fed5b9783f5ff356a4bf6c1d3bb8abb14640ccb3d723a64bc85b454a6fd9806bc43d9fb41133b6eb35c2442507d39b9e22c18475c385ba9864f8567f7d9a9efc72838e9cb1e5f4813ae16b70b09764dbfada2d988b4ae5792c9133118d67ddd9653e78533ea412165d6dff80534a469e101c378a6a64efb92fd21eccf03475dc84f12bca9136a627cd90a4f58382ab816bfe859ad43c6e9907545771376dae2f6a4ee6dbe32374abedd399e972a7526301a65624863d591eada1be02c5b00c405fb4fc8446b5d240eccc1c10b8b1c842edd135cf8fc7e6bce2b43547522bdd2dbc82554567cad9eedbe1dd994fb63aaa0178396b362eae58bfdd786e262285b3d5504475c7cf32487c969d72be292bbec378c2d2c1bf1a475c20bd6c83e6fe2eef4dd62ceb12af3aa5a1e7c8b150042f777cdc429c3e1ce03571af88ad9c7d7bc5cd936cdfc29a7bbb0fa92f8fda9c9ce0cf8d0858d9baa00b94406fb2d69ce63d761d084167dcc7a2c2af156aff4bc34a759dd6f2ac17ab74101f593d380b200e08e25ab64454e6c03e49d0c9995a15560f2d1544992807faddfab56f2dc41e191b88e030f97a943340c54c7e9960adee600665a4435929eb727c4eea17af4fc6a938906a8b28e7e96df9a073dd9cacd1e5fe89fdfe982fdcb212d39ae9e1f85fcece5f700ea27e602984917c83efd8ef4cec8345879c18447e31c866cd701e846e9e1f4e4e7e923d29b654576df1b01849e132a57062b890aa868a8441e692a188ae61a6456ad4889f9f891a85727a017f1d77a7eab7ea46fcf0ad497d8dd24b276d9d701b94d78c8bb1638c2cf0005af6f16a8b0e3e1475fb187172163bdda39207a6bf60467a385f144a9765fd9f21c20da88a14b26a29cd342bc9c56213230f3e23b6de59abcc0cad2a02125bdb679cc65d185909d23f77e1e5dbe23b1ba0b42502a705c7c7a508704049198043b73743d4b724c981512ed00ba915156c37da99341a7740fc47b3d039a0c2a9fc8e487fb12ab82c16c5ac2254642b0438308a5f3569171b43226473149fbd7a14cbeb5edfeedf4370ee5b080d5f6ea3ad49669ef81e87cc2bccf8023fd7bd2d8b9447036d3b1e8a9a80521cfc2fcfa48c2064c6729c1b2fdadca3f590f2d1f8651da7ef9e62b296adf6f199a9b6cfa2fba20e7ce875b49e33b973b2e69d7123ef27fad569f4abfb968b234975180c3a722fb4cff57e2b9e69ea5372fccb9623b78c9c118031a0275dd61401d8e1482370bb564ade14030add893402e329653a57b82dbb5a3d9321745888553fc3cfa888f6cbe1d2e726c11cff3404193b8072ba329e6e5a2c2714cddaaf7e448880053f6f70e744c15418b37e6c50edac0aa7fb92d7b69bfc98a269fd41031bf9795cb9df295487abc9b49e94caf355db333007cc4720b5d695f5ee8cebba873c54583a90747161294e8bbf2c4efdd8cb8c0afc0cf33b52854ca4261d99656ea7fd350eec898bf231fa60c4d6449c8d724c636f5db18acf568d150b141593a369894efb7d44826bfcd6b78f7e60f53f23bd2300aef1946ae5c5380985569cc98fab2fbf8183837890eb29594b7dfc34ed70d27390a7ea72716726c6db5e39ab11880f3109506acfaf85f4d19291f689bfe2c8683af83c4bcadc38974c386684997bdcb93831c05b9be96db15408c3cdf9ec9cd4811e787039cc323de65ada56ea6c23f82d54e0f8cdb1c41c315a106e77564ed5ef89a4b32f9779488903addcfb97b5553f3d273feb64bf18419f29b5d421a6ea6202597bda5291208e320e4e4910cf634aa1f7ebb2ef53849c1d5fbe7a5c6fa7f78e63952fe87ecf54a54affad7c18d90024c896b204b33292e22b1b137e4d78d4a34c89f1a9dbe9b6d8d4bc4961019137942ae8deaf21812242b1ade01a798b7f5543f140756d6f142f2f187d45b9cba19e8d212fabc62afd0173c4a84798954332c8b2ef80d6ccbd1b79f394b32a68356fdbf1a56a2b4922c0268591d763f8027da005b8f4352a792ccf2c98b6b234faf78d2f445f642f27846eba46c609b5088554af47110a380a302ab9dc9122ebf09d863d828e9b0b48420f8d15e41ffede8f50d886251d686528bc9cf728a6f6bf218452cbb5b6132f3e652df5ee70099b585c3b894aadb1056a8f8c90f36dd6b7538aab4fd6a7263dd79d076bda3fb2a3366fd05745284f9070407431511a9e0306f2f7207e8953c54af1c700e9eb40472edbbe655b5ef88771ee2a25397ef20968b9559940a71aed4f46ba0fc1e97d39f77a562de25d85439ac871875a05cfc9546424f51b6b6dcf32538b8ad9bba771e0d449f8518e71aca59e0385f786f29b33d15c6b503584b4f7122ce1c3de7d268758ec68637612204583158486d71f27b2c5eed1db0a4ebc29a6ea049fdbd8003142b34a67e51b869e6646b6c39db4e8ab08550ea83b31793afa76c7a128f1cb0ea22105167610fed12606bed6b7532e1fe0f1f57677530de8a10c2cb1a0168283c5924e0448777cb7681bb47c3bef9165041c979386ded5e6eb724fefd6b4f612c28ef41811e3afd5fb788d088117478373eebf39a28eb056c9a7dd047e5a7e843b14711130724946b77c07bc3c855f3c5347abe8dd9453380da3bb53feaddc5b5d963c12b41a52cfcf2f94b3f6eee68f9bccb1af5e6452d92bf603bbe31e947f02cf3b125f7c7055a3da5d7d407ab892c806671624bb85430ee2f53bc1e3961433ce4cb92de6c14f757ed47fbea88d73c13910ea2be05d5a8ef13515052242546adcf1ec298c550a524bc1f5f16023a0c057dc4ee3f8e5c9dbf5fa93dd6c84ed849d54e74f57fc12f8ea031fb81310b7478edfa7a2e04797979d2f33449401ea686fe8154bbcb0a6788bece4249824268ba8e44ec9d5dff93182db520ba9e7a7767c54e2bb8a3a3741b6a3274ede4c4563f9aa341e1803c7e141d22bde8347646dd59f3355d6346317b162acd4d6c80cf1542e550bc862dff9f05cfbd1f80ae09a81e50a2aac76f883b3716e522a163869a7c2fdaea44b861a1ba7e28e9823c6c999d70f48d252bd0d5ec584df5e61ca0b6f8c"
4
+ }
5
+ }
You can’t perform that action at this time.
0 commit comments