Пифагор получил удар по ноге на войне. Его нужно было ампутировать, и хотя он чуть не умер, он вырвался и полностью выздоровел. Теперь, после года прогулок на костылях, он получает привилегию получить протез ноги! Дело в том, что есть несколько подходящих, но какие?
Задание
Если в качестве входных данных задано положительное целое число, равное длине одной ветви пифагорейской тройки, выведите все возможности для другой ветви. Например, наименьшая пифагорейская тройка - это (3,4,5), которая образует треугольник с двумя ножками длиной 3 и 4 и гипотенузой длиной 5.
Примеры
Leg:5
12
Leg:28
21
45
96
195
Leg:101
5100
Leg:1001
168
468
660
2880
3432
4080
5460
6468
10200
38532
45540
71568
501000
Правила
- На входе будет одно положительное целое число
n
. - Вывод может быть в любом порядке, с любым разделителем, в любой базе (хотя эта база должна быть согласованной), с необязательными открывающими и закрывающими скобками и необязательными конечными пробелами. То есть
1 2 3
,[1,2,3]
и1,11,111
все подходят этот выходной спецификации. - Вы можете предположить, что
n
никогда не будет больше четверти четвертого корня ограничения вашего языка (без использования библиотек). На практике вы можете предположить, что ввод будет меньше, чем это или 10 000, в зависимости от того, что меньше.
Пифагор ждет вас, так что лучше пишите свой код быстро и коротко!
Ответы:
Pyth - 13 байт
Грубые силы до всех возможных
n^2+1
.Тестовый пакет .
источник
Желе , 8 байт
Этот ответ не является конкурирующим, поскольку в нем используются функции, которые были реализованы после публикации заявки. Попробуйте онлайн!
Этот подход не использует математические операции с плавающей запятой, поэтому он даст правильный ответ, если промежуточные списки могут поместиться в памяти.
идея
Если (a, b, c) является тройкой Пифагора, то существуют строго положительные целые числа k, m, n, такие что выполняется равенство множеств {a, b} = {km 2 - kn 2 , 2kmn} .
В частности, это означает, что a <b 2 и b <a 2 , поэтому для ввода a мы можем просто проверить, является ли a 2 + b 2 идеальным квадратом для каждого b в {1,… a 2 } .
Код
источник
Юлия, 35 байт
Это анонимная функция, которая принимает целое число и возвращает массив.
Для каждого
i
от 1 до входного квадрата мы вычисляем гипотенузу, используя встроеннуюhypot
функцию Джулии , и определяем, равна ли дробная часть 0. Если это так, мы сохраняем ее, в противном случае она исключается.источник
CJam, 17 байт
Это анонимная функция, которая извлекает целое число из стека и оставляет массив в ответ.
Попробуйте онлайн!
идея
Если (a, b, c) является тройкой Пифагора, то существуют строго положительные целые числа k, m, n, такие что множество равенств {a, b} = {км 2 - kn 2 , 2kmn} .
В частности, это означает, что a <b 2 и b <a 2 , поэтому для ввода a мы можем просто проверить, является ли a 2 + b 2 идеальным квадратом для каждого b в {1,… a2 } .
Код
источник
JavaScript ES6, 60
62То же, что и другие ответы, проверка от 1 до * a-1
Спасибо @ Mwr247 самый короткий способ построить диапазон в ES6
2 байта сохранены thx @ETHproductions
источник
a=>[...Array(a*a).keys()].filter(b=>b&&!(Math.hypot(a,b)%1))
C 96 байтов
Поочередно увеличивайте
y
(другую ногу) иz
(гипотенузу), пока их разность не упадет до 1. Выведите каждое точное совпадение (c==0
), которое вы встретите на пути.Вызовите скомпилированную программу с параметром n ; он выведет разделенный пробелами список десятичных чисел.
Очевидно, не самый короткий; Я могу найти утешение в том, чтобы иметь самый быстрый.
источник
Wolfram Language (Mathematica) , 40 байт
Я использую недокументированную форму
Solve
: когда список переменных опущен, то поSolve
умолчанию используется решение для всех символов в выражении. Таким образом, мы экономим 6 байтов по сравнению с более регулярнымиSolve[#^2+b^2==c^2,{b,c},PositiveIntegers]
.PositiveIntegers
является новым в версии 12 Mathematica и, следовательно, недоступен в TIO . В настольном Mathematica, мы получаемисточник
Python 2, 53 байта
Простое решение, использующее комплекс
abs
для вычисления длины гипотенузы. Это безопасно использоватьn*n
в качестве верхней границы для другой ноги, потому что(n*n)^2 + n^2 < (n*n+1)^2
. Вместо этого я попытался использовать рекурсию, но не получил ничего более короткого.источник
Серьезно, 20 байтов
Та же стратегия, что и в ответе Python от xnor: проверьте
i in range(1,n*n)
значения whereabs(i+nj) % 1 == 0
и выведите список.Попробуйте онлайнОбъяснение:
источник
PARI / GP, 36 байт
источник
APL (NARS), 373 символа, 746 байтов
комментарий:
Идея заключалась бы в том, чтобы учесть входные данные для того, чтобы узнать возможные m, n, которые генерируют, используя t всю тройку Пифагора, которая имеет вход в качестве ноги. Тест:
источник
APL (Dyalog Extended) ,
1514 байтов SBCSФункция анонимного молчаливого префикса.
Попробуйте онлайн!
×⍨
квадрат (лит. умножение селфи) аргумент(
…)
Применить следующую анонимную молчаливую функцию:⍳
tentegers 1 через аргумент⍳
умножить на tentegers 1 через аргумент (т.е. квадрат)⊢(
…)
Применить следующую анонимную молчаливую функцию с аргументом в качестве левого аргумента:+
это сумма∊
членом⊢
Это?⍸
nd ндс истиныисточник
Perl 5, 43 байта
Если вы хотите , чтобы скрипт для завершения, мы можем инспектировать другие ноги до N² только как объяснено на XNOR , поэтому у нас есть 48 байт:
источник
Japt , 16 байт
Попробуйте онлайн!
Как это работает
источник
Stax , 8 байт
Запустите и отладьте его
В псевдокоде:
источник
05AB1E , 10 байтов
Попробуйте онлайн или проверьте все контрольные примеры .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
MathGolf , 9 байт
Попробуйте онлайн!
Не удалось найти хороший способ удалить любую из
²
s, которые занимают 3/9 байтов. В противном случае это довольно простообъяснение
источник
Java 8, 72 байта
Попробуйте онлайн.
Объяснение:
источник