Descargo de responsabilidad
Esta pregunta no es un duplicado de esta pregunta . No estoy contando dígitos específicos, ya que los tenemos establecidos en los parámetros iniciales. Esta pregunta se centra en los números decimales que se pueden construir a partir de las cadenas binarias en función de los dígitos proporcionados.
Desafío
Dados dos enteros Xy Y, representando el número de ceros ( 0) y unos ( 1) respectivamente, calcule todos los equivalentes decimales posibles que se pueden determinar a partir de la creación de cadenas binarias usando solo los ceros y unos proporcionados, y los muestra como salida.
Ejemplo 1:
Entrada: 0 1
Salida: 1
Explicación: Solo uno 1para tener en cuenta, que solo se puede convertir de una manera.
Ejemplo 2
Entrada: 1 1
Salida: 1,2
Explicación: 01convierte a 1, 10convierte a 2.
Ejemplo 3
Entrada: 3 2
Salida: 3,5,6,9,10,12,17,18,20,24
Explicación: Tres 0sy dos 1s hacen 00011(3), 00101(5), 00110(6), 01001(9), 01010(10), 01100(12), 10001(17), 10010(18), 10100(20), 11000(24)
Limitaciones y Reglas
- Solo esperaré que su código funcione donde 0 < X + Y <= 16el número máximo en la salida solo puede ocurrir a partir de 161s, es decir, parámetros0y16.
- Como resultado de la limitación anterior, el rango de números que esperaríamos en la salida es de 0y65535.
- Aceptaré funciones o código, siempre que se proporcione la salida resultante, ya sea una lista separada por comas, una matriz, una lista enviada a STDOUT, etc. El único criterio que debo enfatizar sobre la salida es que debe ordenarse.
- Este es el código de golf, los bytes mínimos recibirán la máxima gloria.
- No toleraremos lagunas tontas

0 0?0 <= X + Y <= 16, así que sí, porque0 0se consideraría una entrada válida que satisface esa regla.0 0? El número 0 puede representarse por cero, uno o más ceros.Respuestas:
Jalea , 8 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python, 60 bytes
Pruébelo en Ideone .
Cómo funciona
Todos los números positivos que pueden representarse en binario con x ceros e y son claramente menores que 2 x + y , ya que la representación binaria canónica de este último tiene x + y + 1 dígitos.
La lambda simplemente itera sobre los enteros en [0, 2 x + y ) y mantiene todos los enteros n en ese rango que tienen y unos. Como n <2 x + y se puede representar con x (o menos) ceros.
fuente
Mathematica,
5957 bytesUn resultado habitual con Mathematica: funciones de alto nivel = bueno, nombres largos de función = malo.
Join[0&~Array~#,1&~Array~#2]crea una lista con el número correcto de0s y1s.Permutationsgenera todas las permutaciones de esa lista, sin repeticiones (como aprendí) y en orden ordenado.#+##&~Fold~#(una versión de golfuscated#~FromDigits~2) convierte una lista de dígitos de base 2 en el entero que representan.Versión anterior, antes del comentario de Martin Ender:
fuente
FromDigitsgeneralmente se puede acortar:#+##&~Fold~#&/@Permutations...Select[Range[2^+##]-1,x=#;DigitCount[#,2,1]==x&]&CJam (
1514 bytes)Este es un bloque anónimo (función) que toma la entrada como una matriz
[number-of-ones number-of-zeros]y devuelve la salida como una matriz.Demostración en línea
Un largo camino fuera de la marca, pero más interesante : esto es sin construcciones de permutación o conversión de base:
Funcionaría bien a medida que se desarrolla un GolfScript.
fuente
ee{)*}/con algo usando.*y se acercó con esta solución de 14 bytes:{As.*s:~e!2fb}Els:~parece un poco ineficiente aunque ahora..*y decidí queeeera mejor que, por ejemplo2,:a.*e_. Sin embargo, no me di cuenta de quee!eso dará el mismo resultado independientemente del orden de su argumento.Japt , 16 bytes
¡Pruébalo en línea!
Cómo funciona
Versión alternativa, 17 bytes.
He estado tratando de seguir jugando golf en ambas versiones, pero no puedo encontrar ninguna holgura ...
fuente
("0".p(U)+"1".p(V)).á().m("n",2); cada una de las.x()funciones se define en el archivo fuente .Ruby, 63 bytes
Una implementación simple. Sugerencias de golf bienvenidas.
No golfista
fuente
Pyth - 11 bytes
Test Suite .
fuente
Python 2 -
10599 bytes+8 bytes porque nuestra salida necesita ser ordenada
fuente
Mathematica, 47 bytes
Una función sin nombre que toma dos argumentos: número de
1s, número de0s.Esencialmente un puerto de la solución Python de Dennis . Creamos un rango desde
0hasta y luego mantenemos solo aquellos números cuya cantidad de bits es igual a la primera entrada. El bit más interesante es probablemente el que usa un poco de magia de secuencia para evitar los paréntesis en torno a la adición de los dos argumentos.2x+y-112^+##fuente
MATLAB 57 + 6
correr usando
sin golf
fuente
MATL , 9 bytes
Pruébalo en línea!
Explicación
El enfoque es similar al de la respuesta de Dennis 'Jelly .
fuente
En realidad, 21 bytes
Un puerto de mi respuesta Ruby . Sugerencias de golf bienvenidas. Pruébalo en línea!
Cómo funciona
fuente
Groovy 74 Bytes, 93 Bytes o 123 Bytes
No sé cuál consideras que responde más completamente la pregunta, pero ...
Solución de 74 bytes
Para una entrada de 1,2 obtienes:
Solución de 93 bytes
Para una entrada de 1,2 obtienes:
Solución de 123 bytes
Para una entrada de 1,2 obtienes:
Pruébalo aquí:
https://groovyconsole.appspot.com/edit/5143619413475328
fuente
JavaScript (Firefox 48),
8576747170 bytesGuardado 3 bytes gracias a @Neil.
Las comprensiones de matriz son increíbles. Lástima que aún no hayan llegado a la especificación oficial de ECMAScript.
JavaScript (ES6),
1098779787170 bytesDebería funcionar en todos los navegadores compatibles con ES6 ahora. Ahorré 7 bytes en este, también gracias a @Neil.
fuente
undefinedahora con cada prueba que hago ...?f=(m,n)=>..., luego llámelo comof(3,2). Si eso es lo que estás haciendo, ¿qué navegador estás usando?evalversión sin (hace exactamente lo mismo, pero 3 bytes más):(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 Bytes
basado en la respuesta de @carusocomputing
su solución de 123 bytes se puede comprimir en 80 bytes:
Solución de 80 bytes
Para una entrada de 1,2 obtienes:
fuente
C (gcc) ,
7268 bytesPruébalo en línea!
Desafortunadamente, no hay popcount () en la biblioteca estándar, pero GCC la proporciona como una "función integrada". La salida está ordenada, pero en orden inverso.
¡Gracias a @ceilingcat por reducir 4 bytes!
fuente
PHP, 80 o 63 bytes
dependiendo de si debo usar
$argvo puedo usar$xy en su$ylugar.imprime todos los números coincidentes en orden descendente delimitados por guiones bajos.
el nombre del archivo no debe comenzar con un dígito.
sin incorporaciones, 88 o 71 bytes
agregue un byte cada uno para un solo guión bajo después de cada número.
@WallyWest: Tenías razón. Me ahorra 3 bytes de
for($i=-1;++$i<...;)fuente
Perl 6 ,
64 6249 bytesExplicación:
fuente