Pronomenoperation


24

Die Herausforderung

Schreiben Sie eine Funktion oder ein Programm, das als Argument eine Zeichenfolge verwendet, die aus einem oder mehreren subjektiven Personalpronomen besteht , die durch + Zeichen getrennt sind . Die Ausgabe muss ein einzelnes Pronomen sein, dh das Ergebnis der im nächsten Absatz definierten Beziehung.

Natürlich können Sie diese bearbeiten, um die sicher vorhandenen grammatikalischen Fehler zu korrigieren.

Dies ist eine Code-Golf-Herausforderung, also gewinnt der kürzeste Code.

Die Beziehung

Das Ziel dieser Aufgabe ist es, etwas, das wir täglich benutzen, in "Mathe-Sprechen" zu übersetzen. Wie denken wir über "Sie und ich"? Nun, "Wir", nicht wahr? Wenn es sich bei der Eingabe um You+Idie Ausgabe handelt, sollte dies die Zeichenfolge sein We. Mit mehr als zwei Pronomen sollte es so aussehen: You+He+They->You

Die Relation ist wie folgt definiert:

      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

Das "Du" -Problem

Wie Sie sehen, bin ich keine englische Muttersprachlerin. In meiner Sprache (Italienisch) gibt es einen Unterschied zwischen dem Plural du ( voi , italienisch) und dem Singular du ( tu ). Als ich an diese Herausforderung dachte, dachte ich nicht auf Englisch, daher gibt es das Problem, dass ich nicht erkennen kann, ob ich Plural oder Singular verwende. Glücklicherweise (oder offensichtlich?) Ändert sich die Eingabe / Ausgabe nicht in beiden Formen, so dass Sie eine von ihnen verwenden können und beide Fälle abdecken werden!

Über die Eingabe

Die Eingabe erfolgt immer in der Form "Pronomen + Pronomen + Pronomen" ... Die Pronomen haben den ersten Buchstaben in Großbuchstaben und den Rest in Kleinbuchstaben. Pluspunkte werden nicht von Leerzeichen, sondern nur von Pronomen umgeben. Leere Eingaben sind möglich und das Ergebnis muss eine leere Ausgabe sein.

Bonus

Ein kleiner Bonus von 15%, wenn das Programm zwei neue Pronomen verwaltet: She and It . Sie sind offensichtlich die gleichen wie Er. Denken Sie daran, dass diese Beziehung reflexiv ist, also Sie -> Sie und Es -> Es. Daher sollte jede Kombination, die nur She, He oder It enthält, They ausgeben.

Beispiele

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, wenn du über die Beispiele sprichst, die du recht hast, füge ich ein paar hinzu. Wie auch immer, diese "Plus" -Relation ist reflexiv, also er + er ist er, ich + ich bin ich ....
Simone Chelo

5
Ich bekomme " I+I=I", da es Ivon einem Sprecher nur einen geben kann . Konnte aber nicht " He+He=They"? Im Allgemeinen, wenn Sie sagen "He in dieser Konstruktion zweimal " , beziehen Sie sich im auf zwei verschiedene männliche Probanden, nicht zweimal auf dasselbe.
Darrel Hoffman

Viele Dialekte des Englischen haben Entsprechungen von voi . In meinem ist es Fall y'all und wird im offiziellen Register verwendet. Eine andere ist üblich , obwohl ich nicht glaube, dass man sich wirklich an formelle Reden gewöhnt . Traditionell Sie haben auch sie , auch viele bekannt , weil es häufig in bestimmten biblischen Übersetzungen. Sie sollten in einem von diesen oder werfen hinzufügen du wirklich schütteln Dinge auch auf.
user0721090601

Antworten:


9

Retina, 62 61 56 53 52 Bytes

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

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

Weitere Golf und Erklärung kommt später.

Die 4 Substitutionsschritte führen Folgendes aus:

  • alles mehrfach ist sich
  • Wenn es irgendein Wir oder Ich + irgendetwas gibt, ist das Ergebnis Wir
  • für alles andere, das Sie enthält, ist das Ergebnis Sie
  • Wenn wir noch mehrere Teile oder eine Sohle haben, dann sind es sie, da nur Er und They übrig bleiben können

Probieren Sie es hier online aus.

3 Bytes gespart dank Martin Büttner.


Mit Ausnahme der letzten Stufe können Sie .anstelle von verwenden \+, da dies das einzige Zeichen ist, das vor oder nach einem Großbuchstaben zulässig ist 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])

Erläuterung

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
)

Prüfung


Wow, ich mag diesen Ansatz! Ich denke , dass ich eine sehr schlechte Bonus, weil machte es erreichen hier würden Sie 7 Byte in dem Array hinzufügen müssen ( „sie, es“) und 28 in der Matrix und erreichte 165 -15% = 140 ...
Simone Chelo

2

Perl 5, 67 Bytes

Eigentlich 79 Bytes, aber es gibt einen 15% Bonus.

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

2

Python 159 153 Bytes

BEARBEITEN : Danke @ Pietu1998

Dies ist eine direkte Übersetzung der Javascript ES6 Antwort:

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]

Probieren Sie es hier aus


sEs muss keine Variable sein, und Sie können die zusätzlichen Zeilen und Leerzeichen zwischen forund entfernenr= . Vielleicht möchten Sie auch prüfen, ob dies als Funktion kürzer sein könnte.
PurkkaKoodari

1

Ruby, 150 136 131 119 111 Bytes

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-Funktion: Behandelt mehrere Ausdrücke in derselben Befehlszeile.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.