Déchiffrer les grenouilles névrotiques
Maintenant que Puzzling.SE a finalement déchiffré mon chiffre obsédé par les amphibiens , écrivons un programme ou une fonction pour le déchiffrer!
(Si vous voulez regarder le puzzle avant de l'avoir gâté pour vous, cliquez sur le lien ci-dessus maintenant.)
Comment fonctionne le chiffrement
Dans Neurotic grenouilles O ught Pour Rel un x dans M ud Bains ( « Neurotic grenouilles » pour faire court), chaque lettre est cryptée comme un ou deux mots:
- La longueur d'un mot non en italique représente une lettre.
neurotic
=> 8 lettres =>H
frogs
=> 5 lettres =>E
perpendicular
=> 13 lettres =M
- Un mot qui contient de l'italique modifie le mot suivant, en ajoutant 10 si le mot en italique était de longueur impaire ou 20 si le mot en italique était de même longueur. Tout ou partie du mot peut être en italique. Un mot en italique est toujours suivi d'un mot non en italique.
*o*ught to
=> impair, 2 => 12 =>L
lo*u*nging calms
=> pair, 5 => 25 =>Y
Chaque mot de texte en clair correspond à une phrase de texte chiffré et chaque phrase de texte en clair correspond à un paragraphe de texte chiffré.
Format d'entrée
Votre programme ou fonction doit entrer un message dans Neurotic Frogs, formaté dans Markdown. L'entrée consistera uniquement en ASCII imprimable et en sauts de ligne.
- Les mots sont des séquences de caractères qui correspondent à l'expression régulière
[A-Za-z0-9']
.- Les chiffres et les lettres comptent pour la longueur d'un mot.
QB64
représenteD
. - REMARQUE: les apostrophes ne comptent pas pour la longueur d'un mot.
Isn't
représenteD
, nonE
.
- Les chiffres et les lettres comptent pour la longueur d'un mot.
- Les lettres en italique sont entourées d'une paire d'astérisques (
*letters*
).- Une ou plusieurs lettres consécutives peuvent être en italique, jusqu'à un mot entier (
masseus*es*
,*all*
); plusieurs lettres non consécutives dans un mot peuvent également être en italique (g*e*n*e*rates
). - L'italique ne couvre jamais plusieurs mots, n'inclut jamais la ponctuation et n'inclut jamais les apostrophes.
- Les astérisques non appariés et plusieurs astérisques adjacents ne se produiront jamais.
- Une ou plusieurs lettres consécutives peuvent être en italique, jusqu'à un mot entier (
- Ponctuation est l' un des caractères suivants:
.,?!:;-()"
.- Les mots d'une phrase sont séparés par un ou plusieurs caractères de ponctuation et / ou un seul espace. Exemples:
*all* welcomed
,toad*s*, newts
,Ever*y*one--frogs
,cap... bliss
,they're (I
- Les phrases se terminent par un ou plusieurs caractères de ponctuation et sont séparées par un double espace:
Th*e* Montgomery A*m*phibian Salon! Come luxuriate today!
- Les paragraphes sont séparés par une seule nouvelle ligne. (La dernière phrase d'un paragraphe contient toujours un ou plusieurs caractères de ponctuation.)
- Les mots d'une phrase sont séparés par un ou plusieurs caractères de ponctuation et / ou un seul espace. Exemples:
Les autres caractères n'apparaîtront pas en entrée et n'ont pas besoin d'être traités.
Votre code peut, à votre discrétion, s'attendre à ce que l'entrée ait une seule nouvelle ligne de fin.
Format de sortie
Le résultat du décryptage de l'entrée sera une ou plusieurs phrases. Les lettres de texte en clair peuvent être n'importe quelle combinaison de majuscules et de minuscules. Les mots d'une phrase doivent être séparés par des espaces simples. Les phrases doivent se terminer par un point ( .
) et être séparées par un seul espace. Vous pouvez afficher un espace de fin après la dernière phrase. Votre sortie sera sur une seule ligne, mais vous pouvez sortir une nouvelle ligne de fin.
Détails divers
Votre code peut utiliser n'importe laquelle des méthodes d'entrée et de sortie standard. Il doit recevoir une entrée sous forme de chaîne multiligne, pas une liste ou une autre structure de données, et il doit sortir une chaîne.
Le code le plus court en octets gagne!
Cas de test
-->
Neurotic Frogs *O*ught To Rel*a*x In *M*ud Baths!
<--
HELLO.
-->
Business standards all*o*w only *adult* amphibians.
<--
HINT.
-->
Rejoice, *a*ll frogs an*d* toads also! Montgomery Sal*o*n opens up! Ha*pp*y throng fill*s* street ecstatically!
<--
GOOD JOB PPL.
-->
I like 3.1415926535897.
IM*O*, it's a *b*la*st*, yeah!
<--
ADAM. MAN.
-->
*I*, happily, *th*anks 2 u *e*ditin*g* specific wor*ding*--clarifying a *bit*--betterment :D!
<--
QUARTATA.
-->
Perpendicular l*ou*nging calms. *A* frog, a m*u*d cap... bliss! Wallowing g*e*n*e*rates happiness. Amphibian sp*a* isn't expensive--seventy d*o*llars--cheap! That'*s* not *a* large e*x*pens*e* from an*y* discerning fr*o*g's money, unlik*e* Super 8.
Ever*y*one--frogs, toad*s*, newts, *a*nd salamanders! G*e*t a wonderful shiat*s*u, or recei*v*e an other kind. Masseus*es* are her*e* today! Invite a fianc*e*e, supervisor, roommate, niece: *all* welcomed!
Y*o*u simply ne*v*er believed these p*o*ssibilitie*s*; they're (I *swear*) absolute truth! Th*e* Montgomery A*m*phibian Salon! Come luxuriate today!
<--
MY NAME IS INIGO MONTOYA. YOU KILLED MY FATHER. PREPARE TO DIE.
la source
Réponses:
Perl, 72 octets
En comptant le shebang comme un, l'entrée provient de stdin.
Exemple d'utilisation
la source
JavaScript (ES6),
172169157150 octets10 octets enregistrés grâce à @Neil
Peut probablement être encore amélioré. Sorties en minuscules.
la source
i=0
dans letoString
.x=>x.replace(/([\w*']+)[^\w\n*' ]* ?( ?)/g,(_,y,z)=>/\*/.test(y,l=y.replace(/'/g ,"").length)?(i=l%2||2,""):l+i*10+9).toString(36,i=0)+z,i=0).replace(/\n|$/g,". ")
.replace
et simplement utiliser a.match
sauvé encore 12 octets.Python 2,
238221218214207 207205 octetsUtilise beaucoup d'expressions régulières pour effectuer le traitement. Nous transformons le double espace en
~
et l'utilisons pour le traiter.~
et\n
sont manipulés spécialement.Le gain de caractère le plus important provient du prétraitement de l'entrée dans la
for
ligne; cela peut certainement être joué plus loin.Ideone it! (tous les cas de test)
7 octets enregistrés grâce à DLosc!
la source
Pip ,
6564 octetsLe score est de 62 octets de code + 2 pour les
-rs
drapeaux.Essayez-le en ligne!
Explication
Le
-r
drapeau lit toutes les lignes de stdin et en stocke une listeg
. L'-s
indicateur définit le format de sortie des listes à espace séparé.La façon la plus simple de lire ce code est de l'extérieur dans:
la source
Python 2.7,
390342341339335 octets:Prend entrée au format:
F('''Multi or Single-lined String''')
Peut être joué au golf beaucoup plus, ce que je ferai chaque fois que j'en aurai l'occasion.
Repl.it avec tous les cas de test!
Explication:
Utilise l'immense puissance des expressions régulières de Python intégrées pour déchiffrer l'entrée. Il s'agit du processus fondamental suivi par la fonction pour chaque entrée:
Tout d'abord, tous
--
sont remplacés par un seul espace et chaque apostrophe est supprimée. Ensuite, tous les mots contenant des composants en italique et le mot qui le précède sont tous deux mis en correspondance dans une chaîne et remplacés par un10 + len(second word)
nombre dea
s consécutifs si la longueur du premier mot estodd
, et20 + len(second word)
desa
s consécutifs sinon. Cela utilise l'expression régulière suivante:[^\w\s*]*\w*\*\w+\*.*?(?=\s) \w+
Par exemple, si nous avons la phrase
Perpendicular l*ou*nging calms.
,l*ou*nging calms
sera remplacé paraaaaaaaaaaaaaaaaaaaaaaaaa
, ou 25a
s, carl*ou*nging
a un nombre pair de caractères et encalms
a 520+5=25
..Maintenant, l'entrée nouvellement modifiée est divisée à chaque signe de ponctuation suivie d'une nouvelle ligne (
\n
) pour obtenir les paragraphes, puis chaque paragraphe est divisé à chaque ponctuation suivi de 2 espaces pour obtenir les phrases, et enfin, chaque phrase est divisée en mots le long toute ponctuation y compris un espace. Ensuite, pour chaque mot (y compris les séquences dea
s consécutifs ), nous ajoutons à une chaîneW
la lettre correspondant au point de code unicode64
(le point de code unicode du caractère précédentA
, qui est@
) pluslen(word)
. Nous ajoutons ensuite un espace unique àW
une fois que tous les mots d'une phrase ont été épuisés, et lorsque toutes les phrases d'un paragraphe sont épuisées, nous ajoutons un.
suivi d'un espace unique.Enfin, après que l'intégralité de l'entrée a été effectuée, la
W
sortie est transmise enstdout
tant que message déchiffré.la source
re
, utilisezsub
plutôt questr.replace
. Suggestion plus générale sur le golf: il est probablement plus efficace de traiter tout ce qui n'est pas un mot ou une*
ponctuation. Économise sur les grandes classes de personnages énormes.PHP, 196 octets
Si je pouvais supposer qu'il n'y a qu'une seule apostrophe au milieu d'un mot 194 octets
la source
%0A
tant que fonctionrawurlencode("\n")
. Je préfère dans ce cas un formulaire avec une zone de texte pour l'entrée et donc mon site html le fait automatiquement pour encoder la chaîne<?
. Une erreur appartient à$_GET[s]
cela fonctionne mais c'est correct$_GET["s"]
et il vaut mieux déclarer et initialiser la variable$p=0;
avant la boucle. Maintenant, ma question est la suivante: puis-je supposer que dans un mot il n'y a qu'une seule apostrophe au milieu du mot?<?php
travaillé.<?
en réalité. J'utilise la balise courte uniquement dans mon message ici. Maintenant, je sais qu'il peut résulter sur une page vierge.PHP,
231226228 octetspour un début
Enregistrer dans un fichier, rund
php <scriptpath> <text>
. Échappez aux sauts de ligne dans le texte pour le faire fonctionner en shell.la source
$argv[1]
, mais je ne sais pas comment cette approche fonctionnera lorsque les entrées contiennent des sauts de ligne. J'ai essayé"Neurotic Frogs *O*ught To Re*a*x In *M*ud Baths!"
comme argument de ligne de commande et j'ai obtenuIFHCHCFF.
une sortie (ainsi qu'unUndefined variable: d
avertissement).<?
, à l'enregistrer dans un fichier et à l'appeler avecphp <filename> <string>
. Je devrai peut-être ajouter 2 au nombre d'octets.<?
, vous pouvez également terminer avec?>.
, pour un gain net pour 1. FWIW, je reçoisIFHCMFF.
pour le premier cas de test (en utilisant PHP 5.5.21 64 bits, VC14). Utiliser$argn
avec-F
peut également être une option.php <filename> <string>
est possible quand<string>
peut contenir des nouvelles lignes.