Fonctionnement du pronom

24

Le défi

Écrivez une fonction ou un programme qui prend une chaîne composée d'un ou plusieurs pronoms personnels subjectifs , séparés par des signes + , comme argument. La sortie doit être un seul pronom, c'est-à-dire le résultat de la relation définie dans le paragraphe suivant.

Bien sûr, n'hésitez pas à éditer comme vous le souhaitez pour corriger les erreurs grammaticales qui sont sûrement présentes;)

C'est un défi de code-golf, donc le code le plus court l'emporte.

La relation

Le but de cette tâche est de traduire en «math-parlent» quelque chose que nous utilisons quotidiennement. Comment pensons-nous à "vous et moi"? Eh bien, "nous", n'est-ce pas? Donc, si l'entrée est You+Ila sortie doit être la chaîne We. Avec plus de deux pronoms, il devrait ressembler à: You+He+They->You

La relation est définie comme ce tableau:

      I  You    He   We   You   They
I     I  We     We   We   We    We
You      You    You  We   You   You
He              He   We   You   They
We                   We   We    We
You                       You   You
They                            They

Le problème du «vous»

Eh bien, comme vous pouvez le voir, je ne suis pas un anglophone natif. Dans ma langue (l'italien), il y a une différence entre le pluriel you ( voi , en italien) et le singulier you ( tu ). Quand je pensais à ce défi, je ne pensais pas en anglais, donc il y a le problème qu'il est impossible de reconnaître si j'utilise une forme plurielle ou singulière. Heureusement (ou évidemment?), L'entrée / sortie ne change pas sous les deux formes, vous pouvez donc en utiliser une et vous couvrirez les deux cas!

À propos de l'entrée

L'entrée sera toujours sous la forme "Pronom + Pronom + Pronom" ... Les pronoms auront la première lettre en majuscule et le reste en minuscule. Les avantages ne seront pas entourés d'espaces, uniquement de pronoms. Une entrée vide est possible et le résultat doit être une sortie vide.

Prime

Un petit bonus de 15% si le programme va gérer deux nouveaux pronoms: Elle et Elle . Ils sont identiques à Lui, évidemment. N'oubliez pas que cette relation est réflexive, alors Elle -> Elle et Elle -> Elle. Par conséquent, toute combinaison qui ne comprend que She, He ou It doit les afficher.

Exemples

You+I          -> We
You+He+They    -> You
I+You+He+They  -> We
They           -> They
They+You       -> You
You+You+I+You  -> We

For Bonus
She            -> She
She+He         -> They
I+It+He        -> We
It+You         -> You
Simone Chelo
la source
@Timwi, si vous parlez des exemples que vous avez raison, j'en ajouterai quelques-uns. Quoi qu'il en soit, cette relation "plus" est réflexive, donc He + He est He, I + I is I ....
Simone Chelo
5
J'obtiens " I+I=I", car il ne peut y en avoir qu'un " I" à partir d'un haut-parleur donné. Mais ne pouvait pas " He+He=They"? Généralement, si vous dites " He" deux fois dans cette construction, vous faites référence à deux sujets masculins différents , pas deux fois le même.
Darrel Hoffman
De nombreux dialectes anglais ont des équivalents de voi . Dans le mien, c'est tout , et utilisé dans le registre officiel. Un autre commun est le vôtre , bien que je ne pense pas que l'on s'habitue vraiment au discours formel. Traditionnellement, vous avez aussi vous , bien connu de beaucoup , car il est courant dans certaines traductions bibliques. Vous devez ajouter dans l' un de ceux - ci ou jeter en toi aussi bien pour vraiment secouer les choses.
user0721090601

Réponses:

9

Rétine, 62 61 56 53 52 octets

(.+)\+(?=\1)

.*(W|.I|I.).*
We
.*Y.*
You
.{4,}
They

Plus de golf et des explications viennent plus tard.

Les 4 étapes de substitution procèdent comme suit:

  • quoi que ce soit plusieurs fois est lui-même
  • s'il y a du We ou du I +, le résultat est We
  • pour tout ce qui vous contient, le résultat est vous
  • si nous avons encore plusieurs parties ou une semelle Ils c'est Ils comme seulement Lui et Ils peuvent être laissés

Essayez-le en ligne ici.

3 octets économisés grâce à Martin Büttner.

randomra
la source
À l'exception de la dernière étape, vous pouvez utiliser à la .place de \+, car c'est le seul caractère autorisé devant une majuscule ou après I.
Martin Ender
6

JavaScript (ES6), 130 octets

s=>(a=",I,You,He,We,They".split`,`,m="012345014444042242042345044444042545",r=0,s.split`+`.map(p=>r=m[+m[a.indexOf(p)]+r*6]),a[r])

Explication

s=>(

  // a = array of each pronoun (including an empty string at index 0)
  a=",I,You,He,We,They".split`,`,

  // m = 6 x 6 map of pronoun indices for each combination of pronouns
  m="012345014444042242042345044444042545",

  r=0,                        // r = index of result pronoun
  s.split`+`.map(p=>          // for each pronoun in the input string
    r=m[+m[a.indexOf(p)]+r*6] // combine each pronoun with the previous one
  ),
  a[r]                        // return the resulting pronoun
)

Tester

user81655
la source
Wow, j'aime cette approche! Je pense que j'ai fait un très mauvais bonus, car pour l'atteindre ici, il faudrait ajouter 7 octets dans le tableau (", She, It") et 28 dans la matrice, pour atteindre 165-15% = 140 ...
Simone Chelo
2

Perl 5, 67 octets

79 octets vraiment, mais il y a un bonus de 15%.

$a{$_}=""for split/[+\s]/,<>;@_=%a;say@_<3?@_:I~~@_||We~~@_?We:You~~@_?You:They
msh210
la source
2

Python 159153 octets

EDIT : Merci @ Pietu1998

Il s'agit d'une traduction directe de la réponse Javascript ES6:

a=",I,You,He,We,They".split(',')
m="012345014444042242042345044444042545"
r=0
for p in raw_input().split('+'):r=int(m[int(m[a.index(p)])+r*6])
print a[r]

Essayez-le ici

TanMath
la source
sn'a pas besoin d'être une variable, et vous pouvez supprimer la ligne et l'espace supplémentaires entre les lignes foret r=. En outre, vous voudrez peut-être vérifier si cela peut être plus court en tant que fonction.
PurkkaKoodari
1

Ruby, 150 136 131 119 111 octets

ARGV.each{|a|puts %w[We You I He They][a.bytes.inject(0){|m,c|m|({87=>15,73=>7,89=>11,84=>9,72=>8}[c]||0)}%5]}

Bonus: gère plusieurs expressions sur la même ligne de commande.

PellMell
la source