Este es el hoyo 1 del Torneo de otoño de APL CodeGolf . Soy el autor original del problema allí y, por lo tanto, me permite volver a publicarlo aquí.
Dada una lista de números, produzca un gráfico de barras horizontales de #caracteres para cuántos números caben en cada uno de los diez grupos de igual tamaño. Por ejemplo, si los rangos de datos van de 0 a 100, los rangos serán 0–9.9, 10–19.9,…, 90–100. (Formalmente, [0,10), [10,20),…, [90,100].). Puede suponer que habrá al menos dos números y que no todos los números serán iguales.
Ejemplos:
[1,0,0,0,0,0,0,0,0,0] da:
#########
#
[0,1,2,3,4,5,6,7,8,9] da:
#
#
#
#
#
#
#
#
#
#
[0,1,2,3,4,5,6,7,8,9,10] da:
#
#
#
#
#
#
#
#
#
##
[0,1,2,3,4,5,6,7,8,9,10,11] da:
##
#
#
#
#
#
#
#
#
##
[0,-0.5,-1,-1.5,-2,-2.5,-3,-3.5,-4,-4.5,0.5,0,-0.5,-1,-1.5,-2,-2.5,-3,-3.5,-4,1,0.5,0,-0.5,-1,-1.5,-2,-2.5,-3,-3.5,1.5,1,0.5,0,-0.5,-1,-1.5,-2,-2.5,-3,2,1.5,1,0.5,0,-0.5,-1,-1.5,-2,-2.5,2.5,2,1.5,1,0.5,0,-0.5,-1,-1.5,-2,3,2.5,2,1.5,1,0.5,0,-0.5,-1,-1.5,3.5,3,2.5,2,1.5,1,0.5,0,-0.5,-1,4,3.5,3,2.5,2,1.5,1,0.5,0,-0.5,4.5,4,3.5,3,2.5,2,1.5,1,0.5,0] da:
###
#######
###########
###############
#########
###################
###############
###########
#######
###
[9014,9082,9077,9068,8866,8710,9049,8364,8867,9015,9064,9023,9024,8804,8805,8800,8744,8743,8714,9076,8593,8595,9075,9675,8968,8970,8711,8728,8834,8835,8745,8746,8869,8868,9073,9074,9042,9035,9033,9021,8854,9055,9017,9045,9038,9067,9066,8801,8802,9496,9488,9484,9492,9532,9472,9500,9508,9524,9516,9474,8739,9079,8900,8592,8594,9053,9109,9054,9059] da:
#
####
#########
############
######
#########################
###########
#
[0,8,10,13,32,12,6,7,27,9,37,39,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,1,2,175,46,48,49,50,51,52,53,54,55,56,57,3,165,36,163,162,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,4,5,253,183,127,193,194,195,199,200,202,203,204,205,206,207,208,210,211,212,213,217,218,219,221,254,227,236,240,242,245,123,125,168,192,196,197,198,201,209,214,216,220,223,224,225,226,228,229,230,231,232,233,234,235,237,238,239,241,91,47,92,60,61,62,45,43,247,215,63,126,42,40,124,59,44,33,243,244,246,248,34,35,30,38,180,64,249,250,251,94,252,96,182,58,191,161,41,93,31,160,167] da:
#############
######################
##########################
#########################
#########################
#
########
################
########################
##########################

