Operazione pronome


24

La sfida

Scrivi una funzione o un programma che accetta una stringa composta da uno o più pronomi personali soggettivi , separati da + segni, come argomento. L'output deve essere un pronome singolo, ovvero il risultato della relazione definita nel paragrafo successivo.

Certo, sentiti libero di modificare come desideri correggere quegli errori grammaticali che sono sicuramente presenti;)

Questa è una sfida di code-golf, quindi vince il codice più corto.

La relazione

L'obiettivo di questo compito è tradurre in "matematica" qualcosa che usiamo quotidianamente. Come pensiamo a "io e te"? Bene, "noi", no? Quindi, se l'input è You+Il'output dovrebbe essere la stringa We. Con più di due pronomi, dovrebbe apparire come: You+He+They->You

La relazione è definita come questa tabella:

      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

Il problema "tu"

Bene, come puoi vedere non sono un madrelingua inglese. Nella mia lingua (italiano) c'è una differenza tra il plurale tu ( voi , in italiano) e il singolare voi ( tu ). Quando ho pensato a questa sfida non ho pensato in inglese, quindi c'è il problema che è impossibile riconoscere se sto usando una forma plurale o singolare. Fortunatamente (o ovviamente?), L'input / output non cambia in entrambe le forme, quindi puoi usarne uno e coprirai entrambi i casi!

Informazioni sull'input

L'input sarà sempre nella forma "pronoun + pronoun + pronoun" ... I pronomi avranno la prima lettera in maiuscolo e il resto in minuscolo. I plus non saranno circondati da spazi, ma solo da pronomi. È possibile l'input vuoto e il risultato deve essere output vuoto.

indennità

Un piccolo bonus del 15% se il programma gestirà due nuovi pronomi: She and It . Sono uguali a Lui, ovviamente. Ricorda che questa relazione è riflessiva, quindi Lei -> Lei e It -> It. Pertanto, qualsiasi combinazione che include solo Lei, Lui o Lui dovrebbe produrli.

Esempi

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

@Timwi, se stai parlando degli esempi che hai ragione, ne aggiungerò alcuni. Comunque, questa relazione "più" è riflessiva, quindi Lui + Lui è Lui, I + I sono io ....
Simone Chelo

5
Ottengo " I+I=I", poiché può esserci solo uno " I" da un determinato oratore. " He+He=They"? Generalmente se dici " He" due volte in questa costruzione, ti riferisci a due diversi soggetti maschili, non due volte lo stesso.
Darrel Hoffman,

Molti dialetti dell'inglese hanno equivalenti di voi . Nel mio, è tutto e usato nel registro formale. Un altro comune è yous , anche se non credo che uno si abitua nel discorso formale davvero. Tradizionalmente, avete anche voi , ben noti a molti perché è comune in alcune traduzioni bibliche. Dovresti aggiungere uno di questi o buttarti dentro anche tu per scuotere davvero le cose.
user0721090601

Risposte:


9

Retina, 62 61 56 53 52 byte

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

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

Ulteriore golf e spiegazione vengono dopo.

Le 4 fasi di sostituzione effettuano le seguenti operazioni:

  • qualcosa più volte è se stesso
  • se c'è qualche We o I + qualcosa il risultato è We
  • per qualsiasi altra cosa contenente te il risultato sei tu
  • se abbiamo ancora più parti o una suola Sono loro come solo lui e loro possono essere lasciati

Provalo online qui.

3 byte salvati grazie a Martin Büttner.


Ad eccezione dell'ultima fase, puoi usare .invece di \+, poiché è l'unico personaggio ammesso davanti a una lettera maiuscola o dopo I.
Martin Ender,

6

JavaScript (ES6), 130 byte

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])

Spiegazione

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
)

Test


Wow, mi piace questo approccio! Penso di aver fatto un bonus molto scarso, perché per raggiungerlo qui dovresti aggiungere 7 byte nell'array (", She, It") e 28 nella matrice, raggiungendo il 165-15% = 140 ...
Simone Chelo,

2

Perl 5, 67 byte

79 byte davvero, ma c'è un bonus del 15%.

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

2

Python 159 153 byte

EDIT : Grazie @ Pietu1998

Questa è una traduzione diretta della risposta 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]

Provalo qui


snon è necessario che sia una variabile e puoi rimuovere la linea aggiuntiva e lo spazio tra le linee fore r=. Inoltre, potresti voler verificare se questo potrebbe essere più breve come funzione.
PurkkaKoodari,

1

Rubino, 150 136 131 119 111 byte

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]}

Funzione bonus: gestisce più espressioni sulla stessa riga di comando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.