Este es un desafío de policías y ladrones. Este es el hilo del policía. El hilo del ladrón está aquí .
Como policía, debe elegir cualquier secuencia del OEIS y escribir un programa p que imprima el primer entero de esa secuencia. También debes encontrar algunas cadenas s . Si inserta s en algún lugar de p , este programa debe imprimir el segundo entero de la secuencia. Si inserta s + s en la misma ubicación en p , este programa debe imprimir el tercer entero de la secuencia. s + s + s en la misma ubicación imprimirá el cuarto, y así sucesivamente. Aquí hay un ejemplo:
Python 3, secuencia A000027
print(1)
La cadena oculta es de dos bytes .
La cadena es +1
, porque el programa print(1+1)
imprimirá el segundo entero en A000027, el programa print(1+1+1)
imprimirá el tercer entero, etc.
Los policías deben revelar la secuencia, el programa original p y la longitud de la cadena oculta s . Los ladrones descifran una presentación al encontrar cualquier cadena de esa longitud y la ubicación para insertarla para crear la secuencia. La cadena no necesita coincidir con la solución prevista para ser una grieta válida, ni tampoco la ubicación en la que se inserta.
Reglas
Su solución debe funcionar para cualquier número en la secuencia, o al menos hasta un límite razonable en el que falla en restricciones de memoria, desbordamiento de enteros / pila, etc.
El ladrón ganador es el usuario que descifra la mayor cantidad de envíos, siendo el desempate el que alcanzó ese número de grietas primero.
El policía que gana es el policía con la cadena más corta s que no está agrietada. Tiebreaker es el más corto p . Si no hay envíos no descifrados, el policía que tenía una solución descifrada para ganar más tiempo.
Para ser declarado seguro, su solución debe permanecer sin descifrar durante 1 semana y luego debe revelar la cadena oculta (y la ubicación para insertarla).
s no puede estar anidado, debe concatenarse de extremo a extremo. Por ejemplo, si s fuera
10
, cada iteración iría en10, 1010, 101010, 10101010...
lugar de10, 1100, 111000, 11110000...
Es aceptable comenzar con el segundo término de la secuencia en lugar del primero.
Si su secuencia tiene un número finito de términos, pasar el último término puede generar un comportamiento indefinido.
Todas las soluciones criptográficas (por ejemplo, verificar el hash de la subcadena) están prohibidas.
Si s contiene caracteres no ASCII, también debe especificar la codificación que se está utilizando.