Su tarea es encontrar dos personajes faltantes en el título de un episodio de Columbo.
Entrada
Uno de los 69 títulos de episodios de Columbo (como se enumera a continuación), con exactamente dos caracteres reemplazados por *
.
Ejemplo :
"Ran*om for a *ead Man"
Salida
Puede devolver el título completo del episodio, o solo los dos caracteres faltantes en cualquier formato razonable, siempre que el orden de los caracteres no sea ambiguo.
Algunas salidas válidas :
"Ransom for a Dead Man"
"sD"
["s", "D"]
Episodios
Por favor, siga este enlace para obtener la lista sin formato.
Prescription: Murder Swan Song Murder, Smoke and Shadows
Ransom for a Dead Man A Friend in Deed Sex and the Married Detective
Murder by the Book An Exercise in Fatality Grand Deceptions
Death Lends a Hand Negative Reaction Murder: A Self Portrait
Dead Weight By Dawn's Early Light Columbo Cries Wolf
Suitable for Framing Troubled Waters Agenda for Murder
Lady in Waiting Playback Rest in Peace, Mrs. Columbo
Short Fuse A Deadly State of Mind Uneasy Lies the Crown
Blueprint for Murder Forgotten Lady Murder in Malibu
Etude in Black A Case of Immunity Columbo Goes to College
The Greenhouse Jungle Identity Crisis Caution: Murder Can Be Hazardous to Your Health
The Most Crucial Game A Matter of Honor Columbo and the Murder of a Rock Star
Dagger of the Mind Now You See Him... Death Hits the Jackpot
Requiem for a Falling Star Last Salute to the Commodore No Time to Die
A Stitch in Crime Fade in to Murder A Bird in the Hand...
The Most Dangerous Match Old Fashioned Murder It's All in the Game
Double Shock The Bye-Bye Sky High IQ Murder Case Butterfly in Shades of Grey
Lovely But Lethal Try and Catch Me Undercover
Any Old Port in a Storm Murder Under Glass Strange Bedfellows
Candidate for Crime Make Me a Perfect Murder A Trace of Murder
Double Exposure How to Dial a Murder Ashes to Ashes
Publish or Perish The Conspirators Murder With Too Many Notes
Mind Over Mayhem Columbo Goes to the Guillotine Columbo Likes the Nightlife
Aclaraciones y reglas.
- Almacenar la lista de episodios (o almacenar suficiente información para adivinar los personajes que faltan) es parte del desafío. En otras palabras, no obtienes la lista 'gratis'. Si usa archivos externos, sus longitudes deben agregarse a su recuento de bytes.
- Su programa / función debe admitir los títulos exactamente como se enumeran anteriormente:
- El caso de cada letra debe coincidir exactamente.
- La puntuación también debe coincidir exactamente.
- Etc ...
- Todos los caracteres en el título pueden ser reemplazados con
*
, no solo letras. Pueden ser contiguos. - Puede esperar otro carácter 'en blanco' en lugar de
*
, siempre que no aparezca en ningún título. (Si es así, por favor menciónelo en su respuesta).
Ah, solo hay una cosa más. Casi lo olvido...
- Este es el código de golf , por lo que gana la respuesta más corta en bytes.
Equipo de prueba
Aquí hay un enlace a todas las 14252 entradas posibles.
code-golf
string
error-correction
Arnauld
fuente
fuente
error-correction
etiqueta que, creo, es apropiada aquí.A
ya
en la lista de cadenas únicas que existen.',-.:ABCDEFGHIJLMNOPQRSTUWYabcdefghiklmnopqrstuvwxyz
(y<space>
, por supuesto).Respuestas:
Stax , 294 bytes
Ejecutar y depurarlo
Aquí está el enfoque:
Para verificar que no se produciría ningún resultado incorrecto, utilicé un programa C # para verificar la salida de todas las entradas posibles. No es muy portátil y dura bastante. Hasta ahora he dejado que busque denominadores candidatos durante más de 24 horas, por lo que no es realmente adecuado para TIO. Lo estoy ejecutando en LINQPad.
Otra nota sobre el almacenamiento de los valores hash integrados en el programa. Los hashes se ordenan antes de incrustarlos en la matriz. Estoy usando una característica stax llamada "matrices enteras abarrotadas" que es una forma de representar eficientemente matrices enteras. Esta representación puede almacenar diferencias entre elementos si eso es más eficiente, por lo que la clasificación previa de los valores ahorra algunos bytes.
Aquí está la representación desempaquetada con algunos comentarios mínimos.
fuente
Python 2, 862 bytes
Aquí hay un script bash que ensambla este programa y demuestra su ejecución.
Explicación
Esta es una solución bastante simple: busqué la permutación más comprimible de los títulos unidos por espacios. Este programa simplemente reemplaza
*
la entrada por.
, y busca una coincidencia de esa expresión regular dentro de la cadena.La cadena se descomprime a:
fuente
JavaScript (ES6), 634 bytes
Este envío debía permanecer oculto hasta que se publicara una respuesta de menos de 500 bytes. Lo que ya se ha hecho .
Pruébalo en línea! (un caso de prueba aleatorio por episodio)
¿Cómo?
Definimos chr , la lista de personajes utilizados en los títulos de los episodios.
Definimos hash , una cadena que contiene los hash de todos los títulos no ofuscados. Cada hash consta de un número de 6 dígitos en base-36.
Definimos H () , una simple función hash.
Esto da log 2 (36 6 ) ~ = 31 bits de entropía. Al redondear esto a 4 bytes y agregar el tamaño de chr , el tamaño total de los datos de carga útil es: 4 * 69 + 53 = 329 bytes .
La función principal ahora se lee como:
(Esto se probó exhaustivamente contra todas las entradas posibles ).
fuente
Wolfram Language
13831226 bytesEditDistance encuentra la distancia de Levenshtein entre cadenas.
fuente
Jalea , 752 bytes
Pruébalo en línea!
Se utiliza este para comprimir la lista.
Esto supone que no hay una película que tenga exactamente 2 caracteres diferentes a otra película, lo cual se demuestra aquí (salida
1
).fuente
Rubí ,
11851165 bytesPruébalo en línea!
Una lambda que acepta una cadena y devuelve una cadena. Utiliza algo de expansión de cadenas caseras. Probablemente haya espacio para jugar al golf tanto en cómo se elige el título de la lista ampliada como en cómo se comprime exactamente la lista.
-20 bytes: reorganice el orden de la lista (a mano) para aumentar la repetición de subcadenas
Sin golf:
Aquí hay un fragmento del algoritmo de selección de sustitución codicioso que utilicé para generar este código. He omitido algunos detalles para que no funcione tal como está, pero debería dar una idea general.
fuente
Java 10,
142614051381131513131298 bytes-66 bytes gracias a @ OlivierGrégoire al codificar la cadena.
Explicación:
Pruébalo en línea.
Aquí está el código para el codificador.
fuente
java.nio.Files.readAllBytes(java.nio.Paths.get("a"))
. De esta manera, no se requiere bas64.796
y1397
?d.deflate(b)
yi.inflate(b)
conSystem.out.println(d.deflate(b))
ySystem.out.println(i.inflate(b))
. Si golf el texto, debe actualizar los tamaños de matriz.var bytes = new byte[9999]
y genera el número. Segunda ejecución: reemplace el9999
por el valor de salida y elimine elSystem.out.println()
. Si no hace esto, es muy probable que su String tenga un tamaño incorrecto y que la salida se estropee, eso es probablemente lo que sucedió con el golf 1290. Se supone que la API funciona con buffers, pero en nuestro caso, queremos jugar al golf, por lo que tenemos que calcular previamente esos valores. Si no lo hacemos, perdemos bytes.Python 2 , 621 bytes
Pruébalo en línea!
Nota: Dang! Acabo de ver que esto es esencialmente lo mismo que la solución de Arnauds ...
Todavía no está totalmente golfizado ...
La idea básica aquí: crear una lista de hashes de los títulos, módulo 36 ^ 6 (esto requiere 6 bytes por título; más algunos gastos generales).
Ahora, dado un título con dos caracteres faltantes, la fuerza bruta sustituye las dos letras posibles y verifica si el hash de la cadena resultante está en la lista.
Al pretender 'B' a los títulos y usar la
hash
función de Python , obtenemos una lista que nunca tiene colisiones en esa tarea; entonces siempre habrá una y solo una respuesta posible.fuente