Wyzwanie
Cóż, myślę, że to całkiem jasne, prawda? Musisz stworzyć funkcję lub program, który pobiera ciąg znaków jako argument i wyprowadza odpowiedni język Yoda.
To jest golf golfowy , więc wygrywa najmniejsza liczba bajtów.
Dane wejściowe
Dane wejściowe mogą być dowolnymi ciągami bez linii. Możesz przetłumaczyć ciąg znaków, jeśli składa się on z tego:
Temat + Czasownik + Coś jeszcze.
Gdzie Dotyczy to zaimek osobowy (ja, ty, on, ona, ono, my, oni). Nie musisz rozpoznawać, że drugie słowo jest czasownikiem.
Jeśli pierwsze słowo nie jest zaimkiem, dane wejściowe są prawidłowe, ale dane wyjściowe będą Too difficult, this sentence is.
You have to win this code challenge -> Translatable
Luke has to win this code challenge -> Untranslatable
Dane wejściowe mogą kończyć się literą, a. lub a !, nie z?
Ponadto ciągi mogą zawierać znaki non-Ascii, nawiasy, przecinki, dwukropki ...
Wyjście
W przypadku zdania możliwego do przetłumaczenia, wynikiem jest to samo zdanie, z podmiotem i czasownikiem na końcu zdania.
You have to win this code challenge -> To win this code challenge, you have.
Przecinek, kropka i małe litery w zaimku są obowiązkowe. (Z wyjątkiem oczywiście, jeśli zaimkiem jest I).
Jak wspomniano wcześniej, jeśli nie można go przetłumaczyć, należy wyprowadzić ciąg Too difficult, this sentence is.
Przykłady
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.
źródło
You have to win this code challenge
powinno byćThis code challenge, you have to win
.!
? Czy to na pewno nie nastąpi, czy też powinniśmy sobie z tym poradzić i wydrukować to samo, co wtedy, gdy nie ma zaimka wiodącego. Czy dane wejściowe mogą zawierać sygnały liniowe? Apostrofy? Dwukropki / nawiasy / wsteczne? Znaki spoza ASCII? Mówisz, że „wejściem może być dowolny ciąg”, ale twoje przypadki testowe obejmują tylko bardzo specyficzne typy ciągów.Odpowiedzi:
Retina,
162137145134131129Wiele interpunkcji jest teraz obsługiwanych poprawnie. Przypadek testowy:
You will not win this challenge...! -> Not win this challenge..., you will.
Wypróbuj online!
Opis:
Jeśli na końcu jest interpunkcja, usuń ją.
Przekształć zaimek na małe litery, z wyjątkiem tego, że to I.
Odfiltruj wszystkie niepasujące wiersze
<Pronoun><space><word><space><word>...
Podzielony
pronoun + verb
,remainder
. Następnie zmień kolejność.Przekształć pierwszy znak na wielkie litery.
Jeśli wynik jest pusty, nie przepuścił powyższego filtra. Wydrukuj komunikat o błędzie.
źródło
[^ ]
można prawdopodobnie zastąpiony\S
wszędzie, aw pierwszym regex[^ ]+
można zastąpić.+
. W klasach postaci nie musisz uciekać,.
więc[.!]
działa dobrze. Ponadto, ponieważ nie zamienić kolejność of$1
a$2
w trzecim etapie, można uchwycić je w jedną grupę i zapisać 5 bajtów.([^I]|It)
można skrócić do^\w\w
I|It
może się staćI?
, jeśli Retina to popieraES6, 212
Prawdopodobnie można to nieco pograć w golfa:
JSFiddle (wymaga aktualnej przeglądarki, takiej jak Chrome) lub uruchom ją za pośrednictwem node.js
Nie golfowany:
źródło
I think they’ll add new features
-> zwracaThey, I think.
na Google Chrome 47.0.2526.106 m. Poza tym to nie lubiI love constants like π
. Aby dodać to,I made a fantastic code challenge (I hope)
zwracaA fantastic code challenge , I made.
zamiastA fantastic code challenge (I hope), I made.
^
na początku wyrażenia regularnego, w przeciwnym razie zdanie z dowolnym tekstem przed zaimkiem będzie nadal analizowane jako poprawne.JavaScript (ES6), 164 bajty
Wyjaśnienie
Niemal bolesne jest, ile bajtów wielką literą pierwszej litery ciągu zajmuje JavaScript ...
Test
Test nie używa przypisania destrukcyjnego, aby uczynić go bardziej kompatybilnym z różnymi przeglądarkami.
Pokaż fragment kodu
źródło
^(((It?)|You|[HW]e|[ST]hey) \\S+) (.*?)[.!]?$
)? P [4] [0] .toUpperCase () + p [4] .slice (1) +, ${p[3]?p[1]:p[1].toLowerCase()}.
: "To trudne, zdanie to jest."It
pozostała wielka, a także pasowałaShey
zamiastShe
.Python, 261 bajtów
Okazuje się, że Python nie ma nic przeciwko takim rzeczom, jak
b[-1]in".!"
dalej Będę grać z obiektem dopasowania, jeśli nikt mnie nie pobije :)źródło
b=b[:-1]
części.b=b[:-1]
na końcu linii za pomocąif
. możesz usunąć spację po powrocie do ostatniego wiersza. to zepsuje kompatybilność z Python3, zastępując 2 spacje tabulacją i 3 spacją tabulatorem i spacjąPython,
218217204 bajtówNie jestem pewien, czy można to jeszcze pograć w golfa.
Nie golfowany:
źródło
s.split(' ')
nas.split()
i'I|We|You|He|She|It|They'.split('|')
na'I We You He She It They'.split()
, zastąpić tąif...else
samą listą logiczną, która była używana gdzie indziej, zmienićt[0]in
nat[0]in
, usunąć spawnie wokół powrotuGNU sed, 129 bajtów
Podaję +1 bajt dla
-r
flagi.Wyjaśnienie
Jeśli dopasujemy wiodącą
I
, przejdziemy do etykiety:Jeśli dopasujemy jeden z pozostałych zaimków, zmniejszamy go, a następnie przeskakujemy do etykiety:
W przeciwnym razie drukujemy komunikat o błędzie i przechodzimy do następnego wiersza wprowadzania:
Jeśli przeskoczyliśmy do etykiety, usuwamy ostatnią interpunkcję:
i zamień pierwsze dwa słowa na resztę zdania, dodając wielkie pierwsze słowo i dodając wymaganą interpunkcję:
źródło
You are
przekazać pierwszy i drugi wiersz, ale nie pasują do ostatniego, więc wynik jestyou are
zamiast komunikatu o błędzie. Dodaj czek jak...|They) \S+ \S/\L&/
w pierwszych dwóch wierszach.