Introducción:
Recuerdo que cuando era niño, obtenía una calculadora y seguía presionando el +
botón, y veía hasta qué punto podía contar. Ahora, me gusta programar, y estoy desarrollando para iOS.
Contar es una habilidad fundamental tanto para humanos como para computadoras. Sin ella, el resto de las matemáticas no se pueden hacer. Se hace simplemente comenzando en 1
y añadiéndole repetitivamente 1
.
El reto:
Esto no es más que un simple desafío. Lo que me gustaría que hiciera su programa es imprimir desde 1
lo Integer
que sea necesario. Sin embargo, le daré un giro, ya que el conteo decimal es un poco aburrido:
El recuento no puede estar en la base 10, tiene que mostrarse contando en binario.
Entonces, para contar hasta 5, usando enteros de 32 bits, se vería así:
0000 0000 0000 0000 0000 0000 0000 0001 ..... 1
0000 0000 0000 0000 0000 0000 0000 0010 ..... 2
0000 0000 0000 0000 0000 0000 0000 0011 ..... 3
0000 0000 0000 0000 0000 0000 0000 0100 ..... 4
0000 0000 0000 0000 0000 0000 0000 0101 ..... 5
Es una computadora. Ellos saben binario mejor. Su entrada puede ser un entero de 32 bits o de 64 bits. Realmente depende de usted. Sin embargo, si usa números enteros de 32 bits, su salida debe ser números enteros de 32 bits en binario , y si usa números enteros de 64 bits, su salida debe ser números enteros de 64 bits en binario .
Entrada de muestra:
un entero de 32 bits, 5
Salida de muestra:
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0101
Puntuación:
Su puntaje es igual a la cantidad de bytes que tenga su código. Como se trata de Code Golf, gana la puntuación más baja.
Puntos extra:
Si muestra, en la salida, el número en el que se encuentra como número base 10 (por ejemplo, 0000 0000 0000 0000 0000 0000 0000 0001
en binario es igual a la base 10 1
), multiplique su puntaje por 0.8
.
Si agrupa 4 dígitos de salida como lo hice yo, multiplique su puntaje por 0.8
(nuevamente). Esto no es obligatorio.
No redondee ni redondee hacia abajo. Tu puntaje es un número de coma flotante.
int
por ejemplo)?Respuestas:
APL, 10 caracteres
Otro en APL. Asume
⎕IO←1
(el valor predeterminado). No hay puntos de bonificación. Lee el número del dispositivo de entrada. Si su APL usa enteros de 64 bits en lugar de enteros de 32 bits, sustituya 64 por 32 según sea necesario.Observe que APL se convierte transparentemente en números de punto flotante cuando se excede el rango de un entero. Por lo tanto, es difícil decir exactamente con qué tamaño entero funciona APL.
explicación
fuente
JavaScript ( ES6 ) 56.8 (71 * 0.8)
Versión de 32 bits, ya que JavaScript no puede manejar la precisión de 64 bits (a lo más 53 bits utilizando dobles puntos de coma flotante)
Sin agrupar
Con agrupación - puntaje 60.16 (94 * .64)
Prueba en cualquier navegador (ES5)
fuente
Pyth, 18 * 0.8 * 0.8 = 11.52 bytes
Salida de ejemplo:
fuente
Pyth, 19 * 0.8 * 0.8 = 12.16 bytes
Ejemplo de salida para la entrada 5:
Demostración.
fuente
Python 2, 48 * 0.8 = 38.4
Convierte un número en binario, utiliza el formato de cadena para convertirlo en binario con 32 dígitos, y luego también imprime el número decimal para la bonificación. Utiliza un
exec
bucle para incrementar desde1
el valor de entrada.fuente
OverflowError: repeated string is too long
. Sin embargo, no estoy seguro de si eso es un límite en mi máquina.CJam, 13.44 (21 × 0.64)
Pruébalo en línea.
fuente
APL, 23.68 (37 × .8 × .8)
fuente
KDB (Q), 50 * 0.8 * 0.8 = 32
Me siento un poco triste con mi presentación :( ¡Debería haber una mejor manera de hacer esto!
Explicación
Prueba
fuente
k){-1{" "/:,/'$:(0N 4#0b\:x),x}@'1+!x}
Lisp común, 96.0
Puntuación:
(* 150 .8 .8)
Ejemplo
Llamando a la función con 10:
Explicación
(format()"~39,'0b ~:*~d" #b101010101010)
da:La cadena intermedia (una matriz) se modifica para poner un carácter de espacio en los siguientes índices basados en cero: 4 9 14 19 24 29 34. Luego se imprime.
Tenga en cuenta que el
(format t"~39,'0,' ,4:b ~:*~d" #b101010101010)
formato aparentemente sencillo no hace lo que queremos. Imprime:(el relleno no está agrupado por 4)
fuente
Rubí, 28 (35 * 0.8)
fuente
C, 97 * 0.8 * 0.8 = 62.08
Ejemplo de salida para la entrada "5":
Podría agregar un carácter de espacio en blanco más para separar los números decimales de los números binarios, pero técnicamente el problema no lo requiere, creo.EDITAR: Gracias, CL!fuente
x%-4-1
conx%-4-2
para agregar el espacio entre el binario y el decimal sin costo adicional de byte. (Esto también eliminaría el espacio extra al comienzo de cada línea).Octava, 23 caracteres
Ejemplo de salida para la entrada 5:
fuente
MatLab, 19 bytes
No demasiado para este, MatLab tiene un convertidor decimal a binario incorporado e imprime automáticamente el resultado.
fuente
Julia, 42 bytes
Esto es un poco más corto sin las bonificaciones.
Esto crea una función sin nombre que toma un número entero e imprime la representación binaria de cada número del 1 al n , cada uno rellenado con ceros a 64 caracteres.
Con bonos, 78 bytes * 0.8 * 0.8 = 49.92
Esto crea una función sin nombre que toma un número entero e imprime la representación binaria como antes, esta vez dividida en grupos de 4 con el número en la base 10 al final.
fuente
Common Lisp, puntuación: 64.0
100 bytes * 0.8 * 0.8
Estoy bastante contento con mi puntaje, pero aún siento que debería existir la posibilidad de simplificar un poco mi código.
Salida
Código
Explicación
Como se describe en la respuesta de coredump , la cadena de formato
genera números de base2 pero parece que tampoco existe la posibilidad de agrupar correctamente. Por lo tanto coacciono la cadena en una lista e itero sobre ella seleccionando grupos de 4 con esta cadena de formato:
"~ {~ a ~ a ~ a ~ a ~} ~ a ~%"
Después de cada grupo de 4 hay un espacio en blanco, y después del último grupo, se imprime el número base10.
Sin agrupación (60x0.8 => 48.0)
Esto usa ~: * para procesar el argumento de formato (único) nuevamente.
fuente
PHP, 51.84 (81 × .8 × .8)
Versión de 32 bits, ya que PHP está limitado a solo 32 bits en Windows, independientemente de si el sistema operativo es de 64 bits.
Toma un argumento de línea de comando.
fuente
CoffeeScript, 60.8 (76 × .8)
Versión de 32 bits por las razones mencionadas anteriormente , ya que CoffeeScript se compila en JavaScript.
Con la agrupación se vuelve un poco más larga: 64.64 (101 × .8 × .8)
fuente
Haskell, 56 bytes
Uso:
Para 64 bits, reemplace el
32
con64
. Todos los demás números también funcionan.fuente
J, 20 bytes
Muestra de entrada y salida:
fuente
Swift: 98.56 (154 * 0.8 * 0.8)
fuente
Ruby, 64 bit
70 * 0.8 * 0.8 = 44.8 bytes (dividido, decimal)
51 * 0.8 = 40.8 bytes (decimal)
67 * 0.8 = 53.6 bytes (dividido)
44 bytes (sin bonificaciones)
fuente
05AB1E ,
1311 bytes-2 bytes gracias a @ Mr.Xcoder .
Salidas sin delimitador de espacio ni número de secuencia.
Pruébalo en línea.
Explicación:
fuente
Lb32jsäð0:»
funciona para 11 bytesj
de anteponer para que se convierta en la longitud correcta.