задача
Если дано представление линии, выведите количество квадрантов , через которые проходит эта линия.
Допустимые представления линии
Вы можете представить линию как
- Три целых числа со знаком
A
,B
иC
которые не имеют общего множителя, а также гдеA
иB
не равны нулю, представляя строкуAx + By = C
, - Четыре целых числа , , и , представляя линию , проходящую через точку и , или
X1
Y1
X2
Y2
(X1, Y1)
(X2, Y2)
- Тип данных, который описывает строку, если она есть в вашем языке (она должна поддерживать вертикальные линии).
Вы не можете принимать входные данные в любом формате, который не допускает вертикальную линию (например, форма перехвата с уклоном). Если вы решите принимать целые числа в качестве входных данных, вы можете предположить, что они лежат в включающем диапазоне [-127, 128]
.
Характеристики
- Выходными данными всегда будут 0, 2 или 3 (строка никогда не может проходить через все четыре квадранта и не может проходить только через один).
- Считается, что линия на оси не проходит через какие-либо квадранты. Считается, что линия через начало координат проходит только через 2 квадранта.
- Вам не нужно возвращать, через какие квадранты они проходят (хотя в тестовых примерах они приведены для ясности).
- Это код-гольф , поэтому выигрывает самый короткий действительный ответ (измеряется в байтах).
Тестовые случаи
Вам придется конвертировать их в подходящий формат, прежде чем использовать их.
1x + 1y = 1 -> 3 (quadrants I, II, and IV)
-2x + 3y = 1 -> 3 (quadrants I, II, and III)
2x + -3y = 0 -> 2 (quadrants III and I)
1x + 1y = 0 -> 2 (quadrants II and IV)
3x + 0y = 6 -> 2 (quadrants I and IV)
-3x + 0y = 5 -> 2 (quadrants II and III)
0x + -8y = 4 -> 2 (quadrants III and IV)
0x + 1y = 0 -> 0 (lies on the x-axis)
1x + 0y = 0 -> 0 (lies on the y-axis)
Ответы:
Python 3 , 24 байта
Попробуйте онлайн!
источник
'320'[a.count(0)]
приемлемым использование и возврат значения в строковой форме?Желе , 5 байт
Попробуйте онлайн!
Больше не основано на ответе Лики!
источник
ċ0ị2,0,3
сохраняет байтTL’ȧ$
. Не знаю, желе, так что это может быть в гольфJavascript (ES6),
302422 байтаЯ впервые пытаюсь сыграть в гольф в Javascript.
Должен быть лучший способ считать нули ...-6 байтов благодаря Герману Лауэнштейну, -2 байта для запоминания предшествующих операторов.
Альтернативное 24-байтовое решение для возврата строки:
источник
(a,b,c)=>3<<(!a+!b+!c)&3
05AB1E , 6 байтов
Попробуйте онлайн!
Основано на ответе Лики Нун.
источник
SOGL V0.12 , 8 байт
Попробуй здесь!
Основано на ответе Лики Нун .
источник
GolfScript ,
1614 байтовПопробуйте онлайн!
Эта программа принимает массив из 3 целых чисел, представляющих коэффициенты в уравнении
Ax + By = C
Пример ввода / вывода
Как это устроено
Сначала мне было немного сложно найти математический способ расчета. Однако есть только 8 возможных конфигураций, так что
a != 0 & b != 0 & c != 0
В конце концов я пришел к следующей функции.
и все это может быть сведено к одной математической задаче
источник
{!!}%
вместо[{!!}/]
.{:!:!:+_1>*}
.:!
эквивалентно{!}%
), 2) сокращение для сокращения (:+
эквивалентно{+}*
), 3),.
которое изменяется на_
(потому что CJam имеет значения с плавающей запятой), и 4) то, что CJam не имеет ввода по умолчанию в стеке, то есть вы оборачиваете код,{}
чтобы сделать его функцией.Сетчатка , 13 байт
Попробуйте онлайн
Также основано на ответе Лики Нун .
источник
10
например. Первое регулярное выражение должно быть\b0
.JavaScript, 25 байт
Основано на ответе Лики Нун.
источник
Haskell , 22 байта
Попробуйте онлайн!
Бессмысленное решение, 27 байт
Попробуйте онлайн!
источник
Perl 6, 18 байт
источник
ABCR , 30 байтов
Ввод осуществляется в форме, в
A,B,C
которой запятые могут быть заменены на любые нечисловые, не-
символьные.Онлайн переводчика пока нет, но вот объяснение:
источник
APL (Dyalog Unicode) ,
1411 байтовПопробуйте онлайн!
⎕IO
есть0
. Спасибо @ Adám за -3 байта!источник
0⌈3-×⍨+/0=⎕
Deorst , 12 байт
Попробуйте онлайн!
Отчасти основано на ответе Лики ; использует ту же предпосылку, но другой метод отображения.
Как это устроено
У Deorst есть встроенное средство подсчета вхождений, но у него (по какой-то причине) нет команды индексации, поэтому мне пришлось создать следующее отображение, где левое,
a.count(0)
а правое - требуемый результатСама программа работает так (пример ввода
[1,1,1]
)источник
Добавить ++ , 23 байта
Попробуйте онлайн!
Исходя из моего ответа Deorst и Python ответа Дырявого в
Как это устроено
Тем не менее, я думаю, что я слишком часто использовал функции в Add ++, а не в основном теле кода. Поэтому я попытался сделать это, используя обе функции и тело кода, и в результате получился более приятный 50-байтовый фрагмент (да, это самый длинный ответ здесь):
Попробуйте онлайн!
источник