Tarefa
- O usuário digita uma frase - apenas palavras. Qualquer entrada que não seja letras ou espaços, incluindo números inteiros e pontuação, deve gerar uma exceção: "A frase deve usar apenas letras".
- A saída tem um padrão, onde algumas palavras são invertidas e outras são normais.
- O padrão começa como uma palavra normal, as duas seguintes são invertidas, as duas seguintes são normais e o padrão continua.
- Um exemplo de onde as palavras devem ser normais e onde as palavras invertidas estão abaixo:
Normal - Invertido - Invertido - Normal - Normal - Invertido - Invertido - Normal ...
Exemplo de entrada
Ela vende conchas do mar na costa do mar
Exemplo de saída
Ela joga conchas na costa
Regras adicionais
- Se forem usadas letras maiúsculas, elas devem permanecer na letra em que foram originalmente postadas.
- Qualquer espaço múltiplo publicado inicialmente na entrada deve ser reduzido para um espaço. Por exemplo,
Programming Puzzles and Code Golf
torna-seProgramming selzzuP dna Code Golf
O código o mais curto ganha !!
Feliz codificação ...
code-golf
string
word
permutations
Belfield
fonte
fonte
Any input other than letters or spaces, including integers and punctuation, should throw an exception: "Sentence must only use letters".
. Significa implementar uma tarefa secundária totalmente não relacionada ao desafio de reverter palavras, corta idiomas que não têm exceções e requer codificação ou compactação ou compactação de uma cadeia longa que ocupa grande parte do contagem de bytes.Respostas:
TeaScript , 55 bytes
58 60 69 76 78 80 87 89Isso é extremamente curto, estou muito feliz com isso.
Os últimos ~ 20 caracteres podem parecer sem sentido, mas é "A sentença deve usar apenas letras" codificadas. Todos os caracteres têm códigos de caracteres abaixo de 256, cada um com um byte
Explicação
fonte
Haskell, 141 bytes
Quase 2/3 do código é para verificação de erros. Parece ser o primeiro desafio do mundo real.
O trabalho é feito
unwords$zipWith($)(cycle[id,reverse,reverse,id])$words x
dividindo a entrada em uma lista de palavras, compactando-a com a lista de funções de ciclo[id,reverse,reverse,id,id,reverse...]
e unindo o resultado com espaços de volta a uma única string.Obrigado a @Christian Irwan por 2 bytes.
fonte
r=reverse
?reverse
er=reverse
tinha o mesmo comprimento, devido à faltaf=
. Não verifiquei novamente ao mudar para não ponto).JavaScript (ES6) 122
fonte
Retina , 103 bytes
Deve haver um único espaço na segunda linha, que o SE parece estar engolindo. Execute o código de um único arquivo com o
-s
sinalizador.Retina não tem conceito de exceções; portanto, a saída é simplesmente substituída por
Sentence must only use letters
se houver caracteres que não sejam espaços em branco e que não sejam letras na entrada.fonte
Pitão, 61 bytes
Experimente online.
fonte
Python,
163160157145Removidos 15 caracteres, obrigado Mego !!
fonte
Bash + coreutils, 108
O último caractere deste programa é um espaço.
A entrada é obtida na linha de comando:
fonte
Pyth, 72
Não supera a outra resposta de Pyth, mas eu já investi tempo em escrevê-la. É basicamente uma tradução da minha resposta em Python .
Experimente online
fonte
Julia, 109 bytes
i=0
e(i+=1)%4>1
são usados para decidir se cada palavra recebereverse
d ou não.isalpha
aplica-se às palavras após serem divididas usandosplit(s)
para determinar se há ou não caracteres que não são letras (os espaços já foram removidos nesse ponto).join
restaura a sequência após a manipulação, a menos queerror
seja lançada.fonte
Julia,
150134 bytesUngolfed:
Economizou 16 bytes graças a Glen O!
fonte
r
o resultado? Ou seja,r=ismatch(...)||error(...)
- eliminará alguns caracteres e reverterá o condicional usador
. Irá comentar novamente com, eu suspeito, um pouco mais de economia||
que lidar com a negação, depois percebi que a negação não é necessária. Inverta de volta para&&
. E melhor ainda, use?:
para fazê-lo ainda melhor.s->(r=ismatch(r"[^a-z ]"i,s))?error("Sentence must only use letters"):join([(iseven(i)&&(r=!r);r?reverse(w):w)for(i,w)=enumerate(split(s))]," ")
para 144 bytes. E eu acho que posso fazer melhor por dentrojoin
...s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))
Pitão, 55 bytes
Emprestado o
%%k4 3
bit de Pietu1998. Salvo um byte adicional.Experimente on-line: Demonstration or Test Suite
Explicação
fonte
Perl 5
-ap
, 80 bytesExperimente online!
fonte
Java, 215 bytes
Regex é divertido
Experimente online!
fonte
She slles aeS shells no the aeS shore
, mas deve serShe slles aeS shells on eht aeS shore
(primeiro normal; depois alternando em pares de 2 invertidos ou não). Dois problemas causam isso. Agora você aumentai
mesmo que um item esteja vazio ei++%2<1
deva estari++%4>1
em seu lugar. Aqui uma versão fixa de 211 bytes .Geléia , 39 bytes
Experimente online!
Graças a Erik, o Outgolfer. Ele me salvou de alguns bytes extras e de muitas horas de frustração.
Aqui está uma solução de 46 bytes
Na verdade, ele gera um erro de sintaxe python quando a entrada contém caracteres inválidos.
Experimente online!
fonte
Japt v2.0a0
-S
, 41 bytesTente
fonte
05AB1E , 36 bytes
Experimente online.
Lança o seguinte erro quando a entrada não contém apenas
[A-Za-z ]
:Explicação:
Veja esta dica 05AB1E meu (seção Como usar o dicionário? ) Para entender por que
“¸–ƒ—€É€Å™ê“
é"sentence must only use letters"
.fonte
PHP , 147 bytes
Experimente online!
Ou se
die()
é aceitável como uma "exceção":PHP , 131 bytes
Experimente online!
fonte