Skip to content
Merged
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
8 changes: 4 additions & 4 deletions exercises/practice/acronym/.meta/template.j2
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{{ header }}
{% for case in cases %}
@test "{{ case["description"] }}" {
{% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f {{ solution }} <<< "{{ case["input"]["phrase"] }}"
assert_success
assert_output "{{ case["expected"] }}"
{% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f {{ solution }} <<< "{{ case["input"]["phrase"] }}"
assert_success
assert_output "{{ case["expected"] }}"
}
{% endfor %}
75 changes: 38 additions & 37 deletions exercises/practice/acronym/test-acronym.bats
Original file line number Diff line number Diff line change
@@ -1,67 +1,68 @@
#!/usr/bin/env bats
load bats-extra

# generated on 2026-06-29T23:39:19+00:00
# generated on 2026-08-14T19:13:01+00:00

@test "basic" {
# [[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Portable Network Graphics"
assert_success
assert_output "PNG"
# [[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Portable Network Graphics"
assert_success
assert_output "PNG"
}

@test "lowercase words" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Ruby on Rails"
assert_success
assert_output "ROR"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Ruby on Rails"
assert_success
assert_output "ROR"
}

@test "punctuation" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "First In, First Out"
assert_success
assert_output "FIFO"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "First In, First Out"
assert_success
assert_output "FIFO"
}

@test "all caps word" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "GNU Image Manipulation Program"
assert_success
assert_output "GIMP"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "GNU Image Manipulation Program"
assert_success
assert_output "GIMP"
}

@test "punctuation without whitespace" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Complementary metal-oxide semiconductor"
assert_success
assert_output "CMOS"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Complementary metal-oxide semiconductor"
assert_success
assert_output "CMOS"
}

@test "very long abbreviation" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Rolling On The Floor Laughing So Hard That My Dogs Came Over And Licked Me"
assert_success
assert_output "ROTFLSHTMDCOALM"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Rolling On The Floor Laughing So Hard That My Dogs Came Over And Licked Me"
assert_success
assert_output "ROTFLSHTMDCOALM"
}

@test "consecutive delimiters" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Something - I made up from thin air"
assert_success
assert_output "SIMUFTA"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Something - I made up from thin air"
assert_success
assert_output "SIMUFTA"
}

@test "apostrophes" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Halley's Comet"
assert_success
assert_output "HC"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "Halley's Comet"
assert_success
assert_output "HC"
}

@test "underscore emphasis" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "The Road _Not_ Taken"
assert_success
assert_output "TRNT"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run gawk -f acronym.awk <<< "The Road _Not_ Taken"
assert_success
assert_output "TRNT"
}

16 changes: 8 additions & 8 deletions exercises/practice/alphametics/.meta/template.j2
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{{ header }}
{% for case in cases %}
@test "{{ case.description }}" {
{% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "{{ case.input.puzzle }}"
assert_success
{% if case.expected %}
assert_output "{% for letter, digit in case.expected | dictsort %}{{ letter }}={{ digit }}{% if not loop.last %} {% endif %}{% endfor %}"
{% else %}
refute_output
{% endif %}
{% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "{{ case.input.puzzle }}"
assert_success
{% if case.expected %}
assert_output "{% for letter, digit in case.expected | dictsort %}{{ letter }}={{ digit }}{% if not loop.last %} {% endif %}{% endfor %}"
{% else %}
refute_output
{% endif %}
}
{% endfor %}
122 changes: 61 additions & 61 deletions exercises/practice/alphametics/test-alphametics.bats
Original file line number Diff line number Diff line change
@@ -1,95 +1,95 @@
#!/usr/bin/env bats
load bats-extra

# generated on 2026-08-13T17:52:46+00:00
# generated on 2026-08-14T19:13:41+00:00

@test "puzzle with three letters" {
# [[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "I + BB == ILL"
assert_success
assert_output "B=9 I=1 L=0"
# [[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "I + BB == ILL"
assert_success

assert_output "B=9 I=1 L=0"

}

@test "solution must have unique value for each letter" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "A == B"
assert_success
refute_output
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "A == B"
assert_success

refute_output

}

@test "leading zero solution is invalid" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "ACA + DD == BD"
assert_success
refute_output
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "ACA + DD == BD"
assert_success

refute_output

}

