From 91f6605c14f35aba513ef1a8480aad10da4634ef Mon Sep 17 00:00:00 2001 From: Tom Hummel Date: Mon, 8 Sep 2025 20:25:53 -0700 Subject: [PATCH 1/2] Add Rules workflow --- .github/workflows/rules.yml | 25 +++++++++++++++++++++++++ .mergify.yml | 1 + 2 files changed, 26 insertions(+) create mode 100644 .github/workflows/rules.yml diff --git a/.github/workflows/rules.yml b/.github/workflows/rules.yml new file mode 100644 index 000000000..382aa17af --- /dev/null +++ b/.github/workflows/rules.yml @@ -0,0 +1,25 @@ +name: Run Rules Scripts + +on: + pull_request: + +jobs: + run-rules: + name: Run Rules + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 20 + - name: Install zx + run: npm install -g zx + - name: Run rule scripts on puzzles + run: | + set -o pipefail + for script in content/r/*.md; do + if [[ "$(basename "$script")" != "_index.md" ]]; then + echo "Running $script" + find content/w -name "*.md" | grep -v "_index" | xargs -I {} sh -c "cat {} | zx $script" + fi + done diff --git a/.mergify.yml b/.mergify.yml index add60472c..a938ebc6e 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -5,6 +5,7 @@ pull_request_rules: - base=main - label=puzzle - check-success=Cloudflare Pages + - check-success=Run Rules actions: merge: method: squash From 5d564bad198cbf6c151712dae3885e370dd3a383 Mon Sep 17 00:00:00 2001 From: Tom Hummel Date: Mon, 8 Sep 2025 21:04:41 -0700 Subject: [PATCH 2/2] Fix guess count rule parsing --- content/r/guess-count.md | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/content/r/guess-count.md b/content/r/guess-count.md index dcc8541d6..9ad504c46 100644 --- a/content/r/guess-count.md +++ b/content/r/guess-count.md @@ -46,21 +46,17 @@ process.stdin.on("data", function (input) { }); process.stdin.on("end", function () { - runTests(_input) + runTests(_input) }); -function runTests (yaml) { - const firstDoc = YAML.parseAllDocuments(yaml)[0] - const title = firstDoc.contents.items.find(item => item.key.value === 'title') +function runTests (input) { + const frontMatter = input.match(/^---\n([\s\S]*?)\n---/) + const data = frontMatter ? YAML.parse(frontMatter[1]) : {} + const { title, state = {} } = data + const { boardState = [], evaluations = [], rowIndex } = state - const state = firstDoc.contents.items.find(item => item.key.value === 'state') - const rowIndex = state.value.items.find(item => item.key.value === 'rowIndex').value.value - - const evaluations = state.value.items.find(item => item.key.value === 'evaluations') - const boardState = state.value.items.find(item => item.key.value === 'boardState') - - const guessesFromBoardState = boardState.value.items.filter(i => i.value.length === 5).length - const guessesFromEvaluations = evaluations.value.items.filter(i => ['SEQ','FLOW_SEQ'].includes(i.type)).length + const guessesFromBoardState = boardState.filter(g => g && g.length === 5).length + const guessesFromEvaluations = evaluations.filter(e => Array.isArray(e)).length debug({ guessesFromBoardState, @@ -71,30 +67,30 @@ function runTests (yaml) { const testFile = __filename.split("/")[__filename.split("/").length-1] - console.log(`[Test: ${testFile}] Title: ${title.value}`) + console.log(`[Test: ${testFile}] Title: ${title}`) assert.equal( guessesFromBoardState, guessesFromEvaluations, - "guess count from board state should match guess count from evaluations" + "guess count from board state should match guess count from evaluations", ) assert.equal( guessesFromBoardState, rowIndex, - "guess count from board state should match the ending rowIndex" + "guess count from board state should match the ending rowIndex", ) assert.equal( guessesFromEvaluations, rowIndex, - "guess count from evaluations should match the ending rowIndex" + "guess count from evaluations should match the ending rowIndex", ) } process.stdin.resume(); function debug (msg) { - if (process.env.DEBUG) console.log(msg) + if (process.env.DEBUG) console.log(msg) } ```