Letras maiúsculas

18

Dada uma string, coloque-a em maiúscula. Por maiúscula, quero dizer conTeNT-lENgthalterações em Content-Length. No exemplo, mostrei a string com 2 palavras com -o limite da palavra. No entanto, espero que você escreva o código da string que contém qualquer número de palavras separadas por um único caractere como limite. Esse limite pode mudar na cadeia.

Condições

  1. nãoregular expressions é permitido usar .
  2. pode haver qualquer número de palavras em uma frase (string).
  3. cada palavra consistirá em Englishletras [a-zA-Z]de qualquer caso.
  4. palavras diferentes na frase serão separadas por um único caractere. Este personagem vai unicamente ser qualquer um de -, ., <space-character>, /, &, #. Você pode assumir com segurança que a sentença não conterá nenhum outro caractere, exceto os mencionados.
  5. limites de palavras devem ser preservados na saída.
  6. o código mais curto vence.

Por exemplo, seu programa deve gerar Begin/With.Type&Contentpara 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"
homem Morcego
fonte
2
O que você chama de capitalização é na verdade uma transformação em estojo de camelo.
Pierre Arlaud
6
@ArlaudPierre Não, o que ele deu como "casos de teste" é mais como um caso de camelo. O que está sendo chamado de capitalização está mais próximo do título.
Iszi
Você pode fornecer a saída esperada para os casos de teste? Parece que algumas funções internas podem assumir que palavras com maiúsculas (como /CC/na linha 2 ou -AND&na linha 7) devem ser deixadas em paz. Tudo bem, para este desafio?
Iszi
A entrada sempre começa com uma palavra ou pode começar com um separador?
Lebatsnok

Respostas:

7

GolfScript, 36 27 19 caracteres

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

Uma abordagem bastante básica do GolfScript que funciona para todas as entradas de acordo com a especificação. Os exemplos podem ser testados online .

Howard
fonte
Legal. Estava curioso para saber se minha solução é pelo menos duas vezes mais profissional. :) Mas tenho certeza que você diminuirá isso várias vezes antes do final do dia.
Manatwork
@manatwork Agora temos um fator de dois ;-) Ainda descontente com todas as trocas.
21913 Howard Howard
Eu sabia que você não vai me decepcionar.
manatwork
22

Python 3,22

print(input().title())

Esse código pegará uma string como entrada de stdin e fornecerá uma saída em maiúscula para stdout.

por exemplo:

entrada:

BEGIN/wITH.tyPe&cOnTENt

saída:

Begin/With.Type&Content

O código a seguir é para entradas com várias linhas (se necessário)

Python 3, 46

import sys
for i in sys.stdin:print(i.title())
Wasi
fonte
while 1:print(input.title())é um equivalente mais curto para o último trecho de código.
Ramchandra Apte
1
@RamchandraApte Não tenho certeza se é permitido ou não. Seu código morrerá com um EOFError assim que atingir o EOF
Wasi
1
Eu acho que o consenso geral para golfs é que, enquanto a saída está correto, os erros não importam
Volatilidade
Dang; Assim que vi essa pergunta, pensei nisso, mas você me venceu. +1
Justin
+1 Gosto disso melhor do que o do golfscript, porque não parece uma obscenidade.
Tim Seguine 01/01
6

Mathematica 62

Dados

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

Código

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

Uso

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

"Usuário aceita / tipo de comprimento Range.Type"

f /@ tests

{"User Accept / Type-Length User Range.Type",
"Type & Agent / Cc / Length do Conteúdo # 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 -E & Tipo Tipo e Comprimento.Tipo Usuário.Usuário e Com ",
" Intervalo e Conteúdo com Tipo de Conteúdo ",
" Código de Início # Usuário # Agent.User ",
" Tipo Comprimento "}

DavidC
fonte
-1 Isso é basicamente regex
CalculatorFeline
O Mathematica pode executar o regex diretamente, mas eu usei outra coisa. É semelhante ao regex, mas não é regex.
21916
%% %%% % %%
CalculatorFeline
6

JavaScript (94)

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

PHP: 78 73 65 64 caracteres

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

A entrada é passada em $s . Opera na cadeia como uma matriz de caracteres.

É uma máquina simples de 2 estados. Ele se baseia na ordem lexical de seqüências de caracteres e que o analisador assume automaticamente que você deseja digitar uma sequência em alguns casos.

O estado está sendo armazenado $be está sendo representado como o nome da função que precisa ser chamada no próximo caractere. ucfirste lcfirstsão mais curtos para digitar e têm comportamento idêntico às strtolower/ strtouppernas cadeias de caracteres simples. Além disso, como eles diferem apenas em uma letra, podemos usá-los com eficiência para armazenar o estado. A versão original precisava armazenar o estado explicitamente em um booleano.

Como echo não imprime nada para booleano false, usei uma vírgula e o !operador para "ocultar" a atribuição (que neste caso é verdadeira) na instrução echo. Isso me permitiu salvar um personagem removendo o {}.

Tim Seguine
fonte
Use a marcação do bloco de código em vez do código embutido, para que scripts como o Code Golf UserScript Enhancement Pack possam inserir o tamanho abaixo do código. A propósito, no seu código, todos os três caracteres de espaço podem ser removidos.
manatwork
Em vez de $b=ord($c)>64;tentar $b=$c>"@";. Ou até mesmo $b=$c>=A;- AFAIR que lança um aviso, mas boas práticas de codificação não são uma virtude aqui.
manatwork
@ manatwork obrigado, não pensei nisso. Eu já estou lançando um aviso para usar uma variável não definida de qualquer maneira.
Tim Seguine
Hmm ... Que tal não usar $ b apenas como sinalizador, mas armazenar o nome da função real? $b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}.
manatwork
@manatwork great! Eu estava tentando pensar em uma maneira de fazer isso com a função. Minhas tentativas foram todas maiores.
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();}

Pega linhas stdin, traduz para stdout. (Prefere SIGINTa EOF.)

Darren Stone
fonte
4

Powershell: 37 - 43

Dependendo de como você deseja receber a entrada ...

Solicitar entrada do usuário: 43

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

Receber entrada do pipeline: 38

(Culture).TextInfo.ToTitleCase($input)

Forneça entrada como argumento ao executar o script: 37

(Culture).TextInfo.ToTitleCase($args)

NOTA: Os scripts acima ignorarão as letras maiúsculas, deixando-as como estão. Se isso precisar ser contabilizado, a entrada deve ser forçada a minúscula antes da conversão de maiúsculas e minúsculas. Isso adiciona 10 caracteres ao primeiro método e 12 aos outros dois.

(Culture).TextInfo.ToTitleCase((read-host).ToLower())
(Culture).TextInfo.ToTitleCase("$input".ToLower())
(Culture).TextInfo.ToTitleCase("$args".ToLower())
Iszi
fonte
Não funciona de acordo com a especificação. Tente foo:bar.
Mormegil
@Mormegil Qual deles? A versão de host de leitura, pelo menos, funciona bem para mim. Testei-o em todos os casos de teste da pergunta e todos retornaram conforme o esperado, exceto nos casos especiais que publiquei em comentários à pergunta.
Iszi
:(cólon) não está listado como um separador de palavra em regra # 4, portanto, AFAICS, foo:bardeve resultar em Foo:bar, não Foo:Bar . Mas essa é apenas a minha (bastante rigorosa) leitura da especificação.
Mormegil
2
@Mormegil Bem, isso é legal. Parece que a especificação foi ajustada para resolver essa ambiguidade, enquanto ao mesmo tempo não invalidava esta resposta.
Iszi
1
Você pode substituir get-culturepor culture; veja codegolf.stackexchange.com/a/778/1308
Danko Durbić
4

Java - 209 caracteres

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

Eu adicionei novas linhas apenas para facilitar a leitura.

True Soft
fonte
3

R, 143 116

Uma solução um pouco longa, talvez, mas aqui vamos nós:

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

Ligeiramente não-destruído e explicou:

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

Editar : 116 caracteres

O principal desafio aqui é vetorizar substr. Aqui está outra maneira menos detalhada.

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