@test "puzzle with two digits final carry" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "A + A + A + A + A + A + A + A + A + A + A + B == BCC"
assert_success
assert_output "A=9 B=1 C=0"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "A + A + A + A + A + A + A + A + A + A + A + B == BCC"
assert_success

assert_output "A=9 B=1 C=0"

}

@test "puzzle with four letters" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "AS + A == MOM"
assert_success
assert_output "A=9 M=1 O=0 S=2"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "AS + A == MOM"
assert_success

assert_output "A=9 M=1 O=0 S=2"

}

@test "puzzle with six letters" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "NO + NO + TOO == LATE"
assert_success
assert_output "A=0 E=2 L=1 N=7 O=4 T=9"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "NO + NO + TOO == LATE"
assert_success

assert_output "A=0 E=2 L=1 N=7 O=4 T=9"

}

@test "puzzle with seven letters" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "HE + SEES + THE == LIGHT"
assert_success
assert_output "E=4 G=2 H=5 I=0 L=1 S=9 T=7"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "HE + SEES + THE == LIGHT"
assert_success

assert_output "E=4 G=2 H=5 I=0 L=1 S=9 T=7"

}

@test "puzzle with eight letters" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "SEND + MORE == MONEY"
assert_success
assert_output "D=7 E=5 M=1 N=6 O=0 R=8 S=9 Y=2"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "SEND + MORE == MONEY"
assert_success

assert_output "D=7 E=5 M=1 N=6 O=0 R=8 S=9 Y=2"

}

@test "puzzle with ten letters" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "AND + A + STRONG + OFFENSE + AS + A + GOOD == DEFENSE"
assert_success
assert_output "A=5 D=3 E=4 F=7 G=8 N=0 O=2 R=1 S=6 T=9"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "AND + A + STRONG + OFFENSE + AS + A + GOOD == DEFENSE"
assert_success

assert_output "A=5 D=3 E=4 F=7 G=8 N=0 O=2 R=1 S=6 T=9"

}

