Desafio:
Dada uma sequência de caracteres em posições específicas e colocar em maiúscula o primeiro caractere da palavra especificada. Coloque em maiúscula o primeiro caractere da primeira palavra se, e somente se, já estiver em maiúscula
Entrada :
Uma string s
e um personagem c
.
Ouput:
A sequência com cada ocorrência de c
substituída pelo primeiro caracter maiúsculo
Exemplos :
STRING(s) CHARACTER(c) RESULT
Hello_world _ HelloWorld
me,no,like , meNoLike
you-got-it - youGotIt
Am^I^clear ^ AmIClear
go!full!caps ! goFullCaps
weird&but&tRue & weirdButTRue
ProbleM1fixed1no 1 ProbleMFixedNo
!prob!!lem!s!Olved!! ! ProbLemSOlved
Nota :
- A entrada fornecida sempre será válida. ou seja: o primeiro sempre será uma string com pelo menos uma instância do caractere a ser substituída em. O segundo sempre será um único personagem.
- O comprimento da sequência de entrada será maior 4.
Haverá pelo menos uma ocorrência do personagem para dividir.
É garantido que a entrada contenha apenas letras e o separador (Obrigado @Arnauld)
- Separador é qualquer coisa que não seja um alfabeto (az / AZ) (sugerido por @Dennis)
Critérios de vitória:
Este é o código-golfe, pelo que o código mais curto em bytes para cada idioma vence.
- Agradecemos a JonathanAllan por apontar dois erros.
1
). Tente pensar em como as soluções podem falhar e faça um caso de teste para essas situações. Alguns exemplos: letras como separadores, o separador sendo o último caractere, separadores consecutivos e assim por diante. Não há necessidade de ter muitos casos de teste que não testam coisas diferentes..
, posso imaginar algumas funções de divisão de strings lutando com esse.Respostas:
Python 3 , 63 bytes
Experimente online!
fonte
C (gcc) ,
615355 bytes-8 bytes graças ao Dennis!
Experimente online!
fonte
*s==c?*++s&=95:0;
vez deif(*s==c)*++s&=95;
JavaScript (ES6),
5856 bytesEconomizou 2 bytes graças a @ l4m2 / @Downgoat
Recebe entrada na sintaxe de currying
(s)(c)
.Experimente online!
Comentado
fonte
s=>c=>s.replace(RegExp(c+".","g"),m=>m[1].toUpperCase())
, uma vez que não funciona para caracteres especiais regex!prob!!lem!s!Olved!!
+
antes do.
no RegEx irá contorná-lo.Perl 6
-p
, 19 bytesExperimente online!
fonte
sed 4.2.2 (-r), 21
Tentei em
\W
vez de[^a-z]
, mas infelizmente isso não corresponde_
.Experimente online!
fonte
sed 4.2.2 (-r), 21 bytes
.Geléia , 8 bytes
Experimente online!
Como funciona
fonte
Oitava ,
83,66, 64 bytesEconomizou 2 bytes graças a Luis Mendo.
upper
ao invés detoupper
.Experimente online!
Uau, essa é provavelmente a parte mais confusa do código Oitava que eu já escrevi! Isso usa dois dos truques publicados em nesta pergunta, como a lista de argumentos e as matrizes de células.
Explicação:
Entrada da lista de argumentos:
k
é aqui o primeiro caracteres
após cada separadorc
, convertido para maiúsculas. O índice de cada caractere maiúsculo é armazenadoi
.Corpo da matriz celular:
Criamos uma matriz de células com dois elementos, um onde dizemos que todos os i-ésésimos caracteres devem ser substituídos por sua contraparte
k
e a outra coms
, que já está atualizada. Nós indexamos isso usando{2}
para que apenas recuperemos toda a string modificada. Isso é alimentadostrsplit
, o que o divide em células no caractere separador. Nós o convertemos em uma lista separada por vírgulas usando{:}
e concatenamos de volta em uma string usando colchetes[]
.Desculpas se isso não fez sentido para você ... Quase não faz sentido para mim: P
fonte
Retina 0.8.2 , 20 bytes
Experimente online! Pega apenas a sequência, separador opcional. Todos os caracteres não alfabéticos são excluídos, mas qualquer caractere alfabético a seguir está em maiúsculas. A versão anterior de 34 bytes aceitou entrada arbitrária:
Experimente online! O link inclui o conjunto de testes. Assume que a entrada consiste na sequência e no caracter concatenados juntos. Explicação: O primeiro estágio translitera todos os caracteres imediatamente após as ocorrências do caractere final de minúsculas para maiúsculas e o segundo estágio exclui todas as ocorrências do caractere final.
Para ambas as soluções, usar uma correspondência da direita para a esquerda em vez de uma
+
também funciona.fonte
[^a-z]
vez das cabeças de impressão Experimente online!APL (Dyalog Classic) , 22 bytes
Experimente online!
fonte
Röda ,
5754 bytes-3 bytes graças ao vacas charlatão
Experimente online!
Explicação:
fonte
\E
do regex e_[0:1]
→_[:1]
V , 6
7bytes1 byte salvo por não usar argumento
Experimente online!
O programa recebe o texto como entrada e o char como argumento.
Hexdump:
Esta é uma substituição simples. Descompactado, parece o seguinte
Executar uma substituição global na qual
\A
um caractere não alfabético, seguido por um caractere,(.)
é substituído pelo\u
primeiro grupo de captura em maiúsculas\1
fonte
c
é um caractere especial regexScala, 83 bytes
Experimente online!
Explicação:
fonte
Vermelho , 87 bytes
Experimente online!
fonte
05AB1E , 9 bytes
Experimente online!
Explicação
fonte
PHP,
9183 bytesCorra com
-r
. Foi 2 bytes mais curto usando divisão em vez de explosão, mas ^ teste falhou devido à regex.-8 graças a Med
fonte
{
e,}
do loop for, ele tratará apenas a próxima declaração como o corpo da condição.$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);
Groovy, 43 bytes,
45 bytesExperimente online . O conjunto de testes incluiu a exclusão do último item, pois não possui o caractere separador
c
.fonte
Go,
1389287 bytesForam eliminados 46 bytes graças à ideia de capa de título do @Dennis .
Experimente online!
fonte
Casca , 10 bytes
Experimente online!
Explicação
fonte
F # (Mono) , 122 bytes
Experimente online!
fonte
Java 10, 141 bytes
Experimente online.
Explicação:
fonte
R , 87 bytes
Experimente online!
O uso desse truque não pode ser executado corretamente no TIO, então eu o simulei.
Precisamos do
T
caso contrário, um dos casos de teste falhará.fonte
Stax , 11 bytes
Execute e depure
Explicação
Há algumas partes que eu realmente gostaria de consertar de alguma forma. Posso reduzi-lo para cerca de 8 bytes, mas falha no último caso de teste>. <
fonte
Ruby
-pl
, 36 bytesExperimente online!
Pega apenas a cadeia sem segundo argumento. Usa a versão em bloco do
gsub!
método porque, comgsub! x,y
sintaxe comum,$1
não é facilmente preenchida com dados de correspondência.|$
em regex é necessário para o caso de teste com separador no final.fonte
Python 3 , 77 bytes
Experimente online!
Isso pressupõe que a sequência seja codificada em ASCII e assume que
s
ec
são variáveis pré-carregadas que contêm a entrada.Essa solução funciona no fato de que, na codificação ASCII, letras minúsculas são posicionadas 32 entradas após as letras maiúsculas
Edit: acabei de perceber que isso também coloca em maiúscula o primeiro caractere da string, o que não deveria. mas tenho muito orgulho das minhas bobagens, então deixarei isso se for permitido
fonte
s
deveria ser?A string s and a character c.