Ваша задача - создать программу, которая идентифицирует форму ввода. Формы для идентификации могут быть любой из следующих:
Площадь
Чтобы быть идентифицированным как квадрат, источник должен иметь строки одинаковой длины и столько же строк, сколько символов в строке (символы новой строки исключаются). Дополнительный трейлинг-перевод строки является приемлемым.
$_='
$_="
$_"'
;say
Прямоугольник
Чтобы быть идентифицированным как прямоугольник, источник должен иметь строки одинаковой длины, но количество строк не соответствует количеству символов в строке (символы новой строки исключаются). Дополнительный трейлинг-перевод строки является приемлемым. Это может быть как горизонтально, так и вертикально.
$_=
"no
t a
squ
are
";#
$_="but it
is still a
consistent
shape!";##
Треугольник
Чтобы быть идентифицированным как треугольник, источник должен начинаться с одного символа, и каждая последующая строка должна иметь один дополнительный символ (включая последний), или после первой строки каждая последующая строка должна иметь на один символ меньше до последнего, что есть только один.
$
_=
"So
this
"."".
shape;
$_="or
even,
this
way
!!
"
бардак
Все, что не соответствует формату, указанному выше, должно быть идентифицировано как беспорядок.
правила
- Вы можете вернуть любые четыре последовательных значения для печати, чтобы идентифицировать каждую форму.
- Ваш исходный код также должен соответствовать одной из вышеперечисленных форм (нет, не беспорядок).
- Один трейлинг-перевод строки в вашем источнике является приемлемым.
- Можно предположить, что входные данные не содержат пустых строк (включая завершающие новые строки), не являются пустыми и состоят не только из новых строк.
- Все фигуры должны иметь высоту и ширину> = 2, в противном случае это определяется как беспорядок.
- Стандартные лазейки запрещены.
- Самое короткое решение в байтах, на каждом языке, выигрывает.
источник
All shapes must have a height and width of >= 2.
['abc','cfd','fgh']
?Ответы:
Желе , 35 байт
Попробуйте онлайн!
0
= Беспорядок1
= прямоугольник2
= квадрат3
= треугольникисточник
Брахилог , 45 байт
Попробуйте онлайн!
Код - это прямоугольник (несмотря на то, как он отображается на моем экране). Выходы: 1 для квадрата, 2 для прямоугольника, 3 для треугольника и ничего для беспорядка
Объяснение:
источник
Java 10,
231221219217213211207 байтФункция - это сам прямоугольник.
1
= Квадраты;2
= Прямоугольники;3
= Треугольники;0
= Беспорядок-14 байт благодаря @ OlivierGrégoire .
Объяснение:
Попробуйте онлайн.
источник
s->{var a=s.split("\n");int S=a.length,l=a[0].length(),L,D,b=0,i=1;if(S<2)return 0;for(L=a[1].length(),D=L-l; b<1&++i<S;)if((L=a[i].length())-a[i-1].length()!=D)b=1;return b<1?D==0?S==l?1:2:D==-1|D==1?l==1|L==1?3:0:0:0;}
(двойной пробел послеvar
, разрыв строки послеD=L-l;
.D==-1|D==1
наD>-2|D<2
. Этоl==1|L==1
может быть более пригодным для игры с некоторыми побитовыми операциями, но это не совсем мой опыт.s->{var a=s.split("\n");int r=a.length,l=a[0].length(),L,D,b=0,i=1;if(r>1){for(L=a[1].length(),D=L-l;++ i<r;b=L-a[i-1].length()!=D?1:b)L=a[i].length();b=b<1?D==0?r==l?1:2:D>-2&D<2&(l<2|L<2)?3:0:0;}return b;}
(перерыв послеD=L-l;++
). По-прежнему можно сыграть в гольф, объединив цикл и утверждение в одном, но сейчас я не вижу, как это сделать.Python 2 ,
129114109107113 байтовПопробуйте онлайн!
Печать
0
знак равноMess
1
знак равноTriangle
2
знак равноSquare
3
знак равноRectangle
источник
Желе ,
3227 байтПопробуйте онлайн!
Теперь берём ввод в список строк и переключаемся
>1×
с’a
использованиемSƲ
послеL€
вместоFLƲƊ
. Это позволило мне сжать в две строки, и я сэкономил 5 байт. Следующие значения такие же, как и раньше.[0.0, 0.0]
= Беспорядок[0.0, 1.5707963267948966]
= прямоугольник[0.0, 0.7853981633974483]
= квадрат[1.5707963267948966, 0.0]
= треугольникZL«L
получает минимум высоты и ширины и’
вычитает из него 1Ç
вызывает вторую ссылку, и в конце, если вход представляет собой одну строку, результатÇ
получает логическое И с предыдущим числом, если будет только одна строка, в которой будет вывод[0.0, 0.0]
.Во второй ссылке:
,U
выдает список длин строк в паре с обратным.J
isrange(number of lines)
и⁼€
проверяет, равен ли каждый из них результатуJ
.Ẹ
(Любой) возвращает 1, если вход является треугольником.E
проверяет, все ли длины строк равны (прямоугольник / квадрат).SƲ
с помощью$
сгруппировать их в одну монаду проверяет, является ли общее число символов квадратным числом.Таким образом, в конце второй ссылки мы имеем,
[[a,b],c]
где находится каждое число0
или1
указывает, является ли ввод треугольником, прямоугольником и имеет квадратное число символов соответственно.Однако квадратное число элементов не означает, что ввод является квадратом, поскольку
имеет квадратное количество элементов, но не квадрат.
Вот где
æA
(arctan2) входит.0æA0
==0æA1
==0
. Другими словами, если вход имеет квадратное число элементов, но не является прямоугольником, то это не квадрат. Конечно, есть более ясные способы сделать это, но какое это имеет значение, когда у нас есть байты для размышлений, и нам разрешают согласованный произвольный вывод.Обратите внимание, что ранее я использовал
æA/
вместоæAƝ
(и,
вместо вместо;
во второй ссылке), но первый метод различает треугольники с квадратным числом элементов и те, у которых их нет, но они, очевидно, должны учитываться как одно и то же.источник
arctan2
было именно то, что мне было нужно.Java 10,
274323298229 байтПервый треугольник представления.
0
бардак1
Прямоугольник3
Площадь4
ТреугольникПопробуйте это онлайн здесь .
Отредактировано несколько раз, чтобы играть в гольф немного больше.
Конечно, я мог бы сэкономить много байтов, превратив это в прямоугольник (
281267259200 байтов, см. Здесь ).Результатом идентификации манипулируют с помощью побитового И, получая битовую маску следующим образом:
Безголовая версия:
источник
Javascript 125 байт
источник
Perl 5
-p
, 83 байтаПопробуйте онлайн!
источник
PHP,
195205 байтовПеревернутый треугольник добавляет к этому дорогие 56 байт!
Выходы S, R, T, M
Сохранено несколько байтов благодаря Dom Hastings.
Попробуйте онлайн!
Исправлено несколько ошибок ... Тестовые прогоны дают это.
источник
?>
должно быть просто отличноT
дляcccc\na\naa\ncccc
Попробуйте онлайн!Perl 6 , 81 байт
Попробуйте онлайн!
Возвращает
True
для квадрата,False
для прямоугольника,3
для треугольника,Nil
для беспорядка.источник
$_ Z- .skip
?Stax , 39 байт
Запускать и отлаживать онлайн!
Самый короткий ответ только в ASCII.
объяснение
Решение использует следующий факт: если при выполнении программы что-то явно напечатано, неявный вывод не генерируется. В противном случае вершина стека в конце выполнения выводится неявно.
источник
Haskell ,
113107103101 байтПопробуйте онлайн!
Возвращает 0, 1, 2 и 3 для беспорядка, прямоугольника, квадрата и треугольника соответственно.
Изменить: -2 байта благодаря Линн !
источник
05AB1E ,
352927 байтСохранено 8 байт благодаря волшебной урне с осьминогом
Попробуйте онлайн!
0
= Беспорядок4
= Треугольник1
= Прямоугольник3
= Квадратисточник
gs€g©QP®¥ ÄP®1å&®ËJC
Можно добавить символ пробела иC
для 21, хотя.R 101 байт
Код не может иметь дело с «ОТРИЦАТЕЛЬНЫМ ПОДТВЕРЖДЕНИЕМ» (U + 0015) или квадратом в коде выше. Этот байт может быть переключен на что-то другое, если требуется, чтобы вход содержал этот байт.
Попробуйте онлайн!
источник
readLines()
вместоscan()
?file("stdin")
чтобы он читался из консоли (а не из следующих строк кода). Это означает, что, вероятно, будет меньше гольфа. Ах хорошо.Улитки, 29 байт
Выходной ключ:
Было бы 23 байта без разметки источника:
источник
Wolfram Language (Mathematica) , 119 байт
Использование
Replace
/.
и сопоставление с образцом по количеству символов за строкой.Replace
будет выбрасывать первую RHS правила, которое соответствует, поэтому порядок должен проверять ввод символа 1, затем квадраты, прямоугольники, треугольники и провал для беспорядка.квадрат = 0, прямоугольник = 1, треугольник = 2, 3 = месиво
Попробуйте онлайн!
источник
Красный , 209 байт
Попробуйте онлайн!
0
бардак1
Площадь2
Прямоугольник3
Треугольникисточник
AWK , 119 байт
Попробуйте онлайн!
Выход:
0
= Квадрат1
= Прямоугольник2
= Треугольник3
= Беспорядокисточник
Рубин ,
115111 байтПопробуйте онлайн!
Анонимная лямбда. Выходы:
источник
C (gcc) ,
125123 байтаБлагодаря потолку кошки за -2 байта.
Попробуйте онлайн!
источник