Acme Canine Decoder 2000 du professeur Schwartzman

31

introduction

Nous - en particulier les geeks parmi nous, qui ont tendance à être des fans - nous souvenons tous de ce vieux dessin animé de Far Side :

Hey!  Hey!  Hey!

De toute évidence, le professeur Schwartzman aurait pu peaufiner ses compétences en programmation juste un peu plus avant de mettre son invention à profit. Mais pouvez-vous le reproduire vous-même ... en utilisant le moins d'octets possible?

Spécifications d'entrée

Vous devez créer un script qui traduit les sons de chien en "Hey" correctement intonés. C'est du golf à code pur; le plus petit nombre d'octets gagne.

Votre entrée consistera en une combinaison des jetons suivants:

  • Bark, Baark, Baaark, Baaaark, ... (qui est, B*rk avec au moins une asubstitution , l'astérisque)
  • Woof, Wooof, Woooof, ... ( W*fd'au moins 2 o s remplaçant l'astérisque)
  • Grr, Grrr, Grrrr, ..., ( Gsuivie d'au moins 2 r s)
  • N'importe quel nombre de caractères .(point), !(point d'exclamation) et / ou ?(point d'interrogation) pouvant apparaître n'importe où dans l'entrée

Notez, encore une fois, que les jetons Woofbasés et Grrbasés nécessitent toujours au moins deux o s et rs respectivement; Wofet neGr sont pas des jetons valides.

Il n'y a pas de limite sur la durée d'un jeton (par exemple, combien de as répétés il peut y avoir dans un Barkjeton); cependant, votre décodeur n'a besoin de fonctionner correctement que pour les jetons d'entrée avec jusqu'à 10a s, os ou rs au total pour réussir ce défi.

Spécifications de sortie

Fidèle à la conception de Schwartzman, votre programme de décodeur canin doit le traiter en texte de sortie comme suit:

  • Bark, WoofEt Grrdevenir Hey;
  • Baark, WooofEt Grrrdevenir Heyy;
  • Baaark, WoooofEt Grrrrdevenir Heyyy; etc.
  • Pour tous les Barkjetons basés sur, le nombre de ys dans le Heyjeton basé sur la sortie doit être égal au nombre de as;
  • Pour tous les Woofjetons basés sur, le nombre de ys dans le Heyjeton basé sur la sortie doit être inférieur de un au nombre de os;
  • Pour tous les Grrjetons basés sur, le nombre de ys dans le Heyjeton basé sur la sortie doit être inférieur de un au nombre de rs;
  • Tous les signes de ponctuation ( ., !et ?) reste inchangé.

N'oubliez pas d'en supprimer un yde la sortie pour Woofs et Grrs uniquement! L'entrée Baaaaaaaark?, avec 8 as, deviendra Heyyyyyyyy?, avec un ensemble correspondant de 8 ys. Cependant, Woooooooof?devient seulement Heyyyyyyy?, avec 7 ys.

Encore une fois, si vous pouvez faire fonctionner votre programme pour des jetons d'entrée de taille illimitée, c'est parfait, mais aux fins de ce défi, votre programme ne sera vérifié que pour s'assurer qu'il fonctionne correctement pour les jetons d'entrée qui n'ont pas plus de 10 lettres répétées. .

Tous les jetons Bark-, Woof- et Grrbasés dans votre entrée sont supposés commencer par des majuscules. Par conséquent, il n'est pas nécessaire de gérer la transformation Bark grrren Hey heyyou quelque chose de similaire.

Exemples d'entrées et de sorties

    • Contribution: Bark. Bark! Bark!!
    • Sortie: Hey. Hey! Hey!!
    • Entrée: Baaaaaark?(six as)
    • Sortie: Heyyyyyy?(six ys)
    • Entrée: Grrrrrrrr...(huit rs)
    • Sortie: Heyyyyyyy...( sept y s)
    • Contribution: ?...!
    • Sortie: ?...!
    • Contribution: Wooof Woof? Grrrr. Baaaark Grr!
    • Sortie: Heyy Hey? Heyyy. Heyyyy Hey!
A. Mirabeau
la source
10
Bonjour et bienvenue sur le site! Pour information, il est de coutume sur ce site d'attendre un moment avant d'accepter la réponse la plus courte. Je vous encourage à ne pas accepter la réponse que vous avez acceptée et à attendre que l'activité sur cette question s'éteigne avant d'accepter la réponse la plus courte. Cela encouragera également plus de réponses.
DJMcMayhem
En relation.
Martin Ender
Merci pour les conseils concernant le processus d'acceptation. J'avais en fait l'intention de vérifier la liste des réponses toutes les quelques heures et, si je remarquais qu'une meilleure réponse était arrivée, je l'accepte. Désolé pour toute personne à qui j'ai pu nier sa réputation.
A. Mirabeau
5
@ A.Mirabeau C'est honorable et comment cela fonctionnerait idéalement, mais certaines personnes ne sont pas si attentives, donc la plupart des répondeurs peuvent supposer que le gagnant a déjà été choisi. Bien qu'il n'y ait rien de mal à choisir un gagnant immédiatement si vous prévoyez de le mettre à jour, vous obtiendrez probablement moins de réponses à cause de cela, ainsi que certaines plaintes, il est donc généralement préférable d'attendre au moins une semaine.
Martin Ender

Réponses:

16

Rétine , 24 18 17 16 octets

1 octet enregistré sur la base d'une idée dans la réponse de MT0.

\wf?k?
y
\byy
He

Essayez-le en ligne!

Explication

\wf?k?
y

Cela transforme simplement toutes les lettres en y, mais si elles sont suivies d'un fou knous remplaçons immédiatement cela aussi. En supprimant fet en k«normalisant» la longueur des mots, ils ont maintenant tous deux ys de plus que nécessaire.

\byy
He

Cela transforme les deux premiers yde chaque mot en He, terminant la transformation.

Martin Ender
la source
La réponse la plus efficace à ce jour, bravo. Je ne vais pas l'accepter pour l'instant, mais je peux vous dire que vous méritez CAT FUD.
A. Mirabeau
10

Perl, 51 41 39 octets

s/(G.|[BW]..)(\w+)/He."y"x length$2/ge

Usage

perl -pE 's/(G.|[BW]..)(\w+)/He."y"x length$2/ge'

Contribution

Bark. Bark! Bark!!
Baaaaaark?
Grrrrrrrr...
?...!
Wooof Woof? Grrrr. Baaaark Grr!

Sortie

Hey. Hey! Hey!!
Heyyyyyy?
Heyyyyyyy...
?...!
Heyy Hey? Heyyy. Heyyyy Hey!

Comment ça marche

Substitution de regexp simple utilisant l'impression automatique en -pajoutant 1 octet au nombre. /geexécute la substitution pour chaque modèle et exécute le remplacement en tant que code.


Une ancienne version utilisait une détection à trois voies, mais Martin Ender a remarqué que je n'étais pas assez agressif, ce qui m'a fait économiser 10 octets.

msh210 m'a informé que vous n'avez pas besoin de guillemets autour de la chaîne He, économisant deux octets.

tuyau
la source
2
Le meilleur jusqu'ici, félicitations.
A. Mirabeau
1
@ A.Mirabeau Merci, c'est tout un compliment vu que je viens de m'inscrire ici il y a quelques minutes!
pipe
Avoir trois résolutions est motivant étant donné que je viens de m'inscrire ici il y a quelques heures.
A. Mirabeau
1
Vous n'avez pas besoin des guillemets He.
msh210
@ msh210 Intéressant, je ne savais pas que vous pouviez les omettre ici!
pipe
5

Python, 106 octets

f=lambda s,a="B,He,Gr,He,Wo,He,a,y,r,y,o,y,f,,yk,".split(","):s if a==[]else f(s.replace(a[0],a[1]),a[2:])

Démo

https://repl.it/C6Rr

Chuck Morris
la source
Bien que ce ne soit pas la réponse acceptée, celle-ci mérite une mention honorable pour être la solution la plus efficace en octets qui ne modifie que les trois mots clés nécessaires en langage canin.
A. Mirabeau
4

JavaScript (ES6) - 57 55 52 51 octets

f=s=>s.replace(/\wk?f?/g,'y').replace(/\byy/g,'He')

Tester:

f=s=>s.replace(/\wk?f?/g,'y').replace(/\byy/g,'He');

[
  'Bark. Bark! Bark!!',
  'Baaaaaark?',
  'Grrrrrrrr...',
  '?...!',
  'Wooof Woof? Grrrr. Baaaark Grr!'
].forEach( s=>{console.log( f(s) );} );

Merci à @MartinEnder pour les octets 56 et 51 et l'inspiration pour certains des autres copeaux.

MT0
la source
4

Vimscript, 51 39 37 33 32 29 28 octets,

%s/\hk\?f\?/y/g|%s/\<yy/He/g

Crédits d'expression régulière pour le rasage de 9 octets supplémentaires: MT0, Martin Ender, msh210

asciicast Démo

Explication:

                               1. Normalize words to same length & replace letters with ys 

%s                             Regex search and replace 
  /                            Regex search begin
   \hk\?f\?                    Find any letter (\h) optionally followed by k or f
           /                   Regex search end and replace start
            y                  Replace with y
             /                 Replace end
              g                Replace globally

               |               New command

                               2. Overwrite first two y of every word with He

                %s             Regex search and replace
                  /            Regex search begin
                   \<yy        Find yy at a word's beginning
                        /      Regex search end and replace start
                         He    replace with He
                           /   Replace end
                            g  Replace globally
starcorder
la source
1
Je ne connais pas Vimscript, mais pouvez-vous utiliser à la \<yyplace de \<\hy?
msh210
@ msh210 oui c'est possible et j'ai mis à jour la solution, merci
starcorder
2

Perl 5, 25 octets

Une copie Perl de la réponse Retina de Martin Ender . 24 octets, plus 1 pour -peau lieu de -e.

s;\wf?k?;y;g;s;\byy;He;g
msh210
la source
2

Javascript, 72 66 64 octets

f=
t=>t.replace(/k|f/g,'').replace(/\w/g,'y').replace(/\byy/g,'He')

Edit: séparé f=et fonction + nombre d'octets réduit

starcorder
la source
1
Vous n'avez pas besoin du f=(par défaut de PPCG), donc 64 octets fonctionnent.
Rɪᴋᴇʀ
@ EᴀsᴛᴇʀʟʏIʀᴋ Super, je ne le savais pas
starcorder
1

Pyke, 35 octets

.cFDlR\G.^+3-\y*"He"R+)Rdc~lL-],AsJ

Essayez-le ici!

Génère Heys, génère de la ponctuation, zippe ensemble, joint

Bleu
la source
1

Python 3, 140 135 134 octets

from re import*
f=lambda s:''.join('He'+'y'*len(x)+y for x,y in[(a+b+c,d)for a,b,c,d in findall('(?:Wo(o+)f|Gr(r+)|B(a+)rk)(\W+)',s)])

Utilisation de regex pour rechercher les occurrences de caractères remplaçables.

Edit: Golfed 1 octet d'espaces blancs et 4 octets pour obtenir les valeurs du résultat findall.

Edit2: Golfé 1 octet (le "a" de Bark n'a pas été compté correctement)

Gábor Fekete
la source