Skip to content

Commit

Permalink
Support multidimensional arrays in LeetCode
Browse files Browse the repository at this point in the history
See #50
  • Loading branch information
slycelote committed Jan 28, 2022
1 parent 41f6f60 commit 73cc3c8
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 8 deletions.
4 changes: 3 additions & 1 deletion libcaide/src/Caide/CPP/cpptype.mustache
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
{{#dimension_is_1}}vector<{{/dimension_is_1}}{{type}}{{#type_is_long}} long{{/type_is_long}}{{#dimension_is_1}}>{{/dimension_is_1}}
{{#dimension_is_1}}vector<{{/dimension_is_1}}{{#dimension_is_2}}vector<vector<{{/dimension_is_2}}{{#dimension_is_3}}vector<vector<vector<{{/dimension_is_3}}{{type
}}{{#type_is_long}} long{{/type_is_long
}}{{#dimension_is_1}}>{{/dimension_is_1}}{{#dimension_is_2}}> >{{/dimension_is_2}}{{#dimension_is_3}}> > >{{/dimension_is_3}}
2 changes: 1 addition & 1 deletion libcaide/src/Caide/CSharp/cstype.mustache
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{{type}}{{#dimension_is_1}}[]{{/dimension_is_1}}
{{type}}{{#dimension_is_1}}[]{{/dimension_is_1}}{{#dimension_is_2}}[][]{{/dimension_is_2}}{{#dimension_is_3}}[][][]{{/dimension_is_3}}
8 changes: 6 additions & 2 deletions libcaide/src/Caide/CSharp/serializer.mustache
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
{{# dimension_is_1}}Caide.S.v({{/dimension_is_1
{{#dimension_is_1}}Caide.S.v({{/dimension_is_1
}}{{#dimension_is_2}}Caide.S.v(Caide.S.v({{/dimension_is_2
}}{{#dimension_is_3}}Caide.S.v(Caide.S.v(Caide.S.v({{/dimension_is_3
}}{{#type_is_int}}new Caide.IntSerializer(){{/type_is_int
}}{{#type_is_long}}new Caide.LongSerializer(){{/type_is_long
}}{{#type_is_double}}new Caide.DoubleSerializer(){{/type_is_double
}}{{#type_is_bool}}new Caide.BoolSerializer(){{/type_is_bool
}}{{#type_is_string}}new Caide.StringSerializer(){{/type_is_string
}}{{#dimension_is_1}}){{/dimension_is_1}}
}}{{#dimension_is_1}}){{/dimension_is_1
}}{{#dimension_is_2}})){{/dimension_is_2
}}{{#dimension_is_3}}))){{/dimension_is_3}}
9 changes: 7 additions & 2 deletions libcaide/src/Caide/Parsers/LeetCode.hs
Original file line number Diff line number Diff line change
Expand Up @@ -169,17 +169,22 @@ typeParser =
<|> try (string "string" $> TCString)
<|> try (string "double" $> TCDouble)
<|> try (string "boolean" $> TCBool)

format1 = do
_ <- try $ string "list<"
arr <- many (string "list<")
let n = 1 + length arr
typ <- elementTypeParser
_ <- string ">"
_ <- Parsec.count n (string ">")
eof
return (typ, 1)
return (typ, n)

format2 = do
typ <- elementTypeParser
arr <- many (string "[]")
eof
return (typ, length arr)

in format1 <|> format2

parseValue :: Param -> Either Text TopcoderValue
Expand Down
6 changes: 6 additions & 0 deletions libcaide/test/ProblemParsers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,12 @@ problemParserTests = TestList
{ problemType = mkProblemType "leetcode,detectCapitalUse:bool,word:String" }
[ mkTestCase "\"USA\"" "true"
, mkTestCase "\"FlaG\"" "false" ]
, lc "https://leetcode.com/problems/k-highest-ranked-items-within-a-price-range"
(makeProblem "K Highest Ranked Items Within a Price Range" "k-highest-ranked-items-within-a-price-range")
{ problemType = mkProblemType "leetcode,highestRankedKItems:vvint,grid:vvint,pricing:vint,start:vint,k:int" }
[ mkTestCase "[[1,2,0,1],[1,3,0,1],[0,2,5,1]]\n[2,5]\n[0,0]\n3" "[[0,1],[1,1],[2,1]]"
, mkTestCase "[[1,2,0,1],[1,3,3,1],[0,2,5,1]]\n[2,3]\n[2,3]\n2" "[[2,1],[1,2]]"
, mkTestCase "[[1,1,1],[0,0,1],[2,3,4]]\n[2,3]\n[0,0]\n3" "[[2,1],[2,0]]" ]
]
]
where
Expand Down
2 changes: 1 addition & 1 deletion libcaide/tests/csharp.test
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ run_csharp_executable ./prob.exe
"$CSC" -target:library submission.cs
cd ..

"$CAIDE" problem prob3 --lang csharp --type leetcode,methodName:long,i:int,d:double,s:String,b:bool,vi:vint,vs:vString
"$CAIDE" problem prob3 --lang csharp --type leetcode,methodName:long,i:int,d:double,s:String,b:bool,vi:vint,vs:vvString
cd prob3
"$CSC" -out:prob.exe prob*.cs
run_csharp_executable ./prob.exe
Expand Down
2 changes: 1 addition & 1 deletion libcaide/tests/simplecpp.test