Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen

Problem: http://nabetani.sakura.ne.jp/hena/orde11tredis/ Implementierungslinks: http://qiita.com/Nabetani/items/10b2ccc28301e44e09e6

Ich habe einen Knoten im Baum zu einer Klasse gemacht. Da viele Knoten mit demselben Wert angezeigt werden, habe ich auch eine Version mit Cache erstellt.

E11.py(Keine Cache-Version)


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 mit 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" );

Ausführungsergebnis


$ 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

Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen
Wie man offline in Echtzeit schreibt Ich habe versucht, E12 mit Python zu lösen
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
So schreiben Sie offline in Echtzeit Lösen von E04-Problemen mit Python
So schreiben Sie offline in Echtzeit Lösen von F01-Problemen mit Python
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
So schreiben Sie offline in Echtzeit Lösen von E05-Problemen mit Python
Das 16. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Das 19. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Teil 1 Ich habe die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Offline-Echtzeit zum Schreiben eines E14 Python-Implementierungsbeispiels
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Ich wollte ABC160 mit Python lösen
Ich habe versucht, TSP mit QAOA zu lösen
Ich wollte ABC172 mit Python lösen
Ich habe versucht, den Datenverkehr mit WebSocket in Echtzeit zu beschreiben
Offline in Echtzeit, wie man ein Implementierungsbeispiel für E11 Ruby und Python schreibt
Offline-Echtzeit zum Schreiben eines Python-Implementierungsbeispiels für das E15-Problem
Das 16. Offline-Echtzeit-Schreibproblem wurde mit Python gelöst
Ich wollte den NOMURA Contest 2020 mit Python lösen
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
So messen Sie die Ausführungszeit mit Python Teil 1
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich möchte APG4b mit Python lösen (Kapitel 2)
Das 15. Offline-Problem beim Schreiben in Echtzeit wurde mit Python gelöst
Antwort auf "Offline-Echtzeit, wie man ein E13-Problem schreibt"
Ich möchte mit Python in eine Datei schreiben
So messen Sie die Ausführungszeit mit Python Part 2
Python / PEP8> E128 Ich habe versucht, die für den visuellen Einzug unter eingerückte Fortsetzungszeile aufzulösen
20. Offline-Echtzeit So schreiben Sie Probleme in Python
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
So messen Sie die Wiedergabezeit von MP3-Dateien mit Python
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Schreiben Sie mit Python in csv
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python ④ optimiert werden kann
Ich habe versucht herauszufinden, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
[Für Anfänger von Wettkampfprofis] Ich habe versucht, 40 AOJ "ITP I" -Fragen mit Python zu lösen
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe versucht, Stückpreisdaten nach Sprache mit Real Gachi von Python zu aggregieren und zu vergleichen
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich wollte den Panasonic Programming Contest 2020 mit Python lösen
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen