вход
Список слов, разделенных любым количеством пробелов.
Выход
Горизонтальный граф ASCII, где n-я строка состоит из столько звездочек ( *
), сколько n-го слова длинное.
Пример использования
>
Входные сигналы пользователя, вы не должны ввести его при тестировании программы.
> This is an example histogram of word length
****
**
**
*******
*********
**
****
******
> a aa aaa aaaa aaaaa
*
**
***
****
*****
> double space example
******
*****
*******
Ссылочная реализация
В случае сомнений в спецификации, выходные данные вашей программы должны точно соответствовать выводу приведенной ниже программы по всем входным данным.
puts gets.chomp.split.map{|word| '*' * word.length}.join("\n")
Ответы:
Сетчатка , 5 + 3 = 8 байт
Каждая строка идет в своем собственном файле, поэтому я добавил 1 байт для каждого дополнительного файла. Кроме того,
\n
следует заменить фактическим переводом строки.Каждая пара линий является парой замены шаблона.
+
соответствует одному или нескольким пробелам и заменяет его новой строкой..
соответствует любому символу, кроме новой строки, и заменяет его на*
. Это применяется глобально, поэтому каждый символ заменяется на*
.источник
Pyth, 9 байт
Объяснение:
источник
CJam, 10 байтов
Как это работает :
Попробуйте это онлайн здесь
источник
R - 33
где
scan(,"")
читает из стандартного ввода и разбивает пробел на символьный вектор.gsub(".", "*", ...)
заменяет все символы в*
.write(..., "")
выводит на стандартный вывод с \ n в качестве разделителя по умолчанию.источник
Python 3, 43 байта:
Спасибо @BetaDecay за указание на синтаксическую ошибку.
Образец прогона:
(Строка ниже вводится как литерал, а не как текст)
Бонус: вертикальная гистограмма
Спасибо @Caridorc за указание на мою ошибку, из-за которой у бонусов было от 1 до многих рядов.
Демо-версия:
Бонус: вертикальная гистограмма (вверх ногами)
Демо-версия:
источник
R, 38 байт (с некоторой помощью в комментариях)
Как это работает
gsub
заменяет все пробелы на*
gsub
добавление\n
(перевод строки) в конец каждого элементаcat
печатает соответственнодемонстрация
источник
> <> ,
3837 байтПроклинаю тебя двойным пробелом * качает рыбу *.
Вы можете попробовать это онлайн (все, что вам нужно сделать, это ввести данные через поле внизу, а затем нажать
Give
кнопку). Всегда приветствуются предложения по дальнейшей игре в гольф, особенно идеи по удалению пустого пространства перед второй и третьей линиями.Если вам было разрешено напечатать дополнительную новую строку для лишних пробелов, код мог бы быть колоссальным 27 байтов :
объяснение
Примечание: порядок объяснения будет соответствовать местоположению указателя (поэтому, если код объясняется вне того, что можно было бы считать порядком, это потому, что это порядок, в котором указатель выполняет его).
Линия 1:
Строка 2:
Строка 3:
NB Эта строка идет в обратном порядке, поэтому читайте справа налево.
В основном, тест программы, чтобы убедиться, что ввод (который читается по одному символу за раз) не является пробелом, а затем печатает звездочку. Завершается, если нет ввода (входное значение -1). Чтобы убедиться, что он не печатает дополнительные символы новой строки, он использует значение регистра, которое он либо устанавливает в 0 или 1. Из-за способа, которым я его установил, он не заботится о посторонних значениях, помещаемых в стек (например, значение регистра, когда оно устанавливает его
1
после печати звездочки); они остаются в стеке, когда программа завершается, но ничего не делают.Я знаю, что это может немного сбивать с толку, так как я использовал
84*
и67*
вместо" "
и"*"
соответственно, но это было потому, что я не чувствовал желания вставлять строки в программу по любой причине.источник
Javascript ES6
Функция, 46 символов
Программа, 55 символов
источник
"f=s=>s.replace(/\S/g,'*').replace(/\s+/g,'\n')".length
для измерения длины и забыл о\
.Perl, 16 байт (15 символов +
-p
)Беги как:
Сохраненный дополнительный байт, благодаря @ThisSuitIsBlackNot , я не встречал
y///s
раньше!источник
y/ /\n/s;
Гема,
119 персонажейОбразец прогона:
источник
PHP 5.3,
55535150 байтИспользование:
вызов скрипта и определение глобальной переменной ($ a).
php -d error_reporting=0 script.php?a="This is an example histogram of word length"
Вывод:
источник
Java, 102 байта
источник
Haskell, 31 байт
Пример использования:
источник
putStr.
на,f=
чтобы уменьшить количество байтов, или использоватьmain=interact$
вместо того,putStr.
чтобы читать из STDIN и сделать его полноценной программойf=unlines.map(>>"*").words
возвращает что-то подобное"****\n**\n**\n"
и не выводит «горизонтальный график ASCII-искусства» в соответствии с запросом.CJam, 11 байт
Соревнование за второе место в CJam после @Optimizer нашло умное 10-байтовое решение. Это простое 11-байтовое решение:
Попробуйте онлайн
Альтернативное решение, которое использует цикл вместо двух карт, также 11 байтов:
Пояснение к первому решению:
источник
JavaScript (ES6), 37
Укороченная версия с использованием только одного
replace
.источник
J, 10 байт
Бонус: вертикальный (12 байт)
Бонус: перевернутая вертикаль (14 байт)
источник
Python 3, 72 байта
Хороший лайнер :)
Выход:
Здесь есть завершающий перевод строки. Если вы хотите без него, вы должны добавить 5 байтов:
источник
Юлия, 50 байтов
Это создает безымянную функцию, которая принимает строку в качестве входных данных и печатает в STDOUT.
Ungolfed:
источник
JavaScript (ES5)
Программа, 54 символа
Функция, 60 символов
Пример использования:
источник
Matlab - 54 байта
Он запускается из консоли, примет строку ввода
stdin
и выведет горизонтальный граф слов вstdout
:Exemple:
Или мы могли бы попытаться сделать некоторые причудливые формы:
источник
Matlab / Octave, 75 байтов
Использование анонимной функции:
Спасибо Хоки за обнаружение ошибки, которая помешала обнаружить последнее слово.
Пример использования (Matlab):
Или попробуйте онлайн (октава).
источник
PowerShell,
3531 байтДовольно конкурентоспособны для разнообразия. Иди иди гаджет, унарные операторы. Я также постоянно забываю, что паренсы на некоторые функции, такие как
-split
и-replace
используемые здесь, являются необязательными.Вызывается через конвейерный ввод (эквивалентно stdin для PowerShell):
В качестве бонуса, если мы вместо этого можем использовать аргументы командной строки, мы можем получить до 20 байт и получить что-то, что работает как с одной строкой, так и без нее, в качестве ввода:
источник
Javascript (ES6)
Новое решение (39 байт):
Решение Regex (42 байта):
Решение без регулярных выражений (71 байт):
Эти решения определяют анонимные функции. Назначьте их переменным или назовите их так:
источник
SWI-Пролог, 40 байт
Вызывается со строками кода, например
a(`This is an example histogram of word length`).
источник
STATA, 72 байта
Ungolfed
Обратите внимание, что этот код не работает в онлайн-интерпретаторе и требует несвободного проприетарного STATA-интерпретатора.
источник
C ++ 14,
107106 байтисточник
К5, 31 байт
источник
O, 22 байта
объяснение
источник
Луч, 92 байта
Это совсем не конкурентный ответ, и действительно довольно поздно, но я немного поиграл с Beam в последнее время и хотел посмотреть, смогу ли я заставить его сделать это. Наконец-то получили успех :)
Показать фрагмент кода
источник
AWK
Примеры
выход:-
источник