Escreva um programa / função que use dois números inteiros no intervalo de a , inclusive, e retorne se as formas binárias dos números são exatamente um pouco diferentes.
Por exemplo, e têm formas binárias e , que são um pouco separadas. Da mesma forma, e são e , portanto, eles retornam verdadeiros.00000001
00000000
010011000
000011000
No entanto , seu código deve ser primitivo , de modo que, se algum bit no seu programa for invertido, ocorrerá um erro. Por exemplo, se o seu programa era o byte únicoa
(01100001
), todos os 8 possíveis programas modificados:
á ! A q i e c `
deve lançar um erro. Verifique se você está modificando por bytes (por exemplo, o á
lá em cima realmente representa o byte , não o caractere real de dois bytes ).á
Casos de teste:
0,1 => Truthy
1,0 => Truthy
152,24 => Truthy
10,10 => Falsey
10,11 => Truthy
11,12 => Falsey
255,0 => Falsey
Regras:
- Forneça uma estrutura de teste que possa verificar se o seu programa está funcionando corretamente, pois haverá muitos programas possíveis (número de bytes * 8), ou então uma prova completa da manutenção.
- Verifique se o seu programa é válido antes de publicá-lo.
- A saída precisa ser verdade / falsey (de qualquer maneira é bom), ou então dois valores distintos de não erro
- Os erros podem ser tempo de execução, compilador, intérprete etc.
+1
do que a maioria das minhas soluções recentes! : \Respostas:
Python 2 , 35 bytes
Experimente online!
Usa a verificação de potência de dois
n&-n==n
, eliminando on==0
falso positivo.Para referência, estes são os pares de operadores binários de um caractere que estão um pouco separados, tornando-os difíceis de usar:
Felizmente,
&
e^
não estão entre estes.Observe também que
==
pode se tornar<=
e+
pode se tornar o caractere de comentário#
.Python 2 , 41 bytes
Experimente online!
Tomando TFeld
lambda a,b:bin(a^b).count('1')==1
e tornando-o primitivo, alterando os 1s para+True
e==
parais
. Agradecimentos a Jo King por 1 byte.fonte
Python 2 ,
726750 bytesExperimente online!
-5 bytes, graças a Jo King
Devoluções
True
/False
para truthy / falsey.O programa é basicamente o mesmo que
lambda a,b:bin(a^b).count('1')==1
, mas sem números e outros caracteres que funcionam quando os bits são invertidos.Funciona certificando-se de que quase tudo seja uma função nomeada (que é bastante primitiva)
O teste primitivo no final inverte um único bit (para cada bit) e tenta a função em uma entrada. Se isso funcionar (correto ou não), essa variação será impressa. Nenhum programa impresso = função intocada.
fonte
Java 8,
68615645 bytes-11 bytes graças a @EmbodimentOfIgnorance , substituindo constante
java.awt.Font.BOLD
por-~(a^a)
.Experimente online.
Explicação:
A função base mais curta seria:
Experimente online.
Isso é modificado para não haver um dígito,
=
nem um dos+/*
operandos para cálculos numéricos (portanto, o+
concatenação de String está correta):O
+""
e.equals
deve ser comparado emString.equals(String)
vez deint==int
.NOTA:
Integer.equals(int)
pode ser usado aqui, mas seria mais bytes, uma vez que tanto o.bitCount
ejava.awt.Font.BOLD
são primitivosint
em vez deInteger
-objects, então um adicionalnew Integer(...)
seria necessário para transformar um dos dois a umaInteger
-object, antes que pudéssemos usar o.equals
.fonte
java.awt.Font.BOLD
, mas o seuObjects.equals
é um bom golfe, obrigado!Objects
faz parte dajava.util.
importação, então eu tenho que adicionar isso à contagem de bytes, receio, tornando-o 69 bytes. :(-~(a^a)
trabalhar para 1?C (gcc) , 56 bytes
Experimente online!
Retorna
0
se o par diferir em 1, diferente de zero. Um pouco incomum para C, a menos que você considere retornarEXIT_SUCCESS
se o par diferir em 1, qualquer outro valor caso contrário.Usa
sizeof((char)d))
para produzir a constante de1
maneira primitiva, enquanto também força o nome da função a ser primitiva.Em seguida, XORs 1 com o popcount do XOR dos argumentos. Felizmente,
^
é fácil manter o símbolo intacto, assim como o identificador muito longo__builtin_popcount
.Enquanto isso, aqui está o script usado para testar a solução:
Que usa a
./flipbit
ferramenta que escrevi cuja fonte é simplesmente:Os bits complicados foram:
=
não funciona bem, pois pode ser uma comparação em todos os casos em que pode aparecer. Da mesma forma-
não funciona bem. Assim,^
é usado para afirmar a igualdade com 1.fonte
^
operador intocado? Se os bits alterados, o que impede que ele se torne um operador diferente? Isso ainda seria compilado, mas apenas forneceria a resposta errada. Estou entendendo mal algo sobre o significado da palavra "intocada" aqui?^
só pode ser alterado para qualquer um dos_\ZVN~Þ
caracteres ou não imprimíveis no ponto de código 30.~
é o único daqueles que é um operador, mas é apenas um operador unário.__LINE__
vez desizeof(char)
. Eu acho que é bom supor que sua função estará na linha 1 do seu arquivo .c. Ou ainda,unix
é definido como 1 no TIO, e provavelmente na maioria dos outros Linux.d
na fonte no menor número de bytes possível. Caso contráriod
(ou qualquer que seja o nome da função), poderá ser alterado e o código ainda funcionará. Mesmo(__LINE__)
comd();
não vai funcionar porqued();
pode ser alterado para qualquer outra letra e ainda irá compilar uma vez que a função nunca tem que ser chamado, portanto, não está ligada.R ,
38bytes 37-1 byte graças a Nick Kennedy.
Experimente online! (Obrigado a Giuseppe por configurar o TIO corretamente.)
Prova de que é intocada (usando o verificador de Nick Kennedy ).
Saídas 0 para falsey e um valor positivo para verdade, que eu entendo é aceitável, já que R as interpretará como False e True.
Explicação:
bitwXor(a,b)
fornece (como um inteiro) o XOR bit a bit entrea
eb
. Para verificar se é uma potência de 2, verifique se o logon na base 2 é um número inteiro. A funçãodpois
fornece a função de densidade de probabilidade da distribuição de Poisson: seu valor é 0 para valores não inteiros e algo positivo para números inteiros não negativos. OT
existe porquedpois
requer um segundo argumento (qualquer real positivo funciona eT
é interpretado como 1).Se insistirmos em gerar valores distintos, a versão a seguir gera FALSE ou TRUE em 42 bytes (graças a Giuseppe por -8 bytes):
e também é intocada . Experimente online!
fonte
pi
porT
para salvar um byte (ainda intocado). Além disso, seu TIO não corresponde à sua resposta no momento.scan()
; Você tem alguma ideia? (O código funciona bem em um computador.)F
vez deexp(-Inf)
, da mesma maneira que a de NickT
:-)R , 83 bytes
Experimente online!
Prova de que isso é intocado
Trabalhando em torno do fato de que
as.integer
,as.double
etc. são apenas um pouco longeis.integer
,is.double
etc. foi a parte mais difícil. No final, usarsum(T^el(.[-T])
como meio de gerar um e verificaras.double
se retornou um vetor de comprimento> 1 foi o melhor que pude fazer. A embalagemt
é para lidar com o fato de que de outra formaidentical
pode se tornaride~tical
.fonte
Julia 0,7 , 20 bytes
Experimente online!
Aqui está um validador primitivo que tenta executar cada função anônima modificada em relação a alguma entrada e nenhuma passa com êxito. Observe que o código possui um caractere unicode de vários bytes e algumas saídas possíveis de inversão de bits nem são incluídas, pois elas produzem seqüências UTF-8 inválidas.
fonte
x
ey
estão um pouco separados, então acredito que este é um exemplo contrário.y
ex
também estão 1 bit desligados9
e6
respectivamente.C # (compilador interativo do Visual C #) , 37 bytes
A
a=>b=>
peça não pode ser alterada ou a função é inválida.Em
a!=b
, o=
não pode ser alterado, poisint
não pode ser convertido embool
.Experimente online!
fonte
C # (compilador interativo do Visual C #) ,
12810177706174 bytes-27 bytes graças ao Ascii-Only
Experimente online!
Você precisa ser bastante criativo para obter números em C # sem usar literais. Usa apenas o operador ^. As variáveis a, b estão todas a mais de um bit de distância uma da outra e todo o resto é uma palavra-chave / nome.
fonte
+/*=
para operações matemáticas ou de validação. ;)+
JavaScript (ES6 no modo estrito), 61 bytes
Experimente online! ou Verifique se todos os programas modificados estão incorretos
fonte
Groovy ,
4736 bytesExperimente online!
Versão adaptada da resposta Java de Kevin Cruijssen .
fonte
MATLAB, 37 bytes
Desculpe, não há link TIO, porque não consigo fazer com que o conjunto de testes funcione no Octave. Obrigado @ExpiredData por alguns comentários úteis.
Suíte de teste:
fonte
numel
, porque minha suíte de testes não parece estar funcionando no Octave.eye
!Perl 6 ,
7743 bytesAgradecimentos a Jo King por -33 bytes.
Isso é equivalente a
1
foi reescrito comoelems([""])
.2
foi reescrito comosum(elems([""]),elems([""]))
;elems(["",""])
pode parecer funcionar, maselems([""-""])
também é válido e parece travar o testador.Experimente online!
fonte
JavaScript (Node.js) , 20 bytes
Experimente online!
validador por Arnauld, modificado (não use estrito)
fonte