Tarefa
Inverte execuções de números ímpares em uma determinada lista de 2 a 2 15 números inteiros não negativos.
Exemplos
0 1
→ 0 1
1 3
→ 3 1
1 2 3
→ 1 2 3
1 3 2
→ 3 1 2
10 7 9 6 8 9
→ 10 9 7 6 8 9
23 12 32 23 25 27
→ 23 12 32 27 25 23
123 123 345 0 1 9
→ 345 123 123 0 9 1
Respostas:
Python 2,
756863 bytes5 bytes graças a Dennis.
E eu superei Dennis .
Créditos a Byeonggon Lee pelo núcleo do algoritmo.
Ideone it!
Versão antiga: 75 bytes
fonte
print
não precisa de parênteses. Além disso, você usa apenasa
uma vez, portanto não há necessidade de uma variável.Python 2,
797573 bytesEsta é uma função que modifica seu argumento no local. O segundo nível de recuo é um tabulador.
Teste em Ideone .
fonte
APL,
2120 bytesExperimente || Todos os casos de teste
Explicação:
Edit: Salvo um
~
agradecimento às leis de De Morganfonte
Haskell,
4644 bytesAgradecemos ao @xnor por reconhecer uma dobra e salvar dois bytes.
fonte
(h*)
! Você pode salvar um byte no caso base escrevendof x=x
segunda para coincidir com a lista vazia, embora parece umfoldr
ainda é mais curto:h%p|(l,r)<-span(odd.(h*))p=l++h:r;foldr(%)[]
:foldr
depois de tudo! Obrigado.Gelatina , 10 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Python 2,
7875 bytesSuper hacky :)
fonte
k.i
?k.i=0
na última linha. É apenas uma variável.k
ek.i
relacionados?k.i
é uma variável persistente entre as chamadas dek
. Veja isso como um global improvisado sem precisar usar aglobal
palavra - chave.Python3, 96 bytes
Economizou muitos bytes graças a Leaky Nun!
fonte
C, 107 bytes
fonte
MATL , 20 bytes
Entrada é uma matriz de colunas, usando
;
como separador.Experimente online!
Explicação
Considere como um exemplo a matriz de entrada
[1;2;3;5;7;4;6;7;9]
. A primeira parte do códigoTiodgv
,, converte essa matriz em[1;1;1;0;0;1;0;1;0]
, onde1
indica uma alteração de paridade . (Especificamente, o código obtém a paridade de cada entrada da matriz de entrada, calcula diferenças consecutivas, converte valores diferentes de zero em1
e precede a1
.)Então
Ys
calcula a soma cumulativa , dando[1;2;3;3;3;4;4;5;5]
. Cada um desses números será usado como um rótulo , com base no qual os elementos da entrada serão agrupados . Isso é feito porG8XQ!
, que divide a matriz de entrada em uma matriz de células que contém os grupos. Neste caso, dá{[1] [2] [3;5;7] [4;6] [7;9]}
.O restante do código itera (
"
) na matriz de células. Cada matriz numérica constituinte é pressionada com@g
.to
faz uma cópia e calcula sua paridade . Se (?
) o resultado for verdadeiro, ou seja, o conteúdo do array for ímpar, o array será invertido (P
).A pilha é exibida implicitamente no final. Cada matriz vertical numérica é exibida, fornecendo uma lista de números separados por novas linhas.
fonte
Pitão, 14 bytes
Casos de teste
fonte
J ,
333130 bytesUso
fonte
C #,
179178177 bytesEu uso um lambda C #. Você pode experimentá-lo no .NETFiddle .
O código menos minify:
Parabéns a Byeonggon Lee pelo algoritmo original.
fonte
foreach(var
e alterarif(n%2==1)
paraif(n%2>0)
salvar 2 bytes (ou na verdade 1, porque sua resposta atual é 179 bytes em vez de 178).Pitão,
2928 bytesSuíte de teste.
Tradução direta da minha resposta python (quando traduzir de python para pyth se tornou uma boa idéia?)
fonte
TSQL 118 bytes
Violino
fonte
Clojure, 86 bytes
Aqui está a versão não destruída
Basicamente, ele passa pela sequência de entrada e, se encontrar o número par, adiciona o número e o vetor vazio; caso contrário, se for um número ímpar, substitui o último elemento por esse número mais o que estava no último elemento.
Por exemplo, para esta seq
2 4 6 1 3 7 2
, é assim:[]<=2
[2 []]<=4
[2 [] 4 []]<=6
[2 [] 4 [] 6 []]<=1
[2 [] 4 [] 6 [1 []]]<=3
[2 [] 4 [] 6 [3 [1 []]]]<=7
[2 [] 4 [] 6 [7 [3 [1 []]]]]<=2
[2 [] 4 [] 6 [7 [3 [1 []]]] 2 []]
E então, aplainar esse vetor fornece a saída correta. Você pode vê-lo online aqui: https://ideone.com/d2LLEC
fonte
JavaScript (ES6)
7066Editar 4 bytes salvos thx @Neil
fonte
:r=r.concat(o,x,o=[]),
economiza alguns bytes. Eu acho que você pode, então, ir para salvar outros dois como este:a=>[...a,[]].map(x=>x&1?o=[x,...o]:r=r.concat(o,x,o=[]),r=o=[])&&r
....o
?Stax ,
1510 bytes CP437Experimente online!
Geléia Amarrada! Tão triste que a embalagem salvou apenas um byte.
Versão descompactada com 11 bytes:
Explicação
{|e_^*}
é um bloco que mapeia todos os números paresn
paran+1
e todos os números ímparesn
para0
.fonte
Casca , 7 bytes
Experimente online!
Explicação
fonte
Ruby , 51 bytes
Experimente online!
Algumas pequenas variações:
fonte
Perl 5 com
-p
, 42 bytesExperimente online!
fonte