Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/rules.yml
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions .mergify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ pull_request_rules:
- base=main
- label=puzzle
- check-success=Cloudflare Pages
- check-success=Run Rules
actions:
merge:
method: squash
30 changes: 13 additions & 17 deletions content/r/guess-count.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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)
}
```
Loading