Recuado:

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
plannapus
fonte
Você pode salvar alguns caracteres. Como aconsits somente de caracteres minúsculos, não há necessidade de verificar correspondências com maiúsculas LETTERS.
Sven Hohenstein
@SvenHohenstein de fato, obrigado!
plannapus
Outro: você pode substituir TRUEpor T.
Sven Hohenstein
Originalmente eu tive o tolowermais tarde.
plannapus
OK, aqui está outro ;-) Você pode substituir mapply(substr,tolower(x),n,n) por strsplit(tolower(x),"")[[1]]para salvar um caractere.
Sven Hohenstein
3

Befunge 98 - 24 45

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

Escrever isso machucou meu cérebro.

Isso leva a entrada ~e, se o caractere anterior era um dos separadores (ou se não havia caractere anterior), ele executa

:'``!3*j' -;

Esse trecho pega o caractere e, se seu valor ascii for maior ou igual a a, subtrai 32 dele, alterando-o para maiúsculas. Se for menor que a, 3*jpula o ajuste. Depois, pula a próxima parte. Esta parte trata da alteração de maiúsculas para minúsculas (tenho certeza de que pode ser mesclada com a próxima parte; não sei como):

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

O caractere é impresso ( ,), então verifica se o caractere é um dos limites:

'/`!

Basicamente, compara o caractere ao valor ascii de /. Se o caractere não for um limite, o código será pressionado 12para ignorar o ajuste de capitalização da próxima vez. #pula o programa final: @e, se o final da entrada for atingido, ~envia a execução do código de volta para o @final do programa.

Justin
fonte
3

Ruby: 60 51 50 47 caracteres

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

Exemplo de execução:

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
homem a trabalhar
fonte
1
Não é l==l.swapcaseo mesmo que l<?0(não testado)? Pelo menos para a entrada permitida para esta tarefa.
21413 Howard
Sim. Agora esse batman enfatizou que nenhum outro separador deve ser esperado, na verdade isso é mais curto. Obrigado, @Howard.
manatwork
2

C # - 110

Um processamento simples baseado em máquina de estado finito:

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

(onde xé a stringcapitalizar)

e, claro, se você quiser ser chato (depois que a especificação for atualizada), você pode usar

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

ou, com todo o clichê chato:

class C{static void Main(string[]a){System.Console.WriteLine(new System.Globalization.CultureInfo(9).TextInfo.ToTitleCase(a[0]));}}
Mormegil
fonte
Não, não será compilado, pois o C # não é uma linguagem de script e você precisa encapsular isso em uma classe.
Pierre Arlaud
2
Quem disse? 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"Mas se você realmente se importa com o clichê chato, adicione 112 caracteres.
Mormegil
1
Você pode cortar o publice a string[]apartir do
padrão
Ah, sim, você está certo com public, mas eu preciso de argumentos, que é o que eu processar ...
Mormegil
2

Javascript 102

prompt().split(o=q='').map(function(c){o+=(q)?c.toLowerCase():c.toUpperCase(),q=('A'>c)?0:1})
alert(o)
martelo de lobo
fonte
Você não precisa (... em )torno da condição ternária. Ainda mais, você não precisa o segundo ternário: function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}.
manatwork
2

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

A saída traduzida é gravada na stdoutleitura de stdin.

Darren Stone
fonte
1
"então emita novamente" rimando adiante!
cat
2

Befunge-98 (29), C (65)

Como o método / algoritmo é praticamente o mesmo, incluo as duas versões no mesmo post. Ambos dependem de saber se o último caractere era um símbolo ou letra, para saber se uma letra é minúscula ou não.

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
fonte
2

05AB1E , 1 byte

Código:

Explicação:

™   # Implicit input which is converted to title case.

Experimente online!

Adnan
fonte
Isso é bem legal :-)
batman
1

Caracteres Excel VBA-11

Na janela Imediata

?[Proper()]

VBscript

Set xlapp = CreateObject("excel.application")
wscript.echo xlapp.Evaluate("Proper(""BeGin/wITH.tyPE&conTeNt"")"
brettdj
fonte
Você poderia fornecer alguma ajuda no uso? Recebo "Erro de compilação: nome externo não definido". (No Word 2013, sobre a guia Desenvolvedor eu cliquei Visual Basic, em seguida, em Visual Basic for Applications para copiar-colar o código na janela Immediate e pressionou Enter.)
manatwork
@manatwork Eu deveria ter esclarecido que estava no Excel. Você pode fazer isso no Word, mas o caminho é mais longo, pois você precisa automatizar o Excel.
brettdj
1
Legal. Funciona perfeitamente quando o VBA é iniciado no Excel 2013.
manatwork
Obras em diretamente no Excel assim: =PROPER(A1), também 11 bytes
Wernisch
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}

