La stéganographie cache un message donné à l'intérieur d'un support donné, produisant un paquet qui ne semble pas suspect. Pour ce défi, vous allez écrire un programme qui prend en entrée un message ASCII et un support ASCII, et retourner ou imprimer un package identique au support sauf que les caractères correspondant au message sont doublés, dans le même ordre qu'ils apparaissent dans le message.
Règles:
- Si le support contient déjà plusieurs séquences du même caractère et qu'elles ne sont pas utilisées pour coder un caractère du message, le programme les réduira à un seul caractère.
- Si le transporteur ne contient pas les caractères du message dans le bon ordre, le programme peut ne rien retourner, le transporteur lui-même ou une erreur.
- Vous pouvez supposer que le message et le support sont des chaînes ASCII non vides.
- Questions de capitalisation: A n'est pas équivalent à a.
- Lorsque plusieurs packages sont valides, votre programme peut générer tout ou partie d'entre eux.
- L'espace est un personnage comme tout autre personnage.
Cas de test:
Forfait porteur de messages "salut" "est-il arrivé?" "est-il arrivé?" OU "est-ce qu'il est arrivé?" "monsieur" "est-il arrivé?" "est-il arrivé?" "foo" "est-il arrivé?" "" OU "est-il arrivé?" OU une erreur. "Voiture" "Les chats sont cool." "CCaats arre col." "voiture" "Les chats sont cool." "" OU "Les chats sont cool." OU une erreur. "Canapé" "Canapé" "CCoouucchh" "oo" "oooooooooo" "oooo" "o o" "oooo oooa" "oo ooa"
C'est le golf de code, donc le moins d'octets gagne.
code-golf
string
steganography
jkpate
la source
la source
"oooo oa"
(avec 2 espaces) une sortie valide pour le dernier cas de test?Réponses:
Gelée , 28 octets
Un programme complet prenant
carrier
et enmessage
tant qu'arguments de ligne de commande qui imprime le résultat(pour un non-packable
message
imprime inchangécarrier
).Essayez-le en ligne! Ou consultez la suite de tests .
Comment?
la source
JavaScript (ES6), 71 octets
Prend l'entrée comme
(message)(carrier)
.Essayez-le en ligne!
Version alternative, 66 octets
Si nous pouvons prendre le message comme un tableau de caractères:
Essayez-le en ligne!
Edit : Merci à @tsh d'avoir remarqué que j'ai oublié de supprimer du code lors du passage des versions non récursives aux versions récursives.
la source
p=
car p est passé par un paramètre.Haskell,
124121107 107101979590 octetsDéclenche l'exception "Modèles non exhaustifs" si le transporteur ne contient pas le message.
Essayez-le en ligne!
Edit: -5 octets grâce à @Laikoni.
la source
m==c
: Essayez-le en ligne!Retina 0.8.2 , 67 octets
Essayez-le en ligne! Prend le transporteur sur la première ligne et le message sur la deuxième ligne. Explication:
Traite les exécutions de 1 ou plusieurs caractères identiques du support. S'il existe également une séquence de 1 ou plusieurs des mêmes caractères dans le message, ajoutez la plus courte des deux séquences à la sortie en double, sinon ajoutez un seul caractère de la porteuse à la sortie. Chaque série de caractères de sortie se termine par une nouvelle ligne pour la distinguer de l'entrée. Le
(?!¶)
à la fin empêche l'expression régulière de penser que le transporteur est le message une fois que le message est épuisé, comme il$
est normalement autorisé de correspondre à l'endroit où¶$
il correspondrait.Supprimez tout si le message n'était pas complètement codé.
Supprimez les retours à la ligne de la sortie.
la source
Nettoyer , 118 octets
Essayez-le en ligne!
Prend d'abord le transporteur, puis le message.
Erreurs avec
Run time error, rule '$;2' in module 'main' does not match
si le message ne rentre pas.la source
Rubis , 73 octets
Essayez-le en ligne!
Fonction récursive, prend les entrées sous forme de tableau de caractères.
Pour une fois, j'espérais utiliser la
squeeze
méthode intégrée de Ruby qui contracte des exécutions consécutives du même personnage à une seule instance. Mais malheureusement, non - les deux derniers cas de test ont tout si mal tourné, que j'ai dû recourir à une approche complètement différente, et cela s'est avéré être essentiellement un portage de la réponse d' Arnauld .la source
Powershell, 134 octets
Le script renvoie le
empty string
si le transporteur ne contient pas les caractères du message dans le bon ordre.Script de test moins golfé:
Production:
la source
C (gcc) , 69 + 12 = 81 octets
Compiler avec (12 octets)
Essayez-le en ligne!
la source