Zeichenfolge großschreiben

18

Wenn Sie eine Zeichenfolge angegeben haben, aktivieren Sie diese. Mit Großschreibung meine ich conTeNT-lENgthÄnderungen an Content-Length. Im Beispiel habe ich die Zeichenkette mit 2 Wörtern -als Wortgrenze gezeigt. Ich erwarte jedoch, dass Sie den Code für die Zeichenfolge schreiben, die eine beliebige Anzahl von Wörtern enthält, die durch ein einzelnes Zeichen als Begrenzung getrennt sind. Diese Grenze kann sich in der Zeichenfolge ändern.

Bedingungen

  1. Verwenden regular expressionsist nicht erlaubt .
  2. Ein Satz kann beliebig viele Wörter enthalten.
  3. Jedes Wort wird in jedem Fall aus EnglishBuchstaben bestehen [a-zA-Z].
  4. Verschiedene Wörter im Satz werden durch ein einzelnes Zeichen getrennt. Dieser Charakter wird nur sein , einer der -, ., <space-character>, /, &, #. Sie können sicher , dass Satz davon ausgehen , nicht andere Zeichen außer den genannten diejenigen enthalten.
  5. Wortgrenzen sollten in der Ausgabe erhalten bleiben.
  6. kürzester Code gewinnt.

Zum Beispiel sollte Ihr Programm Ausgang Begin/With.Type&Contentfür 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"
Batman
quelle
2
Was Sie als Großschreibung bezeichnen, ist eigentlich eine Umwandlung in Kamelfall.
Pierre Arlaud
6
@ArlaudPierre Nein, was er als "Testfälle" bezeichnet, ist eher ein Kamelfall. Was als Groß- und Kleinschreibung bezeichnet wird, kommt der Groß- und Kleinschreibung näher.
Iszi
Können Sie bitte die erwartete Ausgabe für die Testfälle bereitstellen? Es scheint, dass einige integrierte Funktionen davon ausgehen können, dass Wörter mit Großbuchstaben (wie /CC/in Zeile 2 oder -AND&in Zeile 7) in Ruhe gelassen werden sollten. Ist das in Ordnung für diese Herausforderung?
Iszi
Beginnt die Eingabe immer mit einem Wort oder mit einem Trennzeichen?
Lebatsnok

Antworten:

7

GolfScript, 36 27 19 Zeichen

0\{95&+.47>32*\}%\;

Ein recht einfacher GolfScript-Ansatz, der für alle Eingaben gemäß der Spezifikation funktioniert. Die Beispiele können online getestet werden .

Howard
quelle
Cool. War gespannt, ob meine Lösung mindestens doppelt so professionell ist. :) Aber ich bin mir sicher, dass Sie dies mehrmals abkürzen werden, bevor der Tag endet.
Manatwork
@manatwork Jetzt haben wir den Faktor zwei ;-) Immer noch unzufrieden mit all den Swaps.
Howard
Ich wusste, dass du mich nicht enttäuschen wirst.
Manatwork
22

Python 3,22

print(input().title())

Dieser Code nimmt eine Zeichenfolge als Eingabe von stdin und gibt stdout eine Ausgabe in Großbuchstaben.

beispielsweise:

Eingang:

BEGIN/wITH.tyPe&cOnTENt

Ausgabe:

Begin/With.Type&Content

Der folgende Code gilt für mehrzeilige Eingänge (falls erforderlich)

Python 3, 46

import sys
for i in sys.stdin:print(i.title())
War ich
quelle
while 1:print(input.title())ist eine kürzere Entsprechung für das letzte Stück Code.
Ramchandra Apte
1
@ RamchandraApte Ich bin nicht sicher, ob es erlaubt ist oder nicht. Ihr Code stirbt mit einem EOFError , sobald er den EOF
Wasi
1
Ich denke, der allgemeine Konsens für Golf ist, dass, solange die Ausgabe korrekt ist, Fehler keine Rolle spielen
Volatilität
Dang; Sobald ich diese Frage sah, dachte ich darüber nach, aber du hast mich geschlagen. +1
Justin
+1 Mir gefällt das besser als das Golfscript, weil es nicht wie eine Obszönität aussieht.
Tim Seguine
6

