No bate-papo, geralmente somos rápidos em digitar e realmente não olhamos a ordem das letras antes de postar uma mensagem. Como somos preguiçosos, precisamos de um programa que troque automaticamente as duas últimas letras em nossas palavras, mas como não queremos responder tarde demais, o código deve ser curto.
Sua tarefa, se você deseja aceitá-la, é escrever um programa que vire as duas últimas letras de cada palavra em uma determinada sequência (para que a palavra Thansk
se transforme Thanks
). Uma palavra é uma sequência de duas ou mais letras no alfabeto inglês delimitada por um único espaço.
A sequência / lista de caracteres que você recebe como entrada é garantida para conter apenas caracteres e espaços alfabéticos (ASCII [97 - 122], [65 - 90] e 32).
Você pode receber e fornecer saída através de qualquer método padrão , em qualquer linguagem de programação , observando que essas brechas são proibidas por padrão.
A saída pode ter um espaço à direita e / ou uma nova linha à direita.
A entrada sempre conterá apenas palavras (e o espaço em branco correspondente) e consistirá em pelo menos uma palavra.
Este é o código-golfe, então a submissão mais curta (pontuada em bytes), em cada idioma, vence!
Casos de teste
Observe que as seqüências de caracteres estão entre aspas para facilitar a leitura.
Entrada -> Saída "Thansk" -> "Obrigado" "Você é bem-vindo" -> "Você é bem-vindo" "Esta é uma maçã" -> "Thsi si na appel" "Flippign Lettesr Aroudn" -> "Invertendo letras" "O CHALLENEG ANTIGO COM LETRAS RÁPIDAS" -> "O CHALLENGE ANTIGO COM LETRAS TRANSFERIDAS"
Ou, para conveniência do conjunto de testes, aqui estão as entradas e suas saídas correspondentes separadamente:
Thansk Youer welcoem Isto é uma maçã Flippign Lettesr Aroudn O CIDADÃO CHALLENEG COM LETRAS RÁPIDAS
obrigado De nada Thsi si na appel Virando letras ao redor O estranho problema com letras trocadas
Obrigado a DJMcMayhem pelo título. Este era originalmente um CMC .
Respostas:
V , 4
5bytesExperimente online!
||
denota o cursorO buffer começa com
|w|ord and more words
e o cursor está no primeiro caractere.Recursivamente
ò
vá para o
e
nd de uma palavrawor|d| and more words
remova
X
o caractere à esquerda do cursorwo|d| and more words
p
aste sobre o próximo caracterewod|r| and more words
ò
Final implícito , repita o mesmo processo para outras palavras até o final do buffer ser alcançadofonte
ò
comando github.com/DJMcMayhem/V/wiki/Normal-Mode-CommandsGeléia , 7 bytes
Um link monádico que recebe e retorna listas de caracteres
Experimente online!
Quão?
fonte
Ḳ2œ?ЀK
também funciona e usa um único rápido.Flacidez Cerebral , 122 bytes
Experimente online!
A pior linguagem para o trabalho :)
LegívelVersão ligeiramente mais legível:fonte
Haskell , 40 bytes
Experimente online! Exemplo de uso:
(f=<<).words $ "abc xyz"
rendimentos"acb xzy "
.fonte
Retina , 13 bytes
Experimente online! O link inclui casos de teste.
fonte
Python 3 , 50 bytes
Experimente online!
Esta resposta abusa do comportamento de impressão do Python 3: vários argumentos são impressos com um único espaço entre eles. Obviamente, não podemos apenas apresentar vários argumentos, porque não sabemos quantas palavras estarão na entrada. Então, usamos o operador splat . Basicamente
é exatamente a mesma coisa que
O abuso que faz com que um programa completo se torne mais curto que uma função / lambda, onde teríamos que usar
' '.join
ou algo semelhante.fonte
for w in input().split():print w[:-2]+w[:-3:-1],
. No Python 3, a extração dos dois últimos caracteres funcionaria bem,print(*(''.join(a)+c+b for*a,b,c in input().split()))
exceto quea
precisa ser refeita em uma sequência.Matlab (R2016b),
5150 bytesEconomizou
4950 (!) Bytes graças a @Giuseppe.E minha resposta anterior:
Matlab (R2016b), 100 bytes
(Apenas por diversão: P)
Explicação:
fonte
regexprep
trabalhar aqui? Algo comoregexprep(a,'(\w*)(\w)(\w)','\1\3\2')
?$1
, e não\1
, como seriaregexprep(a,'(\w*)(\w)(\w)','$1$3$2')
.function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')
ainda é outro byte mais curto!C,
625854 bytesAgradecemos ao @Dennis por salvar
quatrooito bytes!Experimente online!
fonte
Prolog (SWI) , 60 bytes
Experimente online!
Explicação
Primeiro, definimos o caso base:
Isso significa que as duas últimas letras serão sempre trocadas.
Em seguida, definimos o que acontece se estivermos ao lado de um espaço:
Duas cadeias coincidem se logo antes de um espaço, as letras anteriores ao espaço são trocadas e o restante se as cadeias coincidem. Nós então usamos
!
para cortar.Nosso último caso é que, se não estamos próximos a um espaço, as duas primeiras letras precisam corresponder.
fonte
Wolfram Language , 117 bytes
Experimente online!
Aplicado às seqüências de teste.
fonte
R ,
1115141 bytesCortesia de Giuseppe, uma abordagem regex que explode meu método antigo fora da água.
fonte
APL (Dyalog Classic) , 28 bytes
⎕ML
e⎕IO
são ambos1
,Experimente online!
Explicação
... (,⊂⍨⊣=,) ...
Dividir (mantendo as bordas e anexando uma borda ao início) ...... ⍞
... a entrada ...... ' ' ...
... em espaços.... ( ... )¨ ...
Então, para cada elemento disso:... , ...
Concatenar ...... (¯2↓⊢) ...
... todos os itens, exceto os dois últimos ...... 2↑⌽ ...
... com o inverso dos dois últimos elementos.1↓∊ ...
Por fim, retorne todos, exceto o primeiro elemento do resultado nivelado.fonte
Funky , 34 bytes
Experimente online!
fonte
Haskell , 45 bytes
-2 bytes graças a H.PWiz.
Experimente online!
fonte
J ,
20 1911 bytesCrédito para @Bolce Bussiere
Experimente online!
fonte
(1&A.&.>)&.;:
Alice , 24 bytes
Experimente online!
Explicação
Isso forma um loop em que o corpo do loop é um snippet Ordinal linear e executamos
' o
no modo Cardinal entre cada duas iterações do loop. Este último apenas imprime um espaço.Desdobrando a estrutura em zigue-zague do código Ordinal, o corpo do loop linear fica assim:
Quebrando isso:
fonte
h~Z
) em vez de quatro (e10x
), mas não estou vendo uma maneira de ajustar o layout para realmente salvar um byte geral com isso.brainfuck ,
109100 bytesEditar: não precisa lidar com palavras de uma letra
Experimente online!
Imprime um espaço à direita
Como funciona
Versão anterior, 109 bytes
Experimente online!
fonte
QuadR , 8 bytes
Experimente online!
fonte
PHP ,
119107 bytesEdit: graças a totallyhuman
Experimente online!
fonte
$word
um nome de variável de caractere único?fgets(STDIN)
pode ser omitido ou substituído por$x
também, como nem todas as respostas fazer a contagem de entrada para as suas respostastrim()
deve ser desnecessário.Haskell , 41 bytes
Experimente online!
Saídas com um espaço à direita.
O repetido
' ':r
parece um desperdício. Masa%(b:t@(' ':r))=b:a:t
tem o mesmo comprimento ea%(b:t)|' ':_<-t=b:a:t
um byte a mais.Haskell , 41 bytes
Experimente online!
fonte
sed ,
2017 + 1 (-r) = 18 bytesExperimente online!
fonte
|$
. Não está fazendo nada. (Para que ele faça o que você espera que você precisa(.)(.)(\b|$)
, mas isso não é necessário porque\b
. Já corresponde ao fim da string)PHP, 65 bytes
requer PHP 7.1 (ou posterior)
toma sentença como argumentos de linha de comando separados. Corra com
-nr
.trabalhando em uma única sequência, 77 + 1 bytes :
Corra como cano com
-nR
.... ou experimentá-los online .
fonte
Java 8, 35 bytes
A porta do Google Sheets do @TaylorScott responde , depois de jogar dois bytes. EDIT: Vejo que agora é uma resposta da porta Retina de Neil após meus dois bytes de golfe.
Explicação:
Experimente online.
fonte
Planilhas Google, 33 bytes
Função de planilha anônima que leva a entrada da célula
A1
e sai para a célula de chamada-2 Bytes Obrigado a @KevinCruijssen pelo uso de
(.)
mais de(\w)
fonte
(\w)
podem ser jogados(.)
se não me engano. A\b
já é uma indicação para procurar apenas palavras. (Não é inteiramente certo embora, mas ele funciona em Java.)JavaScript (Node.js) ,
383632 bytesExperimente online!
A abordagem RegExp é cortesia de @ Giuseppe (embora eu tenha pensado nisso de forma independente), assumindo palavras separadas por apenas um espaço
-2 por considerar apenas 1 espaço e adicionar espaço à direita
-4 Obrigado @Shaggy
fonte
s=>s.replace(/(.)(.)( +|$)/g,"$2$1$3")
.s=>s.replace(/(.)(.)(\s|$)/g,"$2$1$3")
ab abc abcd abcde abcdef
Será queab_
,bc_
,cd_
,de_
,___
,ef_
,___
F=s=>s.replace(/(.)(.)(?!\w)/g,"$2$1")
mesmo comprimentoK (oK) ,
2322 bytesExperimente online!
Exemplo:
Explicação:
Solução do Porto da FrownyFrog para economizar 1 byte .
Eu voltarei a isso.
Solução anterior:
" "/-2{(x_y),|x#y}'" "\
23 bytesfonte
05AB1E , 7 bytes
Experimente online!
-1 graças a Magic Octopus Urn .
Imprime um espaço à direita.
fonte
`
.Gelatina , 10 bytes
Experimente online!
fonte
SNOBOL4 (CSNOBOL4) ,
136119 bytesExperimente online!
Imprime com um espaço à direita.
Você sabe que fez algo errado quando um idioma é um backronym para StriNg Oriented e symBOlic Language e seu código é mais longo que o Brain-Flak :(agora está um pouco melhor.A linha
B
pegaI
e substitui(alphabetic characters saved as Y)(some number of spaces)
pela string vazia.A linha a seguir extrai os últimos 2 caracteres de
Y
comoZ
e substitui-los comoZ
revertida, então os concatena próxima linhaO
,Y
e um único caractere de espaço.Por fim, imprime quando
I
não corresponde mais ao padrão necessário na linhaB
.fonte
Perl 5 , 19 + 1 (
-p
) = 20 bytesExperimente online!
fonte