Целое положительное число x представляет собой квадратное треугольное число, если есть два разных положительных целых числа y и z , которые меньше x , так что все суммы
х + у
х + з
y + z
идеальные квадраты.
Например, 30 является квадратным числом треугольника, потому что
30 + 6 = 6 2
30 + 19 = 7 2
6 + 19 = 5 2
Ваша задача - написать некоторый код, который принимает положительное целое число в качестве входных данных и определяет, является ли это квадратным числом треугольника. Вы должны вывести одно из двух различных значений: одно, если вход представляет собой число в виде квадратного треугольника, а другое - в противном случае.
Это код-гольф, поэтому ответы будут оцениваться в байтах, причем меньшее количество байтов будет лучше.
Testcases
Вот все квадратные цифры треугольника до 1000
30,44,47,48,60,66,69,70,78,86,90,92,94,95,96,98,108,113,116,118,120,122,124,125,126,132,138,142,147,150,152,154,156,157,158,159,160,165,170,176,180,182,185,186,188,190,192,194,195,196,197,198,200,207,212,214,216,218,221,222,224,227,230,232,234,236,237,238,239,240,246,248,253,258,260,264,266,267,268,270,273,274,275,276,278,280,281,282,283,284,285,286,290,296,298,302,303,306,308,310,312,314,317,318,320,322,323,324,326,328,329,330,331,332,333,334,335,336,338,340,344,347,350,351,352,356,357,360,362,364,368,370,371,372,374,376,377,378,380,382,384,385,386,387,388,389,390,392,394,396,402,405,408,410,413,414,415,418,420,422,423,424,426,429,430,432,434,435,436,438,440,442,443,444,445,446,447,448,449,452,456,458,462,464,466,467,468,470,472,476,477,479,480,482,484,485,488,490,491,492,494,496,497,498,500,501,502,503,504,505,506,507,508,509,510,512,515,516,518,522,523,524,527,528,530,533,536,538,540,542,543,546,548,549,550,551,552,554,557,558,560,562,563,564,566,568,569,570,571,572,573,574,575,576,578,579,582,585,588,590,592,593,594,598,600,602,603,604,605,606,608,610,612,613,614,615,616,618,620,621,623,624,626,627,628,630,632,633,634,636,638,639,640,641,642,643,644,645,646,650,652,656,657,658,659,660,662,666,667,668,670,672,674,677,678,680,682,683,686,687,689,690,692,694,695,696,698,700,701,702,704,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,722,723,726,728,730,734,737,739,740,742,744,745,746,750,752,755,756,758,760,762,764,765,767,768,770,772,773,774,776,778,779,780,782,783,784,785,786,788,789,790,791,792,793,794,795,796,797,798,800,802,803,804,805,810,812,814,816,817,818,819,820,822,825,826,827,828,829,830,832,833,834,836,837,838,840,842,846,847,848,849,850,851,852,854,855,856,858,860,861,862,863,864,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,882,884,888,890,891,893,896,897,898,902,903,904,905,908,912,913,914,915,916,918,920,923,924,926,927,928,929,931,932,933,935,936,938,940,941,942,944,946,947,948,950,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,970,972,974,976,978,980,981,984,986,987,988,992,993,995,996,998
источник
y < x
иz < x
или чтоy+z < x
?Ответы:
Haskell , 62 байта
Попробуйте онлайн!
источник
Желе , 12 байт
Попробуйте онлайн!
Как это работает
источник
Python 2 ,
938786 байт-1 байт благодаря Деннису
Попробуйте онлайн!
источник
Брахилог , 19 байт
Попробуйте онлайн!
Также 19 байтов:
~hṪ>₁ℕ₁ᵐ≜{⊇Ċ+}ᶠ~^₂ᵐ
объяснение
источник
PowerShell , 150 байт
Попробуйте онлайн! или проверить несколько тестов
Принимает участие
$x
. Учреждаетfilter
(здесь эквивалентна функции) на два входа$a,$b
, который возвращает логическое истинное тогда и только тогда[math]::sqrt
из$a+$b
IS-eq
UAL кFloor
этому квадратному корню (т.е., это целый квадратный корень).В остальном это мясо программы. Мы дважды цикл вверх от
1
до$x-1
. На каждой итерации мы проверяем,$y
является ли-n
условиеe
квалифицированным$_
(т. Е. $ Z), и является ли функция истинной для всех комбинаций$x
,$y
и$_
. Если это так,$o
увеличивается на единицу (что делает его ненулевым).Наконец, в конце мы получаем двойное булево-отрицательное
$o
, которое превращается0
вFalse
ненулевое и превращается вTrue
. Это осталось на конвейере и вывод неявный.источник
Haskell ,
7569 байтовПопробуйте онлайн!
Возможно, это можно улучшить, если кто-то знает более короткий способ проверить, является ли число квадратным. Я уверен, что использование в
sqrt
конечном итоге дольше, потому чтоfloor
превращает результат в интегральный тип, так что вам нужно вставитьfromIntegral
куда-нибудь, прежде чем вы сможете сравнить с оригиналом.РЕДАКТИРОВАТЬ: Спасибо @Wheat Wizard за удаление 6 байтов!
источник
JavaScript (ES7),
7571 байтисточник
05AB1E , 18 байт
Попробуйте онлайн!
Спасибо Emigna за
-3-1 байти исправление!источник
€
-е, поскольку обаn
иO
векторизуются. Это также не работает, так как последние 2 байта будут возвращать true для любого списка с хотя бы 1 значением, даже если он содержит только ложные значения. Это можно исправить (и сократить), используяZ
вместо этого.€O
и именно поэтому предыдущий подход сделал работу с`º
)45
, что должно возвращать false.R , 79 байт
Попробуйте онлайн!
вычисляет все значения
y,z
сy<-(z=s-x)[z>0&z<x]
, затем вычисляет все их суммы сouter(y,y,"+")
. Это дает квадратную матрицу, где недиагональные элементы являются потенциально квадратными, какy==z
если бы они находились на диагонали. Следовательно,diag(S)=0
устанавливает диагонали до нуля, которые не являются полными квадратами, и мы тест , чтобы увидеть , еслиany
элементS
находится%in%s
.источник
SWI-Пролог , 88 байт
Попробуйте онлайн!
g(X)
это правило, которое принимает целое число в качестве параметра и выводит, является ли оно квадратным числом треугольника (true / false).источник
JavaScript (ES7), 72 байта
Возвращает
0
или1
.демонстрация
Показать фрагмент кода
источник
C 113 байтов
Возвращает,
0
если число является квадратным треугольником, в1
противном случае.Попробуйте онлайн!
источник
return(int)sqrt(n)==sqrt(n)
это анализируетсяreturn((int)sqrt(n))==sqrt(n)
в отличие от более очевидногоreturn(int)(sqrt(n)==sqrt(n))
? Если нет, можете ли вы объяснить, чтоp
делает?==
, поэтому выражение анализируется так,((int)sqrt(n))==sqrt(n)
как вы уже догадались.APL (Dyalog) , 49 байтов
Попробуйте онлайн!
источник
Желе , 15 байт
Попробуйте онлайн!
Как?
источник
Чисто ,
958886 байтПопробуйте онлайн!
источник
Рубин , 73 байта
Попробуйте онлайн!
источник
Юлия 0.6 , 61 байт
Начните читать из функции
all
. Первый аргумент - это анонимная функция, проверяющая, что квадратный корень числа является целым числом, это применяется к каждому значению во втором аргументе. Единственным аргументом дляany
является aGenerator
с двумя циклами for, который для каждой итерации содержит выходные данныеall
функции.Спасибо мистеру Xcoder за -2 байта.
Попробуйте онлайн!
источник
Пыть , 63 байта
Проверяет все возможные комбинации y, z, такие что 1≤z <y <x
Возвращает 1, если x - квадратное число треугольника, 0 в противном случае
Попробуйте онлайн!
источник
MATL ,
201918 байтПопробуйте онлайн! Возвращает 1 для фальси, 0 для правдивых.
Тестовые случаи до 500: попробуйте онлайн! (используя
H
вместоG
). Время выполнения является квадратичным по размеру входных данных, поэтому перечисление тестовых наборов от1
доn
запускаетсяO(n^3)
, поэтому на TIO все тестовые случаи перечисляются до 1000 раз.Удаление
q
генерирует последовательность с желаемой последовательностью в качестве подмножества, но без ограничения, котороеy
иz
будет строго меньше, чемx
. Примером может служитьx=18
,y=7
,z=18
.источник
APL NARS, 340 байт
тест
источник