W dzisiejszym wyzwaniu musisz napisać program lub funkcję, które naprzemiennie rozróżniają wielkość liter. Należy jednak zignorować znaki niealfabetyczne. Oznacza to, że każdy znak alfabetu musi mieć inną wielkość liter niż poprzedni i następujący po nim znak alfabetu. Jest to nieco bardziej skomplikowane niż na przykład pisanie dużymi literami. Jeśli weźmiesz ciąg taki jak
hello world
i przekonwertuj każdą inną postać na wielkie litery, otrzymasz:
hElLo wOrLd
Jak widać, po małych literach o
następuje mała w
. To jest nieprawidłowe Zamiast tego musisz zignorować przestrzeń, dając nam następujący wynik:
hElLo WoRlD
Wszystkie znaki niealfabetyczne muszą pozostać takie same. Wyjście może rozpoczynać się od dużej lub małej litery, o ile stale się zmienia. Oznacza to, że następujące wyniki byłyby również do przyjęcia:
HeLlO wOrLd
Twój program powinien działać bez względu na przypadek wejścia.
Łańcuch wejściowy zawsze będzie zawierał tylko drukowalny kod ASCII , więc nie musisz się martwić o niedrukowalne znaki, znaki nowej linii lub Unicode. Twoje zgłoszenie może być pełnym programem lub funkcją, a dane wejściowe i wyjściowe można pobrać w dowolnym rozsądnym formacie. Na przykład argumenty funkcji / wartość zwracana, STDIN / STDOUT, odczyt / zapis pliku itp.
Przykłady:
ASCII -> AsCiI
42 -> 42
#include <iostream> -> #InClUdE <iOsTrEaM>
LEAVE_my_symbols#!#&^%_ALONE!!! -> lEaVe_My_SyMbOlS#!#&^%_aLoNe!!!
PPCG Rocks!!! For realz. -> PpCg RoCkS!!! fOr ReAlZ.
This example will start with lowercase -> tHiS eXaMpLe WiLl StArT wItH lOwErCaSe
This example will start with uppercase -> ThIs ExAmPlE wIlL sTaRt WiTh UpPeRcAsE
A1B2 -> A1b2
Ponieważ jest to gra w golfa , obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach!
cowsay
Odpowiedzi:
JavaScript (ES6),
6663 bajtówZaczyna się od wielkich liter.
Przypadki testowe
Pokaż fragment kodu
źródło
s=!s
sztuczka?s
jest to łańcuch wejściowy,!s
najpierw ocenia nafalse
(chyba, że łańcuch wejściowy jest pusty, w którym to przypadku byłby ocenianytrue
- ale pusty łańcuch i tak nie wygeneruje żadnego dopasowania). Następnie staje się standardową operacją logiczną, na przemian zfalse
itrue
. Ponadto nie mamy nic przeciwko utracie zawartościs
w tym momencie, ponieważ była już używana do karmienia.replace()
."A[I"
zawiodłyby.05AB1E ,
118 bajtówKod:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
Wyjaśnienie:
źródło
lvy¾Fš}Da½J
, że masz dokładnie to, co już masz.Oh-Five-Ay-Bee-One-Eee
, że nie jestem człowiekiem kreatywnym.GNU Sed, 33
Wynik obejmuje +1 za
-r
flagę do sed.Wypróbuj online .
źródło
Galaretka , 13 bajtów
Wypróbuj online!
Jak to działa
źródło
Japt ,
1614 bajtówWypróbuj online!
Wyjaśnienie
źródło
,
. Chyba że jest to liczba (tj.[12]
), Japt wie, że są to różne przedmioty. Wierzę, że możesz również usunąć&1
._m"uv"gT°
Miły. Właśnie miałem to zasugerować.Python 3 ,
8676686663 bajtów-2 bajty dzięki DJMcMayhem
-3 bajty dzięki Cyoce
Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe
źródło
print(end=(2*i).title()[x])
?Alice , 18 bajtów
Wypróbuj online!
Wyjaśnienie
Ten program działa według mniej znanego szablonu dla programów o nieparzystej długości, które działają całkowicie w trybie porządkowym. Zlinearyzowana wersja tego kodu to:
Objaśnienie kodu:
Bez użycia
l
na duplikacie stos poN
będzie["helloworld", "helloworld"]
. Podejrzewam, że to błąd.źródło
C (tcc) ,
605756 bajtówDzięki DigitalTrauma zauważenie bitu 5 jest jedyną różnicą dla wielkich / małych liter ASCII.
Specjalne podziękowania dla ZCH za grę w golfa jeszcze trzy bajty.
Oszczędź jeszcze jeden bajt od pomysłu RJHuntera
Wypróbuj online!
źródło
strdup()
wskaźników do odczytu i zapisu w kodzie sterownika testowego.*s&~32|++l%2<<5
aby zapisać 3 bajty.&~33
je,&95
aby zapisać kolejny bajt.Java 8, 99 bajtów
Wyjaśnienie:
Wypróbuj tutaj.
źródło
(c+"").matches("[A-Za-z]")
lubCharacter.isLetter(c)
zapisać bajty.c>64&c<91|c>96&c<123
chociaż. A ponieważ używamint
i tak dlaCharacter.toUpperCase(...)
iCharacter.toLowerCase(...)
golfed części (te:(char)(c&~32)
a(char)(c|32)
), wątpię mogłem zrobić to krótsze z jednej z nich.a->{String r="";int i=0,f=32;for(int c:a)r+=(char)(c>64&c<91|c>96&c<123?(f=~f):c);return r;}
??Rubin,
57554741 bajtówLiczba bajtów obejmuje dwa bajty dla opcji wiersza poleceń.
Uruchom na przykład tak:
$ ruby -p0 alternate_case.rb <<< "some input"
Dzięki tej
p0
opcji całe wejście jest zużywane za jednym razem, a magiczny glob$.
jest zwiększany do 1. Jest on następnie przełączany między 0 a 1 i używany do utrzymania stanu.Działa z wejściem wieloliniowym; Wypróbuj online!
Dzięki Ventero za niesamowity wkład - sprawdź komentarze, aby poznać szczegóły.
źródło
$.
auto-inkrementacja przy każdymgets
połączeniu, pełny program z-p
flagą byłby krótszy ...1&$.+=1
pozwala upuścić nawiasy. I kompletności boską, nie ma innej globalna liczba całkowita - to niestety tylko read-only:$$
.-p0
sprawia, że interpreter odczytuje wszystkie dostępne dane wejściowe za jednym razem - więc twój kod jest wywoływany tylko raz, co pozwala ci swobodnie korzystać$.
. W połączeniu z faktem, żegsub
domyślnie działa tak, jak$_.gsub!
podczas określania,-p
pełny program jest znacznie krótszy: 48 znaków dlagsub(/[a-z]/i){[$&.upcase,$&.downcase][1&$.+=1]}
i 2 dlap0
flagi.-p0
, możesz w rzeczywistości zapisać kilka dodatkowych znaków w sposobie przewijania w$.
przód i w tył: ponieważ teraz jest gwarantowane, że1
kiedy twój kod zostanie wywołany, możesz po prostu użyć$.^=1
./\p{L}/
( Litera kategorii Unicode ) jest o jeden znak krótsza niż/[a-z|/i
.Brachylog , 25 bajtów
Wypróbuj online!
Jest to zarówno długie, jak i powolne.
Wyjaśnienie
źródło
MATL ,
1615 bajtówWypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Zastanów się nad wprowadzeniem „hello world”
„
źródło
Perl 6 ,
3230 bajtówSpróbuj
Spróbuj
Rozszerzony:
źródło
q / kdb +,
514238 bajtówRozwiązanie:
Przykład:
Uwagi:
źródło
V ,
17, 13 bajtówWypróbuj online!
Lub Zweryfikuj wszystkie przypadki testowe!
HeXdUmP:
Wyjaśnienie:
Używa to skompresowanego wyrażenia regularnego ️, więc przed wyjaśnieniem rozwiń wyrażenie regularne:
VU
Konwertuje wszystko na wielkie litery. Następnie uruchamiamy to:Stara / bardziej interesująca odpowiedź:
źródło
PHP, 71 bajtów
Wypróbuj online!
źródło
CJam ,
2624 bajtówWypróbuj online!
Wyjaśnienie
źródło
Pyth, 11 bajtów
Wypróbuj tutaj
Wyjaśnienie
źródło
PowerShell, 86 bajtów
Dane wejściowe to
[char[]]
tablica.Komentarze w kodzie dla wyjaśnienia
źródło
Haskell,
10583 +24 + 1 bajt separatora =1088688 bajtówFunkcja jest
(1#)
, zaczyna małe litery. Wypróbuj online!Smutne jest to, że jest on dłuższy niż odpowiedzi w Javie i C #Dzięki Ørjan Johansen za zaoszczędzenie 22 bajtów poprzez połączenie trzech linii w jeden!źródło
f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
1#
nie liczy się to jako anonimowa funkcja. W moim rozumieniu, powinieneś być w stanie powiązać anonimową funkcję z identyfikatorem, ale np.f=1#
Nie zadziała. Zamiast tego potrzebujesz sekcji(1#)
dla +2 bajtów. Jest to również domyślnie stwierdzone w naszych wspólnotowych wytycznych dotyczących gry w golfa w Haskell , chociaż być może należy je dostosować, aby wyraźnie wspominały ten przypadek.Arkusze Google, 264 bajty
To duży bałagan, ale trochę łatwiej jest go rozwinąć:
Pseudo-logika wyglądałaby tak:
źródło
Perl 5 , 24 bajtów
23 bajty + 1 bajt na
-p
.Dzięki @Dada za -2 bajty.
Wypróbuj online!
źródło
\pl
zamiast[a-z]
do 2 bajtów tys.)[a-z]
zamiast tego używam !). Jeśli się zastanawiasz, pochodzi od perlrecharclass ;)Siatkówka , 46 bajtów
Wypróbuj online! Obejmuje przypadki testowe.
źródło
C 64 bajty
Wykorzystuje kodowanie ascii, w którym wielkie i małe litery są przesunięte o 0x20.
źródło
char
i*s
Siatkówka , 32 bajty
Wypróbuj online!
Najpierw konwertuje dane wejściowe na wielkie litery, a następnie grupuje dane wejściowe w dopasowania zawierające do dwóch dużych liter. Może zawierać tylko jedną literę, jeśli ostatnia litera nie zawiera pary. Następnie obniża wielkość pierwszej litery każdego z tych dopasowań.
01
W drugim etapie przekłada grubsza: nie zmieniają zachowanie tego etapu na podstawie liczby meczu, ale zastosować zmiany tylko do pierwszego znaku każdego meczu.źródło
PHP 5, 54 bajty
źródło
C #, 100 bajtów
źródło
Groovy, 79 bajtów
źródło
Python 3 , 192 bajty
Wypróbuj online!
źródło
Wypukły , 16 bajtów
Wypróbuj online!
Wypukły port odpowiedzi @Business Cat .
źródło