Este é o Buraco-1 do Torneio de Outono da APL CodeGolf . Eu sou o autor original do problema lá e, portanto, posso republicá-lo aqui.
Dada uma lista de números, produza um gráfico de barras horizontal de #
caracteres para quantos números cabem em cada um dos dez grupos de tamanhos iguais. Por exemplo, se os dados variarem de 0 a 100, os intervalos serão de 0 a 9,9, 10 a 19,9, ..., 90 a 100. (Formalmente, [0,10), [10,20),…, [90,100].). Você pode supor que haverá pelo menos dois números e que nem todos os números serão iguais.
Exemplos:
[1,0,0,0,0,0,0,0,0,0]
dá:
#########
#
[0,1,2,3,4,5,6,7,8,9]
dá:
#
#
#
#
#
#
#
#
#
#
[0,1,2,3,4,5,6,7,8,9,10]
dá:
#
#
#
#
#
#
#
#
#
##
[0,1,2,3,4,5,6,7,8,9,10,11]
dá:
##
#
#
#
#
#
#
#
#
##
[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]
dá:
###
#######
###########
###############
#########
###################
###############
###########
#######
###
[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]
dá:
#
####
#########
############
######
#########################
###########
#
[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]
dá:
#############
######################
##########################
#########################
#########################
#
########
################
########################
##########################
[0.9,1]
(e não[0.9,1)
)?[0,1)
contém apenas0
enquanto a linha inferior[9,10]
contém ambos9
e10
.Respostas:
Python 2 , 96 bytes
Experimente online!
fonte
Python 2 ,
10795 bytesExperimente online!
fonte
*.1
não funciona no lugar do/10.
último caso de teste. TBH Não sei por que não funciona.R ,
7781 bytes+4 bytes para corrigir alguns casos de teste
Experimente online!
Link é para uma versão do código que recebe entrada separada por vírgula; esta versão ocupa espaço separado.
Lê de stdin, imprime em stdout.
R é uma linguagem de programação estatística que faz o possível para fornecer resultados de alta qualidade, o que às vezes é frustrante:
hist
coloca as entradas em um histogramabreaks
como segundo argumento. Normalmente, seria de esperar que você pudesse especificar que o número de quebras fosse 10. De fato, este é o caso:(enfase adicionada).
A próxima frase, no entanto, diz:
Então, olhei para a documentação
pretty
e ela simplesmente não funciona para a nossa situação, porque escolhe pontos de interrupção da seguinte maneira:O que simplesmente não serve.
Portanto,
seq(min(x),max(x),,11)
especifica 11 pontos igualmente espaçados comobreaks
,hist(x,breaks,r=F)$c
fornece as contagens,r=F
garante que os compartimentos tenham intervalos de abertura correta e ofor
loop cuidará do resto.fonte
C (gcc) , 241 bytes
Experimente online!
fonte
k
como um global, (+ 1byte) no entanto, é inicializado como 0, assim, salvar 3 bytes dek=0
.double
parafloat
elf
paraf
salvar outros 2 bytes. (pelo menos isso funciona no TIO)float
pode funcionar, eu não o usei porque não é o tipo de ponto flutuante "padrão" em C e reduz a precisão, por isso não tenho certeza se isso é permitido ...Mathematica, 152 bytes
Experimente online!
fonte
Range[0,9]
enquanto eu estou falandoRange[0,10]
sem motivo. Mas ele realmente falha paraRange[0,10]
: TIO .<=
nas duas extremidades, o que está correto no último segmento, mas não nos outros 9.JavaScript (ES6), 99 bytes
Editar 2 bytes salvar thx @JustinMariner
Uma função retornando uma matriz de strings
Menos golfe
Teste
fonte
i
os colchetes da matriz, seguida por vírgula, permitindo remover os parênteses ao redor do corpo da função do mapa: Experimente on-line!i
e usá-loMath.min
novamente, com um pseudônimo: Experimente on-line!Python 2 ,
126121 bytesExperimente online!
fonte
Gelatina , 21 bytes
Um link monádico retorna uma lista de cadeias.
Experimente online!
fonte
ÇŒṘ
ouÇY
no rodapé para visualizar o resultado. Além disso, em vez do programa completo, você pode dizer que seu envio é um link monádico, que retorna em vez de imprimir, tornando-o automaticamente válido.Pitão ,
3231 bytesExperimente aqui! ou Verifique todos os casos de teste. (com impressão bonita usando
j
)Como isso funciona
Este é um programa completo que recebe informações do STDIN. Isto é para a versão de 32 bytes. Vou atualizá-lo em breve.
fonte
Carvão , 31 bytes
Experimente online! Link é a versão detalhada do código. A entrada de listas de tamanho variável parece um pouco estranha no Charcoal, então tive que agrupar a lista em uma matriz contendo uma string. Explicação:
fonte
Fortran 2003, 263 bytes
Eu escrevi no GNU gfortran 5.4.0 e compilei sem nenhum sinalizador adicional.
Ele lê STDIN, um valor de cada vez, e imprime em STDOUT.
Aqui vai:
Explicação ungolfed: (não sei se "golfed" pode ser aplicado ao fortran, mas de qualquer maneira: P)
Curiosidade: ontem, eu fiz um código semelhante para testar minha implementação de um gerador de números aleatórios Weibull, por isso só precisava de uma pequena adaptação :)
fonte
Perl 5 , 85 + 1 (
-a
) = 86 bytesExperimente online!
fonte
Perl 5, 84 + 19 (-MList :: Util = min, max) bytes
Experimente Online
fonte
Perl 5, 102 bytes
Experimente online .
Ungolfed:
fonte
Java (OpenJDK 8) ,
246221209207206163162161157 bytesExperimente online!
fonte
q / kdb +, 52 bytes
Solução:
Experimente online! (Observe que o link TIO é uma porta de 44 bytes K (oK) desta solução, pois não há TIO para q / kdb +).
Exemplos:
Explicação:
A maior parte do código é usada para criar os buckets nos quais
bin
o input é inserido.fonte
Geléia , 19 bytes
Experimente online!
Isso se baseia na minha resposta do APL para o problema original, que postarei depois que a competição terminar.
Quão? (Eu não sou bom em explicar as coisas)
fonte