Sua tarefa é encontrar dois personagens ausentes no título de um episódio de Columbo.
Entrada
Um dos 69 títulos de episódios Columbo (conforme listado abaixo), com exatamente dois caracteres substituídos por *
.
Exemplo :
"Ran*om for a *ead Man"
Saída
Você pode retornar o título do episódio completo ou apenas os dois personagens ausentes em qualquer formato razoável, desde que a ordem dos personagens seja inequívoca.
Algumas saídas válidas :
"Ransom for a Dead Man"
"sD"
["s", "D"]
Episódios
Por favor, siga este link para obter a lista não formatada.
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
Esclarecimentos e regras
- Armazenar a lista de episódios (ou armazenar informações suficientes para adivinhar os personagens ausentes) faz parte do desafio. Em outras palavras, você não recebe a lista 'de graça'. Se estiver usando arquivos externos, seus comprimentos deverão ser adicionados à sua contagem de bytes.
- Seu programa / função deve suportar os títulos exatamente como listado acima:
- O caso de cada letra deve corresponder exatamente.
- A pontuação também deve corresponder exatamente.
- Etc ...
- Todos os caracteres no título podem ser substituídos por
*
, e não apenas letras. Eles podem ser contíguos. - Você pode esperar outro caractere 'em branco' em vez de
*
, desde que ele não apareça em nenhum lugar de nenhum título. (Se sim, mencione-o na sua resposta.)
Ah, só há mais uma coisa. Eu quase esqueci...
- Isso é código-golfe , então a resposta mais curta em bytes vence!
Conjunto de teste
Aqui está um link para todas as 14252 entradas possíveis.
code-golf
string
error-correction
Arnauld
fonte
fonte
error-correction
tag que, eu acho, é apropriada aqui.A
ea
na lista de strings únicas que existem.',-.:ABCDEFGHIJLMNOPQRSTUWYabcdefghiklmnopqrstuvwxyz
(e<space>
, é claro).Respostas:
Stax , 294 bytes
Execute e depure
Aqui está a abordagem:
Para verificar se nenhum resultado incorreto seria produzido, usei um programa C # para verificar a saída de todas as entradas possíveis. Não é muito portátil e é bastante demorado. Eu tenho deixado ele procurar por mais de 24 horas os denominadores candidatos até agora, então não é realmente adequado para o TIO. Estou executando no LINQPad.
Outra observação sobre o armazenamento dos valores de hash incorporados no programa. Os hashes são classificados antes da incorporação na matriz. Estou usando um recurso stax chamado "matrizes inteiras compactadas", que é uma maneira de representar matrizes inteiras com eficiência. Essa representação é capaz de armazenar diferenças entre os elementos, se isso for mais eficiente, portanto, a pré-classificação dos valores economiza alguns bytes.
Aqui está a representação descompactada com alguns comentários mínimos.
fonte
Python 2, 862 bytes
Aqui está um script bash que monta este programa e demonstra sua execução.
Explicação
Essa é uma solução bastante simples: procurei a permutação mais compressível dos títulos, à medida que os espaços se juntam. Este programa simplesmente substitui
*
na entrada por.
e procura uma correspondência dessa expressão regular dentro da string.A cadeia de caracteres descompacta para:
fonte
JavaScript (ES6), 634 bytes
Esse envio deveria permanecer oculto até que uma resposta de menos de 500 bytes fosse publicada. O que foi feito agora .
Experimente online!(um caso de teste aleatório por episódio)
Quão?
Definimos chr , a lista de caracteres usados nos títulos dos episódios.
Definimos hash , uma string que contém os hashes de todos os títulos não ofuscados. Cada hash consiste em um número de 6 dígitos na base 36.
Definimos H () , uma função hash simples.
Isso fornece o log 2 (36 6 ) ~ = 31 bits de entropia. Arredondando para 4 bytes e adicionando o tamanho de chr , o tamanho total dos dados da carga útil é: 4 * 69 + 53 = 329 bytes .
A função principal agora é lida como:
(Isso foi exaustivamente testado em relação a todas as entradas possíveis .)
fonte
Wolfram Language
13831226 bytesEditDistance encontra a distância de Levenshtein entre as strings.
fonte
Geléia , 752 bytes
Experimente online!
Utilizado este para comprimir a lista.
Isso pressupõe que não há filme com exatamente 2 caracteres diferentes de outro filme, o que é comprovado aqui (saída
1
).fonte
Ruby ,
11851165 bytesExperimente online!
Um lambda aceitando uma sequência e retornando uma sequência. Usa alguma expansão de cadeia homebrewed. Provavelmente, há espaço para jogar golfe na forma como o título é escolhido na lista expandida e na forma exata como a lista é compactada.
-20 bytes: reorganize a ordem da lista (manualmente) para aumentar a repetição de substring
Ungolfed:
Aqui está um trecho do algoritmo de seleção de substituição ganancioso que eu usei para gerar esse código. Omiti alguns detalhes para que não funcione como está, mas deve dar a essência.
fonte
Java 10,
142614051381131513131298 bytes-66 bytes graças a @ OlivierGrégoire , codificando a String.
Explicação:
Experimente online.
Aqui está o código para o codificador.
fonte
java.nio.Files.readAllBytes(java.nio.Paths.get("a"))
. Dessa forma, não é necessário o bas64.796
e1397
determinados?d.deflate(b)
ei.inflate(b)
comSystem.out.println(d.deflate(b))
eSystem.out.println(i.inflate(b))
. Se você jogar o texto, atualize os tamanhos da matriz.var bytes = new byte[9999]
:, e imprima o número. Segunda execução: substitua pelo9999
pelo valor gerado e remova oSystem.out.println()
. Se você não fizer isso, sua String provavelmente terá um tamanho errado e a saída será confusa, provavelmente foi o que aconteceu com o golfe 1290. A API deve funcionar com buffers, mas, no nosso caso, queremos jogar golfe, portanto, precisamos pré-calcular esses valores. Caso contrário, perdemos bytes.Python 2 , 621 bytes
Experimente online!
Nota: Dang! Só vi que isso é essencialmente o mesmo que a solução Arnauds ...
Ainda não totalmente jogado ...
A idéia básica aqui: crie uma lista de hashes dos títulos, módulo 36 ^ 6 (isso requer 6 bytes por título; mais algumas despesas gerais).
Agora, dado um título com dois caracteres ausentes, a força bruta substitui as duas letras possíveis e verifique se o hash da string resultante está na lista.
Ao pré-apropriar 'B' para os títulos e usar a
hash
função Python , obtemos uma lista que nunca possui colisões nessa tarefa; portanto, sempre haverá uma e apenas uma resposta possível.fonte