Wprowadzony tekst będzie zdaniem w języku angielskim, frazą lub słowem. Będzie zawierać tylko a-zA-Z' -,.!?
. Twoim zadaniem jest pobranie danych wejściowych, usunięcie spacji, a następnie redystrybucja wielkich liter w taki sposób, aby litery w indeksach pisanych wcześniej dużymi literami (i tylko litery w indeksach, które były wcześniej pisane wielkimi literami) były pisane wielkimi literami.
Na przykład, jeśli dane wejściowe to A Quick Brown Fox Jumped Over The Lazy Dog
, indeksy (oparte na 0) wielkich liter to 0, 2, 8, 14, 18, 25, 30, 34, 39
. Następnie usuń spacje z wejścia: AQuickBrownFoxJumpedOverTheLazyDog
. Następnie wszystkie litery małe litery, wielkie litery, ale tych na 0, 2, 8, 14, 18, 25, 30, 34, 39
: AqUickbrOwnfoxJumpEdovertHelazYdog
, która jest Twój wyjściowego.
Wkład
Wprowadzony tekst będzie zdaniem w języku angielskim, frazą lub słowem. Może zawierać tylko małe litery, wielkie litery, łączniki, apostrofy, przecinki, kropki, znaki zapytania, wykrzykniki i spacje.
Wydajność
Dane wejściowe z usuniętymi spacjami, małe litery-d, z literami na indeksie wielkich liter w danych wejściowych dużymi literami-d.
UWAGA: Twój program nie może ulec awarii (błąd takiego wykonania kończy się) z błędem IndexOutOfRange lub podobnym.
Przypadki testowe
Hi! Test!
Hi!tEst!
A Quick Brown Fox Jumped Over The Lazy Dog
AqUickbrOwnfoxJumpEdovertHelazYdog
testing TESTing TeStING testing testing TESTING
testingtESTIngteStInGTEstingtestingtestiNG
TESTING... ... ... success! EUREKA???!!! maybe, don't, NOOOOO
TESTING.........success!eureKA???!!!maybe,don't,nooooo
Enter PASSWORD ---------
Enterpassword---------
A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Z z
AabbCcddEeffGghhIijjKkllMmnnOoppQqrrSsttUuvvWwxxZz
TEST
teST
0, 2, 8, 14, 18, 23, 27, 32
„ Są0, 2, 8, 14, 18, 25, 30, 34, 39
Odpowiedzi:
Galaretka ,
1413 bajtówWypróbuj online!
Jak to działa
źródło
C (gcc) ,
82797472696766 bajtówWypróbuj online!
źródło
Python 2 , 114 bajtów
Wypróbuj online!
Odpowiednio:
Python 2 , 114 bajtów
Wypróbuj online!
źródło
''.join([(X[i].lower,X[i].upper)[x[i].isupper()]()for i in range(len(X))])
dla -5 bajtów.Python 3 ,
787572 bajtówDzięki @xnor za grę w golfa z 6 bajtów!
Wypróbuj online!
źródło
s
zamiasts[0]
?(c*2).title()
może dostać oba przypadki, choć zamienione.c>' '!=f()
to jest równoważne(c>' ') and (' '!=f())
.05AB1E ,
1514 bajtów-1 bajt dzięki Emignie
Wypróbuj online!
źródło
Haskell ,
9895898881 bajtówDzięki @name, @nimi, @Zgarb i @Laikoni za pomoc w goleniu 14 bajtów
Nie golfowany:
źródło
filter(>' ')
za jeden bajt mniejlast(toLower:[toUpper|isUpper p])c
zipWith
należy zapisać jeszcze jeden bajt:f s=zipWith(\p->last$toLower:[toUpper|isUpper p])s$filter(>' ')s
.V , 24 bajty
Wypróbuj online!
Tego rodzaju wyzwania są dokładnie tym, dla czego stworzono V. :)
Wyjaśnienie:
źródło
Python 2, 100 bajtów
źródło
Alice , 32 bajty
Wypróbuj online!
Wyjaśnienie
Jest to standardowy szablon dla programów, które działają całkowicie w trybie porządkowym. Program jest rozpakowany w następujący sposób:
źródło
JavaScript (ES6),
949185 bajtówSpróbuj
źródło
'@'<s[i]&s[i]<'['?
?Retina ,
7771 bajtówWypróbuj online! Link zawiera pakiet testowy. Objaśnienie: Pierwszy etap powiela linię, podczas gdy drugi etap obniża wielkość kopii i usuwa spacje. Trzeci etap następnie przechodzi przez każdą wielką literę od prawej do lewej i próbuje umieścić spację przed odpowiednim znakiem w drugim wierszu. Pierwszy wiersz jest usuwany, a spacje są używane do wielkich liter odpowiednich znaków wyniku. Edycja: Zapisano 6 bajtów dzięki @Kobi.
źródło
(.?)
i$4
? Wygląda na to, że opcjonalna grupa na końcu nic nie robi.Perl,
9594 + 1 = 95 bajtów+1 kara bajtowa za -n
Zapisz jeden bajt, zastępując od
s/\s//g
dos/ //g
Wypróbuj online!
Wyjaśnienie:
Wykonaj kopię ciągu wejściowego.
Usuń wszystkie spacje i przekształć ciąg znaków na małe litery.
Następnie zacznij pętlę nad każdą literą. Testuj literę w tej samej pozycji w zapisanym ciągu dla wielkich liter. Jeśli jest górny - uczyń bieżącą literę kapitalizowaną. Wydrukuj list.
Zauważ, że perl musi być uruchomiony z przełącznikiem wiersza poleceń „-n”
źródło
+1
bajt na-n
flagę. Poza tym wygląda dobrze! Witamy na stronie! :)MATL , 18 bajtów
Takie samo podejście jak odpowiedź 05AB1E Riley .
Wypróbuj online!
źródło
Python 3 , 117 bajtów
Wypróbuj online!
To właściwie mój pierwszy golfowy kod, więc prawdopodobnie będzie źle, pomijając pomoc z poniższych komentarzy!
PS Tak, to głupie, że definiowanie i zwiększanie
i
oszczędza bajty poza zakresem (len (y)). No cóż.źródło
return
.C # (.NET Core) ,
108101 bajtówWypróbuj online!
char
klasa ma statyczneToUpper()
iToLower()
metody.źródło
Węgiel drzewny , 33 bajty
Wypróbuj online!
Ponieważ nadal nie wiem, jak przekazać ciąg znaków z białymi spacjami jako pojedynczy parametr wejściowy do kodu Charcoal, po prostu przypisuję w nagłówku ciąg testowy do zmiennej Charcoal, która reprezentuje pierwsze wejście (
θ
):Zatem kod ma taką samą liczbę bajtów, jak gdyby ciąg został przekazany jako pierwsze wejście.
Możesz zobaczyć tutaj pełną wersję kodu.
źródło
PHP, 181 bajtów
Próbuję uzyskać mniejsze liczby bajtów, to jest mój kod:
Wypróbuj online!
źródło
PREG_OFFSET_CAPTURE
można użyć tej wartości256
,$argn
jest ona krótszą zmienną jakreadline()
na dane wejściowe i myślę, żectype_upper
użycielcfirst
iucfirst
zapisanie wielu bajtów za pomocą jednej pętli i użycie$$i
operatora trójskładnikowegoJava 8,
184177161 bajtówMożna zdecydowanie zagrać w golfa więcej ...
- 16 bajtów dzięki @ OlivierGrégoire , przyjmując dane wejściowe
char[]
zamiastString
.Wyjaśnienie:
Wypróbuj tutaj.
źródło
char[]
zamiast łańcucha dla tego, zaoszczędzisz mnóstwo bajtów!String
, out =char[]
:-)Common Lisp, 104 bajty
Wypróbuj online!
Niezwykle skrótowe od niechlujnego Common Lisp!
Prosty kod:
źródło
Java (OpenJDK 8) ,
15011711397 bajtówWypróbuj online!
Podczas gry w golfa doszedłem do 102 bajtów:
Wypróbuj online!
Ale przypomniałem sobie, że zaczynało to wyglądać jak odpowiedź C Dennisa, więc po prostu przeniosłem jego nieco kręcące się i ... magia się wydarzyła. Dużym zyskiem z portu jest usunięcie gałęzi i powtórzeń w nich.
źródło
Hi! Test!
powinien się staćHi!tEst!
, ale wraz z rozwiązaniem staje sięHi!Test
.Arkusze Google, 213 bajtów
Dane wejściowe są w komórce,
A1
a formuła rozkłada się w następujący sposób:ArrayFormula()
pozwala nam ocenić każdy terminROW()
niezależnieJOIN()
łączy wszystkie te niezależne wyniki w jeden ciągIF(REGEXMATCH(),UPPER(),LOWER()
jest to, co sprawia, że jest naprzemiennie, używając dużej lub małej litery, w zależności od tego, co było w tej pozycji na wejściuROW(OFFSET())
Zwraca tablicę wartości1
produktuA1.length
, który może być podawany doMID()
funkcji, dzięki czemu możemy ocenić każdy znak z koleiWyniki przypadków testowych: (Łatwiej jest przeczytać, jeśli klikniesz na większą wersję).
źródło
Rubinowy , 80 bajtów
Wypróbuj online!
źródło
n.gsub(/./){}
zamiastn.size.times{};n
:n.gsub(/./){(?A..?Z)===a[i]?$&.upcase: $&}
.Perl, 92 bajty
Wyjaśnienie:
źródło
-n
flagę, aby twoja odpowiedź była ważna. Kilka rzeczy do gry w golfa:s/ //g
wystarczy (nie trzeba\s
),y/a-z/A-Z/
to samotr[a-z][A-Z]
, możesz użyć-p
flagi, więc nie potrzebujesz ostatniejprint
, nie potrzebujesz nawiasu w środkulc$&
.C, 103 bajty
Wypróbuj online!
źródło
Python 3 ,
125, 124 bajtówWypróbuj online!
źródło
Python 2,
106105 bajtówEdycja: zapisz jeden bajt za pomocą
print ''.join
=>print''.join
.Forma lambda, 99 bajtów
źródło
SCALA, 128 znaków, 128 bajtów
Dzięki za to wyzwanie. Wypróbuj online!
źródło
q / kdb +, 49 bajtów
Rozwiązanie:
Przykłady:
Wyjaśnienie:
Znajdź indeksy, w których dane wejściowe są pisane wielkimi literami, a następnie zastosuj funkcję
upper
do tych indeksów w zapisanej małymi literami wersji łańcucha wejściowego bez spacji. Zauważ, że nie możemy zastosować funkcji poza długością łańcucha, więc użyj take (#
), aby skrócić łańcuch wejściowy do długości małej, pozbawionej spacji wersji.Premia:
Po przeczytaniu odpowiedzi pomyślałem, że wypróbuję rozwiązanie, w którym powtarzam dane wejściowe, do tej pory udało mi się rozwiązać tylko 53 bajty:
źródło
Swift 3.0, 199 bajtów
Wypróbuj online!
źródło
Perl 5 , 40 bajtów
37 bajtów kodu +
-F
flaga. (zwróć uwagę, że w starszych wersjach Perla może być konieczne dodanie-an
flag)Wypróbuj online!
Objaśnienia:
Dzięki
-F
,@F
zawiera listę wszystkich znaków wejściowych.for/\S/g
iteruje każdy znak spacji na wejściu. Używamy$i
liczyć na której iteracji jesteśmy. Jeśli$F[$i++]
jest wielką literą ( )/[A-Z]/
, wówczas drukujemy wielką literę bieżącego znaku (uc
), w przeciwnym razie drukujemy ją małymi literami (lc
). Zauważ, żeuc
ilc
zwróć argument bez zmian, jeśli nie jest to litera.Poprzednia wersja (mniej golfowa: 47 bajtów):
Wypróbuj online!
źródło