Isso funciona bem para o conteúdo de uma única linha, mas para a entrada de várias linhas, é necessário adicionar algumas unidades

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

Seria bom se pudéssemos tirar proveito da divisão automática de um registro em campos e modificar esses campos, mas perderíamos nossos separadores de campos. :(

Sei que essa não é a resposta mais divertida e essa é uma pergunta bastante antiga, mas acho que o AWK está sub-representado no espaço de resposta do CG :)

(Obrigado @manatwork por testar o código, ele deve funcionar agora :) Também alterou o fluxo, mas manteve a contagem de bytes igual, substituindo alguns ;por novas linhas.)

Robert Benson
fonte
1
Você tem certeza? Nenhum dos códigos parece produzir a saída necessária nem com gawk, mawknem original-awk. (Testado no Ubuntu).
manatwork 30/03
Foi escrito usando gawkuma caixa RHEL6, mas depois transcrito para uma caixa do Windows. Pode muito bem haver um problema de transcrição. Vou tentar testar depois do trabalho, quando puder fazer testes e postar na mesma máquina .... Acho que vejo o problema de qualquer maneira. l=0deve serL=0
Robert Benson
Espero que funcione agora, @manatwork. Obrigado pelo teste. :)
Robert Benson
1
Agora parece funcionar corretamente. Não verificado todos os casos de teste, mas parece ser possível reduzi-la um pouco: {for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1.
manatwork
Eu gosto do seu uso de alterações $0e o 1rótulo para evitar o printcomando são coisas que eu não pensei em fazer. Eu vou ter que manter isso em mente para o futuro golfe :)
Robert Benson
1

PHP (> v5.4.32) - 25 caracteres

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

Explicação:

  • ucwords () é uma função PHP embutida

  • O primeiro parâmetro $aé a entrada

  • O segundo parâmetro é delimeter (caracteres não alfabéticos encontrados nos casos de teste)

  • O retorno / eco / impressão é assumido devido ao uso de <?= ?>

Ligações:

jpl42
fonte
1
Olá e bem-vindo ao site! Acho que no momento esse é um trecho que não é permitido por padrão, mas você pode obter 41 bytes como um programa completo usando -R: Experimente on-line! ou 42 usando argumentos: Experimente 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

Experimente a versão SELECT no SQL Server 2012 aqui .

Substitua "foo" pela sequência de entrada. A contagem de caracteres é para uma cadeia de comprimento zero. Esse código percorre a seqüência de caracteres usando um índice, maiúsculas ou minúsculas o caractere naquela posição com base no caractere anterior.

Muqo
fonte
0

JavaScript (Node.js) , 70 bytes

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

Experimente online!

Estou certo de que isso pode ser jogado ainda mais.

Nota :

Recebe entradas via f(string)(), as últimas são necessárias, mas não executam nada.

Muhammad Salman
fonte
0

Powershell, 77 75 bytes

Esta solução atende totalmente às regras da tarefa (mesmo exemplo ambíguo foo:bar).

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

Veja também a solução Powershell com a função incorporada ToTitleCase do @Iszi.

Script de teste explicado:

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

Resultado:

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
confuso
fonte
0

QBasic, 74 bytes

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

Os bytes são contados no CP-437 ; é um byte único (código de caractere 20).

O método de entrada aqui é um pouco estranho: os caracteres são digitados um de cada vez e sua capitalização é convertida antes de serem exibidos. Então, quando você digita aGeNT, ele aparece na tela como Agent. Bater Entertermina o programa.

DLosc
fonte
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))

Experimente online!

Não é uma pontuação excelente, mas eu queria experimentá-lo sem operações de string internas para mudar de caso.

Matthew Jensen
fonte
-2

PHP - 23 caracteres

mb_convert_case ($ w, 2);

Precisa do php_mbstring para funcionar

mattecapu
fonte
1
No meu 5.3.26, aparece mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);"Begin / with.type & content", não "Begin / With.Type & Content".
manatwork