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 X
y 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 1
para tener en cuenta, que solo se puede convertir de una manera.
Ejemplo 2
Entrada: 1 1
Salida: 1,2
Explicación: 01
convierte a 1, 10
convierte a 2.
Ejemplo 3
Entrada: 3 2
Salida: 3,5,6,9,10,12,17,18,20,24
Explicación: Tres 0
sy dos 1
s 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 <= 16
el número máximo en la salida solo puede ocurrir a partir de 161
s, es decir, parámetros0
y16
. - Como resultado de la limitación anterior, el rango de números que esperaríamos en la salida es de
0
y65535
. - 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 0
se 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 de0
s y1
s.Permutations
genera 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
FromDigits
generalmente 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í queee
era 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
1
s, número de0
s.Esencialmente un puerto de la solución Python de Dennis . Creamos un rango desde
0
hasta 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-1
1
2^+##
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
undefined
ahora 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?eval
versió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
$argv
o puedo usar$x
y en su$y
lugar.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