22 DE OUTUBRO É DIA INTERNACIONAL DOS CAPS ! Infelizmente, alguns não reconhecem a glória da trava de todos os céus. DIZEM QUE PARECE "OBRIGADO" OU "GOSTA DE GRITAR" OU ALGUM disparate. A fim de se conformar com essas queixas obviamente ilógicas e inanas, escreva-me um programa que transforma texto normal em texto "sensível" ou "razoável" para fazer com que as pessoas parem de se queixar.
Descrição
A entrada e a saída da sua solução serão cadeias que contêm apenas caracteres ASCII imprimíveis.
A cadeia de entrada conterá zero ou mais execuções de caps lock . Uma execução de caps lock (ou CLR para abreviar) é definida da seguinte maneira:
O CLR não deve conter letras minúsculas (
a-z
), exceto como o primeiro caractere de uma palavra .- Uma palavra , para os propósitos deste desafio, é uma sequência de não-espaços. Assim,
PPCG
,correcthorsebatterystaple
, ejkl#@_>00()@#__f-023\f[
são todos considerados palavra s.
- Uma palavra , para os propósitos deste desafio, é uma sequência de não-espaços. Assim,
O CLR também deve conter pelo menos um espaço; portanto, deve ter pelo menos duas palavras s.
Cada uma das palavras s no CLR deve conter pelo menos duas letras (
A-Za-z
).- Observe que isso se refere ao CLR obtido por ele mesmo, sem caracteres ao redor que possam não ter sido incluídos no CLR. Por exemplo, não é um CLR porque a sequência possui a palavra s com menos de duas letras.
foO Bar
O B
- Observe que isso se refere ao CLR obtido por ele mesmo, sem caracteres ao redor que possam não ter sido incluídos no CLR. Por exemplo, não é um CLR porque a sequência possui a palavra s com menos de duas letras.
Os CLRs devem ser analisados "avidamente" - ou seja, você deve sempre encontrar os CLRs mais longos possíveis.
Depois de identificar todos os CLRs na sequência de entrada, troque o caso de todas as letras dentro dos CLRs e produza a sequência resultante.
Casos de teste
A primeira linha é entrada e a segunda é saída. Partes em negrito da entrada são substrings considerados CLRs.
CAPS LOCK IS THE BEST!
caps lock is the best!
I really LOVE pROGRAMMING pUZZLES AND cOde Golf!
I really love Programming Puzzles and Code Golf!
This is a challenge on PPCG. This is a test CASE. TEST
This is a challenge on PPCG. This is a test case. test
LorEM iPSUM DOLoR sIT amet, conSECTETur ADIPISciNG eLIT. MAECENAS iD orci
Lorem Ipsum doloR sIT amet, conSECTETur ADIPIScing Elit. maecenas Id orci
;'>}{/[]'"A*(389971(*(#$&B#@*(% c'>#{@D#$! :,>/;[e.[{$893F
;'>}{/[]'"a*(389971(*(#$&b#@*(% C'>#{@d#$! :,>/;[e.[{$893F
iT'S cAPS lOCK DAY!!! cELebraTE THis WONDERFUL key
It's Caps Lock day!!! Celebrate this WONDERFUL key
aBcDE fGHIj KLmNO pQrST (uVwXY) ZZ___Zz__Z
aBcde Fghij KLmno PqrST (uVwxy) zz___zz__Z
#aA# aA
#aA# aA
Regras
Você pode supor que a entrada nunca conterá dois ou mais espaços seguidos e que nunca conterá um espaço inicial ou final.
Bônus de 20% (multiplique o comprimento do código por 0,8) se todo o código for um CLR. ;) (principalmente apenas por diversão, já que é improvável que o envio vencedor tenha esse bônus)
Isso é código-golfe , então o código mais curto em bytes vence.
PPCG. T
contém um espaço)Respostas:
CJam,
100868381 bytesExperimente este violino no intérprete CJam ou verifique todos os casos de teste de uma só vez .
Algoritmo
Identifique o CLR mais longo possível que começa com o primeiro caractere.
Se existir, troque a caixa, imprima e remova-a do início da string.
Senão, remova um único caractere do início da string e imprima-o sem modificação.
Se houver mais caracteres, volte para a etapa 1.
Como funciona
fonte
Perl,
968280 bytesPassa em todos os testes. Assume a entrada de
STDIN
, imprime emSTDOUT
.Como funciona:
configure um regex (
$y
) que correspondacorresponda a várias instâncias de cadeias separadas por espaço correspondentes
$y
, uses///
para inverter maiúsculas e minúsculasTenho certeza de que há espaço para melhorias. Se houver uma maneira de se livrar de todo o
join-map-split
negócio, ainda poderá haver uma chance de se qualificar para o bônus :)fonte
a-z
vez de[:lower:]
. Além disso,-pe
geralmente é contado como 1 byte e as aspas simples como zero bytes.Javascript, 193
Explicação:
fonte