@test "puzzle with ten letters and 199 addends" {
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "THIS + A + FIRE + THEREFORE + FOR + ALL + HISTORIES + I + TELL + A + TALE + THAT + FALSIFIES + ITS + TITLE + TIS + A + LIE + THE + TALE + OF + THE + LAST + FIRE + HORSES + LATE + AFTER + THE + FIRST + FATHERS + FORESEE + THE + HORRORS + THE + LAST + FREE + TROLL + TERRIFIES + THE + HORSES + OF + FIRE + THE + TROLL + RESTS + AT + THE + HOLE + OF + LOSSES + IT + IS + THERE + THAT + SHE + STORES + ROLES + OF + LEATHERS + AFTER + SHE + SATISFIES + HER + HATE + OFF + THOSE + FEARS + A + TASTE + RISES + AS + SHE + HEARS + THE + LEAST + FAR + HORSE + THOSE + FAST + HORSES + THAT + FIRST + HEAR + THE + TROLL + FLEE + OFF + TO + THE + FOREST + THE + HORSES + THAT + ALERTS + RAISE + THE + STARES + OF + THE + OTHERS + AS + THE + TROLL + ASSAILS + AT + THE + TOTAL + SHIFT + HER + TEETH + TEAR + HOOF + OFF + TORSO + AS + THE + LAST + HORSE + FORFEITS + ITS + LIFE + THE + FIRST + FATHERS + HEAR + OF + THE + HORRORS + THEIR + FEARS + THAT + THE + FIRES + FOR + THEIR + FEASTS + ARREST + AS + THE + FIRST + FATHERS + RESETTLE + THE + LAST + OF + THE + FIRE + HORSES + THE + LAST + TROLL + HARASSES + THE + FOREST + HEART + FREE + AT + LAST + OF + THE + LAST + TROLL + ALL + OFFER + THEIR + FIRE + HEAT + TO + THE + ASSISTERS + FAR + OFF + THE + TROLL + FASTS + ITS + LIFE + SHORTER + AS + STARS + RISE + THE + HORSES + REST + SAFE + AFTER + ALL + SHARE + HOT + FISH + AS + THEIR + AFFILIATES + TAILOR + A + ROOFS + FOR + THEIR + SAFE == FORTRESSES"
assert_success
assert_output "A=1 E=0 F=5 H=8 I=7 L=2 O=6 R=3 S=4 T=9"
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
run awk -f alphametics.awk <<< "THIS + A + FIRE + THEREFORE + FOR + ALL + HISTORIES + I + TELL + A + TALE + THAT + FALSIFIES + ITS + TITLE + TIS + A + LIE + THE + TALE + OF + THE + LAST + FIRE + HORSES + LATE + AFTER + THE + FIRST + FATHERS + FORESEE + THE + HORRORS + THE + LAST + FREE + TROLL + TERRIFIES + THE + HORSES + OF + FIRE + THE + TROLL + RESTS + AT + THE + HOLE + OF + LOSSES + IT + IS + THERE + THAT + SHE + STORES + ROLES + OF + LEATHERS + AFTER + SHE + SATISFIES + HER + HATE + OFF + THOSE + FEARS + A + TASTE + RISES + AS + SHE + HEARS + THE + LEAST + FAR + HORSE + THOSE + FAST + HORSES + THAT + FIRST + HEAR + THE + TROLL + FLEE + OFF + TO + THE + FOREST + THE + HORSES + THAT + ALERTS + RAISE + THE + STARES + OF + THE + OTHERS + AS + THE + TROLL + ASSAILS + AT + THE + TOTAL + SHIFT + HER + TEETH + TEAR + HOOF + OFF + TORSO + AS + THE + LAST + HORSE + FORFEITS + ITS + LIFE + THE + FIRST + FATHERS + HEAR + OF + THE + HORRORS + THEIR + FEARS + THAT + THE + FIRES + FOR + THEIR + FEASTS + ARREST + AS + THE + FIRST + FATHERS + RESETTLE + THE + LAST + OF + THE + FIRE + HORSES + THE + LAST + TROLL + HARASSES + THE + FOREST + HEART + FREE + AT + LAST + OF + THE + LAST + TROLL + ALL + OFFER + THEIR + FIRE + HEAT + TO + THE + ASSISTERS + FAR + OFF + THE + TROLL + FASTS + ITS + LIFE + SHORTER + AS + STARS + RISE + THE + HORSES + REST + SAFE + AFTER + ALL + SHARE + HOT + FISH + AS + THEIR + AFFILIATES + TAILOR + A + ROOFS + FOR + THEIR + SAFE == FORTRESSES"
assert_success

assert_output "A=1 E=0 F=5 H=8 I=7 L=2 O=6 R=3 S=4 T=9"

}

16 changes: 8 additions & 8 deletions exercises/practice/armstrong-numbers/.meta/template.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
# https://exercism.org/tracks/awk/exercises/grains
{% for case in cases %}
@test "{{ case["description"] }}" {
{% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip
{%- set flags="" %}
{%- if case["input"]["number"] > 10000000 %}
{%- set flags="-M " %}
{%- endif %}
run gawk {{ flags}}-f {{ solution }} -v num={{ case["input"]["number"] }}
assert_success
assert_output "{{ case["expected"] | lower }}"
{% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip
{%- set flags="" %}
{%- if case["input"]["number"] > 10000000 %}
{%- set flags="-M " %}
{%- endif %}
run gawk {{ flags}}-f {{ solution }} -v num={{ case["input"]["number"] }}
assert_success
assert_output "{{ case["expected"] | lower }}"
}
{% endfor %}
Loading