При наличии строки печатного текста ASCII (включая символы новой строки и пробелы), который содержит хотя бы один символ, который не является ни новой строкой, ни пробелом, выведите истинное значение, если строка является прямоугольной, и значение Falsey в противном случае. Кроме того, исходный код вашего решения должен быть прямоугольным .
Строка является прямоугольной, если она удовлетворяет всем следующим условиям:
- Первая и последняя строки не содержат пробелов.
- Первый и последний символ каждой строки не является пробелом.
- Все строки имеют одинаковое количество символов.
Например, следующий текст является прямоугольным:
abcd
e fg
hijk
Этот текст, однако, не является прямоугольным (требование № 3):
1234
567
8900
Тестовые случаи
Truthy:
sdghajksfg
asdf
jkl;
qwerty
u i op
zxcvbn
1234
5 6
7890
abcd
e fg
hijk
Falsey:
a b c
123
456
7 9
12
345
qwerty
uiop
zxcvnm
1234
567
8900
Это код-гольф , поэтому выигрывает самое короткое решение в байтах.
Ответы:
C (gcc) ,
127125124118 байтr*=!e&(!t|t==c);
в гольфr>>=e||t&&t-c;
. (Этот гольф послужил источником вдохновения для моего недавнего C-ответа на вопрос об обратном обновлении флага .)*(_-2)
в гольф_[~1]
.*_++-10||(...)
в гольф*_++<11?...:0
и используя нулевой заполнитель...:0
(который конструктивно не используется) дляc++
увеличения приращения. Эти гольфы позволили некоторые дальнейшие перестановки петли.Попробуйте онлайн!
Разметка источника, достигающая более высокого прямоугольника.
объяснение
Далее поясняется версия длиной 124 байта.
Попробуйте онлайн!
источник
r,e,c,t
Java 10,
214176169152144139 байт-5 байт благодаря @Neil .
Использует
String[]a
вместоvar a
;return-r<0;
вместоreturn r>0;
; и добавил комментарий//
в самом конце, чтобы не было пробелов в первой и последней строках.Обратите внимание, что этот прямоугольник короче однострочного ввода, потому что его
int r=1,...;
следует заменить наint[]v{1,...};
, и тогда будет использоваться все целые числаv[n]
(где n - индекс переменной в массивеv
).Попробуйте онлайн.
Объяснение:
Вот та же базовая программа с пробелами (
128126 байт ):-2 байта благодаря @Neil .
Попробуйте онлайн.
источник
T-SQL,
237207 байтВыходы 1 для прямоугольного, 0 в противном случае. Мне пришлось использовать тонны лишних скобок и скобок для устранения пробелов, я уверен, что есть много возможностей для улучшения.
Пояснение :
В соответствии с нашими разрешенными вариантами ввода / вывода и пояснениями в комментариях к вопросу, ввод принимается как отдельные строки в существующей таблице t . Поскольку данные в SQL по своей природе неупорядочены, эта таблица содержит поле идентификатора «номер строки» i :
В основном мой SQL выполняет 3 подзапроса, каждый из которых возвращает
0
или1
основан на 3 критериях «прямоугольного» кода. Эти 3 значения умножаются вместе, возвращаясь только1
для кода, который удовлетворяет всем 3.РЕДАКТИРОВАТЬ : объединить критерии 2 и 3 в один и тот же SELECT для экономии места
TRIM(v)
Функция поддерживается только SQL 2017 и выше. Более ранние версии потребовали быLTRIM(RTRIM(v))
, что потребовало бы перебалансировки строк.Одно случайное замечание:
LEN()
функция в SQL игнорирует завершающие пробелы, поэтомуLEN('foo ') = 3
. Чтобы получить «истинную» длину, вы должны прикрепить символ до конца, а затем вычесть один: Pисточник
С ++,
199183181175 байтовЭта шаблонная функция принимает строки как набор строк (которые могут быть широкими строками), переданные как пара итераторов.
Спасибо пользователю Erroneous за напоминание о
back()
членеstd::string
и за указание на то, чтоnpos+1
это ноль.Ungolfed эквивалент
Единственная настоящая игра в гольф состоит в объединении первой и последней линий, чтобы мы могли выполнить сингл
find
для пробелов в них.Тестовая программа
источник
.find(' ')+1==0
иs.back()
вместо*s.rbegin()
.JavaScript (Node.js) , 85 байт
Попробуйте онлайн!
источник
NOR
оператора!Python 2 , 82 байта
Попробуйте онлайн!
Вызывать как
f("abcd", "e fg", "hijk")
.источник
Haskell ,
10610298110109102 байтаСпасибо @nimi и @Laikoni за каждый байт!
Попробуйте онлайн!
источник
Haskell , 79 байтов
Попробуйте онлайн! Принимает ввод в виде списка строк.
Шаблон
g(x:r)= ...
связывает первую строку сx
и (возможно, пустой) список оставшихся строк сr
. Затемall((==(0<$x)).(0<$))r
проверяет, все ли строкиr
имеют одинаковую длину сx
(Используя этот совет ).Если нет, то соединение
&&
замыкается и возвращаетсяFalse
, в противном случае оценивается правая сторона. Там есть строка build, которая состоит изx
первой строки,last(x:r)
последней строкиr
(или первой строки снова, еслиr
она пуста), а(head<$>r)
также первого и(last<$>r)
последнего символа каждой строки. Для этой строкиall(>='!')
проверяется, что она не содержит пробелов (мы не можем использовать(>' ')
из-за ограничения исходного кода).источник
contains at least one character that is neither a newline nor a space
, который также позволяет отбрасывать пустой список дел.MATL , 13 байт
Ввод представляет собой массив строк в формате
{'abc' 'de'}
.Выходные данные - это массив, содержащий только единицы, которые являются правдивыми , или массив, содержащий по крайней мере ноль, который является ложным .
Попробуйте онлайн! Или проверьте все контрольные примеры , включая проверку на достоверность / ложность.
объяснение
источник
cO6Lt&(32=~
попробуйте онлайн! Просто обнуляет не-границы частей, а затем проверяет, есть ли пробелы.cF6Lt&(32=~
. Не стесняйтесь редактировать это, или если нет, мы можем просто оставить это в комментариях.JavaScript (ES6), 88 байт
Попробуйте онлайн!
источник
Холст ,
1715 байтовПопробуй это здесь!
Пояснение (ASCII-Fied для моно-пространства):
источник
Perl 5 , 70 байт
Попробуйте онлайн!
Выходы
0
для правды, любой другой номер для фальси.источник
Красный ,
216191 байтПопробуйте онлайн!
Я положил много других необязательных скобок в первом и последнем рядах.
источник
Желе , 17 байт
Попробуйте онлайн!
источник
Does not seem to enforce equal line length
тоже вызвал меня - это все, что я говорил." \n "
Попробуйте онлайн!Желе , 15 байт
Использует метод, разработанный Mnemonic в (в настоящее время - из-за сбоя в пограничном случае) удаленном представлении Pyth. (если это сейчас исправлено, иди дай кредит !)
Монадическая ссылка, принимающая список символов, который возвращает 1 или 0.
Попробуйте онлайн!
Как?
источник
Japt , 22 байта
Неконкурентный ответ: в Japt есть известная ошибка , когда двумерные вращения массивов усекают результаты. Из-за этой ошибки приведенный ниже код работает только с квадратными входами. Если же ошибки не было, приведенный ниже код должен работать совершенно корректно.
Принимает ввод как массив строк. Использование скобок вместо пробелов делает требование к прямоугольному коду довольно простым.
Попробуй это здесь .
источник
Ruby 2.5+, 63 байта
Принимает ввод как массив строк. Нет тестовой ссылки, так как версия на TIO (2.4) слишком старая для этой. Вместо этого вот немного более длинная (69 байт) версия для тестирования:
Попробуйте онлайн!
Разница в том, что, поскольку 2.5 Ruby поддерживает прямую передачу шаблона Regex в
all?, any?, none?
методы, что экономит нам несколько байтов. Сам метод довольно понятен - мы тестируем:источник
C (gcc) , 119 байт
Принимает ввод в виде списка (ов) из n строк.
Попробуйте онлайн!
источник
C # (.NET Core) ,
145167 байтПопробуйте онлайн!
источник
S[0].IndexOf(" ")
ищет пробел в первой строке иS[S.Count()-1].IndexOf(" ")
ищет в последней строке. Если в первой и последней строке нет пробелов, то это -2, что соответствует истине-2 < -1
.True
при передаче в вашу программу. Это дополнительное ограничение в этом вызове.