Dada uma string, coloque-a em maiúscula. Por maiúscula, quero dizer conTeNT-lENgth
alteraçõ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
- não
regular expressions
é permitido usar . - pode haver qualquer número de palavras em uma frase (string).
- cada palavra consistirá em
English
letras[a-zA-Z]
de qualquer caso. - 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. - limites de palavras devem ser preservados na saída.
- o código mais curto vence.
Por exemplo, seu programa deve gerar Begin/With.Type&Content
para BeGin/wITH.tyPE&conTeNt
.
Some test cases:
"aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe"
"type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe"
"cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc"
"lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT"
"contENT/ACcEpT"
"BeGin/wITH.tyPE&conTeNt"
"Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with"
"RaNgE&COnTeNT WITh CoNTENT-TypE tyPe"
"BEgin COdE#uSeR#aGeNt.USeR"
"TypE LENGth"
/CC/
na linha 2 ou-AND&
na linha 7) devem ser deixadas em paz. Tudo bem, para este desafio?Respostas:
GolfScript,
362719 caracteresUma abordagem bastante básica do GolfScript que funciona para todas as entradas de acordo com a especificação. Os exemplos podem ser testados online .
fonte
Python 3,22
Esse código pegará uma string como entrada de stdin e fornecerá uma saída em maiúscula para stdout.
por exemplo:
entrada:
saída:
O código a seguir é para entradas com várias linhas (se necessário)
Python 3, 46
fonte
while 1:print(input.title())
é um equivalente mais curto para o último trecho de código.Mathematica 62
Dados
Código
Uso
fonte
%%
%%%
%
%%
JavaScript (94)
fonte
PHP:
78736564 caracteresA 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
$b
e está sendo representado como o nome da função que precisa ser chamada no próximo caractere.ucfirst
elcfirst
são mais curtos para digitar e têm comportamento idêntico àsstrtolower
/strtoupper
nas 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{}
.fonte
$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.$b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}
.C, 83
Pega linhas
stdin
, traduz parastdout
. (PrefereSIGINT
aEOF
.)fonte
Powershell: 37 - 43
Dependendo de como você deseja receber a entrada ...
Solicitar entrada do usuário: 43
Receber entrada do pipeline: 38
Forneça entrada como argumento ao executar o script: 37
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.
fonte
foo:bar
.:
(cólon) não está listado como um separador de palavra em regra # 4, portanto, AFAICS,foo:bar
deve resultar emFoo:bar
, nãoFoo:Bar
. Mas essa é apenas a minha (bastante rigorosa) leitura da especificação.get-culture
porculture
; veja codegolf.stackexchange.com/a/778/1308Java - 209 caracteres
Eu adicionei novas linhas apenas para facilitar a leitura.
fonte
R,
143116Uma solução um pouco longa, talvez, mas aqui vamos nós:
Ligeiramente não-destruído e explicou:
Editar : 116 caracteres
O principal desafio aqui é vetorizar
substr
. Aqui está outra maneira menos detalhada.Recuado:
Uso:
fonte
a
consits somente de caracteres minúsculos, não há necessidade de verificar correspondências com maiúsculasLETTERS
.TRUE
porT
.tolower
mais tarde.mapply(substr,tolower(x),n,n)
porstrsplit(tolower(x),"")[[1]]
para salvar um caractere.Befunge 98 -
2445Escrever 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 executaEsse 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 quea
,3*j
pula 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):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á pressionado12
para 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.fonte
Ruby:
60515047 caracteresExemplo de execução:
fonte
l==l.swapcase
o mesmo quel<?0
(não testado)? Pelo menos para a entrada permitida para esta tarefa.C # - 110
Um processamento simples baseado em máquina de estado finito:
(onde
x
é astring
capitalizar)e, claro, se você quiser ser chato (depois que a especificação for atualizada), você pode usar
ou, com todo o clichê chato:
fonte
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.public
e astring[]a
partir dopublic
, mas eu preciso de argumentos, que é o que eu processar ...Javascript 102
fonte
(
... 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}
.Quarto, 135
A saída traduzida é gravada na
stdout
leitura destdin
.fonte
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) C (65)fonte
05AB1E , 1 byte
Código:
Explicação:
Experimente online!
fonte
Caracteres Excel VBA-11
Na janela Imediata
?[Proper()]
VBscript
fonte
=PROPER(A1)
, também 11 bytesAWK,
113103 bytesIsso funciona bem para o conteúdo de uma única linha, mas para a entrada de várias linhas, é necessário adicionar algumas unidades
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.)fonte
gawk
,mawk
nemoriginal-awk
. (Testado no Ubuntu).gawk
uma 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=0
deve serL=0
{for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1
.$0
e o1
rótulo para evitar oprint
comando são coisas que eu não pensei em fazer. Eu vou ter que manter isso em mente para o futuro golfe :)PHP (> v5.4.32) - 25 caracteres
<?=ucwords($a,'-. /&#')?>
Explicação:
ucwords () é uma função PHP embutida
O primeiro parâmetro
$a
é a entradaO 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:
Code Playground
Função PHP ucwords ()
fonte
-R
: Experimente on-line! ou 42 usando argumentos: Experimente online!T-SQL, 179
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.
fonte
JavaScript (Node.js) , 70 bytes
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.fonte
Powershell,
7775 bytesEsta solução atende totalmente às regras da tarefa (mesmo exemplo ambíguo
foo:bar
).Veja também a solução Powershell com a função incorporada ToTitleCase do @Iszi.
Script de teste explicado:
Resultado:
fonte
QBasic, 74 bytes
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 comoAgent
. Bater Entertermina o programa.fonte
Python 3 , 122 bytes
Experimente online!
Não é uma pontuação excelente, mas eu queria experimentá-lo sem operações de string internas para mudar de caso.
fonte
PHP - 23 caracteres
Precisa do php_mbstring para funcionar
fonte
mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);
"Begin / with.type & content", não "Begin / With.Type & Content".