Die Herausforderung
Nun, ich denke es ist ziemlich klar, nicht wahr? Sie müssen eine Funktion oder ein Programm erstellen, das einen String als Argument verwendet und das entsprechende Yoda-Sprechen ausgibt.
Das ist Code-Golf , also gewinnt die geringste Anzahl von Bytes.
Die Eingabe
Die Eingabe kann eine beliebige Zeichenfolge ohne Zeilenvorschub sein. Sie können einen String folgendermaßen übersetzen:
Betreff + Verb + Etwas anderes.
Wo Subjekt ein Personalpronomen ist (ich, du, er, sie, es, wir, sie). Sie müssen nicht erkennen, dass das zweite Wort ein Verb ist.
Wenn das erste Wort kein Pronomen ist, ist die Eingabe gültig, die Ausgabe jedoch Too difficult, this sentence is.
You have to win this code challenge -> Translatable
Luke has to win this code challenge -> Untranslatable
Die Eingabe kann mit einem Buchstaben enden. oder a!, nicht mit a?
Darüber hinaus können Zeichenfolgen Nicht-ASCII-Zeichen, Klammern, Kommas, Doppelpunkte usw. enthalten.
Die Ausgabe
Im Falle eines übersetzbaren Satzes ist die Ausgabe derselbe Satz mit dem Betreff und dem Verb am Ende des Satzes.
You have to win this code challenge -> To win this code challenge, you have.
Komma, Punkt und Kleinschreibung auf dem Pronomen sind obligatorisch. (Außer natürlich, wenn das Pronomen I ist).
Wie bereits erwähnt, müssen Sie den String ausgeben, wenn er nicht übersetzbar ist Too difficult, this sentence is.
Beispiele
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.
quelle
You have to win this code challenge
sollte das seinThis code challenge, you have to win
.!
? Kommt das garantiert nicht vor oder sollten wir damit umgehen und das Gleiche drucken, als gäbe es kein Leitpronomen. Kann die Eingabe Zeilenumbrüche enthalten? Apostrophe? Doppelpunkte / Klammern / Backticks? Nicht-ASCII-Zeichen? Sie sagen, die Eingabe könnte eine beliebige Zeichenfolge sein, aber Ihre Testfälle decken nur sehr bestimmte Arten von Zeichenfolgen ab.Antworten:
Retina,
162137145134131129Mehrfachinterpunktion wird jetzt korrekt behandelt. Testfall:
You will not win this challenge...! -> Not win this challenge..., you will.
Probieren Sie es online!
Beschreibung:
Wenn es am Ende eine Interpunktion gibt, löschen Sie sie.
Transformiere das Pronomen in Kleinbuchstaben, außer es ist I.
Filtern Sie alle Zeilen heraus, die nicht übereinstimmen
<Pronoun><space><word><space><word>...
Geteilt in
pronoun + verb
,remainder
. Dann neu anordnen.Wandle das erste Zeichen in Großbuchstaben um.
Wenn das Ergebnis leer ist, hat es den Filter oben nicht bestanden. Drucken Sie eine Fehlermeldung.
quelle
[^ ]
kann wahrscheinlich mit\S
überall ersetzt werden, und in der ersten Regex[^ ]+
kann mit ersetzt werden.+
. In den Charakterklassen musst du nicht fliehen.
, das[.!]
funktioniert also einwandfrei. Da Sie die Reihenfolge von$1
und$2
in der dritten Stufe nicht vertauschen , können Sie sie auch in einer einzelnen Gruppe erfassen und 5 Bytes sparen.([^I]|It)
kann verkürzt werden auf^\w\w
I|It
kann werdenI?
, wenn Retina das unterstütztES6, 212
Das kann wohl etwas weiter runtergolfen:
JSFiddle (erfordert einen aktuellen Browser wie Chrome) oder führen Sie es über node.js aus
Ungolfed:
quelle
I think they’ll add new features
-> kehrtThey, I think.
auf Google Chrome 47.0.2526.106 m zurück. Auch mag es nichtI love constants like π
. So fügen Sie auf , dass,I made a fantastic code challenge (I hope)
kehrtA fantastic code challenge , I made.
stattA fantastic code challenge (I hope), I made.
^
am Anfang Ihres regulären Ausdrucks einen Satz einfügen, sonst wird ein beliebiger Text vor dem Pronomen als gültig analysiert.JavaScript (ES6), 164 Byte
Erläuterung
Es ist fast schmerzhaft, wie viele Bytes der erste Buchstabe eines Strings in JavaScript benötigt ...
Prüfung
Test verwendet keine destrukturierende Zuweisung, um die Kompatibilität mit anderen Browsern zu verbessern.
Code-Snippet anzeigen
quelle
^(((It?)|You|[HW]e|[ST]hey) \\S+) (.*?)[.!]?$
)? P [4] [0] .toUpperCase () + p [4] .slice (1) +, ${p[3]?p[1]:p[1].toLowerCase()}.
: "Dieser Satz ist zu schwierig."It
, dass die Großschreibung erhalten bleibt undShey
stattdessen auch passtShe
.Python, 261 Bytes
Es stellt sich heraus, dass Python Dinge wie
b[-1]in".!"
Next nichts ausmacht. Ich spiele mehr mit dem Match-Objekt, wenn mich niemand schlägt :)quelle
b=b[:-1]
Teil entfernen .b=b[:-1]
am Ende der Zeile mit demif
. Sie können das Leerzeichen nach der Rückkehr in der letzten Zeile entfernen. Dies wird die Python3-Kompatibilität aufheben, indem 2 Leerzeichen durch ein Tab und 3 durch ein Tab und ein Leerzeichen ersetzt werdenPython,
218217204 BytesIch bin mir nicht sicher, ob dies weiter nach unten golfen werden kann.
Ungolfed:
quelle
s.split(' ')
ums.split()
und'I|We|You|He|She|It|They'.split('|')
auf'I We You He She It They'.split()
das Ersetzenif...else
anderer Stelle mit der gleichen verwendet boolean Liste, ändernt[0]in
zut[0]in
, entfernen Sie die spawce um die RückkehrGNU sed, 129 Bytes
Ich gebe +1 Byte für das
-r
Flag ein.Erläuterung
Wenn wir mit einem Lead übereinstimmen,
I
springen wir zum Label:Wenn wir mit einem der anderen Pronomen übereinstimmen, schreiben wir es in Kleinbuchstaben und springen zum Label:
Andernfalls drucken wir die Fehlermeldung und gehen zur nächsten Eingabezeile über:
Wenn wir zum Etikett springen, entfernen wir alle abschließenden Satzzeichen:
und tauschen Sie die ersten beiden Wörter mit dem Rest des Satzes aus, wobei Sie das neue erste Wort in Großbuchstaben schreiben und dabei die erforderliche Interpunktion hinzufügen:
quelle
You are
Pass First" und "Second Line" stimmen nicht mit dem letzten überein, daher erfolgt die Ausgabeyou are
anstelle der Fehlermeldung. Fügen Sie...|They) \S+ \S/\L&/
den ersten beiden Zeilen einen Haken hinzu .