Строка считается квадратной, если выполняются следующие условия:
- Каждая строка имеет одинаковое количество символов
- Количество символов в каждой строке равно количеству строк.
Ваша задача - написать программу или функцию, которая определяет, является ли данная входная строка квадратом.
Вы можете потребовать, чтобы ввод был ограничен вашим выбором LF, CR или CRLF.
Символы новой строки не считаются частью длины строки.
Вы можете потребовать, чтобы в вводе была или не была завершающая новая строка, которая не считается дополнительной строкой.
Ввод - это строка или одномерный массив символов; это не список строк.
Вы можете предположить, что ввод не является пустым и содержит только печатный ASCII, включая пробелы.
Вы должны вывести истинное значение для квадратных строк и ложное значение для других строк.
Правдивые тестовые случаи:
Foo бар Baz
,
.с. .ss .с. (s представляет пространство)
сс сс (s представляет пространство)
ааааа ааааа ааааа ааааа ааааа
Ложные тесты:
.. ,
,
,
.... ....
4444 333 22
333 333
abc.def.ghi
Обратите внимание на дополнительные пустые строки в некоторых ложных случаях.
Это код-гольф - побеждает меньше байтов!
Ответы:
Брахилог (2), 3 байта
Попробуйте онлайн!
Полная программа. Выходы
true.
для правды,false.
для фальси.объяснение
Я немного скептически относился к полезности
ṁ
встроенной функции, когда она была добавлена, но я не могу отрицать, что она полезна здесь…Брахилог (2), 7 байт
Попробуйте онлайн!
Не встроенное решение.
По-прежнему бьет все остальные записи, на момент написания.РЕДАКТИРОВАТЬ: Не совсем, запись Jelly равной длины вошла, когда я писал это, и превосходит его через тай-брейк с отметкой времени.объяснение
источник
ṁ
= "Утверждаю, что результат квадратный" :(.\l~l
того времени, за исключением того, что команда обратной косой черты, которая среди прочего утверждает, что ее ввод является прямоугольником , была сломана; обратите внимание, что даже если мы заменимṁ
на.\l~l
, это по- прежнему самая короткая программа, подумайте об этом, я добавлю это в пост). Команда обратной косой черты была исправлена, но автор языка решил добавить квадрат подтверждения одновременно. Я думал, что "конечно, это никогда не придет снова". Видимо я был не прав.Python 2 , 52 байта
Попробуйте онлайн! или попробуйте все тестовые случаи
источник
'\n'
, просто оставьте его пустым (поскольку на входе нет пробелов и табуляций).JavaScript (ES6),
4645 байтобъяснение
true
за квадрат, аfalse
за нет.Попытайся
источник
s=>!(s=s.split`\n`).some(x=>x.length-s.length)
!some
из-под контроля, просто потому что это такая же длина какevery
.05AB1E ,
108 байтПопробуйте онлайн!
-2 спасибо Райли, это в основном его ответ ._.
источник
s
. Как это¶¡€gDgQP
Желе ,
75 байтПопробуйте онлайн!
Спасибо FryAmTheEggman за -2
источник
Haskell,
3834 байтаПопробуйте онлайн!
Бессмысленная версия
f s = all ((==length (lines s)).length) (lines s)
, т.е. разделить входные данные на строки и проверить, равна ли длина каждой строки количеству строк.Редактировать: Спасибо @xnor за 4 байта.
источник
all
дляmap
резкиand.
.Желе , 7 байт
Попробуйте онлайн!
объяснение
источник
Japt , 9 байт
Проверьте это онлайн!
объяснение
Используя некоторые функции, реализованные вскоре после публикации этого вызова, это может быть 6 байтов:
Проверьте это онлайн!
объяснение
источник
y
было решение, но мое входило еще на несколько байтов.Retina ,
3331 байтПопробуйте онлайн! Объяснение: На первом этапе все печатаемые ASCII просто заменяются одним и тем же символом, чтобы упростить сопоставление. (Это может быть сделано без, но это кодовый гольф, а не кодовый вызов.) Второй этап затем соответствует по крайней мере одному символу в первой строке. Тем не менее, для каждого дополнительного символа в первой строке он затем может совпадать с новой строкой, за которой следует копия первой строки. Последняя часть выражения приводит к сбою сопоставления, если столбцов больше, чем строк.
источник
\S\n;
вместо первой строки экономит один байт.
на.
экономит два, но спасибо.Шелуха , 6 байт
Принимает строку и печатает либо
1
или0
. Попробуйте онлайн! Первая строка перебирает тестовые случаи; удалите его, если вы хотите проверить одно значение.объяснение
Husk - это новый функциональный язык игры в гольф, созданный мной и Лео . В нем отсутствуют многие функции, и разработка продолжается. Его основной особенностью является система жестких типов, которая позволяет нам перегружать функции более высокого порядка.
На высоком уровне программа работает так:
Функция
≡
фактически проверяет, имеют ли два массива одинаковую форму и одинаковое распределение истинных элементов. В Husk все символы, кроме нулевого байта, являются правдивыми, и этого не произойдет в наших входных данных. Кроме того,S
это S-комбинатор , функция, которая принимает в качестве входных данных две функции, здесь≡
иT'a
, и возвращает новую функцию, которая отображаетсяx
на≡(x)(T'a x)
. РезультатS
состоит из¶
, и эта функция применяется ко входу неявно.Как Husk узнает, что она должна применяться
S
к следующей функции, но¶
должна быть составлена с функцией слева? Просто: он просто пробует каждую интерпретацию и выбирает ту, в которой типы имеют смысл. Это объясняется более подробно в документации Husk .источник
Pure Bash (без коммунальных услуг), 55
mapfile
читает ввод в массивa
Противоположный смысл этого возвращается в виде кода возврата оболочки (исследуем с помощью
echo $?
) - идеальный квадрат равен 1, все остальное равно 0.Попробуйте онлайн (правда) .
Попробуй онлайн (фальшивка) .
Предыдущий ответ с использованием eval-escape-extension hell, 78:
Попробуйте онлайн (правда) .
Попробуй онлайн (фальшивка) .
источник
Perl 6 , 27 байт
Проверяет, равно ли количество строк во входной строке количеству символов в каждой строке.
источник
.lines
методом.Pyth, 7 байт
Попробуй здесь
Не требует завершающего перевода строки. Заменяет ввод двумерным массивом 1 с, где 1 представляет любой символ в исходном вводе. Затем мы проверяем, не изменился ли этот массив после транспонирования (заменив столбцы на строки). Только квадрат вернет истину в такой ситуации.
источник
Java (OpenJDK 8) ,
96919087 байт-5 байт благодаря @KevinCruijssen
-1 байт благодаря @TheLethalCoder
-2 байт благодаря @ OlivierGrégoire
Попробуйте онлайн!
источник
String[]s
и вы можете удалить,0
в.split("\\n");
for -3 байта. И точку с запятой /;
в самом конце вам не нужно считать, так что еще один -1. Ох, и вы должны включитьjava.util.
передArrays
боюсь. Импорт / использование также являются частью подсчета байтов.java.util.
, просто обычный цикл for вроде этогоfor(String x:s)if(x.length()!=s.length)return 0>1;return 1>0;
корочеreturn java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);
.\n
?a.split("\n")
самом деле короче!a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
leng
иth()
. По-видимому, они появляются сначала после 60-го символа, а затем каждые 20 символов.05AB1E , 7 байтов
Попробуйте онлайн!
источник
n
ввод информации вместо 1 и почему мой оригинальный ответ не сработал.|
означает «взять оставшуюся часть ввода и разделить ее на новые строки», которая никоим образом не принимает несколько входов. Вы просто должны рассматривать STDIN как один вход.R , 57 байт
Анонимная функция; Разбивает на новые строки, вычисляет длину каждой строки и проверяет, все ли они равны количеству строк.
Попробуйте онлайн!
источник
MATL ,
1412 байтВходная строка определяется с помощью string concatenation (
[...]
) и с точкой кода10
для представления LF. Например,['aaa' 10 'bb']
интерпретируется в MATL как строка,'aaa'
соединенная символом с точкой кода, соединенной10
со строкой'bb'
.Выходными данными является непустой числовой вектор, который является правдивым тогда и только тогда, когда все его записи отличны от нуля.
Попробуйте онлайн!
объяснение
Рассмотрим ввод
['4444' 10 '333' 10 '22']
.источник
R 35 байт
Принимает ввод от стандартного ввода. Проверяет, что количество символов в каждой строке равно общему количеству строк. Возвращает
TRUE
илиFALSE
в зависимости от обстоятельств.источник
JavaScript (ES6), 48 байт
источник
CJam, 11 байт
Попробуйте онлайн!
источник
OCaml , 56 байт
Попробуйте онлайн!
источник
Pyth,
1210 байтСохранено 2 байта благодаря @FryAmTheEggman.
Попробуйте онлайн
объяснение
источник
QBIC , 43 байта
Я доволен тем, как быстро дериватив QBasic может пройти этот вызов.
Объяснение:
источник
Pyth, 7 байт
демонстрация
Дважды транспонируйте ввод с усечением, затем проверьте, совпадает ли результат с оригиналом.
источник
Рубин, 50 байтов
Попробуйте онлайн!
объяснение
источник
.split($/,-1);
->.split $/,-1;
lines
вместо,read
а затемsplit
(но тогда вы должны добавить 1 к,size
потому что строки включают в себя завершающийЧеддер , 39 байт
Попробуйте онлайн!
источник
Clojure, 58 байт
Требуется завершающий перевод строки, ожидающий увидеть что-то более волшебное.
источник
APL (Dyalog) , 17 байт
Требуется
⎕ML←3
по умолчанию во многих системах. Использует CR.Попробуйте онлайн!
↓∘⎕FMT
[это] разделенным на-линии Р или т а т Ted-в-а-квадрат аргумент≡
идентичный⎕TC[2]∘≠
* в группы не-новой строки * -характеры⊂
разделенная⊢
аргумент?* Второй элемент списка T erminal Си ontrol символов.
В версии 16.0 можно писать
↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢
с⎕ML←1
.источник
⎕ML
?⎕ML
, в то время как люди, которые начали с других APL, имеют тенденцию работать с низким⎕ML
.PowerShell, 64 байта
Тот же подход (разделение, длина строк, количество строк) подходит для ответов на другие языки, не относящиеся к гольфу, но нет эквивалента map (), так что это массив длин строк с количеством строк, помеченных в конце, затем этот массив сгруппированы. Квадраты выходят как,
3,3,3,3 -> 1 group, all line lengths and line count were equal
а не квадраты выходят как3,2,1 -> 3 groups
, что-то было неравным на квадрате:Требуются новые строки в стиле Linux, без завершающей строки. например
(И вы можете сделать то же самое для ложных тестов, но я не буду помещать это здесь, поскольку их больше). Пара
@
символов необходима для того, чтобы, когда входные данные были единичными, в'.'
противном случае разделение не создает массив из одной строки, а просто создает одну строку, а затем конкатенация массива не1,1
выводит свои выходные данные2
.Я надеялся, что это может быть короче заменить все символы на «а», а затем перебором от 1 до «Длина ввода» для всех квадратов «а» и посмотреть, соответствует ли какой-либо из них ввод. Как только я прошел через param () и .Length, -join и -replace, он заканчивается намного дольше - 81 байт:
источник
Грязь , 11 байт
Принты
1
для квадратов и0
не квадратов. Попробуйте онлайн!объяснение
Подробное объяснение можно найти на странице учебника Grime , где в качестве примера приводится именно эта программа.
источник