Celem tego wyzwania jest uzyskanie danych wejściowych i wyjściowych, ale z odwróconą kolejnością zdań. Przykładowe dane wejściowe:
Hello friend. What are you doing? I bet it is something I want to do too!
Przykładowe dane wyjściowe:
I bet it is something I want to do too! What are you doing? Hello friend.
Jak widać z przykładów, twój program musi radzić sobie ze znakami zapytania, wykrzyknikami i kropkami. Możesz założyć, że każde zdanie ma interpunkcję i spację przed następnym zdaniem. Końcowe spacje / znaki nowej linii są prawidłowe, o ile są czytelne. Najkrótszy kod wygrywa.
Powodzenia!
EDYCJA: Możesz założyć, że w zdaniach nie ma cudzysłowów ani nawiasów, ale jeśli sprawisz, że Twój kod będzie w stanie poradzić sobie z nimi obojgiem, otrzymasz -5 bajtów Przykład danych wyjściowych dla parens / quote:
"Hello, " she said. (I didn't know what she was talking about.) --> (I didn't know what she was talking about.) "Hello, " she said.
"Hello!" she said. (I hesitated. How should I respond? This is too much!) I responded, "Hi there. How are you? What is your cat's name?" without thinking any more about it.
Odpowiedzi:
Julia,
4542 bajtów - 5 bonusów = 37Tworzy to anonimową funkcję, która akceptuje ciąg wejściowy i zwraca ciąg znaków z odwróconymi zdaniami. Obsługuje to odpowiednio każdy znak specjalny, jednak należy unikać znaków podwójnych cudzysłowów i znaków dolara, w przeciwnym razie nie są one poprawnymi ciągami znaków w Julii.
Niegolfowane + wyjaśnienie:
Przykłady:
A jeśli nie lubisz patrzeć na znaki ucieczki w danych wyjściowych:
Zaoszczędź 3 bajty na wyrażeniu regularnym dzięki Martinowi Büttnerowi! Wcześniej używany lookbehind:
(?<=[.?!])
.źródło
CJam,
2322 bajtówNie jestem pewien, czy to kwalifikuje się do premii, czy nie, ale oto rozwiązanie:
Rozszerzenie kodu (nieco nieaktualne) :
Wypróbuj online tutaj
źródło
J,
3532Prawie obsługuje wkład dodatkowy, z tym że muszę uciec przed pojedynczymi apostrofami, więc myślę, że to się nie liczy. (Również moje pierwsze zgłoszenie tutaj)
Stosowanie:
źródło
Perl, 27/25
Lub z wiersza poleceń:
źródło
perl -nE 'say reverse/ |[^.?!]*.\)?/g'
, dzięki czemu Twoja łączna liczbaPHP, 60
źródło
[?!.]\K
zamiast tego użyć wyrażenia regularnego ?Bash + coreutils, 40 bajtów
Odczytuje to ze STDIN, więc dane wejściowe mogą mnie przekierować z pliku lub po prostu potokować, np .:
źródło
(foo bar.)
zamienia się je jako jednostkę?Pip , 25 bajtów
Po spacje do ciągu wejściowego, znajdziemy wszystkie indeksy
.
,?
i!
dodaj 2, i korzystać z^@
podzielonego na operatora, aby przerwać łańcuch na zdania (każdy ze spacją). Odwróć listę, a zostanie ona automatycznie wydrukowana na końcu programu. Voilà!Przykład pokazujący etapy głównego obliczenia z danymi wejściowymi
A! B? C. D!
:źródło
Retina ,
61343330 bajtówKredyty dla nutki za zmniejszenie tego o 24 bajty.
Gdzie
<empty>
oznacza pustą linię. Zakłada się, że#
nie jest to część danych wejściowych, ale jeśli nie jest to uzasadnione, mógłbym zamienić je na dowolną inną postać, w tym"
(którą musiałbym poradzić sobie tylko dla bonusu) lub coś, co nie da się wydrukować. Możesz uruchomić taki kod w jednym pliku, jeśli używasz-s
flagi, lub możesz umieścić każdą linię w osobnym pliku i przekazać je wszystkie do Retina.Odwrócenie tego za pomocą pojedynczej zamiany wyrażenia regularnego jest możliwe, ale naprawdę kłopotliwe. Nawet z grupami równoważącymi .NET potrzebowałem czegoś około 90 bajtów, więc zamiast tego próbowałem zrobić to w kilku krokach.
W siatkówce każda para linii jest jednym etapem zastępowania, gdzie pierwsza linia jest wzorem, a druga linia jest zamiennikiem.
Ten etap po prostu przygotowuje ciąg do dalszego przetwarzania. Przygotowuje
#
jako marker. Ten znacznik wskazuje, że wszystko przed nim zostało już umieszczone we właściwym miejscu, a wszystko po nim nadal musi zostać przetworzone.Ten etap zamienia zdania, kilkakrotnie przesuwając ostatnie zdanie przed
#
(podczas tego procesu przesuwa się do przodu przez łańcuch).+`
Instruuje Retina powtórzyć ten etap aż wyjście przestaje się zmieniać. Oto przykład, w jaki sposób dane wejściowefoo. bar! blah?
zostaną przetworzone:Na koniec po prostu usuwamy znacznik:
źródło
.+
=>$0 #
i powtórzone(.*?[.!?] )(.*#)
=>$2$1
?Java, 113
źródło
JavaScript (ES6) 47
45Jak powiedziano, jest to proste ćwiczenie wyrażenia regularnego. W javascript:
źródło
Python 2, 62
Bonus nie ulegnie poprawie, ponieważ prawdopodobnie nie jest wart kosztu bajtu.
źródło
Matlab (93 bajty)
źródło
Rubinowy 41
Inne odpowiedzi Ruby nie mają wystarczającej ilości WTF.
Działa to przynajmniej w Ruby 2. Jeśli przełącznik
a
iF
działa w 1.8.7, myślę, że możesz upuścić,$_=
aby zapisać trzy postacie.Odwraca każdą linię na standardowym ekranie i drukuje na standardowe wyjście:
źródło
Ruby, 48 (42 bez puttów) bajtów
reverse_sentence.rb
Stosowanie:
Wynik:
Krytyka bardziej niż mile widziana.
źródło
.join(" ")
=>*" "
k, 31
.
źródło
C # - LINQPAD - 93 - 5 = 88 bajtów
Aplikacja konsoli C # 189 - 5 = 184 bajty
regex bezwstydnie chłostał Alex A. :)
źródło
namespace System
tymusing Linq;usingText.RegularExpressions
oszczędności 2xsystem
.Clojure - 44
71znakówUlepszone i uproszczone RE, wyeliminowane niepotrzebne białe znaki.
Dane wyjściowe to sekwencja zdań w oryginalnym ciągu znaków z odwróconą kolejnością zdań:
Wejście: „Witaj przyjacielu. Co robisz? Założę się, że to też coś, co chcę zrobić!” Wyjście: („Założę się, że to też chcę zrobić!” „Co robisz?” „Witaj przyjacielu.”)
źródło
Ruby, 47 lat
Podziękowania dla Martina Büttnera za uratowanie niektórych postaci.
źródło
gets
aby zapisać bajt, wydrukować za pomocą,$><<
aby zapisać bajt (bez potrzeby spacji) i połączyć ciąg z,*''
aby zapisać dwa bajty.CJam, 21 bajtów
Działa to poprzez zamianę spacji po
!
s,.
si?
na cyfrę 1 (nie znak 1 ani znak o punkcie kodowym 1, więc dane wejściowe mogą nadal zawierać je), dzielenie na 1, odwracanie kolejności wynikowych fragmentów i łączenie według spacji.Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło