Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python

Problème: http://nabetani.sakura.ne.jp/hena/orde11tredis/ Liens d'implémentation: http://qiita.com/Nabetani/items/10b2ccc28301e44e09e6

J'ai fait d'un nœud dans l'arbre une classe. Comme de nombreux nœuds avec la même valeur apparaissent, j'ai également créé une version avec cache.

E11.py(Pas de version de cache)


class Node:
    def __init__(self, number):
        self.number = number
        self.children = [Node(i + 1)
                         for i in range(2, number // 2 + 1)
                         if number % i == 0]

    def distances(self, number):
        if number  > self.number: return []
        if number == self.number: return [0]
        return [distance + 1
                for child in self.children
                for distance in child.distances(number)]

    def distances_between(self, a, b):
        distances_in_children = [distance
                                 for child in self.children
                                 for distance in child.distances_between(a, b)]
        da, db = self.distances(a), self.distances(b)
        distance_across_self = [min(da) + min(db)] if da and db else []
        return distances_in_children + distance_across_self

    def distance_between(self, a, b):
        return min(self.distances_between(a, b))

def solve(data):
    root, ab = data.split(':')
    a, b = map(int, ab.split(','))
    return str(Node(int(root)).distance_between(a, b))

def test(no, data, correct):
    answer = solve(data)
    result = "OK" if answer == correct else "NG"
    print result, '%2d' % no, data, correct, '->', answer

if __name__ == '__main__':
    test( 0, "50:6,3", "1" );    
    test( 1, "98:5,11", "4" );    
    test( 2, "1000:33,20", "7" );    
    test( 3, "514:9,18", "8" );    
    test( 4, "961:5,4", "3" );    
    test( 5, "1369:1369,3", "2" );    
    test( 6, "258:16,12", "5" );    
    test( 7, "235:13,3", "2" );    
    test( 8, "1096:19,17", "8" );    
    test( 9, "847:7,17", "6" );    
    test(10, "1932:3,5", "2" );    
    test(11, "2491:4,8", "3" );    
    test(12, "840:421,36", "2" );    
    test(13, "1430:37,111", "3" );    
    test(14, "496:17,9", "2" );    
    test(15, "891:6,10", "1" );    
    test(16, "1560:196,21", "2" );    
    test(17, "516:20,12", "5" );    
    test(18, "696:30,59", "2" );    
    test(19, "1760:5,441", "2" );    
    test(20, "1736:11,26", "5" );    
    test(21, "1518:17,34", "4" );    
    test(22, "806:63,16", "5" );    
    test(23, "1920:3,97", "2" );    
    test(24, "1150:13,22", "4" );    
    test(25, "920:116,5", "1" );    
    test(26, "2016:7,337", "2" );    
    test(27, "408:9,25", "2" );    
    test(28, "735:36,8", "2" );    
    test(29, "470:5,31", "2" );    
    test(30, "2100:12,351", "3" );    
    test(31, "870:36,10", "1" );    
    test(32, "1512:253,13", "2" );    
    test(33, "697:12,15", "3" );    
    test(34, "1224:5,14", "2" );    
    test(35, "986:125,17", "3" );    
    test(36, "864:12,13", "3" );    
    test(37, "500:21,51", "2" );    
    test(38, "819:33,21", "4" );    
    test(39, "594:55,3", "2" );    
    test(40, "638:17,24", "3" );

E11.py(Version avec cache)


class Node:
    cache = {}

    @staticmethod
    def get(number):
        if number in Node.cache: return Node.cache[number]
        Node.cache[number] = node = Node(number)
        return node

    def __init__(self, number):
        self.number = number
        self.children = [Node.get(i + 1)
                         for i in range(2, number // 2 + 1)
                         if number % i == 0]

    def distances(self, number):
        if number  > self.number: return []
        if number == self.number: return [0]
        return [distance + 1
                for child in self.children
                for distance in child.distances(number)]

    def distances_between(self, a, b):
        distances_in_children = [distance
                                 for child in self.children
                                 for distance in child.distances_between(a, b)]
        da, db = self.distances(a), self.distances(b)
        distance_across_self = [min(da) + min(db)] if da and db else []
        return distances_in_children + distance_across_self

    def distance_between(self, a, b):
        return min(self.distances_between(a, b))

def solve(data):
    number, ab = data.split(':')
    a, b = map(int, ab.split(','))
    return str(Node.get(int(number)).distance_between(a, b))

def test(no, data, correct):
    answer = solve(data)
    result = "OK" if answer == correct else "NG"
    print result, '%2d' % no, data, correct, '->', answer

if __name__ == '__main__':
    test( 0, "50:6,3", "1" );    
    test( 1, "98:5,11", "4" );    
    test( 2, "1000:33,20", "7" );    
    test( 3, "514:9,18", "8" );    
    test( 4, "961:5,4", "3" );    
    test( 5, "1369:1369,3", "2" );    
    test( 6, "258:16,12", "5" );    
    test( 7, "235:13,3", "2" );    
    test( 8, "1096:19,17", "8" );    
    test( 9, "847:7,17", "6" );    
    test(10, "1932:3,5", "2" );    
    test(11, "2491:4,8", "3" );    
    test(12, "840:421,36", "2" );    
    test(13, "1430:37,111", "3" );    
    test(14, "496:17,9", "2" );    
    test(15, "891:6,10", "1" );    
    test(16, "1560:196,21", "2" );    
    test(17, "516:20,12", "5" );    
    test(18, "696:30,59", "2" );    
    test(19, "1760:5,441", "2" );    
    test(20, "1736:11,26", "5" );    
    test(21, "1518:17,34", "4" );    
    test(22, "806:63,16", "5" );    
    test(23, "1920:3,97", "2" );    
    test(24, "1150:13,22", "4" );    
    test(25, "920:116,5", "1" );    
    test(26, "2016:7,337", "2" );    
    test(27, "408:9,25", "2" );    
    test(28, "735:36,8", "2" );    
    test(29, "470:5,31", "2" );    
    test(30, "2100:12,351", "3" );    
    test(31, "870:36,10", "1" );    
    test(32, "1512:253,13", "2" );    
    test(33, "697:12,15", "3" );    
    test(34, "1224:5,14", "2" );    
    test(35, "986:125,17", "3" );    
    test(36, "864:12,13", "3" );    
    test(37, "500:21,51", "2" );    
    test(38, "819:33,21", "4" );    
    test(39, "594:55,3", "2" );    
    test(40, "638:17,24", "3" );

Résultat d'exécution


$ python E11.py
OK  0 50:6,3 1 -> 1
OK  1 98:5,11 4 -> 4
OK  2 1000:33,20 7 -> 7
OK  3 514:9,18 8 -> 8
OK  4 961:5,4 3 -> 3
OK  5 1369:1369,3 2 -> 2
OK  6 258:16,12 5 -> 5
OK  7 235:13,3 2 -> 2
OK  8 1096:19,17 8 -> 8
OK  9 847:7,17 6 -> 6
OK 10 1932:3,5 2 -> 2
OK 11 2491:4,8 3 -> 3
OK 12 840:421,36 2 -> 2
OK 13 1430:37,111 3 -> 3
OK 14 496:17,9 2 -> 2
OK 15 891:6,10 1 -> 1
OK 16 1560:196,21 2 -> 2
OK 17 516:20,12 5 -> 5
OK 18 696:30,59 2 -> 2
OK 19 1760:5,441 2 -> 2
OK 20 1736:11,26 5 -> 5
OK 21 1518:17,34 4 -> 4
OK 22 806:63,16 5 -> 5
OK 23 1920:3,97 2 -> 2
OK 24 1150:13,22 4 -> 4
OK 25 920:116,5 1 -> 1
OK 26 2016:7,337 2 -> 2
OK 27 408:9,25 2 -> 2
OK 28 735:36,8 2 -> 2
OK 29 470:5,31 2 -> 2
OK 30 2100:12,351 3 -> 3
OK 31 870:36,10 1 -> 1
OK 32 1512:253,13 2 -> 2
OK 33 697:12,15 3 -> 3
OK 34 1224:5,14 2 -> 2
OK 35 986:125,17 3 -> 3
OK 36 864:12,13 3 -> 3
OK 37 500:21,51 2 -> 2
OK 38 819:33,21 4 -> 4
OK 39 594:55,3 2 -> 2
OK 40 638:17,24 3 -> 3

Recommended Posts

Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python
Comment écrire en temps réel hors ligne J'ai essayé de résoudre E12 avec python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
Comment écrire en temps réel hors ligne Résolution des problèmes E04 avec Python
Comment écrire hors ligne en temps réel Résolution des problèmes F01 avec Python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Comment écrire hors ligne en temps réel Résolution des problèmes E05 avec Python
Le 16ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Le 19ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de résoudre le problème avec Python Vol.1
Partie 1 J'ai écrit la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
J'ai essayé de simuler la propagation de l'infection avec Python
Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne
Partie 1 J'ai écrit un exemple de la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
Je voulais résoudre ABC160 avec Python
J'ai essayé de résoudre TSP avec QAOA
Je voulais résoudre ABC172 avec Python
J'ai essayé de décrire le trafic en temps réel avec WebSocket
Comment écrire un exemple d'implémentation E11 Ruby et Python en temps réel hors ligne
Comment écrire un exemple d'implémentation Python du problème E15 en temps réel hors ligne
Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec Python
Je voulais résoudre NOMURA Contest 2020 avec Python
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de sortir LLVM IR avec Python
Comment mesurer le temps d'exécution avec Python Partie 1
J'ai essayé d'automatiser la fabrication des sushis avec python
Je veux résoudre APG4b avec Python (chapitre 2)
Le 15e problème d'écriture en temps réel hors ligne a été résolu avec python
Réponse au "Problème d'écriture en temps réel hors ligne E13"
Je veux écrire dans un fichier avec Python
Comment mesurer le temps d'exécution avec Python, partie 2
Python / PEP8> E128 J'ai essayé de résoudre la ligne de continuation sous-indentée pour l'indentation visuelle
20e Comment écrire des problèmes en temps réel hors ligne en Python
J'ai essayé de résumer comment utiliser matplotlib de python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
Comment mesurer le temps de lecture d'un fichier mp3 avec python
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé de résumer comment utiliser les pandas de python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
Écrire en csv avec Python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ②
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ④
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel x Python ⑤
[Pour les professionnels de la compétition débutants] J'ai essayé de résoudre 40 questions AOJ "ITP I" avec python
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ①
J'ai essayé d'agréger et de comparer les données de prix unitaires par langue avec Real Gachi by Python
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ③
J'ai essayé de trouver l'entropie de l'image avec python
Je voulais résoudre le concours de programmation Panasonic 2020 avec Python
J'ai essayé de créer diverses "données factices" avec Python faker