Avertissement
Cette question n'est pas un double de cette question . Je ne compte pas les chiffres spécifiques, car nous avons déjà ceux définis dans les paramètres initiaux. Cette question se concentre sur les nombres décimaux qui peuvent être construits à partir des chaînes binaires en fonction des chiffres fournis.
Défi
Étant donné deux nombres entiers X
et Y
, représentant respectivement le nombre de zéros ( 0
) et de uns ( 1
), calculez tous les équivalents décimaux possibles qui peuvent être déterminés à partir de la création de chaînes binaires en utilisant uniquement les zéros et les uns fournis, et affichez-les en sortie.
Exemple 1:
Contribution: 0 1
Production: 1
Explication: Un seul 1
compte, qui ne peut être converti que dans un sens.
Exemple 2:
Contribution: 1 1
Production: 1,2
Explication: 01
convertit en 1, 10
convertit en 2.
Exemple 3:
Contribution: 3 2
Production: 3,5,6,9,10,12,17,18,20,24
Explication: trois 0
s et deux 1
s font 00011
(3), 00101
(5), 00110
(6), 01001
(9), 01010
(10), 01100
(12), 10001
(17), 10010
(18), 10100
(20), 11000
(24)
Limitations et règles
- Je m'attendrai seulement à ce que votre code fonctionne là où
0 < X + Y <= 16
le nombre maximum dans la sortie ne peut se produire qu'à partir de 161
s, c'est-à-dire les paramètres0
et16
. - En raison de la limitation ci-dessus, la plage de nombres attendue dans la sortie provient de
0
et65535
. - J'accepterai des fonctions ou du code, tant que la sortie résultante est fournie, que ce soit une liste séparée par des virgules, un tableau, une liste sortie vers STDOUT, etc. Le seul critère que je dois souligner à propos de la sortie est qu'elle doit être triée.
- Ceci est du golf de code, les octets minimum recevront le maximum de gloire.
- Nous ne tolérerons pas de failles idiotes
0 0
?0 <= X + Y <= 16
, donc oui, car0 0
serait considéré comme une entrée valide qui satisfait à cette règle.0 0
? Le nombre 0 peut être représenté par zéro, un ou plusieurs zéros.Réponses:
Gelée , 8 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Python, 60 octets
Testez-le sur Ideone .
Comment ça fonctionne
Tous les nombres positifs qui peuvent être représentés en binaire avec x zéros et y uns sont clairement inférieurs à 2 x + y , car la représentation binaire canonique de ce dernier a x + y + 1 chiffres.
Le lambda itère simplement sur les entiers dans [0, 2 x + y ) et conserve tous les entiers n dans cette plage qui ont y ceux. Puisque n <2 x + y est peut être représenté avec x (ou moins) zéros.
la source
Mathematica,
5957 octetsUn résultat habituel avec Mathematica: fonctions de haut niveau = bonnes, noms de fonctions longues = mauvaises.
Join[0&~Array~#,1&~Array~#2]
crée une liste avec le nombre correct de0
s et1
s.Permutations
génère toutes les permutations de cette liste, sans répétitions (comme je l'ai appris) et dans l'ordre trié.#+##&~Fold~#
(une version golfée de#~FromDigits~2
) convertit une liste de chiffres de base 2 en l'entier qu'ils représentent.Version précédente, avant le commentaire de Martin Ender:
la source
FromDigits
peut généralement être raccourci:#+##&~Fold~#&/@Permutations...
Select[Range[2^+##]-1,x=#;DigitCount[#,2,1]==x&]&
CJam (
1514 octets)Il s'agit d'un bloc anonyme (fonction) qui prend l'entrée en tant que tableau
[number-of-ones number-of-zeros]
et renvoie la sortie en tant que tableau.Démo en ligne
Loin de là , mais plus intéressant : c'est sans permutation intégrée ni conversion de base:
Cela fonctionnerait bien pendant le déroulement d'un GolfScript.
la source
ee{)*}/
par quelque chose en utilisant.*
et est venu avec cette solution de 14 octets:{As.*s:~e!2fb}
les:~
semble un peu inefficace maintenant cependant..*
et décidé queee
c'était plus agréable que par exemple2,:a.*e_
. Je ne savais pas que celae!
donnerait la même sortie quel que soit l'ordre de son argument.Japt , 16 octets
Testez-le en ligne!
Comment ça fonctionne
Version alternative, 17 octets
J'ai essayé de jouer au golf sur les deux versions, mais je ne trouve tout simplement aucun jeu ...
la source
("0".p(U)+"1".p(V)).á().m("n",2)
; chacune des.x()
fonctions est définie dans le fichier source .Rubis, 63 octets
Une implémentation simple. Suggestions de golf bienvenues.
Ungolfing
la source
Pyth - 11 octets
Suite de tests .
la source
Python 2 -
10599 octets+8 octets car notre sortie doit être triée
la source
Mathematica, 47 octets
Une fonction sans nom prenant deux arguments: nombre de
1
s, nombre de0
s.Essentiellement un portage de la solution Python de Dennis . Nous créons une plage de
0
à puis ne conservons que les nombres dont la quantité de bits correspond à la première entrée. Le bit le plus intéressant est probablement celui qui utilise une certaine magie de séquence pour éviter les parenthèses autour de l'ajout des deux arguments.2x+y-1
1
2^+##
la source
MATLAB 57 + 6
courir en utilisant
non golfé
la source
MATL , 9 octets
Essayez-le en ligne!
Explication
L'approche est similaire à celle de la réponse de Dennis Jelly .
la source
En fait, 21 octets
Un portage de ma réponse Ruby . Suggestions de golf bienvenues. Essayez-le en ligne!
Comment ça fonctionne
la source
Groovy 74 octets, 93 octets ou 123 octets
Je ne sais pas lequel vous considérez le mieux répond à la question mais ...
Solution de 74 octets
Pour une entrée de 1,2, vous obtenez:
Solution de 93 octets
Pour une entrée de 1,2, vous obtenez:
Solution de 123 octets
Pour une entrée de 1,2, vous obtenez:
Essayez-le ici:
https://groovyconsole.appspot.com/edit/5143619413475328
la source
JavaScript (Firefox 48),
8576747170 octetsEnregistré 3 octets grâce à @Neil.
La compréhension des tableaux est impressionnante. Dommage qu'ils n'aient pas encore fait partie des spécifications officielles d'ECMAScript.
JavaScript (ES6),
1098779787170 octetsDevrait fonctionner dans tous les navigateurs compatibles ES6 maintenant. 7 octets enregistrés sur celui-ci, également grâce à @Neil.
la source
undefined
maintenant avec chaque test que je fais ...?f=(m,n)=>...
, puis appelez-la commef(3,2)
. Si c'est ce que vous faites, quel navigateur utilisez-vous?eval
version -less (fait exactement la même chose, mais 3 octets de plus):(m,n)=>{a="";for(i=0;i<1<<m+n;i++)if(i.toString(2).split(1).length==n+1)a+=i+" ";return a}
Groovy 80 octets
basé sur la réponse de @carusocomputing
sa solution de 123 octets peut être compressée en 80 octets:
Solution de 80 octets
Pour une entrée de 1,2, vous obtenez:
la source
C (gcc) ,
7268 octetsEssayez-le en ligne!
Malheureusement, il n'y a pas de popcount () dans la bibliothèque standard, mais il est fourni comme "fonction intégrée" par GCC. La sortie est triée, mais dans l'ordre inverse.
Merci à @ceilingcat d'avoir rasé 4 octets!
la source
PHP, 80 ou 63 octets
selon si je dois utiliser
$argv
ou peut utiliser$x
et à la$y
place.imprime tous les nombres correspondants dans l'ordre décroissant délimité par des traits de soulignement.
le nom de fichier ne doit pas commencer par un chiffre.
pas de builtins, 88 ou 71 octets
ajoutez un octet chacun pour un seul trait de soulignement après chaque numéro.
@WallyWest: Vous aviez raison. Économise 3 octets pour moi
for($i=-1;++$i<...;)
la source
Perl 6 ,
64 6249 octetsExplication:
la source