Напишите самую короткую программу, которая генерирует гистограмму (графическое представление распределения данных).
Правила:
- Необходимо сгенерировать гистограмму на основе длины символов слов (включая знаки препинания), введенных в программу. (Если слово имеет длину 4 буквы, столбец, представляющий число 4, увеличивается на 1)
- Должны отображаться метки строк, которые коррелируют с длиной символов, которые представляют полосы.
- Все символы должны быть приняты.
- Если столбцы должны быть масштабированы, должен быть какой-то путь, который показан на гистограмме.
Примеры:
$ ./histogram This is a hole in one!
1 |#
2 |##
3 |
4 |###
$./histogram Extensive word length should not be very problematic.
1 |
2 |#
3 |#
4 |##
5 |
6 |##
7 |
8 |
9 |#
10|
11|
12|#
./histogram Very long strings of words should be just as easy to generate a histogram just as short strings of words are easy to generate a histogram for.
1 |##
2 |#######
3 |#
4 |#######
5 |###
6 |#
7 |##
8 |##
9 |##
Ответы:
К, 35
,
,
Более длинный пример
источник
R,
5547 символовК счастью, R поставляется с функцией построения графика
hist
для гистограмм, здесь он снабженbreaks
аргументом, в котором разрывы составляют 0,5, 1,5, ... до максимума (ввод) +0,5.sapply(scan(,""),nchar)
принимает входные данные (как stdin), разделяет их по пробелам и считает количество символов каждого элемента.Примеры:
Редактировать:
Вариация в 71 символ с меткой оси на каждом возможном значении:источник
Python - 83 символа
Кажется, что мы можем получать ввод из любого места, поэтому он принимает ввод во время выполнения, а не из командной строки, и использует предложение Ejrb, чтобы сократить его на 8.
Python - 91 символ
Это упадет с кавычками.
Входные данные:
Выход:
источник
exec
и конкатенацию строк:c=0;exec'c+=1;print"%3d|"%c+"#"*s.count(c);'*max(s)
Хаскель - 126 символов
Это принимает входные данные
stdin
, а не командную строку:источник
Python 3,3 (93)
Вывод:
(первая строка - строка ввода)
Это не оправдывает цифры как решение Lego Stormtroopr's Python (которое также короче моего), но это моя первая запись в соревновании по гольфу, так что я мог бы оставить ее здесь, я думаю :)
источник
Perl, 56
Добавлено предложение по переписыванию и буквальному переводу строки @ manatwork, большое спасибо! Добавлены обновления @ chinese_perl_goth.
Использование: сохранить как Hist.pl и запустить
perl hist.pl This is a test
Пример вывода:
источник
printf
? Вы можете сэкономить некоторые символы на форматирование. И еще немного изменив от хэша к массиву:$d[y///c]++for@ARGV;shift@d;printf"%2d|%s\n",++$i,"#"x$_ for@d
.printf
вообще не приходил мне в голову, и по какой-то причине я не думал, что смогу получить желаемый эффект с массивом, потрясающе! @ syb0rg добавим сейчас$d[y///c].='#'for@ARGV;printf"%2d|$d[$_]\n",$_ for+1..$#d
\n
чтобы сэкономить еще 1 символ. Я имею в виду, как это: pastebin.com/496z2a0nJ,
4847464543 символовИспользование:
источник
[:((](;#&'#')"0[:+/=/)1+[:i.>./)#@>@;:
: попробуйте онлайн!Рубин,
9885Не много в гольф. Будет гольф позже.
источник
b ?(?#*b[1].size):''
сb&&?#*b[1].size
.Powershell,
9793Пример:
источник
$a=@{};-split$args|%{$a[$_.length]++};1..($a.Keys|sort)[-1]|%{"{0,-2}|"-f$_+"#"*$a[$_]}
APL (42)
Может быть короче, если бы я мог опустить строки, где значение равно 0.
Объяснение:
⎕ML←3
: установите уровень миграции на 3 (это делает⊂
(раздел) более полезным).I⊂⍨' '≠I←⍞
: читать ввод, разбить на пробелыM←↑∘⍴¨
: получить размер первого измерения каждого элемента (длина слова) и сохранить вM
K←⍳⌈/M
: получить числа от 1 до наибольшего значения вM
, сохранить вK
+⌿K∘.=M
: для каждого значения вM
, посмотрите, сколько раз оно содержится вK
.⊃⍴∘'▓'¨
: для каждого значения в этом, получите список с таким количеством▓
s и отформатируйте его как матрицу.K,
: перед каждым значением вK
каждой строке матрицы добавьте метки.Выход:
источник
Mathematica 97
Когда я ввожу текст Декларации независимости в виде одной строки (конечно, с помощью вырезания и вставки), генерируемый результат был:
источник
Далее 201
Это было весело, но моя работа с Ruby более конкурентоспособна. ;-)
Образец прогона:
Максимальная длина слова 99.
источник
Руби, 79
Пример выполнения:
Пожалуйста, см. Мое представление Forth для смеха.
источник
Руби 1.8.7, 74
Немного другой дубль, чем в других рубиновых решениях:
выход:
источник
JavaScript (
159133)Определенно не конкурентное, но пока единственное решение JavaScript. Спасибо @manatwork за подсказку по использованию
String.replace
.вход
Выход
источник
replace()
вместоsplit()
+for
иArray
вместоObject
+ отдельной переменной длины может быть уменьшена с помощью нескольких символов:prompt(o=[]).replace(/\S+/g,function(p){o[l=p.length]=(o[l]||"")+"#"});for(i=1;i<o.length;)console.log(i+(i>9?"|":" |")+(o[i++]||""))
. (И еще короче в Гармонии:.prompt(o=[]).replace(/\S+/g,p=>o[l=p.length]=(o[l]||"")+"#");for(i=1;i<o.length;)console.log(i+(i>9?"|":" |")+(o[i++]||""))
).length
там.Чистая Баш 120
Образец:
Сохраните 8 символов, используя одну вилку для
tr
: 112Дайте тот же результат:
сделать (на моем хосте :)
источник
PHP, 162
Использование:
источник
8-е , 162 байта
Код
использование
Выход
Ungolfed код ( SED - диаграмма эффекта стека)
источник