Entrada
Uma lista de palavras separadas por qualquer número de espaços.
Saída
Um gráfico de arte ASCII horizontal, em que a n-ésima linha é composta por tantos asteriscos ( *
) quanto a n-ésima palavra é longa.
Exemplo de uso
Os >
sinais de entrada do usuário, você não deve inseri-lo ao testar o programa.
> This is an example histogram of word length
****
**
**
*******
*********
**
****
******
> a aa aaa aaaa aaaaa
*
**
***
****
*****
> double space example
******
*****
*******
Implementação de referência
Em caso de dúvida sobre a especificação, a saída do seu programa deve corresponder exatamente à do programa abaixo em todas as entradas.
puts gets.chomp.split.map{|word| '*' * word.length}.join("\n")
Respostas:
Retina , 5 + 3 = 8 bytes
Cada linha entra em seu próprio arquivo, então adicionei 1 byte para cada arquivo adicional. Além disso, o
\n
deve ser substituído por uma nova linha real.Cada par de linhas é um par de substituição de padrão.
+
corresponde a um ou mais espaços e o substitui por uma nova linha..
corresponde a qualquer caractere, exceto uma nova linha, e o substitui por a*
. Isso é aplicado globalmente, portanto, cada caractere é substituído por a*
.fonte
Pitão, 9 bytes
Explicação:
fonte
CJam, 10 bytes
Como funciona :
Experimente online aqui
fonte
R - 33
Onde
scan(,"")
lê stdin e divide no espaço em branco em um vetor de caractere.gsub(".", "*", ...)
substitui todos os caracteres em*
.write(..., "")
imprime no stdout com "\ n" como separador padrão.fonte
Python 3, 43 bytes:
Obrigado a @BetaDecay por apontar um erro de sintaxe.
Exemplo de execução:
(A sequência abaixo é inserida como literal, e não como texto)
Bônus: histograma vertical
Agradeço a @Caridorc por apontar meu erro que fez com que os bônus tivessem de 1 a muitas linhas.
Demo:
Bônus: histograma vertical (de cabeça para baixo)
Demo:
fonte
R, 38 bytes (com alguma ajuda nos comentários)
Como funciona
gsub
substitui todos os sem espaços por*
gsub
adiciona\n
(nova linha) ao final de cada elementocat
imprime adequadamenteDemo
fonte
> <> ,
3837 bytesMaldito seja o caso de espaço duplo * sacode o peixe *.
Você pode experimentá-lo on-line (tudo o que você precisa fazer é fornecer informações através do campo próximo à parte inferior e pressionar o
Give
botão). Sugestões para mais golfe são sempre bem-vindas, especialmente idéias para remover esses espaços desnecessários na frente da segunda e terceira linhas.Se você tiver permissão para imprimir uma nova linha adicional para espaços extras, o código poderá ter 27 bytes :
Explicação
Nota: a ordem da explicação corresponderá à localização do ponteiro (por isso, se o código for explicado fora do que seria considerado pedido, é porque é a ordem na qual o ponteiro o executa).
Linha 1:
Linha 2:
Linha 3:
NB Esta linha é inversa, portanto, leia da direita para a esquerda.
Basicamente, o teste do programa para garantir que a entrada (que é lida um caractere de cada vez) não seja um espaço e, em seguida, imprima um asterisco. Ele termina se não houver entrada (o valor de entrada é -1). Para garantir que não imprima novas linhas adicionais, ele usa o valor do registro, que define como 0 ou 1. Por causa da forma como eu o configuro, ele não se importa com os valores estranhos colocados na pilha (por exemplo, o valor do registro quando definido
1
após a impressão de um asterisco); eles permanecem na pilha quando o programa termina, mas não fazem nada.Eu sei que pode ser um pouco confuso desde que eu usei
84*
e67*
não" "
e"*"
respectivamente, mas isso foi porque eu não sentia vontade de colocar strings no programa por qualquer motivo.fonte
Javascript ES6
Função, 46 caracteres
Programa, 55 caracteres
fonte
"f=s=>s.replace(/\S/g,'*').replace(/\s+/g,'\n')".length
para medir o comprimento e esqueci\
.Perl, 16 bytes (15 caracteres +
-p
)Correr como:
Salvei um byte adicional, graças a @ThisSuitIsBlackNot , que eu não tinha encontrado
y///s
antes!fonte
y/ /\n/s;
Gema,
119 caracteresExemplo de execução:
fonte
PHP 5.3,
55535150 bytesUso:
chamar o script e definir uma variável global ($ a)
php -d error_reporting=0 script.php?a="This is an example histogram of word length"
saída:
fonte
Java, 102 bytes
fonte
Haskell, 31 bytes
Exemplo de uso:
fonte
putStr.
comf=
a diminuir a contagem de bytes, ou usarmain=interact$
, em vez deputStr.
ler de STDIN e torná-lo um programa completof=unlines.map(>>"*").words
retorna algo como"****\n**\n**\n"
e não gera um "gráfico de arte ASCII horizontal" conforme solicitado.CJam, 11 bytes
Competir pelo segundo lugar no CJam depois que o @Optimizer encontrou uma solução inteligente de 10 bytes. Esta é uma solução direta de 11 bytes:
Experimente online
Solução alternativa que usa um loop em vez dos dois mapas, também com 11 bytes:
Explicação para a primeira solução:
fonte
JavaScript (ES6), 37
Versão mais curta usando apenas um
replace
.fonte
J, 10 bytes
Bônus: vertical (12 bytes)
Bônus: vertical invertido (14 bytes)
fonte
Python 3, 72 bytes
Um bom forro :)
Saída:
Há uma nova linha à direita aqui. Se você quiser sem precisar adicionar 5 bytes:
fonte
Julia, 50 bytes
Isso cria uma função sem nome que recebe uma string como entrada e imprime em STDOUT.
Ungolfed:
fonte
JavaScript (ES5)
Programa, 54 caracteres
Função, 60 caracteres
Exemplo de uso:
fonte
Matlab - 54 bytes
Isso é executado no console, recebe uma string na entrada
stdin
e gera o gráfico horizontal da palavra emstdout
:Exemplo:
Ou podemos tentar fazer algumas formas sofisticadas:
fonte
Matlab / Octave, 75 bytes
Usando uma função anônima:
Agradecemos a Hoki por detectar um erro que impedia que a última palavra fosse detectada.
Exemplo de uso (Matlab):
Ou tente online (oitava).
fonte
PowerShell,
3531 bytesBastante competitivo para uma mudança. Vá, vá para operadores unitários de gadgets. Também esqueço que parens em algumas funções, como a
-split
e-replace
usadas aqui, são opcionais.Chamado via entrada de pipeline (equivalente a stdin para PowerShell):
Como bônus, se pudermos usar argumentos da linha de comando, podemos chegar a 20 bytes e ter algo que funcione com e sem uma única string como entrada:
fonte
Javascript (ES6)
Nova solução (39 bytes):
Solução Regex (42 bytes):
Solução não regex (71 bytes):
Essas soluções definem funções anônimas. Atribua-os a variáveis ou chame-os assim:
fonte
SWI-Prolog, 40 bytes
Chamado com cadeias de código, por exemplo
a(`This is an example histogram of word length`).
fonte
STATA, 72 bytes
Ungolfed
Observe que esse código não funciona no intérprete on-line e requer o intérprete STATA não-proprietário e gratuito.
fonte
C ++ 14,
107106 bytesfonte
K5, 31 bytes
fonte
O, 22 bytes
Explicação
fonte
Feixe, 92 bytes
Esta não é uma resposta competitiva e realmente muito tarde, mas eu tenho brincado com o Beam recentemente e queria ver se eu conseguiria fazer isso. Finalmente consegui algum sucesso :)
Mostrar snippet de código
fonte
AWK
exemplos
saída:-
fonte