Decía en el post anterior que en un post siguiente iba a resolver el reto de codificación de la plataforma RingZer0 Team que en él aparece utilizando un script de python.
Decía también que este reto tiene el título "Ask your grandpa!" y mi valoración sobre su dificultad es: ★★☆☆☆.
Recuerdo de qué se trataba el reto: sólo nos dan un archivo jpg que contiene una imagen de una tarjeta perforada.
En concreto, la tarjeta de este reto tiene 80 columnas (en la siguiente imagen se ha recortado para que se aprecien mejor las perforaciones) y es la siguiente:
Pues bien, para leer esta tarjeta utilizo el siguiente script de python (ver explicación dada en el post 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]
# Tarjeta a leer: para cada columna de la tarjeta incluir, separados por comas, numero de perforaciones y posiciones de las perforaciones.
tarjeta=[2,12,6,2,11,3,2,12,1,2,12,7,1,11,2,12,4,2,12,2,1,11,2,12,9,2,11,5,2,12,4,2,12,5,2,0,7,2,2,8,1,3,1,8,1,0,1,1,3,0,3,8,2,0,5,2,12,1,2,11,3,2,2,8,2,12,6,2,11,3,2,12,1,2,12,7,1,11,2,12,2,1,4,1,9,1,3,1,8,1,0,1,1,2,12,3,2,12,4,2,12,2,1,11,1,8,1,3,1,1,2,12,1,2,12,2,2,12,4,2,12,4,2,12,6,2,12,1,1,6,1,2,1,8,2,12,1,2,12,3,1,3,1,1]
lectura_tarjeta=""
i=0
whilei < len(tarjeta):
if tarjeta[i]==0:
lectura_tarjeta=lectura_tarjeta+" "
i+=1
elif tarjeta[i]==1:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_1(tarjeta[i+1]))
i+=2
elif tarjeta[i]==2:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_2(tarjeta[i+1],tarjeta[i+2]))
i+=3
else:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_3(tarjeta[i+1],tarjeta[i+2],tarjeta[i+3]))
i+=4
print(lectura_tarjeta)
Ejecuto este script:
Y, como se observa en la figura anterior, la solución a este reto es: FLAG-B493801CDB-831ABDDFA628AC31.
Decía también que este reto tiene el título "Ask your grandpa!" y mi valoración sobre su dificultad es: ★★☆☆☆.
Recuerdo de qué se trataba el reto: sólo nos dan un archivo jpg que contiene una imagen de una tarjeta perforada.
En concreto, la tarjeta de este reto tiene 80 columnas (en la siguiente imagen se ha recortado para que se aprecien mejor las perforaciones) y es la siguiente:
Pues bien, para leer esta tarjeta utilizo el siguiente script de python (ver explicación dada en el post 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]
# Tarjeta a leer: para cada columna de la tarjeta incluir, separados por comas, numero de perforaciones y posiciones de las perforaciones.
tarjeta=[2,12,6,2,11,3,2,12,1,2,12,7,1,11,2,12,4,2,12,2,1,11,2,12,9,2,11,5,2,12,4,2,12,5,2,0,7,2,2,8,1,3,1,8,1,0,1,1,3,0,3,8,2,0,5,2,12,1,2,11,3,2,2,8,2,12,6,2,11,3,2,12,1,2,12,7,1,11,2,12,2,1,4,1,9,1,3,1,8,1,0,1,1,2,12,3,2,12,4,2,12,2,1,11,1,8,1,3,1,1,2,12,1,2,12,2,2,12,4,2,12,4,2,12,6,2,12,1,1,6,1,2,1,8,2,12,1,2,12,3,1,3,1,1]
lectura_tarjeta=""
i=0
while
lectura_tarjeta=lectura_tarjeta+" "
i+=1
elif tarjeta[i]==1:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_1(tarjeta[i+1]))
i+=2
elif tarjeta[i]==2:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_2(tarjeta[i+1],tarjeta[i+2]))
i+=3
else:
lectura_tarjeta=lectura_tarjeta+str(leer_columna_3(tarjeta[i+1],tarjeta[i+2],tarjeta[i+3]))
i+=4
print(lectura_tarjeta)
Ejecuto este script:
Y, como se observa en la figura anterior, la solución a este reto es: FLAG-B493801CDB-831ABDDFA628AC31.
Comentarios
Publicar un comentario