W tym golfie kodowania powinieneś przekonwertować jedną konwencję kodowania z TitleCase na lower_case_with_underscores. I wzajemnie!
Specyfikacja
Zmień obudowę w następujący sposób:
- Jeśli znak podkreślenia jest ogranicznikiem, zmień obudowę na wielkość liter bez ogranicznika.
- Jeśli jest wiele słów bez separatora, zmień wielkość liter na małe i dodaj znak podkreślenia jako separator.
- W przypadku tylko jednego słowa (lub jednego znaku): zmień wielkość liter na Wielkość liter, jeśli słowo zaczyna się na małe litery; zmień obudowę na małe litery, jeśli słowo zaczyna się od wielkich liter.
Dozwolone postacie:
- A do Z
- a do Z
- podkreślenie (
_
).
Wpisywanie słów zawierających małe litery jest niedozwolone. Przykłady niedozwolonych przypadków:
Coding_Convention_Conversion
a_BC
Przykłady przypadków
Input | Expected Output
===========================================================
CodingConventionConversion | coding_convention_conversion
coding_convention_conversion | CodingConventionConversion
abc | Abc
Abc | abc
ABC | a_b_c
a_b_c | ABC
a | A
A | a
Zasady
- Dopuszcza się używać
ToUpper
,ToLower
aToTitleCase
funkcje. - Używanie wyrażeń regularnych jest dozwolone.
- code-golf : wygrywa najkrótszy kod w bajtach!
ToTitleCase
funkcji jest w porządku? Nie określiłeś, więc zakładam, że jest w porządku.Odpowiedzi:
Pyth, 25 bajtów
29 33 35 40Zaoszczędzono 2 bajty dzięki @Dennis
Zaoszczędź 4 bajty dzięki @FryAmTheEggman
Wypróbuj online
źródło
/z\_
narIz0
. Wierzę również, że znalazłem alternatywną długość dodawania programu podkreślającego:tsXzrG1_Mcj\_G2
może ktoś możetsXzrG1*\_G
Jolf, 35 bajtów
Oszczędza 1 bajt dzięki @ Cᴏɴᴏʀ O'Bʀɪᴇɴ . Jest to zakodowane w ISO 8859-7.
Woohoo mój pierwszy program Jolf!
Wyjaśnienie
Wypróbuj online
źródło
"(?=[A-Z])'_
. Ciąg zostanie automatycznie zamknięty.Retina , 37
Dzięki @ MartinBüttner za oszczędność 4 bajtów!
(Zwróć uwagę na końcowy znak nowej linii).
Wypróbuj online. Uwaga: obejmuje to dodatkowe
m`
skonfigurowanie kilku linii do traktowania każdej linii wejściowej osobno, aby wszystkie przypadki testowe mogły być uruchomione za jednym razem. Nie jest to wymagane w pytaniu, więc nie są one uwzględniane w wyniku._
albo na początku wprowadzania, albo przed dużymi literami. Wszystkie słowa są teraz_
rozdzielane, niezależnie od wielkości liter._
albo na początku wprowadzania, albo gdy następuje po nich duża litera.źródło
?=
i zastępując ten etap$1
(nie wpływa to na liczbę bajtów).GNU Sed, 46
Dzięki @TobySpeight za zapisanie 2 bajtów!
Wynik obejmuje +1 dla opcji
-E
(lub-r
) dosed
.Wypróbuj online.
Dość prosty sed:
_
, a następnie małą literą, wielką literą tej litery.g
Flagęs
realizuje to podstawienie każdorazowo znalezionot
przeskakuje do:
nienazwanej etykiety, jeśli były jakieś dopasowania dla powyższego podstawienia. Ta etykieta jest domyślnie na końcu._
małymi literami tej litery_
przed pierwszą literą.s/^_//
usuwa to.źródło
-E
działa w moim GNU sed 4.2.2 (Ubuntu 14.04.3), chociaż nie ma go na stronie man. Czytałem gdzieś [potrzebne źródło], która-E
jest nowszą opcją Posix, która zostanie oficjalnie dodana do GNU Sed w nowszej wersji, ale jest już tam nieoficjalnie. Niezależnie od tego,-r
czy działa dobrze, jeśli-E
nie działa dla Ciebie./* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
.-E
jako synonim-r
. Nie przekazałem poprawnie minimalnego programu, np.sed -E -e Q
JavaScript (ES6), 87 bajtów
Wyjaśnienie
W zależności od tego, która część wyrażenia regularnego jest dopasowana, zastępuje dopasowanie odwrotnym przypadkiem.
Test
źródło
Ruby,
1018775 bajtówNiestety, robi to dokładnie to samo, co rozwiązanie Retina, ponieważ metoda ta okazała się krótsza niż cokolwiek innego, co wymyśliłem.
źródło
Python 3, 130 bajtów
Szybka i brudna próba użycia wyrażenia regularnego do podziału na czapki. Całkiem brutalna siła: jeśli ktoś może wymyślić inne podejście, jestem pewien, że można to pokonać.
źródło
PHP 160 bajtów
nie najkrótsze, ale dla kompletności tutaj moje rozwiązanie w PHP, $ s przechowuje ciąg do konwersji:
źródło
Perl 6 ,
73 72 7168 bajtówStosowanie:
Wyjaśnienie:
Być może zastanawiasz się, dlaczego użyłem właściwości Unicode (
<:Lu>
,<:Ll>
) zamiast tylko klasy znaków. W Perlu 6 nie są już pisane[a-z]
, są pisane,<[a..z]>
co jest 1,6 razy większe. Nawiasy klamrowe[ … ]
są używane do grupowania bez przechwytywania, które zostało przeliterowane jak(?: … )
w Perl 5.źródło
Japt, 40 bajtów
Przetestuj online!
Jak to działa
źródło
Perl 5, 42 bajtów
40 bajtów plus 2 za
-p
(dzięki, dev-null )źródło
-E
zamiast-e
.𝔼𝕊𝕄𝕚𝕟 3, 15 znaków / 32 bajty (niekonkurencyjne)
Try it here (Firefox only).
Wersja v3 została wydana po tym wyzwaniu, z kilkoma poprawkami błędów i aktualizacjami bibliotek.
Wyjaśnienie
To tylko połączenie wbudowanych plików.
źródło
Galaretka , 24 bajty
Wypróbuj online!
źródło
Python 3 , 86 bajtów
Wypróbuj online!
Działa również w Python 2 .
Korzystając z wygodnego faktu, że wartość ascii dla
_
(95) znajduje się pomiędzy wielkimi i dużymi literami (65-90) i małymi literami (97-122), co pozwala na łatwe porównywanie ciągów.źródło
Dalej (gforth) , 129 bajtów
Wypróbuj online!
Objaśnienie kodu
źródło