¿Dónde puedo obtener el algoritmo de ‘Biblioteca de Babel’?

Necesita un algoritmo de cifrado reversible. Toma la cadena de búsqueda y la cifra, y el resultado lo convierte en “coordenadas en la biblioteca”. Cuando alguien va a esas coordenadas, lo descifra para devolverles su cadena de búsqueda. Si navegan a la página siguiente, descifra las coordenadas de esa página y resulta que devuelve la cadena de búsqueda que se vincularía a ella.

El resultado es una biblioteca de búsqueda que contiene tantas páginas como su cadena cifrada puede correlacionar. Cuanto más grande es su cadena, más páginas posibles existen en su biblioteca.

Por ejemplo, usando hexadecimal como mi encriptación reversible, mi nombre, “alfred”, estaría codificado en 616c66726564. Ese valor hexadecimal es la dirección. Si alguien “busca” a ese hexadecimal, lo descifrará de nuevo a ASCII y verá “Alfred”. Si navegan a la siguiente dirección, 616c66726565, la descifraría como “alfree”. Dado que una cadena hexadecimal puede tener una longitud arbitraria, también lo puede hacer su cadena de búsqueda. Puede buscar todas las obras de Shakespeare y hay una “dirección hexadecimal en la biblioteca de babel” que coincide. Si desea devolver muchos resultados de búsqueda, simplemente devuelva varias cadenas de caracteres hexadecimales que contienen el hexadecimal para la cadena de búsqueda en el medio de ellos.

Esto es mucho más fácil que tratar de generar, almacenar e indexar todas las combinaciones posibles de personajes que podrían existir en la biblioteca de babel, aunque quita un poco la magia.

Hay muchas construcciones diferentes. Aquí hay uno posible:

  1. Elige un alfabeto finito
  2. Para cada longitud (0,1,2, …) genere e imprima todas las cadenas de esta longitud.

Aquí hay una implementación de muestra en Python. Dado suficiente tiempo y memoria, cada posible cadena de caracteres ASCII imprimibles aparecerá en la salida de este programa.

printable_chars = [chr (x) para x en el rango (32,127)]

def generate_all_strings (longitud):
si longitud == 0:
rendimiento ”
más:
para el prefijo en generate_all_strings (longitud-1):
para agregar en printable_chars:
prefijo de rendimiento + agregar

longitud = 0
mientras cierto:
para la palabra en generate_all_strings (longitud):
para char en palabra:
print (char, end = ”)
longitud + = 1

Supongo que se refiere al cuento corto de Borges, una biblioteca que contiene todos los libros posibles. Esto se reduce a generar todas las permutaciones de un conjunto de caracteres, para todas las longitudes de texto posibles. Aunque esto puede no ser inmediatamente obvio, una pequeña reflexión revela que esto es equivalente a contar, cuando se hace en la base numérica del tamaño del conjunto de caracteres. (Seguramente contar en la base 10 eventualmente creará todas las cadenas que se pueden hacer con los caracteres 0–9, ¿sí? Lo mismo es cierto para los caracteres AZ si se cuenta en la base 26).

Sea N el número de caracteres únicos en su conjunto de caracteres, por ejemplo, 128 para ASCII.

X = 0
mientras (1)
{
// Convierte X en una representación base-N
X = X + 1
}

More Interesting

Cómo argumentar la corrección del tipo radix

¿Existen campamentos de programación a tiempo completo en Europa para mejorar la programación o las estructuras de datos y habilidades de algoritmos?

¿Qué proyectos de aprendizaje automático se ven bien en un currículum?

¿Cuáles son algunas de las preguntas de cadena que se hacen comúnmente en una entrevista técnica?

¿Cómo es diferente la cola circular del algoritmo de inserción?

¿Cuál es el uso en tiempo real de C, C ++, estructuras de datos y algoritmos?

¿Hay algún conocimiento de programación que pueda utilizar / ayudaría a aprender ajedrez?

Estoy tomando un curso en línea, Algorithms Part 1 de Sedgewick y Wayne en Coursera. Conozco bastante a Java, pero me llevó más de un día llegar a la mitad de la resolución de la primera tarea de programación. ¿Debería dejarlo? ¿Todos sienten lo mismo mientras aprenden sobre algoritmos?

Cómo escribir una función recursiva usando Python que toma una cadena como entrada e imprime cada carácter en una línea separada

¿Qué algoritmo se usa para la predicción de abandono?

Cómo resolver el problema BAT4 en SPOJ usando dp iterativo o recursivo

Cómo contar el número de n rutas de borde que comienzan desde el nodo u en un DAG (gráfico acíclico dirigido)

¿Cuál es el mejor enfoque para resolver el problema que CRYPTO preguntó en el concurso de codificación PRAVEGA 2014 celebrado en Codechef el 9 de noviembre?

¿Qué razones prácticas hay para que un no programador aprenda sobre estructuras de datos y / o algoritmos?

Cómo validar un algoritmo de stock