Определение
«Целочисленный треугольник» - это целочисленный треугольник. Например, следующий треугольник является целочисленным треугольником:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650.
задача
Цель этой задачи - подсчитать все целочисленные треугольники (с точностью до конгруэнтности) с периметром меньше n.
Вход и выход
Аргумент будет задан как целое число, а на выходе должно быть количество треугольников с периметром, строго меньшим, чем аргумент.
Примеры
Наименьший целочисленный треугольник по периметру совпадает с
(0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414
Следующие самые маленькие:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650,
(0, 0), (0, 2), (1, 1) with perimeter 2 + 2sqrt(2) ≈ 4.828,
(0, 0), (0, 2), (1, 0) with perimeter 3 + sqrt(5) ≈ 5.236, and
(0, 0), (1, 2), (2, 1) with perimeter sqrt(2) + 2sqrt(5) ≈ 5.886
Тестовые случаи:
a(1) = 0
a(2) = 0
a(3) = 0
a(4) = 1
a(5) = 3
a(6) = 5
a(7) = 11
a(8) = 18
a(9) = 29
a(10) = 44
a(12) = 94
a(20) = 738
a(30) = 3756
a(40) = 11875
У меня есть координаты для каждого из треугольников в этом Гисте .
Предупреждения
Обратите внимание, что два неконгруэнтных треугольника могут иметь одинаковый периметр:
(0, 0), (0, 3), (3, 0) and (0, 0), (0, 1), (3, 4) both have perimeter 6 + 3sqrt(2).
Также имейте в виду, что неравенство строго ; 3-4-5 пифагорейский треугольник следует считать как (13), а не (12).
счет
Это код-гольф - выигрывает самый короткий код!
источник
Ответы:
Желе ,
28272523 байтаПопробуйте онлайн!
Как это устроено
источник
Желе ,
3833 байта-1 благодаря Erik the Outgolfer (инвертировать
SP¬+÷/E$
с помощьюSẠ>÷/E$
и использовать,ÇÐf
а неÇÐḟ
) -1 благодаря Mr. Xcoder (нет необходимости выравнивать перед сортировкой)-2 благодаря Mr. Xcoder (
S<¥Ðf³L
->S€<³S
)-1 украл трюк у более ранний пересмотр ответа Денниса (
ṗ2’Œc
->p`⁺’
- более избыточные случаи, но игра в гольф!)Полная программа, принимающая целое число и печатающая результат.
Попробуйте онлайн! (слишком медленно, чтобы завершить контрольные примеры 20+ в возрасте до 60 лет)
Как?
источник
[(a+c)×(b+d)]
->(a+c)×(b+d)
,[c÷a,d÷b]
->[a÷c,b÷d]
,c÷a==d÷b
->a÷c==b÷d
," c÷a==d÷b
->" a÷c==b÷d
. Функция .nan
.SP¬
и фактически не злоупотребляет делением на ноль результатов (я думаю, что это может быть явно с фактическим или)¬+
на<
. (EDIT: вам не нужно заменитьP
сẠ
, как вы используете только неотрицательные координаты.)7
возвращает,21
например)JavaScript (ES7), 157 байт
Контрольные примеры
Только небольшие значения могут быть вычислены с размером стека по умолчанию большинства механизмов JS.
Показать фрагмент кода
Нерекурсивная версия, 165 байт
Контрольные примеры
Эта версия также работает для (30) и (40) , но это займет слишком много времени для фрагмента.
Показать фрагмент кода
источник
Юлия 0.6 , 135 байтов
Выполните итерацию по возможным точкам, не являющимся источником, чтобы составить треугольник, представить их как комплексные числа, отсортировать квадратные длины и сохранить их в наборе для проверки на соответствие. Избегайте коллинеарных точек, проверяя, что угол между их комплексными числами не равен нулю. Затем он возвращает длину набора. Короче использовать длины напрямую, но вы получите неправильный ответ
a(40)
. Решение слишком медленное, чтобы запустить егоa(40)
из-за предупреждения об устаревании, поэтому у меня есть ссылка и на более быструю версию.Попробуйте онлайн!
Более быстрая, более длинная версия с устаревшим избеганием. Попробуйте онлайн! Используется
sqrt.(g)
вместо устаревших√g
для поэлементного квадратного корня.источник
Чисто ,
227... 143 байтаПопробуйте онлайн!
Обнаруживает конгруэнтные треугольники, сравнивая три значения, которые составляют сумму периметра, и коллинеарные точки, проверяя, что два наименьших таких значения не суммируют с третьим.
Вот версия, которая использует более быстрый и более требовательный к памяти подход: попробуйте онлайн!
источник
Start = @ 12.0
я не получаю вывод, я делаю что-то не так?