diff --git a/.github/workflows/exercises.yml b/.github/workflows/exercises.yml index dc8f2437..f81f813b 100644 --- a/.github/workflows/exercises.yml +++ b/.github/workflows/exercises.yml @@ -55,3 +55,9 @@ jobs: - name: Run `check_exercises` run: _test/check_exercises + + - name: Compile `check_stubs.nim` + run: nim c --styleCheck:error _test/check_stubs.nim + + - name: Run `check_stubs` + run: _test/check_stubs diff --git a/_test/check_stubs.nim b/_test/check_stubs.nim new file mode 100644 index 00000000..a33e8844 --- /dev/null +++ b/_test/check_stubs.nim @@ -0,0 +1,55 @@ +import std/[os, osproc, strformat, strutils] + +iterator walkExerciseDirs: string = + const repoRootDir = currentSourcePath().parentDir().parentDir() + for exerciseKind in ["concept", "practice"]: + for exerciseDir in walkDirs(repoRootDir / "exercises" / exerciseKind / "*"): + yield exerciseDir + +proc checkStubs: seq[string] = + ## Compiles and runs the test file for every exercise, using the user-facing + ## solution stub. + ## + ## Returns the exercise slugs for which the corresponding test file either: + ## + ## - compiles with an error + ## + ## - runs without an error (the solution stub is supposed to fail the tests) + result = @[] + stderr.writeLine "Checking stubs..." + for exerciseDir in walkExerciseDirs(): + let slug = exerciseDir.lastPathPart() + let testPath = exerciseDir / &"test_{slug.replace('-', '_')}.nim" + stderr.writeLine &"{slug}" + const nimOptions = "--hints:off --usenimcache --filenames:canonical " & + "--spellSuggest:0 --styleCheck:error" + let (outpCompile, errCompile) = execCmdEx(&"nim c {nimOptions} {testPath}") + if errCompile == 0: + let (outpRun, errRun) = execCmdEx(&"nim r --hints:off {testPath}") + if errRun == 0: + stderr.write outpRun + stderr.writeLine &"Error: the {slug} stub passed the tests\n" + result.add slug + else: + stderr.writeLine outpCompile + result.add slug + +proc main = + let errorSlugs = checkStubs() + if errorSlugs.len > 0: + let msg = fmt""" + + Error: there were {errorSlugs.len} exercises with a problematic stub: + {errorSlugs.join(", ")}""".unindent() + echo msg + quit 1 + else: + const msg = """ + + Success. Every exercise has a test file and stub that: + - compiles without error + - runs with an error (we want the stub to fail the tests)""".unindent() + echo msg + +when isMainModule: + main() diff --git a/exercises/concept/lasagna/lasagna.nim b/exercises/concept/lasagna/lasagna.nim index e69de29b..b2f96a67 100644 --- a/exercises/concept/lasagna/lasagna.nim +++ b/exercises/concept/lasagna/lasagna.nim @@ -0,0 +1,14 @@ +let expectedMinutesInOven* = 5 + +proc remainingMinutesInOven*(actualMinutesInOven: int): int = + ## Returns the number of minutes that the lasagna still needs to remain in the + ## oven to be properly prepared. + discard + +proc preparationTimeInMinutes*(numberOfLayers: int): int = + ## Returns the total preparation time for a given number of layers. + discard + +proc totalTimeInMinutes*(numberOfLayers, actualMinutesInOven: int): int = + ## Returns the total time required to prepare the lasagna. + discard diff --git a/exercises/practice/acronym/acronym.nim b/exercises/practice/acronym/acronym.nim index e69de29b..70f97d57 100644 --- a/exercises/practice/acronym/acronym.nim +++ b/exercises/practice/acronym/acronym.nim @@ -0,0 +1,2 @@ +proc abbreviate*(s: string): string = + discard diff --git a/exercises/practice/all-your-base/all_your_base.nim b/exercises/practice/all-your-base/all_your_base.nim index e69de29b..803d8434 100644 --- a/exercises/practice/all-your-base/all_your_base.nim +++ b/exercises/practice/all-your-base/all_your_base.nim @@ -0,0 +1,2 @@ +proc convert*(digits: openArray[int], fromBase: int, toBase: int): seq[int] = + discard diff --git a/exercises/practice/allergies/allergies.nim b/exercises/practice/allergies/allergies.nim index e69de29b..cad7513b 100644 --- a/exercises/practice/allergies/allergies.nim +++ b/exercises/practice/allergies/allergies.nim @@ -0,0 +1,9 @@ +type + Allergen* = enum + Eggs, Peanuts, Shellfish, Strawberries, Tomatoes, Chocolate, Pollen, Cats + +proc isAllergicTo*(score: int, allergen: Allergen): bool = + discard + +proc allergies*(score: int): set[Allergen] = + discard diff --git a/exercises/practice/anagram/anagram.nim b/exercises/practice/anagram/anagram.nim index e69de29b..ad700548 100644 --- a/exercises/practice/anagram/anagram.nim +++ b/exercises/practice/anagram/anagram.nim @@ -0,0 +1,2 @@ +proc detectAnagrams*(word: string, candidates: openArray[string]): seq[string] = + discard diff --git a/exercises/practice/armstrong-numbers/armstrong_numbers.nim b/exercises/practice/armstrong-numbers/armstrong_numbers.nim index e69de29b..0d13eea7 100644 --- a/exercises/practice/armstrong-numbers/armstrong_numbers.nim +++ b/exercises/practice/armstrong-numbers/armstrong_numbers.nim @@ -0,0 +1,2 @@ +proc isArmstrongNumber*(n: int): bool = + discard diff --git a/exercises/practice/atbash-cipher/atbash_cipher.nim b/exercises/practice/atbash-cipher/atbash_cipher.nim index e69de29b..881ada9c 100644 --- a/exercises/practice/atbash-cipher/atbash_cipher.nim +++ b/exercises/practice/atbash-cipher/atbash_cipher.nim @@ -0,0 +1,5 @@ +proc encode*(s: string): string = + discard + +proc decode*(s: string): string = + discard diff --git a/exercises/practice/binary/binary.nim b/exercises/practice/binary/binary.nim index e69de29b..8175c92e 100644 --- a/exercises/practice/binary/binary.nim +++ b/exercises/practice/binary/binary.nim @@ -0,0 +1,2 @@ +proc binary*(s: string): int = + discard diff --git a/exercises/practice/bob/bob.nim b/exercises/practice/bob/bob.nim index e69de29b..26095a72 100644 --- a/exercises/practice/bob/bob.nim +++ b/exercises/practice/bob/bob.nim @@ -0,0 +1,2 @@ +proc hey*(s: string): string = + discard diff --git a/exercises/practice/collatz-conjecture/collatz_conjecture.nim b/exercises/practice/collatz-conjecture/collatz_conjecture.nim index e69de29b..a6f12235 100644 --- a/exercises/practice/collatz-conjecture/collatz_conjecture.nim +++ b/exercises/practice/collatz-conjecture/collatz_conjecture.nim @@ -0,0 +1,2 @@ +proc steps*(n: int): int = + discard diff --git a/exercises/practice/crypto-square/crypto_square.nim b/exercises/practice/crypto-square/crypto_square.nim index e69de29b..117e0bd7 100644 --- a/exercises/practice/crypto-square/crypto_square.nim +++ b/exercises/practice/crypto-square/crypto_square.nim @@ -0,0 +1,2 @@ +proc encrypt*(s: string): string = + discard diff --git a/exercises/practice/darts/darts.nim b/exercises/practice/darts/darts.nim index e69de29b..7f94b4ac 100644 --- a/exercises/practice/darts/darts.nim +++ b/exercises/practice/darts/darts.nim @@ -0,0 +1,2 @@ +proc score*(x, y: float): int = + discard diff --git a/exercises/practice/diamond/diamond.nim b/exercises/practice/diamond/diamond.nim index e69de29b..79ff5262 100644 --- a/exercises/practice/diamond/diamond.nim +++ b/exercises/practice/diamond/diamond.nim @@ -0,0 +1,2 @@ +proc diamond*(c: char): string = + discard diff --git a/exercises/practice/difference-of-squares/difference_of_squares.nim b/exercises/practice/difference-of-squares/difference_of_squares.nim index e69de29b..42d8d910 100644 --- a/exercises/practice/difference-of-squares/difference_of_squares.nim +++ b/exercises/practice/difference-of-squares/difference_of_squares.nim @@ -0,0 +1,8 @@ +proc squareOfSum*(n: int): int = + discard + +proc sumOfSquares*(n: int): int = + discard + +proc difference*(n: int): int = + discard diff --git a/exercises/practice/diffie-hellman/diffie_hellman.nim b/exercises/practice/diffie-hellman/diffie_hellman.nim index e69de29b..0a7d23ab 100644 --- a/exercises/practice/diffie-hellman/diffie_hellman.nim +++ b/exercises/practice/diffie-hellman/diffie_hellman.nim @@ -0,0 +1,8 @@ +proc privateKey*(p: int): int = + discard + +proc publicKey*(p, g, a: int): int = + discard + +proc secret*(p, bPub, a: int): int = + discard diff --git a/exercises/practice/dnd-character/dnd_character.nim b/exercises/practice/dnd-character/dnd_character.nim index f3d266ef..5d5bca1e 100644 --- a/exercises/practice/dnd-character/dnd_character.nim +++ b/exercises/practice/dnd-character/dnd_character.nim @@ -1,6 +1,12 @@ type Character* = object strength*: int + dexterity*: int + constitution*: int + intelligence*: int + wisdom*: int + charisma*: int + hitpoints*: int proc ability*: int = discard diff --git a/exercises/practice/etl/etl.nim b/exercises/practice/etl/etl.nim index e69de29b..37e1f464 100644 --- a/exercises/practice/etl/etl.nim +++ b/exercises/practice/etl/etl.nim @@ -0,0 +1,4 @@ +import std/tables + +proc transform*(t: Table[int, seq[char]]): Table[char, int] = + discard diff --git a/exercises/practice/gigasecond/gigasecond.nim b/exercises/practice/gigasecond/gigasecond.nim index e69de29b..fdb33ee0 100644 --- a/exercises/practice/gigasecond/gigasecond.nim +++ b/exercises/practice/gigasecond/gigasecond.nim @@ -0,0 +1,4 @@ +import std/times + +proc addGigasecond*(dt: DateTime): DateTime = + discard diff --git a/exercises/practice/grade-school/grade_school.nim b/exercises/practice/grade-school/grade_school.nim index e69de29b..90d71b53 100644 --- a/exercises/practice/grade-school/grade_school.nim +++ b/exercises/practice/grade-school/grade_school.nim @@ -0,0 +1,22 @@ +type + Student* = object + name*: string + grade*: int + + School* = object + students*: seq[Student] + +proc roster*(school: School): seq[string] = + ## Returns the names of every student in the `school`, sorted by grade then name. + discard + +proc addStudent*(school: var School, name: string, grade: int) = + ## Adds a student with `name` and `grade` to the `school`. + ## + ## Raises a `ValueError` if `school` already contains a student named `name`. + discard + +proc grade*(school: School, grade: int): seq[string] = + ## Returns the names of the students in the given `school` and `grade`, in + ## alphabetical order. + discard diff --git a/exercises/practice/grains/grains.nim b/exercises/practice/grains/grains.nim index e69de29b..8b383218 100644 --- a/exercises/practice/grains/grains.nim +++ b/exercises/practice/grains/grains.nim @@ -0,0 +1,5 @@ +proc onSquare*(n: int): uint64 = + discard + +proc total*: uint64 = + discard diff --git a/exercises/practice/hamming/hamming.nim b/exercises/practice/hamming/hamming.nim index e69de29b..e4198df0 100644 --- a/exercises/practice/hamming/hamming.nim +++ b/exercises/practice/hamming/hamming.nim @@ -0,0 +1,2 @@ +proc distance*(a, b: string): int = + discard diff --git a/exercises/practice/high-scores/high_scores.nim b/exercises/practice/high-scores/high_scores.nim index e69de29b..7736e314 100644 --- a/exercises/practice/high-scores/high_scores.nim +++ b/exercises/practice/high-scores/high_scores.nim @@ -0,0 +1,8 @@ +proc latest*(scores: openArray[int]): int = + discard + +proc personalBest*(scores: openArray[int]): int = + discard + +proc personalTopThree*(scores: openArray[int]): seq[int] = + discard diff --git a/exercises/practice/isbn-verifier/isbn_verifier.nim b/exercises/practice/isbn-verifier/isbn_verifier.nim index e69de29b..c363be64 100644 --- a/exercises/practice/isbn-verifier/isbn_verifier.nim +++ b/exercises/practice/isbn-verifier/isbn_verifier.nim @@ -0,0 +1,2 @@ +proc isValid*(s: string): bool = + discard diff --git a/exercises/practice/isogram/isogram.nim b/exercises/practice/isogram/isogram.nim index e69de29b..bcdd7592 100644 --- a/exercises/practice/isogram/isogram.nim +++ b/exercises/practice/isogram/isogram.nim @@ -0,0 +1,2 @@ +proc isIsogram*(s: string): bool = + discard diff --git a/exercises/practice/kindergarten-garden/kindergarten_garden.nim b/exercises/practice/kindergarten-garden/kindergarten_garden.nim index e69de29b..6cd7acd6 100644 --- a/exercises/practice/kindergarten-garden/kindergarten_garden.nim +++ b/exercises/practice/kindergarten-garden/kindergarten_garden.nim @@ -0,0 +1,6 @@ +type + Plant* = enum + Clover, Grass, Radishes, Violets + +proc plants*(garden: string, student: string): seq[Plant] = + discard diff --git a/exercises/practice/largest-series-product/largest_series_product.nim b/exercises/practice/largest-series-product/largest_series_product.nim index e69de29b..82e9685a 100644 --- a/exercises/practice/largest-series-product/largest_series_product.nim +++ b/exercises/practice/largest-series-product/largest_series_product.nim @@ -0,0 +1,2 @@ +proc largestProduct*(s: string, span: int): int = + discard diff --git a/exercises/practice/leap/leap.nim b/exercises/practice/leap/leap.nim index e69de29b..26b7080e 100644 --- a/exercises/practice/leap/leap.nim +++ b/exercises/practice/leap/leap.nim @@ -0,0 +1,2 @@ +proc isLeapYear*(year: int): bool = + discard diff --git a/exercises/practice/luhn/luhn.nim b/exercises/practice/luhn/luhn.nim index e69de29b..c363be64 100644 --- a/exercises/practice/luhn/luhn.nim +++ b/exercises/practice/luhn/luhn.nim @@ -0,0 +1,2 @@ +proc isValid*(s: string): bool = + discard diff --git a/exercises/practice/matching-brackets/matching_brackets.nim b/exercises/practice/matching-brackets/matching_brackets.nim index e69de29b..eeec63fb 100644 --- a/exercises/practice/matching-brackets/matching_brackets.nim +++ b/exercises/practice/matching-brackets/matching_brackets.nim @@ -0,0 +1,2 @@ +proc isPaired*(s: string): bool = + discard diff --git a/exercises/practice/matrix/matrix.nim b/exercises/practice/matrix/matrix.nim index e69de29b..4fae8a28 100644 --- a/exercises/practice/matrix/matrix.nim +++ b/exercises/practice/matrix/matrix.nim @@ -0,0 +1,5 @@ +proc row*(s: string, n: int): seq[int] = + discard + +proc column*(s: string, n: int): seq[int] = + discard diff --git a/exercises/practice/meetup/meetup.nim b/exercises/practice/meetup/meetup.nim index e69de29b..131e9f9e 100644 --- a/exercises/practice/meetup/meetup.nim +++ b/exercises/practice/meetup/meetup.nim @@ -0,0 +1,8 @@ +import std/times + +type + Schedule* = enum + Teenth, First, Second, Third, Fourth, Last + +proc meetup*(year: int, month: int, schedule: Schedule, day: WeekDay): string = + discard diff --git a/exercises/practice/nth-prime/nth_prime.nim b/exercises/practice/nth-prime/nth_prime.nim index e69de29b..b3ca14b7 100644 --- a/exercises/practice/nth-prime/nth_prime.nim +++ b/exercises/practice/nth-prime/nth_prime.nim @@ -0,0 +1,2 @@ +proc prime*(n: int): int = + discard diff --git a/exercises/practice/nucleotide-count/nucleotide_count.nim b/exercises/practice/nucleotide-count/nucleotide_count.nim index e69de29b..a14c93ad 100644 --- a/exercises/practice/nucleotide-count/nucleotide_count.nim +++ b/exercises/practice/nucleotide-count/nucleotide_count.nim @@ -0,0 +1,4 @@ +import std/tables + +proc countDna*(s: string): CountTable[char] = + discard diff --git a/exercises/practice/pangram/pangram.nim b/exercises/practice/pangram/pangram.nim index e69de29b..8ade0bc1 100644 --- a/exercises/practice/pangram/pangram.nim +++ b/exercises/practice/pangram/pangram.nim @@ -0,0 +1,2 @@ +proc isPangram*(s: string): bool = + discard diff --git a/exercises/practice/pascals-triangle/pascals_triangle.nim b/exercises/practice/pascals-triangle/pascals_triangle.nim index e69de29b..aae54653 100644 --- a/exercises/practice/pascals-triangle/pascals_triangle.nim +++ b/exercises/practice/pascals-triangle/pascals_triangle.nim @@ -0,0 +1,2 @@ +proc pascal*(n: int): seq[seq[int]] = + discard diff --git a/exercises/practice/perfect-numbers/perfect_numbers.nim b/exercises/practice/perfect-numbers/perfect_numbers.nim index e69de29b..5412458d 100644 --- a/exercises/practice/perfect-numbers/perfect_numbers.nim +++ b/exercises/practice/perfect-numbers/perfect_numbers.nim @@ -0,0 +1,6 @@ +type + Classification* = enum + Perfect, Deficient, Abundant + +proc classify*(n: int): Classification = + discard diff --git a/exercises/practice/phone-number/phone_number.nim b/exercises/practice/phone-number/phone_number.nim index e69de29b..83a731ae 100644 --- a/exercises/practice/phone-number/phone_number.nim +++ b/exercises/practice/phone-number/phone_number.nim @@ -0,0 +1,2 @@ +proc clean*(s: string): string = + discard diff --git a/exercises/practice/prime-factors/prime_factors.nim b/exercises/practice/prime-factors/prime_factors.nim index e69de29b..b1f4c996 100644 --- a/exercises/practice/prime-factors/prime_factors.nim +++ b/exercises/practice/prime-factors/prime_factors.nim @@ -0,0 +1,2 @@ +proc primeFactors*(n: int64): seq[int] = + discard diff --git a/exercises/practice/protein-translation/protein_translation.nim b/exercises/practice/protein-translation/protein_translation.nim index e69de29b..39ad760b 100644 --- a/exercises/practice/protein-translation/protein_translation.nim +++ b/exercises/practice/protein-translation/protein_translation.nim @@ -0,0 +1,2 @@ +proc translate*(s: string): seq[string] = + discard diff --git a/exercises/practice/proverb/proverb.nim b/exercises/practice/proverb/proverb.nim index e69de29b..cf0b67d0 100644 --- a/exercises/practice/proverb/proverb.nim +++ b/exercises/practice/proverb/proverb.nim @@ -0,0 +1,2 @@ +proc recite*(words: openArray[string]): string = + discard diff --git a/exercises/practice/queen-attack/queen_attack.nim b/exercises/practice/queen-attack/queen_attack.nim index e69de29b..b468c637 100644 --- a/exercises/practice/queen-attack/queen_attack.nim +++ b/exercises/practice/queen-attack/queen_attack.nim @@ -0,0 +1,13 @@ +type + Queen* = object + row*: int + col*: int + +proc initQueen*(row, col: int): Queen = + discard + +proc canAttack*(white, black: Queen): bool = + discard + +proc board*(white, black: Queen): string = + discard diff --git a/exercises/practice/raindrops/raindrops.nim b/exercises/practice/raindrops/raindrops.nim index e69de29b..ad74fd9f 100644 --- a/exercises/practice/raindrops/raindrops.nim +++ b/exercises/practice/raindrops/raindrops.nim @@ -0,0 +1,2 @@ +proc convert*(n: int): string = + discard diff --git a/exercises/practice/resistor-color-duo/resistor_color_duo.nim b/exercises/practice/resistor-color-duo/resistor_color_duo.nim index e69de29b..7521d577 100644 --- a/exercises/practice/resistor-color-duo/resistor_color_duo.nim +++ b/exercises/practice/resistor-color-duo/resistor_color_duo.nim @@ -0,0 +1,6 @@ +type + ResistorColor* = enum + Black, Brown, Red, Orange, Yellow, Green, Blue, Violet, Grey, White + +proc value*(colors: openArray[ResistorColor]): int = + discard diff --git a/exercises/practice/resistor-color-trio/resistor_color_trio.nim b/exercises/practice/resistor-color-trio/resistor_color_trio.nim index e69de29b..92600cd4 100644 --- a/exercises/practice/resistor-color-trio/resistor_color_trio.nim +++ b/exercises/practice/resistor-color-trio/resistor_color_trio.nim @@ -0,0 +1,6 @@ +type + ResistorColor* = enum + Black, Brown, Red, Orange, Yellow, Green, Blue, Violet, Grey, White + +proc label*(r: array[3, ResistorColor]): tuple[value: int, unit: string] = + discard diff --git a/exercises/practice/resistor-color/resistor_color.nim b/exercises/practice/resistor-color/resistor_color.nim index e69de29b..e099d5c7 100644 --- a/exercises/practice/resistor-color/resistor_color.nim +++ b/exercises/practice/resistor-color/resistor_color.nim @@ -0,0 +1,9 @@ +type + ResistorColor* = enum + Black, Brown, Red, Orange, Yellow, Green, Blue, Violet, Grey, White + +proc colorCode*(color: ResistorColor): int = + discard + +proc colors*: array[0..ResistorColor.high.ord, ResistorColor] = + discard diff --git a/exercises/practice/reverse-string/reverse_string.nim b/exercises/practice/reverse-string/reverse_string.nim index e69de29b..36903f0a 100644 --- a/exercises/practice/reverse-string/reverse_string.nim +++ b/exercises/practice/reverse-string/reverse_string.nim @@ -0,0 +1,2 @@ +proc reverse*(s: string): string = + discard diff --git a/exercises/practice/rna-transcription/rna_transcription.nim b/exercises/practice/rna-transcription/rna_transcription.nim index e69de29b..987a77cb 100644 --- a/exercises/practice/rna-transcription/rna_transcription.nim +++ b/exercises/practice/rna-transcription/rna_transcription.nim @@ -0,0 +1,2 @@ +proc toRna*(s: string): string = + discard diff --git a/exercises/practice/robot-name/robot_name.nim b/exercises/practice/robot-name/robot_name.nim index e69de29b..259cb44b 100644 --- a/exercises/practice/robot-name/robot_name.nim +++ b/exercises/practice/robot-name/robot_name.nim @@ -0,0 +1,10 @@ +type + Name* = array[5, char] + Robot* = object + name*: Name + +proc makeRobot*: Robot = + discard + +proc reset*(r: var Robot) = + discard diff --git a/exercises/practice/roman-numerals/roman_numerals.nim b/exercises/practice/roman-numerals/roman_numerals.nim index e69de29b..8ea9228a 100644 --- a/exercises/practice/roman-numerals/roman_numerals.nim +++ b/exercises/practice/roman-numerals/roman_numerals.nim @@ -0,0 +1,2 @@ +proc roman*(n: int): string = + discard diff --git a/exercises/practice/rotational-cipher/rotational_cipher.nim b/exercises/practice/rotational-cipher/rotational_cipher.nim index e69de29b..70b5fe30 100644 --- a/exercises/practice/rotational-cipher/rotational_cipher.nim +++ b/exercises/practice/rotational-cipher/rotational_cipher.nim @@ -0,0 +1,2 @@ +proc rotate*(s: string, n: int): string = + discard diff --git a/exercises/practice/run-length-encoding/run_length_encoding.nim b/exercises/practice/run-length-encoding/run_length_encoding.nim index e69de29b..881ada9c 100644 --- a/exercises/practice/run-length-encoding/run_length_encoding.nim +++ b/exercises/practice/run-length-encoding/run_length_encoding.nim @@ -0,0 +1,5 @@ +proc encode*(s: string): string = + discard + +proc decode*(s: string): string = + discard diff --git a/exercises/practice/saddle-points/saddle_points.nim b/exercises/practice/saddle-points/saddle_points.nim index e69de29b..7d5df7f9 100644 --- a/exercises/practice/saddle-points/saddle_points.nim +++ b/exercises/practice/saddle-points/saddle_points.nim @@ -0,0 +1,2 @@ +proc saddlePoints*(matrix: seq[seq[int]]): seq[tuple[r, c: int]] = + discard diff --git a/exercises/practice/say/say.nim b/exercises/practice/say/say.nim index e69de29b..42f37156 100644 --- a/exercises/practice/say/say.nim +++ b/exercises/practice/say/say.nim @@ -0,0 +1,2 @@ +proc say*(n: int64): string = + discard diff --git a/exercises/practice/scale-generator/scale_generator.nim b/exercises/practice/scale-generator/scale_generator.nim index e69de29b..408998b5 100644 --- a/exercises/practice/scale-generator/scale_generator.nim +++ b/exercises/practice/scale-generator/scale_generator.nim @@ -0,0 +1,6 @@ +import std/strutils + +const chromaticIntervals = "m".repeat(11) + +proc scale*(tonic: string, intervals = chromaticIntervals): seq[string] = + discard diff --git a/exercises/practice/scrabble-score/scrabble_score.nim b/exercises/practice/scrabble-score/scrabble_score.nim index e69de29b..f0793b59 100644 --- a/exercises/practice/scrabble-score/scrabble_score.nim +++ b/exercises/practice/scrabble-score/scrabble_score.nim @@ -0,0 +1,2 @@ +proc score*(word: string): int = + discard diff --git a/exercises/practice/secret-handshake/secret_handshake.nim b/exercises/practice/secret-handshake/secret_handshake.nim index e69de29b..7910973b 100644 --- a/exercises/practice/secret-handshake/secret_handshake.nim +++ b/exercises/practice/secret-handshake/secret_handshake.nim @@ -0,0 +1,2 @@ +proc commands*(n: int): seq[string] = + discard diff --git a/exercises/practice/series/series.nim b/exercises/practice/series/series.nim index e69de29b..86f90b45 100644 --- a/exercises/practice/series/series.nim +++ b/exercises/practice/series/series.nim @@ -0,0 +1,2 @@ +proc slices*(s: string, n: int): seq[string] = + discard diff --git a/exercises/practice/sieve/sieve.nim b/exercises/practice/sieve/sieve.nim index e69de29b..2d2f4d22 100644 --- a/exercises/practice/sieve/sieve.nim +++ b/exercises/practice/sieve/sieve.nim @@ -0,0 +1,2 @@ +proc primes*(limit: int): seq[int] = + discard diff --git a/exercises/practice/space-age/space_age.nim b/exercises/practice/space-age/space_age.nim index e69de29b..bd9779b9 100644 --- a/exercises/practice/space-age/space_age.nim +++ b/exercises/practice/space-age/space_age.nim @@ -0,0 +1,6 @@ +type + Planet* = enum + Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune + +proc age*(planet: Planet, seconds: int64): float = + discard diff --git a/exercises/practice/spiral-matrix/spiral_matrix.nim b/exercises/practice/spiral-matrix/spiral_matrix.nim index e69de29b..2d6154c7 100644 --- a/exercises/practice/spiral-matrix/spiral_matrix.nim +++ b/exercises/practice/spiral-matrix/spiral_matrix.nim @@ -0,0 +1,2 @@ +proc spiral*(n: static int): array[n, array[n, int]] = + discard diff --git a/exercises/practice/sublist/sublist.nim b/exercises/practice/sublist/sublist.nim index e69de29b..1a7704c2 100644 --- a/exercises/practice/sublist/sublist.nim +++ b/exercises/practice/sublist/sublist.nim @@ -0,0 +1,6 @@ +type + Comparison* = enum + Unequal, Sublist, Superlist, Equal + +proc sublist*(a, b: openArray[int]): Comparison = + discard diff --git a/exercises/practice/sum-of-multiples/sum_of_multiples.nim b/exercises/practice/sum-of-multiples/sum_of_multiples.nim index e69de29b..e3fedc24 100644 --- a/exercises/practice/sum-of-multiples/sum_of_multiples.nim +++ b/exercises/practice/sum-of-multiples/sum_of_multiples.nim @@ -0,0 +1,2 @@ +proc sum*(limit: int, factors: openArray[int]): int = + discard diff --git a/exercises/practice/triangle/triangle.nim b/exercises/practice/triangle/triangle.nim index e69de29b..8a1dcacf 100644 --- a/exercises/practice/triangle/triangle.nim +++ b/exercises/practice/triangle/triangle.nim @@ -0,0 +1,8 @@ +proc isEquilateral*(sides: array[3, int]): bool = + discard + +proc isIsosceles*(sides: array[3, int]): bool = + discard + +proc isScalene*(sides: array[3, int]): bool = + discard diff --git a/exercises/practice/twelve-days/twelve_days.nim b/exercises/practice/twelve-days/twelve_days.nim index e69de29b..57ab44e7 100644 --- a/exercises/practice/twelve-days/twelve_days.nim +++ b/exercises/practice/twelve-days/twelve_days.nim @@ -0,0 +1,2 @@ +proc recite*(start: int, stop = -1): string = + discard diff --git a/exercises/practice/two-fer/two_fer.nim b/exercises/practice/two-fer/two_fer.nim index e69de29b..dbfaccd6 100644 --- a/exercises/practice/two-fer/two_fer.nim +++ b/exercises/practice/two-fer/two_fer.nim @@ -0,0 +1,2 @@ +proc twoFer*(name = ""): string = + discard diff --git a/exercises/practice/word-count/word_count.nim b/exercises/practice/word-count/word_count.nim index e69de29b..d5f7e76d 100644 --- a/exercises/practice/word-count/word_count.nim +++ b/exercises/practice/word-count/word_count.nim @@ -0,0 +1,4 @@ +import std/tables + +proc countWords*(s: string): Table[string, int] = + discard diff --git a/exercises/practice/yacht/yacht.nim b/exercises/practice/yacht/yacht.nim index e69de29b..bc37b23e 100644 --- a/exercises/practice/yacht/yacht.nim +++ b/exercises/practice/yacht/yacht.nim @@ -0,0 +1,7 @@ +type + Category* = enum + Ones, Twos, Threes, Fours, Fives, Sixes, + FullHouse, FourOfAKind, LittleStraight, BigStraight, Choice, Yacht + +proc score*(dice: array[5, int], category: Category): int = + discard