Вот пример ввода монолитов . В этом примере 4
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_
Первый монолит имеет высоту 4 единицы, второй - 2, третий - 3, а последний - 1.
Задание
Ваша программа должна выводить высоты монолитов в порядке слева направо. Выходной формат может быть в любом виде списка или массива.
Заметки
- Входные данные могут быть приняты в виде любой размерной строки, списка строк или списка символов.
- Это код-гольф , поэтому побеждают младшие байты .
- Вы должны предположить, что монолиты всегда имеют одинаковую ширину и всегда находятся на
_
расстоянии не менее 1 от другого. - Они могут быть любой высоты и в любом количестве.
I / O
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_ >> [4,2,3,1]
_
| |
_ | |
| | _ | | _
_| |_| |__| |_| |_ >> [2,1,4,1]
_ _ _
| |_| |_| |_____ >> [1,1,1]
____________________ >> undefined behavior
_
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | >> [11]
_ _ _ _ _
_ | | _ | | _ | | _ | | _ | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| | >> [1,2,1,2,1,2,1,2,1,2]
[10]
монолит нет[11]
?Ответы:
Желе , (8?) 9 байт
Монадическая ссылка, принимающая список символов, как указано, и возвращающая список целых чисел.
Примечание: 8 байт, если список строк, по одной на строку, действительно был задан в качестве разрешенного формата ввода - просто удалите
Ỵ
.Попробуйте онлайн!
Как?
источник
Желе , 11 байт
Попробуйте онлайн!
источник
JavaScript (ES6),
7978 байт-1 байт благодаря @Shaggy
Принимает ввод как массив строк.
Тестовый фрагмент
источник
a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
replace
. Благодарность!C ++,
171169 байтПопробуйте онлайн!
C ++ (GCC), 150 байт
Спасибо @aschepler!
Попробуйте онлайн!
источник
f(auto s)
и указать, что он принимает любой контейнер произвольного доступа с контейнерами произвольного доступаchar
.05AB1E , 11 байт
Попробуйте онлайн!
ζ
был заменен.Bø
на TIO, так как там его еще не вытащили.источник
Дьялог АПЛ, 29 байт
Беги с
⎕IO←0
.Попробуйте онлайн!
Как?
⌽⍵='_'
- где⍵
это'_'
, верхние строчки первого×
- умножить на ...(⍳≢⍵)
- ассортимент⍵
(с нулевым индексом)↑¨
- для каждой строки, блок с нулями по ...(⌈/⍴¨⍵)
- максимальная длина↑+/
- суммировать строки в молнии и выровнять0~⍨
- удаляет нулиисточник
Python 2 , 75 байт
Попробуйте онлайн!
источник
PowerShell, 133 байта
Похоже, это не очень конкурентоспособно; он заменяет регулярное выражение, чтобы превратить башни в столбцы 1, делает массив 0 длиной входной строки, затем перебирает строки, складывая 1.
Тесты готовы к запуску:
источник
Japt , 11 байт
Проверьте это онлайн!
объяснение
источник
Retina ,
4838 байтПопробуйте онлайн! Ссылка включает в себя первый пример. Объяснение: Префикс строки, которая будет собирать результаты. Поскольку каждый столбец неоднократно удаляется по очереди, в столбцах, находящихся
_
выше уровня земли, учитывается количество оставшихся строк в столбце. Наконец, теперь пустые строки удаляются. Редактировать: 10 байтов сохранено благодаря использованию @FryAmTheEggman.источник
_
s, который имеет гораздо больше смысла, чем попытка использовать|
s, спасибо!$.%`
, и последний этап может быть!`\d+
. И если вы измените первую стадию на предвкушение, вам не нужно зацикливаться.Java 8,
133117116114 байтПринимает ввод как (← сохраняет 16 байт). -2 байта в обмен на менее читаемый вывод благодаря @ OlivierGrégoire
String[]
char[][]
, изменив
print(l-j+",")
наprintln(l-j)
.Объяснение:
Попробуй это здесь.
источник
_
найден ли магазин, где он находится, а затем заказать его, игнорируя, конечно, нижний ряд. Может помочь сохранить байты ...new[,]
вместо зубчатого массива, который вы используете какnew[][]
. Если у вас есть это в Java, это может сэкономить вам несколько байтов.System.out.println(l-j);
выглядит достаточно объемным для меня, чтобы сэкономить 2 байта. Кроме того, в объяснении вы забыли перейтиlength()
наlength
(без учета количества байтов, так как это правильно в представлении).Haskell,
7574 байтаВвод ожидается в виде списка строк (по строкам).
источник
Рубин , 82 байта
Берет в список строк.
Попробуйте онлайн!
источник
APL (Dyalog) , 14 байтов
с
⎕IO←0
Попробуйте онлайн!
Эта функция поезда эквивалентна
{((⍳≢⍵)+.×('_'=⊖⍵))~0}
источник
MATL , 12 байт
Ввод представляет собой матрицу символов, с
;
разделителем строк.Попробуйте онлайн! Или проверьте все тестовые случаи .
источник
C #,
150144137 байтПолная / Отформатированная версия:
источник
Java 8 -
229 байт213 байтПопробуйте онлайн!
Ungolfed:
Ву, первый пост. Любая помощь по улучшению это было бы здорово.
Я знаю, что могу избавиться отЗнал это! Я поиграл с идеей изменить типы на карте с Integer на Long, но я думаю, что это тупик.indexOf
написанного дважды.Я знаю, что уже есть намного, намного лучшее решение Java 8 , но оно принимает в
char[][]
качестве входных данных, с которым, я думаю, легче работать в этом случае, чем с String.источник
Map
ноint[]
(может быть инициализирован дляnew int[99]
?). Не нужно места послеString[] l
:String[]l
работает так же и короче. Используйтеprintln(l.length-i-1)
вместоprintln(l.length-i-1+",")
. Не инициализацииj
: просто написать:,j;
. Если вы используетеint[]
как предложено ранее, объявите так:int m[]=new int[99],i=0,j;
и удалите объявление изfor-loop
.import java.util.*;s->{Map m=new TreeMap();String[]a=s.split("\n");int l=a.length-1,j=-1,i=j;for(;++i<l;)for(s=a[i];(j=s.indexOf("_",j+1))>=0;m.put(j,i));for(Object o:m.values())System.out.println(l-(int)o);}
. Нет необходимости в<Integer,Integer>
карте, когда вы можете привести кint
;a.length-1
используется дважды, поэтому вы можете использовать переменную для него; поместив все в циклы for, вы можете избавиться от всех скобок. О, и добро пожаловать в PPCG! :)MATL , 10 байт
Ввод - это заполненная символьная матрица.
Попробуйте онлайн!
источник
Mathematica,
484739 байтПопробуйте онлайн!
Function
который ожидает прямоугольный массив символов. ПолучаетMost
массив (все, кроме последней строки),Reverse
s it, затем принимаетTranspose
*, затем находит всеPosition
s, в которых_
появляется символ. Соответствующие высоты являютсяLast
элементами каждогоPosition
.*
является3
байтовым символом частного использования,U+F3C7
который представляет\[Transpose]
в Mathematica. Обратите внимание, что это не работает в математике , поэтому ссылка TIO просто используетTranspose
.источник
SOGL V0.12 , 9 байт
Попробуй здесь!
Принимает ввод как массив массивов строк (символов).
Объяснение:
источник
JavaScript (ES6),
10810488 байтСохранено 16 байт благодаря @JustinMariner
Ввод принимается как массив строк
источник
Array.map
, это крутой трюк.exec
и сохранить несколько байтов.exec
оно соответствует первому. Это фактически приводит к сбою редактора фрагмента обмена стека, если вы включите регулярное выражение. Если я что-то упустил?CJam,
1514 байтов1 байт сохранен благодаря @BusinessCat
Это блок, который принимает массив строк в стеке и выводит массив.
Объяснение:
источник
Пип ,
1817 байт15 байтов кода, +2 для
-rp
флагов.Принимает ввод от стандартного ввода. Попробуйте онлайн!
объяснение
источник
Pyth ,
191514 байтовПроверьте это онлайн! Вход представляет собой список строк.
Пояснения
источник
Октава, 31 байт
Принимает двумерный массив символов в качестве входных данных.
Проверьте все контрольные примеры!
источник
Perl 6 , 65 байт
Попробуйте онлайн!
m:exhaustive/^^(\N+)_([\N*\n]+:)/
осуществляет поиск во входной строке всех символов подчеркивания и возвращает объект соответствия для каждого из них, где первые круглые скобки содержат предшествующую часть строки, в которой найдено подчеркивание, а вторые круглые скобки содержат всю оставшуюся часть строки. Остальная часть строки должна содержать хотя бы одну новую строку, поэтому мы не учитываем подчеркивания на уровне земли.:exhaustive
Флаг позволяет эти матчи с перекрытием..sort(*[0].chars)
сортирует эти совпадающие объекты по количеству символов в части строки, предшествующей каждому подчеркиванию. Это заказывает их слева направо..map(+*[1].comb("\n"))
сопоставляет каждый совпадающий объект с количеством символов новой строки в части входной строки, тянущейся за каждым подчеркиванием, то есть с высотой.\n
Является актуальной символ новой строки, сохраняя один байт.источник
PHP, 119 байт
Давайте разберемся с этим! Наш вход здесь представляет собой двумерный массив символов.
источник
Берет многострочную строку. Кредит на настройку (верхний и нижний колонтитулы) идет на @GarethPW
Python 2 , 29 байт
Попробуйте онлайн!
Это просто разделит массив на новую строку и вернет length-1.
источник