Biorąc pod uwagę ciąg, wielkie litery. Przez wielkie litery mam na myśli conTeNT-lENgth
zmiany w Content-Length
. W przykładzie pokazałem ciąg z 2 wyrazami z -
jako granicą słowa. Jednak oczekuję, że napiszesz kod dla ciągu zawierającego dowolną liczbę słów oddzielonych pojedynczym znakiem jako granicę. Granica ta może się zmieniać w całym ciągu.
Warunki
- używanie nie
regular expressions
jest dozwolone . - w zdaniu (łańcuchu) może znajdować się dowolna liczba słów.
- każde słowo będzie się składać z
English
liter[a-zA-Z]
dowolnego przypadku. - różne słowa w zdaniu zostaną oddzielone pojedynczym znakiem. Postać ta będzie tylko być jednym z
-
,.
,<space-character>
,/
,&
,#
. Możesz bezpiecznie założyć, że zdanie nie będzie zawierało żadnej innej postaci oprócz wymienionych. - na wyjściu należy zachować granice słów.
- najkrótszy kod wygrywa.
Na przykład program powinien wypisać Begin/With.Type&Content
na BeGin/wITH.tyPE&conTeNt
.
Some test cases:
"aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe"
"type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe"
"cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc"
"lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT"
"contENT/ACcEpT"
"BeGin/wITH.tyPE&conTeNt"
"Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with"
"RaNgE&COnTeNT WITh CoNTENT-TypE tyPe"
"BEgin COdE#uSeR#aGeNt.USeR"
"TypE LENGth"
/CC/
w wierszu 2 lub-AND&
w wierszu 7) powinny zostać pozostawione same. Czy to w porządku w przypadku tego wyzwania?Odpowiedzi:
GolfScript,
362719 znakówCałkiem podstawowe podejście do GolfScript, które działa dla wszystkich danych wejściowych zgodnie ze specyfikacją. Przykłady można przetestować online .
źródło
Python 3,22
Ten kod pobierze ciąg jako dane wejściowe ze standardowego wejścia i przekaże standardowe wyjście na standardowe wyjście.
na przykład:
Wejście:
wyjście:
Poniższy kod dotyczy wejść wieloliniowych (w razie potrzeby)
Python 3, 46
źródło
while 1:print(input.title())
jest krótszym odpowiednikiem ostatniego fragmentu kodu.Mathematica 62
Dane
Kod
Stosowanie
źródło
%%
%%%
%
%%
JavaScript (94)
źródło
PHP:
78736564 znakówDane wejściowe są przekazywane
$s
. Działa na łańcuch jako tablica znaków.Jest to prosta maszyna 2-stanowa. Opiera się na leksykalnej kolejności ciągów, a parser automatycznie zakłada, że w niektórych przypadkach zamierzałeś wpisać ciąg.
Stan jest zapisywany
$b
i jest reprezentowany jako nazwa funkcji, którą należy wywołać dla następnego znaku.ucfirst
ilcfirst
są krótsze do pisania i mają identyczne zachowanie jakstrtolower
/strtoupper
na ciągach pojedynczych znaków. Ponadto, ponieważ różnią się tylko jedną literą, możemy je skutecznie wykorzystać do przechowywania stanu. Oryginalna wersja musiała jawnie przechowywać stan w logice.Ponieważ echo nie wypisuje niczego dla fałszu logicznego, użyłem przecinka i
!
operatora, aby „ukryć” przypisanie (które w tym przypadku jest prawdziwe) w instrukcji echo. To pozwoliło mi uratować postać poprzez usunięcie{}
.źródło
$b=ord($c)>64;
próbować$b=$c>"@";
. Lub nawet$b=$c>=A;
- AFAIR, który rzuca ostrzeżenie, ale dobre praktyki kodowania nie są tutaj zaletą.$b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}
.C, 83
Przyjmuje wiersze
stdin
, tłumaczy je nastdout
. (PreferujeSIGINT
sięEOF
).źródło
PowerShell: 37–43
W zależności od tego, jak chcesz wziąć wkład ...
Monituj użytkownika o wprowadzenie: 43
Pobieraj dane z rurociągu: 38
Podaj dane wejściowe jako argument podczas uruchamiania skryptu: 37
UWAGA: Powyższe skrypty zignorują słowa pisane wielkimi literami, pozostawiając je bez zmian. Jeśli trzeba to uwzględnić, dane wejściowe należy wymusić pisaniem małymi literami przed konwersją przypadku tytułowego. Dodaje to 10 znaków do pierwszej metody i 12 do pozostałych dwóch.
źródło
foo:bar
.:
(dwukropek) nie jest wymieniony jako separator słów w regule # 4, dlatego też AFAICS,foo:bar
powinno wynikaćFoo:bar
, nieFoo:Bar
. Ale to tylko moja (dość ścisła) lektura specyfikacji.get-culture
przezculture
; patrz codegolf.stackexchange.com/a/778/1308Java - 209 znaków
Dodałem znaki nowej linii tylko dla czytelności.
źródło
R,
143116Rozwiązanie może trochę długie, ale zaczynamy:
Nieco golfa i wyjaśniono:
Edycja : 116 znaków
Głównym wyzwaniem jest wektoryzacja
substr
. Oto inny mniej szczegółowy sposób.Zębaty:
Stosowanie:
źródło
a
składa się tylko z małych liter, nie ma potrzeby sprawdzania zgodności z dużymi literamiLETTERS
.TRUE
zT
.tolower
później.mapply(substr,tolower(x),n,n)
zstrsplit(tolower(x),"")[[1]]
uratować jeden znak.Befunge 98 -
2445Pisanie tego zraniło mój mózg.
To pobiera dane wejściowe
~
i jeśli poprzedni znak był jednym z separatorów (lub jeśli nie było wcześniejszego znaku), wykonuje sięTen fragment kodu przyjmuje postać, a jeśli jego wartość ascii jest większa lub równa
a
, odejmuje od niej 32, zmieniając w ten sposób na wielkie litery. Jeśli jest mniej niża
,3*j
pomija regulację. Następnie pomija następną część. Ta część obsługuje zmianę wielkich i małych liter (jestem pewien, że można ją połączyć z następną częścią; po prostu nie jestem pewien jak):Znak jest drukowany (
,
), a następnie sprawdza, czy znak jest jedną z granic:Zasadniczo porównuje znak do wartości ascii
/
. Jeśli znak nie jest granicą, kod przesuwa się,12
aby następnym razem pominąć dostosowanie wielkich liter.#
przeskakuje program końcowy:@
a jeśli osiągnięty zostanie koniec danych wejściowych,~
przesyła wykonanie kodu z powrotem do@
, kończąc program.źródło
Rubin:
60515047 znakówPrzykładowy przebieg:
źródło
l==l.swapcase
to samo col<?0
(nie testowane)? Przynajmniej dla danych wejściowych dozwolonych dla tego zadania.C # - 110
Proste przetwarzanie oparte na maszynie skończonej:
(gdzie
x
jeststring
kapitalizacja)i oczywiście, jeśli chcesz się nudzić (po aktualizacji specyfikacji), możesz użyć
lub z całą nudną płytą grzewczą:
źródło
Microsoft (R) Roslyn C# Compiler version 1.2.20906.1 Loading context from 'CSharpInteractive.rsp'. Type "#help" for more information. > "foobar".Aggregate(new{b=1>0,r=""},(s,c)=>new{b="-. /&#".Contains(c),r=s.r+(s.b?Char.ToUpper(c):Char.ToLower(c))}).r "Foobar"
Ale jeśli naprawdę zależy Ci na nudnym bojlerze, dodaj 112 znaków.public
istring[]a
zpublic
, ale potrzebuję argumentów, ponieważ to właśnie przetwarzam ...JavaScript 102
źródło
(
…)
wokół trójskładnika. Co więcej, nie musisz drugi trójskładnikowej:function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}
.Dalej, 135
Przetłumaczone dane wyjściowe są zapisywane
stdout
podczas odczytustdin
.źródło
Befunge-98 (29), C (65)
Ponieważ metoda / algorytm jest prawie taka sama, umieszczam obie wersje w tym samym poście. Oba polegają na śledzeniu, czy ostatni znak był symbolem czy literą, aby wiedzieć, czy litera ma być mała, czy nie.
Befunge-98 (29) C (65)źródło
05AB1E , 1 bajt
Kod:
Wyjaśnienie:
Wypróbuj online!
źródło
Znaki Excel VBA-11
W oknie Natychmiastowe
?[Proper()]
VBscript
źródło
=PROPER(A1)
również 11 bajtówAWK,
113103 bajtyDziała to dobrze w przypadku zawartości jednowierszowej, ale w przypadku wprowadzania wielowierszowego należy dodać kilka inits
Byłoby miło, gdybyśmy mogli skorzystać z automatycznego podziału rekordu na pola i zmodyfikować wspomniane pola, ale stracilibyśmy wtedy nasze separatory pól. :(
Wiem, że nie jest to najbardziej golfowa z odpowiedzi i jest to dość stare pytanie, ale czuję, że AWK jest niedostatecznie reprezentowany w przestrzeni odpowiedzi CG :)
(Dzięki @manatwork za testowanie kodu, powinno działać teraz :) Zmieniłem również przepływ, ale utrzymałem tę samą liczbę bajtów, zastępując niektóre
;
znakami nowej linii.)źródło
gawk
,mawk
anioriginal-awk
. (Testowane na Ubuntu.)gawk
na pudełku RHEL6, ale następnie został przepisany na okno systemu Windows. Bardzo dobrze może występować problem z transkrypcją. Spróbuję przetestować po pracy, kiedy będę mógł przetestować i opublikować na tym samym komputerze ... Wydaje mi się, że i tak widzę problem.l=0
powinien byćL=0
{for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1
.$0
i1
etykiety, aby uniknąćprint
polecenia, to rzeczy, o których nie myślałem. Będę musiał pamiętać o tym podczas przyszłego golfa :)PHP (> v5.4.32) - 25 znaków
<?=ucwords($a,'-. /&#')?>
Wyjaśnienie:
ucwords () to wbudowana funkcja PHP
Pierwszy parametr
$a
to wejścieDrugi parametr to delimetry (znaki nie alfabetyczne znalezione w przypadkach testowych)
Zakłada się powrót / echo / wydruk z powodu użycia
<?= ?>
Spinki do mankietów:
Plac zabaw dla kodu
Funkcja PHP ucwords ()
źródło
-R
: Wypróbuj online! lub 42 przy użyciu argumentów: Wypróbuj online!T-SQL, 179
Wypróbuj wersję SELECT w SQL Server 2012 tutaj .
Zamień „foo” na ciąg wejściowy. Liczba znaków dotyczy łańcucha zerowej długości. Ten kod przechodzi przez ciąg znaków, używając indeksu, górnego lub dolnego znaku w tej pozycji w oparciu o poprzedni znak.
źródło
JavaScript (Node.js) , 70 bajtów
Wypróbuj online!
Jestem pewien, że można to jeszcze pograć w golfa.
Uwaga :
Pobiera dane wejściowe przez
f(string)()
, ostatnie są wymagane, ale nie wykonują niczego.źródło
PowerShell,
7775 bajtówTo rozwiązanie w pełni spełnia zasady zadania (nawet dwuznaczny przykład
foo:bar
).Zobacz także rozwiązanie Powershell z wbudowaną funkcją ToTitleCase firmy @Iszi.
Wyjaśniony skrypt testowy:
Wynik:
źródło
QBasic, 74 bajty
Bajty są liczone w CP-437 ;
jest pojedynczym bajtem (kod znaku 20).
Metoda wprowadzania jest tutaj nieco dziwna: znaki są wpisywane pojedynczo, a ich wielkie litery są konwertowane przed ich wyświetleniem. Kiedy więc wpiszesz
aGeNT
, pojawi się na ekranie jakoAgent
. Trafienie Enterkończy program.źródło
Python 3 , 122 bajty
Wypróbuj online!
Nie jest to świetny wynik, ale chciałem go wypróbować bez wbudowanych operacji na łańcuchach do zmiany wielkości liter.
źródło
PHP - 23 znaki
Do działania potrzebuje php_mbstring
źródło
mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);
zwraca „Begin / with.type & content”, a nie „Begin / With.Type & Content”.