Le défi
Eh bien, je pense que c'est assez clair, n'est-ce pas? Vous devez créer une fonction ou un programme qui prend une chaîne en tant qu'argument et génère le correspondant correspondant, Yoda.
C'est le code-golf , donc le moins d'octets gagne.
L'entrée
L'entrée peut être n'importe quelle chaîne sans saut de ligne. Vous pouvez traduire une chaîne si elle est composée comme ceci:
Sujet + Verbe + Quelque chose d'autre.
Où Subject est un pronom personnel (moi, vous, il, elle, elle, nous, eux). Vous n'êtes pas obligé de reconnaître que le deuxième mot est un verbe.
Si le premier mot n'est pas un pronom, l'entrée est valide mais la sortie sera Too difficult, this sentence is.
You have to win this code challenge -> Translatable
Luke has to win this code challenge -> Untranslatable
La saisie peut se terminer par une lettre, a. ou un!, pas avec un?.
De plus, les chaînes peuvent contenir des caractères non-ASCII, des parenthèses, des virgules, des deux-points, etc.
Le résultat
Dans le cas d'une phrase traduisible, le résultat est la même phrase, avec le sujet et le verbe à la fin de la phrase.
You have to win this code challenge -> To win this code challenge, you have.
Les virgules, les points et les minuscules du pronom sont obligatoires. (Sauf, bien sûr, si le pronom est I).
Comme indiqué précédemment, s'il est intraduisible, vous devez générer la chaîne Too difficult, this sentence is.
Exemples
You have to win this code challenge -> To win this code challenge, you have.
He won this code challenge -> This code challenge, he won. (I know this is not yoda-speaking, but I don’t want to overcomplicate this challenge)
I ate an ice cream earlier! -> An ice cream earlier, I ate.
I liked the Star Wars original trilogy more than the prequel’s one. -> The Star Wars original trilogy more than the prequel’s one, I liked.
I find your lack of faith disturbing -> Your lack of faith disturbing, I find.
I think we are done with the examples -> We are done with examples, I think.
He is your son, Vader -> Your son, Vader, he is.
I think they’ll add new features -> They’ll add new features, I think.
I made a fantastic code challenge (I hope) -> A fantastic code challenge (I hope), I made.
I love constants like π -> Constants like π, I love.
I’ll be the next President, I swear! -> Too difficult, this sentence is.
This challenge is great! -> Too difficult, this sentence is.
Is this challenge great? -> Too difficult, this sentence is.
Luke is not ready for this task -> Too difficult, this sentence is.
Somebody loves constants like π -> Too difficult, this sentence is.
[Empty string] -> Too difficult, this sentence is.
la source
You have to win this code challenge
devrait êtreThis code challenge, you have to win
.!
? Est-ce garanti que cela ne se produira pas ou devrions-nous nous en occuper et imprimer la même chose que lorsqu'il n'y a pas de pronom principal. L'entrée peut-elle contenir des sauts de ligne? Apostrophes? Colons / parenthèses / backticks? Caractères non-ASCII? Vous dites que "l'entrée peut être n'importe quelle chaîne", mais vos scénarios de test ne couvrent que des types de chaînes très spécifiques.Réponses:
Retina,
162137145134131129La ponctuation multiple est maintenant gérée correctement. Cas de test:
You will not win this challenge...! -> Not win this challenge..., you will.
Essayez-le en ligne!
La description:
S'il y a ponctuation à la fin, supprimez-le.
Transforme le pronom en minuscule, sauf que c'est I.
Filtrer toute ligne qui ne correspond pas
<Pronoun><space><word><space><word>...
Divisé en
pronoun + verb
,remainder
. Puis réorganiser.Transforme le premier caractère en majuscule.
Si le résultat est vide, le filtre ci-dessus n'est pas passé. Imprimer un message d'erreur.
la source
[^ ]
peut probablement être remplacé par\S
partout, et dans la première expression rationnelle[^ ]+
peut être remplacé par.+
. Dans les classes de caractères, vous n'avez pas besoin de vous échapper,.
alors tout[.!]
fonctionne bien. De plus, comme vous n'échangez pas l'ordre de$1
et$2
dans la troisième étape, vous pouvez les capturer dans un seul groupe et économiser 5 octets.([^I]|It)
peut être raccourci à^\w\w
I|It
peut devenirI?
, si Retina le soutientES6, 212
Cela peut probablement être un peu plus compliqué:
JSFiddle (nécessite un navigateur à jour tel que Chrome) ou l'exécuter via node.js
Ungolfed:
la source
I think they’ll add new features
-> renvoieThey, I think.
sur Google Chrome 47.0.2526.106 m. En outre, il n'aime pasI love constants like π
. Pour ajouter à cela,I made a fantastic code challenge (I hope)
retourneA fantastic code challenge , I made.
au lieu deA fantastic code challenge (I hope), I made.
^
au début de votre regex sinon une phrase avec n'importe quel texte avant le pronom sera toujours considérée comme valide.JavaScript (ES6), 164 octets
Explication
C'est presque douloureux combien d'octets en majuscule la première lettre d'une chaîne prend en JavaScript ...
Tester
Test n'utilise pas d'attribution de déstructuration pour le rendre plus compatible avec tous les navigateurs.
Afficher l'extrait de code
la source
^(((It?)|You|[HW]e|[ST]hey) \\S+) (.*?)[.!]?$
)? P [4] [0] .toUpperCase () + p [4] .slice (1) +, ${p[3]?p[1]:p[1].toLowerCase()}.
: "Trop difficile, cette phrase est."It
rester majuscule et correspondraitShey
au lieu deShe
.Python, 261 octets
Il s'avère que Python ne s'inquiète pas de choses comme
b[-1]in".!"
Next, je vais jouer plus souvent avec l'objet match, si personne ne me bat dessus :)la source
b=b[:-1]
pièce.b=b[:-1]
au bout de la ligne avec leif
. vous pouvez supprimer l'espace après le retour sur la dernière ligne. cela rompra la compatibilité avec python3 en remplaçant 2 espaces par un onglet et 3 par un onglet et un espacePython,
218217204 octetsJe ne sais pas si cela peut encore être joué.
Ungolfed:
la source
s.split(' ')
às.split()
et'I|We|You|He|She|It|They'.split('|')
à'I We You He She It They'.split()
, remplacer leif...else
avec la même liste booléenne utilisée ailleurs, le changementt[0]in
àt[0]in
, enlever le spawce autour du retourGNU sed, 129 octets
J'inclus +1 octet pour le
-r
drapeau.Explication
Si nous correspondons à un leader,
I
nous sautons au label:Si nous correspondons à l'un des autres pronoms, nous le minimisons, puis passons à l'étiquette:
Sinon, nous imprimons le message d'échec et passons à la ligne de saisie suivante:
Si nous sautons à l'étiquette, nous supprimons toute ponctuation finale:
et permutez les deux premiers mots avec le reste de la phrase, en capitalisant le nouveau premier mot et en ajoutant la ponctuation requise en procédant ainsi:
la source
You are
passent la première et la deuxième ligne mais ne correspondent pas sur la dernière. Le résultat est donc à layou are
place du message d'erreur. Ajouter un chèque comme...|They) \S+ \S/\L&/
pour les deux premières lignes.