Google Code Jam 2017: Tidy Numbers.

El problema dice más o menos así:

A Tatiana le gusta tener sus cosas ordenadas. Sus juguetes se encuentran acomodados del más pequeño al más grande, sus lápices están organizados del más corto al más largo y sus computadoras están ordenadas de la más vieja a la más nueva. Un día, al encontrarse practicando sus habilidades de conteo, notó que algunos números enteros positivos en base diez sin ceros a la derecha tenían sus dígitos ordenados en un orden no decreciente. Algunos ejemplos de este tipo de dígitos son: 8, 123, 555 y 224488. Ella decidió llamar a los números con esta propiedad números ordenados.

Tatiana justo acaba de terminar de contar todos los números positivos de 1 a N en orden ascendente. ¿Cuál fue el último número ordenado que contó?

def miMetodo( n ):
for i in xrange(len(n)-1, 0, -1):
if int(n[i-1]) > int(n[i]):
n = n[:i-1]+str(int(n[i-1])-1)+"9"*(len(n)-i)
return miMetodo(n)
return n
f = open("inpt.in")
t = int(f.readline())
for i in xrange(t):
ti = f.readline()
print "Case #"+str(i+1)+": "+str(miMetodo(ti))
view raw tidyNumbers.py hosted with ❤ by GitHub

Sin duda las líneas más importantes de este código son la 4 y la 5. La línea cuatro revisa si en un número dado todos los dígitos i son menores a los dígitos i-1.  De ser cumplida esta validación, dicho número será retornado por la función. De manera contraria, si tal validación no es satisfecha la línea cinco hará un decremento en dicho número de tal manera que:

8799 será transformado a 7999

512 será transformado a 499

785 será transformado a 779

10 será transformado a 9

Deja un comentario