diff --git a/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/README.md b/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/README.md new file mode 100644 index 00000000..69fce646 --- /dev/null +++ b/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/README.md @@ -0,0 +1,17 @@ +# [Check whether a number is valid in a given numeral system](https://www.codewars.com/kata/check-whether-a-number-is-valid-in-a-given-numeral-system "https://www.codewars.com/kata/67757660c552a3a7ef9aaceb") + +A numeral system is a way of writing numbers using a specific set of digits: for example, the decimal system (also called base-10), which is +the most commonly used numeral system worldwide, uses the digits 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 to represent numbers. There is also the binary +system (also called base-2), which uses the digits 0 and 1. + +For digits that are bigger than 9, the English alphabet is used: 'A' is used for the number 10 in bases higher than 10. This goes all the +way to 'Z' in base-36. + +The largest digit allowed in a certain base is always 1 smaller than this base. + +You need to write a function that checks whether all of the digits of a non-negative integer number are a part of the specified base: for +example, the number 17253 is valid for base-8, because this base contains the digits 0, 1, 2, 3, 4, 5, 6, 7, but the number 19823 is not +valid for this base, because it contains the digits 9 and 8 which are not a part of base-8. + +Note: numbers will be checked against bases from 2 to 36. For digits > 9 (A, B, etc.) such digits will always be uppercase. The function +should return a boolean: ```true``` for numbers that are valid for a specified numeral system and ```false``` otherwise. \ No newline at end of file diff --git a/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/main/Solution.java b/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/main/Solution.java new file mode 100644 index 00000000..6cc7bfd9 --- /dev/null +++ b/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/main/Solution.java @@ -0,0 +1,5 @@ +interface Solution { + static boolean validateBase(String num, int base) { + return num.chars().allMatch(c -> "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(c) < base); + } +} \ No newline at end of file diff --git a/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/test/SolutionTest.java b/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/test/SolutionTest.java new file mode 100644 index 00000000..c70bd4c1 --- /dev/null +++ b/kata/7-kyu/check-whether-a-number-is-valid-in-a-given-numeral-system/test/SolutionTest.java @@ -0,0 +1,30 @@ +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +class SolutionTest { + @ParameterizedTest + @CsvSource(textBlock = """ + 61262, 8 + ABCDEF, 16 + 009, 10 + 0, 5 + 3C52Q6W8V1, 34 + """) + void valid(String num, int base) { + assertTrue(Solution.validateBase(num, base)); + } + + @ParameterizedTest + @CsvSource(textBlock = """ + 25172, 5 + EG, 16 + W, 32 + 99235, 9 + """) + void invalid(String num, int base) { + assertFalse(Solution.validateBase(num, base)); + } +} \ No newline at end of file diff --git a/kata/7-kyu/index.md b/kata/7-kyu/index.md index 6d276a9a..a62299ae 100644 --- a/kata/7-kyu/index.md +++ b/kata/7-kyu/index.md @@ -85,6 +85,7 @@ - [Character Counter](character-counter "56786a687e9a88d1cf00005d") - [Check contained matrix](check-contained-matrix "5a46179ce626c5ef8d000024") - [Check three and two](check-three-and-two "5a9e86705ee396d6be000091") +- [Check whether a number is valid in a given numeral system](check-whether-a-number-is-valid-in-a-given-numeral-system "67757660c552a3a7ef9aaceb") - [Chinese Zodiac](chinese-zodiac "57a73e697cb1f31dd70000d2") - [Circle cipher](circle-cipher "634d0723075de3f97a9eb604") - [Circular List](circular-list "5b2e60742ae7543f9d00005d")