Mathematica 62

Daten

tests={"aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe","type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe","cc/rEspoNCe.lEngtH#tYpEwitH&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"}

Code

StringReplace[ToLowerCase@#,WordBoundary~~x_:>ToUpperCase@x]&

Verwendung

f["aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe"]

"Agent Accept / Length-Type User Range.Type"

f /@ tests

{"Agent akzeptieren / Länge-Typ Benutzer Range.Type",
"Typ & Agent / Cc / Inhalt Länge # Accept / Agent.Range-Cc / Inhalt / Code", "Cc / Responce.Length # Typ-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 -Und & Type Type & Length.Type User.User & With ",
" Range & Content With Content-Type Type ",
" Begin Code # User # Agent.User ",
" Type Length "}

DavidC
quelle
-1 Das ist im Grunde genommen Regex
CalculatorFeline
Mathematica kann Regex direkt ausführen, aber ich habe etwas anderes verwendet. Es ist ähnlich wie Regex, aber es ist nicht Regex.
DavidC
%% %%% % %%
CalculatorFeline
6

JavaScript (94)

prompt().split(l='').map(function(a){return l='A'>l?a.toUpperCase():a.toLowerCase()}).join('')
quietmint
quelle
5

PHP: 78 73 65 64 Zeichen

$b=ucfirst;foreach(str_split($s)as$c)echo$b($c),!$b[0]=$c<A?u:l;

Die Eingabe wird übergeben $s. Die Zeichenfolge wird als Array von Zeichen verarbeitet.

Es ist eine einfache 2-Zustandsmaschine. Es basiert auf der lexikalischen Reihenfolge von Zeichenfolgen, und der Parser geht automatisch davon aus, dass Sie in einigen Fällen eine Zeichenfolge eingeben möchten.

Der Status wird in gespeichert $bund als Name der Funktion dargestellt, die beim nächsten Zeichen aufgerufen werden muss. ucfirstund lcfirstsind kürzer zu geben und ein identisches Verhalten haben strtolower/ strtoupperauf einzelne Zeichenkette. Da sie sich nur durch einen Buchstaben unterscheiden, können wir sie auch effizient zum Speichern des Status verwenden. Die Originalversion, die benötigt wird, um den Status explizit in einem Booleschen Wert zu speichern.

Da echo für boolean false nichts ausgibt, habe ich ein Komma und den !Operator verwendet, um die Zuordnung (die in diesem Fall wahr ist) in der echo-Anweisung "auszublenden". Dadurch konnte ich ein Zeichen speichern, indem ich das entfernte {}.

Tim Seguine
quelle
Verwenden Sie Code Block Markup anstelle von Inline-Code, damit Skripte wie Code Golf UserScript Enhancement Pack die Größe unter dem Code einfügen können. Übrigens können in Ihrem Code alle 3 Leerzeichen entfernt werden.
Manatwork
Anstatt es zu $b=ord($c)>64;versuchen $b=$c>"@";. Oder sogar $b=$c>=A;- AFAIR, die eine Warnung auslöst, aber gute Codierungspraktiken sind hier keine Tugend.
manatwork
@manatwork danke, habe nicht daran gedacht. Ich warne bereits davor, eine nicht gesetzte Variable zu verwenden.
Tim Seguine
Hmm ... Wie wäre es, wenn Sie $ b nicht nur als Flag verwenden, sondern den eigentlichen Funktionsnamen darin speichern? $b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}.
manatwork
@manatwork großartig! Ich habe versucht, mir einen Weg zu überlegen, wie ich das mit der Funktion machen kann. Meine Versuche waren alle größer.
Tim Seguine
4

C 83

n;main(c){c=getchar();putchar(c>96?n?c:(n=c-32):c&64?n?c+32:(n=c):(n=0,c));main();}

Übernimmt Zeilen stdin, übersetzt sie in stdout. (Prefers SIGINTan EOF.)

Darren Stone
quelle
4

Powershell: 37 - 43

Je nachdem, wie Sie die Eingabe übernehmen möchten ...

Benutzer zur Eingabe auffordern: 43

(Culture).TextInfo.ToTitleCase((read-host))

Eingaben aus der Pipeline übernehmen: 38

(Culture).TextInfo.ToTitleCase($input)

Geben Sie beim Ausführen des Skripts Folgendes als Argument ein: 37

(Culture).TextInfo.ToTitleCase($args)

HINWEIS: Die obigen Skripte ignorieren Wörter mit Großbuchstaben und lassen sie unverändert . Wenn dies berücksichtigt werden muss, sollte die Eingabe vor der Konvertierung in Groß- und Kleinschreibung erzwungen werden. Dies fügt der ersten Methode 10 Zeichen und den beiden anderen 12 hinzu.

(Culture).TextInfo.ToTitleCase((read-host).ToLower())
(Culture).TextInfo.ToTitleCase("$input".ToLower())
(Culture).TextInfo.ToTitleCase("$args".ToLower())
Iszi
quelle
Funktioniert nicht entsprechend der Spezifikation. Versuchen Sie es foo:bar.
Mormegil
@ Mormegil Welches? Zumindest die Read-Host-Version funktioniert gut für mich. Ich habe es mit allen Testfällen in der Frage getestet und sie sind alle wie erwartet zurückgekehrt, mit Ausnahme der Sonderfälle, die ich im Kommentar zur Frage gepostet habe.
Iszi
:(Kolon) nicht als Worttrennzeichen in der Regel # 4 aufgeführten daher AFAICS, foo:barführen soll Foo:bar, nicht Foo:Bar . Aber das ist nur meine (ziemlich strenge) Lektüre der Spezifikation.
Mormegil
2
@ Mormegil Nun, das ist ordentlich. Es sieht so aus, als ob die Spezifikation optimiert wurde, um diese Mehrdeutigkeit zu beheben, ohne diese Antwort zu ungültig zu machen.
Iszi
1
Sie können ersetzen get-culturedurch culture; siehe codegolf.stackexchange.com/a/778/1308
Danko Durbić
4

Java - 209 Zeichen

class C{
public static void main(String[]a){
for(String b:a){
char[]k=b.toLowerCase().toCharArray();
for(int i=-1;i<k.length;i++){if(i<0||"-. /&#".indexOf(k[i])>=0)k[++i]=(char)(k[i]-32);}
System.out.println(k);}}}

Ich habe Zeilenumbrüche nur zur besseren Lesbarkeit hinzugefügt.

True Soft
quelle
3

R 143 116

Eine Lösung vielleicht ein bisschen lang, aber jetzt geht es los:

f=function(x){a=sapply(1:nchar(x),function(y)substr(tolower(x),y,y));d=c(1,which(!a%in%letters)+1);a[d]=toupper(a[d]);cat(a,sep="")}

Leicht ungolfed und erklärt:

f <- function(x){
    #Split the string in characters and "lower-case" everything
    a <- sapply(1:nchar(x),function(y)substr(tolower(x),y,y))
    #Select the first character and each character following a 
    #character that doesn't belong to lower case alphabet
    d <- c(1,which(!a%in%letters)+1)
    #Make those ones uppercase.
    a[d] <- toupper(a[d])
    #Output (stdout) while pasting them back together.
    cat(a,sep="")
    }

Bearbeiten : 116 Zeichen

Die größte Herausforderung hierbei ist die Vektorisierung substr. Hier ist ein weiterer, weniger ausführlicher Weg.

f=function(x){n=1:nchar(x);a=mapply(substr,tolower(x),n,n);d=c(T,!a%in%letters);a[d]=toupper(a[d]);cat(a[n],sep="")}

Eingerückt:

f <- function(x){
    n <- 1:nchar(x)
    a <- mapply(substr,tolower(x),n,n)
    d <- c(T,!a%in%letters) #This has been simplified as well
    a[d] <- toupper(a[d])
    cat(a[n],sep="") #Because a is now 1 char longer than x, need to subset a
    }

Verwendung:

> f("aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe")
Agent Accept/Length-Type User Range.Type
Plannapus
quelle
Sie können einige Zeichen speichern. Da es sich anur um Kleinbuchstaben handelt, muss nicht nach Übereinstimmungen mit Großbuchstaben gesucht werden LETTERS.
Sven Hohenstein
@SvenHohenstein ja danke!
Plannapus
Eine andere: Sie können ersetzen TRUEmit T.
Sven Hohenstein
Ursprünglich hatte ich das tolowerspäter.
Plannapus
OK, hier ist ein anderes ;-) Sie können ersetzen mapply(substr,tolower(x),n,n) mit strsplit(tolower(x),"")[[1]]einem Zeichen zu speichern.
Sven Hohenstein
3

Befunge 98 - 24 45

~\j:'``!3*j' -;:'``b*j:'/`!3*j' +#;:,'/`!jc#@

Das zu schreiben hat mein Gehirn verletzt.

Dies nimmt Eingaben durch ~und wenn das vorherige Zeichen eines der Trennzeichen war (oder wenn es kein vorheriges Zeichen gab), wird es ausgeführt

:'``!3*j' -;

Dieses Snippet nimmt das Zeichen und asubtrahiert , wenn sein ASCII-Wert größer oder gleich ist , 32 davon, wodurch es in Großbuchstaben geändert wird. Wenn es kleiner als ist a, wird 3*jdie Anpassung übersprungen. Danach wird der nächste Teil übersprungen. Dieser Teil behandelt den Wechsel von Groß- zu Kleinschreibung (ich bin mir sicher, dass er mit dem nächsten Teil zusammengeführt werden kann; ich bin mir nur nicht sicher, wie):

:'``b*j:'/`!3*j' +#;

Das Zeichen wird gedruckt ( ,), dann wird geprüft, ob das Zeichen eine der Grenzen ist:

'/`!

Es vergleicht im Grunde das Zeichen mit dem ASCII-Wert von /. Wenn das Zeichen keine Grenze ist, wird der Code gedrückt, 12sodass die Anpassung der Großschreibung beim nächsten Mal übersprungen wird. #überspringt das Programmende: @und ~sendet , wenn das Ende der Eingabe erreicht ist, die Codeausführung zurück an @das Programmende.

Justin
quelle
3

Ruby: 60 51 50 47 Zeichen

$_.downcase.chars{|c|$><<$/=$/<?0?c.upcase: c}

Probelauf:

bash-4.1$ for line in "${test[@]}"; do printf '%-75s | %s\n' "$line" "$( ruby -ne '$_.downcase.chars{|c|$><<$/=$/<?0?c.upcase: c}' <<< "$line" )"; done
aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe                                    | Agent Accept/Length-Type User Range.Type
type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe             | Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code
cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc          | Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc
lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT     | Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content
contENT/ACcEpT                                                              | Content/Accept
BeGin/wITH.tyPE&conTeNt                                                     | Begin/With.Type&Content
Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with           | Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With
RaNgE&COnTeNT WITh CoNTENT-TypE tyPe                                        | Range&Content With Content-Type Type
BEgin COdE#uSeR#aGeNt.USeR                                                  | Begin Code#User#Agent.User
TypE LENGth                                                                 | Type Length
Mann bei der Arbeit
quelle
1
Ist das nicht l==l.swapcasedasselbe wie l<?0(nicht getestet)? Zumindest für die für diese Aufgabe zulässige Eingabe.
Howard
Ja. Nun, da Batman betonte, dass keine anderen Separatoren zu erwarten sind, ist das tatsächlich kürzer. Vielen Dank, @Howard.
Manatwork
2

C # - 110

Eine einfache maschinenbasierte Verarbeitung:

x.Aggregate(new{b=1>0,r=""},(s,c)=>new{b="-. /&#".Contains(c),r=s.r+(s.b?Char.ToUpper(c):Char.ToLower(c))}).r

(wo xist das stringzu kapitalisieren)

und natürlich, wenn Sie langweilig sein möchten (nachdem die Spezifikation aktualisiert wurde), können Sie verwenden

new CultureInfo(9).TextInfo.ToTitleCase(x)

oder mit dem ganzen langweiligen Boilerplate:

class C{static void Main(string[]a){System.Console.WriteLine(new System.Globalization.CultureInfo(9).TextInfo.ToTitleCase(a[0]));}}
Mormegil
quelle
Nein, wird nicht kompiliert, da C # keine Skriptsprache ist und Sie dies in einer Klasse einkapseln müssen.
Pierre Arlaud
2
Sagt wer? 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"Aber wenn Sie sich wirklich für die langweilige Kesselplatte interessieren, fügen Sie 112 Zeichen hinzu.
Mormegil
1
Sie können die publicund string[]avon der Kesselplatte
schneiden
Oh ja, Sie haben Recht public, aber ich brauche die Argumente, da ich das verarbeite ...
Mormegil
2

Javascript 102

prompt().split(o=q='').map(function(c){o+=(q)?c.toLowerCase():c.toUpperCase(),q=('A'>c)?0:1})
alert(o)
Wolfhammer
quelle
Sie brauchen keine (... )um die ternäre Bedingung. Noch mehr, müssen Sie nicht die zweite ternäre: function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}.
Manatwork
2

Forth, 135

: s swap ;
: c 1 begin key dup 96 > if s if 32 - then 0 s 
else dup 64 > if s 0= if 32 + then 0 s then else 1 s then then emit again ; c

Die übersetzte Ausgabe wird beim stdoutLesen geschrieben stdin.

Darren Stone
quelle
1
"dann dann wieder ausstrahlen" mit weiter reimen!
Katze
2

Befunge-98 (29), C (65)

Da die Methode / der Algorithmus ziemlich gleich ist, füge ich beide Versionen in den gleichen Beitrag ein. Beide verlassen sich darauf, zu verfolgen, ob das letzte Zeichen ein Symbol oder ein Buchstabe war, um zu wissen, ob ein Buchstabe in Kleinbuchstaben geschrieben werden muss oder nicht.

Befunge-98 (29)
#@~:'0` #v_,0>
',++@'% '<   ^
C (65)
c,d;main(){for(;~(c=getchar());d=c>48)putchar(c<48?c:c&95|32*d);}
FireFly
quelle
2

05AB1E , 1 Byte

Code:

Erläuterung:

™   # Implicit input which is converted to title case.

Probieren Sie es online!

Adnan
quelle
Das ist ziemlich cool :-)
Batman
1

Excel VBA-11-Zeichen

Im Sofortfenster

?[Proper()]

VBscript

Set xlapp = CreateObject("excel.application")
wscript.echo xlapp.Evaluate("Proper(""BeGin/wITH.tyPE&conTeNt"")"
brettdj
quelle
Könnten Sie Hilfe bei der Verwendung geben? Ich erhalte die Meldung "Kompilierungsfehler: Externer Name nicht definiert". (In Word 2013 habe ich auf der Registerkarte Entwickler auf Visual Basic geklickt und dann in Visual Basic für Applikationen Ihren Code in das
Direktfenster kopiert
@manatwork Ich hätte klarstellen sollen, dass es in Excel war. Sie können dies in Word tun, aber der Pfad ist länger, da Sie Excel automatisieren müssen.
Brettdj
1
Cool. Funktioniert einwandfrei, wenn VBA in Excel 2013 gestartet wird.
manatwork
Funktioniert auch direkt in Excel =PROPER(A1)
:,
1

AWK, 113 103 Bytes

{for(;++i<=split($0,a,"");){s=a[i]
O=O (L?tolower(s):toupper(s))
L=1
if(index("-. /&#",s))L=0}print O}

Dies funktioniert gut für einzeiligen Inhalt, aber für mehrzeilige Eingaben müssen ein paar Inits hinzugefügt werden

{O=""
for(L=0;++i<=split($0,a,"");){s=a[i]
O=O (L?tolower(s):toupper(s))
L=1
if(index("-. /&#",s))L=0}print O}

Es wäre schön, wenn wir die automatische Aufteilung eines Datensatzes in Felder und die Änderung dieser Felder nutzen könnten, aber wir würden dann unsere Feldtrennzeichen verlieren. :(

Ich weiß, dass dies nicht die golfenste Antwort ist, und dies ist eine ziemlich alte Frage, aber ich habe das Gefühl, dass AWK im Antwortbereich von CG unterrepräsentiert ist :)

(Vielen Dank an @manatwork für das Testen des Codes, er sollte jetzt funktionieren :) Auch der Ablauf wurde geändert, aber die Anzahl der Bytes wurde beibehalten, indem einige ;durch neue Zeilen ersetzt wurden.)

Robert Benson
quelle
1
Bist du sicher? Keiner der Codes scheint die erforderliche Ausgabe zu erzeugen, weder mit gawk, mawknoch original-awk. (Getestet auf Ubuntu.)
manatwork
Es wurde unter Verwendung gawkeiner RHEL6-Box geschrieben, dann aber in eine Windows-Box transkribiert. Es könnte sehr wohl ein Transkriptionsproblem geben. Ich werde versuchen, nach der Arbeit zu testen, wenn ich auf demselben Computer testen und veröffentlichen kann. Ich glaube, ich sehe das Problem trotzdem. l=0sollte seinL=0
Robert Benson
Hoffentlich funktioniert es jetzt, @manatwork. Danke für den Test. :)
Robert Benson
1
Scheint jetzt richtig zu funktionieren. Nicht geprüft alle Testfälle, aber es scheint möglich zu sein , es ein wenig zu reduzieren: {for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1.
Manatwork
Ich mag es, wenn Sie Änderungen vornehmen $0und das 1Label, um den printBefehl zu umgehen, Dinge sind, an die ich nicht gedacht habe. Ich muss es für künftiges Golfen im Hinterkopf behalten :)
Robert Benson
1

PHP (> v5.4.32) - 25 Zeichen

<?=ucwords($a,'-. /&#')?>

Erläuterung:

  • ucwords () ist eine integrierte PHP-Funktion

  • Erster Parameter $aist die Eingabe

  • Zweiter Parameter sind Delimeter (Nicht-Alphabet-Chat-Zeichen, die in Testfällen gefunden wurden)

  • Return / Echo / Print wird aufgrund der Verwendung von angenommen <?= ?>

Links:

jpl42
quelle
1
Hallo und willkommen auf der Seite! Ich denke, im Moment ist dies ein Ausschnitt, der standardmäßig nicht erlaubt ist, aber Sie können 41 Bytes als vollständiges Programm erhalten, indem Sie Folgendes verwenden -R: Probieren Sie es online aus! oder 42 mit Argumenten: Probieren Sie es online!
Dom Hastings
0

T-SQL, 179

DECLARE @T VARCHAR(MAX)='foo',@X VARCHAR(2),@ INT=0WHILE @<LEN(@T)SELECT @X=SUBSTRING(@T,@,2),@+=1,@T=STUFF(@T,@,1,IIF(@X LIKE'[a-Z]_',LOWER(RIGHT(@X,1)),UPPER(RIGHT(@X,1))))PRINT @T

Probieren Sie hier die SELECT-Version in SQL Server 2012 aus .

Ersetzen Sie "foo" durch die Eingabezeichenfolge. Die Zeichenanzahl gilt für eine Zeichenfolge mit der Länge Null. Dieser Code durchläuft die Zeichenfolge unter Verwendung eines Index, wobei das Zeichen an dieser Position anhand des vorherigen Zeichens groß oder klein geschrieben wird.

Muqo
quelle
0

JavaScript (Node.js) , 70 Byte

c=>a=>c.split``.map(b=>a="A">a?b.toUpperCase():b.toLowerCase()).join``

Probieren Sie es online!

Ich bin mir sicher, dass dies weiter golfen werden kann.

Hinweis :

Nimmt Eingaben über f(string)(), die letzten sind erforderlich, führen aber nichts aus.

Muhammad Salman
quelle
0

Powershell, 77 75 Bytes

Diese Lösung erfüllt die Aufgabenregeln vollständig (auch bei mehrdeutigen Beispielen foo:bar).

-join($args|% t*y|%{"$_"|%('ToU*r','ToL*r')[+$l];$l=!('# -./&'|% Co*s $_)})

Siehe auch die Powershell-Lösung mit integrierter Funktion ToTitleCase von @Iszi.

Erklärtes Testskript:

$f = {

-join(
$args|% t*y|%{                   # for each char from input string
    "$_"|%('ToU*r','ToL*r')[+$l] # evaluate ToUpper or ToLower method depend on $l (lower) value
                                 # Note the variable $l is not defined for a first char
                                 # so it evaluates toUpper for the first char 
    $l=!('# -./&'|% Co*s $_)     # golfed form for $l=!'# -./&'.Contains($_) expression
                                 # =0 if the current char is specified separator (toUpper for next char)
}                                # =1 otherwise (toLower for next char)
)                                # finally, join all chars to a result string

}

@(
    ,('foo:bar'                                                                 ,'Foo:bar')
    ,('aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe'                                ,'Agent Accept/Length-Type User Range.Type')
    ,('type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe'         ,'Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code')
    ,('cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc'      ,'Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc')
    ,('lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT' ,'Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content')
    ,('contENT/ACcEpT'                                                          ,'Content/Accept')
    ,('BeGin/wITH.tyPE&conTeNt'                                                 ,'Begin/With.Type&Content')
    ,('Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with'       ,'Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With')
    ,('RaNgE&COnTeNT WITh CoNTENT-TypE tyPe'                                    ,'Range&Content With Content-Type Type')
    ,('BEgin COdE#uSeR#aGeNt.USeR'                                              ,'Begin Code#User#Agent.User')
    ,('TypE LENGth'                                                             ,'Type Length')
) | % {
    $s,$e = $_
    $r = &$f $s
    "$($r-ceq$e): $r"
}

Ausgabe:

True: Foo:bar
True: Agent Accept/Length-Type User Range.Type
True: Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code
True: Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc
True: Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content
True: Content/Accept
True: Begin/With.Type&Content
True: Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With
True: Range&Content With Content-Type Type
True: Begin Code#User#Agent.User
True: Type Length
mazzy
quelle
0

QBasic, 74 Bytes

1c$=LCASE$(INPUT$(1))
IF f=0THEN c$=UCASE$(c$)
f=c$>"@
?c$;
IF""<c$GOTO 1

Bytes werden in CP-437 gezählt ; ist ein einzelnes Byte (Zeichencode 20).

Die Eingabemethode ist hier etwas seltsam: Zeichen werden einzeln eingegeben und ihre Groß- und Kleinschreibung wird konvertiert, bevor sie angezeigt werden. Wenn Sie also etwas eingeben aGeNT, wird es auf dem Bildschirm als angezeigt Agent. Schlagen Enterbeendet das Programm.

DLosc
quelle
0

Python 3 , 122 Bytes

lambda s:''.join(chr(ord(c)+[[0,0],[0,32],[-32,0]][('@'<c<'[')-('`'<c<'{')]['@'<p<'['or'`'<p<'{'])for c,p in zip(s,'-'+s))

Probieren Sie es online!

Keine gute Punktzahl, aber ich wollte es versuchen, ohne eingebaute Zeichenfolgenoperationen zum Ändern der Groß- / Kleinschreibung.

Matthew Jensen
quelle
-2

PHP - 23 Zeichen

mb_convert_case ($ w, 2);

Es braucht php_mbstring um zu funktionieren

Mattecapu
quelle
1
In meinem 5.3.26 wird mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);"Begin / With.Type & Content" zurückgegeben, nicht "Begin / With.Type & Content".
Manatwork