Sua entrada será uma frase, frase ou palavra em inglês. Ele conterá apenas a-zA-Z' -,.!?
. Sua tarefa é pegar a entrada, remover espaços e redistribuir letras maiúsculas para que letras em índices que foram colocadas em maiúsculas antes (e somente letras em índices que foram colocadas em maiúscula antes) sejam colocadas em maiúsculas.
Por exemplo, se a entrada for A Quick Brown Fox Jumped Over The Lazy Dog
, os índices (com base em 0) das letras maiúsculas são 0, 2, 8, 14, 18, 25, 30, 34, 39
. Em seguida, remova os espaços a partir da entrada: AQuickBrownFoxJumpedOverTheLazyDog
. Em seguida, minúsculas todas as letras, mas maiúsculas aqueles em 0, 2, 8, 14, 18, 25, 30, 34, 39
: AqUickbrOwnfoxJumpEdovertHelazYdog
, que é sua saída.
Entrada
Sua entrada será uma frase, frase ou palavra em inglês. Ele pode conter apenas letras minúsculas, maiúsculas, hífens, apóstrofos, vírgulas, pontos, pontos de interrogação, pontos de exclamação e espaços.
Saída
A entrada com espaços removidos, em minúsculas-d, com letras no índice de letras maiúsculas na entrada em maiúsculas-d.
NOTA: O seu programa não pode falhar (erro que termina com a execução) com um IndexOutOfRange ou erro semelhante.
Casos de teste
Hi! Test!
Hi!tEst!
A Quick Brown Fox Jumped Over The Lazy Dog
AqUickbrOwnfoxJumpEdovertHelazYdog
testing TESTing TeStING testing testing TESTING
testingtESTIngteStInGTEstingtestingtestiNG
TESTING... ... ... success! EUREKA???!!! maybe, don't, NOOOOO
TESTING.........success!eureKA???!!!maybe,don't,nooooo
Enter PASSWORD ---------
Enterpassword---------
A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Z z
AabbCcddEeffGghhIijjKkllMmnnOoppQqrrSsttUuvvWwxxZz
TEST
teST
0, 2, 8, 14, 18, 23, 27, 32
' Eles são0, 2, 8, 14, 18, 25, 30, 34, 39
Respostas:
Geléia ,
1413 bytesExperimente online!
Como funciona
fonte
C (gcc) ,
82797472696766 bytesExperimente online!
fonte
Python 2 , 114 bytes
Experimente online!
Equivalentemente:
Python 2 , 114 bytes
Experimente online!
fonte
''.join([(X[i].lower,X[i].upper)[x[i].isupper()]()for i in range(len(X))])
para -5 bytes.Python 3 ,
787572 bytesGraças a @xnor por jogar fora 6 bytes!
Experimente online!
fonte
s
vez des[0]
?(c*2).title()
você pode obter os dois casos, embora alternados.c>' '!=f()
é equivalente a(c>' ') and (' '!=f())
.05AB1E ,
1514 bytes-1 byte graças a Emigna
Experimente online!
fonte
Haskell ,
9895898881 bytesAgradecemos a @name, @nimi, @Zgarb e @Laikoni por ajudar a remover 14 bytes no total
Ungolfed:
fonte
filter(>' ')
por um byte a menoslast(toLower:[toUpper|isUpper p])c
zipWith
deve salvar mais um byte:f s=zipWith(\p->last$toLower:[toUpper|isUpper p])s$filter(>' ')s
.V , 24 bytes
Experimente online!
Esse tipo de desafio é exatamente para o que V foi criado. :)
Explicação:
fonte
Python 2, 100 bytes
fonte
Alice , 32 bytes
Experimente online!
Explicação
Este é um modelo padrão para programas que funcionam inteiramente no modo ordinal. Desembrulhado, o programa é o seguinte:
fonte
JavaScript (ES6),
949185 bytesTente
fonte
'@'<s[i]&s[i]<'['?
?Retina ,
7771 bytesExperimente online! O link inclui o conjunto de testes. Explicação: O primeiro estágio duplica a linha, enquanto o segundo estágio baixa a duplicata e exclui seus espaços. O terceiro estágio percorre cada letra maiúscula da direita para a esquerda e tenta colocar um espaço antes do caractere correspondente na segunda linha. A primeira linha é excluída e os espaços são usados para colocar em maiúscula os caracteres relevantes do resultado. Editar: salvou 6 bytes graças a @Kobi.
fonte
(.?)
e$4
são necessárias? Parece que ter um grupo opcional no final não faz nada.Perl,
9594 + 1 = 95 bytesPenalidade de +1 byte para -n
Salve um byte substituindo de
s/\s//g
paras/ //g
Experimente online!
Explicação:
Faça uma cópia da sequência de entrada.
Remova todos os espaços e transforme a cadeia em minúsculas.
Em seguida, inicie o loop sobre cada letra. Letra de teste na mesma posição na sequência salva para maiúsculas. Se for superior - torne a letra atual em maiúscula. Imprimir carta.
Observe que o perl precisa ser executado com a opção de linha de comando "-n"
fonte
+1
byte para a-n
bandeira. Fora isso, isso parece bom! Bem vindo ao site! :)MATL , 18 bytes
Mesma abordagem da resposta 05AB1E de Riley .
Experimente online!
fonte
Python 3 , 117 bytes
Experimente Online!
Este é praticamente o meu primeiro código de golfe, por isso é provável que seja ruim, menos a ajuda dos comentários abaixo!
PS Sim, é estúpido que definir e incrementar
i
economize bytes acima do intervalo (len (y)). Ah bem.fonte
return
.C # (.NET Core) ,
108101 bytesExperimente online!
char
classe tem métodosToUpper()
e estáticosToLower()
.fonte
Carvão , 33 bytes
Experimente online!
Como ainda não sei como passar uma string com espaços em branco como um único parâmetro de entrada no código Charcoal, apenas atribuo no cabeçalho a string de teste à variável Charcoal que representa qual seria a primeira entrada (
θ
):Portanto, o código tem o mesmo número de bytes como se a sequência fosse passada como primeira entrada.
Você pode ver aqui a versão detalhada do código.
fonte
PHP, 181 bytes
Eu tento obter o menor número de bytes, este é o meu código:
Experimente online!
fonte
PREG_OFFSET_CAPTURE
que você pode usar o valor256
,$argn
é uma variável mais curtoreadline()
para uma entrada e eu achoctype_upper
e uso delcfirst
eucfirst
vai economizar muito bytes com um laço e uso de$$i
e ternário operadorJava 8,
184177161 bytesDefinitivamente pode ser jogado um pouco mais ..
- 16 bytes graças a @ OlivierGrégoire pegando a entrada como em
char[]
vez deString
.Explicação:
Experimente aqui.
fonte
char[]
String em vez de uma String para esta, você economizará muitos bytes!String
, out =char[]
:-)Lisp comum, 104 bytes
Experimente online!
Anormalmente curto para o prolixo Lisp comum!
Código simples:
fonte
Java (OpenJDK 8) ,
15011711397 bytesExperimente online!
Enquanto jogava mais, cheguei a 102 bytes:
Experimente online!
Mas eu lembrei que isso estava começando a parecer a resposta de Dennis, então eu simplesmente expressava sua brincadeira e ... mágica aconteceu. O grande ganho do porto é remover os galhos e as repetições dentro deles.
fonte
Hi! Test!
deve tornar-seHi!tEst!
, mas com a sua solução torna-seHi!Test
.Planilhas Google, 213 bytes
A entrada está na célula
A1
e a fórmula se divide assim:ArrayFormula()
permite avaliar cada termo deROW()
forma independenteJOIN()
concatena todos os resultados independentes em uma única sequênciaIF(REGEXMATCH(),UPPER(),LOWER()
é o que o alterna usando maiúsculas ou minúsculas, dependendo do que o caso estava nessa posição na entradaROW(OFFSET())
retorna uma matriz de valores1
paraA1.length
que pode ser alimentado naMID()
função de modo que podemos avaliar um de cada vezResultados dos casos de teste: (É mais fácil ler se você clicar na versão maior.)
fonte
Ruby , 80 bytes
Experimente online!
fonte
n.gsub(/./){}
em vez den.size.times{};n
:n.gsub(/./){(?A..?Z)===a[i]?$&.upcase: $&}
.Perl, 92 bytes
Explicação:
fonte
-n
sinalizador para validar sua resposta. Algumas coisas no golfe:s/ //g
é o suficiente (não há necessidade\s
),y/a-z/A-Z/
é o mesmo quetr[a-z][A-Z]
, você pode usar a-p
bandeira para não precisar da últimaprint
, nem dos parênteseslc$&
.C, 103 bytes
Experimente online!
fonte
Python 3 ,
125, 124 bytesExperimente online!
fonte
Python 2,
106105 bytesEditar: salve um byte via
print ''.join
=>print''.join
.Formulário Lambda, 99 bytes
fonte
SCALA, 128 caracteres, 128 bytes
Obrigado por este desafio. Experimente online!
fonte
q / kdb +, 49 bytes
Solução:
Exemplos:
Explicação:
Encontre índices em que a entrada esteja em maiúsculas e aplique a função
upper
a esses índices em uma versão em minúscula e removida por espaço da sequência de entrada. Observe que não podemos aplicar a função além do comprimento da string, portanto, use take (#
) para truncar a string de entrada ao comprimento da versão em minúscula e removida por espaço.Bônus:
Depois de ler as respostas, pensei em tentar uma solução onde iterasse sobre a entrada, até agora só consegui uma solução de 53 bytes:
fonte
Swift 3.0, 199 bytes
Experimente Online!
fonte
Perl 5 , 40 bytes
37 bytes de código +
-F
sinalizador. (observe que nas versões antigas do Perl, pode ser necessário adicionar-an
sinalizadores)Experimente online!
Explicações:
Graças a
-F
,@F
contém uma lista de todos os caracteres da entrada.for/\S/g
itera sobre cada caractere não espacial da entrada. Usamos$i
para contar em que iteração estamos. Se$F[$i++]
for um caractere maiúsculo (/[A-Z]/
), imprimimos o caractere atual maiúsculo (uc
), caso contrário, imprimimos em letras minúsculas (lc
). Observe queuc
elc
retorne o argumento inalterado se não for uma letra.Versão anterior (menos golfe: 47 bytes):
Experimente online!
fonte