[0.9,1](y no[0.9,1))?[0,1)contiene solo0mientras que la fila inferior[9,10]contiene ambos9y10.Respuestas:
Python 2 , 96 bytes
Pruébalo en línea!
fuente
Python 2 ,
10795 bytesPruébalo en línea!
fuente
*.1no funciona en lugar del/10.último caso de prueba. TBH No sé por qué no funciona.R ,
7781 bytes+4 bytes para arreglar algunos casos de prueba
Pruébalo en línea!
El enlace es a una versión del código que toma entradas separadas por comas; Esta versión lleva espacio separado.
Lee desde stdin, imprime en stdout.
R es un lenguaje de programación estadística que hace todo lo posible para dar resultados de alta calidad, lo que a veces es frustrante:
histagrupa las entradas en un histograma conbreakssu segundo argumento. Normalmente, uno esperaría que pudiera especificar que el número de descansos sea 10. De hecho, este es el caso:(énfasis añadido).
La siguiente oración, sin embargo, dice:
Así que miré la documentación de
prettyy simplemente no funciona para nuestra situación, ya que selecciona puntos de quiebre por lo tanto:Lo que simplemente no servirá.
Por lo tanto,
seq(min(x),max(x),,11)especifica 11 puntos igualmente espaciados comobreaks,hist(x,breaks,r=F)$cda los recuentos,r=Fasegura que los contenedores sean intervalos abiertos a la derecha, y elforbucle se encarga del resto.fuente
C (gcc) , 241 bytes
Pruébalo en línea!
fuente
kcomo global, (+ 1byte), sin embargo, se inicializa a 0, por lo tanto, guarde 3 bytes dek=0.doubleafloatylfaf, salvar a otro de 2 bytes. (al menos eso funciona en TIO)floatfuerza de trabajo, que no usamos porque no es el tipo de punto flotante "estándar" en C y reduce la precisión, por lo que no está seguro de esto es permitido ...Mathematica, 152 bytes
Pruébalo en línea!
fuente
Range[0,9]mientras habloRange[0,10]sin razón. Pero en realidad falla porRange[0,10]: TIO .<=en ambos extremos, lo cual es correcto en el último segmento pero no en los otros 9.JavaScript (ES6), 99 bytes
Editar 2 bytes guardar thx @JustinMariner
Una función que devuelve una matriz de cadenas
Menos golf
Prueba
fuente
ia los corchetes seguidos de una coma, lo que le permite eliminar los paréntesis alrededor del cuerpo de la función de mapa: ¡ Pruébelo en línea!iy lo usaMath.minnuevamente, con un alias: ¡ Pruébelo en línea!Python 2 ,
126121 bytesPruébalo en línea!
fuente
Jalea , 21 bytes
Un enlace monádico devuelve una lista de cadenas.
Pruébalo en línea!
fuente
ÇŒṘoÇYen su pie de página para visualizar el resultado. Además, en lugar del programa completo, puede decir que su envío es un enlace monádico, que devuelve en lugar de imprimir, lo que lo hace automáticamente válido.Pyth ,
3231 bytesPruébalo aquí! o Verificar todos los casos de prueba. (con impresión bonita usando
j)Como funciona esto
Este es un programa completo que recibe información de STDIN. Esto es para la versión de 32 bytes. Lo actualizaré pronto.
* R \ #_M. ++ msmgk + hSQ * dc-eSQhSQTQTZ ~ Programa completo. m T ~ Mapa sobre [0, 10) con var d. m Q ~ Mapa sobre la entrada con var k. g ~ ¿Es mayor o igual que? k ~ El elemento actual de la entrada, k. + hSQ * dc-eSQhSQT ~ Vamos a dividir esto en pedazos: hSQ ~ El elemento más bajo de la lista de entrada. + ~ Plus: * dc-eSQhSQT ~ Vamos a dividir esto en más partes: * ~ Multiplicación. d ~ El elemento actual de [0, 10), d. c T ~ División de flotación por 10 de: -eSQhSQ ~ La diferencia entre el máximo y el mínimo de la lista de entrada. s ~ Suma. Cuente la cantidad de resultados verdaderos. + Z ~ Agregar un 0. . + ~ Obtener los deltas. _M ~ Obtiene -delta para cada delta en la lista anterior. \ # ~ El carácter literal "#". * R ~ Multiplicación vectorizada. Opcionalmente puedes use j para unirse mediante nuevas líneas (como lo hace el enlace). ~ Salida implícita.fuente
Carbón , 31 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. La entrada de listas de longitud variable parece un poco incómoda en Charcoal, por lo que tuve que ajustar la lista en una matriz que contiene una cadena. Explicación:
fuente
Fortran 2003, 263 bytes
Lo escribí en GNU gfortran 5.4.0 y lo compilé sin ningún indicador adicional.
Lee de STDIN, un valor a la vez, e imprime en STDOUT.
Aquí va:
programa h; real, asignable :: a (:); carácter f * 9; asignar (a (0)); hacer; leer (*, *, end = 8) r; a = [a, r]; enddo; 9 formato ("(", i0, "(" "#" "))") 8 a = (a-minval (a)) + epsilon (1.); A = techo (10 * a / maxval (a)); do i = 1,10; j = cuenta (a == i); si (j == 0) print *; if (j == 0) cycle; write (f, 9) j; imprimir f; enddo; finExplicación sin golf: (no sé si "golf" se puede aplicar a fortran pero de cualquier manera: P)
programa h real, asignable :: a (:)! Cree una matriz asignable para que podamos reasignar dinámicamente personaje f * 9! Una matriz de caracteres para formatear la salida asignar (a (0))! Asignar "a" vacío al principio hacer leer (*, *, end = 8) r! Leer de STDIN. Si EOF, pasa a 8, de lo contrario a = [a, r]! Anexa a "a" enddo 9 formato ("(", i0, "(" "#" "))")! Una etiqueta de formato 8 a = (a-minval (a)) + épsilon (1.)! (8) Normaliza a (agrega épsilon para evitar la indexación cero) a = techo (10 * a / maxval (a))! Normalizando y multiplicando por el número de contenedores ¿i = 1,10! Bucle en todos los contenedores j = cuenta (a == i)! Contando el número de ocurrencias if (j == 0) print *! Si ninguno, imprime la línea vacía if (j == 0) ciclo! Y se salta el resto del bucle escribe (f, 9) j! De lo contrario, escribe el recuento (j) en la etiqueta de impresión imprimir f! E imprime en STDOUT enddo finalDato curioso: ayer hice un código similar para probar mi implementación de un generador de números aleatorios Weibull, por lo que solo necesité una pequeña adaptación :)
fuente
Perl 5 , 85 + 1 (
-a) = 86 bytesPruébalo en línea!
fuente
Perl 5, 84 + 19 (-MList :: Util = min, max) bytes
Pruébalo en línea
fuente
Perl 5, 102 bytes
Pruébalo en línea .
Sin golf:
fuente
Java (OpenJDK 8) ,
246221209207206163162161157 bytesPruébalo en línea!
fuente
q / kdb +, 52 bytes
Solución:
Pruébalo en línea! (Tenga en cuenta que el enlace TIO es un puerto K (oK) de 44 bytes de esta solución ya que no hay TIO para q / kdb +).
Ejemplos:
Explicación:
La mayor parte del código se usa creando los cubos en los que se
bininserta la entrada.fuente
Jalea , 19 bytes
Pruébalo en línea!
Esto se basa en mi respuesta APL para el problema original, que publicaré después de que termine la competencia.
¿Cómo? (No soy bueno explicando cosas)
fuente