Zadanie
- Użytkownik wprowadza zdanie - tylko słowa. Wszelkie dane inne niż litery lub spacje, w tym liczby całkowite i znaki interpunkcyjne, powinny zgłaszać wyjątek: „W zdaniu można używać tylko liter”.
- Dane wyjściowe mają wzorzec, w którym niektóre słowa są odwrócone, a inne słowa są normalne.
- Wzór zaczyna się jako normalne słowo, następne dwa słowa są odwrócone, następnie następne dwa słowa są normalne i wzór jest kontynuowany.
- Przykład, w którym słowa powinny być normalne, a gdzie słowa odwrócone, znajduje się poniżej:
Normalny - Cofnięty - Cofnięty - Normalny - Normalny - Cofnięty - Cofnięty - Normalny ...
Przykład wprowadzania
Sprzedaje muszelki na brzegu morza
Przykład wyjścia
Oblewa pociski na brzeg
Dodatkowe zasady
- Jeśli używane są wielkie litery, powinny pozostać na liście, na którym zostały pierwotnie wysłane.
- Wszelkie spacje początkowo zaksięgowane na wejściu powinny zostać zredukowane do jednej spacji. Na przykład
Programming Puzzles and Code Golf
staje sięProgramming selzzuP dna Code Golf
Najkrótszy kod wygrywa !!
Miłego kodowania ...
code-golf
string
word
permutations
Belfield
źródło
źródło
Any input other than letters or spaces, including integers and punctuation, should throw an exception: "Sentence must only use letters".
Oznacza to wykonanie zadania wtórnego całkowicie niezwiązanego z wyzwaniem polegającym na odwróceniu słów, wycięciu języków, które nie mają wyjątków, i wymaga zakodowania na stałe lub skompresowania długiego łańcucha, który zajmuje dużo liczba bajtów.Odpowiedzi:
TeaScript , 55 bajtów
58 60 69 76 78 80 87 89To jest bardzo krótkie, bardzo się z tego cieszę.
Ostatnie ~ 20 znaków może wydawać się bełkotem, ale jest to zakodowane w „Zdaniu należy używać tylko liter”. Wszystkie znaki mają kody znaków poniżej 256, więc każdy ma jeden bajt
Wyjaśnienie
źródło
Haskell, 141 bajtów
Prawie 2/3 kodu służy do sprawdzania błędów. Wydaje się, że jest to pierwsze prawdziwe wyzwanie.
Praca polega na
unwords$zipWith($)(cycle[id,reverse,reverse,id])$words x
tym, że dzieli dane wejściowe na listę słów, zamyka je cykliczną listą funkcji[id,reverse,reverse,id,id,reverse...]
i łączy wynik spacjami z powrotem w pojedynczy ciąg znaków.Dzięki @Christian Irwan za 2 bajty.
źródło
r=reverse
?reverse
ir=reverse
miałem tę samą długość z powodu brakuf=
. Nie sprawdzałem ponownie przy przejściu do trybu pointfree).JavaScript (ES6) 122
źródło
Siatkówka , 103 bajty
W drugim wierszu powinna znajdować się pojedyncza spacja, którą SE wydaje się przełykać. Uruchom kod z jednego pliku za pomocą
-s
flagą.W siatkówce nie ma pojęcia wyjątków, więc wynik jest po prostu zastępowany przez,
Sentence must only use letters
jeśli na wejściu znajdują się nieliterowe znaki niebiałe.źródło
Pyth, 61 bajtów
Wypróbuj online.
źródło
Python,
163160157145Usunięto 15 postaci, dzięki Mego !!
źródło
Bash + coreutils, 108
Ostatnim znakiem tego programu jest spacja.
Dane pobierane są z wiersza poleceń:
źródło
Pyth, 72
Nie przebija drugiej odpowiedzi Pytha, ale już zainwestowałem czas w jej napisanie. Jest to w zasadzie tłumaczenie mojej odpowiedzi w języku Python .
Wypróbuj online
źródło
Julia, 109 bajtów
i=0
i(i+=1)%4>1
służą do decydowania, czy każde słowo otrzymareverse
d, czy nie.isalpha
stosuje się do słów po podzieleniu za pomocą,split(s)
aby ustalić, czy istnieją znaki, które nie są literami (spacje zostały już usunięte w tym punkcie).join
przywraca ciąg po manipulacji, chyba żeerror
zostanie wyrzucony.źródło
Julia,
150134 bajtówNie golfowany:
Oszczędność 16 bajtów dzięki Glen O!
źródło
r
jej jako wyniku? Oznacza to, żer=ismatch(...)||error(...)
- zgoli kilka znaków i odwróci używane warunki warunkower
. Skomentuje ponownie, jak podejrzewam, kilkoma dodatkowymi oszczędnościami||
sobie poradzić z negacją, a potem zdałem sobie sprawę, że negacja nie jest konieczna. Odwróć to z powrotem do&&
. A nawet lepiej, użyj?:
zamiast tego, aby zrobić to jeszcze lepiej.s->(r=ismatch(r"[^a-z ]"i,s))?error("Sentence must only use letters"):join([(iseven(i)&&(r=!r);r?reverse(w):w)for(i,w)=enumerate(split(s))]," ")
dla 144 bajtów. I myślę, że mogę sobie poradzić lepiejjoin
...s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))
Pyth, 55 bajtów
Pożyczył
%%k4 3
nieco od Pietu1998. Zapisano jeden dodatkowy bajt.Wypróbuj online: Demonstracja lub pakiet testowy
Wyjaśnienie
źródło
Perl 5
-ap
, 80 bajtówWypróbuj online!
źródło
Java, 215 bajtów
Regex jest fajny
Wypróbuj online!
źródło
She slles aeS shells no the aeS shore
, ale powinno byćShe slles aeS shells on eht aeS shore
zamiast tego (najpierw normalne; następnie naprzemiennie w parach 2 odwróconych lub nie). Powodują to dwa problemy. Teraz zwiększasz,i
nawet jeśli przedmiot jest pusty ii++%2<1
powinien byći++%4>1
zamiast tego. Tutaj naprawiona wersja 211 bajtów .Galaretka , 39 bajtów
Wypróbuj online!
Dzięki Erikowi Outgolfer. Uratował mnie od kilku dodatkowych bajtów i od wielu godzin frustracji.
Oto 46 bajtowe rozwiązanie
W rzeczywistości generuje błąd składni Pythona, gdy dane wejściowe zawierają nieprawidłowe znaki.
Wypróbuj online!
źródło
Japt v2.0a0
-S
, 41 bajtówSpróbuj
źródło
05AB1E , 36 bajtów
Wypróbuj online.
Zgłasza następujący błąd, gdy dane wejściowe nie tylko zawierają
[A-Za-z ]
:Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego tak
“¸–ƒ—€É€Å™ê“
jest"sentence must only use letters"
.źródło
PHP , 147 bajtów
Wypróbuj online!
Lub jeśli
die()
jest to dopuszczalne jako „wyjątek”:PHP , 131 bajtów
Wypróbuj online!
źródło