Created
March 14, 2015 14:45
-
-
Save arthuralvim/f0e7f62414e4ade71745 to your computer and use it in GitHub Desktop.
Google Developer Day 2010: Na pacata vila campestre de Ponteironuloville, todos os telefones têm 6 dígitos. A companhia telefônica estabelece as seguintes regras sobre os números: Não pode haver dois dígitos consecutivos idênticos, porque isso é chato; A soma dos dígitos tem que ser par, porque isso é legal; O último dígito não pode ser igual ao…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from itertools import tee | |
class ListaTelefones(object): | |
def __init__(self, lista_de_telefones): | |
self.telefones = lista_de_telefones.split() | |
self.telefones_validos = [] | |
self.telefones_invalidos = [] | |
def dois_a_dois(self, iterable): | |
"s -> (s0,s1), (s1,s2), (s2, s3), ..." | |
a, b = tee(iterable) | |
next(b, None) | |
return zip(a, b) | |
def digitos_consecutivos_identicos(self, telefone): | |
""" Não pode haver dois dígitos consecutivos idênticos, | |
porque isso é chato. """ | |
return all([True if el1 != el2 else False | |
for el1, el2 in self.dois_a_dois(telefone)]) | |
def soma_digitos_e_par(self, telefone): | |
""" A soma dos dígitos tem que ser par, porque isso é legal. """ | |
return sum(map(int, telefone)) % 2 == 0 | |
def primeiro_e_ultimo_digito_diferentes(self, telefone): | |
""" O último dígito não pode ser igual ao primeiro, | |
porque isso dá azar. """ | |
return telefone[0] != telefone[-1] | |
def checar_validade(self, telefone): | |
condicao1 = self.digitos_consecutivos_identicos(telefone) | |
condicao2 = self.soma_digitos_e_par(telefone) | |
condicao3 = self.primeiro_e_ultimo_digito_diferentes(telefone) | |
return all([condicao1, condicao2, condicao3, ]) | |
def obter_telefones_validos(self): | |
self.telefones_validos = [] | |
for li in self.telefones: | |
if self.checar_validade(li): | |
self.telefones_validos.append(li) | |
def imprimir_telefones(self): | |
for li in self.telefones: | |
print(li) | |
def imprimir_telefones_validos(self): | |
for li in self.telefones_validos: | |
print(li) | |
def contar_telefones(self): | |
print(len(self.telefones)) | |
def contar_telefones_validos(self): | |
print(len(self.telefones_validos)) | |
lista = '''213752 216732 221063 221545 225583 229133 230648 233222 236043 237330 | |
239636 240138 242123 246224 249183 252936 254711 257200 257607 261424 | |
263814 266794 268649 273050 275001 277606 278997 283331 287104 287953 | |
289137 291591 292559 292946 295180 295566 297529 300400 304707 306931 | |
310638 313595 318449 319021 322082 323796 326266 326880 327249 329914 | |
334392 334575 336723 336734 338808 343269 346040 350113 353631 357154 | |
361633 361891 364889 365746 365749 366426 369156 369444 369689 372896 | |
374983 375223 379163 380712 385640 386777 388599 389450 390178 392943 | |
394742 395921 398644 398832 401149 402219 405364 408088 412901 417683 | |
422267 424767 426613 430474 433910 435054 440052 444630 447852 449116 | |
453865 457631 461750 462985 463328 466458 469601 473108 476773 477956 | |
481991 482422 486195 488359 489209 489388 491928 496569 496964 497901 | |
500877 502386 502715 507617 512526 512827 513796 518232 521455 524277 | |
528496 529345 531231 531766 535067 535183 536593 537360 539055 540582 | |
543708 547492 550779 551595 556493 558807 559102 562050 564962 569677 | |
570945 575447 579937 580112 580680 582458 583012 585395 586244 587393 | |
590483 593112 593894 594293 597525 598184 600455 600953 601523 605761 | |
608618 609198 610141 610536 612636 615233 618314 622752 626345 626632 | |
628889 629457 629643 633673 637656 641136 644176 644973 647617 652218 | |
657143 659902 662224 666265 668010 672480 672695 676868 677125 678315''' | |
lista_telefones = ListaTelefones(lista_de_telefones=lista) | |
lista_telefones.obter_telefones_validos() | |
lista_telefones.imprimir_telefones_validos() | |
lista_telefones.contar_telefones_validos() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment