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"

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 .


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())

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 "}


-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('')

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 {}.


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.)


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())

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.


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

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.


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

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]));}}

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)

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.


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);}


1

Excel VBA-11-Zeichen

Im Sofortfenster

?[Proper()]

VBscript

Set xlapp = CreateObject("excel.application")
wscript.echo xlapp.Evaluate("Proper(""BeGin/wITH.tyPE&conTeNt"")"

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.)


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:


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.



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

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.


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.


-2

PHP - 23 Zeichen

mb_convert_case ($ w, 2);

Es braucht php_mbstring um zu funktionieren


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.