O programa deve usar uma string como entrada e reverter as consoantes, mantendo a ordem das vogais. Todas as letras serão minúsculas, para que você não precise se preocupar com maiúsculas e minúsculas. Seguem exemplos.
Entrada:
a test case
.
As consoantes aqui sãot,s,t,c,s
. Eles devem vir em ordem inversa, ou seja,s,c,t,s,t
e volta inserido na seqüência para as mesmas posições onde os personagens pré-revertida foram localizados:a sect sate
.Entrada:
well-done
. Saída:nedl-lowe
.- Entrada:
reverse the consonants
. Saída:setenne sne cohtosarvr
.
Este é o código golf, a solução mais curta vence.
Y
deve ser considerada vogal, independentemente do que é e não revertida.
Qualquer coisa, assim como números, pontuação, aspas e outros símbolos ( @#$%^&*(){}[]\|/<>~-_+=`
), podem aparecer na entrada.
-[...]
específico para a retina, ou específico para regexes .net ou é um recurso geral de regex que eu ignorei até agora?[...&&[^...]]
.<[b..z] - [eiouy]>
ou<:Ll - [aeiouy]>
para fazer diferença setPython 2, 86 bytes
Recebe a entrada como uma string entre aspas. Repete a entrada, substituindo cada consoante por
%s
ins
. A tuplac
armazena as consoantes encontradas em ordem inversa. Então, corda formatação substitui o%s
's ems
com as consoantesc
.Obrigado ao Sp3000 pela verificação de consoantes, que economizou 4 bytes ao listar as consoantes.
fonte
Geléia ,
2220 bytesExperimente online!
Como funciona
fonte
JavaScript ES6,
82818078 bytesSalvei um byte graças a cada um de Martin e Leaky Nun e 2 bytes a Neil!
Teste
fonte
/(?![aeiouy])[a-z]/g
/(?[_aeiouy])\w/g
?_
, que é um símbolo que o OP deseja manter no lugar.q.onchange=q.onkeydown=q.onkeyup=
para apenasq.oninput=
...Python 2, 106 bytes
Espera entrada
"quotes"
, o que eu acho que é permitido.fonte
Pyke, 18 bytes
Experimente aqui!
ou 16 bytes com a nova versão:
(Altere para que, se for retorne toda a saída da string e tivesse entrada de string, retorne a string em vez de uma lista)
Experimente aqui!
~c
contém as consoantes:bcdfghjklmnpqrstvwxz
fonte
GNU sed, 73
A pontuação inclui +1 para a
-r
bandeira passada para sed.Ideone.
Alterna repetidamente a primeira e a última consoante em minúscula e as converte em maiúsculas, até que não haja mais correspondências. Em seguida, converta a string inteira novamente em minúsculas.
fonte
J, 53 bytes
Talvez não seja o melhor, mas eu queria usar,
C.
pois isso pode ser resolvido usando permutações.Uso
Explicação
fonte
MATL,
182221 bytes1 byte salvo graças a @Luis
Infelizmente, a parte mais longa disso é obter a lista de consoantes (
2Y211Y2'y'hX-
).Experimente Online!
Explicação
fonte
tt2Y211Y2'y'hX-m)P5M(
Perl 5 (58 + 4 = 62 bytes)
+4 de penalidade por rodar com
-0777
sinalizador, que define o Perl no modo slurp para lidar com as novas linhas corretamente.Aceita entrada por STDIN e imprime em STDOUT.
Explicação
fonte
JavaScript (ES6), 72 bytes
A divisão
/([^\W\d_aeiouy])/
resulta nos consoantes que caem nas entradas com números ímpares na matriz. Em seguida, basta alternar essas entradas com a entrada equivalente contando do final da matriz e unir o resultado.fonte
JavaScript (ES6), 57
70Editar Incrível 20% de economia thx @Neil
Tarde para a festa, mas parece que todas as pessoas javascript perderam algo
Teste
fonte
c.pop()
.Perl 5,
926855 bytesEconomizou 37 bytes graças à ajuda de @manatwork . ;-)
Uma tradução da solução @Lynn Python para Perl.
fonte
g
força “ ” ajudaria lá:@s=split//;
→@s=/./g;
efor(@s){push@a,$_ if(/[^\Waeiou]/);}
→@a=/[^\Waeiou]/g;
. Quero dizer,m//
comg
modificador retorna uma matriz de todas as correspondências.@b=@a=…
. Também afor
ter uma única instrução no bloco (caso em que o;
não é necessário depois dela), você poderia transformá-lo em modificador declaração e peças os delimitadores:print$_~~@b?pop@a:$_ for/./g
. (Yepp, desculpe, perdi isso: não há necessidade de armazenamento de@s
valor em uma variável.)Pitão,
26252423 bytesSuíte de teste.
fonte
Julia, 53 bytes
Isso leva uma matriz de caracteres como entrada e reverte suas consoantes no local. Experimente online!
O crédito vai para @ Sp3000 para a verificação de consoante em minúsculas.
Como funciona
i=find(...,s)
produz todos os índices de s para os quais o predicado ... retorna verdadeiro e os salva na variável i .c->'}'>c∉"aeiouy"<"$c"
executa três testes e retorna true se e somente se todos forem positivos.'}'>c
verifica se o caractere c vem antes de { ."aeiou"
verifica se a sequência c vem após a .c∉"aeiouy"
verifica se c não é uma vogal.Finalmente,
s[i]
gera todas as consoantes e ass[flipud(i)]=s[i]
atribui a posições em s que correspondem aos índices revertidos em i .fonte
∉
)?Java,
319305261188 bytesAgradecemos a @ Leaky Nun por ajudar com isso :-)
Velho:
Inspiração tirada daqui ❤
Ungolfed
fonte
0
como o caractere especial (null
é a garantia de não estar na String), e você pode verificá-lo pors[i]<1
(não há nenhum caractere negativo)char
em pedaços. :)Ruby,
5350 bytes-3 bytes de @manatwork
Experimente aqui
fonte
Python 2,
10398100 bytesPorta da minha resposta JavaScript. Edit: Salvo 5 bytes, graças a @ Dennis ♦, dos quais eu tive que gastar dois dígitos de fixação.
fonte
R, 120 bytes
Nova resposta:
usa uma cadeia de caracteres como x
A resposta antiga abaixo (110 bytes) foi ruim da minha parte, o que acabou de reverter as consoantes:
fonte
APLX, 31 bytes
⎕a~'aeoiuy'
alfabeto em minúsculas sem vogaist←⍞
armazena a entrada de caracteres como tc←(
…)∊
armazena "consoante?" booleana como ct/⍨
extract (consoantes) de t⌽
reverse(c/t)←
substitui consoantes por (as invertidas)t
retornam a string modificadafonte
Python 2.7, 144 bytes
Isso primeiro cria uma lista invertida de consoantes e, em seguida, insere cada um dos outros caracteres novamente no índice original.
Sem golfe:
https://repl.it/C30O
fonte
Mathematica 216 bytes
fonte
Haskell,
157131 bytesAtualizar
A solução do @ atlasologist me fez perceber que só preciso de uma lista de consoantes em vez de pares (não é necessário revertê-las, pois estou usando a dobra à direita).
Ungolfed
Velho
Cria uma lista de pares de consoantes e, em seguida, percorre a cadeia substituindo cada consoante usando a lista.
Um pouco primitivo, mas eu queria descobrir isso sem olhar as respostas primeiro. :)
fonte
if ... then ... else
. b)f
é melhor escrito como um operador infix, digamos%
. c) não há necessidade do par interno de()
pol((r:q),s)
. d) substitua""
por_
na 2ª linha def
. Tudo em todos (k
permanece o mesmo):c%(r:q,s)|c`elem`k=(q,r:s)|1<2=(r:q,c:s);c%(_,s)=("",c:s);g s=snd$foldr(%)(filter(`elem`k)s,"")s
.s-lang ,
1716 bytes (não concorrente)Salvo um byte porque s-lang não requer mais o último colchete de argumento
Experimente online!
Comecei a trabalhar em uma linguagem de golfe para manipulação de strings (já fazia algum tempo que fazia isso) e achei que seria uma pergunta divertida de se trabalhar.
Explicação:
r
inverte a string com um determinado correspondente de caracteres regex (se nenhum argumento regex for fornecido, o padrão será.
)[
inicia o argumento regex opcional parar
(?![aeiouy])\w
o regex para corresponder a qualquer caractere consoante excluindo y (infelizmente, o JavaScript não permite subtração de classe de caractere)]
geralmente termina o argumento regex opcional parar
, mas não precisamos dele, pois é a última função e o último argumentofonte
Matlab, 67 caracteres
Para uma entrada
'this is a string of- stuff.'
produz
s = ffit is a fgnirt os- ssuht.
si
são os índices das consoantes na sequência de entrada. A declaração final substitui esses caracteres pelos mesmos, mas em ordem inversa pela indexação.fonte
-
. A pergunta diz que qualquer pontuação é uma entrada válida e deve ser ignorada. Além disso, você precisará usarinput('')
para pegar a entrada ou escrever uma função anônima, porque não podemos aceitar uma variável como entrada como esta.flip
para reverter a string.ans
, pois é para isso que uma entrada padrão para o console do Matlab está atribuída?s=input('')
ou de alguma forma criar isso em uma função anônima@(s)
PowerShell , 81 bytes
Experimente online!
Menos golfe:
PowerShell , 88 bytes, -f
Experimente online!
fonte
q / kdb +, 45 bytes
Solução:
Explicação:
Encontre índices das consoantes e substitua-os pelas consoantes revertidas:
Notas:
Eu tinha três maneiras de criar a lista de consoantes, a da solução é um pouco melhor do que as alternativas:
"bcdfghjklmnpqrstvwxz"
por 22 caracteres (mais chato).Q.a _/0 3 6 11 16 19
por 21 caracteres (meio legal, solte cada índice).Q.a except"aeiouy"
por 19 caracteres (o segundo mais chato)fonte
Jq 1,5 ,
289263 bytesExplicação
Amostra de execução
Experimente online
fonte
Java 8, 157 bytes
Experimente online!
Nota: imprime avisos do compilador no stderr.
Explicação:
Não vou mentir, meu único objetivo era vencer essa resposta
fonte
APL (Dyalog Extended) , 22 bytes
Experimente online!
fonte