Comment écrire un exemple d'implémentation Python du problème E15 en temps réel hors ligne

Problème: http://nabetani.sakura.ne.jp/hena/orde15nohil/ Liens de réponse: http://qiita.com/Nabetani/items/705fa83cfbf20377b92f Événement: https://yhpg.doorkeeper.jp/events/61418

  1. Réglez "Number" sur "3 base number" et créez une chaîne de nombres qui devient un chiffre pour chaque plage de numéros qui constitue un ensemble de blocs NxN.
  2. Afin de convertir le «nombre» en «coordonnées x, y» avec 2x2 comme unité minimale, ajustez chaque chiffre du nombre ternaire à 0 ou 1 pour le rendre «binaire».
  3. Trouvez le "nombre" adjacent à partir de chaque "coordonnée x, y" de 4 endroits adjacents en haut, en bas, à gauche et à droite
  4. Pour trouver le "nombre", ajustez chaque chiffre du "nombre binaire" des "coordonnées x, y" à 0, 1, 2 pour en faire un "nombre ternaire".
  5. Cependant, les "coordonnées x, y" correspondant au blanc en bas à droite ne deviennent pas le "nombre".
number 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Binaire 0 1 2 10 11 12 20 21 22 100 101 102 110 111 112 120 121 122 200
2⇒0 0 1 0 10 11 10 00 01 00 100 101 100 110 111 110 100 101 100 000
Conversion binaire ⇒ coordonnée X 0 1 0 2 3 2 0 1 0 4 5 4 6 7 6 4 5 4 0
1⇒0 2⇒1 0 0 1 00 00 01 10 10 11 000 000 001 000 000 001 010 010 011 100
Conversion binaire ⇒ coordonnée Y 0 0 1 0 0 1 2 2 3 0 0 1 0 0 1 2 2 3 4
#!/usr/bin/env python
# -*- coding:utf-8 -*-

