En este post la solución a otro de los retos de codificación de la plataforma RingZer0 Team.
Este reto tiene el título "Ask your grandpa again!" y mi valoración sobre su dificultad es: ★★★☆☆.
Se trata de un reto en el que al igual que en éste se ven involucradas tarjetas perforadas, pero en este caso su resolución presenta una mayor dificultad.
Nos dan seis ficheros jpg (card, grandpa, my, programming, punch y yolo) que contienen sendas imágenes de tarjetas perforadas.
Las imágenes de las tarjetas perforadas son las siguientes (en el orden indicado en el párrafo anterior):
Para leer las seis tarjetas adapto el script de python que utilicé en este post, de la siguiente manera:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def leer_columna_1(perforacion_1):
"""
Devuelve la lectura que corresponde a una columna con una perforacion.
"""
columna=''
columna=[0,1,2,3,4,5,6,7,8,9,'','-','&']
if columna=='':
print('Error lectura columna')
else:
return columna[perforacion_1]
def leer_columna_2(perforacion_1,perforacion_2):
"""
Devuelve la lectura que corresponde a una columna con dos perforaciones.
"""
columna=''
if perforacion_1==12:
columna=['','A','B','C','D','E','F','G','H','I','','','']
elif perforacion_1==11:
columna=['','J','K','L','M','N','O','P','Q','R','','','']
elif perforacion_1==0:
columna=['','/','S','T','U','V','W','X','Y','Z','','','']
elif perforacion_1==2:
columna=['','','','','','','','',':','','','','']
elif perforacion_1==3:
columna=['','','','','','','','','#','','','','']
elif perforacion_1==4:
columna=['','','','','','','','','@','','','','']
elif perforacion_1==5:
columna=['','','','','','','','','','','','','']
elif perforacion_1==6:
columna=['','','','','','','','','=','','','','']
elif perforacion_1==7:
columna=['','','','','','','','','"','','','','']
else:
print('Error lectura columna')
if columna=='':
print('Error lectura columna')
else:
return columna[perforacion_2]
def leer_columna_3(perforacion_1,perforacion_2,perforacion_3):
"""
Devuelve la lectura que corresponde a una columna con tres perforaciones.
"""
columna=''
if perforacion_1==12:
if perforacion_2==3:
columna=['','','','','','','','','.','','','','']
elif perforacion_2==4:
columna=['','','','','','','','','<','','','','']
elif perforacion_2==5:
columna=['','','','','','','','','(','','','','']
elif perforacion_2==6:
columna=['','','','','','','','','+','','','','']
elif perforacion_2==7:
columna=['','','','','','','','','|','','','','']
elif perforacion_2==8:
columna=['','','','','','','','','','','','','']
else:
print('Error lectura columna')
elif perforacion_1==11:
if perforacion_2==2:
columna=['','','','','','','','','!','','','','']
elif perforacion_2==3:
columna=['','','','','','','','','$','','','','']
elif perforacion_2==4:
columna=['','','','','','','','','*','','','','']
elif perforacion_2==5:
columna=['','','','','','','','',')','','','','']
elif perforacion_2==6:
columna=['','','','','','','','',';','','','','']
elif perforacion_2==7:
columna=['','','','','','','','','','','','','']
else:
print('Error lectura columna')
elif perforacion_1==0:
if perforacion_2==3:
columna=['','','','','','','','',',','','','','']
elif perforacion_2==4:
columna=['','','','','','','','','%','','','','']
elif perforacion_2==5:
columna=['','','','','','','','','_','','','','']
elif perforacion_2==6:
columna=['','','','','','','','','>','','','','']
elif perforacion_2==7:
columna=['','','','','','','','','?','','','','']
else:
print('Error lectura columna')
else:
print('Error lectura columna')
if columna=='':
print('Error lectura columna')
else:
return columna[perforacion_3]
# Tarjetas a leer: para cada columna de cada tarjeta incluir, separados por comas, numero de perforaciones y posiciones de las perforaciones.
tarjetas=[[0,1,1,1,3,1,3,1,7,0,2,12,6,2,11,6,2,11,9,2,11,4,2,12,1,2,0,3,3,12,5,8,1,1,1,1,2,12,8,2,12,6,2,11,3,2,12,1,2,12,7,1,11,2,12,4,2,12,6,2,12,5,2,12,2,1,0,2,12,4,3,0,3,8,2,12,9,1,4,3,0,3,8,1,1,2,12,8,1,11,3,0,3,8,2,12,9,1,3,3,0,3,8,1,1,1,0,2,12,8,2,12,6,2,12,4,2,12,2,2,12,5,2,12,3,2,12,4,2,12,6,1,3,1,9,2,12,4,3,0,3,8,2,12,9,1,3,3,11,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,5,1,0],
[0,0,0,0,0,0,2,12,5,2,11,5,2,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,6,1,0],
[0,0,0,0,0,0,2,0,6,2,11,9,2,12,9,2,0,3,2,12,5,3,12,5,8,1,6,3,0,3,8,1,1,1,3,1,3,1,7,3,11,5,8,2,11,1,3,12,6,8,1,2,1,9,3,0,3,8,3,12,5,8,2,11,1,2,0,1,1,4,3,11,5,8,3,12,6,8,1,2,1,0,3,0,3,8,2,12,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,4,1,0],
[0,0,0,0,0,0,2,11,7,2,11,9,2,11,6,2,12,7,2,11,9,2,12,1,2,11,4,0,2,0,6,2,12,6,2,11,3,2,12,1,2,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,1,1,0],
[0,0,0,0,0,0,2,12,9,2,6,8,1,9,1,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,2,1,0],
[0,0,0,0,0,0,2,11,1,2,6,8,1,2,1,8,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,3,1,0]]
i=0
j=0
while i < len(tarjetas):
lectura_tarjeta=""
k=0
while k < len(tarjetas[j]):
if tarjetas[j][k]==0:
lectura_tarjeta=lectura_tarjeta+" "
k+=1
elif tarjetas[j][k]==1:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_1(tarjetas[j][k+1]))
k+=2
elif tarjetas[j][k]==2:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_2(tarjetas[j][k+1],tarjetas[j][k+2]))
k+=3
else:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_3(tarjetas[j][k+1],tarjetas[j][k+2],tarjetas[j][k+3]))
k+=4
print(lectura_tarjeta)
j+=1
i+=1
Ejecuto este script:
El resultado de la lectura de las tarjetas me resulta familiar. Yo diría que es un pequeño programa escrito en Fortran.
Los dos primeros lenguajes de programación que estudié, allá por 1983 (hace ya unos 35 años), fueron Cobol y Fortran. Empiezo a sospechar que el abuelo del título de este reto soy yo :(.
En el enlace referido a tarjetas perforadas que he puesto al inicio de este post se ve un ejemplo de una tarjeta perforada de un programa Fortran (fuente: Wikipedia):
Ordeno las sentencias y utilizo una herramienta online para ejecutar el código obtenido con el script de python y ver el resultado:
Y, por tanto, la solución a este reto es: FLAG-DFEB0D2829-720FDBECDF39D931.
Este reto tiene el título "Ask your grandpa again!" y mi valoración sobre su dificultad es: ★★★☆☆.
Se trata de un reto en el que al igual que en éste se ven involucradas tarjetas perforadas, pero en este caso su resolución presenta una mayor dificultad.
Nos dan seis ficheros jpg (card, grandpa, my, programming, punch y yolo) que contienen sendas imágenes de tarjetas perforadas.
Las imágenes de las tarjetas perforadas son las siguientes (en el orden indicado en el párrafo anterior):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def leer_columna_1(perforacion_1):
"""
Devuelve la lectura que corresponde a una columna con una perforacion.
"""
columna=''
columna=[0,1,2,3,4,5,6,7,8,9,'','-','&']
if columna=='':
print('Error lectura columna')
else:
return columna[perforacion_1]
def leer_columna_2(perforacion_1,perforacion_2):
"""
Devuelve la lectura que corresponde a una columna con dos perforaciones.
"""
columna=''
if perforacion_1==12:
columna=['','A','B','C','D','E','F','G','H','I','','','']
elif perforacion_1==11:
columna=['','J','K','L','M','N','O','P','Q','R','','','']
elif perforacion_1==0:
columna=['','/','S','T','U','V','W','X','Y','Z','','','']
elif perforacion_1==2:
columna=['','','','','','','','',':','','','','']
elif perforacion_1==3:
columna=['','','','','','','','','#','','','','']
elif perforacion_1==4:
columna=['','','','','','','','','@','','','','']
elif perforacion_1==5:
columna=['','','','','','','','','','','','','']
elif perforacion_1==6:
columna=['','','','','','','','','=','','','','']
elif perforacion_1==7:
columna=['','','','','','','','','"','','','','']
else:
print('Error lectura columna')
if columna=='':
print('Error lectura columna')
else:
return columna[perforacion_2]
def leer_columna_3(perforacion_1,perforacion_2,perforacion_3):
"""
Devuelve la lectura que corresponde a una columna con tres perforaciones.
"""
columna=''
if perforacion_1==12:
if perforacion_2==3:
columna=['','','','','','','','','.','','','','']
elif perforacion_2==4:
columna=['','','','','','','','','<','','','','']
elif perforacion_2==5:
columna=['','','','','','','','','(','','','','']
elif perforacion_2==6:
columna=['','','','','','','','','+','','','','']
elif perforacion_2==7:
columna=['','','','','','','','','|','','','','']
elif perforacion_2==8:
columna=['','','','','','','','','','','','','']
else:
print('Error lectura columna')
elif perforacion_1==11:
if perforacion_2==2:
columna=['','','','','','','','','!','','','','']
elif perforacion_2==3:
columna=['','','','','','','','','$','','','','']
elif perforacion_2==4:
columna=['','','','','','','','','*','','','','']
elif perforacion_2==5:
columna=['','','','','','','','',')','','','','']
elif perforacion_2==6:
columna=['','','','','','','','',';','','','','']
elif perforacion_2==7:
columna=['','','','','','','','','','','','','']
else:
print('Error lectura columna')
elif perforacion_1==0:
if perforacion_2==3:
columna=['','','','','','','','',',','','','','']
elif perforacion_2==4:
columna=['','','','','','','','','%','','','','']
elif perforacion_2==5:
columna=['','','','','','','','','_','','','','']
elif perforacion_2==6:
columna=['','','','','','','','','>','','','','']
elif perforacion_2==7:
columna=['','','','','','','','','?','','','','']
else:
print('Error lectura columna')
else:
print('Error lectura columna')
if columna=='':
print('Error lectura columna')
else:
return columna[perforacion_3]
# Tarjetas a leer: para cada columna de cada tarjeta incluir, separados por comas, numero de perforaciones y posiciones de las perforaciones.
tarjetas=[[0,1,1,1,3,1,3,1,7,0,2,12,6,2,11,6,2,11,9,2,11,4,2,12,1,2,0,3,3,12,5,8,1,1,1,1,2,12,8,2,12,6,2,11,3,2,12,1,2,12,7,1,11,2,12,4,2,12,6,2,12,5,2,12,2,1,0,2,12,4,3,0,3,8,2,12,9,1,4,3,0,3,8,1,1,2,12,8,1,11,3,0,3,8,2,12,9,1,3,3,0,3,8,1,1,1,0,2,12,8,2,12,6,2,12,4,2,12,2,2,12,5,2,12,3,2,12,4,2,12,6,1,3,1,9,2,12,4,3,0,3,8,2,12,9,1,3,3,11,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,5,1,0],
[0,0,0,0,0,0,2,12,5,2,11,5,2,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,6,1,0],
[0,0,0,0,0,0,2,0,6,2,11,9,2,12,9,2,0,3,2,12,5,3,12,5,8,1,6,3,0,3,8,1,1,1,3,1,3,1,7,3,11,5,8,2,11,1,3,12,6,8,1,2,1,9,3,0,3,8,3,12,5,8,2,11,1,2,0,1,1,4,3,11,5,8,3,12,6,8,1,2,1,0,3,0,3,8,2,12,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,4,1,0],
[0,0,0,0,0,0,2,11,7,2,11,9,2,11,6,2,12,7,2,11,9,2,12,1,2,11,4,0,2,0,6,2,12,6,2,11,3,2,12,1,2,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,1,1,0],
[0,0,0,0,0,0,2,12,9,2,6,8,1,9,1,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,2,1,0],
[0,0,0,0,0,0,2,11,1,2,6,8,1,2,1,8,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,3,1,7,1,0,1,0,1,3,1,0]]
i=0
j=0
while i < len(tarjetas):
lectura_tarjeta=""
k=0
while k < len(tarjetas[j]):
if tarjetas[j][k]==0:
lectura_tarjeta=lectura_tarjeta+" "
k+=1
elif tarjetas[j][k]==1:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_1(tarjetas[j][k+1]))
k+=2
elif tarjetas[j][k]==2:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_2(tarjetas[j][k+1],tarjetas[j][k+2]))
k+=3
else:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_3(tarjetas[j][k+1],tarjetas[j][k+2],tarjetas[j][k+3]))
k+=4
print(lectura_tarjeta)
j+=1
i+=1
Ejecuto este script:
El resultado de la lectura de las tarjetas me resulta familiar. Yo diría que es un pequeño programa escrito en Fortran.
Los dos primeros lenguajes de programación que estudié, allá por 1983 (hace ya unos 35 años), fueron Cobol y Fortran. Empiezo a sospechar que el abuelo del título de este reto soy yo :(.
En el enlace referido a tarjetas perforadas que he puesto al inicio de este post se ve un ejemplo de una tarjeta perforada de un programa Fortran (fuente: Wikipedia):
Ordeno las sentencias y utilizo una herramienta online para ejecutar el código obtenido con el script de python y ver el resultado:
Y, por tanto, la solución a este reto es: FLAG-DFEB0D2829-720FDBECDF39D931.
Comentarios
Publicar un comentario