Capitalizzare la stringa


18

Dato una stringa, capitalizzala. Per capitalizzazione intendo le conTeNT-lENgthmodifiche a Content-Length. Nell'esempio ho mostrato la stringa con 2 parole con -come limite delle parole. Tuttavia mi aspetto che tu scriva il codice per la stringa contenente un numero qualsiasi di parole separate da un singolo carattere come limite. Questo limite può cambiare attraverso la stringa.

condizioni

  1. l'uso nonregular expressions è permesso .
  2. potrebbe esserci un numero qualsiasi di parole in una frase (stringa).
  3. ogni parola sarà composta da Englishlettere [a-zA-Z]di ogni caso.
  4. parole diverse nella frase saranno separate da un singolo carattere. Questo personaggio sarà solo essere uno qualsiasi di -, ., <space-character>, /, &, #. Puoi tranquillamente presumere che la frase non conterrà nessun altro personaggio tranne quelli menzionati.
  5. i confini delle parole dovrebbero essere preservati nell'output.
  6. vince il codice più breve.

Ad esempio, il tuo programma dovrebbe essere prodotto Begin/With.Type&Contentper 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
Quella che chiami maiuscola è in realtà una trasformazione in caso di cammello.
Pierre Arlaud,

6
@ArlaudPierre No, quello che gli è stato dato come "test case" è più simile al caso dei cammelli. Quello che viene chiamato capitalizzazione è più vicino al caso del titolo.
Iszi,

Potete fornire l'output previsto per i casi di test? Sembra che alcune funzioni integrate possano supporre che le parole in maiuscolo (come /CC/nella riga 2 o -AND&nella riga 7) debbano essere lasciate sole. Va bene, per questa sfida?
Iszi,

L'input inizia sempre con una parola o può iniziare con un separatore?
Lebatsnok,

Risposte:


7

GolfScript, 36 27 19 caratteri

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

Un approccio GolfScript piuttosto semplice che funziona per tutti gli input in base alle specifiche. Gli esempi possono essere testati online .


Freddo. Ero curioso di sapere se la mia soluzione è almeno doppia rispetto a quella professionale. :) Ma sono sicuro che lo accorcerai più volte prima che la giornata finisca.
arte

@manatwork Ora abbiamo un fattore due ;-) Ancora scontento di tutti gli swap.
Howard,

Sapevo che non mi deluderai.
arte

22

Python 3,22

print(input().title())

Questo codice prenderà una stringa come input da stdin e fornisce un output in maiuscolo a stdout.

per esempio:

ingresso:

BEGIN/wITH.tyPe&cOnTENt

ouput:

Begin/With.Type&Content

Il codice seguente è per gli ingressi multilinea (se necessario)

Python 3, 46

import sys
for i in sys.stdin:print(i.title())

while 1:print(input.title())è un equivalente più breve per l'ultimo pezzo di codice.
Ramchandra Apte,

1
@RamchandraApte Non sono sicuro che sia permesso o no. Il tuo codice morirà con un errore EOFE non appena colpisce l' EOF
Wasi il

1
Penso che il consenso generale per i golf sia che fino a quando l'output è corretto, gli errori non contano
Volatilità

Dang; non appena ho visto questa domanda, ci ho pensato, ma tu mi hai battuto. +1
Giustino,

+1 Mi piace di più di quello da golf perché non sembra un'oscenità.
Tim Seguine,

6

Mathematica 62

Dati

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

Codice

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

uso

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

"Tipo di intervallo utente di tipo accettazione / lunghezza agente"

f /@ tests

{"Tipo di intervallo utente di accettazione / tipo di lunghezza agente",
"Tipo e agente / Cc / Lunghezza contenuto # Accetta / Agente.Range-Cc / Contenuto / codice", "Tipo-lunghezza-codice-risposta -Cc / Responce.-User & Begin & User.Agent & Begin / Accetta / Cc "," Lunghezza # Tipo utente / Inizio e tipo di lunghezza / Accetta # Intervallo / Codice e E-Accetta / Contenuto "," Contenuto / Accetta ",
" Inizia / con Tipo e contenuto ",
" Codice.Cc # Utente.Lunghezza-Utente -End e Type Type & Length.Type User.User & With ",
" Range e Content With Content-Type Type ",
" Inizia Codice # User # Agent.User ",
" Type Length "}


