Ваша задача сегодня состоит в том, чтобы взять многострочную строку и вывести самый большой квадрат, содержащийся внутри строки, который включает в себя верхний левый угол.
Квадратная строка - это та, где:
- Каждая строка имеет одинаковое количество символов
- Количество символов в каждой строке равно количеству строк.
Рассмотрим следующую возможную строку ввода:
abcde
fgh
asdf
foobar
Самый большой квадрат, который вы можете взять из него, который включает в себя первый символ ( a
в верхнем углу):
abc
fgh
asd
Не может быть квадрата с длиной стороны 4, потому что вторая строка не достаточно длинна. Теперь рассмотрим этот потенциальный вклад:
a
bcd
edf
ghi
Здесь самая большая площадь a
. Квадрат 3х3, сформированный внизу, не содержит самого первого символа и не считается.
Вот еще несколько тестов:
a
a
abc
def
gh
ab
de
ab
cd
ab
cd
abcde
fghij
klm
no
abc
fgh
klm
a
b
a
Вы можете потребовать, чтобы ввод был ограничен вашим выбором LF, CR или CRLF.
Символы новой строки не считаются частью длины строки.
Вы можете потребовать, чтобы в вводе была или не была завершающая новая строка, которая не считается дополнительной строкой.
Ввод - это строка или одномерный массив символов; это не список строк.
Вы можете предположить, что входные данные не пустые, и все строки не пустые, и что он содержит только печатный ASCII, включая пробелы и символы новой строки (для разделителя строк), но не табуляции.
Это код-гольф , побеждает меньше байтов!
.split('\n')
поэтому я не понимаю, почему некоторые должны получить его бесплатно.Ответы:
Брахилог , 11 байт
Попробуйте онлайн!
объяснение
источник
ṁ
Встроенный действительно очень удобно!Шелуха , 13 байт
Попробуйте онлайн!
объяснение
источник
GNU sed ,
106 + 194 + 2 = 96 байт+2 байта для
-rz
флагов. Используются непечатаемые символы NUL и BEL, показанные как@
и#
здесь. Смотрите ниже дамп xxd.Спасибо @seshoumara за то, что отправили меня по пути к
-z
.Попробуйте онлайн!
объяснение
Это работает путем вставки двух курсоров в текст - один для перехода по строкам и один для перехода по столбцам. Курсоры представлены NUL (0x00) и BEL (0x07) соответственно, но в следующих примерах я буду использовать
@
и#
. Предположим, у нас есть этот вход:Курсор BEL вставляется перед 0-м столбцом, а курсор BEL - перед 0-й строкой (здесь я держал столбцы выровненными для разборчивости; но на самом деле левого отступа нет):
В цикле курсоры перемещаются на один символ вправо и на одну строку соответственно:
После каждой итерации проверяются два условия:
Если какое-либо условие ложно, цикл заканчивается. Сценарий завершается удалением всего после
@
в каждой строке и всего после#
в шаблонном пространстве.xxd dump
источник
line1\nline2\nline3
где\n
это\x5C\x6E
? Который?\n
, интерпретируется как символ новой строки (\x0A
не\x5C\x6E
), и я не могу найти способ заставить sed принимать ввод с символами новой строки одной строкой.-z
флаг. Благодарность!Python 2 , 81 байт
Попробуйте онлайн!
Интересный способ, но на 2 байта длиннее.
Python 2 , 83 байта
Попробуйте онлайн!
источник
input
читает только одну строку?raw_input()
что добавил бы больше байтов.JavaScript (ES6), 77 байт
Рекурсивно использует регулярное выражение для поиска большего и большего квадрата, пока ничего не найдено.
Регулярное выражение будет таким для квадрата 3х3:
Ожидается, что ввод завершится новой строкой, а вывод - списком.
Объяснение:
Отрывок:
Показать фрагмент кода
источник
Брахилог , 16 байт
Попробуйте онлайн!
источник
Perl 5 , 84 байта
Попробуйте онлайн!
Выполняет
"abcde\nfghij\nklm\nno"
контрольный пример.источник
chop
вместоchomp
и++$i<@a
вместо$i++<$#a
R ,
84838176 байт-5 байт переносят подход Денниса с
sum
Попробуйте онлайн!
читает из стандартного ввода, печатает в стандартный вывод без завершающей строки.
Слегка разгульный
источник
C (gcc) ,
162159151147144142137 байтТам должно быть несколько ударов в гольф здесь ...
Попробуйте онлайн!
источник
!=-1
быть>-1
илиgetchar()
выходные значения меньше минус одного? Может ли это быть+1
?~
чтобы обнаружить минус один.Желе , 15 байт
Попробуйте онлайн!
Как это устроено
источник
Java 8, 150 байт
Объяснение:
Попробуй это здесь.
источник
MATL , 33 байта
Попробуйте онлайн!
Мое чувство пауков говорит мне, что, возможно, есть более короткий путь (я думаю, что-то с
Ybo
самого начала) ... Требуется перевод строки в конце. (Примечание: я немного переработал это, так как он будет обрабатывать и пустые строки, что не является обязательным. Я посмотрю, смогу ли я сократить байтовый счет, потому что в коде гольф это не функция, а ошибка)источник
Python 2 , 132 байта
Попробуйте онлайн!
источник
Python 2 , 103 байта
Попробуйте онлайн!
источник
JavaScript (ES6), 95 байт
Требуется завершающий символ новой строки при вводе.
источник
Wolfram Language (Mathematica) , 81 байт
Попробуйте онлайн!
источник
APL (Дьялог) , 25 байтов *
Функция молчаливого префикса. Возвращает матрицу.
Попробуйте онлайн!
Это действительно две независимые функции, а именно,
⎕AV[3]∘≠⊆⊢
которые имеют дело с неудобным форматом ввода и↑↑⍨2⍴(⌊/≢,≢¨)
выполняют действительно интересную работу.⎕AV[3]∘≠
отличие от LF (третий элемент A томика V Ector - набор символов)⊆
разделы (подстроки начинаются со значений, превышающих их предшественник и заканчиваются нулями)⊢
Аргумент(
…)
Применить следующую молчаливую функцию:2⍴(
…)
Изменить длину до длины 2:⌊/
минимум≢
количество строк,
с последующим≢¨
количество символов в каждой строке↑⍨
взять столько строк и столбцов из↑
строки, смешанные вместе, чтобы сформировать матрицу (заполнение пробелами)* В классическом с
⎕ML
( M igration L Evel)3
( по умолчанию во многих системах) и подставляя⊂
для⊆
и⊃
для крайнего левого↑
. Тио!источник
⎕ML←3
устарели, поэтому я бы предпочел показать язык так, как он обычно выглядит. Фактически, почти все мои решения Dyalog APL предполагают использование Classic только потому, что мы считаем байты вместо символов, хотя даже версия Unicode присваивает значение менее 256 символов.PHP, 123 байта
требует PHP 5.4, 5.5 или 5.6. Заменить
split
сexplode
для последующего PHP.Запустите
php -nr '<code> '<string>'
или попробуйте онлайн . (Убедитесь, что вы выбрали подходящую версию PHP!)
источник
Haskell ,
9288 байтовПопробуйте онлайн!
источник
Perl 5, 60 +5 (-0777p) байтов
Попробуйте онлайн
источник
-0777
. Что делать-00
и-0777
делать, во всяком случае.-0
для указания разделителя записей в восьмеричном формате777
- это специальное значение, указывающее на отсутствие разделителя, поэтому весь файл читается,0
это другое специальное значение, указывающее на «режим абзаца», разделитель содержит более 1 последовательныхPerl 6 ,
158140 байтПопробуйте онлайн!
Ура для моего первого ответа Perl 6. Я поиграю с некоторыми вариантами командной строки, чтобы посмотреть, смогу ли я сыграть в гольф немного больше. Вся помощь в сохранении байтов приветствуется!
источник
Скала , 201 байт
Попробуйте онлайн!
Впервые игра в гольф на этом языке, так что, возможно, не самая лучшая.
источник