diff --git a/2024-1-12.py b/2024-1-12.py new file mode 100644 index 0000000..2600dfe --- /dev/null +++ b/2024-1-12.py @@ -0,0 +1,69 @@ +from util import * + + +def p1(): + # Language rule 1, n is less than or equal to 2 + n = 2 + # Language rule 2, m is less than or equal to n + m = n + strings = [] + # Language rule 3, n and m are both non-negative integers + for i in range(0, n + 1): + for j in range(0, m + 1): + if j > i: + continue + strings.append('0' * j + '1' * i) + + return strings + + +def p2(): + possible_n = [2, 3, 4, 5, 6] + + strings = [] + for i in possible_n: + integer_divisors = [] + for j in range(1, i + 1): + if i % j == 0: + integer_divisors.append(j) + for j in integer_divisors: + strings.append('a' * j + 'b' * i) + return strings + + +def p3(): + possible_n = [1, 2, 3] + + strings = [] + for i in possible_n: + an = i + bn = 2 * i - 1 + cn = 3 * i - 2 + strings.append('a' * an + 'b' * bn + 'c' * cn) + + return strings + + +def p4(): + alphabet = ['a', 'b'] + + # include empty string + strings = get_all_strings_with_a_given_alphabet_and_length(alphabet, 3) + + def is_palindrome(s): + return s == s[::-1] + + strings = list(filter(is_palindrome, strings)) + + return strings + + +def main(): + print_strings(p1()) + print_strings(p2()) + print_strings(p3()) + print_strings(p4()) + + +if __name__ == '__main__': + main() diff --git a/2024-1-15.py b/2024-1-15.py new file mode 100644 index 0000000..b048b97 --- /dev/null +++ b/2024-1-15.py @@ -0,0 +1,58 @@ +from util import * + + +def p1(): + alphabet = ['a', 'b'] + + strings = get_all_strings_with_a_given_alphabet_and_length(alphabet, 3) + + def number_of_a_is_even(s): + return s.count('a') % 2 == 0 + + strings = list(filter(number_of_a_is_even, strings)) + return strings + + +def p2(): + possible_m = [0, 1, 2, 3, 4] + possible_n = [0, 1, 2, 3, 4] + possible_p = [0, 1, 2, 3, 4] + + strings = [] + for m in possible_m: + for n in possible_n: + for p in possible_p: + # First rule + if m + n + p <= 4: + # Second rule + if m > n: + # Third rule + if n == p: + strings.append('a' * m + 'b' * n + 'c' * p) + return strings + + +def p3(): + alphabet = ['a', 'b', 'c'] + strings = get_all_strings_with_a_given_alphabet_and_length(alphabet, 4) + + def number_of_a_is_greater_than_number_of_b(s): + return s.count('a') > s.count('b') + + def number_of_b_is_equal_to_number_of_c(s): + return s.count('b') == s.count('c') + + strings = list(filter(number_of_a_is_greater_than_number_of_b, strings)) + strings = list(filter(number_of_b_is_equal_to_number_of_c, strings)) + + return strings + + +def main(): + print_strings(p1()) + print_strings(p2()) + print_strings(p3()) + + +if __name__ == '__main__': + main() diff --git a/util.py b/util.py new file mode 100644 index 0000000..86b171e --- /dev/null +++ b/util.py @@ -0,0 +1,13 @@ +def get_all_strings_with_a_given_alphabet_and_length(alphabet, length): + strings = [''] + for i in range(length): + s = [s + c for s in strings for c in alphabet] + strings += s + + # Remove duplicates (set() isn't as nice as it doesn't preserve order, at least for verification purposes) + strings = list(dict.fromkeys(strings)) + return strings + + +def print_strings(strings): + print(strings, len(strings))