1+ /** Script to update ./.problemSiteData.json contains code for solutions hosted on neetcode.io */
2+
3+ const fs = require ( 'fs' ) ;
4+
5+ const PROBLEMS_OBJ = JSON . parse ( fs . readFileSync ( './.problemList.json' , 'utf8' ) ) ;
6+ const PROBLEMS_SITE_DATA = JSON . parse ( fs . readFileSync ( './.problemSiteData.json' , 'utf8' ) ) ;
7+
8+ const languages = [
9+ {
10+ name : 'C' ,
11+ directory : 'c' ,
12+ extension : 'c'
13+ } ,
14+ {
15+ name : 'C++' ,
16+ directory : 'cpp' ,
17+ extension : 'cpp'
18+ } ,
19+ {
20+ name : 'C#' ,
21+ directory : 'csharp' ,
22+ extension : 'cs'
23+ } ,
24+ {
25+ name : 'Java' ,
26+ directory : 'java' ,
27+ extension : 'java'
28+ } ,
29+ {
30+ name : 'Python' ,
31+ directory : 'python' ,
32+ extension : 'py'
33+ } ,
34+ {
35+ name : 'JavaScript' ,
36+ directory : 'javascript' ,
37+ extension : 'js'
38+ } ,
39+ {
40+ name : 'TypeScript' ,
41+ directory : 'typescript' ,
42+ extension : 'ts'
43+ } ,
44+ {
45+ name : 'Go' ,
46+ directory : 'go' ,
47+ extension : 'go'
48+ } ,
49+ {
50+ name : 'Ruby' ,
51+ directory : 'ruby' ,
52+ extension : 'rb'
53+ } ,
54+ {
55+ name : 'Swift' ,
56+ directory : 'swift' ,
57+ extension : 'swift'
58+ } ,
59+ {
60+ name : 'Kotlin' ,
61+ directory : 'kotlin' ,
62+ extension : 'kt'
63+ } ,
64+ {
65+ name : 'Rust' ,
66+ directory : 'rust' ,
67+ extension : 'rs'
68+ } ,
69+ {
70+ name : 'Scala' ,
71+ directory : 'scala' ,
72+ extension : 'scala'
73+ } ,
74+ ]
75+
76+ // Rename files to match leetcode url path, and normalize problem number to four digits.
77+ for ( const lang of languages ) {
78+ const langDir = lang . directory ;
79+ const langExt = lang . extension ;
80+
81+ // Get list of all files in the current lang directory
82+ const files = fs . readdirSync ( langDir , { withFileTypes : true } ) ;
83+ console . log ( `This many files in ${ langDir } : ${ files . length } ` ) ;
84+
85+ let counter = 0 ;
86+ for ( const category in PROBLEMS_OBJ ) {
87+ for ( const problem of PROBLEMS_OBJ [ category ] ) {
88+ const url = problem [ 1 ] ;
89+
90+ // Use leetcode url path to rename each problem for consistency
91+ let problemName = problem [ 1 ] . replace ( 'https://leetcode.com/problems/' , '' ) ;
92+ problemName = problemName . replace ( '/' , '' ) . toLowerCase ( ) ;
93+
94+ // Use problem number to find each problem
95+ const problemNumber = problem [ 2 ] ;
96+ const newProblemNumber = updateProblemNumber ( problem [ 2 ] ) ;
97+
98+ const foundFile = files . find ( file => file . name . startsWith ( `${ problemNumber . toString ( ) } -` ) ) ;
99+ if ( foundFile && foundFile . isFile ( ) ) {
100+ // rename file to match leetcode url path
101+ const oldFile = `${ langDir } /${ foundFile . name } ` ;
102+ const newFile = `${ langDir } /${ newProblemNumber } -${ problemName } .${ langExt } ` ;
103+ fs . renameSync ( oldFile , newFile ) ;
104+ counter ++ ;
105+
106+ updateSiteData ( url , `${ newProblemNumber } -${ problemName } ` , langDir ) ;
107+ }
108+ }
109+ }
110+ console . log ( `Renamed ${ counter } files in ${ langDir } , which had ${ files . length } total files.` ) ;
111+ }
112+
113+ // Add leading zeros to make four digits long (24 -> 0024)
114+ function updateProblemNumber ( problemNumberInt ) {
115+ let problemNumber = problemNumberInt . toString ( ) ;
116+ while ( problemNumber . length < 4 ) {
117+ problemNumber = '0' + problemNumber ;
118+ }
119+ return problemNumber ;
120+ }
121+
122+ function updateSiteData ( problemUrl , newCodeLink , langName ) {
123+ for ( const p of PROBLEMS_SITE_DATA ) {
124+ if ( problemUrl . includes ( p . link ) ) {
125+ p . code = newCodeLink ;
126+ p [ langName ] = true ;
127+ return ;
128+ }
129+ }
130+ console . log ( `Could not find ${ problemUrl } in PROBLEMS_SITE_DATA.` ) ;
131+ }
132+
133+
134+ fs . writeFile ( './.problemSiteData.json' , JSON . stringify ( PROBLEMS_SITE_DATA ) , function ( err ) {
135+ if ( err ) throw err ;
136+ console . log ( 'Saved!' ) ;
137+ } ) ;
138+
139+
140+ /** Update problem numbers in .problemList.json */
141+
142+ // for (const category in PROBLEMS_OBJ) {
143+ // for (const problem of PROBLEMS_OBJ[category]) {
144+ // problem[2] = updateProblemNumber(problem[2]);
145+ // }
146+ // }
147+
148+ // fs.writeFile('./.problemList.json', JSON.stringify(PROBLEMS_OBJ), function (err) {
149+ // if (err) throw err;
150+ // console.log('Saved!');
151+ // });
0 commit comments