chore(i18n,curriculum): processed translations - new ukrainian (#44447)
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
---
|
||||
id: 595b98f8b5a2245e243aa831
|
||||
title: Трикутники Герона
|
||||
challengeType: 5
|
||||
forumTopicId: 302285
|
||||
dashedName: heronian-triangles
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
[Формула Герона](https://en.wikipedia.org/wiki/Heron's formula "wp: Heron's formula") для площі трикутника з урахуванням довжини його трьох сторін `a` `b`, та `c` подається як:
|
||||
|
||||
$A = \\sqrt{s(s-a)(s-b)(s-c)},$
|
||||
|
||||
де `s` є половиною периметра трикутника; тобто
|
||||
|
||||
$s=\\frac{a+b+c}{2}
|
||||
|
||||
Трикутники Героніа — це трикутники, у яких усі сторони та площа є цілими числами.
|
||||
|
||||
Прикладом є трикутник зі сторонами `3, 4, 5`, площа якого дорівнює `6` (а периметр – `12`).
|
||||
|
||||
Зверніть увагу, що будь-який трикутник, усі сторони якого є цілим кратним `3, 4, 5`; такі, як `6, 8, 10,`, також буде трикутником Герона.
|
||||
|
||||
Визначте примітивний трикутник Герона як трикутник Герона, де найбільший спільний дільник
|
||||
|
||||
усіх трьох сторін дорівнює `1` (єдність).
|
||||
|
||||
Це виключає, наприклад, трикутник `6, 8, 10.`
|
||||
|
||||
# --instructions--
|
||||
|
||||
Реалізуйте функцію, засновану на формулі Герона, яка повертає перші <code>n<sub>th</sub></code> впорядковані трикутники у масиві масивів.
|
||||
|
||||
# --hints--
|
||||
|
||||
`heronianTriangle` має бути функцією.
|
||||
|
||||
```js
|
||||
assert(typeof heronianTriangle === 'function');
|
||||
```
|
||||
|
||||
`heronianTriangle(10)` має повернути `[[3, 4, 5], [5, 5, 6], [5, 5, 8], [4, 13, 15], [5, 12, 13], [9, 10, 17], [3, 25, 26], [7, 15, 20], [10, 13, 13], [8, 15, 17]]`
|
||||
|
||||
```js
|
||||
assert.deepEqual(heronianTriangle(testCases[0]), res[0]);
|
||||
```
|
||||
|
||||
`heronianTriangle(15)` має повернути `[[3, 4, 5], [5, 5, 6], [5, 5, 8], [4, 13, 15], [5, 12, 13], [9, 10, 17], [3, 25, 26], [7, 15, 20], [10, 13, 13], [8, 15, 17], [13, 13, 24], [6, 25, 29], [11, 13, 20], [5, 29, 30], [13, 14, 15]],`
|
||||
|
||||
```js
|
||||
assert.deepEqual(heronianTriangle(testCases[1]), res[1]);
|
||||
```
|
||||
|
||||
`heronianTriangle(20)` має повернути `[[3, 4, 5], [5, 5, 6], [5, 5, 8], [4, 13, 15], [5, 12, 13], [9, 10, 17], [3, 25, 26], [7, 15, 20], [10, 13, 13], [8, 15, 17], [13, 13, 24], [6, 25, 29], [11, 13, 20], [5, 29, 30], [13, 14, 15], [10, 17, 21], [7, 24, 25], [8, 29, 35], [12, 17, 25], [4, 51, 53]],`
|
||||
|
||||
```js
|
||||
assert.deepEqual(heronianTriangle(testCases[2]), res[2]);
|
||||
```
|
||||
|
||||
`heronianTriangle(25)` має повернути `[[3, 4, 5], [5, 5, 6], [5, 5, 8], [4, 13, 15], [5, 12, 13], [9, 10, 17], [3, 25, 26], [7, 15, 20], [10, 13, 13], [8, 15, 17], [13, 13, 24], [6, 25, 29], [11, 13, 20], [5, 29, 30], [13, 14, 15], [10, 17, 21], [7, 24, 25], [8, 29, 35], [12, 17, 25], [4, 51, 53], [19, 20, 37],[16, 17, 17], [17, 17, 30], [16, 25, 39], [13, 20, 21]]`
|
||||
|
||||
```js
|
||||
assert.deepEqual(heronianTriangle(testCases[3]), res[3]);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --after-user-code--
|
||||
|
||||
```js
|
||||
const testCases = [10, 15, 20, 25];
|
||||
|
||||
const res = [
|
||||
[[3, 4, 5], [5, 5, 6], [5, 5, 8], [4, 13, 15], [5, 12, 13], [9, 10, 17], [3, 25, 26], [7, 15, 20], [10, 13, 13], [8, 15, 17]],
|
||||
[[3, 4, 5], [5, 5, 6], [5, 5, 8], [4, 13, 15], [5, 12, 13], [9, 10, 17], [3, 25, 26], [7, 15, 20], [10, 13, 13], [8, 15, 17], [13, 13, 24], [6, 25, 29], [11, 13, 20], [5, 29, 30], [13, 14, 15]],
|
||||
[[3, 4, 5], [5, 5, 6], [5, 5, 8], [4, 13, 15], [5, 12, 13], [9, 10, 17], [3, 25, 26], [7, 15, 20], [10, 13, 13], [8, 15, 17], [13, 13, 24], [6, 25, 29], [11, 13, 20], [5, 29, 30], [13, 14, 15], [10, 17, 21], [7, 24, 25], [8, 29, 35], [12, 17, 25], [4, 51, 53]],
|
||||
[[3, 4, 5], [5, 5, 6], [5, 5, 8], [4, 13, 15], [5, 12, 13], [9, 10, 17], [3, 25, 26], [7, 15, 20], [10, 13, 13], [8, 15, 17], [13, 13, 24], [6, 25, 29], [11, 13, 20], [5, 29, 30], [13, 14, 15], [10, 17, 21], [7, 24, 25], [8, 29, 35], [12, 17, 25], [4, 51, 53], [19, 20, 37], [16, 17, 17], [17, 17, 30], [16, 25, 39], [13, 20, 21]]
|
||||
];
|
||||
```
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function heronianTriangle(n) {
|
||||
|
||||
|
||||
return [];
|
||||
}
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function heronianTriangle(n) {
|
||||
const list = [];
|
||||
const result = [];
|
||||
|
||||
let j = 0;
|
||||
for (let c = 1; c <= 200; c++) {
|
||||
for (let b = 1; b <= c; b++) {
|
||||
for (let a = 1; a <= b; a++) {
|
||||
if (gcd(gcd(a, b), c) === 1 && isHeron(heronArea(a, b, c))) {
|
||||
list[j++] = new Array(a, b, c, heronArea(a, b, c));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sort(list);
|
||||
|
||||
for (let i = 0; i < n; i++) {
|
||||
result[i] = [list[i][0], list[i][1], list[i][2]];
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
function heronArea(a, b, c) {
|
||||
const s = (a + b + c) / 2;
|
||||
return Math.sqrt(s * (s - a) * (s - b) * (s - c));
|
||||
}
|
||||
|
||||
function isHeron(h) { return h % 1 === 0 && h > 0; }
|
||||
|
||||
function gcd(a, b) {
|
||||
let leftover = 1;
|
||||
let dividend = a > b ? a : b;
|
||||
let divisor = a > b ? b : a;
|
||||
while (leftover !== 0) {
|
||||
leftover = dividend % divisor;
|
||||
if (leftover > 0) {
|
||||
dividend = divisor;
|
||||
divisor = leftover;
|
||||
}
|
||||
}
|
||||
return divisor;
|
||||
}
|
||||
|
||||
function sort(arg) {
|
||||
let swapped = true;
|
||||
let temp = [];
|
||||
while (swapped) {
|
||||
swapped = false;
|
||||
for (let i = 1; i < arg.length; i++) {
|
||||
if (arg[i][4] < arg[i - 1][4] || arg[i][4] === arg[i - 1][4] && arg[i][3] < arg[i - 1][3]) {
|
||||
temp = arg[i];
|
||||
arg[i] = arg[i - 1];
|
||||
arg[i - 1] = temp;
|
||||
swapped = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user