O desafio:
Considere a função F(N) = 2^N + 1
onde N
é um número inteiro positivo menor que 31
. A sequência definida por esta função é:
3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097, 8193, 16385, 32769, 65537, 131073, 262145, 524289, 1048577, 2097153, 4194305, 8388609, 16777217, 33554433, 67108865, 134217729, 268435457, 536870913, 1073741825
Uma entrada será gerada da seguinte maneira:
- Pegue 5 números inteiros contíguos da sequência acima.
- Substitua um deles por um número inteiro positivo diferente (que pode ou não fazer parte da sequência acima).
- Reorganize opcionalmente os 5 números resultantes.
Dada uma lista de 5 números inteiros, encontre o que foi trocado e, portanto, não faz parte dos 5 números inteiros contíguos originais.
Exemplo:
- Sublist Original:
5, 9, 17, 33, 65
. - Substituir um:
5, 7, 17, 33, 65
. - Reordenar:
33, 17, 5, 7, 65
.
O resultado esperado seria 7
.
Os 5 valores na entrada sempre serão distintos e sempre haverá uma solução exclusiva. (Por exemplo, você não precisará lidar com entradas como 3, 9, 17, 33, 129
onde 3
ou 129
pode ter sido trocado.)
Casos de teste:
5,9,17,33,829
o/p: 829
9,5,17,829,33
o/p: 829
33, 17, 5, 7, 65
o/p: 7
5,9,177,33,65
o/p: 177
65,129,259,513,1025
o/p: 259
129,259,513,1025,65
o/p: 259
63,129,257,513,1025
o/p: 63
65,129,257,513,4097
o/p: 4097
5, 9, 2, 17, 33
o/p: 2
536870913, 67108865, 1073741825, 1, 268435457
o/p: 1
536870913,67108865,134217729,1,268435457
N = 30
como um dos valores de entrada.Respostas:
Gelatina, 15 bytes
TryItOnline
Todos os casos de teste também em TryItOnline
Retorna uma lista contendo uma lista contendo a saída ímpar.
Quão?
fonte
JavaScript (ES6), 62 bytes
Algoritmo completamente novo, já que como @ edc65 apontou, o anterior foi quebrado. Explicação: Primeiro lidamos com o caso fácil procurando por um 2 ou um número que não seja maior que uma potência de 2. Se nenhum foi encontrado, existem dois casos possíveis, dependendo se o valor extra estava abaixo ou acima do valor execução original de cinco, portanto, verificamos se o menor e o segundo maior valor pertencem à mesma execução de cinco e, em caso afirmativo, culpar o maior valor, caso contrário, o menor valor.
fonte
n-1&n-2
com o valor2
[3, 17, 33, 65, 257]
.--n&--n|!n
bom para o2
caso?Python, 84 bytes
Todos os casos de teste estão em ideone
Para entrada válida, retorna um conjunto que contém apenas o número ímpar.
Para entrada inválida, o limite de recursão será atingido e um erro será gerado.
fonte
Mathematica, 65 bytes
Isso define uma função
f
que deve ser chamada com 5 argumentos, por exemploEm princípio, a função pode ser chamada com qualquer número (diferente de zero) de argumentos, mas você pode obter resultados inesperados ...
Acho que é a primeira vez que consegui colocar toda a solução em um desafio não trivial no lado esquerdo de um
=
.Explicação
Essa solução realmente coloca os recursos de correspondência de padrões do Mathematica para trabalhar para nós. A característica básica que estamos usando é que o Mathematica não pode apenas definir funções simples como,
f[x_] := (* some expression in x *)
mas podemos usar padrões arbitrariamente complexos no lado esquerdo, por exemplof[{a_, b_}, x_?OddQ] := ...
, adicionar uma definição àf
qual é usada apenas quando é chamada com um elemento de dois elementos lista e um número inteiro ímpar. Convenientemente, já podemos atribuir nomes a elementos arbitrariamente distantes da expressão do lado esquerdo (por exemplo, no último exemplo, poderíamos nos referir imediatamente aos dois elementos da lista comoa
eb
).O padrão que estamos usando neste desafio é
f[a___,x_,b___]
. Aquia___
eb___
são seqüências de zero ou mais argumentos ex
é um único argumento. Como o lado direito da definição é simplesmentex
, o que queremos é uma mágica que garanta quex
seja usada para a entrada que estamos procurandoa___
e queb___
sejam simplesmente curingas que cubram os elementos restantes.Isso é feito anexando uma condição ao padrão com
/;
. O lado direito de/;
(tudo até=
) precisa retornarTrue
para que esse padrão corresponda. A beleza é que o padrão de correspondência do Mathematica vai tentar cada atribuição dea
,x
eb
para as entradas para nós, por isso a busca para o elemento correto é feito por nós. Esta é essencialmente uma solução declarativa para o problema.Quanto à própria condição:
Observe que isso não depende de
x
nada. Em vez disso, essa condição depende apenas dos quatro elementos restantes. Esse é outro recurso conveniente da solução de correspondência de padrões: devido aos padrões de sequência,a
eb
juntos contêm todas as outras entradas.Portanto, essa condição precisa verificar se os quatro elementos restantes são elementos contíguos da nossa sequência com no máximo uma lacuna. A idéia básica para verificar isso é que geramos os próximos quatro elementos a partir do mínimo (via ) e verificamos se os quatro elementos são um subconjunto disso. As únicas entradas em que isso pode causar problemas são aquelas que contêm a , porque isso também gera elementos de sequência válidos, portanto, precisamos lidar com isso separadamente.
xi+1 = 2xi - 1
2
Última parte: vamos analisar a expressão real, porque há mais açúcar sintático engraçado aqui.
Essa notação infix é abreviada
Min[a,b]
. Mas lembre-se dissoa
eb
são sequências; portanto, isso se expande para os quatro elementosMin[i1, i2, i3, i4]
e nos fornece o menor elemento restante na entrada.Se isso resultar em um 2, substituímos por um 0 (que gerará valores que não estão na sequência). O espaço é necessário porque, caso contrário, o Mathematica analisa o literal de flutuação
.2
.Aplicamos a função sem nome à esquerda 4 vezes a esse valor e coletamos os resultados em uma lista.
Isso simplesmente multiplica sua entrada por 2 e a diminui.
E, finalmente, verificamos que a lista que contém todos os elementos de
a
eb
é um subconjunto disso.fonte
Raquete 198 bytes
Versão não destruída:
Teste:
Saída:
fonte
05AB1E ,
3230262420 bytesExplicação
Experimente online!
fonte
R, 97 bytes
Isso acabou sendo mais difícil do que eu pensava. Tenho certeza de que isso pode ser jogado de maneira significativa.
Ungolfed e explicou
A
match()
função retornaráNA
se qualquer elemento do vetor de entrada não estiver na sequência e, consequentemente, podemos apenas encontrar o índice ondeNA
existe na entrada e retornar isso:x[is.na(m)]
Fica um pouco mais complicado se a entrada faz parte da sequência, mas é extraviada. Como a entrada foi classificada, a distância entre cada par de índices deve ser
1
. Portanto, podemos encontrar o elemento extraviado, investigando a1st
diferença dos índices correspondentesl=diff(m)
e selecionando o índice para o quall>1
. Isso seria suficiente se não fosse pelo fato del
conter4
elementos e não5
. Isso é apenas um problema se o último elemento na entrada classificada for um membro da sequência, MAS não fizer parte da subsequência (como no caso de teste final). Conseqüentemente, se o4th
elemento>1
buscar a5th
entrada na entrada classificada, procure o índice no4
vetor -length:x[ifelse(l[4]>1,5,l>1)]
fonte
anyNA
que é equivalente aany(is.na(x))
Haskell,
6664 bytesExemplo de uso:
g [65,129,257,513,4097]
->4097
.Os loops em todas as sublistas contíguas de comprimento 5 de
F(N)
mantêm os elementos que não estão na lista de entradax
e o padrão corresponde aos de comprimento 1 (->[s]
).Edit: @xnor salvou dois bytes removendo o limite superior do loop externo. Como é garantida a existência de uma solução, a preguiça de Haskell para no primeiro número encontrado.
fonte
Perl,
6459 bytesInclui +2 para
-an
Dê uma lista de entradas no STDIN:
oddout.pl
:Se você não se importa com uma quantidade variável de espaço em torno do resultado, esse 58 bytes verson funciona:
Ambas as versões se repetem para sempre se a entrada não tiver solução.
Este é um código muito doentio, mas não consigo pensar em nada elegante ...
A maneira como eu (ab) uso
%a
é um novo truque perlgolf, até onde eu sei.fonte
Python 2, 73 bytes
Repete os conjuntos
d
de cinco elementos de sequência consecutivos até encontrar um que contenha todos, exceto um dos elementos de entrada, e depois imprime a diferença, que é a saída em um conjunto singleton.Os conjuntos
d
de cinco elementos consecutivos são construídos a partir do nada, adicionando repetidamente um novo elementoi+1
e excluindo qualquer elemento antigoi/32+1
que vem antes da janela atual de 5. Aqui está a aparência de seu progresso.Há um 1 perdido no início da inicialização, mas é inofensivo porque é removido imediatamente. Os conjuntos menores, pois ele compõe até 5 elementos, também são inofensivos.
fonte
PHP,
877675 bytescorrer com
php -r '<code>' <value1> <value2> <value3> <value4> <value5>
fonte
array_diff
. Mas eu posso salvar um byte lá.end
em vez de,max
e sua anotação não é mais importanteC #, 69 bytes
int M(int[]a)=>a.Except(new int[30].Select((_,i)=>(1<<i+1)+1)).Sum();
fonte
Java 7,85 bytes
Ungolfed
fonte
l
31? Na pergunta, vejo apenas uma matriz int como entrada, mas não uma int adicional? : SPHP, 76 bytes
ideia Titus implementada com o mod 5
126 bytes antes
fonte
array_map(function($z){return 2**$z+1;},range($i,$i+4))
.$x[key($x)]
->end($x)
1-count($x=...)
a condição o livrará da interrupção:for(;1-count($x=...););echo end($x);
(-13)Pitão, 18 bytes
Forme a sequência, pegue sublistas de comprimento 5, remova cada sub-lista de Q, pegue o menor resultado, produza seu único elemento.
fonte
[5, 9, 2, 17, 33]
Kotlin, 55 bytes
fun f(a:IntArray)=a.find{it-1 !in(1..30).map{1 shl it}}
fonte