Wyzwanie:
Biorąc pod uwagę ciąg znaków podzielony na określone pozycje i wielką literę należy wpisać pierwszy znak danego słowa. Wielką literę pierwszego słowa używaj wielkiej litery, jeśli i tylko jeśli była już wielka
Wejście :
Ciąg s
i znak c
.
Ouput:
Ciąg przy każdym wystąpieniu c
zastępowany pierwszym znakiem wielkimi literami
Przykłady:
STRING(s) CHARACTER(c) RESULT
Hello_world _ HelloWorld
me,no,like , meNoLike
you-got-it - youGotIt
Am^I^clear ^ AmIClear
go!full!caps ! goFullCaps
weird&but&tRue & weirdButTRue
ProbleM1fixed1no 1 ProbleMFixedNo
!prob!!lem!s!Olved!! ! ProbLemSOlved
Uwaga :
- Podane dane wejściowe zawsze będą ważne. tj.: Pierwszy zawsze będzie ciągiem zawierającym co najmniej jedną instancję znaku do zastąpienia. Drugi zawsze będzie pojedynczą postacią.
- Długość ciągu wejściowego będzie większa 4.
Będzie co najmniej jedno wystąpienie postaci do podziału.
Dane wejściowe z pewnością zawierają tylko litery i separator (Dzięki @Arnauld)
- Separator to wszystko, co nie jest alfabetem (az / AZ) (sugerowane przez @Dennis)
Kryteria wygranej:
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach dla każdego języka.
- Dzięki @JonathanAllan za wskazanie dwóch błędów.
1
). Spróbuj pomyśleć o tym, jak rozwiązania mogą zawieść, i przygotuj test dla takich sytuacji. Kilka przykładów: litery jako separatory, separator jest ostatnim znakiem, kolejne separatory i tak dalej. Nie ma potrzeby posiadania wielu przypadków testowych, które nie testują różnych rzeczy..
, mogę sobie wyobrazić, że niektóre funkcje dzielenia łańcuchów borykają się z tym.Odpowiedzi:
Python 3 , 63 bajty
Wypróbuj online!
źródło
C (gcc) ,
615355 bajtów-8 bajtów dzięki Dennisowi!
Wypróbuj online!
źródło
*s==c?*++s&=95:0;
zamiastif(*s==c)*++s&=95;
JavaScript (ES6),
5856 bajtówZaoszczędzono 2 bajty dzięki @ l4m2 / @Downgoat
Pobiera dane wejściowe w składni curry
(s)(c)
.Wypróbuj online!
Skomentował
źródło
s=>c=>s.replace(RegExp(c+".","g"),m=>m[1].toUpperCase())
, ponieważ nie działa dla specjalnych znaków wyrażenia regularnego!prob!!lem!s!Olved!!
+
Zanim.
w regex dostanie wokół niego.Perl 6
-p
, 19 bajtówWypróbuj online!
źródło
sed 4.2.2 (-r), 21
Próbowałem
\W
zamiast[^a-z]
, ale niestety to nie pasuje_
.Wypróbuj online!
źródło
sed 4.2.2 (-r), 21 bytes
.Galaretka , 8 bajtów
Wypróbuj online!
Jak to działa
źródło
Oktawa ,
83,66, 64 bajtówZaoszczędzono 2 bajty dzięki Luisowi Mendo.
upper
zamiasttoupper
.Wypróbuj online!
Wow, to chyba najbardziej niechlujny fragment kodu Octave, jaki kiedykolwiek napisałem! Wykorzystuje dwie sztuczki opublikowane w tym pytaniu ze wskazówkami, mianowicie listę argumentów i tablice komórkowe.
Wyjaśnienie:
Wprowadzanie listy argumentów:
k
jest tutaj pierwszym znakiems
po każdym separatorzec
, przekonwertowanym na wielkie litery. Indeks każdej wielkiej litery jest przechowywany wi
.Korpus komórki:
Tworzymy tablicę komórkową z dwoma elementami, z których jeden mówi się, że wszystkie i-te znaki powinny zostać zastąpione przez jego odpowiednik
k
, a drugi zs
, który jest już zaktualizowany. Indeksujemy to za pomocą,{2}
aby odzyskać tylko cały zmodyfikowany ciąg znaków. Jest on podawany dostrsplit
, który dzieli go na komórki o znaku separatora. Konwertujemy go na listę oddzieloną przecinkami za pomocą{:}
i konkatenujemy z powrotem do ciągu za pomocą nawiasów kwadratowych[]
.Przepraszam, jeśli to nie miało dla ciebie sensu ... Dla mnie to nie ma sensu: P.
źródło
Retina 0.8.2 , 20 bajtów
Wypróbuj online! Bierze tylko ciąg, separator opcjonalny. Wszystkie znaki niealfabetyczne są usuwane, ale każdy następny znak alfabetyczny jest pisany wielkimi literami. Poprzednia 34-bajtowa wersja zaakceptowała dowolne dane wejściowe:
Wypróbuj online! Link zawiera pakiet testowy. Zakłada, że dane wejściowe składają się z łańcucha i znaku połączonych razem. Objaśnienie: Pierwszy etap transliteruje wszystkie znaki bezpośrednio po wystąpieniu znaku końcowego od małych do wielkich liter, a drugi etap następnie usuwa wszystkie wystąpienia znaku końcowego.
W obu rozwiązaniach
+
działa również dopasowanie od prawej do lewej zamiast .źródło
[^a-z]
zamiast lookaheads Wypróbuj online!APL (Dyalog Classic) , 22 bajty
Wypróbuj online!
źródło
Röda ,
5754 bajtów-3 bajty dzięki kwakowi krów
Wypróbuj online!
Wyjaśnienie:
źródło
\E
wyrażenie regularne i_[0:1]
→_[:1]
V , 6
7bajtówZapisano 1 bajt bez użycia argumentu
Wypróbuj online!
Program przyjmuje tekst jako dane wejściowe, a znak jako argument.
Hexdump:
To prosta zamiana. Nieskompresowany wygląda następująco
Wykonaj podstawienie globalne, w którym
\A
znak niealfabetyczny, a następnie znak(.)
zostanie zastąpiony\u
pierwszą grupą przechwytywania zapisaną dużymi literami\1
źródło
c
występuje specjalna postać wyrażenia regularnegoScala, 83 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Czerwony , 87 bajtów
Wypróbuj online!
źródło
05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
PHP,
9183 bajtówRun with
-r
. Was 2 bytes shorter using split instead of explode, but ^ test fails due to regex.-8 thanks to Med
źródło
{
and}
from the for loop, it will only treat the next statement as body of the condition.$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);
Groovy, 43 bytes,
45 bytesTry it online. Test suite included excluding the last item as it lacks the separator char
c
.źródło
Go,
1389287 bytesDropped 46 bytes thanks to @Dennis' title case idea.
Try it online!
źródło
Husk, 10 bytes
Try it online!
Explanation
źródło
F# (Mono), 122 bytes
Try it online!
źródło
Java 10, 141 bytes
Try it online.
Explanation:
źródło
R, 87 bytes
Try it online!
Uses this trick can can not be properly executed in TIO so I simulated it.
We need the
T
otherwise one of the test cases fails.źródło
Stax, 11 bytes
Run and debug it
Explanation
There's a few parts I would really like to fix somehow. I can get it down to about 8 bytes, but it fails on the last test case >.<
źródło
Ruby
-pl
, 36 bytesTry it online!
Takes only the string without second argument. Uses the block version of
gsub!
method because with commongsub! x,y
syntax$1
is not readily filled with match data.|$
in regex is necessary for the test case with separator in the end.źródło
Python 3, 77 bytes
Try it online!
This assumes that the string is ASCII encoded and assumes that
s
andc
are preloaded variables containing the input.This solution works on the fact that in ASCII encoding, lowercase letters are positioned 32 entries after capitalised letters
Edit: i just realised that this also capitalises the first character in the string, which it shouldn't. but i'm quite proud of my nonsense, so i'll leave this up if that's allowed
źródło
s
supposed to be ?A string s and a character c.