Треугольник Серпинский представляет собой набор точек на плоскости , которая строится, начиная с одного треугольником и неоднократно разделив все треугольники на четыре конгруэнтных треугольники и удаление центрального треугольника. Право Серпинского треугольник имеет углы в (0,0)
, (0,1)
и (1,0)
, и выглядит следующим образом :
Некоторые эквивалентные определения этого набора следующие:
Очки в
n
итерации описанного выше процесса для всехn
.Точки
(x,y)
с0 <= x <= 1
и так0 <= y <= 1
, что для всех натуральных чиселn
,n
th-й бит в двоичном разложении x и y не совпадает1
.Позволять
T = {(0,0),(1,0),(0,1)}
Позвольте
f
быть функцией на наборах 2D точек, определяемых следующим:f(X) = {(0,0)} ∪ {(x+t)/2 | x∈X, t∈T}
Тогда правый Серпинский треугольник является топологическим замыканием по меньшей мере , неподвижной точки (по заданной локализации) из
f
.Пусть
S
будет квадрат{(x,y) | 0<=x<=1 and 0<=y<=1}
Позвольте
g(X) = S ∩ {(x+t)/2 | x∈(X), t∈T}
(гдеT
, как определено выше)Тогда правый треугольник Серпинского является самой большой неподвижной точкой
g
.
Вызов
Напишите программу или функцию, которая принимает 4 целых числа a,b,c,d
и дает истинное значение, если (a/b,c/d)
принадлежит правому треугольнику Серпинского, а в противном случае дает ложное значение.
счет
Это код гольф. Самый короткий код в байтах побеждает.
Контрольные примеры
В правом треугольнике Серпинского:
0 1 0 1
0 1 12345 123456
27 100 73 100
1 7 2 7
8 9 2 21
8 15 20 63
-1 -7 2 7
Следующее не в правильном треугольнике Серпинского:
1 1 1 1
-1 100 1 3
1 3 1 3
1 23 1 7
4 63 3 66
58 217 4351 7577
-1 -7 3 7
-1 -3 1 1
действительным вход?