-1 Questo è fondamentalmente regex
CalculatorFeline

Mathematica può eseguire direttamente regex ma ho usato qualcos'altro. È simile a regex, ma non è regex.
DavidC

%% %%% % %%
Calcolatrice

6

JavaScript (94)

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

5

PHP: 78 73 65 64 caratteri

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

L'ingresso è passato $s. Funziona sulla stringa come una matrice di caratteri.

È una semplice macchina a 2 stati. Si basa sull'ordinamento lessicale delle stringhe e sul fatto che il parser presuppone automaticamente che si intendesse digitare una stringa in alcuni casi.

Lo stato viene archiviato $be viene rappresentato come il nome della funzione che deve essere chiamata sul carattere successivo. ucfirste lcfirstsono più brevi da digitare e hanno un comportamento identico a strtolower/ strtouppersu stringhe di caratteri singoli. Inoltre, poiché differiscono solo per una lettera, possiamo usarli in modo efficiente per memorizzare lo stato. La versione originale doveva memorizzare esplicitamente lo stato in un valore booleano.

Poiché echo non stampa nulla per falso booleano, ho usato una virgola e l' !operatore per "nascondere" l'assegnazione (che in questo caso è vera) nell'istruzione echo. Questo mi ha permesso di salvare un personaggio rimuovendo il {}.


Si prega di utilizzare il markup del blocco di codice anziché il codice inline, in modo che script come Code Golf UserScript Enhancement Pack possano inserire le dimensioni sotto il codice. A proposito, nel tuo codice possono essere rimossi tutti e 3 i caratteri dello spazio.
arte

Invece di $b=ord($c)>64;provare $b=$c>"@";. O addirittura $b=$c>=A;- AFAIR che lancia un avvertimento, ma le buone pratiche di codifica non sono una virtù qui.
arte

@manatwork grazie, non ci ho pensato. Sto già lanciando un avvertimento per l'utilizzo di una variabile non impostata comunque.
Tim Seguine,

Hmm ... Che ne dici di non usare $ b solo come un flag, ma di memorizzare il nome della funzione attuale in esso? $b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}.
arte

@manatwork great! Stavo cercando di pensare a un modo per farlo con la funzione. I miei tentativi erano tutti più grandi.
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();}

Prende le linee stdin, le traduce in stdout. (Preferisce SIGINTa EOF.)


4

Powershell: 37-43

A seconda di come si desidera prendere l'input ...

Richiedi all'utente l'immissione: 43

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

Prendi input dalla pipeline: 38

(Culture).TextInfo.ToTitleCase($input)

Fornire input come argomento durante l'esecuzione dello script: 37

(Culture).TextInfo.ToTitleCase($args)

NOTA: gli script sopra citati ignoreranno le parole in maiuscolo, lasciandole così come sono. Se è necessario tenere conto di ciò, è necessario forzare l'input in minuscolo prima della conversione del Title Case. Ciò aggiunge 10 caratteri al primo metodo e 12 agli altri due.

(Culture).TextInfo.ToTitleCase((read-host).ToLower())
(Culture).TextInfo.ToTitleCase("$input".ToLower())
(Culture).TextInfo.ToTitleCase("$args".ToLower())

Non funziona secondo le specifiche. Prova foo:bar.
Mormegil,

@Mormegil Quale? La versione host di lettura, almeno, funziona bene per me. L'ho testato su tutti i casi di test nella domanda e tutti sono tornati come previsto, ad eccezione dei casi speciali che ho postato in commento alla domanda.
Iszi,

:(due punti) non è elencato come separatore di parole nella regola n. 4, pertanto, AFAICS, foo:bardovrebbe comportare Foo:bar, non Foo:Bar . Ma questa è solo la mia (piuttosto severa) lettura delle specifiche.
Mormegil,

2
@Mormegil Bene, questo è pulito. Sembra che le specifiche siano state ottimizzate per risolvere quell'ambiguità, ma allo stesso tempo non invalidare questa risposta.
Iszi,

1
È possibile sostituire get-culturecon culture; vedi codegolf.stackexchange.com/a/778/1308
Danko Durbić il

4

Java - 209 caratteri

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

Ho aggiunto newline solo per leggibilità.


3

R, 143 116

Una soluzione un po 'lunga forse ma eccoci qui:

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

Leggermente ungolfed e spiegato:

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

