A sequência da curva do dragão (ou a sequência regular de dobragem de papel) é uma sequência binária. a(n)
é dado pela negação do bit restante do 1 menos significativo n
. Por exemplo, para calcular a(2136)
, primeiro convertemos para binário:
100001011000
Encontramos o nosso pouco menos significativo
100001011000
^
Leve o bit para a esquerda
100001011000
^
E devolver sua negação
0
Tarefa
Dado um número inteiro positivo como entrada, saída a(n)
. (Você pode imprimir por número inteiro ou por booleano). Você deve tentar tornar seu código o menor possível, medido por bytes.
Casos de teste
Aqui estão as primeiras 100 entradas em ordem
1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1
100001011000
é a0
. Você quer dizer o menos significativo1
?Respostas:
Mathematica 25 Bytes
Outras maneiras de fazer isso:
56 bytes
58 bytes
fonte
Python 3 ,
2221 bytes1 byte graças à ETHproductions.
Experimente online!
Ftw aritmético bit a bit.
fonte
0+(...)
?n&1
ser colocado entre parênteses? Ou é1+(n^~-n)<1
isso que pode ser colocado entre parênteses? Ou é1+(n^~-n)
...&
tem a menor prioridade, por isso é1+(n^~-n)
Retina ,
38.3429 bytesExperimente online!
Martin e Leaky vieram com essa idéia, com mais 5 bytes de desconto!
Converte a entrada em unário e, em seguida, divide progressivamente o número por 2. Uma vez que não pode mais fazer isso uniformemente (ou seja, o número é ímpar), remove os patches de 4 da entrada, calculando o resultado da última operação mod 4 Finalmente, isso verifica se o resultado foi 1, o que significa que o dígito à esquerda do 1 bit menos significativo foi zero. Se isso for verdade, o resultado final é 1, caso contrário, é zero.
fonte
Geléia , 5 bytes
Experimente online!
Como funciona
fonte
Alice , 8 bytes
Experimente online!
Recebe entrada como o ponto de código de um caractere Unicode e gera o resultado como um byte 0x00 ou 0x01 em conformidade.
Para teste, aqui está uma versão de E / S decimal em 12 bytes que usa exatamente o mesmo algoritmo (apenas E / S é diferente):
Experimente online!
Se Alice fosse uma linguagem de golfe e não exigisse E / S explícita e encerramento do programa, isso ocorreria a meros 5 bytes (
2z1xn
), superando 05AB1E e Jelly.Explicação
fonte
05AB1E , 6 bytes
Experimente online!
fonte
Sábio ,
282016 bytesExperimente online!
Explicação
Esta é uma porta da resposta Python do Leaky Nun. Infelizmente, ele não funciona no TIO porque a versão do intérprete está um pouco desatualizada.
Começamos fazendo 3 cópias de nossa entrada com
::
, em seguida, diminuímos a cópia superior em 1. Isso aumentará todos os bits até o primeiro 1. Em seguida, fazemos isso com outra cópia de nossa entrada. Como todos os bits até o primeiro 1 em nossa entrada foram invertidos, isso resultará em todos esses bits sendo 1 no resultado. Se adicionarmos um~-
ao resultado, obteremos um único 1 no local à esquerda do nosso 1. menos significativo. Nós AND com esta entrada para obter esse bit da entrada. Agora teremos0
se esse bit estiver desativado e uma potência de 2 se esse bit estiver ativado, podemos mudar isso para um único1
ou0
com:[?>]
. Uma vez feito isso, precisamos apenas negar a parte~-^
e estamos prontos.fonte
Python 2 , 19 bytes
Experimente online!
fonte
Haskell ,
454339 bytes6 bytes salvos graças a nimi
Experimente online!
fonte
div
vez dequot
.divMod
:f x|(d,m)<-divMod x 2=[mod(1+d)2,f d]!!m
|(d,m)<-divMod x 2
É um padrão de guarda para ligard
paradiv x 2
em
paramod x 2
. Usamosm
para indexar a lista de dois elementos[...,...]!!m
. No caso dem==0
retornarmosmod(1+d)2
e no caso dem==1
f d
.[f d,mod(1+d)2]
. Experimente online! .Código da máquina x86,
171615 bytes:Assume uma ABI em que os parâmetros são pressionados na pilha e o valor de retorno está no
AL
registro.Isso é desmontado da seguinte maneira:
fonte
JavaScript (ES6),
1714 bytesEdit: Salvo 3 bytes, portando a resposta de @ Dennis, uma vez que notei que a saída booleana era aceitável.
fonte
C (gcc) , 20 bytes
Experimente online!
fonte
INTERCAL , 50 bytes
Os operadores unários da INTERCALs são bastante adequados para isso, então decidi escrever meu primeiro post.
fonte
Haskell , 33 bytes
Experimente online!
Usa indexação 0.
fonte
~
faz neste contexto? Entendo que é uma partida preguiçosa, mas por que você precisa de uma partida preguiçosa?Geléia ,
76 bytes1 byte graças a Erik, o Outgolfer.
Experimente online!
Programas mais longos
Họ¡2&2Ị
Bt0ṫ-ḄỊ
fonte
ṖṪṆ
(como minha resposta excluída) em vez deṫ-ḄỊ
.BUḌDḊḢ¬
,,, ,
109 bytesExplicação
Tome a entrada como 3, por exemplo.
fonte
Haskell , 26 bytes
Experimente online!
Saída booleana.
fonte
Oitava , 34 bytes
Experimente online!
Explicação:
fonte
Submissão:
Python 2 ,
4139 bytesExperimente online!
-2 bytes graças a FryAmTheEggman
Solução inicial:
Python 2 , 43 bytes
Experimente online!
fonte
~-x&1
funciona para a condição while, eu acho.MATL ,
1110 bytesExperimente online! Ou veja as 100 primeiras saídas .
Explicação
fonte
Pari / GP , 20 bytes
Usando o símbolo Kronecker .
Experimente online!
fonte
Befunge-98 , 19 bytes
Experimente online!
fonte
SCALA, 99 (78?) Caracteres, 99 (78?) Bytes
Onde
i
está a entrada.Como você pode ver, economizo 21 bytes se não cuidar do zero (como o autor fez no caso de teste):
Este é o meu primeiro codegolf, então espero ter me saído bem :)
Experimente online! Embora seja muito longo para calcular lol.
fonte
C (gcc) ,
3531 bytesComutado para uma implementação recursiva. Experimente online!
fonte
Java 8, 17 bytes
Porta direta da resposta Python 3 do LeakyNun . Não estou familiarizado o suficiente com operações bit a bit e precedência de operadores para ver uma solução mais curta; talvez haja uma maneira de evitar a parêntese extra?
fonte
Japonês ,
10 89 bytesExperimente online!
Explicação
fonte
false
para tudo, porque o caractere (0 ou 1) é sempre uma string.1
enquanto.JavaScript (ES6),
5334 bytesfonte
a=>!+(a=a.toString(2))[a.lastIndexOf(1)-1]
PHP> = 7.1, 32 bytes
Sandbox do PHP Online
PHP , 40 bytes
Experimente online!
PHP , 41 bytes
Experimente online!
fonte
Lisp comum, 56 bytes
Experimente online!
fonte
Chip , 93 bytes
Recebe entrada como pequenos bytes endian. (O TIO possui um pouco de python que faz isso por você). Dá saída como
0x0
ou0x1
. (O TIO usa xxd para inspecionar o valor).Experimente online!
Como faz isso?
O chip analisa a entrada um byte de cada vez, portanto, o manuseio da entrada multibyte adiciona um pouco de volume, mas não tanto quanto eu temia.
Vamos entrar nisso:
Estes são
HZ
, bits altos do byte anterior (se houver um) eA
-G
, os sete bits inferiores do byte atual. Eles são usados para localizar o bit mais baixo definido do número.Quando o bit mais baixo é encontrado, temos algumas coisas a fazer. Esse primeiro pedaço diz "se tivermos um bit definido (
)
s), então pare deS
pressionar a saída et
termine depois de imprimir a resposta.Qualquer bit do byte atual (
A
-H
) é precedido apenas por um monte de zeros e, em seguida, um (\
e/
: estes olham para os bits diretamente ao norte deles; podemos confiar que todos os bits anteriores eram zero) são passados para os fios nos a direita (v
,'
...), então qualquer que seja o valor que ele está é invertido e dado como o baixo pouco de saída (~a
).fonte