( Вдохновленный этим вызовом .)
Допустим, у нас есть строка ABBCBA
. Мы можем сказать, что между A
и B
, B
следовательно , есть рост A
; мы можем сказать, что есть пробег между B
и B
ни для чего не меняется; и, наконец, мы можем сказать, что между C
и B
. Мы можем нарисовать график так:
A B B C B A
Rising: o o
Continuing: o
Falling: o o
Без меток и минимизации пробелов:
o o
o
oo
Это ожидаемый результат для ввода ABBCBA
.
Вы можете использовать любой непробельный символ для замены o
в выводе. Кроме того, каждый столбец может иметь дополнительный пробел между ними, например, так:
o o
o
o o
Ввод будет состоять как минимум из трех символов. Строка будет полностью состоять из заглавных букв, но вместо этого вы можете использовать строчные буквы.
Контрольные примеры
TEST CASE
LINE 1
LINE 2
LINE 3
HELLOWORLD
o oo o
o
o o oo
TESTCASE
oo o
o oo o
EXAMINATION
o o o o o
o o o o o
ZSILENTYOUTH
o ooo o
oo o o oo
ABC
oo
ABCBA
oo
oo
o
s, или вывод должен быть компактным?Ответы:
Желе , 11 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Mathematica,
93836864 байта(использует
0
, а неO
)объяснение
Получает позицию в алфавите каждого символа ввода.
Принимает разницу между каждым последовательным элементом и принимает знак (
-1
для отрицательного значения / падения,0
для 0 / продолжения,1
для положительного значения / повышения)Вставляет a
0
в список из двухNull
s: в первую позицию при повышении, в среднюю при продолжении и в третью при падении.Форматирует вывод.
Если выходные данные могут отличаться от приведенных в вопросе, приведенный выше код можно сократить до 41 байта:
... который создает что-то вроде этого (для "ABBCBA"):
источник
MATL ,
15, 14 байтовПопробуйте онлайн!
Объяснение:
Говорят, что картинка стоит тысячи слов, так что здесь есть бета-версия онлайн-интерпретатора, которая показывает вам значение на вершине стека в реальном времени при его обновлении. Обратите внимание, что он все еще находится в бета-версии, поэтому вам может понадобиться запустить несколько раз.
Итак, сначала мы позвоним
dZS
.d
дает нам разницу между каждым последовательным элементом иZS
дает нам знак (-1, 0 или 1) каждого элемента. Так что с «HELLOWORLD» в качестве входных данных после первого шага мы получим:Теперь мы просто используем,
q
чтобы уменьшить это и получить:И затем два раза мы дублируем вершину стека и увеличиваем массив (
tQ
). После этого мы получимТеперь все 0 - это то место, где мы хотим вывести символ. Итак, мы объединяем эти три массива в матрицу (
v
) и логически отрицаем ее (~
). Затем мы умножаем каждое значение в матрице на значение ASCII 'O', (79*
) и отображаем его в виде строки сc
.источник
Haskell, 63 байта
Возвращает список из трех строк, представляющих строки вывода. Не содержит подсознательных сообщений.
Дайанна сохранила три байта, используя
do
нотацию иmax
вместо понимания списка иlast
.источник
['o'|b e y]
..CJam , 19 байтов
Использует
0
вместоo
.Попробуйте онлайн!
объяснение
источник
Python 2,
7671 байтСпасибо @xnor за уведомление о том, что возврат списка строк разрешен.
Проверьте это на Ideone .
источник
lambda
.JavaScript (ES6),
9695898782 байта2 байта сохранены с использованием
0
вместоo
, как предложено Конором О'Брайеном26 байтов сохранены благодаря ETHproductionsисточник
'o'
с0
помощью любой?s=>[1,0,-1].map(k=>[...s].map(c=>(r=p?(c>p)-(c<p)-k&&' ':'',p=c,r),p=0).join``).join`\n`
будет работать, экономя 2 байта.s=>[1,0,-1].map(k=>[...s].map((c,i)=>(p=s[i-1])?(c>p)-(c<p)-k&&' ':'').join``).join`\n`
.s.replace
также сэкономит вам несколько байтов[...s].map().join()
.Perl, 47 байт
Включает +1 для
-p
Внесите свой вклад в STDIN:
bumpy.pl
:источник
MATL,
1614 байтПопробуйте онлайн!
Это выросло из обсуждения ответа DJMCMahem . Несмотря на то, что этот ответ на
2 символа длиннееодинаковой длины, метод несколько отличается, поэтому он может представлять самостоятельный интерес.Спасибо Луису Мендо за предложение сэкономить 2 байта (см. Комментарии)
Объяснение:
«dZS» получает вектор, где каждая запись является знаком различий между последующими символами, затем «qq_» уменьшает каждую запись на два и переворачивает знак, поэтому теперь, если символ увеличивается, он равен 1, если он остается тем же 2, и если оно уменьшается 3. Например,
Затем 't' создает копию предыдущего вектора в стеке, затем 'n:' также помещает вектор [1,2,3,4, ...] в стек. Затем «79» помещает значение 79 в стек. Значение 79 выбрано потому, что это номер для символа юникода 'o', который будет выведен позже. (Спасибо Луису Мендо за идею поставить значение 79 здесь, а не позже)
На данный момент у нас есть именно индексы строк, индексы столбцов и ненулевое значение разреженной матрицы, которая имеет значение 79, где мы хотим получить выходной символ, и 0, где мы хотим вывести пробел. Мы убираем эти три элемента из стека и создаем эту разреженную матрицу с помощью команды разреженной матрицы MATL 'Z?'. То есть,
Осталось только преобразовать матрицу из чисел в символы Юникода, что делается командой 'c'. 79 стали 'o', а 0 стали пробелами:
Полученная матрица символов затем отображается неявно.
источник
PHP, 95 байт
1.Создать массив строк с индексом -1 к 1 альтернативе
$b=array_fill(-1,3," ");
2. Заполните строки в зависимости от оператора космического корабля и позиции ввода
3. Выход соединить массив с новой строкой
Первый путь 111 байт
Используйте оператор космического корабля оператор
<=>
космического корабляисточник
~õ
это удобный ярлык для"\n"
. Нет, серьезно!" "
, что может быть~ß
. Пример. Вы хотите установить кодировку браузера на Latin-1 при просмотре.JavaScript (ES6), 81 байт
Написанный с нуля, хотя он был сильно вдохновлен ответом @ Arnauld . Использует рекурсию для вычисления содержимого каждой строки.
источник
Рубин,
6664 байтаСмотрите это на eval.in: https://eval.in/649503
источник
Java 7,
158156 байт2 байта сохранены благодаря @Frozn .
Ungolfed и тестовые случаи:
Попробуй это здесь.
Выход:
источник
a,b,c=b=a=""
будет короче.Клора (20 байт)
<IN?o ;=IN?o ;>IN?o
Объяснение:
Есть 3 программы Clora, по одной на каждую выходную строку.
Первая программа,
<IN?o
Проверьте,
I
меньше ли текущий входной символ,<
чем следующий символN
. Сохраните результат в глобальном флаге. Проверьте результат флага?
и, если true, выведитеo
, в противном случае - пробел (да, там есть пробел.Все остальные программы следуют тому же правилу и разделены
;
, каждая программа выполняется и получает входные данные в качестве аргумента.Вы можете проверить это самостоятельно, включая clora.js и запустив его
источник
Pyth, 21 байт
Программа, которая принимает ввод строки без кавычек в STDIN и печатает результат.
Это использует идею, аналогичную ответу CJam @ MartinEnder .
Попробуйте онлайн или проверьте все контрольные примеры .
Как это работает
источник
PHP 7,
818077 байтПримечание: используется кодировка Windows-1252
Запустите так:
объяснение
Итерация через линию (пронумеровано
1
,0
,-1
). Затем перебирает входную строку для каждой строки. Когда результат сравнения космического корабля равен номеру строки, выведитеo
, в противном случае выведите пробел. После каждой строки выведите новую строку.Tweaks
$x
есть-1
, что мы можем найти с помощью двоичного отрицания (результат0
). Сохраняет байт по сравнению с добавлением1
(или 2 с предварительным приращением).$argn
источник
-d error_reporting=30709
к вашему счету байтов.2>/dev/null
, но это будет избавиться от всех ошибок, в том числе со смертельным исходомIf you get warnings, set the default value with ...
. Пожалуйста, извините мою педантизм; Я не расшифровал это значение.Lua
326303 байта tl = 0 s = io.read () o1, o2, o3 = "", "", "" t = {} для i = 1, # s делают t [i] = s: sub (i , i) tl = tl + 1 конец для v = 1, tl-1 делают, если t [v] t [v + 1], тогда o1 = o1 .. "" o2 = o2 .. "" o3 = o3 .. " o "end end print (o1 .." \ n ".. o2 .." \ n ".. o3)Нежелательная версия
источник
t1 = 0
? кt1=0
? И подобные места.R, 114 байт
Неконкурирующий R ответ.
объяснение
#
если различия есть>0
,==0
или<0
.источник