Esempio n. 1
0
def concatenates_to_prime(a, b):
    """Returns whether both ab and ba are prime

    >>> concatenates_to_prime(109, 673)
    True
    """
    return is_prime(join_digits((a, b))) and is_prime(join_digits((b, a)))
Esempio n. 2
0
 def test_join_digits(self) -> None:
     self.assertEqual(digs.join_digits([0]), 0)
     self.assertEqual(digs.join_digits([1]), 1)
     self.assertEqual(digs.join_digits([0, 1]), 1)
     self.assertEqual(digs.join_digits([1, 2]), 12)
     self.assertEqual(digs.join_digits((3, 2, 1)), 321)
     self.assertEqual(digs.join_digits(range(0, 7, 2)), 246)
     self.assertEqual(digs.join_digits([1, 0, 0, 1], 2), 9)
     self.assertEqual(digs.join_digits([1, 7, 3, 4], 8), 988)
     self.assertEqual(digs.join_digits([3, 'D', 'c', 0], 16), 15808)
Esempio n. 3
0
def solve():
    pandigital = list(range(10))
    result = 0

    for permutation in permutations(pandigital):
        if join_digits(permutation[1:4]) % 2 != 0:
            continue

        if join_digits(permutation[2:5]) % 3 != 0:
            continue

        if join_digits(permutation[3:6]) % 5 != 0:
            continue

        if join_digits(permutation[4:7]) % 7 != 0:
            continue

        if join_digits(permutation[5:8]) % 11 != 0:
            continue

        if join_digits(permutation[6:9]) % 13 != 0:
            continue

        if join_digits(permutation[7:10]) % 17 != 0:
            continue

        result += join_digits(permutation)

    return result
Esempio n. 4
0
def truncations(n):
    """
    Returns all possible truncations of n.

    >>> truncations(3797)
    {97, 3, 37, 7, 3797, 379, 797}
    """
    d = split_digits(n)
    result = set([n])

    for i in range(1, len(d)):
        result.add(join_digits(d[i:]))
        result.add(join_digits(d[:i]))

    return result
Esempio n. 5
0
def rotations(n):
    d = deque(split_digits(n))
    result = []

    for i in range(len(d)):
        result.append(join_digits(d))
        d.rotate()

    return result
Esempio n. 6
0
def replace_letters(word, numbers, mapping):
    """Constructs a number from a word, replacing the letters with numbers based on indexes in mapping

    >>> replace_letters("CARE", (1, 9, 6, 2), {'C': 0, 'R': 1, 'E': 2, 'A': 3})
    1296

    >>> replace_letters("RACE", (1, 9, 6, 2), {'C': 0, 'R': 1, 'E': 2, 'A': 3})
    9216
    """
    return join_digits(numbers[mapping[letter]] for letter in word)
Esempio n. 7
0
def solve():
    four_digit_primes = set(ibetween(gen_primes(), LOWER, UPPER))

    for prime in four_digit_primes:
        prime_permutations = digit_permutations(prime) & four_digit_primes
        terms_of_three = combinations(prime_permutations, 3)

        for terms in terms_of_three:
            if equidistant(terms):
                result = join_digits(terms)
                if result != EXCLUDE:
                    return result
Esempio n. 8
0
def solve():
    largest_pandigital_prime = 0

    for n in range(1, 10):
        digits = set(range(1, n + 1))

        for c in permutations(digits):
            candidate = join_digits(c)

            if is_prime(candidate):
                largest_pandigital_prime = candidate

    return largest_pandigital_prime
Esempio n. 9
0
def solve():
    data = read_data("p096_sudoku.txt")
    sudokus = parse_sudokus(data)
    result = 0

    for i, sudoku in enumerate(sudokus, 1):
        solved = solve_sudoku(sudoku)
        top_left = join_digits(sudoku[0][0:3])
        result += top_left

        info(f"Sudoku {i} {'solved' if solved else 'FAILED'}: {top_left}")
        info(sudoku)
        info("")

    return result
Esempio n. 10
0
def solve() -> Optional[int]:
    best_digits: Optional[Tuple[int, int, int, int]] = None
    max_count = 0

    # check all digit combinations 0 <= a < b < c < d <= 9
    for a in range(0, 7):
        for b in range(a + 1, 8):
            for c in range(b + 1, 9):
                for d in range(c + 1, 10):
                    results = digit_results(a, b, c, d)
                    count = natural_prefix_len(sorted(results))
                    if count > max_count:
                        max_count = count
                        best_digits = (a, b, c, d)

    return None if best_digits is None else digs.join_digits(best_digits)
Esempio n. 11
0
def solve(up_to=6, gons=3):
    numbers = set(range(1, up_to + 1))
    maximum = 0

    for internal_nodes in combinations(numbers, gons):
        # Skip 17-digit solutions
        if 10 in internal_nodes:
            continue

        external_nodes = tuple(numbers - set(internal_nodes))

        for ring in xgon_rings(external_nodes, internal_nodes):
            concatenated = join_digits(map(join_digits, ring))
            maximum = max(maximum, concatenated)

    return maximum
Esempio n. 12
0
def solve():
    longest = (0, [])

    for a in range(1, 10):
        for b in range(a + 1, 10):
            for c in range(b + 1, 10):
                for d in range(c + 1, 10):
                    digits = [a, b, c, d]
                    length = consecutive_positive_integers(targets(digits))

                    logger.info(f"{digits}: {length}")

                    if length > longest[0]:
                        longest = (length, digits)

    return join_digits(longest[1])
Esempio n. 13
0
def solve() -> int:
    # keep track of all digits preceding other digits
    pre_digits: Dict[int, Set[int]] = {}
    attempts = fio.ints_from_file(FILE_NAME)
    for attempt in attempts:
        digits = digs.get_digits(attempt[0])
        for i, digit in enumerate(digits):
            # add digit to dict if we haven't seen it before
            if digit not in pre_digits:
                pre_digits[digit] = set()

            # add all of the preceding digits
            for j in range(i):
                pre_digits[digit].add(digits[j])

    # sort digits by how many other digits precede them
    ordering: List[Tuple[int, Set[int]]] = list(pre_digits.items())
    ordering.sort(key=(lambda x: len(x[1])))
    digits = [order[0] for order in ordering]

    return digs.join_digits(digits)
Esempio n. 14
0
def reverse_digits(n):
    """
    >>> reverse_digits(1292)
    2921
    """
    return join_digits(reversed(split_digits(n)))
Esempio n. 15
0
def is_square_mapping(digit_map: Mapping[str, int], word: str) -> bool:
    """Checks if digit_map maps the letters in word into a perfect square."""
    mapped_digits = [digit_map[letter] for letter in word]
    return (mapped_digits[0] != 0 and
            seqs.is_square(digs.join_digits(mapped_digits)))
Esempio n. 16
0
def solve(target):
    digits = list(range(10))
    permutation = nth(permutations(digits), target)

    return join_digits(permutation)