A esteganografia oculta uma mensagem dentro de uma transportadora, produzindo um pacote que não parece suspeito. Para esse desafio, você escreverá um programa que recebe uma mensagem ASCII e uma transportadora ASCII como entrada e retornará ou imprimirá um pacote idêntico à transportadora, exceto que os caracteres correspondentes à mensagem serão duplicados, na mesma ordem em que aparecem em a mensagem.
Regras:
- Se a transportadora já contiver seqüências do mesmo caractere mais de uma vez e não forem usadas para codificar um caractere da mensagem, o programa as reduzirá para um único caractere.
- Se a operadora não contiver os caracteres da mensagem na ordem correta, o programa poderá retornar nada, a própria operadora ou um erro.
- Você pode supor que a mensagem e a operadora sejam sequências ASCII não vazias.
- A capitalização é importante: A não é equivalente a.
- Quando mais de um pacote é válido, seu programa pode gerar um ou todos eles.
- O espaço é um personagem como qualquer outro personagem.
Casos de teste:
Pacote de suporte de mensagem "oi" "chegou?" "ele surgiu?" OU "ele chegou?" "senhor" "chegou?" "hass iit chegou?" "foo" "chegou?" "" OU "chegou?" OU um erro. "Carro" "Gatos são legais." "CCaats arre col." "car" "Gatos são legais." "" OU "Gatos são legais." OU um erro. "Sofá" "Sofá" "CCoouucchh" "oo" "oooooooooo" "oooo" "o o" "oooo oooa" "oo ooa"
Isso é código de golfe, e o menor número de bytes vence.
code-golf
string
steganography
jkpate
fonte
fonte
"oooo oa"
(com 2 lugares) uma saída válida para o último caso de teste?Respostas:
Gelatina , 28 bytes
Um programa completo que recebe
carrier
emessage
como argumentos de linha de comando que imprime o resultado(para um não empacotável
message
imprime o inalteradocarrier
).Experimente online! Ou veja a suíte de testes .
Quão?
fonte
JavaScript (ES6), 71 bytes
Toma entrada como
(message)(carrier)
.Experimente online!
Versão alternativa, 66 bytes
Se pudermos considerar a mensagem como uma matriz de caracteres:
Experimente online!
Edit : Obrigado ao @tsh por perceber que eu esqueci de remover algum código ao mudar de versões não recursivas para recursivas.
fonte
p=
uma vez que p é passado por um parâmetro.Haskell,
124121107101979590 bytesGera a exceção "Padrões não exaustivos" se a transportadora não contiver a mensagem.
Experimente online!
Edit: -5 bytes graças a @Laikoni.
fonte
m==c
: Experimente online!Retina 0.8.2 , 67 bytes
Experimente online! Leva a operadora na primeira linha e a mensagem na segunda linha. Explicação:
Processar execuções de 1 ou mais caracteres idênticos da transportadora. Se também houver uma execução de 1 ou mais dos mesmos caracteres na mensagem, acrescente a menor das duas execuções à saída em duplicado, caso contrário, adicione um único caractere da portadora à saída. Cada execução de caracteres de saída é finalizada com uma nova linha para distingui-la da entrada. O
(?!¶)
final impede que o regex pense que a operadora é a mensagem assim que a mensagem estiver esgotada, pois normalmente$
é permitido combinar onde¶$
corresponderia.Exclua tudo se a mensagem não estiver completamente codificada.
Remova as novas linhas da saída.
fonte
Limpo , 118 bytes
Experimente online!
Leva o transportador primeiro, depois a mensagem.
Erros com
Run time error, rule '$;2' in module 'main' does not match
se a mensagem não couber.fonte
Ruby , 73 bytes
Experimente online!
Função recursiva, recebe entradas como matriz de caracteres.
Pela primeira vez, eu esperava usar o
squeeze
método interno do Ruby, que contrai execuções consecutivas do mesmo caractere para uma única instância. Mas, infelizmente, não - os dois últimos casos de teste estragaram tudo tão mal, que tive que recorrer a uma abordagem completamente diferente, e isso acabou sendo basicamente uma porta da resposta de Arnauld .fonte
Powershell, 134 bytes
O script retorna o
empty string
se a operadora não contiver os caracteres da mensagem na ordem correta.Script de teste com menos golfe:
Resultado:
fonte
C (gcc) , 69 + 12 = 81 bytes
Compilar com (12 bytes)
Experimente online!
fonte