Modifica : 116 caratteri

La sfida principale qui è vettorializzare substr. Ecco un altro modo meno prolisso.

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

rientrato:

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
    }

Uso:

> f("aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe")
Agent Accept/Length-Type User Range.Type

Puoi salvare alcuni personaggi. Poiché è acomposto solo da caratteri minuscoli, non è necessario verificare la corrispondenza con caratteri maiuscoli LETTERS.
Sven Hohenstein,

@SvenHohenstein davvero, grazie!
plannapus,

Un altro: è possibile sostituire TRUEcon T.
Sven Hohenstein,

Inizialmente ho avuto il tolowerdopo.
plannapus,

OK, eccone un altro ;-) Puoi sostituirlo mapply(substr,tolower(x),n,n) con strsplit(tolower(x),"")[[1]]per salvare un personaggio.
Sven Hohenstein,

3

Befunge 98 - 24 45

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

Scrivere questo mi ha fatto male al cervello.

Questo prende input attraverso ~e se il carattere precedente era uno dei separatori (o se non c'era nessun carattere precedente), viene eseguito

:'``!3*j' -;

Questo frammento prende il carattere e se il suo valore ASCII è maggiore o uguale a a, sottrae 32 da esso, cambiandolo in maiuscolo. Se è inferiore a a, 3*jsalta la regolazione. Successivamente, salta la parte successiva. Questa parte gestisce il passaggio da maiuscole a minuscole (sono sicuro che può essere unita alla parte successiva; non sono sicuro di come):

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

Il carattere viene stampato ( ,), quindi verifica se il carattere è uno dei confini:

'/`!

In pratica confronta il carattere con il valore ASCII di /. Se il personaggio non è un limite, il codice spinge in 12modo che salterà la correzione delle maiuscole la volta successiva. #salta il programma finale:, @e se viene raggiunta la fine dell'input, ~rimanda l'esecuzione del codice a @, terminando il programma.


3

Rubino: 60 51 50 47 caratteri

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

Esecuzione di esempio:

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
Non è l==l.swapcaselo stesso di l<?0(non testato)? Almeno per l'input consentito per questa attività.
Howard,

Sì. Ora quel batman ha sottolineato che non ci si può aspettare altri separatori, anzi è più breve. Grazie, @Howard.
arte

2

C # - 110

Una semplice elaborazione basata su macchine a stati finiti:

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

(dov'è xil stringcapitalizzare)

e, naturalmente, se vuoi essere noioso (dopo che le specifiche sono state aggiornate), puoi usare

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

o, con tutto il noioso boilerplate:

class C{static void Main(string[]a){System.Console.WriteLine(new System.Globalization.CultureInfo(9).TextInfo.ToTitleCase(a[0]));}}

No, non verrà compilato poiché C # non è un linguaggio di scripting e devi incapsularlo in una classe.
Pierre Arlaud,

2
Dice chi? 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"Ma se ti interessa davvero la noiosa piastra della caldaia, aggiungi 112 caratteri.
Mormegil,

1
Puoi tagliare il publice string[]adalla
piastra della caldaia

Oh sì, hai ragione public, ma ho bisogno degli argomenti, dato che è quello che
elaboro

2

Javascript 102

prompt().split(o=q='').map(function(c){o+=(q)?c.toLowerCase():c.toUpperCase(),q=('A'>c)?0:1})
alert(o)

Non hai bisogno di (... )attorno alla condizione ternaria. Ancora di più, non è necessario il secondo ternario: function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}.
arte

2

Avanti, 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

L'output tradotto viene scritto nel modo stdoutin cui legge stdin.


1
"poi emetti di nuovo" in rima con avanti!
gatto

2

Befunge-98 (29), C (65)

Poiché il metodo / algoritmo è praticamente lo stesso, includo entrambe le versioni nello stesso post. Entrambi si basano sul tenere traccia del fatto che l'ultimo carattere fosse un simbolo o una lettera, al fine di sapere se minuscola o meno una lettera.

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

Caratteri Excel VBA-11

Nella finestra immediata

?[Proper()]

VBscript

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

Potresti fornire qualche aiuto sull'utilizzo? Viene visualizzato il messaggio "Errore di compilazione: nome esterno non definito". (In Word 2013 nella scheda Sviluppatore ho fatto clic su Visual Basic, quindi in Visual Basic, per applicazione ho copiato e incollato il codice nella finestra immediata e ho premuto Invio.)
manatwork

@manatwork Avrei dovuto chiarire che era in Excel. Puoi farlo da Word ma il percorso è più lungo in quanto è necessario automatizzare Excel.
Brettdj,

1
Freddo. Funziona perfettamente quando VBA viene avviato da Excel 2013.
manatwork

Funziona direttamente anche in Excel =PROPER(A1)
:,

1

AWK, 113 103 byte

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

Questo funziona bene per il contenuto a riga singola, ma per l'input multilinea è necessario aggiungere un paio di elementi

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

Sarebbe bello se potessimo trarre vantaggio dalla suddivisione automatica di un record in campi e dalla modifica di tali campi, ma perderemmo i separatori dei campi. :(

So che questa non è la risposta più golfosa e questa è una domanda piuttosto vecchia, ma sento che AWK è sottorappresentato nello spazio di risposta di CG :)

(Grazie a @manatwork per aver testato il codice, dovrebbe funzionare ora :) Anche cambiato il flusso ma mantenendo lo stesso numero di byte, sostituendone alcuni ;con nuove righe.)


