Codechef : Petit déjeuner de l'autre côté du miroir

The Codechef, le concours de programmation organisé par Directi, propose depuis peu deux problèmes par jour via Twitter. Ce matin, le problème est de compter le nombre d'entiers inférieurs à 1000 qui, quand on les ajoute à leur image miroir, forment un entier qui n'est composé que de chiffres impairs.

Exemple simple:

...
20 + 02 = 22 NON
21 + 12 = 33 OUI
22 + 22 = 44 NON
...

Et comme d'habitude, j'ai sorti l'ami Python, celui qui nous veut du bien.

#! /usr/bin/python
# Codechef Twitter Daily 2009/06/24
# How many numbers below 1000 which when added with their respective mirror 
# images result in a number with entirely odd digits?
# 2009/06/24 - Jean Karim Bockstael - jkb@jkbockstael.be


def reverse_number(num):
    return int(str(num)[::-1])

def is_all_odds(num):
    for digit in str(num):
        if (int(digit) % 2 == 0):
            return False
    return True

def count_mirrors(max):
    n_mirrors = 0
    for num in range(1, max):
        if is_all_odds(num + reverse_number(num)):
           n_mirrors += 1
    return n_mirrors

print count_mirrors(1000)

cc-by-nc | code (python) | codechef

<<< Project Euler : solution au problème 28, en Python (2009-06-26) | Tiens j'avais oublié ça... (2009-06-16) >>>