Por favor, disculpe el título punny.
Esta es una pregunta inspirada en una propiedad curiosa de 82000 . En él, el autor señala que el número 82000 es binario en las bases 2, 3, 4 y 5. La publicación plantea la pregunta "¿hay un número que sea binario en las bases 2, 3, 4, 5 y 6? "? (Para aquellos curiosos, he verificado valores de hasta 10 ^ 1,000,000 y hasta ahora la respuesta es no).
Esto me hizo pensar: dado un número, ¿en qué bases es binario?
Nuestro curioso número, 82000, es en realidad binario en seis bases:
Base 2 = 10100000001010000
Base 3 = 11011111001
Base 4 = 110001100
Base 5 = 10111000
Base 81999 = 11
Base 82000 = 10
No todos los números tendrán bases binarias que sean secuenciales. Considere el número 83521. Es binario en las bases 2, 17, 289, 83520 y 83521.
Su desafío es determinar y mostrar en qué bases un número es binario.
Reglas
- Un número se considera "binario" en una base dada si su representación en esa base consiste solo en ceros y unos.
110110
es un valor binario, mientras12345
que no lo es,A380F
es definitivamente no lo es. - Su número será proporcionado en la entrada estándar. Será un valor entero entre 2 y 2 ^ 32-1 inclusive y se proporcionará en formato base 10.
- En orden ascendente, muestre cada base mayor que una en la que el número sea binario. Cada base debe estar en su propia línea. Si incluye el valor binario en esa base (vea la puntuación de bonificación a continuación), separe la base y el valor binario con un espacio. Solo se juzgará la salida a la salida estándar, se ignorarán los errores estándar y otras fuentes.
Tanteo
Su puntaje es el tamaño de su programa en bytes. Cuanto más bajo sea el puntaje, mejor.
Bonificación :
si su programa también genera los valores binarios en las bases encontradas, multiplique su puntaje por 0.75
El valor binario que se muestra no debe tener puntuación adicional, ni ceros extraños, ni punto decimal, solo ceros y unos.
Ejemplos
Entrada:
82000
Salida (recibe bonificación):
2 10100000001010000
3 11011111001
4 110001100
5 10111000
81999 11
82000 10
Entrada:
1234321
Salida (sin bonificación):
2
1111
1234320
1234321
fuente
n
siempre es al menos binaria en bases1
(no contados),2
,n-1
, yn
.[1, 0, 1, 1, 0]
bien, o ¿los números tienen que unirse como10110
?Respuestas:
Pyth,
1413Gracias a Jakube por señalar la nueva
S
función.Pruébalo aquí.
La versión en línea es muy lenta
1234321
. Esto simplemente convierte la entrada a cada base de 2 a sí misma y descarta los resultados que contienen valores distintos de 0 y 1.Explicación:
Además, esta es una versión de bonificación (
no muy bienahora muy bien, nuevamente gracias a Jakube) (20 * .75 = 15):Pruébalo aquí
fuente
VQI!-JjQK+2NU2pdKjkJ
veces, la programación funcional no es el mejor enfoque.Julia,
7270 bytesEn realidad es más largo con la bonificación, por lo que no hay bonificación aquí.
Esto lee una línea de STDIN, la convierte en un número entero e imprime el resultado. A pesar de ser un método de fuerza bruta, la entrada 1234321 me tomó menos de 1 segundo.
Ungolfed + explicación:
Ejemplos:
NOTA : Si la entrada se puede tomar como un argumento de función en lugar de STDIN (esperando la confirmación del OP), la solución es de 55 bytes.
fuente
CJam, 20 bytes (o 27 bytes * 0.75 = 20.25)
Aquí está la versión sin bonificación, 20 bytes:
Intenta esto aquí.
Solo por diversión, aquí está la versión de bonificación, 27 bytes:
Pruébalo en línea aquí
fuente
ri_,f{2+S@2$bN}4/{2=2,-!},
(19.5 bytes)Mathematica, 59 bytes
Ugh ...
IntegerDigits
D:No hay mucho que explicar sobre el código ... 12 bytes son desperdiciados por el requisito de usar STDIN y STDOUT.
No creo que pueda reclamar el bono. Lo mejor que tengo es 84 bytes (lo que arroja una puntuación superior a 60):
fuente
Pitón 2,
88 8680Bastante sencillo, sin bonificación. Python es agradable e indulgente con variables globales.
Lo mejor que he conseguido para obtener el bono es 118 * .75 = 87.75 :
fuente
g(N)
lugar den=N
.g(N,b)
así que la coma hacía que los dos fueran iguales), pero ¿qué quieres decir con que no necesitaría una variable para N?g(n/b)
a(g(n/b)+'n%b')
donde 'representa un retroceso?Python 2, 90 * 0.75 = 67.5
Enfoque iterativo bastante sencillo.
Sin la bonificación, esto es 73 bytes:
fuente
SQL (PostgreSQL),
247,5255230,25 (307 * 0,75)Como se sabe que SQL es maravilloso en este tipo de desafíos, pensé que sería mejor armar uno :) El bono realmente valió la pena para este.
Debe cumplir con las especificaciones, pero no tengo una manera fácil de probar la COPIA I DE STDIN .
Editar orden fija. Se cambió la forma en que se maneja la columna R para usar una matriz.
Como prueba, solo utilicé inserciones rectas en la
I
mesa. Ejecución de prueba ampliada y comentada.fuente
order by
. Ahora para ver si puedo recuperar esos personajesHaskell 109 * 0.75 = 81.75 bytes
Ejemplo de uso (nota: los valores binarios son lsb primero):
Sin restricciones de entrada / salida, es decir, entrada a través del argumento de función, salida en formato nativo a través de REPL):
Haskell, 67 * 0.75 = 50.25 bytes
Devuelve una lista de pares (base, valor). Los valores son lsb primero, por ejemplo (nuevas líneas / espacios añadidos para una mejor visualización):
fuente
R, 111
Probablemente mucho espacio para mejorar esto en este momento
Corre con advertencias
fuente
I%/%b
de un lógico en laany()
cláusula. `Java,
181155.25 (207 * .75)151.5 (202 * .75) bytesAmpliado con explicación:
Original (sin bonificación):
3.75 bytes gracias a Ypnypn :)
fuente
R,
948379Uso:
El núcleo de la función es
!sapply(2:n,function(x){while(n&n%%x<2)n=n%/%x;n})
que, para cada base x de 2 a n, mantenga el cociente n / x siempre que el resto sea 0 y 1. Luego genera el resultado (que es 0 si todos los restos fueron 1 o 0) y lo niega (0 niega a VERDADERO, todo lo demás niega a FALSO). Gracias al alcance de la función, no hay necesidad de hacer una variable ficticia para n. El vector resultante de booleanos se usa para indexar2:n
y, por lo tanto, solo genera las bases para las que funcionó.fuente
TI-Basic, 45 bytes
Explicación
La parte complicada
La segunda línea funciona de la siguiente manera:
Nota
El programa se ejecuta significativamente más rápido si
)
se coloca un paréntesis de cierre al final de la segunda línea. Vea aquí para más información sobre esto.fuente
TI-BASIC,
3129Esto es probablemente óptimo para TI-BASIC.
Explicación:
randIntNoRep(1,32)
devuelve una permutación aleatoria de los números del 1 al 32 (todo lo que necesitamos es esos números en algún orden; TI-BASIC no tiene nada como el comando iota de APL). 32 elementos son suficientes porque la base más pequeña posible es 2 y el número más grande es 2 ^ 32-1.B^randIntNoRep(1,31)
eleva esa lista a la potencia Bth, lo que resulta en la lista que contiene todosB^1,B^2,...,B^32
(en algún orden).Luego, la entrada (en la
Ans
variable wer, que se ingresa en el formulario[number]:[program name]
) se divide por ese número. Si su entrada es 42 y la base es 2, el resultado será la lista21,10.5,5.25,...,42/32,42/64,[lots of numbers less than 1/2]
, nuevamente en algún orden.Tomar la parte fraccionaria y multiplicar el número por su base da el dígito en esa posición en la representación de la base-b. Si todos los dígitos son menores que 2, entonces el dígito más grande será menor que 2.
Como dijo Ypnypn, un paréntesis de cierre en el
For
declaración acelera esto debido a un error del analizador.31-> 31: se guardó un byte pero se corrigieron los errores de redondeo que agregaron el byte nuevamente.
31-> 29: se guardaron dos bytes usando en
RandIntNoRep()
lugar decumSum(binomcdf())
.fuente
seq(expression, variable, start, end[, step])
. Si no se da ningún paso, el valor predeterminado es 1. Sin embargo,cumSum(binomcdf(31,0
es de 8 bytes mientras queseq(X,X,1,32
es de 9 bytes.Jalea , 9 bytes
Pruébalo en línea!
Hecho junto a caird coinheringaahing en el chat .
Cómo funciona
fuente
Javascript, ES6,
118 * .75 = 88.5110 * .75 = 82.5Versión previa:
Comprobar:
fuente
JavaScript ( ES6 ) 65
68 bytes para una función con un parámetro y salida de consola.
65 bytes con E / S a través de una ventana emergente
Reclamando la bonificación: 88 * 0.75 => 66
fuente
Mathematica, 76 * 0.75 = 57
Inicialmente se olvidó de los requisitos de entrada ... Afortunadamente, esos no agregaron demasiado extra.
fuente
Ruby , 44 bytes
Pruébalo en línea!
fuente
Perl 5 , 63 bytes
Pruébalo en línea!
No hay bonificación en esto porque puntúa muy ligeramente mejor que mi versión con la bonificación:
Perl 5 , 85 bytes * 0.75 = 63.75
Pruébalo en línea!
fuente