1
Sei sicuro? Nessuno dei codici sembra produrre l'output richiesto né con gawk, mawkoriginal-awk. (Testato su Ubuntu.)
manat

È stato scritto usando gawksu una scatola RHEL6, ma poi trascritto in una finestra di Windows. Potrebbe esserci benissimo un problema di trascrizione. Proverò i test dopo il lavoro quando posso fare test e post sulla stessa macchina .... Penso di vedere comunque il problema. l=0dovrebbe essereL=0
Robert Benson il

Spero che funzioni ora, @manatwork. Grazie per il test. :)
Robert Benson,

1
Ora sembra funzionare correttamente. Non ho controllato tutti i casi di test, ma sembra essere possibile ridurlo un po ': {for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1.
arte

Mi piace il tuo uso del cambiamento $0e l' 1etichetta per evitare il printcomando sono cose che non ho pensato di fare. Dovrò tenerlo a mente per il futuro golf :)
Robert Benson,

1

PHP (> v5.4.32) - 25 caratteri

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

Spiegazione:

  • ucwords () è una funzione PHP integrata

  • Il primo parametro $aè l'input

  • Il secondo parametro sono i delimitatori (caratteri non alfabetici trovati nei casi di test)

  • Il ritorno / eco / stampa è assunto a causa dell'uso di <?= ?>

link:


1
Ciao e benvenuto nel sito! Penso che al momento questo sia uno snippet che non è consentito per impostazione predefinita, ma puoi ottenere 41 byte come programma completo usando -R: Provalo online! o 42 usando argomenti: provalo 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

Prova la versione SELEZIONA in SQL Server 2012 qui .

Sostituisci "pippo" con la stringa di input. Il conteggio dei caratteri è per una stringa di lunghezza zero. Questo codice attraversa la stringa utilizzando un indice, maiuscolo o minuscolo in quella posizione in base al carattere precedente.


0

JavaScript (Node.js) , 70 byte

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

Provalo online!

Sono sicuro che questo può essere ulteriormente migliorato.

Nota :

Accetta input tramite f(string)(), gli ultimi sono richiesti ma non eseguono nulla.


0

Powershell, 77 75 byte

Questa soluzione soddisfa pienamente le regole dell'attività (anche un esempio ambiguo foo:bar).

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

Vedi anche la soluzione Powershell con funzione integrata ToTitleCase di @Iszi.

Script di test spiegato:

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

Produzione:

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 byte

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

I byte vengono contati in CP-437 ; è un singolo byte (codice carattere 20).

Il metodo di input qui è un po 'strano: i caratteri vengono digitati uno alla volta e la loro maiuscola viene convertita prima di essere visualizzata. Quindi, quando si digita aGeNT, appare sullo schermo come Agent. Colpire Entertermina il programma.


0

Python 3 , 122 byte

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

Provalo online!

Non è un ottimo punteggio, ma volevo provarlo senza operazioni di stringa incorporate per la modifica dei casi.


-2

PHP - 23 caratteri

mb_convert_case ($ w, 2);

Ha bisogno di php_mbstring per funzionare


1
Sul mio 5.3.26 mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);restituisce "Begin / with.type & content", non "Begin / With.Type & Content".
arte
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.