def base(n, b):
    return (n // b and base(n // b, b) or '') + str(n % b)

def number(x, y):
    return (x < 0 or y < 0 or x & y != 0 or  # return True if there is no number
            int(str(int(bin(x)[2:]) + int(bin(y)[2:].replace('1', '2'))), 3))  # x:0or1 + y:0or2

def solve(data):
    digits = base(int(data), 3)
    x = int(digits.replace('2', '0'), 2)                    # x:012 -> 010
    y = int(digits.replace('1', '0').replace('2', '1'), 2)  # y:012 -> 001
    neighbors = number(x, y - 1), number(x - 1, y), number(x + 1, y), number(x, y + 1)
    return ','.join(str(n) for n in neighbors if n is not True)

def test(n, data, correct):
    answer = solve(data)
    if answer == correct:
        print('OK #%s: "%s" -> "%s"' % (n, data, answer))
    else:
        print('NG #%s: "%s" -> "%s" != "%s"' % (n, data, answer, correct))

test(0, "21", "19,22,23")
test(1, "0", "1,2")
test(2, "1", "0,3")
test(3, "2", "0,6")
test(4, "3", "1,4,5")
test(5, "4", "3,9")
test(6, "9", "4,10,11")
test(7, "15", "11,16,17")
test(8, "27", "13,28,29")
test(9, "32", "30")
test(10, "47", "45,51")
test(11, "65", "63,69")
test(12, "80", "78,162")
test(13, "199", "198,201")
test(14, "204", "200,205,206")
test(15, "243", "121,244,245")
test(16, "493", "492")
test(17, "508", "507")
test(18, "728", "726,1458")
test(19, "793", "792,795")
test(20, "902", "900,906")
test(21, "981", "976,982,983")
test(22, "1093", "1092,2187")
test(23, "1202", "1200")
test(24, "1300", "1299,1305")
test(25, "1962", "1952,1963,1964")
test(26, "2188", "2187,2190")
test(27, "2405", "2403,2409")
test(28, "3326", "3324")
test(29, "6561", "3280,6562,6563")
test(30, "6612", "6608,6613,6614")
test(31, "7058", "7056,7062")
test(32, "8444", "8442,8448")
test(33, "9841", "9840,19683")
test(34, "15243", "15239,15244,15245")
test(35, "19946", "19944,19950")
test(36, "21148", "21147")
test(37, "39365", "39363")
test(38, "39366", "19682,39367,39368")
test(39, "55694", "55692,55698")
test(40, "57245", "57243")
test(41, "66430", "66429,66432")
test(42, "92740", "92739")
test(43, "115250", "115248")
test(44, "163031", "163029")
test(45, "221143", "221142,221157")
test(46, "410353", "410352")
test(47, "412649", "412647,412659")
test(48, "550391", "550389")
test(49, "699921", "699880,699922,699923")
test(50, "797161", "797160,1594323")
test(51, "1000000", "999999,1000002")


Recommended Posts

Comment écrire un exemple d'implémentation Python du problème E15 en temps réel hors ligne
Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne
Comment écrire un exemple d'implémentation E11 Ruby et Python en temps réel hors ligne
Réponse au "Problème d'écriture en temps réel hors ligne E13"
Comment écrire hors ligne en temps réel Résolution des problèmes E05 avec Python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Le 15e comment écrire un problème de référence en temps réel hors ligne en Python
Le 14ème problème de référence d'écriture en temps réel hors ligne en python
Le 18ème comment écrire un problème de référence en temps réel hors ligne en Python
Réponse à "Comment écrire le problème F02 en temps réel hors ligne"
Réponse à "Comment écrire un problème F01 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
17ème problème de référence d'écriture en temps réel hors ligne implémenté en 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
Le 15e problème d'écriture en temps réel hors ligne a été résolu avec python
20e Comment écrire des problèmes en temps réel hors ligne en Python
Réponse à "Comment écrire un problème E12 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
Le 10ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par Python.
Comment écrire en temps réel hors ligne Résolution des problèmes E04 avec Python
Le 11ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par 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 J'ai essayé de résoudre E12 avec python
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
Comment écrire un type liste / dictionnaire de Python3
13th Offline en temps réel Comment résoudre les problèmes d'écriture avec Python
Le douzième problème de référence d'écriture en temps réel hors ligne. Implémenté par python
17e comment résoudre les problèmes d'écriture en temps réel hors ligne avec Python
Comment écrire hors ligne en temps réel Résolution des problèmes F01 avec Python
[Python] Résumé de l'utilisation des pandas
Réponse à "Comment écrire le problème F04 en temps réel hors ligne"
Réponse à "Comment écrire le problème F05 en temps réel hors ligne"
[Python2.7] Résumé de l'utilisation d'unittest
Résumé de l'utilisation de la liste Python
[Python2.7] Résumé de l'utilisation du sous-processus
Comment écrire Ruby to_s en Python
Résumé de l'écriture d'AWS Lambda
[Question] Comment utiliser plot_surface de python
[Python] Comment utiliser deux types de type ()
Résumé de la façon d'importer des fichiers dans Python 3
Résumé de l'utilisation de MNIST avec Python
Comment spécifier des attributs avec Mock of Python
Le 18ème problème d'écriture en temps réel hors ligne en Python
Comment obtenir des éléments de type dictionnaire de Python 2.7
Le 19ème problème d'écriture en temps réel hors ligne en Python
[Python] Résumé des fonctions eval / exec + Comment écrire une chaîne de caractères avec des sauts de ligne
Exemple d'implémentation d'un système de traitement LISP simple (version Python)
Comment obtenir le nombre de chiffres en Python
Comment installer Python
J'ai essayé de résumer comment utiliser matplotlib de python
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
Comment installer python
Comment utiliser Python Kivy ① ~ Bases du langage Kv ~
[Python] Comment écrire une docstring conforme à PEP8
[Python] Comment fractionner et modulariser des fichiers (simple, exemple)
Examen de atcoder ABC158, jusqu'à la question E (Python)
Le 14ème problème de référence d'écriture en temps réel hors ligne avec Python
[Python] Résumé de la façon de spécifier la couleur de la figure