Files
leetcode-cpp/build.ps1
2026-03-11 22:31:31 +08:00

90 lines
2.1 KiB
PowerShell
Executable File

#!pwsh
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$problemId
)
begin
{
$ErrorActionPreference = 'Stop'
}
end
{
Write-Host "Try to fetch problem $($problemId)"
$graphQuery = @'
query questionData($titleSlug: String!) {
question(titleSlug: $titleSlug) {
content
stats
codeDefinition
sampleTestCase
metaData
}
}
'@
$response = Invoke-RestMethod -Uri "https://leetcode.cn/api/problems/algorithms/" -Method Get
$problem = @($response.stat_status_pairs | Where-Object { $_.stat.frontend_question_id -eq $problemId })
if ($problem.Count -ne 1)
{
Write-Error "Failed to find target problem $($problemId)"
}
$problem = $problem[0]
$problemNumber = "{0:D4}" -f ($problem.stat.frontend_question_id -as [int])
$filename = "$problemNumber-$($problem.stat.question__title_slug).cpp"
$existedFile = @(Get-ChildItem ./src/problems | Where-Object { $_.Name -eq $filename})
if ($existedFile.Count -gt 0)
{
Write-Error "Problem $($problem.stat.question__title_slug) has been fetched, see src/problems/$filename."
}
$variables = @{
titleSlug = $problem.stat.question__title_slug
} | ConvertTo-Json
$query = @{
operationName = "questionData"
variables = $variables
query = $graphQuery
}
Write-Host "Try to fetch details of $($problem.stat.question__title_slug)"
$response = Invoke-RestMethod -Uri "https://leetcode.cn/graphql" -Body $query -Method Post
$codeDefinition = @($response.data.question.codeDefinition | ConvertFrom-Json | Where-Object { $_.value -eq "cpp" })
if ($codeDefinition.Count -ne 1)
{
Write-Error "Failed to find C++ code definition"
}
$testcaseName = "P$($problem.stat.frontend_question_id)"
$outputCode = @"
/**
* [$($problem.stat.frontend_question_id)] $($problem.stat.question__title_slug)
*/
#include <gtest/gtest.h>
using namespace std;
// submission codes start here
$($codeDefinition[0].defaultCode)
// submission codes end
TEST($testcaseName, Test1)
{
}
"@
Set-Content -Path "./src/problems/$($filename)" -Value $outputCode
Write-Host "Saved as $filename."
}