Étant donné un entier , vous devez trouver le nombre minimum de bits qui doivent être inversés dans N pour le transformer en nombre carré . Vous êtes uniquement autorisé à inverser les bits en dessous du plus significatif .
Exemples
- est déjà un nombre carré ( 2 2 ), donc la sortie attendue est 0 .
- peut être transformé en nombre carré en inversant 1 bit: 11000 → 1100 1 ( 25 = 5 2 ), donc la sortie attendue est 1 .
- ne peut pas être transformé en nombre carré en inversant un seul bit (les résultats possibles étant 23 , 20 , 18 et 30 ) mais cela peut être fait en inversant 2 bits: 10110 → 10 0 0 0 ( 16 = 4 2 ) , donc la sortie attendue est 2 .
Règles
- C'est bien si votre code est trop lent ou génère une erreur pour les plus grands cas de test, mais il devrait au moins prendre en charge en moins d'une minute.
- C'est du code-golf !
Cas de test
Input | Output
----------+--------
4 | 0
22 | 2
24 | 1
30 | 3
94 | 4
831 | 5
832 | 1
1055 | 4
6495 | 6
9999 | 4
40063 | 6
247614 | 7 (smallest N for which the answer is 7)
1049310 | 7 (clear them all!)
7361278 | 8 (smallest N for which the answer is 8)
100048606 | 8 (a bigger "8")
Ou au format convivial copier / coller:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
sur TIO, est-ce un problème?Réponses:
Rubis, 74 octets
Essayez-le en ligne!
Cela génère simplement la séquence (ce qui est beaucoup plus que suffisant), la XOR avec n , puis prend soit le nombre de 1 dans sa représentation binaire si le nombre de bits est inférieur supérieur ou égal à log 2 n , ou n sinon. Il prend alors le nombre minimum de bits retournés. Renvoyer n au lieu du nombre de bits inversés lorsque le bit inversé le plus élevé est supérieur à log 2 n empêche ces cas d'être choisis comme minimum, car n[12,22,…,n2] n log2n n n log2n n sera toujours supérieur au nombre de bits dont il dispose.
Merci à Piccolo d' avoir enregistré un octet.
la source
(n^x*x).to_s 2;...
au lieu de(n^x*x).to_s(2);...
Gelée , 12 octets
Essayez-le en ligne!
Découvrez une suite de tests!
Lien monadique. Devrait être jouable au golf.
Mais je suis trop stupide pour penser à un moyen de me débarrasser de l'C'est ma première réponse dans laquelle j'utilise avec succès le filtrage / mappage / bouclage en général avec une chaîne dyadique \ o /³
art.Explication
la source
Coque , 20 octets
Essayez-le en ligne!
Explication
la source
▼mΣfo¬←ṠMz≠ȯfo£İ□ḋπŀ2Lḋ
enregistre 2 octets. RIP vous parfait score carré.Perl 6 , 65 octets
Essayez-le en ligne!
Je me sens un peu sale pour tester un carré parfait en recherchant un point dans la représentation sous forme de chaîne de la racine carrée du nombre, mais ... tout pour raser les octets.
la source
05AB1E ,
2015 octets-5 octets grâce à @ Mr.Xcoder utilisant un portage de sa réponse Jelly .
Essayez-le en ligne ou vérifiez tous les cas de test (les trois plus grands cas de test sont supprimés car ils expirent après 60 secondes; il faut encore environ 35 à 45 secondes avec les autres cas de test).
Explication:
la source
Lnʒ‚b€gË}^b€SOß
. Malheureusement, cela casse votre suite de testsJava (JDK 10) , 110 octets
Essayez-le en ligne!
la source
&
au lieu de logique et&&
Gaia , 18 octets
Près du port de ma réponse Jelly .
Essayez-le en ligne!
Panne
la source
Brachylog ,
5641 octetsÇa ne battra aucun record de longueur mais je pensais que je le posterais quand même
Essayez-le en ligne!
la source
assemblage x86-64, 37 octets
Bytecode:
Eh bien, cela calcule même l'exemple le plus élevé en moins d'une seconde.
Le cœur de l'algorithme est xor / popcount comme d'habitude.
la source
mov
s par unxchg
mov %ecx,%eax
) et je ne peux pas laisser mourir% ecx.Wolfram Language (Mathematica) , 67 octets
Essayez-le en ligne!
Prend{ 1 , 2 , … , n } et les équerre. Ensuite, les nombres avec le même
BitLength
que l'entrée sontPick
édités etBitXor
édités avec l'entrée. Ensuite, l'Min
imumDigitCount
de1
s en binaire est retourné.la source
Fusain , 31 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
Gelée , 20 octets
Essayez-le en ligne!
la source
Python 2 , 82 octets
Essayez-le en ligne!
la source
Japt
-g
, 20 octetsCela peut être joué au golf.
Essayez-le en ligne!
la source
C (gcc) ,
9391 octetsEssayez-le en ligne!
Edit: Je pense que ma solution d'origine ( Essayez-la en ligne! ) N'est pas valide, car l'une des variables,,
m
globale pour économiser quelques octets en ne spécifiant pas de type, a été initialisée en dehors def(n)
et a donc dû être réinitialisée entre les appelsCode non golfé et commenté:
Modifications:
la source