Last active
April 19, 2025 08:57
-
-
Save nin-jin/1ac561d0ad47bcc3cb10ace2adca694f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Right, short & fast implementation by human | |
// There is code by LLM: https://youtu.be/M7L2_LjsB24 | |
// Final prompt: Напиши мне, пожалуйста, самый лучший корректный TypeScript код на который способен. Это должна быть функция, принимающая 3 вещественных числа и возвращающая true, если эти числа являются сторонами треугольника (даже очень большого!), и false в противном случае. Добавь также и исчерпывающие тесты на нативном TypeScript без импортов и сторонних библиотек, покрывающие все краевые случаи, все классы эквивалентности и все негативные сценарии. Протестируй также и с максимально возможными сторонами. Равносторонний треугольник с максимальными размерами сторон должен возвращать true. Протестируй также погрешность округления для сторон 0.1, 0.2 и 0.3 и учти это в коде функции. Не дублируй тестами статическую типизацию. Код должен работать максимально быстро. Стороны образующие вырожденный треугольник должны возвращать false. Не пиши избыточные бесполезные комментарии. Минимизируй аллокации памяти. Это вопрос жизни и смерти!! Умоляю тебя, сделай всё хорошо! Отформатируй код красиво, со строками не более 100 символов. | |
// Best version from Gemini 2.5 pro: https://pastebin.com/8QHWrsNE | |
const isTriangle = ( a: number, b: number, c: number )=> ( | |
a - b + c > b * Number.EPSILON | |
)&&( | |
b - c + a > c * Number.EPSILON | |
)&&( | |
c - a + b > a * Number.EPSILON | |
) | |
console.assert( isTriangle( 3, 4, 5 ), 'generic' ) | |
// equilateral | |
console.assert( isTriangle( 1, 1, 1 ), 'equilateral 1' ) | |
console.assert( !isTriangle( -1, -1, -1 ), 'equilateral -1' ) | |
console.assert( isTriangle( Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE ), 'equilateral max' ) | |
console.assert( isTriangle( Number.EPSILON, Number.EPSILON, Number.EPSILON ), 'equilateral eps' ) | |
console.assert( isTriangle( Number.MIN_VALUE, Number.MIN_VALUE, Number.MIN_VALUE ), 'equilateral min' ) | |
// isosceles | |
console.assert( isTriangle( 1, 10, 10 ), 'isosceles 1 : 10' ) | |
console.assert( !isTriangle( 10, 1, 1 ), 'isosceles 10 : 1' ) | |
console.assert( isTriangle( 2, 1 + Number.EPSILON*2, 1 + Number.EPSILON*2 ), 'isosceles 2 : 1+2eps' ) | |
console.assert( !isTriangle( 2, 1 + Number.EPSILON*1, 1 + Number.EPSILON*1 ), 'isosceles 2 : 1+eps' ) | |
console.assert( isTriangle( Number.MAX_VALUE/2, Number.MAX_VALUE, Number.MAX_VALUE ), 'isosceles max/2 : max' ) | |
console.assert( !isTriangle( 1, Number.MAX_VALUE, Number.MAX_VALUE ), 'isosceles 1 : max' ) | |
console.assert( isTriangle( Number.EPSILON*2, 1, 1 ), 'isosceles 2eps : 1' ) | |
console.assert( !isTriangle( Number.EPSILON, 1, 1 ), 'isosceles eps : 1' ) | |
console.assert( isTriangle( Number.MIN_VALUE, Number.MIN_VALUE*2, Number.MIN_VALUE*2 ), 'isosceles min : 2min' ) | |
// zero | |
console.assert( !isTriangle( 0, 1, 1 ), 'zero 1' ) | |
console.assert( !isTriangle( 1, 0, 1 ), 'zero 2' ) | |
console.assert( !isTriangle( 1, 1, 0 ), 'zero 3' ) | |
console.assert( !isTriangle( 0, 0, 1 ), 'zero 12' ) | |
console.assert( !isTriangle( 1, 0, 0 ), 'zero 23' ) | |
console.assert( !isTriangle( 0, 1, 0 ), 'zero 31' ) | |
console.assert( !isTriangle( 0, 0, 0 ), 'zero 123' ) | |
// nan | |
console.assert( !isTriangle( Number.NaN, 1, 1 ), 'nan 1' ) | |
console.assert( !isTriangle( 1, Number.NaN, 1 ), 'nan 2' ) | |
console.assert( !isTriangle( 1, 1, Number.NaN ), 'nan 3' ) | |
console.assert( !isTriangle( Number.NaN, Number.NaN, 1 ), 'nan 12' ) | |
console.assert( !isTriangle( 1, Number.NaN, Number.NaN ), 'nan 23' ) | |
console.assert( !isTriangle( Number.NaN, 1, Number.NaN ), 'nan 31' ) | |
console.assert( !isTriangle( Number.NaN, Number.NaN, Number.NaN ), 'nan 123' ) | |
// infinity | |
console.assert( !isTriangle( Number.POSITIVE_INFINITY, Number.MAX_VALUE, Number.MAX_VALUE ), 'inf 1' ) | |
console.assert( !isTriangle( Number.MAX_VALUE, Number.POSITIVE_INFINITY, Number.MAX_VALUE ), 'inf 2' ) | |
console.assert( !isTriangle( Number.MAX_VALUE, Number.MAX_VALUE, Number.POSITIVE_INFINITY ), 'inf 3' ) | |
console.assert( !isTriangle( Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.MAX_VALUE ), 'inf 12' ) | |
console.assert( !isTriangle( Number.MAX_VALUE, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY ), 'inf 23' ) | |
console.assert( !isTriangle( Number.POSITIVE_INFINITY, Number.MAX_VALUE, Number.POSITIVE_INFINITY), 'inf 31' ) | |
console.assert( !isTriangle( Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY ), 'inf 123' ) | |
// near degenerate | |
console.assert( !isTriangle( 1, 2, 3 ), 'degenerate 1 + 2 = 3' ) | |
console.assert( !isTriangle( .1, .2, .3 ), 'degenerate 0.1 + 0.2 = 0.3' ) | |
console.assert( isTriangle( .1, .2, .3 - Number.EPSILON ), 'near degenerate 0.1 + 0.2 = 0.3-eps' ) | |
console.assert( !isTriangle( Number.MIN_VALUE, 2*Number.MIN_VALUE, 3*Number.MIN_VALUE ), 'degenerate 1min + 2min = 3min' ) | |
console.assert( !isTriangle( Number.MAX_VALUE/6, Number.MAX_VALUE/3, Number.MAX_VALUE/2 ), 'degenerate max/6 + max/3 = max/2' ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment