chore(i18n,curriculum): processed translations - new ukrainian (#44447)
This commit is contained in:
@ -0,0 +1,73 @@
|
||||
---
|
||||
id: 5900f36e1000cf542c50fe80
|
||||
title: 'Завдання 1: Числа кратні 3 та 5'
|
||||
challengeType: 5
|
||||
forumTopicId: 301722
|
||||
dashedName: problem-1-multiples-of-3-and-5
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Якщо ми запишемо усі натуральні числа до 10, кратні числам 3 та 5, то отримаємо 3, 5, 6 та 9. Сума цих кратних — 23.
|
||||
|
||||
Знайдіть суму всіх чисел кратних 3 та 5, які менші певного заданого значення: `number`.
|
||||
|
||||
# --hints--
|
||||
|
||||
`multiplesOf3and5(10)` має повертати число.
|
||||
|
||||
```js
|
||||
assert(typeof multiplesOf3and5(10) === 'number');
|
||||
```
|
||||
|
||||
`multiplesOf3and5(49)` має повертати 543.
|
||||
|
||||
```js
|
||||
assert.strictEqual(multiplesOf3and5(49), 543);
|
||||
```
|
||||
|
||||
`multiplesOf3and5(1000)` має повернути 233168.
|
||||
|
||||
```js
|
||||
assert.strictEqual(multiplesOf3and5(1000), 233168);
|
||||
```
|
||||
|
||||
`multiplesOf3and5(8456)` має повертати 16687353.
|
||||
|
||||
```js
|
||||
assert.strictEqual(multiplesOf3and5(8456), 16687353);
|
||||
```
|
||||
|
||||
`multiplesOf3and5(19564)` має повертати 89301183.
|
||||
|
||||
```js
|
||||
assert.strictEqual(multiplesOf3and5(19564), 89301183);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function multiplesOf3and5(number) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
multiplesOf3and5(1000);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
const multiplesOf3and5 = (number) => {
|
||||
var total = 0;
|
||||
|
||||
for(var i = 0; i < number; i++) {
|
||||
if(i % 3 == 0 || i % 5 == 0) {
|
||||
total += i;
|
||||
}
|
||||
}
|
||||
return total;
|
||||
};
|
||||
```
|
@ -0,0 +1,81 @@
|
||||
---
|
||||
id: 5900f3761000cf542c50fe89
|
||||
title: 'Завдання 10: Сума простих чисел'
|
||||
challengeType: 5
|
||||
forumTopicId: 301723
|
||||
dashedName: problem-10-summation-of-primes
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Сума простих чисел, які менші 10 буде 2 + 3 + 5 + 7 = 17.
|
||||
|
||||
Знайдіть суму всіх простих чисел, які менші `n`.
|
||||
|
||||
# --hints--
|
||||
|
||||
`primeSummation(17)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof primeSummation(17) === 'number');
|
||||
```
|
||||
|
||||
`primeSummation(17)` має повернути 41.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primeSummation(17), 41);
|
||||
```
|
||||
|
||||
`primeSummation(2001)` має повернути 277050.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primeSummation(2001), 277050);
|
||||
```
|
||||
|
||||
`primeSummation(140759)` має повернути 873608362.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primeSummation(140759), 873608362);
|
||||
```
|
||||
|
||||
`primeSummation(2000000)` має повернути 142913828922.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primeSummation(2000000), 142913828922);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function primeSummation(n) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
primeSummation(2000000);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function primeSummation(n) {
|
||||
if (n < 3) { return 0 };
|
||||
let nums = [0, 0, 2];
|
||||
for (let i = 3; i < n; i += 2){
|
||||
nums.push(i);
|
||||
nums.push(0);
|
||||
}
|
||||
let sum = 2;
|
||||
for (let i = 3; i < n; i += 2){
|
||||
if (nums[i] !== 0){
|
||||
sum += nums[i];
|
||||
for (let j = i*i; j < n; j += i){
|
||||
nums[j] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
```
|
@ -0,0 +1,87 @@
|
||||
---
|
||||
id: 5900f3d01000cf542c50fee3
|
||||
title: 'Завдання 100: Ймовірні комбінації'
|
||||
challengeType: 5
|
||||
forumTopicId: 301724
|
||||
dashedName: problem-100-arranged-probability
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Припустимо, що в коробці є двадцять один кольоровий диск, з яких п’ятнадцять - синього кольору, а шість - червоного; два диски обрали навмання, тож, є ймовірність, що обрали одразу два синіх диски.
|
||||
|
||||
$${P(BB)} = \frac{15}{21}×\frac{14}{20} = \frac{1}{2}$$
|
||||
|
||||
Наступний варіант розміщення дисків, за якого вірогідність взяти навмання два синіх диски становить 50%, це коли у коробці є вісімдесят п’ять синіх і тридцять п’ять червоних дисків.
|
||||
|
||||
Визначте ймовірну кількість синіх дисків у коробці, якщо у першому варіанті загальна кількість становить більше `limit` дисків.
|
||||
|
||||
# --hints--
|
||||
|
||||
`arrangedProbability(20)` дорівнює числу.
|
||||
|
||||
```js
|
||||
assert(typeof arrangedProbability(10) === 'number');
|
||||
```
|
||||
|
||||
`arrangedProbability(20)` має повернути `15`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(arrangedProbability(20), 15);
|
||||
```
|
||||
|
||||
`arrangedProbability(100)` має повернути `85`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(arrangedProbability(100), 85);
|
||||
```
|
||||
|
||||
`arrangedProbability(100000)` має повернути `97513`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(arrangedProbability(100000), 97513);
|
||||
```
|
||||
|
||||
`arrangedProbability(1000000000)` має повернути `3822685023`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(arrangedProbability(1000000000), 3822685023);
|
||||
```
|
||||
|
||||
`arrangedProbability(1000000000000)` має повернути `756872327473`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(arrangedProbability(1000000000000), 756872327473);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function arrangedProbability(limit) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
arrangedProbability(20);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function arrangedProbability(limit) {
|
||||
// Based on https://www.mathblog.dk/project-euler-100-blue-discs-two-blue/
|
||||
let blue = 15;
|
||||
let discs = 21;
|
||||
|
||||
while (discs < limit) {
|
||||
const nextBlue = 3 * blue + 2 * discs - 2;
|
||||
const nextDiscs = 4 * blue + 3 * discs - 3;
|
||||
|
||||
blue = nextBlue;
|
||||
discs = nextDiscs;
|
||||
}
|
||||
return blue;
|
||||
}
|
||||
```
|
@ -0,0 +1,56 @@
|
||||
---
|
||||
id: 5900f3d21000cf542c50fee4
|
||||
title: 'Завдання 101: Оптимальний многочлен'
|
||||
challengeType: 5
|
||||
forumTopicId: 301725
|
||||
dashedName: problem-101-optimum-polynomial
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Якщо нам представлені перші k членів послідовності, неможливо з упевненістю назвати значення наступного члена, оскільки існує нескінченно багато поліноміальних функцій, які можуть моделювати послідовність.
|
||||
|
||||
Як приклад, розгляньмо послідовність кубів чисел. Вона визначається твірною функцією, $u_n = n^3: 1, 8, 27, 64, 125, 216, \ldots$
|
||||
|
||||
Припустимо, що нам відомі лише перші два члена цієї послідовності. Керуючись принципом "чим простіше – тим краще", припустимо лінійну залежність та передбачимо, що значення наступного члена дорівнює 15 (різниця арифметичної прогресії дорівнює 7). Навіть, якщо б нам були відомі перші три члени, згідно з тим самим принципом "простоти", слід припустити квадратичну залежність.
|
||||
|
||||
Визначимо $OP(k, n)$ як член $n^{th}$ оптимальний многочлен твірної функції для перших k членів послідовності. Треба чітко розуміти, що $OP(k, n)$ буде точно генерувати члени послідовності для $n ≤ k$, тоді, потенційно, першим неправильним членом (FIT) (з англ. – First incorrect term) буде $OP(k, k+1)$; у цьому випадку назвемо його поганим оптимальним многочленом (BOP) (від англ.– Bad optimum polynomial).
|
||||
|
||||
За основу візьмемо випадок коли відомо лише перший член послідовності, тоді раціональніше було б припустити постійність, тобто для $n ≥ 2, OP(1, n) = u_1$.
|
||||
|
||||
Звідси отримуємо такі оптимальні многочлени для кубічної послідовності:
|
||||
|
||||
$$\begin{array}{ll} OP(1, n) = 1 & 1, {\color{red}1}, 1, 1, \ldots \\\\ OP(2, n) = 7n−6 & 1, 8, {\color{red}{15}}, \ldots \\\\ OP(3, n) = 6n^2−11n+6 & 1, 8, 27, {\color{red}{58}}, \ldots \\\\ OP(4, n) = n^3 & 1, 8, 27, 64, 125, \ldots \end{array}$$
|
||||
|
||||
Очевидно, не існує BOP для k ≥ 4. Враховуючи суму перших неправильних членів, створених поганими оптимальними многочленами (зазначені у $\color{red}{red}$ вище), отримуємо 1 + 15 + 58 = 74. Розгляньмо твірну функцію для многочлена десятого степеня:
|
||||
|
||||
$$u_n = 1 − n + n^2 − n^3 + n^4 − n^5 + n^6 − n^7 + n^8 − n^9 + n^{10}$$
|
||||
|
||||
Знайдіть суму перших неправильних членів (FIT) для поганих оптимальних многочленів (BOP).
|
||||
|
||||
# --hints--
|
||||
|
||||
`optimumPolynomial()` має повертати `37076114526`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(optimumPolynomial(), 37076114526);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function optimumPolynomial() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
optimumPolynomial();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,53 @@
|
||||
---
|
||||
id: 5900f3d61000cf542c50fee7
|
||||
title: 'Завдання 103: Особливі суми підмножини: оптимізація'
|
||||
challengeType: 5
|
||||
forumTopicId: 301727
|
||||
dashedName: problem-103-special-subset-sums-optimum
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай $S(A)$ показує суму елементів у наборі A з розміром набору n. Назвемо це особливим набором сум, якщо для будь-яких двох не порожніх неперетинних підмножин В і С, виконуються умови:
|
||||
|
||||
1. $S(B) ≠ S(C)$; тобто суми підмножин не можуть бути рівними.
|
||||
2. Якщо В містить більше елементів ніж C, тоді $S(B) > S(C)$.
|
||||
|
||||
Якщо $S(A)$ обмежене даним n, назвемо його оптимальним набором особливих сум. Перші п'ять оптимальних особливих сум наведені нижче.
|
||||
|
||||
$\begin{align} & n = 1: \\{1\\} \\\\ & n = 2: \\{1, 2\\} \\ & n = 3: \\{2, 3, 3, 4\\} \\\\ & n = 4: \\{3, 5, 6, 7\\} \\\\ & n = 5: \\{6, 9, 11, 12, 13\\} \\\\ \end{align}$$
|
||||
|
||||
Здається, що для даного оптимального набору $A = \\{a_1, a_2, \ldots, a_n\\}$, наступний оптимальний набір у вигляді $B = \\{b, a_1 + b, a_2 + b, \ldots, a_n + b\\}$, де b - середній елемент з попереднього рядка.
|
||||
|
||||
Застосувавши цю "умову", очікуємо такий оптимальний набір для $n = 6$ буде $A = \\{11, 17, 20, 22, 23, 24\\}$, з $S(А) = 117$. Однак, це не набір оптимальних множин, оскільки ми просто застосували алгоритм для забезпечення майже оптимального набору. Для $n = 6$ оптимальний набір - $A = \\{11, 18, 19, 20, 22, 25\\}$, з $S(A) = 115$ та відповідний рядок у наборі: `111819202225`.
|
||||
|
||||
Якщо відомо, що А є оптимальною спеціальною сумою, заданою для $n = 7$, знайдіть її в рядку.
|
||||
|
||||
**Примітка:** Це завдання пов'язане із завданнями 105 та 106.
|
||||
|
||||
# --hints--
|
||||
|
||||
`optimumSpecialSumSet()` повинен повернути рядок `20313839404245`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(optimumSpecialSumSet(), '20313839404245');
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function optimumSpecialSumSet() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
optimumSpecialSumSet();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3d51000cf542c50fee6
|
||||
title: 'Завдання 104: Пан-цифрові кінці чисел Фібоначчі'
|
||||
challengeType: 5
|
||||
forumTopicId: 301728
|
||||
dashedName: problem-104-pandigital-fibonacci-ends
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Послідовність Фібоначчі визначається таким рекурентним співвідношенням:
|
||||
|
||||
$F_n = F_{n − 1} + F_{n − 2}$, де $F_1 = 1$ та $F_2 = 1$
|
||||
|
||||
Виявляється, що число $F_{541}$, що складається з 113 цифр, є першим числом Фібоначчі, у якого останні дев'ять цифр утворюють панцифрове число з цифрами 1 - 9 (воно містить всі цифри від 1 до 9, але не обов'язково в порядку зростання). А число $F_{2749}$, що складається з 575 цифр, є першим числом Фібоначчі, у якого перші дев'ять цифр утворюють панцифрове число з цифрами від 1 до 9.
|
||||
|
||||
Відомо, що число $F_k$ є першим числом Фібоначчі, у якого як перші, ТАК і останні дев'ять цифр утворюють пан-цифрові числа з цифрами 1-9, знайдіть `k`.
|
||||
|
||||
# --hints--
|
||||
|
||||
`pandigitalFibonacciEnds()` має повернути `329468`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(pandigitalFibonacciEnds(), 329468);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function pandigitalFibonacciEnds() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
pandigitalFibonacciEnds();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,59 @@
|
||||
---
|
||||
id: 5900f3d61000cf542c50fee8
|
||||
title: 'Завдання 105: Особливі підмножини суми: тестування'
|
||||
challengeType: 5
|
||||
forumTopicId: 301729
|
||||
dashedName: problem-105-special-subset-sums-testing
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай $S(A)$ показує суму елементів у множині A розміру n. Будемо називати це спеціальним набором сум, якщо для будь-яких двох непустих неперетинних підмножин, В і С, такі властивості правдиві:
|
||||
|
||||
1. $S(B) ≠ S(C)$; тобто суми підмножин не можуть бути рівними.
|
||||
2. Якщо B містить більше елементів ніж C, тоді $S(B) > S(C)$.
|
||||
|
||||
Наприклад, {81, 88, 75, 87, 84, 86, 65} не є набором спеціальних сум, тому що 65 + 87 + 88 = 75 + 84, тоді як {157, 150, 164, 119, 79, 159, 169, 139, 158} відповідає обом правилам для всіх можливих комбінацій підмножин і $S(A) = 1286$.
|
||||
|
||||
Використовуючи `sets`, масив з однією сотнею наборів, який містить від семи до дванадцяти елементів (два подані вище приклади є першими двома наборами), визначте всі набори спеціальних сум, $A_1, A_2, \ldots, A_k$, та знайдіть значення $(A_1) + S(A_2) + \cdots + S(A_k)$.
|
||||
|
||||
**Note:** Це завдання пов'язане зі Завданням 103 та Завданням 106.
|
||||
|
||||
# --hints--
|
||||
|
||||
`testingSpecialSubsetSums(testSets)` повинен повернутися як `73702`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(testingSpecialSubsetSums(_testSets), 73702);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --after-user-code--
|
||||
|
||||
```js
|
||||
const _testSets = [
|
||||
[81,88,75,42,87,84,86,65],[157,150,164,119,79,159,161,139,158],[673,465,569,603,629,592,584,300,601,599,600],[90,85,83,84,65,87,76,46],[165,168,169,190,162,85,176,167,127],[224,275,278,249,277,279,289,295,139],[354,370,362,384,359,324,360,180,350,270],[599,595,557,298,448,596,577,667,597,588,602],[175,199,137,88,187,173,168,171,174],[93,187,196,144,185,178,186,202,182],[157,155,81,158,119,176,152,167,159],[184,165,159,166,163,167,174,124,83],[1211,1212,1287,605,1208,1189,1060,1216,1243,1200,908,1210],[339,299,153,305,282,304,313,306,302,228],[94,104,63,112,80,84,93,96],[41,88,82,85,61,74,83,81],[90,67,84,83,82,97,86,41],[299,303,151,301,291,302,307,377,333,280],[55,40,48,44,25,42,41],[1038,1188,1255,1184,594,890,1173,1151,1186,1203,1187,1195],[76,132,133,144,135,99,128,154],[77,46,108,81,85,84,93,83],[624,596,391,605,529,610,607,568,604,603,453],[83,167,166,189,163,174,160,165,133],[308,281,389,292,346,303,302,304,300,173],[593,1151,1187,1184,890,1040,1173,1186,1195,1255,1188,1203],[68,46,64,33,60,58,65],[65,43,88,87,86,99,93,90],[83,78,107,48,84,87,96,85],[1188,1173,1256,1038,1187,1151,890,1186,1184,1203,594,1195],[302,324,280,296,294,160,367,298,264,299],[521,760,682,687,646,664,342,698,692,686,672],[56,95,86,97,96,89,108,120],[344,356,262,343,340,382,337,175,361,330],[47,44,42,27,41,40,37],[139,155,161,158,118,166,154,156,78],[118,157,164,158,161,79,139,150,159],[299,292,371,150,300,301,281,303,306,262],[85,77,86,84,44,88,91,67],[88,85,84,44,65,91,76,86],[138,141,127,96,136,154,135,76],[292,308,302,346,300,324,304,305,238,166],[354,342,341,257,348,343,345,321,170,301],[84,178,168,167,131,170,193,166,162],[686,701,706,673,694,687,652,343,683,606,518],[295,293,301,367,296,279,297,263,323,159],[1038,1184,593,890,1188,1173,1187,1186,1195,1150,1203,1255],[343,364,388,402,191,383,382,385,288,374],[1187,1036,1183,591,1184,1175,888,1197,1182,1219,1115,1167],[151,291,307,303,345,238,299,323,301,302],[140,151,143,138,99,69,131,137],[29,44,42,59,41,36,40],[348,329,343,344,338,315,169,359,375,271],[48,39,34,37,50,40,41],[593,445,595,558,662,602,591,297,610,580,594],[686,651,681,342,541,687,691,707,604,675,699],[180,99,189,166,194,188,144,187,199],[321,349,335,343,377,176,265,356,344,332],[1151,1255,1195,1173,1184,1186,1188,1187,1203,593,1038,891],[90,88,100,83,62,113,80,89],[308,303,238,300,151,304,324,293,346,302],[59,38,50,41,42,35,40],[352,366,174,355,344,265,343,310,338,331],[91,89,93,90,117,85,60,106],[146,186,166,175,202,92,184,183,189],[82,67,96,44,80,79,88,76],[54,50,58,66,31,61,64],[343,266,344,172,308,336,364,350,359,333],[88,49,87,82,90,98,86,115],[20,47,49,51,54,48,40],[159,79,177,158,157,152,155,167,118],[1219,1183,1182,1115,1035,1186,591,1197,1167,887,1184,1175],[611,518,693,343,704,667,686,682,677,687,725],[607,599,634,305,677,604,603,580,452,605,591],[682,686,635,675,692,730,687,342,517,658,695],[662,296,573,598,592,584,553,593,595,443,591],[180,185,186,199,187,210,93,177,149],[197,136,179,185,156,182,180,178,99],[271,298,218,279,285,282,280,238,140],[1187,1151,890,593,1194,1188,1184,1173,1038,1186,1255,1203],[169,161,177,192,130,165,84,167,168],[50,42,43,41,66,39,36],[590,669,604,579,448,599,560,299,601,597,598],[174,191,206,179,184,142,177,180,90],[298,299,297,306,164,285,374,269,329,295],[181,172,162,138,170,195,86,169,168],[1184,1197,591,1182,1186,889,1167,1219,1183,1033,1115,1175],[644,695,691,679,667,687,340,681,770,686,517],[606,524,592,576,628,593,591,584,296,444,595],[94,127,154,138,135,74,136,141],[179,168,172,178,177,89,198,186,137],[302,299,291,300,298,149,260,305,280,370],[678,517,670,686,682,768,687,648,342,692,702],[302,290,304,376,333,303,306,298,279,153],[95,102,109,54,96,75,85,97],[150,154,146,78,152,151,162,173,119],[150,143,157,152,184,112,154,151,132],[36,41,54,40,25,44,42],[37,48,34,59,39,41,40],[681,603,638,611,584,303,454,607,606,605,596]
|
||||
];
|
||||
```
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function testingSpecialSubsetSums(sets) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const testSets = [
|
||||
[81,88,75,42,87,84,86,65],[157,150,164,119,79,159,161,139,158],[673,465,569,603,629,592,584,300,601,599,600],[90,85,83,84,65,87,76,46],[165,168,169,190,162,85,176,167,127],[224,275,278,249,277,279,289,295,139],[354,370,362,384,359,324,360,180,350,270],[599,595,557,298,448,596,577,667,597,588,602],[175,199,137,88,187,173,168,171,174],[93,187,196,144,185,178,186,202,182],[157,155,81,158,119,176,152,167,159],[184,165,159,166,163,167,174,124,83],[1211,1212,1287,605,1208,1189,1060,1216,1243,1200,908,1210],[339,299,153,305,282,304,313,306,302,228],[94,104,63,112,80,84,93,96],[41,88,82,85,61,74,83,81],[90,67,84,83,82,97,86,41],[299,303,151,301,291,302,307,377,333,280],[55,40,48,44,25,42,41],[1038,1188,1255,1184,594,890,1173,1151,1186,1203,1187,1195],[76,132,133,144,135,99,128,154],[77,46,108,81,85,84,93,83],[624,596,391,605,529,610,607,568,604,603,453],[83,167,166,189,163,174,160,165,133],[308,281,389,292,346,303,302,304,300,173],[593,1151,1187,1184,890,1040,1173,1186,1195,1255,1188,1203],[68,46,64,33,60,58,65],[65,43,88,87,86,99,93,90],[83,78,107,48,84,87,96,85],[1188,1173,1256,1038,1187,1151,890,1186,1184,1203,594,1195],[302,324,280,296,294,160,367,298,264,299],[521,760,682,687,646,664,342,698,692,686,672],[56,95,86,97,96,89,108,120],[344,356,262,343,340,382,337,175,361,330],[47,44,42,27,41,40,37],[139,155,161,158,118,166,154,156,78],[118,157,164,158,161,79,139,150,159],[299,292,371,150,300,301,281,303,306,262],[85,77,86,84,44,88,91,67],[88,85,84,44,65,91,76,86],[138,141,127,96,136,154,135,76],[292,308,302,346,300,324,304,305,238,166],[354,342,341,257,348,343,345,321,170,301],[84,178,168,167,131,170,193,166,162],[686,701,706,673,694,687,652,343,683,606,518],[295,293,301,367,296,279,297,263,323,159],[1038,1184,593,890,1188,1173,1187,1186,1195,1150,1203,1255],[343,364,388,402,191,383,382,385,288,374],[1187,1036,1183,591,1184,1175,888,1197,1182,1219,1115,1167],[151,291,307,303,345,238,299,323,301,302],[140,151,143,138,99,69,131,137],[29,44,42,59,41,36,40],[348,329,343,344,338,315,169,359,375,271],[48,39,34,37,50,40,41],[593,445,595,558,662,602,591,297,610,580,594],[686,651,681,342,541,687,691,707,604,675,699],[180,99,189,166,194,188,144,187,199],[321,349,335,343,377,176,265,356,344,332],[1151,1255,1195,1173,1184,1186,1188,1187,1203,593,1038,891],[90,88,100,83,62,113,80,89],[308,303,238,300,151,304,324,293,346,302],[59,38,50,41,42,35,40],[352,366,174,355,344,265,343,310,338,331],[91,89,93,90,117,85,60,106],[146,186,166,175,202,92,184,183,189],[82,67,96,44,80,79,88,76],[54,50,58,66,31,61,64],[343,266,344,172,308,336,364,350,359,333],[88,49,87,82,90,98,86,115],[20,47,49,51,54,48,40],[159,79,177,158,157,152,155,167,118],[1219,1183,1182,1115,1035,1186,591,1197,1167,887,1184,1175],[611,518,693,343,704,667,686,682,677,687,725],[607,599,634,305,677,604,603,580,452,605,591],[682,686,635,675,692,730,687,342,517,658,695],[662,296,573,598,592,584,553,593,595,443,591],[180,185,186,199,187,210,93,177,149],[197,136,179,185,156,182,180,178,99],[271,298,218,279,285,282,280,238,140],[1187,1151,890,593,1194,1188,1184,1173,1038,1186,1255,1203],[169,161,177,192,130,165,84,167,168],[50,42,43,41,66,39,36],[590,669,604,579,448,599,560,299,601,597,598],[174,191,206,179,184,142,177,180,90],[298,299,297,306,164,285,374,269,329,295],[181,172,162,138,170,195,86,169,168],[1184,1197,591,1182,1186,889,1167,1219,1183,1033,1115,1175],[644,695,691,679,667,687,340,681,770,686,517],[606,524,592,576,628,593,591,584,296,444,595],[94,127,154,138,135,74,136,141],[179,168,172,178,177,89,198,186,137],[302,299,291,300,298,149,260,305,280,370],[678,517,670,686,682,768,687,648,342,692,702],[302,290,304,376,333,303,306,298,279,153],[95,102,109,54,96,75,85,97],[150,154,146,78,152,151,162,173,119],[150,143,157,152,184,112,154,151,132],[36,41,54,40,25,44,42],[37,48,34,59,39,41,40],[681,603,638,611,584,303,454,607,606,605,596]
|
||||
];
|
||||
|
||||
testingSpecialSubsetSums(testSets);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,49 @@
|
||||
---
|
||||
id: 5900f3d71000cf542c50fee9
|
||||
title: 'Завдання 106: Особливі суми підмножини: метаналіз'
|
||||
challengeType: 5
|
||||
forumTopicId: 301730
|
||||
dashedName: problem-106-special-subset-sums-meta-testing
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай $S(A)$ - сума елементів у наборі A з розміром набору n. Назвемо це спеціальним набором сум, якщо для будь-яких двох не порожніх неперетинних множин В і С, виконуються умови:
|
||||
|
||||
1. $S(B) ≠ S(C)$; тобто суми підмножин не можуть бути рівними.
|
||||
2. Якщо B містить більше елементів, ніж C, то $S(B) > S(C)$.
|
||||
|
||||
У цьому завданні, припустимо, що даний набір містить n кількість елементів, що закономірно збільшуються, і для нього справджується друга умова.
|
||||
|
||||
Несподівано, що з 25 можливих пар підмножин, які можна отримати з набору, для яких n = 4, лише 1 пару потрібно перевірити на відповідність першій умові. Аналогічно, якщо n = 7, треба перевірити лише 70 з 966 пар підмножин.
|
||||
|
||||
Скільки з 261625 можливих пар підмножин треба перевірити на відповідність першій умові, якщо n = 12?
|
||||
|
||||
**Примітка:** Це Завдання пов'язане з Завданням 103 та Завданням 105.
|
||||
|
||||
# --hints--
|
||||
|
||||
`numberRotations()`має повертати`21384`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(subsetSumsMetaTesting(), 21384);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function subsetSumsMetaTesting() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
subsetSumsMetaTesting();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f3d91000cf542c50feeb
|
||||
title: 'Завдання 108: Діофантові рівняння першого степеня'
|
||||
challengeType: 5
|
||||
forumTopicId: 301732
|
||||
dashedName: problem-108-diophantine-reciprocals-i
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У наступному рівнянні x, y і n - цілі натуральні числа.
|
||||
|
||||
$$\frac{1}{x} + \frac{{1}{y} = \frac{1}{n}$$
|
||||
|
||||
Для `n` = 4 існує три різних рішення:
|
||||
|
||||
$$\begin{align} & \frac{1}{5} + \frac{1}{20} = \frac{1}{4}\\\\ \\\\ & \frac{1}{6} + \frac{1}{12} = \frac{1}{4}\\\\ \\\\ & \frac{1}{8} + \frac{1}{8} = \frac{1}{4} \end{align}$$
|
||||
|
||||
Яке найменше значення `n`, для якого кількість рішень перевищує тисячу?
|
||||
|
||||
# --hints--
|
||||
|
||||
`diophantineOne()` має повертати ` 180180 `.
|
||||
|
||||
```js
|
||||
assert.strictEqual(diophantineOne(), 180180);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function diophantineOne() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
diophantineOne();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,52 @@
|
||||
---
|
||||
id: 5900f3db1000cf542c50feec
|
||||
title: 'Завдання 109: Дартс'
|
||||
challengeType: 5
|
||||
forumTopicId: 301733
|
||||
dashedName: problem-109-darts
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У грі дартс гравець кидає три дротики у мішень, розділену на двадцять рівних секторів, пронумерованих від одного до двадцяти.
|
||||
|
||||
<img class="img-responsive center-block" alt="Мішень для дартс" src="https://cdn.freecodecamp.org/curriculum/project-euler/darts.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Кількість очків визначається номером сектору, у який потрапив дротик. Влучення дротика за межами червоного/зеленого зовнішнього кільця очок не приносить. Кожному чорному та білому сектору всередині цього кільця привласнене окреме число. Червоне/зелене зовнішнє та середнє кільця подвоюють чи потроюють числа сектора відповідно.
|
||||
|
||||
У центрі дошки – два кола, їх називають "яблучко" або "бичаче око". Влучання у центральне зелене кільце приносить 25 очок, а у червоне – 50 очок.
|
||||
|
||||
Існує чимало різновидів гри, зокрема, у найпопулярнішій з них гравці починають з рахунку 301 (варіант 501). Перемагає гравець, який перший зменшить рахунок до нуля. Також можна грати в "подвоєну" систему: гравець повинен потрапити у зону подвоєння (включно з бичачим оком у центрі мішені) під час останнього метання; попадання в інший сектор, що привів рахунок до перебору або одиниці, означає, що очки серії не зараховуються.
|
||||
|
||||
"Чекаут" – коли гравець може завершити гру при поточному рахунку; найвищий чекаут – 170: T20 T25 D25 (два попадання у потрійне 20 та в яблучко). Існує одинадцять різних варіантів чекауту при рахунку 6:
|
||||
|
||||
$$\початок{array} \text{D3} & & \\\\ D1 & D2 & \\\\ S2 & D2 & \\\\ D2 & D1 & \\\\ S4 & D1 & \\\\ S1 & S1 & D2 \\\\ S1 & T1 & D1 \\\\ S1 & S3 & D1 \\\\ D1 & D1 & D1 \\\\ D1 & S2 & D1 \\\\ S2 & S2 & D1 \кінець{array}$$
|
||||
|
||||
Зверніть увагу, що D1 D2 відрізняється від D2 D1, оскільки вони закінчуються різними подвоєннями. Однак, комбінація S1 T1 D1 вважається такою ж, як і T1 S1 D1. До того ж, не потрібно вказувати промахи у комбінаціях; наприклад, D3 це те саме, що й 0 D3 і 0 0 D3. Неймовірно, що загалом існує 42336 різних способів чекауту. Скільки різних способів чекауту має гравець з балом меншим за 100?
|
||||
|
||||
# --hints--
|
||||
|
||||
`darts()` повинен повертатися як `38182`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(darts(), 38182);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function darts() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
darts();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,182 @@
|
||||
---
|
||||
id: 5900f3781000cf542c50fe8a
|
||||
title: 'Завдання 11: Найбільший добуток у таблиці'
|
||||
challengeType: 5
|
||||
forumTopicId: 301734
|
||||
dashedName: problem-11-largest-product-in-a-grid
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нижче зображена таблиця розміром 20х20, у якій 4 числа, розташованих по діагоналі, позначені червоним.
|
||||
|
||||
<div style='text-align: center;'>
|
||||
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08<br>
|
||||
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00<br>
|
||||
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65<br>
|
||||
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91<br>
|
||||
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80<br>
|
||||
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50<br>
|
||||
32 98 81 28 64 23 67 10 <span style='color: red'><b>26</b></span> 38 40 67 59 54 70 66 18 38 64 70<br>
|
||||
67 26 20 68 02 62 12 20 95 <span style='color: red'><b>63</b></span> 94 39 63 08 40 91 66 49 94 21<br>
|
||||
24 55 58 05 66 73 99 26 97 17 <span style='color: red'><b>78</b></span> 78 96 83 14 88 34 89 63 72<br>
|
||||
21 36 23 09 75 00 76 44 20 45 35 <span style='color: red'><b>14</b></span> 00 61 33 97 34 31 33 95<br>
|
||||
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92<br>
|
||||
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57<br>
|
||||
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58<br>
|
||||
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40<br>
|
||||
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66<br>
|
||||
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69<br>
|
||||
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36<br>
|
||||
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16<br>
|
||||
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54<br>
|
||||
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48<br>
|
||||
</div>
|
||||
|
||||
Добутком виразу 26 × 63 × 78 × 14 є число 1788696.
|
||||
|
||||
Який найбільший добуток чотирьох чисел, розташованих в одному напрямку у (зверху-вниз, знизу-вверх, справа-наліво, зліва-направо, діагонально) у сітці`arr`?
|
||||
|
||||
# --hints--
|
||||
|
||||
`largestGridProduct(testGrid)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof largestGridProduct(testGrid) === 'number');
|
||||
```
|
||||
|
||||
`largestGridProduct(testGrid)` має повернути число 14169081.
|
||||
|
||||
```js
|
||||
assert.strictEqual(largestGridProduct(testGrid), 14169081);
|
||||
```
|
||||
|
||||
`largestGridProduct(grid)` має повернути число 70600674.
|
||||
|
||||
```js
|
||||
assert.strictEqual(largestGridProduct(grid), 70600674);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function largestGridProduct(arr) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Only change code above this line
|
||||
const grid = [
|
||||
[8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8],
|
||||
[49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0],
|
||||
[81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65],
|
||||
[52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91],
|
||||
[22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80],
|
||||
[24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50],
|
||||
[32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70],
|
||||
[67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21],
|
||||
[24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72],
|
||||
[21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95],
|
||||
[78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92],
|
||||
[16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57],
|
||||
[86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58],
|
||||
[19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40],
|
||||
[4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66],
|
||||
[88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69],
|
||||
[4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36],
|
||||
[20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16],
|
||||
[20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54],
|
||||
[1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48]
|
||||
];
|
||||
|
||||
const testGrid = [
|
||||
[40, 17, 81, 18, 57],
|
||||
[74, 4, 36, 16, 29],
|
||||
[36, 42, 69, 73, 45],
|
||||
[51, 54, 69, 16, 92],
|
||||
[7, 97, 57, 32, 16]
|
||||
];
|
||||
|
||||
largestGridProduct(testGrid);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function largestGridProduct(arr) {
|
||||
let maxProduct = 0;
|
||||
let currProduct = 0;
|
||||
|
||||
function maxProductChecker(n) {
|
||||
if (n > maxProduct) {
|
||||
return maxProduct = n;
|
||||
}
|
||||
}
|
||||
|
||||
// loop rows
|
||||
for (let r = 0; r < arr.length; r++) {
|
||||
// loop columns
|
||||
for (let c = 0; c < arr[r].length; c++) {
|
||||
const limit = arr[r].length - 3;
|
||||
|
||||
// check horizontal
|
||||
if (c < limit) {
|
||||
currProduct = arr[r][c] * arr[r][c + 1] * arr[r][c + 2] * arr[r][c + 3];
|
||||
maxProductChecker(currProduct);
|
||||
}
|
||||
|
||||
// check vertical
|
||||
if (r < limit) {
|
||||
currProduct = arr[r][c] * arr[r + 1][c] * arr[r + 2][c] * arr[r + 3][c];
|
||||
maxProductChecker(currProduct);
|
||||
}
|
||||
|
||||
// check diagonal [\]
|
||||
if (c < limit && r < limit) {
|
||||
currProduct = arr[r][c] * arr[r + 1][c + 1] * arr[r + 2][c + 2] * arr[r + 3][c + 3];
|
||||
maxProductChecker(currProduct);
|
||||
}
|
||||
|
||||
// check diagonal [/]
|
||||
if (c > 3 && r < limit) {
|
||||
currProduct = arr[r][c] * arr[r + 1][c - 1] * arr[r + 2][c - 2] * arr[r + 3][c - 3];
|
||||
maxProductChecker(currProduct);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return maxProduct;
|
||||
}
|
||||
|
||||
const grid = [ [8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8],
|
||||
[49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0],
|
||||
[81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65],
|
||||
[52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91],
|
||||
[22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80],
|
||||
[24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50],
|
||||
[32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70],
|
||||
[67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21],
|
||||
[24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72],
|
||||
[21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95],
|
||||
[78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92],
|
||||
[16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57],
|
||||
[86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58],
|
||||
[19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40],
|
||||
[4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66],
|
||||
[88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69],
|
||||
[4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36],
|
||||
[20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16],
|
||||
[20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54],
|
||||
[1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48]
|
||||
];
|
||||
|
||||
const testGrid = [
|
||||
[40, 17, 81, 18, 57],
|
||||
[74, 4, 36, 16, 29],
|
||||
[36, 42, 69, 73, 45],
|
||||
[51, 54, 69, 16, 92],
|
||||
[7, 97, 57, 32, 16]
|
||||
];
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f3db1000cf542c50feed
|
||||
title: 'Задача 110: Діофантові обернені числа. Частина 2'
|
||||
challengeType: 5
|
||||
forumTopicId: 301735
|
||||
dashedName: problem-110-diophantine-reciprocals-ii
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У наступному рівнянні x, y та n є цілими натуральними числами.
|
||||
|
||||
$$\дріб{1}{x} + \дріб{1}{y} = \дріб{1}{n}$$
|
||||
|
||||
Можна перевірити, що коли `n` = 1260 існує 113 різних рішень, і це найменше значення `n`, для якого загальна кількість різних рішень перевищує сотню.
|
||||
|
||||
Яке найменше значення `n`, для якого кількість окремих рішень перевищує чотири мільйони?
|
||||
|
||||
**Примітка:** Ця проблема є набагато складнішою версією Задачі 108, оскільки вона виходить за межі обмежень підходу грубої сили, вона вимагає розумної реалізації.
|
||||
|
||||
# --hints--
|
||||
|
||||
`diophantineTwo()` має повертати `9350130049860600`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(diophantineTwo(), 9350130049860600);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function diophantineTwo() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
diophantineTwo();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,61 @@
|
||||
---
|
||||
id: 5900f3db1000cf542c50feee
|
||||
title: 'Задача 111: Прості числа з прогонами'
|
||||
challengeType: 5
|
||||
forumTopicId: 301736
|
||||
dashedName: problem-111-primes-with-runs
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглядаючи чотиризначні прості числа, що містять повторювані цифри, стає зрозумілим, що вони не можуть бути однаковими: 1111 ділиться на 11, 2222 ділиться на 22 тощо. Але є дев’ять 4-значних простих чисел, що містять три одиниці:
|
||||
|
||||
$$1117, 1151, 1171, 1181, 1511, 1811, 2111, 4111, 8111$$
|
||||
|
||||
Ми можемо сказати, що $M(n, d)$ являє собою максимальну кількість повторюваних цифр для n-значного простого числа, де d-повторювана цифра, в той час як $N(n, d)$ - це кількість таких простих чисел, а $S(n, d)$ - сума цих простих чисел.
|
||||
|
||||
Отже, $M(4, 1) = 3$ - це максимальна кількість повторюваних цифр для 4-значного простого числа, де одна з них повторювана цифра, є прості числа $N(4, 1) = 9$, а сума цих простих чисел $S(4, 1) = 22275 $. Виявляється, що при d = 0, можливо лише $M(4, 0) = 2$ повторюваних цифр, але таких випадків лише $N(4, 0) = 13$.
|
||||
|
||||
Таким же чином, ми отримуємо наступні результати для 4-значних простих чисел.
|
||||
|
||||
| Число, d | $M(4, d)$ | $N(4, d)$ | $S(4, d)$ |
|
||||
| -------- | --------- | --------- | --------- |
|
||||
| 0 | 2 | 13 | 67061 |
|
||||
| 1 | 3 | 9 | 22275 |
|
||||
| 2 | 3 | 1 | 2221 |
|
||||
| 3 | 3 | 12 | 46214 |
|
||||
| 4 | 3 | 2 | 8888 |
|
||||
| 5 | 3 | 1 | 5557 |
|
||||
| 6 | 3 | 1 | 6661 |
|
||||
| 7 | 3 | 9 | 57863 |
|
||||
| 8 | 3 | 1 | 8887 |
|
||||
| 9 | 3 | 7 | 48073 |
|
||||
|
||||
Для d = від 0 до 9 сума всіх $S (4, d)$ дорівнює 273700. Знайдіть суму всіх $S(10, d)$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`primesWithRuns ()` має повертати `612407567715`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primesWithRuns(), 612407567715);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function primesWithRuns() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
primesWithRuns();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,48 @@
|
||||
---
|
||||
id: 5900f3dd1000cf542c50feef
|
||||
title: 'Завдання 112: стрибучі числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301738
|
||||
dashedName: problem-112-bouncy-numbers
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Якщо, читаючи число зліва направо, жодна цифра не перевищує цифру праворуч від неї, таке число називається зростаючим; наприклад, 134468.
|
||||
|
||||
Таким же чином, якщо жодна цифра не перевищує цифру зліва від неї, число називається спадним; наприклад, 66420.
|
||||
|
||||
Назвемо натуральне число, яке не є ні зростаючим, ні спадним, "стрибучим" числом; наприклад, 155349.
|
||||
|
||||
Очевидно, що стрибучі числа не можуть бути меншими за сотні. Трохи більше половини чисел, що менші за одну тисячу (525), є стрибучими. Насправді ж, найменшим числом, для якого частка стрибучих чисел відразу досягає 50%, є число 538.
|
||||
|
||||
Як не дивно, стрибучі числа зустрічаються все частіше і частіше, і до моменту досягнення числа 21780 частка стрибучих чисел становить 90%.
|
||||
|
||||
Знайдіть найменше число, для якого частка стрибучих чисел дорівнює 99%.
|
||||
|
||||
# --hints--
|
||||
|
||||
`bouncyNumbers()` повинні повертатися як `1587000`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(bouncyNumbers(), 1587000);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function bouncyNumbers() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bouncyNumbers();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f3dd1000cf542c50fef0
|
||||
title: 'Завдання 113: Нестрибучі числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301739
|
||||
dashedName: problem-113-non-bouncy-numbers
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Якщо, читаючи число зліва направо, жодна цифра не перевищує цифру праворуч від неї, таке число називається зростаючим; наприклад, 134468.
|
||||
|
||||
Таким же чином, якщо жодна цифра не перевищує цифру зліва від неї, число називається спадним; наприклад, 66420.
|
||||
|
||||
Назвемо натуральне число, яке не є ні зростаючим, ні спадним, "стрибучим" числом; наприклад, 155349.
|
||||
|
||||
При збільшенні n збільшується пропорція стрибучих чисел менше n. Таким чином, існує тільки 12951 нестрибучих чисел до мільйона, і тільки 277 032 нестрибучих чисел нижче ${10}^{10}$.
|
||||
|
||||
Скільки чисел менше гугола (${10}^{100}$) не є "стрибучими"?
|
||||
|
||||
# --hints--
|
||||
|
||||
`nonBouncyNumbers()` повинен повертатися як `51161058134250`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(nonBouncyNumbers(), 51161058134250);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function nonBouncyNumbers() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
nonBouncyNumbers();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3e01000cf542c50fef2
|
||||
title: 'Завдання 114: Підрахунок комбінацій блоків І'
|
||||
challengeType: 5
|
||||
forumTopicId: 301740
|
||||
dashedName: problem-114-counting-block-combinations-i
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Рядок завдовжки сім одиниць містить червоні блоки, мінімальна довжина яких становить три одиниці, тому будь-які два червоні блоки (які можуть бути будь-якої довжини) розділені принаймні одним червоним квадратом. Є рівно 17 способів зробити це.
|
||||
|
||||
<img class="img-responsive center-block" alt="Можливі способи розміщення кубиків з мінімальною довжиною у три одиниці у рядку довжиною сім одиниць" src="https://cdn.freecodecamp.org/curriculum/project-euler/counting-block-combinations-i.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Скількома способами можна заповнити ряд довжиною 50 одиниць?
|
||||
|
||||
**Примітка:** Хоча наведений вище приклад не дає такої можливості, загалом дозволяється змішувати розміри блоків. Наприклад, у рядку довжиною вісім одиниць можна використати червоний (3), чорний (1) та червоний (4).
|
||||
|
||||
# --hints--
|
||||
|
||||
`countingBlockOne()` повинен повертатися як `16475640049`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(countingBlockOne(), 16475640049);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function countingBlockOne() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
countingBlockOne();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,50 @@
|
||||
---
|
||||
id: 5900f3df1000cf542c50fef1
|
||||
title: 'Завдання 115: Підрахунок комбінацій блоків ІІ'
|
||||
challengeType: 5
|
||||
forumTopicId: 301741
|
||||
dashedName: problem-115-counting-block-combinations-ii
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Рядок довжиною `n` одиниць містить червоні блоки з мінімальною довжиною `m` одиниць, тому будь-які два червоні блоки (які можуть бути будь-якої довжини) розділені як мінімум одним чорним квадратом.
|
||||
|
||||
Нехай функція підрахунку $F(m, n)$ представляє кількість способів заповнення рядка.
|
||||
|
||||
Наприклад, $F(3, 29) = 673135$ та $F(3, 30) = 1089155$.
|
||||
|
||||
Тобто для m = 3 видно, що n = 30 — це найменше значення, для якого функція fill-count перевищує один мільйон.
|
||||
|
||||
Точно так само для m = 10 можна перевірити, що $F(10, 56) = 880711$ та $F(10, 57) = 1148904$, то ж n = 57 — це найменше значення, для якого функція fill-count перевищує один мільйон.
|
||||
|
||||
Для m = 50, знайдіть найменше значення `n`, для якого функція fill-count спочатку перевищує один мільйон.
|
||||
|
||||
**Примітка:** Це — складніша версія Завдання 114.
|
||||
|
||||
# --hints--
|
||||
|
||||
`countingBlockTwo()` повинен повертатися як `168`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(countingBlockTwo(), 168);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function countingBlockTwo() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
countingBlockTwo();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,54 @@
|
||||
---
|
||||
id: 5900f3e01000cf542c50fef3
|
||||
title: 'Завдання 116: Червоні, зелені та сині комірки'
|
||||
challengeType: 5
|
||||
forumTopicId: 301742
|
||||
dashedName: problem-116-red-green-or-blue-tiles
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Ряд із п'яти чорних квадратних комірок повинен бути замінений на кольорові довгасті комірки: червоні (2 одиниці), зелені (3 одиниці) або ж сині (4 одиниці).
|
||||
|
||||
Якщо вибрати червоні комірки, є рівно 7 способів це зробити.
|
||||
|
||||
<img class="img-responsive center-block" alt="Можливі способи розміщення червоних комірок у ряд довжиною п'ять одиниць" src="https://cdn.freecodecamp.org/curriculum/project-euler/red-green-or-blue-tiles-1.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Якщо вибрати зелені комірки, є три способи.
|
||||
|
||||
<img class="img-responsive center-block" alt="Можливі способи розміщення зелених комірок у ряд довжиною п'ять одиниць" src="https://cdn.freecodecamp.org/curriculum/project-euler/red-green-or-blue-tiles-2.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
І якщо вибрати сині комірки, маємо 2 способи.
|
||||
|
||||
<img class="img-responsive center-block" alt="Можливі способи розміщення синіх комірок у ряд довжиною п'ять одиниць" src="https://cdn.freecodecamp.org/curriculum/project-euler/red-green-or-blue-tiles-3.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Припустимо, що кольори не можуть бути змішаними, тоді існує 7 + 3 + 2 = 12 способів заміни чорних комірок в рядку довжиною п'ять одиниць. Скількома різними способами можна замінити чорні комірки у рядку довжиною п’ятдесят одиниць, якщо кольори не можна змішувати та необхідно використати хоча б одну кольорову плитку?
|
||||
|
||||
**Примітка:** Це пов'язано із завданням 117.
|
||||
|
||||
# --hints--
|
||||
|
||||
`redGreenBlueOne()`should return`20492570929`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(redGreenBlueOne(), 20492570929);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function redGreenBlueOne() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
redGreenBlueOne();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3e21000cf542c50fef4
|
||||
title: 'Завдання 117: Червоні, зелені та сині комірки'
|
||||
challengeType: 5
|
||||
forumTopicId: 301743
|
||||
dashedName: problem-117-red-green-and-blue-tiles
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Використовуючи комбінацію чорних квадратних комірок і довгастих комірок, вибраних з: червоних комірок розміром дві одиниці, зелених комірок розміром три одиниці та синіх комірок розміром чотири одиниці, можна створити ряд довжиною п'ять одиниць рівно п'ятнадцятьма різними способами.
|
||||
|
||||
<img class="img-responsive center-block" alt="Можливі способи розміщення червоних, зелених і синіх довгастих комірок ряду довжиною в п'ять одиниць" src="https://cdn.freecodecamp.org/curriculum/project-euler/red-green-and-blue-tiles.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Скількома способами можна викласти ряд довжиною 50 одиниць?
|
||||
|
||||
**Примітка**: Це пов'язано з завданням 116.
|
||||
|
||||
# --hints--
|
||||
|
||||
`redGreenBlueTilesTwo()` should return `100808458960497`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(redGreenBlueTilesTwo(), 100808458960497);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function redGreenBlueTilesTwo() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
redGreenBlueTilesTwo();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,40 @@
|
||||
---
|
||||
id: 5900f3e21000cf542c50fef5
|
||||
title: 'Задача 118: Цифрові прості числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301744
|
||||
dashedName: problem-118-pandigital-prime-sets
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Використовуючи всі цифри від 1 до 9 і вільно їх об'єднуючи для формування десяткових цілих чисел, можна формувати різні набори. Цікаво, що $\\{2, 5, 47, 89, 631\\}$ є простими числами.
|
||||
|
||||
Скільки різних наборів, що містять кожну з цифр від однієї до дев’яти, точно хоча б один раз містять лише прості елементи?
|
||||
|
||||
# --hints--
|
||||
|
||||
`pandigitalPrimeSets()` має повертати `44680`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(pandigitalPrimeSets(), 44680);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function pandigitalPrimeSets() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
pandigitalPrimeSets();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3e41000cf542c50fef6
|
||||
title: 'Задача 119: Сума чисел'
|
||||
challengeType: 5
|
||||
forumTopicId: 301745
|
||||
dashedName: problem-119-digit-power-sum
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Число 512 цікаве тим, що воно дорівнює сумі його цифр, зведених у десяткову ступінь: $5 + 1 + 2 = 8$, і $8^3 = 512$. Інший приклад числа з цією властивістю - $614656 = 28^4$.
|
||||
|
||||
Ми визначимо $a_n$ як $n-th$ член цієї послідовності і наполягатимемо на тому, що число повинне містити щонайменше дві цифри, щоб мати суму.
|
||||
|
||||
Вам дано, що $a_2 = 512$ і $a_{10} = 614656$.
|
||||
|
||||
Знайдіть $a_{30}$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`digitPowerSum()` повинен повертатися як `248155780267521`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(digitPowerSum(), 248155780267521);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function digitPowerSum() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
digitPowerSum();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,139 @@
|
||||
---
|
||||
id: 5900f3781000cf542c50fe8b
|
||||
title: 'Завдання 12: Дільники трикутного числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301746
|
||||
dashedName: problem-12-highly-divisible-triangular-number
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Послідовність трикутних чисел утворюється додаванням натуральних чисел. Отже, 7-е трикутне число буде 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Перші десять членів послідовності:
|
||||
|
||||
<div style='text-align: center;'>1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...</div>
|
||||
|
||||
Перерахуємо множники перших семи трикутних чисел:
|
||||
|
||||
<div style='padding-left: 4em;'><b>1:</b> 1</div>
|
||||
<div style='padding-left: 4em;'><b>3:</b> 1, 3</div>
|
||||
<div style='padding-left: 4em;'><b>6:</b> 1, 2, 3, 6</div>
|
||||
<div style='padding-left: 4em;'><b>10:</b> 1, 2, 5, 10</div>
|
||||
<div style='padding-left: 4em;'><b>15:</b> 1, 3, 5, 15</div>
|
||||
<div style='padding-left: 4em;'><b>21:</b> 1, 3, 7, 21</div>
|
||||
<div style='padding-left: 4em;'><b>28:</b> 1, 2, 4, 7, 14, 28</div>
|
||||
|
||||
Бачимо, що 28 є першим трикутним числом, яке має більше п'яти дільників.
|
||||
|
||||
Яке значення першого трикутного числа, що має більше `n` дільників?
|
||||
|
||||
# --hints--
|
||||
|
||||
`divisibleTriangleNumber(5)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof divisibleTriangleNumber(5) === 'number');
|
||||
```
|
||||
|
||||
`divisibleTriangleNumber(5)` повертає 28.
|
||||
|
||||
```js
|
||||
assert.strictEqual(divisibleTriangleNumber(5), 28);
|
||||
```
|
||||
|
||||
`divisibleTriangleNumber(23)` повертає 630.
|
||||
|
||||
```js
|
||||
assert.strictEqual(divisibleTriangleNumber(23), 630);
|
||||
```
|
||||
|
||||
`divisibleTriangleNumber(167)` повертає 1385280.
|
||||
|
||||
```js
|
||||
assert.strictEqual(divisibleTriangleNumber(167), 1385280);
|
||||
```
|
||||
|
||||
`divisibleTriangleNumber(374)` повертає 17907120.
|
||||
|
||||
```js
|
||||
assert.strictEqual(divisibleTriangleNumber(374), 17907120);
|
||||
```
|
||||
|
||||
`divisibleTriangleNumber(500)` повертає 76576500.
|
||||
|
||||
```js
|
||||
assert.strictEqual(divisibleTriangleNumber(500), 76576500);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function divisibleTriangleNumber(n) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
divisibleTriangleNumber(500);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function divisibleTriangleNumber(n) {
|
||||
if (n === 1) return 3;
|
||||
let counter = 1;
|
||||
let triangleNumber = counter++;
|
||||
|
||||
|
||||
while (noOfFactors(triangleNumber) < n) {
|
||||
triangleNumber += counter++;
|
||||
}
|
||||
return triangleNumber;
|
||||
}
|
||||
|
||||
function noOfFactors(num) {
|
||||
const primeFactors = getPrimeFactors(num);
|
||||
let prod = 1;
|
||||
for(let p in primeFactors) {
|
||||
prod *= (primeFactors[p] + 1)
|
||||
}
|
||||
return prod;
|
||||
}
|
||||
|
||||
function getPrimeFactors(num) {
|
||||
let n = num;
|
||||
let primes = {};
|
||||
|
||||
let p = 2;
|
||||
let sqrt = Math.sqrt(num);
|
||||
|
||||
function checkAndUpdate(inc) {
|
||||
if (n % p === 0) {
|
||||
const curr = primes[p];
|
||||
if (curr) {
|
||||
primes[p]++
|
||||
} else {
|
||||
primes[p] = 1;
|
||||
}
|
||||
n /= p;
|
||||
} else {
|
||||
p += inc;
|
||||
}
|
||||
}
|
||||
|
||||
while(p === 2 && p <= n) {
|
||||
checkAndUpdate(1);
|
||||
}
|
||||
|
||||
while (p <= n && p <= sqrt) {
|
||||
checkAndUpdate(2);
|
||||
}
|
||||
if(Object.keys(primes).length === 0) {
|
||||
primes[num] = 1;
|
||||
} else if(n !== 1) {
|
||||
primes[n] = 1;
|
||||
}
|
||||
return primes;
|
||||
}
|
||||
```
|
@ -0,0 +1,42 @@
|
||||
---
|
||||
id: 5900f3e41000cf542c50fef7
|
||||
title: 'Завдання 120: Квадратні остачі'
|
||||
challengeType: 5
|
||||
forumTopicId: 301747
|
||||
dashedName: problem-120-square-remainders
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай `r` буде остачею при діленні ${(a − 1)}^n + {(a + 1)}^n$ на $a^2$.
|
||||
|
||||
Наприклад, якщо $a = 7$ і $n = 3$, тоді $r = 42: 6^3 + 8^3 = 728 ≡ 42 \\ \text{mod}\\ 49$. І оскільки змінюється `n`, те ж відбувається і з `r`, але для $a = 7$ виходить так, що $r_{max} = 42$.
|
||||
|
||||
Знайдіть $\sum{r}_{max}$ для 3 ≤ a ≤ 1000$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`squareRemainders()` має вивести `333082500`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(squareRemainders(), 333082500);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function squareRemainders() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
squareRemainders();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3e51000cf542c50fef8
|
||||
title: 'Завдання 121: Призовий фонд гри з дисками'
|
||||
challengeType: 5
|
||||
forumTopicId: 301748
|
||||
dashedName: problem-121-disc-game-prize-fund
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У торбі лежать один червоний диск і один синій диск. У грі на вдачу гравець навмання дістає один диск і відзначає його колір. Після кожного ходу диск повертається в торбу, куди додається ще додатковий червоний диск, і знову потрібно навмання дістати інший диск.
|
||||
|
||||
Гравець платить £1 за гру і виграє, якщо до кінця гри дістає більше синіх дисків, ніж червоних.
|
||||
|
||||
Якщо гра складається з чотирьох ходів, ймовірність виграшу для гравця становить 11/120, тому максимальний призовий фонд в даному випадку повинен складати £10, щоб не зазнати збитків. Зверніть увагу, що будь-яка виплата проводиться цілим числом фунтів стерлінгів, а також включає в себе вартість гри в розмірі £1, так що в даному прикладі гравець насправді виграє £9.
|
||||
|
||||
Знайдіть максимальний призовий фонд, який треба виділити для однієї гри з п'ятнадцятьма ходами.
|
||||
|
||||
# --hints--
|
||||
|
||||
`discGamePrize()` повинен повертатися як `2269`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(discGamePrize(), 2269);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function discGamePrize() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
discGamePrize();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,52 @@
|
||||
---
|
||||
id: 5900f3e61000cf542c50fef9
|
||||
title: 'Завдання 122: Ефективний метод піднесення до степеня'
|
||||
challengeType: 5
|
||||
forumTopicId: 301749
|
||||
dashedName: problem-122-efficient-exponentiation
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Найпростіший спосіб обчислення $n^{15}$ вимагає виконання 14 множень:
|
||||
|
||||
$$n × n × \ldots × n = n^{15}$$
|
||||
|
||||
Якщо скористатися "двійковим" методом, можна обчислити, виконавши 6 множень:
|
||||
|
||||
$$\begin{align} & n × n = n^2\\\\ & n^2 × n^2 = n^4\\\\ & n^4 × n^4 = n^8\\\\ & n^8 × n^4 = n^{12}\\\\ & n^{12} × n^2 = n^{14}\\\\ & n^{14} × n = n^{15} \end{align}$$
|
||||
|
||||
Проте кількість множень ще можна зменшити до 5:
|
||||
|
||||
$$\begin{align} & n × n = n^2\\\\ & n^2 × n = n^3\\\\ & n^3 × n^3 = n^6\\\\ & n^6 × n^6 = n^{12}\\\\ & n^{12} × n^3 = n^{15} \end{align}$$
|
||||
|
||||
Визначаємо $m(k)$ як мінімальну кількість множень для обчислення $n^k$. Наприклад, $m(15) = 5$.
|
||||
|
||||
Знайдіть $\sum{m(k)}$ для $1 ≤ k ≤ 200$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`efficientExponentation()` має повернути `1582`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(efficientExponentation(), 1582);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function efficientExponentation() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
efficientExponentation();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3e71000cf542c50fefa
|
||||
title: 'Завдання 123: Прості квадратні остачі'
|
||||
challengeType: 5
|
||||
forumTopicId: 301750
|
||||
dashedName: problem-123-prime-square-remainders
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай $p_n$ $n$ - просте число: 2, 3, 5, 7, 11, ..., і нехай $r$ - остача, коли ${(p_n − 1)}^n + {(p_n + 1)}^n$ ділиться на ${p_n}^2$.
|
||||
|
||||
Наприклад, коли $n = 3, p_3 = 5$ і $4^3 + 6^3 = 280 ≡ 5\\ mod\\ 25$.
|
||||
|
||||
Найменше значення $n$, для якого остача спочатку перевищує $10^9$, становить 7037.
|
||||
|
||||
Знайдіть найменше значення $n$, для якого остача спочатку перевищує $10^{10}$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`primeSquareRemainders()` повинен повернути `21035`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primeSquareRemainders(), 21035);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function primeSquareRemainders() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
primeSquareRemainders();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,42 @@
|
||||
---
|
||||
id: 5900f3e91000cf542c50fefc
|
||||
title: 'Задача 125: Сума цифр числа паліндром'
|
||||
challengeType: 5
|
||||
forumTopicId: 301752
|
||||
dashedName: problem-125-palindromic-sums
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Паліндромне число 595 цікаве тим, що його можна записати як суму послідовних квадратів: $6^2 + 7^2 + 8^2 + 9^2 + 10^2 + 11^2 + 12^2$.
|
||||
|
||||
Існує рівно одинадцять паліндромів менших за одну тисячу, які можна записати як послідовність суми квадратів, і сума цифр цих паліндромів дорівнює 4164. Зауважте, що число $1 = 0^2 + 1^2$ не було враховане, оскільки ця задача стосується квадратів лише натуральних чисел.
|
||||
|
||||
Знайдіть суму всіх чисел, менших ніж $10^8$, які є одночасно паліндромами і можуть бути записані як сума послідовних квадратів.
|
||||
|
||||
# --hints--
|
||||
|
||||
`palindromicSums()` має повернути `2906969179`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(palindromicSums(), 2906969179);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function palindromicSums() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
palindromicSums();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,50 @@
|
||||
---
|
||||
id: 5900f3ea1000cf542c50fefd
|
||||
title: 'Завдання 126: Шари кубоїдів'
|
||||
challengeType: 5
|
||||
forumTopicId: 301753
|
||||
dashedName: problem-126-cuboid-layers
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Мінімальна кількість кубів, що охоплюють кожну видиму грань кубоїда розміром 3 x 2 x 1, становить двадцять два.
|
||||
|
||||
<img class="img-responsive center-block" alt="Кубоїд 3x2x1, покритий двадцятьма двома кубиками 1x1x1" src="https://cdn.freecodecamp.org/curriculum/project-euler/cuboid-layers.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Якщо ми додамо другий шар до цього блоку, то для покриття кожної видимої грані знадобиться сорок шість кубів, для третього шару знадобиться сімдесят вісім кубиків, а для четвертого шару знадобиться сто вісімнадцять кубів, щоб покрити кожну видиму грань.
|
||||
|
||||
Однак перший шар на кубоїді розміром 5 x 1 x 1 також вимагає двадцяти двох кубів; так само перший шар на кубоїдах розмірами 5 x 3 x 1, 7 x 2 x 1 та 11 x 1 x 1 містить усі сорок шість кубів.
|
||||
|
||||
Визначимо $C(n)$, щоб показати кількість кубоїдів, які містять $n$ кубів в одному зі своїх шарів. Отже, $C(22) = 2$, $C(46) = 4$, $C(78) = 5$ і $C(118) = 8$.
|
||||
|
||||
Виявляється, що 154 - це найменше значення для $n$, для якого $C(n) = 10$.
|
||||
|
||||
Знайдіть найменше значення $n$, для якого $C(n) = 1000$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`cuboidLayers()` повинен повернути `18522`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(cuboidLayers(), 18522);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function cuboidLayers() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
cuboidLayers();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,56 @@
|
||||
---
|
||||
id: 5900f3ec1000cf542c50fefe
|
||||
title: 'Завдання 127: abc-збіги'
|
||||
challengeType: 5
|
||||
forumTopicId: 301754
|
||||
dashedName: problem-127-abc-hits
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Радикалом числа $n$, $rad(n)$ називають добуток простих множників $n$. Наприклад, $504 = 2^3 × 3^2 × 7$, отже $rad(504) = 2 × 7 = 42$.
|
||||
|
||||
Нехай число-триплет з додатними цілими числами (a, b, c) abc-збіг, якщо:
|
||||
|
||||
1. $GCD(a, b) = GCD(a, c) = GCD(b, c) = 1$
|
||||
2. $a < b$
|
||||
3. $a + b = c$
|
||||
4. $rad(abc) < c$
|
||||
|
||||
Наприклад, (5, 27, 32) - це abc-збіг, тому що:
|
||||
|
||||
1. $GCD(5, 27) = GCD(5, 32) = GCD(27, 32) = 1$
|
||||
2. $5 < 27$
|
||||
3. $5 + 27 = 32$
|
||||
4. $rad(4320) = 30 < 32$
|
||||
|
||||
Виявляється, abc-збіги - досить рідкісні і існує тільки 31 abc-збігів для $c < 1000$, with $\sum{c} = 12523$.
|
||||
|
||||
Знайдіть $\sum{c}$ для $c < 120000$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`abcHits()` повинен повертатися як `18407904`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(abcHits(), 18407904);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function abcHits() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
abcHits();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,54 @@
|
||||
---
|
||||
id: 5900f3ec1000cf542c50feff
|
||||
title: 'Завдання 128: Різниці шестикутних плиток'
|
||||
challengeType: 5
|
||||
forumTopicId: 301755
|
||||
dashedName: problem-128-hexagonal-tile-differences
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Шестикутна плитка з числом 1 оточена кільцем із шести шестикутних плиток, які, починаючи із «12-ї години», пронумеровані від 2 до 7 у напрямку проти годинникової стрілки.
|
||||
|
||||
Нові кільця додані так само, і пронумеровані від 8 до 19, від 20 до 37, від 38 до 61 і так далі. Подана нижче діаграма показує перші три кільця.
|
||||
|
||||
<img class="img-responsive center-block" alt="перші три кільця упорядкованих шестикутних плиток з числами від 1 до 37 і з виділеними плитками 8 та 17" src="https://cdn.freecodecamp.org/curriculum/project-euler/hexagonal-tile-differences.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Знайшовши різницю між плиткою $n$ та кожним із її шести сусідів, визначимо $PD(n)$ як кількість тих різниць, які є простими.
|
||||
|
||||
Наприклад, працюючи за годинниковою стрілкою навколо клітинки 8, різницями є 12, 29, 11, 6, 1 та 13. Отже $PD(8) = 3$.
|
||||
|
||||
Точно так само різницями навколо плитки 17 є 1, 17, 16, 1, 11 та 10, тому $PD(17) = 2$.
|
||||
|
||||
Можна показати, що максимальним значенням $PD(n)$ є $3$.
|
||||
|
||||
Якщо всі плитки, для яких $PD(n) = 3$, перераховані в порядку зростання для формування послідовності, то 10-та плитка буде 271.
|
||||
|
||||
Знайдіть 2000-ну плитку в цій послідовності.
|
||||
|
||||
# --hints--
|
||||
|
||||
`hexagonalTile()` повинен повернути `14516824220`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(hexagonalTile(), 14516824220);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function hexagonalTile() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
hexagonalTile();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3ef1000cf542c50ff01
|
||||
title: 'Завдання 129: Подільність реп''юніта'
|
||||
challengeType: 5
|
||||
forumTopicId: 301756
|
||||
dashedName: problem-129-repunit-divisibility
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Число, що повністю складається з одиниць, називається реп'юнітом. Визначимо, що $R(k)$ є реп'юнітом довжини $k$; наприклад, $R(6) = 111111$.
|
||||
|
||||
Враховуючи, що $n$ є цілим додатним числом і $GCD(n, 10) = 1$, можна бачити, що завжди існує значення $k$, для якого $R(k)$ ділиться на $n$, і нехай $A(n)$ буде найменшим таким значенням $k$; наприклад, $A(7) = 6$ і $A(41) = 5$.
|
||||
|
||||
Найменше значення $n$, для якого $A(n)$ спочатку перевищує десять, дорівнює 17.
|
||||
|
||||
Знайдіть найменше значення $n$, для якого $A(n)$ спочатку перевищує мільйон.
|
||||
|
||||
# --hints--
|
||||
|
||||
`repunitDivisibility()` повинен повернути `1000023`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(repunitDivisibility(), 1000023);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function repunitDivisibility() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
repunitDivisibility();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,286 @@
|
||||
---
|
||||
id: 5900f37a1000cf542c50fe8c
|
||||
title: 'Завдання 13: Велика сума'
|
||||
challengeType: 5
|
||||
forumTopicId: 301757
|
||||
dashedName: problem-13-large-sum
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Опрацюйте перші десять цифр суми наступних ста 50-значних чисел.
|
||||
|
||||
<div style='padding-left: 4em;'>
|
||||
37107287533902102798797998220837590246510135740250<br>
|
||||
46376937677490009712648124896970078050417018260538<br>
|
||||
74324986199524741059474233309513058123726617309629<br>
|
||||
91942213363574161572522430563301811072406154908250<br>
|
||||
23067588207539346171171980310421047513778063246676<br>
|
||||
89261670696623633820136378418383684178734361726757<br>
|
||||
28112879812849979408065481931592621691275889832738<br>
|
||||
44274228917432520321923589422876796487670272189318<br>
|
||||
47451445736001306439091167216856844588711603153276<br>
|
||||
70386486105843025439939619828917593665686757934951<br>
|
||||
62176457141856560629502157223196586755079324193331<br>
|
||||
64906352462741904929101432445813822663347944758178<br>
|
||||
92575867718337217661963751590579239728245598838407<br>
|
||||
58203565325359399008402633568948830189458628227828<br>
|
||||
80181199384826282014278194139940567587151170094390<br>
|
||||
35398664372827112653829987240784473053190104293586<br>
|
||||
86515506006295864861532075273371959191420517255829<br>
|
||||
71693888707715466499115593487603532921714970056938<br>
|
||||
54370070576826684624621495650076471787294438377604<br>
|
||||
53282654108756828443191190634694037855217779295145<br>
|
||||
36123272525000296071075082563815656710885258350721<br>
|
||||
45876576172410976447339110607218265236877223636045<br>
|
||||
17423706905851860660448207621209813287860733969412<br>
|
||||
81142660418086830619328460811191061556940512689692<br>
|
||||
51934325451728388641918047049293215058642563049483<br>
|
||||
62467221648435076201727918039944693004732956340691<br>
|
||||
15732444386908125794514089057706229429197107928209<br>
|
||||
55037687525678773091862540744969844508330393682126<br>
|
||||
18336384825330154686196124348767681297534375946515<br>
|
||||
80386287592878490201521685554828717201219257766954<br>
|
||||
78182833757993103614740356856449095527097864797581<br>
|
||||
16726320100436897842553539920931837441497806860984<br>
|
||||
48403098129077791799088218795327364475675590848030<br>
|
||||
87086987551392711854517078544161852424320693150332<br>
|
||||
59959406895756536782107074926966537676326235447210<br>
|
||||
69793950679652694742597709739166693763042633987085<br>
|
||||
41052684708299085211399427365734116182760315001271<br>
|
||||
65378607361501080857009149939512557028198746004375<br>
|
||||
35829035317434717326932123578154982629742552737307<br>
|
||||
94953759765105305946966067683156574377167401875275<br>
|
||||
88902802571733229619176668713819931811048770190271<br>
|
||||
25267680276078003013678680992525463401061632866526<br>
|
||||
36270218540497705585629946580636237993140746255962<br>
|
||||
24074486908231174977792365466257246923322810917141<br>
|
||||
91430288197103288597806669760892938638285025333403<br>
|
||||
34413065578016127815921815005561868836468420090470<br>
|
||||
23053081172816430487623791969842487255036638784583<br>
|
||||
11487696932154902810424020138335124462181441773470<br>
|
||||
63783299490636259666498587618221225225512486764533<br>
|
||||
67720186971698544312419572409913959008952310058822<br>
|
||||
95548255300263520781532296796249481641953868218774<br>
|
||||
76085327132285723110424803456124867697064507995236<br>
|
||||
37774242535411291684276865538926205024910326572967<br>
|
||||
23701913275725675285653248258265463092207058596522<br>
|
||||
29798860272258331913126375147341994889534765745501<br>
|
||||
18495701454879288984856827726077713721403798879715<br>
|
||||
38298203783031473527721580348144513491373226651381<br>
|
||||
34829543829199918180278916522431027392251122869539<br>
|
||||
40957953066405232632538044100059654939159879593635<br>
|
||||
29746152185502371307642255121183693803580388584903<br>
|
||||
41698116222072977186158236678424689157993532961922<br>
|
||||
62467957194401269043877107275048102390895523597457<br>
|
||||
23189706772547915061505504953922979530901129967519<br>
|
||||
86188088225875314529584099251203829009407770775672<br>
|
||||
11306739708304724483816533873502340845647058077308<br>
|
||||
82959174767140363198008187129011875491310547126581<br>
|
||||
97623331044818386269515456334926366572897563400500<br>
|
||||
42846280183517070527831839425882145521227251250327<br>
|
||||
55121603546981200581762165212827652751691296897789<br>
|
||||
32238195734329339946437501907836945765883352399886<br>
|
||||
75506164965184775180738168837861091527357929701337<br>
|
||||
62177842752192623401942399639168044983993173312731<br>
|
||||
32924185707147349566916674687634660915035914677504<br>
|
||||
99518671430235219628894890102423325116913619626622<br>
|
||||
73267460800591547471830798392868535206946944540724<br>
|
||||
76841822524674417161514036427982273348055556214818<br>
|
||||
97142617910342598647204516893989422179826088076852<br>
|
||||
87783646182799346313767754307809363333018982642090<br>
|
||||
10848802521674670883215120185883543223812876952786<br>
|
||||
71329612474782464538636993009049310363619763878039<br>
|
||||
62184073572399794223406235393808339651327408011116<br>
|
||||
66627891981488087797941876876144230030984490851411<br>
|
||||
60661826293682836764744779239180335110989069790714<br>
|
||||
85786944089552990653640447425576083659976645795096<br>
|
||||
66024396409905389607120198219976047599490197230297<br>
|
||||
64913982680032973156037120041377903785566085089252<br>
|
||||
16730939319872750275468906903707539413042652315011<br>
|
||||
94809377245048795150954100921645863754710598436791<br>
|
||||
78639167021187492431995700641917969777599028300699<br>
|
||||
15368713711936614952811305876380278410754449733078<br>
|
||||
40789923115535562561142322423255033685442488917353<br>
|
||||
44889911501440648020369068063960672322193204149535<br>
|
||||
41503128880339536053299340368006977710650566631954<br>
|
||||
81234880673210146739058568557934581403627822703280<br>
|
||||
82616570773948327592232845941706525094512325230608<br>
|
||||
22918802058777319719839450180888072429661980811197<br>
|
||||
77158542502016545090413245809786882778948721859617<br>
|
||||
72107838435069186155435662884062257473692284509516<br>
|
||||
20849603980134001723930671666823555245252804609722<br>
|
||||
53503534226472524250874054075591789781264330331690<br>
|
||||
</div>
|
||||
|
||||
# --hints--
|
||||
|
||||
`largeSum(testNums)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof largeSum(testNums) === 'number');
|
||||
```
|
||||
|
||||
`largeSum(testNums)` має повернути 8348422521.
|
||||
|
||||
```js
|
||||
assert.strictEqual(largeSum(testNums), 8348422521);
|
||||
```
|
||||
|
||||
`largeSum(fiftyDigitNums)` має повернути 5537376230.
|
||||
|
||||
```js
|
||||
assert.strictEqual(largeSum(fiftyDigitNums), 5537376230);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --before-user-code--
|
||||
|
||||
```js
|
||||
const fiftyDigitNums = [
|
||||
'37107287533902102798797998220837590246510135740250',
|
||||
'46376937677490009712648124896970078050417018260538',
|
||||
'74324986199524741059474233309513058123726617309629',
|
||||
'91942213363574161572522430563301811072406154908250',
|
||||
'23067588207539346171171980310421047513778063246676',
|
||||
'89261670696623633820136378418383684178734361726757',
|
||||
'28112879812849979408065481931592621691275889832738',
|
||||
'44274228917432520321923589422876796487670272189318',
|
||||
'47451445736001306439091167216856844588711603153276',
|
||||
'70386486105843025439939619828917593665686757934951',
|
||||
'62176457141856560629502157223196586755079324193331',
|
||||
'64906352462741904929101432445813822663347944758178',
|
||||
'92575867718337217661963751590579239728245598838407',
|
||||
'58203565325359399008402633568948830189458628227828',
|
||||
'80181199384826282014278194139940567587151170094390',
|
||||
'35398664372827112653829987240784473053190104293586',
|
||||
'86515506006295864861532075273371959191420517255829',
|
||||
'71693888707715466499115593487603532921714970056938',
|
||||
'54370070576826684624621495650076471787294438377604',
|
||||
'53282654108756828443191190634694037855217779295145',
|
||||
'36123272525000296071075082563815656710885258350721',
|
||||
'45876576172410976447339110607218265236877223636045',
|
||||
'17423706905851860660448207621209813287860733969412',
|
||||
'81142660418086830619328460811191061556940512689692',
|
||||
'51934325451728388641918047049293215058642563049483',
|
||||
'62467221648435076201727918039944693004732956340691',
|
||||
'15732444386908125794514089057706229429197107928209',
|
||||
'55037687525678773091862540744969844508330393682126',
|
||||
'18336384825330154686196124348767681297534375946515',
|
||||
'80386287592878490201521685554828717201219257766954',
|
||||
'78182833757993103614740356856449095527097864797581',
|
||||
'16726320100436897842553539920931837441497806860984',
|
||||
'48403098129077791799088218795327364475675590848030',
|
||||
'87086987551392711854517078544161852424320693150332',
|
||||
'59959406895756536782107074926966537676326235447210',
|
||||
'69793950679652694742597709739166693763042633987085',
|
||||
'41052684708299085211399427365734116182760315001271',
|
||||
'65378607361501080857009149939512557028198746004375',
|
||||
'35829035317434717326932123578154982629742552737307',
|
||||
'94953759765105305946966067683156574377167401875275',
|
||||
'88902802571733229619176668713819931811048770190271',
|
||||
'25267680276078003013678680992525463401061632866526',
|
||||
'36270218540497705585629946580636237993140746255962',
|
||||
'24074486908231174977792365466257246923322810917141',
|
||||
'91430288197103288597806669760892938638285025333403',
|
||||
'34413065578016127815921815005561868836468420090470',
|
||||
'23053081172816430487623791969842487255036638784583',
|
||||
'11487696932154902810424020138335124462181441773470',
|
||||
'63783299490636259666498587618221225225512486764533',
|
||||
'67720186971698544312419572409913959008952310058822',
|
||||
'95548255300263520781532296796249481641953868218774',
|
||||
'76085327132285723110424803456124867697064507995236',
|
||||
'37774242535411291684276865538926205024910326572967',
|
||||
'23701913275725675285653248258265463092207058596522',
|
||||
'29798860272258331913126375147341994889534765745501',
|
||||
'18495701454879288984856827726077713721403798879715',
|
||||
'38298203783031473527721580348144513491373226651381',
|
||||
'34829543829199918180278916522431027392251122869539',
|
||||
'40957953066405232632538044100059654939159879593635',
|
||||
'29746152185502371307642255121183693803580388584903',
|
||||
'41698116222072977186158236678424689157993532961922',
|
||||
'62467957194401269043877107275048102390895523597457',
|
||||
'23189706772547915061505504953922979530901129967519',
|
||||
'86188088225875314529584099251203829009407770775672',
|
||||
'11306739708304724483816533873502340845647058077308',
|
||||
'82959174767140363198008187129011875491310547126581',
|
||||
'97623331044818386269515456334926366572897563400500',
|
||||
'42846280183517070527831839425882145521227251250327',
|
||||
'55121603546981200581762165212827652751691296897789',
|
||||
'32238195734329339946437501907836945765883352399886',
|
||||
'75506164965184775180738168837861091527357929701337',
|
||||
'62177842752192623401942399639168044983993173312731',
|
||||
'32924185707147349566916674687634660915035914677504',
|
||||
'99518671430235219628894890102423325116913619626622',
|
||||
'73267460800591547471830798392868535206946944540724',
|
||||
'76841822524674417161514036427982273348055556214818',
|
||||
'97142617910342598647204516893989422179826088076852',
|
||||
'87783646182799346313767754307809363333018982642090',
|
||||
'10848802521674670883215120185883543223812876952786',
|
||||
'71329612474782464538636993009049310363619763878039',
|
||||
'62184073572399794223406235393808339651327408011116',
|
||||
'66627891981488087797941876876144230030984490851411',
|
||||
'60661826293682836764744779239180335110989069790714',
|
||||
'85786944089552990653640447425576083659976645795096',
|
||||
'66024396409905389607120198219976047599490197230297',
|
||||
'64913982680032973156037120041377903785566085089252',
|
||||
'16730939319872750275468906903707539413042652315011',
|
||||
'94809377245048795150954100921645863754710598436791',
|
||||
'78639167021187492431995700641917969777599028300699',
|
||||
'15368713711936614952811305876380278410754449733078',
|
||||
'40789923115535562561142322423255033685442488917353',
|
||||
'44889911501440648020369068063960672322193204149535',
|
||||
'41503128880339536053299340368006977710650566631954',
|
||||
'81234880673210146739058568557934581403627822703280',
|
||||
'82616570773948327592232845941706525094512325230608',
|
||||
'22918802058777319719839450180888072429661980811197',
|
||||
'77158542502016545090413245809786882778948721859617',
|
||||
'72107838435069186155435662884062257473692284509516',
|
||||
'20849603980134001723930671666823555245252804609722',
|
||||
'53503534226472524250874054075591789781264330331690'
|
||||
];
|
||||
|
||||
const testNums = [
|
||||
'37107287533902102798797998220837590246510135740250',
|
||||
'46376937677490009712648124896970078050417018260538'
|
||||
];
|
||||
```
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function largeSum(arr) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Only change code above this line
|
||||
|
||||
const testNums = [
|
||||
'37107287533902102798797998220837590246510135740250',
|
||||
'46376937677490009712648124896970078050417018260538'
|
||||
];
|
||||
|
||||
largeSum(testNums);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function largeSum(arr) {
|
||||
|
||||
let sum = 0;
|
||||
|
||||
arr.forEach(function(num) {
|
||||
sum += parseInt(num, 10);
|
||||
});
|
||||
|
||||
sum = sum.toString(10);
|
||||
|
||||
sum = sum.substr(0, 1) + sum.substr(2);
|
||||
|
||||
let firstTen = sum.slice(0, 10);
|
||||
return parseInt(firstTen, 10);
|
||||
}
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f3ee1000cf542c50ff00
|
||||
title: 'Завдання 130: Складні числа з властивостями простих реп''юнітів'
|
||||
challengeType: 5
|
||||
forumTopicId: 301758
|
||||
dashedName: problem-130-composites-with-prime-repunit-property
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Реп'юніти — числа, що складається лише з одиниць. Нехай $R(k)$ — реп'юніт, його довжина — $k$; наприклад, $R(6) = 111111$.
|
||||
|
||||
За умови, що $n$ — ціле додатнє число і $GCD(n, 10) = 1$, бачимо, що завжди існує значення $k$, для якого $R(k)$ ділиться на $n$, і нехай $A(n)$ буде найменшим таким значенням $k$; наприклад, $A(7) = 6$ і $A(41) = 5$.
|
||||
|
||||
Дано, що для всіх простих чисел $p > 5$, що $p - 1$ ділиться на $A(p)$. Наприклад, коли $p = 41, A(41) = 5$, а 40 ділиться на 5.
|
||||
|
||||
Однак, існує не багато складних чисел для яких справджується ця умова; перші п'ять прикладів - це 91, 259, 451, 481 і 703.
|
||||
|
||||
Знайдіть суму перших двадцяти п’яти складених значень $n$, для яких $GCD (n, 10) = 1$ і $n − 1$ ділиться на $A(n)$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`compositeRepunit()` повинен повертатись як `149253`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(compositeRepunit(), 149253);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function compositeRepunit() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
compositeRepunit();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3ef1000cf542c50ff02
|
||||
title: 'Завдання 131: властивості куба простого числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301759
|
||||
dashedName: problem-131-prime-cube-partnership
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Існують деякі прості значення ($p$), для яких існує таке ціле додатнє число ($n$), за яких вираз $n^3 + n^{2}p$ є ідеальним кубом.
|
||||
|
||||
Наприклад, якщо $p = 19,\\ 8^3 + 8^2 × 19 = {12}^3$.
|
||||
|
||||
Мабуть, найдивовижніше те, що значення $n$ є унікальним для кожного простого числа з цією властивістю, і таких простих чисел, що менші за сто, всього чотири.
|
||||
|
||||
Скільки простих чисел, що менші за один мільйон, мають цю вражаючу властивість?
|
||||
|
||||
# --hints--
|
||||
|
||||
Функція `primeCubePartnership()` має повертатися як `173`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primeCubePartnership(), 173);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function primeCubePartnership() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
primeCubePartnership();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,42 @@
|
||||
---
|
||||
id: 5900f3f11000cf542c50ff03
|
||||
title: 'Завдання 132: Великі множники реп’юнітів'
|
||||
challengeType: 5
|
||||
forumTopicId: 301760
|
||||
dashedName: problem-132-large-repunit-factors
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Реп'юніт — число, що повністю складається з одиниць. Нехай $R(k) — реп'юніт з довжиною $k$.
|
||||
|
||||
Наприклад, $R(10) = 1111111111 = 11 × 41 × 271 × 9091$, а сума цих простих множників – 9414.
|
||||
|
||||
Знайдіть суму перших сорока простих множників $R({10}^9)$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`largeRepunitFactors()` становить `843296`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(largeRepunitFactors(), 843296);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function largeRepunitFactors() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
largeRepunitFactors();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3f21000cf542c50ff04
|
||||
title: 'Завдання 133: Реп''юніти, на які не можна поділити націло'
|
||||
challengeType: 5
|
||||
forumTopicId: 301761
|
||||
dashedName: problem-133-repunit-nonfactors
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Реп'юніт — число, що повністю складається з одиниць. Нехай $R(k)$ — реп'юніт з довжини $k$; наприклад, $R(6) = 111111$.
|
||||
|
||||
Давайте розглянемо реп'юніт: $R({10}^n)$.
|
||||
|
||||
Хоча $R(10)$, $R(100)$, або $R(1000)$ не ділиться на 17 націло, $R(10000)$ ділиться на 17. Однак немає значення n для яких $R({10}^n)$ ділиться на 19 націло. Пам'ятайте, що 11, 17, 41, та 73 — це єдині чотири простих числа менші ста, які можуть бути множниками $R({10}^n) $.
|
||||
|
||||
Знайдіть суму всіх простих чисел нижче ста тисяч, які не можуть бути множниками $R({10}^n)$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`repunitNonfactors()` має повернути число `453647705`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(repunitNonfactors(), 453647705);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function repunitNonfactors() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
repunitNonfactors();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,42 @@
|
||||
---
|
||||
id: 5900f3f21000cf542c50ff05
|
||||
title: 'Завдання 134: З’єднання простих чисел'
|
||||
challengeType: 5
|
||||
forumTopicId: 301762
|
||||
dashedName: problem-134-prime-pair-connection
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо наступні прості числа $p_1 = 19$ та $p_2 = 23$. Можна перевірити, що 1219 є найменшим числом, у якому останні цифри формуються $p_1$, а також ділиться на $p_2$.
|
||||
|
||||
Насправді, за винятком $p_1 = 3$ та $p_2 = 5$, для кожної пари наступних простих чисел $p_2 > p_1$, існують значення $n$, у яких останні цифри формуються $p_1$, а $n$ ділиться на $p_2$. Нехай $S$ — найменше із цих значень $n$.
|
||||
|
||||
Знайдіть $\sum{S}$ для кожної пари наступних простих чисел, якщо $5 ≤ p_1 ≤ 1000000$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`primePairConnection()` повинно повертати число `18613426663617120`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primePairConnection(), 18613426663617120);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function primePairConnection() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
primePairConnection();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3f31000cf542c50ff06
|
||||
title: 'Завдання 135: Числа з подібною ознакою'
|
||||
challengeType: 5
|
||||
forumTopicId: 301763
|
||||
dashedName: problem-135-same-differences
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Дано, цілі додатні числа, $x$, $y$, та $z$ є послідовними членами арифметичної прогресії; найменше значення натурального числа $n$, для якого рівняння $x^2 − y^2 − z^2 = n$ має два рішення, $n = 27$:
|
||||
|
||||
$$34^2 − 27^2 − 20^2 = 12^2 − 9^2 − 6^2 = 27$$
|
||||
|
||||
Виявляється, що $n = 1155$ — це найменше значення, яке можна отримати десятьма способами.
|
||||
|
||||
Скільки значень $n$ менших одного мільйона, можна знайти десятьма різними способами?
|
||||
|
||||
# --hints--
|
||||
|
||||
`sameDifferences()` повинен повернути число `4989`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(sameDifferences(), 4989);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function sameDifferences() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
sameDifferences();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f3f51000cf542c50ff07
|
||||
title: 'Завдання 136: Рівняння з одним варіантом вирішення'
|
||||
challengeType: 5
|
||||
forumTopicId: 301764
|
||||
dashedName: problem-136-singleton-difference
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Цілі додатні числа, $x$, $y$ і $z$, є послідовними членами арифметичної прогресії. Дано: $n$ — ціле додатнє число, рівняння $x^2 - y^2 - z^2 = n$ має одне рішення, якщо $n = 20$:
|
||||
|
||||
$$13^2 − 10^2 − 7^2 = 20$$
|
||||
|
||||
Існує двадцять п’ять значень $n$ нижче ста, для яких рівняння має одне рішення.
|
||||
|
||||
Скільки значень $n$, які менші за п’ятдесят мільйонів, мають рівно одне рішення?
|
||||
|
||||
# --hints--
|
||||
|
||||
`singletonDifference()` повинен повертати число `2544559`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(singletonDifference(), 2544559);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function singletonDifference() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
singletonDifference();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,58 @@
|
||||
---
|
||||
id: 5900f3f51000cf542c50ff08
|
||||
title: 'Завдання 137: Золоті самородки Фібоначчі'
|
||||
challengeType: 5
|
||||
forumTopicId: 301765
|
||||
dashedName: problem-137-fibonacci-golden-nuggets
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо нескінченний поліноміальний ряд $A_{F}(x) = xF_1 + x^2F_2 + x^3F_3 + \ldots$, де $F_k$ — $k$й член послідовності Фібоначчі: $1, 2, 3, 5, 8, \ldots$; тобто, $F_k = F_{k - 1} + F_{k − 2}, F_1 = 1$ та $F_2 = 1$.
|
||||
|
||||
Нас цікавлять значення $x$, для яких $A_{F}(x)$ є додатнім цілим числом.
|
||||
|
||||
Дивовижно,
|
||||
|
||||
$$\begin{align} A_F(\frac{1}{2}) & = (\frac{1}{2}) × 1 + {(\frac{1}{2})}^2 × 1 + {(\frac{1}{2})}^3 × 2 + {(\frac{1}{2})}^4 × 3 + {(\frac{1}{2})}^5 × 5 + \cdots \\\\ & = \frac{1}{2} + \frac{1}{4} + \frac{2}{8} + \frac{3}{16} + \frac{5}{32} + \cdots \\\\ & = 2 \end{align}$$
|
||||
|
||||
Відповідні значення $x$ для перших п'яти натуральних чисел наведено нижче.
|
||||
|
||||
| $x$ | $A_F(x)$ |
|
||||
| --------------------------- | -------- |
|
||||
| $\sqrt{2} - 1$ | $1$ |
|
||||
| $\frac{1}{2}$ | $2$ |
|
||||
| $\frac{\sqrt{13} − 2}{3}$ | $3$ |
|
||||
| $\frac{\sqrt{89} − 5}{8}$ | $4$ |
|
||||
| $\frac{\sqrt{34} − 3}{5}$ | $5$ |
|
||||
|
||||
Назвемо $A_F(x)$ золотим самородком, якщо $x$ раціональне, оскільки вони трапляються дедалі рідше; наприклад, 10-й золотий самородок - 74049690.
|
||||
|
||||
Знайдіть 15-й золотий самородок.
|
||||
|
||||
# --hints--
|
||||
|
||||
`goldenNugget()` має повернути число `1120149658760`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(goldenNugget(), 1120149658760);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function goldenNugget() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
goldenNugget();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f3f61000cf542c50ff09
|
||||
title: 'Завдання 138: Особливі випадки рівнобедрених трикутників'
|
||||
challengeType: 5
|
||||
forumTopicId: 301766
|
||||
dashedName: problem-138-special-isosceles-triangles
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо рівнобедрений трикутник з довжиною основи $b = 16$ та катетами $L = 17$.
|
||||
|
||||
<img class="img-responsive center-block" alt="рівнобедрений трикутник з ребрами: L — два ребра з однаковою довжиною та основою трикутника — b; а висота трикутника — h від основи трикутника до кута між ребрами L" src="https://cdn.freecodecamp.org/curriculum/project-euler/special-isosceles-triangles.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
За теоремою Піфагора, бачимо, що висота трикутника, $h = \sqrt{{17}^2 - 8^2} = 15$, що на один менше довжини основи.
|
||||
|
||||
З $b = 272$ та $L = 305$ отримаємо $h = 273$, що на одиницю більше, ніж довжина основи, і це другий найменший рівнобедрений трикутник із властивістю $h = b ± 1$.
|
||||
|
||||
Знайдіть $\суму{L}$ для дванадцяти найменших рівнобедрених трикутників, для яких $h = b ± 1$ та $b$, $L$ — цілі натуральні числа.
|
||||
|
||||
# --hints--
|
||||
|
||||
`isoscelesTriangles()` повинен повернути число `1118049290473932`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(isoscelesTriangles(), 1118049290473932);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function isoscelesTriangles() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
isoscelesTriangles();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f3f71000cf542c50ff0a
|
||||
title: 'Завдання 139: Мозаїка Піфагора'
|
||||
challengeType: 5
|
||||
forumTopicId: 301767
|
||||
dashedName: problem-139-pythagorean-tiles
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай числами (a, b, c) представлені три сторони прямокутного трикутника з цілими сторонами. Можливо об'єднати чотири такі трикутники, щоб отримати квадрат з довжиною сторони c.
|
||||
|
||||
Наприклад, трикутники (3, 4, 5) можна об'єднати, утворивши квадрат зі стороною 5 і прорізом розмірами 1 на 1 в його середині, тоді бачимо, що квадрат зі стороною 5 можна покрити двадцятьма п'ятьма квадратними плитками зі сторонами 1 на 1.
|
||||
|
||||
<img class="img-responsive center-block" alt="два 5 x 5 квадратів: один складається з чотирьох 3x4x5 трикутників розташованих так, що посередині утворюється проріз 1x1; другий — з двадцяти п'яти квадратів 1x1" src="https://cdn.freecodecamp.org/curriculum/project-euler/pythagorean-tiles.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
У той же час, якщо використати трикутники (5, 12, 13), розміри прорізу становитимуть 7 на 7. Квадрат зі сторонами 13 на 13 не можливо заповнити квадратами зі сторонами 7 на 7.
|
||||
|
||||
Для скількох Піфагорових трикутників можливо таке покриття квадратної плиткою, якщо відомо, що периметр прямокутного трикутника менше ста мільйонів?
|
||||
|
||||
# --hints--
|
||||
|
||||
`pythagoreanTiles()` повинен повертати число `10057761`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(pythagoreanTiles(), 10057761);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function pythagoreanTiles() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
pythagoreanTiles();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,111 @@
|
||||
---
|
||||
id: 5900f37a1000cf542c50fe8d
|
||||
title: 'Завдання 14: Найдовша послідовність Коллатца'
|
||||
challengeType: 5
|
||||
forumTopicId: 301768
|
||||
dashedName: problem-14-longest-collatz-sequence
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Наступна ітераційна послідовність визначена для набору додатних цілих чисел:
|
||||
|
||||
<div style='padding-left: 4em;'><var>n</var> → <var>n</var>/2 (<var>n</var> є парним)</div>
|
||||
|
||||
<div style='padding-left: 4em;'><var>n</var> → 3<var>n</var> + 1 (<var>n</var> є непарним)</div>
|
||||
|
||||
Використовуючи правило вище та починаючи з 13, ми згенеруємо наступну послідовність:
|
||||
|
||||
<div style='text-align: center;'>13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1</div>
|
||||
|
||||
Можна побачити, що ця послідовність (починається з 13 та закінчується 1) містить 10 членів. Хоча це ще не доведено (проблема Коллатца), вважається, що кожне початкове число також закінчиться 1-ею.
|
||||
|
||||
Яке початкове число, під заданим лімітом - `limit`, створює найдовшу послідовність?
|
||||
|
||||
**Примітка:** Як тільки послідовність запуститься, значення можуть досягати більше `limit`.
|
||||
|
||||
# --hints--
|
||||
|
||||
`longestCollatzSequence(14)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof longestCollatzSequence(14) === 'number');
|
||||
```
|
||||
|
||||
`longestCollatzSequence(14)` має повернути 9.
|
||||
|
||||
```js
|
||||
assert.strictEqual(longestCollatzSequence(14), 9);
|
||||
```
|
||||
|
||||
`longestCollatzSequence(5847)` має повернути 3711.
|
||||
|
||||
```js
|
||||
assert.strictEqual(longestCollatzSequence(5847), 3711);
|
||||
```
|
||||
|
||||
`longestCollatzSequence(46500)` має повернути 35655.
|
||||
|
||||
```js
|
||||
assert.strictEqual(longestCollatzSequence(46500), 35655);
|
||||
```
|
||||
|
||||
`longestCollatzSequence(54512)` має повернути 52527.
|
||||
|
||||
```js
|
||||
assert.strictEqual(longestCollatzSequence(54512), 52527);
|
||||
```
|
||||
|
||||
`longestCollatzSequence(100000)` має повернути 77031.
|
||||
|
||||
```js
|
||||
assert.strictEqual(longestCollatzSequence(100000), 77031);
|
||||
```
|
||||
|
||||
`longestCollatzSequence(1000000)` має повернути 837799.
|
||||
|
||||
```js
|
||||
assert.strictEqual(longestCollatzSequence(1000000), 837799);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function longestCollatzSequence(limit) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
longestCollatzSequence(14);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function longestCollatzSequence(limit) {
|
||||
let longest = 1;
|
||||
let maxLength = 1;
|
||||
for (let i = Math.floor(limit / 2); i < limit; i++) {
|
||||
let len = colLen(i);
|
||||
if (len > maxLength) {
|
||||
longest = i;
|
||||
maxLength = len;
|
||||
}
|
||||
}
|
||||
return longest;
|
||||
}
|
||||
|
||||
const knownSequence = { '1': 1 };
|
||||
|
||||
function colLen(n) {
|
||||
if (knownSequence[n]) {
|
||||
return knownSequence[n];
|
||||
} else {
|
||||
const len = n % 2 === 0 ? colLen(n / 2) + 1 : colLen((3 * n + 1) / 2) + 2;
|
||||
knownSequence[n] = len;
|
||||
return len;
|
||||
}
|
||||
}
|
||||
```
|
@ -0,0 +1,52 @@
|
||||
---
|
||||
id: 5900f3fa1000cf542c50ff0c
|
||||
title: 'Завдання 140: Модифіковані золоті самородки Фібоначчі'
|
||||
challengeType: 5
|
||||
forumTopicId: 301769
|
||||
dashedName: problem-140-modified-fibonacci-golden-nuggets
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо нескінченний многочленний ряд $A_G(x) = xG_1 + x^2G_2 + x^3G_3 + \ cdots$, де $G_k$ - це $k$-й член рекурентного співвідношення другого порядку $G_k = G_ {k − 1} + G_ {k − 2}, G_1 = 1 $ і $G_2 = 4$; тобто $1, 4, 5, 9, 14, 23, \ldots$.
|
||||
|
||||
Для цієї задачі ми розглянемо значення $x$, для яких $A_G(x)$ є натуральним цілим числом.
|
||||
|
||||
Відповідні значення $x$ для перших п’яти натуральних чисел наведені нижче.
|
||||
|
||||
| $x$ | $A_G(x)$ |
|
||||
| ----------------------------- | -------- |
|
||||
| $\frac{\sqrt{5} − 1}{4}$ | $1$ |
|
||||
| $\frac{2}{5}$ | $2$ |
|
||||
| $\frac{\sqrt{22} − 2}{6}$ | $3$ |
|
||||
| $\frac{\sqrt{137} − 5}{14}$ | $4$ |
|
||||
| $\frac{1}{2}$ | $5$ |
|
||||
|
||||
Ми будемо називати $A_G(x)$ золотим самородком при умові що $x$ - раціональне, оскільки вони стають все рідшими; наприклад, 20-й золотий самородок - 211345365. Знайдіть суму перших тридцяти золотих самородків.
|
||||
|
||||
# --hints--
|
||||
|
||||
`modifiedGoldenNuggets()` має повернути `5673835352990`
|
||||
|
||||
```js
|
||||
assert.strictEqual(modifiedGoldenNuggets(), 5673835352990);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function modifiedGoldenNuggets() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
modifiedGoldenNuggets();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f3f91000cf542c50ff0b
|
||||
title: 'Завдання 141: Дослідження прогресивних чисел, n, які також є квадратами'
|
||||
challengeType: 5
|
||||
forumTopicId: 301770
|
||||
dashedName: problem-141-investigating-progressive-numbers-n-which-are-also-square
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Додатнє ціле число, $n$, ділимо на дільник $d$ і отримуємо частку $q$ та остачу $r$ відповідно. До того ж, $d$, $q$, і $r$ - це послідовні додатні цілі значення в геометричній послідовності, та не обов'язково в такому порядку.
|
||||
|
||||
Наприклад, 58, поділене на 6, має частку 9 і остачу 4. Також можна побачити, що 4, 6, 9 є послідовними значеннями в геометричній послідовності (спільне співвідношення $\frac{3}{2}$).
|
||||
|
||||
Ми називатимемо такі числа, $n$, прогресивними.
|
||||
|
||||
Деякі прогресивні числа такі, як 9 та 10404 = ${102}^2$, також є повними квадратами. Сума прогресивних повних квадратів нижче ста тисяч дорівнює 124657.
|
||||
|
||||
Знайдіть суму прогресивних повних квадратів менших за один трильйон (${10}^{12}$).
|
||||
|
||||
# --hints--
|
||||
|
||||
`progressivePerfectSquares()` має повернути`878454337159`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(progressivePerfectSquares(), 878454337159);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function progressivePerfectSquares() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
progressivePerfectSquares();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,38 @@
|
||||
---
|
||||
id: 5900f3fa1000cf542c50ff0d
|
||||
title: 'Завдання 142: Набір ідеального квадрата'
|
||||
challengeType: 5
|
||||
forumTopicId: 301771
|
||||
dashedName: problem-142-perfect-square-collection
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Знайдіть найменше число $x + y + z$ із такими цілими числами $x > y > z > 0$, щоб всі $x + y$, $x − y$, $x + z$, $x − z$, $y + z$, $y − z$ були ідеальними квадратами.
|
||||
|
||||
# --hints--
|
||||
|
||||
Функція `perfectSquareCollection()` повинна повертатися як `1006193`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(perfectSquareCollection(), 1006193);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function perfectSquareCollection() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
perfectSquareCollection();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f3fc1000cf542c50ff0e
|
||||
title: 'Завдання 143: Дослідження точок Торрічеллі'
|
||||
challengeType: 5
|
||||
forumTopicId: 301772
|
||||
dashedName: problem-143-investigating-the-torricelli-point-of-a-triangle
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай ABC буде трикутником з внутрішніми кутами меншими, ніж 120 градусів. Нехай Х буде будь-якою точкою всередині трикутника, а $XA = p$, $XC = q$, і $XB = r$.
|
||||
|
||||
Ферма запропонував Торрічеллі знайти таке розміщення Х, щоб p + q + r зводилось до мінімуму.
|
||||
|
||||
Торрічеллі зміг довести, що якщо рівносторонні трикутники AOB, BNC та AMC будуються з кожної сторони трикутника ABC, то описані навколо AOB, BNC та AMC кола будуть перетинатися в одній точці T, всередині трикутника. Крім того, він довів, що точка Т, названа Торрічеллі / Ферма, мінімізує $p + q + r$. Також можна помітити, що при мінімізації суми, $AN = BM = CO = p + q + r $ і AN, BM і CO також перетинаються в точці T.
|
||||
|
||||
<img class="img-responsive center-block" alt="рівносторонні трикутники AOB, BNC та AMC будуються з кожної сторони трикутника ABC; з описаними навколо AOB, BNC та AMC колами, які будуть перетинатися в одній точці T, всередині трикутника" src="https://cdn.freecodecamp.org/curriculum/project-euler/investigating-the-torricelli-point-of-a-triangle.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Якщо сума зведена до мінімуму і a, b, c, p, q та r - всі натуральні числа, ми будемо називати трикутник ABC трикутником Торрічеллі. Наприклад, $a = 399$, $b = 455$, $c = 511$ - приклад трикутника Торрічеллі з $p + q + r = 784$. Знайдіть суму всіх різних значень $p + q + r + r ≤ 120000$ для трикутників Торрічеллі.
|
||||
|
||||
# --hints--
|
||||
|
||||
`sumTorricelliTriangles()` має повернути`30758397`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(sumTorricelliTriangles(), 30758397);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function sumTorricelliTriangles() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
sumTorricelliTriangles();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,61 @@
|
||||
---
|
||||
id: 5900f3fc1000cf542c50ff0f
|
||||
title: 'Завдання 144: Дослідження множинних відображень лазерного променя'
|
||||
challengeType: 5
|
||||
forumTopicId: 301773
|
||||
dashedName: problem-144-investigating-multiple-reflections-of-a-laser-beam
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У лазерній фізиці "біла клітина" - це дзеркальна система, яка діє як лінія затримки для лазерного променя. Промінь проникає у клітину, відскакує від дзеркал, і, зрештою, повертається назад.
|
||||
|
||||
Конкретна біла клітина, яку ми розглянемо, - це еліпс із рівнянням $ 4 {x}^2 + y^2 = 100 $
|
||||
|
||||
Ділянка, що відповідає $ −0.01 ≤ x ≤ +0.01 $ у верхній частині, відсутня, що дозволяє світлу входити і виходити через отвір.
|
||||
|
||||
<div style="text-align: center">
|
||||
<img class="img-responsive center-block" alt="світловий промінь починається в точці (0,0, 10,1) і стрикається з дзеркалом в точці (1,4, -9,6)" src="https://cdn.freecodecamp.org/curriculum/project-euler/investigating-multiple-reflections-of-a-laser-beam-1.png" style="display: inline-block; background-color: white; padding: 10px;">
|
||||
<img class="img-responsive center-block" alt="анімація з першими 10 віддзеркаленнями променя" src="https://cdn.freecodecamp.org/curriculum/project-euler/investigating-multiple-reflections-of-a-laser-beam-2.gif" style="display: inline-block; background-color: white; padding: 10px;">
|
||||
</div><br>
|
||||
|
||||
Світловий промінь у цій задачі починається в точці (0,0, 10,1) безпосередньо біля білої клітини, і промінь спочатку стикається з дзеркалом в точці (1,4, -9,6).
|
||||
|
||||
Кожного разу, коли лазерний промінь потрапляє на поверхню еліпса, він дотримується звичного закону відбиття «кут падіння дорівнює куту відбиття» Тобто і промінь, що падає, і відбитий промінь, утворюють однаковий кут із нормаллю у точці падіння.
|
||||
|
||||
На малюнку зліва червона лінія показує перші дві точки дотику між лазерним променем та стінкою білої клітини; синя лінія показує лінію, дотичну до еліпса в точці падіння першого відскоку.
|
||||
|
||||
Кут нахилу m дотичної лінії в будь-якій точці (x, y) заданого еліпса: $m = ℉4 × \frac{x}{y}$
|
||||
|
||||
Нормаль — перпендикуляр до дотичної, що проходить через точку дотику.
|
||||
|
||||
Анімація праворуч показує перші 10 віддзеркалень променя.
|
||||
|
||||
Скільки разів промінь потрапляє на внутрішню поверхню білої клітини перед виходом?
|
||||
|
||||
# --hints--
|
||||
|
||||
`laserBeamReflections()` має повертати до`354`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(laserBeamReflections(), 354);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function laserBeamReflections() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
laserBeamReflections();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,42 @@
|
||||
---
|
||||
id: 5900f3fd1000cf542c50ff10
|
||||
title: 'Завдання 145: скільки існує оборотних чисел, які менші за один мільярд?'
|
||||
challengeType: 5
|
||||
forumTopicId: 301774
|
||||
dashedName: problem-145-how-many-reversible-numbers-are-there-below-one-billion
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Деякі додатні цілі числа $n$ мають властивість, що сума [ $n + reverse(n)$ ] складається з зовсім непарних (десяткових) цифр. Наприклад, $36 + 63 = 99$ та$409 + 904 = 1313$. Називатимемо такі числа оборотними; таким чином 36, 63, 409 і 904 є оборотними. Провідні нулі не можна використовувати в $n$ або $reverse(n)$.
|
||||
|
||||
Існують 120 оборотних чисел менших за тисячу.
|
||||
|
||||
Скільки існує оборотних чисел, що менші за один мільярд (${10}^9$)?
|
||||
|
||||
# --hints--
|
||||
|
||||
Функція `reversibleNumbers()` повинна повернути `608720`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(reversibleNumbers(), 608720);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function reversibleNumbers() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
reversibleNumbers();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,40 @@
|
||||
---
|
||||
id: 5900f3fe1000cf542c50ff11
|
||||
title: 'Завдання 146: дослідження моделі простих чисел'
|
||||
challengeType: 5
|
||||
forumTopicId: 301775
|
||||
dashedName: problem-146-investigating-a-prime-pattern
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Найменше натуральне число $n$ для якого числа $n^2 + 1$, $n^2 + 3$, $n^2 + 7$, $n^2 + 9$, $n^2 + 13$ і $n^2 + 27$ є послідовними простими числами - 10. Сума усіх таких цілих чисел $n$ менших за один мільйон становить 1242490.
|
||||
|
||||
Яка сума усіх таких цілих чисел $n$ менших за 150 мільйонів?
|
||||
|
||||
# --hints--
|
||||
|
||||
`primePattern()` має повернути `676333270`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(primePattern(), 676333270);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function primePattern() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
primePattern();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,48 @@
|
||||
---
|
||||
id: 5900f3ff1000cf542c50ff12
|
||||
title: 'Завдання 147: Прямокутники у перехресних сітках'
|
||||
challengeType: 5
|
||||
forumTopicId: 301776
|
||||
dashedName: problem-147-rectangles-in-cross-hatched-grids
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У сітці 3х2 всього може бути розташовано 37 різних прямокутників, як зазначено на ескізі.
|
||||
|
||||
<img class="img-responsive center-block" alt="способи розміщення різних прямокутників в сітці з перехресним штрихуванням розміром 3x2" src="https://cdn.freecodecamp.org/curriculum/project-euler/rectangles-in-cross-hatched-grids.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Є 5 сіток, менших, ніж 3х2, розміри яких (горизонтальні та вертикальні) є важливими: 1x1, 2x1, 3x1, 1x2 and 2x2. Якщо кожна з них перехресно заштрихована, то в менших сітках можна буде розмістити наступне число прямокутників:
|
||||
|
||||
$$\початок{array}{|c|c|} \hline 1 \times 1 & 1 \\\\ \hline 2 \times 1 & 4 \\\\ \hline 3 \times 1 & 8 \\\\ \hline 1 \times 2 & 4 \\\\ \hline 2 \times 2 & 18 \\\\ \hline \кінець{array}$$
|
||||
|
||||
Додаючи їх до 37 прямокутників з сітки розміром 3x2, загалом можна розмістити 72 різних прямокутники у сітках розміром 3x2 і менших.
|
||||
|
||||
Скільки різних прямокутників можна розмістити в межах сіток розміром 47x43 і менших?
|
||||
|
||||
# --hints--
|
||||
|
||||
`crossHatchedRectangles()` має повернути `846910284`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(crossHatchedRectangles(), 846910284);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function crossHatchedRectangles() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
crossHatchedRectangles();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,54 @@
|
||||
---
|
||||
id: 5900f4021000cf542c50ff14
|
||||
title: 'Завдання 148: Дослідження трикутника Паскаля'
|
||||
challengeType: 5
|
||||
forumTopicId: 301777
|
||||
dashedName: problem-148-exploring-pascals-triangle
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Ми можемо легко перевірити, що жоден елемент у перших семи рядах трикутника Паскаля не ділиться на 7:
|
||||
|
||||
```
|
||||
1
|
||||
1 1
|
||||
1 2 1
|
||||
1 3 3 1
|
||||
1 4 6 4 1
|
||||
1 5 10 10 5 1
|
||||
1 6 15 20 15 6 1
|
||||
```
|
||||
|
||||
Однак, якщо ми перевіряємо перші сто рядів, то виявимо, що лише 2361 з 5050 елементів не діляться на 7.
|
||||
|
||||
# --instructions--
|
||||
|
||||
Знайдіть кількість елементів, які не діляться на 7 у першому мільярді (${10}^9$) рядків трикутника Паскаля.
|
||||
|
||||
# --hints--
|
||||
|
||||
`entriesOfPascalsTriangle()` має повернути `2129970655314432`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(entriesOfPascalsTriangle(), 2129970655314432);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function entriesOfPascalsTriangle() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
entriesOfPascalsTriangle();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,54 @@
|
||||
---
|
||||
id: 5900f4021000cf542c50ff13
|
||||
title: 'Завдання 149. Пошук підпослідовності з максимальною сумою'
|
||||
challengeType: 5
|
||||
forumTopicId: 301778
|
||||
dashedName: problem-149-searching-for-a-maximum-sum-subsequence
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Дивлячись на таблицю нижче, легко переконатися, що максимально можлива сума суміжних чисел у будь-якому напрямку (горизонтальному, вертикальному, діагональному чи антидіагональному) становить $16 (= 8 + 7 + 1)$.
|
||||
|
||||
$$\begin{array}{|r|r|r|r|} \hline −2 & 5 & 3 & 2 \\\\ \hline 9 & −6 & 5 & 1 \\\\ \hline 3 & 2 & 7 & 3 \\\\ \hline −1 & 8 & −4 & 8 \\\\ \hline \end{array}$$
|
||||
|
||||
Тепер повторимо пошук, але тільки в набагато більшому масштабі:
|
||||
|
||||
Спочатку, згенеруйте чотири мільйони псевдовипадкових чисел, використовуючи конкретну форму того, що відомо як "генератор Фібоначчі з запізненням":
|
||||
|
||||
Для $1 ≤ k ≤ 55$, $s_k = (100003 − 200003k + 300007{k}^3) \\ (modulo\\ 1000000) − 500000$.
|
||||
|
||||
Для $56 ≤ k ≤ 4000000$, $s_k = (s_{k − 24} + s_{k − 55} + 1000000) \\ (modulo\\ 1000000) − 500000$.
|
||||
|
||||
Таким чином, $s_{10} = −393027$ та $s_{100} = 86613$.
|
||||
|
||||
Потім члени $s$ розташовуються в таблиці 2000 × 2000, використовуючи перші 2000 чисел для заповнення першого рядка (послідовно), наступні 2000 чисел - для заповнення другого рядка і так далі.
|
||||
|
||||
В результаті знайдіть найбільшу суму (будь-якої кількості) суміжних записів в будь-якому напрямку (горизонтальному, вертикальному, діагональному або антидіагональному).
|
||||
|
||||
# --hints--
|
||||
|
||||
`maximumSubSequence()` має повернути `52852124`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(maximumSubSequence(), 52852124);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function maximumSubSequence() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
maximumSubSequence();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,68 @@
|
||||
---
|
||||
id: 5900f37b1000cf542c50fe8e
|
||||
title: 'Завдання 15: Доріжки на сітці'
|
||||
challengeType: 5
|
||||
forumTopicId: 301780
|
||||
dashedName: problem-15-lattice-paths
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Починаючи з верхнього лівого кутка сітки 2×2, та маючи право рухатися вправо та вниз, є рівно 6 шляхів до нижнього правого кутка.
|
||||
|
||||
<img class="img-responsive center-block" alt="6 зображень з сітками 2 на 2 показують усі шляхи до нижнього правого кутка" src="https://cdn-media-1.freecodecamp.org/project-euler/1Atixoj.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Скільки таких шляхів є через задану сітку - `gridSize`?
|
||||
|
||||
# --hints--
|
||||
|
||||
`latticePaths(4)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof latticePaths(4) === 'number');
|
||||
```
|
||||
|
||||
`latticePaths(4)` має повернути 70.
|
||||
|
||||
```js
|
||||
assert.strictEqual(latticePaths(4), 70);
|
||||
```
|
||||
|
||||
`latticePaths(9)` має повернути 48620.
|
||||
|
||||
```js
|
||||
assert.strictEqual(latticePaths(9), 48620);
|
||||
```
|
||||
|
||||
`latticePaths(20)` має повернути 137846528820.
|
||||
|
||||
```js
|
||||
assert.strictEqual(latticePaths(20), 137846528820);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function latticePaths(gridSize) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
latticePaths(4);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function latticePaths(gridSize) {
|
||||
let paths = 1;
|
||||
|
||||
for (let i = 0; i < gridSize; i++) {
|
||||
paths *= (2 * gridSize) - i;
|
||||
paths /= i + 1;
|
||||
}
|
||||
return paths;
|
||||
}
|
||||
```
|
@ -0,0 +1,59 @@
|
||||
---
|
||||
id: 5900f4031000cf542c50ff15
|
||||
title: >-
|
||||
Завдання 150. Пошук трикутного масиву для меншого трикутника з мінімальною сумою
|
||||
challengeType: 5
|
||||
forumTopicId: 301781
|
||||
dashedName: problem-150-searching-a-triangular-array-for-a-sub-triangle-having-minimum-sum
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У трикутному масиві цілих додатних і від'ємних чисел ми хочемо знайти такий менший трикутник, сума чисел у якому була б найменшою.
|
||||
|
||||
У наведеному нижче прикладі можна легко перевірити, чи задовільняє виділений трикутник цій умові, маючи суму −42.
|
||||
|
||||
<img class="img-responsive center-block" alt="трикутний масив з позначеним трикутником із сумою -42" src="https://cdn.freecodecamp.org/curriculum/project-euler/searching-a-triangular-array-for-a-sub-triangle-having-minimum-sum.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Ми хочемо створити такий трикутний масив з тисячею рядків, тому ми генеруємо 500500 псевдовипадкових чисел $s_k$ у діапазоні $±2^{19}$, використовуючи тип генератора випадкових чисел (відомий як лінійний конгруентний метод) наступним чином:
|
||||
|
||||
$$\begin{align} t := & \\ 0\\\\ \text{for}\\ & k = 1\\ \text{up to}\\ k = 500500:\\\\ & t := (615949 × t + 797807)\\ \text{modulo}\\ 2^{20}\\\\ & s_k := t − 219\\\\ \end{align}$$
|
||||
|
||||
Таким чином: $s_1 = 273519$, $s_2 = −153582$, $s_3 = 450905$ і т. д.
|
||||
|
||||
Трикутний масив утворений з використанням псевдовипадкових чисел:
|
||||
|
||||
$$ s_1 \\\\ s_2\\;s_3 \\\\ s_4\\; s_5\\; s_6 \\\\ s_7\\; s_8\\; s_9\\; s_{10} \\\\ \ldots $$
|
||||
|
||||
Менші трикутники можуть починатися з будь-якого елемента масиву і сягати вниз як завгодно далеко (захоплюючи два елементи безпосередньо під ним з наступного ряду, три елементи безпосередньо під ним з наступного ряду і так далі).
|
||||
|
||||
"Сума меншого трикутника" визначається як сума всіх чисел, які він містить.
|
||||
|
||||
Знайдіть найменшу можливу суму меншого трикутника.
|
||||
|
||||
# --hints--
|
||||
|
||||
`smallestSubTriangleSum()` має повернути `-271248680`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(smallestSubTriangleSum(), -271248680);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function smallestSubTriangleSum() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
smallestSubTriangleSum();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,52 @@
|
||||
---
|
||||
id: 5900f4031000cf542c50ff16
|
||||
title: 'Завдання 151. Аркуші стандартних розмірів: середня очікувана кількість'
|
||||
challengeType: 5
|
||||
forumTopicId: 301782
|
||||
dashedName: problem-151-paper-sheets-of-standard-sizes-an-expected-value-problem
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Щотижня друкарня друкує 16 партій (завдань), і для кожної партії потрібен аркуш спеціального кольоропробного паперу формату A5.
|
||||
|
||||
Щоранку в понеділок бригадир відкриває новий конверт, який містить великий аркуш спеціального паперу розміром A1.
|
||||
|
||||
Він ділить його навпіл, таким чином отримуючи два аркуші розміром А2. Потім він розрізає один з них навпіл, щоб отримати два аркуші формату А3 і так далі, поки не отримає аркуш розміром А5, необхідний для першої партії тижня.
|
||||
|
||||
Усі невикористані аркуші кладуть назад у конверт.
|
||||
|
||||
<img class="img-responsive center-block" alt="Аркуш розміром A1 може бути поділений на аркуші форматом: A2, A3, A4 та два аркуші форматом A5" src="https://cdn.freecodecamp.org/curriculum/project-euler/paper-sheets-of-standard-sizes-an-expected-value-problem.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
На початку кожної наступної партії він навмання бере один аркуш паперу з конверта. Якщо він виявляється розміром А5, то використовує його. Якщо ж більший, то він повторює процедуру «розрізання навпіл», поки не отримає те, що йому потрібно, а решту аркушів повертає назад до конверта.
|
||||
|
||||
За виключенням першої та останньої партії, знайдіть очікувану кількість разів (протягом кожного тижня), коли бригадир знайде в конверті один аркуш.
|
||||
|
||||
Дайте відповідь, заокруглену до шести знаків після коми, використовуючи формат `x.xxxxxx`.
|
||||
|
||||
# --hints--
|
||||
|
||||
`expectedValueProblem()` має повернути `0.464399`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(expectedValueProblem(), 0.464399);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function expectedValueProblem() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
expectedValueProblem();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f4041000cf542c50ff17
|
||||
title: 'Завдання 152. Написання половини як суми обернених квадратів'
|
||||
challengeType: 5
|
||||
forumTopicId: 301783
|
||||
dashedName: problem-152-writing-one-half-as-a-sum-of-inverse-squares
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Існує два способи, щоб записати число $\frac{1}{2}$ як суму обернених квадратів, використовуючи різні цілі числа.
|
||||
|
||||
Наприклад, числа {2,3,4,5,7,12,15,20,28,35} можуть бути використані:
|
||||
|
||||
$$\frac{1}{2} = \frac{1}{2^2} + \frac{1}{3^2} + \frac{1}{4^2} + \frac{1}{5^2} + \frac{1}{7^2} + \frac{1}{{12}^2} + \frac{1}{{15}^2} + \frac{1}{{20}^2} + \frac{1}{{28}^2} + \frac{1}{{35}^2}$$
|
||||
|
||||
Насправді, використовуючи лише цілі числа від 2 до 45 включно, є три способи зробити це, інші два: {2,3,4,6,7,9,10,20,28,35,36,45} та {2,3,4,6,7,9,12,15,28,30,35,36,45}.
|
||||
|
||||
Скільки існує способів записати число $\frac{1}{2}$ у вигляді суми зворотних квадратів, використовуючи різні цілі числа від 2 до 80 включно?
|
||||
|
||||
# --hints--
|
||||
|
||||
`sumInverseSquares()` має повернути `301`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(sumInverseSquares(), 301);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function sumInverseSquares() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
sumInverseSquares();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,84 @@
|
||||
---
|
||||
id: 5900f4051000cf542c50ff18
|
||||
title: 'Завдання 153. Дослідження Гауссових цілих чисел'
|
||||
challengeType: 5
|
||||
forumTopicId: 301784
|
||||
dashedName: problem-153-investigating-gaussian-integers
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Як ми всі знаємо рівняння $x^2 = -1$ не має реальних розв'язків $x$.
|
||||
|
||||
Якщо підставити уявне число $i$, то це рівняння має два рішення: $x = i$ та $x = -i$.
|
||||
|
||||
У наступному випадку, рівняння {(x - 3)}^2 = -4$ має два складні рішення: $x = 3 + 2i$ і $x = 3 - 2i$, які називаються складним спряженими числами.
|
||||
|
||||
Числа $a + bi$ називаються комплексними числами.
|
||||
|
||||
Загалом $a + bi$ та $a - bi$ — спряжені числа. Гауссове ціле число є комплексним числом $a + bi$ таким чином, що і $a$, і $b$ є цілими числами.
|
||||
|
||||
Звичайні цілі числа також є простими Гауссовими цілими числами (з $b = 0$).
|
||||
|
||||
Щоб відрізняти їх від простих Гауссових чисел з $b ≠ 0$ ми називаємо такі цілі числа "раціональними цілими числами"
|
||||
|
||||
Просте Гауссове число називається дільником раціонального цілого числа $n$, якщо результат також є простим Гауссовим числом.
|
||||
|
||||
Наприклад, якщо поділити 5 на $1 + 2i$, можемо спростити наступним чином:
|
||||
|
||||
Помножте чисельник та знаменник на комплексне спряжене число $1 + 2i$: $1 - 2i$.
|
||||
|
||||
Отримаємо:
|
||||
|
||||
$$\frac{5}{1 + 2i} = \frac{5}{1 + 2i} \frac{1 - 2i}{1 - 2i} = \frac{5(1 - 2i)}{1 - {(2i)}^2} = \frac{5(1 - 2i)}{1 - (-4)} = \frac{5(1 - 2i)}{5} = 1 - 2i$$
|
||||
|
||||
Отже, $1 + 2i$ є дільником 5.
|
||||
|
||||
Зверніть увагу, що $1 + i$ не є дільником 5, оскільки:
|
||||
|
||||
$$\frac{5}{1 + i} = \frac{5}{2} - \frac{5}{2}i$$
|
||||
|
||||
Зверніть увагу, що якщо просте Гауссове ціле число ($a + bi$) є дільником раціонального цілого числа $n$, тоді його спряжене число ($a - bi$) також є дільником $n$. Фактично у числа 5 є шість дільників, такі, що їх формульна сума: {1, 1 + 2i, 1 - 2i, 2 + i, 2 - i, 5}.
|
||||
|
||||
Нижче наведена таблиця всіх дільників для перших п'яти додатних раціональних цілих чисел:
|
||||
|
||||
| n | Просте Гауссове ціле число з формульною сумою | Сума s(n) цих дільників |
|
||||
| - | --------------------------------------------- | ----------------------- |
|
||||
| 1 | 1 | 1 |
|
||||
| 2 | 1, 1 + i, 1 - i, 2 | 5 |
|
||||
| 3 | 1, 3 | 4 |
|
||||
| 4 | 1, 1 + i, 1 - i, 2, 2 + 2i, 2 - 2i, 4 | 13 |
|
||||
| 5 | 1, 1 + 2i, 1 - 2i, 2 + i, 2 - i, 5 | 12 |
|
||||
|
||||
Для дільників з додатною формульною сумою маємо: $\displaystyle\sum_{n=1}^5 s(n) = 35$.
|
||||
|
||||
Для $1 ≤ n ≤ {10}^5$, $\displaystyle\sum_{n = 1}^{10}^5} s(n) = 17924657155$.
|
||||
|
||||
Що таке $\displaystyle\sum_{n=1}^{{10}^8} s(n)$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`sumGaussianIntegers()` має повернути `17971254122360636`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(sumGaussianIntegers(), 17971254122360636);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function sumGaussianIntegers() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
sumGaussianIntegers();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f4071000cf542c50ff19
|
||||
title: 'Завдання 154. Знайомство з пірамідою Паскаля'
|
||||
challengeType: 5
|
||||
forumTopicId: 301785
|
||||
dashedName: problem-154-exploring-pascals-pyramid
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Трикутна піраміда побудована з використанням сферичних куль таким чином, що кожна кулька спирається рівно на три кульки наступного нижнього рівня.
|
||||
|
||||
<img class="img-responsive center-block" alt="трикутна піраміда складається з сферичних куль і налічує чотири рівні" src="https://cdn.freecodecamp.org/curriculum/project-euler/exploring-pascals-pyramid.png" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Потім ми обчислюємо кількість шляхів, що ведуть від вершини до кожної позиції: шлях починається з вершини і проходить вниз до кожної з трьох сфер безпосередньо під поточним розташуванням. Відповідно, кількість шляхів для досягнення певної позиції — це сума чисел безпосередньо над нею (залежно від положення, над нею може бути до трьох чисел).
|
||||
|
||||
У результаті чого ми отримуємо трикутник Паскаля, у якому цифри у кожному ряді n є біномінальними коефіцієнтами ${(x + y + z)}^n$.
|
||||
|
||||
Скільки коефіцієнтів у ряді ${(x + y + z)}^{200000} $ кратні ${10}^{12}$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`pascalsPyramid()` має повертати `479742450`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(pascalsPyramid(), 479742450);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function pascalsPyramid() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
pascalsPyramid();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,50 @@
|
||||
---
|
||||
id: 5900f4081000cf542c50ff1a
|
||||
title: 'Завдання 155: підрахунок кількості конденсаторів в електричних схемах'
|
||||
challengeType: 5
|
||||
forumTopicId: 301786
|
||||
dashedName: problem-155-counting-capacitor-circuits
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
В електричних схемах використовують конденсатори однакового значення — С.
|
||||
|
||||
Конденсатори можна з'єднати послідовно або паралельно, щоб утворити додаткові блоки, які потім можна з'єднати послідовно або паралельно з іншими конденсаторами або іншими додатковими блоками для утворення більших субблоків і так далі до кінцевої схеми.
|
||||
|
||||
Завдяки цій простій процедурі та кількості n однакових конденсаторів, ми можемо створити схеми з діапазоном різних загальних ємностей. Наприклад, використовуючи приблизно $n = 3$ конденсаторів, кожен з яких $60 μF$, ми можемо отримати наступні 7 різних загальних значень ємності:
|
||||
|
||||
<img class="img-responsive center-block" alt="приклади схем, які мають до трьох конденсаторів, кожен 60 мкФ" src="https://cdn.freecodecamp.org/curriculum/project-euler/counting-capacitor-circuits.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Якщо ми позначимо кількість різних значень загальної ємності як $D(n)$, які можна отримати при використанні близько $n$ однакових конденсаторів, діючи за простою процедурою, описаною вище, отримаємо: $D(1) = 1, D(2) = 3, D(3)=7, \ldots$
|
||||
|
||||
Знайдіть $D(18)$.
|
||||
|
||||
Нагадування: При паралельному з'єднанні конденсаторів $C_1$, $C_2$ загальна ємність становить $C_T = C_1 + C_2 + \cdots$, тоді як при послідовному з'єднанні загальна ємність визначається як $\frac{1}{C_T} = \frac{1}{C_1} + \frac{1}{C_2} + \cdots$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`capacitanceValues()` має повернути `3857447`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(capacitanceValues(), 3857447);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function capacitanceValues() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
capacitanceValues();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,68 @@
|
||||
---
|
||||
id: 5900f4091000cf542c50ff1b
|
||||
title: 'Завдання 156: підрахунок цифр'
|
||||
challengeType: 5
|
||||
forumTopicId: 301787
|
||||
dashedName: problem-156-counting-digits
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Починаючи з нуля, натуральні числа із основою 10 записуються так:
|
||||
|
||||
0 1 2 3 4 5 6 7 8 9 10 11 12....
|
||||
|
||||
Нехай цифра $d = 1$. Після запису кожного числа n, кількість отриманих чисел оновлюється й отримане число буде $f(n, 1)$. Перші значення lkz $f(n, 1)$ будіть такі:
|
||||
|
||||
| $n$ | $f(n, 1)$ |
|
||||
| --- | --------- |
|
||||
| 0 | 0 |
|
||||
| 1 | 1 |
|
||||
| 2 | 1 |
|
||||
| 3 | 1 |
|
||||
| 4 | 1 |
|
||||
| 5 | 1 |
|
||||
| 6 | 1 |
|
||||
| 7 | 1 |
|
||||
| 8 | 1 |
|
||||
| 9 | 1 |
|
||||
| 10 | 2 |
|
||||
| 11 | 4 |
|
||||
| 12 | 5 |
|
||||
|
||||
Зверніть увагу, що $f(n, 1)$ ніколи не дорівнює 3.
|
||||
|
||||
Отже, два перші розв'язки рівняння $f(n, 1) = n$ будуть $n = 0$ і $n = 1$. Наступне рішення буде $n = 199981$. Таким же чином функція $f(n, d)$ показує загальну кількість цифр d, що була записана після того, як число $n$ було написано.
|
||||
|
||||
Фактично, для кожної цифри $d ≠ 0$, 0 — це перше рішення для рівняння $f(n, d) = n$. Нехай $s(d)$ — сума усіх рішень, для яких $f(n, d) = n$.
|
||||
|
||||
Дано $s(1) = 22786974071$. Знайдіть $\sum{s(d)}$, якщо $1 ≤ d ≤ 9$.
|
||||
|
||||
Примітка: якщо для деяких $n$, $f(n, d) = n$ на більш ніж значення $d$, це значення $n$ знову враховується для кожного значення $d$, для яких $f(n, d) = n$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`countingDigits()` має повернути `21295121502550`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(countingDigits(), 21295121502550);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function countingDigits() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
countingDigits();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f4091000cf542c50ff1c
|
||||
title: 'Завдання 157: Розв''язування діофантових рівнянь'
|
||||
challengeType: 5
|
||||
forumTopicId: 301788
|
||||
dashedName: problem-157-solving-the-diophantine-equation
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо діофантові рівняння $\frac{1}{a} + \frac{1}{b} = \frac{p}{{10}^n}$ де $a$, $b$, $p$, $n$ — додатні цілі числа, а $a ≤ b$.
|
||||
|
||||
Якщо $n = 1$ дане рівняння має 20 розв'язків, показаних нижче:
|
||||
|
||||
$$\begin{array}{lllll} \frac{1}{1} + \frac{1}{1} = \frac{20}{10} & \frac{1}{1} + \frac{1}{2} = \frac{15}{10} & \frac{1}{1} + \frac{1}{5} = \frac{12}{10} & \frac{1}{1} + \frac{1}{10} = \frac{11}{10} & \frac{1}{2} + \frac{1}{2} = \frac{10}{10} \\\\ \frac{1}{2} + \frac{1}{5} = \frac{7}{10} & \frac{1}{2} + \frac{1}{10} = \frac{6}{10} & \frac{1}{3} + \frac{1}{6} = \frac{5}{10} & \frac{1}{3} + \frac{1}{15} = \frac{4}{10} & \frac{1}{4} + \frac{1}{4} = \frac{5}{10} \\\\ \frac{1}{4} + \frac{1}{4} = \frac{5}{10} & \frac{1}{5} + \frac{1}{5} = \frac{4}{10} & \frac{1}{5} + \frac{1}{10} = \frac{3}{10} & \frac{1}{6} + \frac{1}{30} = \frac{2}{10} & \frac{1}{10} + \frac{1}{10} = \frac{2}{10} \\\\ \frac{1}{11} + \frac{1}{110} = \frac{1}{10} & \frac{1}{12} + \frac{1}{60} = \frac{1}{10} & \frac{1}{14} + \frac{1}{35} = \frac{1}{10} & \frac{1}{15} + \frac{1}{30} = \frac{1}{10} & \frac{1}{20} + \frac{1}{20} = \frac{1}{10} \end{array}$$
|
||||
|
||||
Скільки розв'язків має це рівняння, якщо $1 ≤ n 9$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`diophantineEquation()` має повертати `53490`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(diophantineEquation(), 53490);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function diophantineEquation() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
diophantineEquation();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,54 @@
|
||||
---
|
||||
id: 5900f40a1000cf542c50ff1d
|
||||
title: >-
|
||||
Завдання 158: Дослідження рядкових типів, де лише один символ стоїть у лексикографічному порядку зліва від сусіднього символу
|
||||
challengeType: 5
|
||||
forumTopicId: 301789
|
||||
dashedName: >-
|
||||
problem-158-exploring-strings-for-which-only-one-character-comes-lexicographically-after-its-neighbour-to-the-left
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Якщо взяти три різні літери з 26 літер англійського алфавіту, то можна поділити алфавіт на рядкові типи із трьох символів.
|
||||
|
||||
Наприклад, 'abc', 'hat' та 'zyx'.
|
||||
|
||||
Якщо подивитись на ці три приклади, то у 'abc' два символи стоять зліва від сусіднього значення у лексикографічному порядку.
|
||||
|
||||
У 'hat' лише один символ стоїть зліва від сусіднього символу у лексикографічному порядку. У 'zyx' нуль символів стоять у лексикографічному порядку зліва від сусіда.
|
||||
|
||||
Усього є 10400 рядкових типів довжиною в 3 символи, де лише один символ стоїть у лексикографічному порядку відносно сусіднього символу зліва.
|
||||
|
||||
Розглянемо рядки $n ≤ 26$ різних символів алфавіту.
|
||||
|
||||
Для кожного $n$, $p(n)$ є певна кількість рядкових типів з довжиною $n$, де лише один символ стоїть у лексикографічному порядку відносно сусіда зліва.
|
||||
|
||||
Яке найбільше значення $p(n)$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`lexicographicNeighbours()` має повертати `409511334375`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(lexicographicNeighbours(), 409511334375);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function lexicographicNeighbours() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
lexicographicNeighbours();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,60 @@
|
||||
---
|
||||
id: 5900f40c1000cf542c50ff1e
|
||||
title: 'Завдання 159: цифровий корінь сум факторизації'
|
||||
challengeType: 5
|
||||
forumTopicId: 301790
|
||||
dashedName: problem-159-digital-root-sums-of-factorisations
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Складене число можна факторизувати різними способами.
|
||||
|
||||
Наприклад, за виключенням множення на один, 24 можна факторизувати 7 різними способами:
|
||||
|
||||
$$\begin{align} & 24 = 2 \times 2 \times 2 \times 3\\\\ & 24 = 2 \times 3 \times 4 \\\\ & 24 = 2 \times 2 \times 6 \\\\ & 24 = 4 \times 6 \\\\ & 24 = 3 \times 8 \\\\ & 24 = 2 \times 12 \\\\ & 24 = 24 \end{align}$$
|
||||
|
||||
Нагадаємо, що цифровий корінь числа в основі 10 знаходять додаванням цифр цього числа, повторюючи процес, поки число не буде менше ніж 10. Цифровий корінь 467 буде 8.
|
||||
|
||||
Digital Root Sum (DRS) — сума цифрових коренів окремих цифр числа. Графік нижче демонструє всі значення DRS для 24.
|
||||
|
||||
| Факторизація | Digital Root Sum |
|
||||
| ------------ | ---------------- |
|
||||
| 2x2x2x3 | 9 |
|
||||
| 2x3x4 | 9 |
|
||||
| 2x2x6 | 10 |
|
||||
| 4x6 | 10 |
|
||||
| 3x8 | 11 |
|
||||
| 2x12 | 5 |
|
||||
| 24 | 6 |
|
||||
|
||||
Найбільший Digital Root Sum для 24 це 11. Функція $mdrs(n)$ дозволяє визначити найбільший Digital Root Sum для $n$. Отже, $mdrs(24) = 11$.
|
||||
|
||||
Знайдіть $\sum{mdrs(n)}$ для $1 < n < 1,000,000$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`euler159()` має повертати `14489159`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(euler159(), 14489159);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function euler159() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
euler159();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,85 @@
|
||||
---
|
||||
id: 5900f37d1000cf542c50fe8f
|
||||
title: 'Завдання 16: Сума цифр степеня'
|
||||
challengeType: 5
|
||||
forumTopicId: 301791
|
||||
dashedName: problem-16-power-digit-sum
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
2<sup>15</sup> = 32768, а сума цифр цього числа дорівнює 3 + 2 + 7 + 6 + 8 = 26.
|
||||
|
||||
Яка сума цифр числа 2<sup><code>exponent</code></sup>?
|
||||
|
||||
# --hints--
|
||||
|
||||
`powerDigitSum(15)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof powerDigitSum(15) === 'number');
|
||||
```
|
||||
|
||||
`powerDigitSum(15)` має повернути число 26.
|
||||
|
||||
```js
|
||||
assert.strictEqual(powerDigitSum(15), 26);
|
||||
```
|
||||
|
||||
`powerDigitSum(128)` має повернути число 166.
|
||||
|
||||
```js
|
||||
assert.strictEqual(powerDigitSum(128), 166);
|
||||
```
|
||||
|
||||
`powerDigitSum(1000)` має повернути число 1366.
|
||||
|
||||
```js
|
||||
assert.strictEqual(powerDigitSum(1000), 1366);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function powerDigitSum(exponent) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
powerDigitSum(15);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function powerDigitSum(exponent) {
|
||||
const bigNum = [1];
|
||||
let sum = 0;
|
||||
|
||||
for (let i = 1; i <= exponent; i++) {
|
||||
let count = bigNum.length + 1;
|
||||
let overflow = 0;
|
||||
for (let j = 0; j < count; j++) {
|
||||
let digit = bigNum[j] || 0;
|
||||
digit = 2 * digit + overflow;
|
||||
|
||||
if (digit > 9) {
|
||||
digit -= 10;
|
||||
overflow = 1;
|
||||
} else {
|
||||
overflow = 0;
|
||||
}
|
||||
|
||||
bigNum[j] = digit;
|
||||
}
|
||||
}
|
||||
|
||||
bigNum.forEach(function(num) {
|
||||
return sum += num;
|
||||
});
|
||||
|
||||
return sum;
|
||||
}
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f40d1000cf542c50ff1f
|
||||
title: 'Задача 160: Факторіальні кінцеві цифри'
|
||||
challengeType: 5
|
||||
forumTopicId: 301794
|
||||
dashedName: problem-160-factorial-trailing-digits
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Для будь-якого $N$ нехай $f(Н)$ буде останніми п'ятьма цифрами перед кінцевими нулями в $N!$.
|
||||
|
||||
Наприклад,
|
||||
|
||||
$$\begin{align} & 9! = 362880 \\; \text{so} \\; f(9) = 36288 \\\\ & 10! = 3628800 \\; \text{so} \\; f(10) = 36288 \\\\ & 20! = 2432902008176640000 \\; \text{so} \\; f(20) = 17664 \end{align}$$
|
||||
|
||||
Знайдіть $f(1,000,000,000,000)$
|
||||
|
||||
# --hints--
|
||||
|
||||
`factorialTrailingDigits()` має повернути `16576`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(factorialTrailingDigits(), 16576);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function factorialTrailingDigits() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
factorialTrailingDigits();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,52 @@
|
||||
---
|
||||
id: 5900f40d1000cf542c50ff20
|
||||
title: 'Проблема 161: Тріоміни'
|
||||
challengeType: 5
|
||||
forumTopicId: 301795
|
||||
dashedName: problem-161-triominoes
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Тріоміно - це форма, що складається з трьох квадратів, з'єднаних за допомогою ребер.
|
||||
|
||||
Є дві основні форми:
|
||||
|
||||
<img class="img-responsive center-block" alt="дві основні форми тріомінів" src="https://cdn.freecodecamp.org/curriculum/project-euler/triominoes-1.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Існує шість можливих варіантів фігур:
|
||||
|
||||
<img class="img-responsive center-block" alt="форми тріомінів включно із варіантами" src="https://cdn.freecodecamp.org/curriculum/project-euler/triominoes-2.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Будь-яка таблиця з n на m, для якогї nxm ділиться на 3, може бути викладена тріомінами. Якщо ми розглядаємо також і плитки, що можуть бути отримані шляхом відбиття або обертання від іншої плитки, то існує 41 спосіб як таблицю 2 на 9 можна заповнити фігурами тріоміно:
|
||||
|
||||
<img class="img-responsive center-block" alt="анімація, що показує 41 спосіб заповнення таблиці 2 на 9 тріомінами" src="https://cdn.freecodecamp.org/curriculum/project-euler/triominoes-3.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Скількома способами таблицю 9 на 12 можна заповнити тріомінами таким чином?
|
||||
|
||||
# --hints--
|
||||
|
||||
`triominoes()` повинен повернутися як `20574308184277972`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(triominoes(), 20574308184277972);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function triominoes() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
triominoes();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,58 @@
|
||||
---
|
||||
id: 5900f40e1000cf542c50ff21
|
||||
title: 'Задача 162: Шістнадцяткові числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301796
|
||||
dashedName: problem-162-hexadecimal-numbers
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У шістнадцятковій системі числення числа представлені шістнадцятьма різними цифрами:
|
||||
|
||||
$$0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F$$
|
||||
|
||||
Шістнадцяткове число AF при написанні в десятковій системі дорівнює $10 \times 16 + 15 = 175$.
|
||||
|
||||
У трицифрових шістнадцяткових числах 10A, 1A0, A10, і A01, цифри: 0,1 та А - присутні у всіх випадках.
|
||||
|
||||
Як і числа, записані в десятковій системі, ми пишемо шістнадцяткові числа без початкових нулів.
|
||||
|
||||
Скільки шістнадцяткових чисел, що містять не більше шістнадцяти шістнадцяткових цифр, існує з усіма цифрами 0,1 і А, що присутні принаймні один раз?
|
||||
|
||||
Дайте відповідь шістнадцятковим числом в одному рядку.
|
||||
|
||||
**Примітка:** (А, В, C, D, E і F у верхньому регістрі, без будь-якого ведучого або плаваючого коду, який позначає число як шістнадцяткове та без ведучих нулів, наприклад, 1A3F, а не: 0x1a3f, $1A3F, #1A3F, 0000001A3F)
|
||||
|
||||
# --hints--
|
||||
|
||||
`hexadecimalNumbers()` має повернути рядок.
|
||||
|
||||
```js
|
||||
assert(typeof hexadecimalNumbers() === 'string');
|
||||
```
|
||||
|
||||
`hexadecimalNumbers()` s має повернути рядок `3D58725572C62302`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(hexadecimalNumbers(), '3D58725572C62302');
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function hexadecimalNumbers() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
hexadecimalNumbers();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,50 @@
|
||||
---
|
||||
id: 5900f40f1000cf542c50ff22
|
||||
title: 'Задача 163: Трикутники з перехресним штрихуванням'
|
||||
challengeType: 5
|
||||
forumTopicId: 301797
|
||||
dashedName: problem-163-cross-hatched-triangles
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо рівносторонній трикутник, у якому прямі лінії проведені від кожної вершини до середини протилежної сторони, наприклад, як на трикутнику розміру 1 на рисунку нижче.
|
||||
|
||||
<img class="img-responsive center-block" alt="трикутники розміру 1 і розміру 2" src="https://cdn.freecodecamp.org/curriculum/project-euler/cross-hatched-triangles.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Тепер у цьому трикутнику можна знайти шістнадцять трикутників різної форми, розміру, напряму чи розташування. Використовуючи трикутники розміру 1 як будівельні блоки, можна сформувати більші трикутники, такі як трикутник розміру 2 на рисунку вище. Тепер у трикутнику розміру 2 можна знайти сто чотири трикутники різної форми, розміру, напряму чи розташування.
|
||||
|
||||
Можна помітити, що трикутник розміру 2 складається з 4 будівельних блоків трикутника розміру 1. Трикутник розміру 3 складатиметься з 9 будівельних блоків трикутника розміру 1, а трикутник розміру $n$ складатиметься з $n^2$ будівельник блоків трикутника розміру 1.
|
||||
|
||||
Якщо позначити $T(n)$ як кількість трикутників, що містяться в трикутнику розміру $n$, тоді
|
||||
|
||||
$$\begin{align} & T(1) = 16 \\\\ & T(2) = 104 \end{align}$$
|
||||
|
||||
Знайдіть $T(36)$.
|
||||
|
||||
# --hints--
|
||||
|
||||
Функція `crossHatchedTriangles()` має повертатися як `343047`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(crossHatchedTriangles(), 343047);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function crossHatchedTriangles() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
crossHatchedTriangles();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,40 @@
|
||||
---
|
||||
id: 5900f4111000cf542c50ff23
|
||||
title: >-
|
||||
Завдання 164: Числа, для яких сума будь-яких трьох послідовних цифр не є більшою за задане значення
|
||||
challengeType: 5
|
||||
forumTopicId: 301798
|
||||
dashedName: >-
|
||||
problem-164-numbers-for-which-no-three-consecutive-digits-have-a-sum-greater-than-a-given-value
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Скільки 20-значних чисел $n$ (без жодного початкового нуля) існують так, що жодна з трьох послідовних цифр $n$ не має суми, більшої за 9?
|
||||
|
||||
# --hints--
|
||||
|
||||
`consecutiveDigitsSum()` повинен повертатися як `378158756814587`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(consecutiveDigitsSum(), 378158756814587);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function consecutiveDigitsSum() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
consecutiveDigitsSum();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,60 @@
|
||||
---
|
||||
id: 5900f4111000cf542c50ff24
|
||||
title: 'Задача 165: Перетини'
|
||||
challengeType: 5
|
||||
forumTopicId: 301799
|
||||
dashedName: problem-165-intersections
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Сегмент визначається лише двома кінцевими точками. Розглядаючи два відрізки лінії у планіметрії є три можливості: сегменти мають нуль точок, одну точку або нескінченно багато спільних точок.
|
||||
|
||||
Крім того, коли два відрізки мають лише одну спільну точку, це може бути той випадок, коли спільною точкою є кінцева точка або одного з окремих сегментів, або обох. Якщо спільна точка двох сегментів не є кінцевою точкою будь-якого із сегментів, то це внутрішня точка обох сегментів.
|
||||
|
||||
Ми назвемо спільну точку $T$ двох відрізків $L_1$ і $L_2$ справжньою точкою перетину $L_1$ і $L_2$, якщо $T$ є єдиною спільною точкою $L_1$ і $L_2$ і $T$ є внутрішньою точкою обох відрізків.
|
||||
|
||||
Розглянемо три сегменти $L_1$, $L_2$та $L_3$:
|
||||
|
||||
$\begin{align} & L_1: (27, 44) \\;\text{to}\\; (12, 32) \\\\ & L_2: (46, 53) \\;\tтекст{to}\\; (17, 62) \\\\ & L_3: (46, 70) \\;\tтекст{to}\\; (22, 40) \\\\ \end{align}$$
|
||||
|
||||
Можна перевірити, що відрізки ліній $L_2$ і $L_3$ мають справжню точку перетину. Ми зазначали, що, якщо одна з кінцевих точок $L_3$: (22, 40) лежить на $L_1$, це не вважається справжньою точкою перетину. $L_1$ і $L_2$ не мають спільної точки. Отже, на трьох відрізках прямої ми знаходимо одну справжню точку перетину.
|
||||
|
||||
Тепер зробімо те саме для 5000 прямих відрізків. З цією метою ми згенеруємо 20000 чисел, використовуючи так званий генератор псевдо-випадкових чисел «Blum Blum Shub».
|
||||
|
||||
$\begin{align} & s_0 = 290797 \\\\ & s_{n + 1} = s_n × s_n (\text{modulo}\\; 50515093) \\\\ & t_n = s_n (\text{modulo}\\; 500) \\\\ \end{align}$
|
||||
|
||||
Щоб створити кожен відрізок, ми використовуємо чотири послідовних числа $t_n$. Тобто перший відрізок дано:
|
||||
|
||||
($_t$1, $t_2$) до ($t_3$, $t_4$)
|
||||
|
||||
Перші чотири числа вичислені згідно зі згаданим генератором, мають бути: 27, 144, 12 та 232. Перший відрізок, таким чином, буде (27, 144) до (12, 232).
|
||||
|
||||
Скільки окремих точок перетину буде знайдено серед 5000 відрізків прямих ліній?
|
||||
|
||||
# --hints--
|
||||
|
||||
`distinctIntersections()` має повертати `2868868`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(distinctIntersections(), 2868868);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function distinctIntersections() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
distinctIntersections();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f4131000cf542c50ff25
|
||||
title: 'Задача 166: Перехресний'
|
||||
challengeType: 5
|
||||
forumTopicId: 301800
|
||||
dashedName: problem-166-criss-cross
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Таблиця 4x4 заповнена цифрами $d$, $0 ≤ d ≤ 9$.
|
||||
|
||||
Видно, що в таблиці
|
||||
|
||||
$$\begin{array}{} 6 & 3 & 3 & 0 \\\\ 5 & 0 & 4 & 3 \\\\ 0 & 7 & 1 & 4 \\\\ 1 & 2 & 4 & 5 \end{array}$$
|
||||
|
||||
сума кожного рядка та кожного стовпця має значення 12. Крім того, сума кожної діагоналі також дорівнює 12.
|
||||
|
||||
Скількома способами можна заповнити таблицю 4x4 цифрами $d$, $0 ≤ d ≤ 9$, щоб кожен рядок, кожен стовпець та обидві діагоналі мали однакову суму?
|
||||
|
||||
# --hints--
|
||||
|
||||
`crissCross()` повинен повертатися як `7130034`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(crissCross(), 7130034);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function crissCross() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
crissCross();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f4141000cf542c50ff26
|
||||
title: 'Задача 167: Дослідження послідовностей Уляма'
|
||||
challengeType: 5
|
||||
forumTopicId: 301801
|
||||
dashedName: problem-167-investigating-ulam-sequences
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Для двох цілих дійсних чисел $a$ і $b$, послідовність Уляма $U(a,b)$ визначається через ${U{(a,b)}\_1} = a$, ${U{(a,b)}\_2} = b$ і для $k > 2$, ${U{(a,b)}\_k}$ найменше ціле число, більше ніж ${U{(a,b)}\_{(k-1)}}$, що може бути записане лише як сума двох різних попередніх членів $U(a,b)$.
|
||||
|
||||
Наприклад, послідовність $U(1,2)$ починається з
|
||||
|
||||
$$1, 2, 3 = 1 + 2, 4 = 1 + 3, 6 = 2 + 4, 8 = 2 + 6, 11 = 3 + 8$$
|
||||
|
||||
5 не належить сюди, тому що $5 = 1 + 4 = 2 + 3$ показує дві однакові суми двох попередніх членів, так само $7 = 1 + 6 = 3 + 4$.
|
||||
|
||||
Знайдіть $\sum {U(2, 2n + 1)_k}$ по $2 ≤ n 10$, де $k = {10}^{11}$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`ulamSequences()` має повертати `3916160068885`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(ulamSequences(), 3916160068885);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function ulamSequences() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ulamSequences();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f4151000cf542c50ff27
|
||||
title: 'Задача 168: Обертання чисел'
|
||||
challengeType: 5
|
||||
forumTopicId: 301802
|
||||
dashedName: problem-168-number-rotations
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо число 142857. Ми можемо повернути це число праворуч, перемістивши останню цифру (7) перед ним, що дасть нам 714285.
|
||||
|
||||
Можна перевірити, що $714285 = 5 × 142857$.
|
||||
|
||||
Це показує незвичайну властивість 142857: це дільник її обертання вправо.
|
||||
|
||||
Знайдіть останні 5 цифр суми всіх цілих чисел $n$, $ 10 <; n <; 10100$, які мають цю властивість.
|
||||
|
||||
# --hints--
|
||||
|
||||
`numberRotations()` має повертати `59206`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(numberRotations(), 59206);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function numberRotations() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
numberRotations();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f4151000cf542c50ff28
|
||||
title: >-
|
||||
Задача 169: Дослідження кількості різноманітних способів, якими можна записати число як суму степенів 2
|
||||
challengeType: 5
|
||||
forumTopicId: 301803
|
||||
dashedName: >-
|
||||
problem-169-exploring-the-number-of-different-ways-a-number-can-be-expressed-as-a-sum-of-powers-of-2
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Визначте, що $f(0)=1$ та $f(n)$ буде кількістю різних способів, за якими $n$ може бути виражено у вигляді суми цілих чисел 2 степеня використовуючи кожен степінь не більше ніж двічі.
|
||||
|
||||
Наприклад: $f(10)=5$, оскільки існує 5 різних способів виразити 10:
|
||||
|
||||
$$\begin{align} & 1 + 1 + 8 \\\\ & 1 + 1 + 4 + 4 \\\\ & 1 + 1 + 2 + 2 + 4 \\\\ & 2 + 4 + 4 \\\\ & 2 + 8 \end{align}$$
|
||||
|
||||
Що таке $f({10}^{25})$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`numberOfWaysToExpress()` має відображати `178653872807`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(numberOfWaysToExpress(), 178653872807);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function numberOfWaysToExpress() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
numberOfWaysToExpress();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,130 @@
|
||||
---
|
||||
id: 5900f37d1000cf542c50fe90
|
||||
title: 'Завдання 17: Підрахунок букв у числівниках'
|
||||
challengeType: 5
|
||||
forumTopicId: 301804
|
||||
dashedName: problem-17-number-letter-counts
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Якщо числа від 1 до 5 записати словами (one, two, three, four, five), то загалом буде використано 3 + 3 + 5 + 4 + 4 = 10 букв.
|
||||
|
||||
Якщо числа від 1 до заданого `limit` включно записати словами, скільки букв потрібно було б використати?
|
||||
|
||||
**Note:** Не враховуйте пробіли чи дефіси. Наприклад, 342 (three hundred and forty-two) складається з 23 літер, а 115 (one hundred and fifteen) - з 20. Використання "and" при написанні чисел відповідає правилам Британської англійської.
|
||||
|
||||
# --hints--
|
||||
|
||||
`numberLetterCounts(5)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof numberLetterCounts(5) === 'number');
|
||||
```
|
||||
|
||||
`numberLetterCounts(5)` має повернути число 19.
|
||||
|
||||
```js
|
||||
assert.strictEqual(numberLetterCounts(5), 19);
|
||||
```
|
||||
|
||||
`numberLetterCounts(150)` має повернути число 1903.
|
||||
|
||||
```js
|
||||
assert.strictEqual(numberLetterCounts(150), 1903);
|
||||
```
|
||||
|
||||
`numberLetterCounts(1000)` має повернути число 21124.
|
||||
|
||||
```js
|
||||
assert.strictEqual(numberLetterCounts(1000), 21124);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function numberLetterCounts(limit) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
numberLetterCounts(5);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function numberLetterCounts(limit) {
|
||||
const dictionary = {
|
||||
0: '',
|
||||
1: 'one',
|
||||
2: 'two',
|
||||
3: 'three',
|
||||
4: 'four',
|
||||
5: 'five',
|
||||
6: 'six',
|
||||
7: 'seven',
|
||||
8: 'eight',
|
||||
9: 'nine',
|
||||
10: 'ten',
|
||||
11: 'eleven',
|
||||
12: 'twelve',
|
||||
13: 'thirteen',
|
||||
14: 'fourteen',
|
||||
15: 'fifteen',
|
||||
16: 'sixteen',
|
||||
17: 'seventeen',
|
||||
18: 'eighteen',
|
||||
19: 'nineteen',
|
||||
20: 'twenty',
|
||||
30: 'thirty',
|
||||
40: 'forty',
|
||||
50: 'fifty',
|
||||
60: 'sixty',
|
||||
70: 'seventy',
|
||||
80: 'eighty',
|
||||
90: 'ninety',
|
||||
1000: 'onethousand'
|
||||
};
|
||||
|
||||
let numString = '';
|
||||
|
||||
function convertToString(num) {
|
||||
// check dictionary for number
|
||||
if (dictionary[num]) {
|
||||
return dictionary[num];
|
||||
} else {
|
||||
const hundreds = Math.floor(num / 100);
|
||||
const tens = Math.floor((num / 10) % 10) * 10;
|
||||
const remainder = num % 10;
|
||||
|
||||
let tempStr = '';
|
||||
|
||||
if (hundreds === 0) {
|
||||
tempStr += dictionary[tens] + dictionary[remainder];
|
||||
} else {
|
||||
tempStr += dictionary[hundreds] + 'hundred';
|
||||
|
||||
if (tens !== 0 || remainder !== 0) {
|
||||
tempStr += 'and';
|
||||
}
|
||||
|
||||
if (tens < 20) {
|
||||
const lessThanTwenty = tens + remainder;
|
||||
tempStr += dictionary[lessThanTwenty];
|
||||
} else {
|
||||
tempStr += dictionary[tens] + dictionary[remainder];
|
||||
}
|
||||
}
|
||||
return tempStr;
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 1; i <= limit; i++) {
|
||||
numString += convertToString(i);
|
||||
}
|
||||
return numString.length;
|
||||
}
|
||||
```
|
@ -0,0 +1,48 @@
|
||||
---
|
||||
id: 5900f4161000cf542c50ff29
|
||||
title: >-
|
||||
Завдання 170: Знайдіть найбільше число від 0 до 9, яке можна утворити шляхом об'єднання добутків
|
||||
challengeType: 5
|
||||
forumTopicId: 301805
|
||||
dashedName: >-
|
||||
problem-170-find-the-largest-0-to-9-pandigital-that-can-be-formed-by-concatenating-products
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Помножте число 6 на кожне з 1273 і 9854:
|
||||
|
||||
$$\begin{align} & 6 × 1273 = 7638 \\\\ & 6 × 9854 = 59124 \\\\ \end{align}$$
|
||||
|
||||
Об’єднавши ці добутки, отримуємо панцифрове число від 1 до 9 - 763859124. Нехай 763859124 — об'єднаний добуток 6 і (1273, 9854)". Зауважте також, що об'єднання вхідних чисел 612739854 також становить панцифрове число від 1 до 9.
|
||||
|
||||
Те ж саме можна зробити для 0 - 9 панцифрових чисел.
|
||||
|
||||
Що є найбільшим 10-значним об'єднаним добутком цілого числа від 0 до 9, з двома або більше іншими цілими числами, таким чином, що об'єднання вхідних чисел також є панцифровим 10-значним числом від 0 до 9?
|
||||
|
||||
# --hints--
|
||||
|
||||
`largestPandigital()` має повертати `9857164023`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(largestPandigital(), 9857164023);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function largestPandigital() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
largestPandigital();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f4181000cf542c50ff2a
|
||||
title: >-
|
||||
Завдання 171: Пошук чисел, для яких сума квадратів чисел — це квадрат
|
||||
challengeType: 5
|
||||
forumTopicId: 301806
|
||||
dashedName: >-
|
||||
problem-171-finding-numbers-for-which-the-sum-of-the-squares-of-the-digits-is-a-square
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Для додатного цілого числа $n$, нехай $f(n)$ — це сума квадратів чисел (з основою 10) $n$, наприклад.
|
||||
|
||||
$$\begin{align} & f(3) = 3^2 = 9 \\\\ & f(25) = 2^2 + 5^2 = 4 + 25 = 29 \\\\ & f(442) = 4^2 + 4^2 + 2^2 = 16 + 16 + 4 = 36 \\\\ \end{align}$$
|
||||
|
||||
Знайдіть останні дев'ять чисел суми усіх $n$, $0 < n < {10}^{20}$, якщо $f(n)$ є повним квадратом.
|
||||
|
||||
# --hints--
|
||||
|
||||
`lastDigitsSumOfPerfectSquare()` має повертати `142989277`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(lastDigitsSumOfPerfectSquare(), 142989277);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function lastDigitsSumOfPerfectSquare() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
lastDigitsSumOfPerfectSquare();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,38 @@
|
||||
---
|
||||
id: 5900f4181000cf542c50ff2b
|
||||
title: 'Завдання 172: Дослідження чисел з кількома повторюваними цифрами'
|
||||
challengeType: 5
|
||||
forumTopicId: 301807
|
||||
dashedName: problem-172-investigating-numbers-with-few-repeated-digits
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Скільки існує 18-значних чисел $n$ (що не починаються нулем), у яких жодна цифра не зустрічається більше ніж три рази в $n$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`numbersWithRepeatedDigits()` має повертати `227485267000992000`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(numbersWithRepeatedDigits(), 227485267000992000);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function numbersWithRepeatedDigits() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
numbersWithRepeatedDigits();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f41a1000cf542c50ff2c
|
||||
title: >-
|
||||
Завдання 173: Скільки різних квадратних рамок можна сформувати з близько мільйона плиток?
|
||||
challengeType: 5
|
||||
forumTopicId: 301808
|
||||
dashedName: >-
|
||||
problem-173-using-up-to-one-million-tiles-how-many-different-hollow-square-laminae-can-be-formed
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай квадратна рамка — це квадратний контур з квадратним «отвором», а горизонтальні та вертикальні сторони — симетричні. Наприклад, з тридцяти двох квадратних плиток можна сформувати дві різні квадратні рамки:
|
||||
|
||||
<img class="img-responsive center-block" alt="дві квадратні рамки з отворами 2х2 та 7х7" src="https://cdn.freecodecamp.org/curriculum/project-euler/using-up-to-one-million-tiles-how-many-different-hollow-square-laminae-can-be-formed.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
З сотні плиток можна сформувати сорок одну різну квадратну пластинку, при цьому необов'язково використовувати всі плитки одночасно. Скільки різних квадратних рамок можна утворити за допомогою одного мільйона плиток?
|
||||
|
||||
# --hints--
|
||||
|
||||
`differentHollowSquareLaminae()` має повернути `1572729`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(differentHollowSquareLaminae(), 1572729);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function differentHollowSquareLaminae() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
differentHollowSquareLaminae();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,50 @@
|
||||
---
|
||||
id: 5900f41a1000cf542c50ff2d
|
||||
title: >-
|
||||
Завдання 174: Підрахунок кількості квадратних рамок, які можуть утворювати одну, дві, три, ... різні композиції
|
||||
challengeType: 5
|
||||
forumTopicId: 301809
|
||||
dashedName: >-
|
||||
problem-174-counting-the-number-of-hollow-square-laminae-that-can-form-one-two-three-----distinct-arrangements
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай квадратна рамка — квадратний контур з квадратним «отвором», у якому вертикальні та горизонтальні сторони — симетричні.
|
||||
|
||||
З восьми плиток можна сформувати рамку лише одним способом: квадрат 3x3 з отвором 1x1 посередині. Однак з тридцяти двох плиток можна сформувати дві окремі рамки.
|
||||
|
||||
<img class="img-responsive center-block" alt="дві квадратні рамки з отворами 2х2 та 7х7" src="https://cdn.freecodecamp.org/curriculum/project-euler/using-up-to-one-million-tiles-how-many-different-hollow-square-laminae-can-be-formed.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Якщо $t$ — кількість використаних плиток, то $t = 8$ є типом $L(1)$, а $t= 32$ є типом $L(2)$.
|
||||
|
||||
Нехай $N(n)$ — це число $t ≤ 1000000$ таке, що $t$ є типом $L(n)$; наприклад, $N(15) = 832$.
|
||||
|
||||
Знайдіть $\сума N(n)$ для $1 ≤ n ≤ 10$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`hollowSquareLaminaeDistinctArrangements()` має повернути `209566`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(hollowSquareLaminaeDistinctArrangements(), 209566);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function hollowSquareLaminaeDistinctArrangements() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
hollowSquareLaminaeDistinctArrangements();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,62 @@
|
||||
---
|
||||
id: 5900f41c1000cf542c50ff2e
|
||||
title: >-
|
||||
Завдання 175: Дроби, що включають різні способи, як записати число, виразивши суму степенів 2
|
||||
challengeType: 5
|
||||
forumTopicId: 301810
|
||||
dashedName: >-
|
||||
problem-175-fractions-involving-the-number-of-different-ways-a-number-can-be-expressed-as-a-sum-of-powers-of-2
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай $f(0) = 1$ і $f(n)$ — кількість способів записати $n$ як суму квадратів, де жоден з степенів не зустрічається більше двох разів.
|
||||
|
||||
Наприклад, $f(10) = 5$, бо існує 5 різних способів для вираження 10:
|
||||
|
||||
$$10 = 8 + 2 = 8 + 1 + 1 = 4 + 4 + 2 = 4 + 2 + 2 + 1 + 1 = 4 + 4 + 1 + 1$$
|
||||
|
||||
Можна показати, що для кожного дріб $\frac{p}{q}\\; (p>0, q>0)$ існує принаймні одне ціле число $n$, а $\frac{f(n)}{f(n - 1)} = \frac{p}{q}$.
|
||||
|
||||
Наприклад, найменше $n$, за якого $\frac{f(n)}{f(n - 1)} = \frac{13}{17}$ є 241. Бінарне розширення 241 складає 11110001.
|
||||
|
||||
Зчитування цього бінарного числа від найбільш значущого біта до найменш значущого біта містить 4 одиниці, 3 нулі і 1 одиницю. Назвемо ряд 4,3,1 скороченим бінарним розширенням 241.
|
||||
|
||||
Знайдіть скорочене бінарне розширення найменшого $n$ для якого
|
||||
|
||||
$$\frac{f(n)}{f(n - 1)} = \frac{123456789}{987654321}$$
|
||||
|
||||
Запишіть відповідь як ряд з цілими числами, розділеними комами, без пробілів.
|
||||
|
||||
# --hints--
|
||||
|
||||
`shortenedBinaryExpansionOfNumber()` має повертати рядок.
|
||||
|
||||
```js
|
||||
assert(typeof shortenedBinaryExpansionOfNumber() === 'string');
|
||||
```
|
||||
|
||||
`shortenedBinaryExpansionOfNumber()` має повертати рядок `1,13717420,8`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(shortenedBinaryExpansionOfNumber(), '1,13717420,8');
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function shortenedBinaryExpansionOfNumber() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
shortenedBinaryExpansionOfNumber();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,40 @@
|
||||
---
|
||||
id: 5900f41c1000cf542c50ff2f
|
||||
title: 'Завдання 176: Прямокутні трикутники з спільним катетом'
|
||||
challengeType: 5
|
||||
forumTopicId: 301811
|
||||
dashedName: problem-176-right-angled-triangles-that-share-a-cathetus
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
У кожного з чотирьох прямокутних трикутників із сторонами (9,12,15), (12,16,20), (5,12,13) і (12,35,37), менший катет дорівнює 12. Можна довести, що не існує іншого прямокутного трикутника, у якого довжини сторін це цілі числа, з катетом, що дорівнює 12.
|
||||
|
||||
Знайдіть найменше ціле число, яке може бути довжиною катета 47547 різних прямокутних трикутників зі сторонами рівним цілому числу.
|
||||
|
||||
# --hints--
|
||||
|
||||
`trianglesSharingCathetus()` має повернути `96818198400000`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(trianglesSharingCathetus(), 96818198400000);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function trianglesSharingCathetus() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
trianglesSharingCathetus();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,48 @@
|
||||
---
|
||||
id: 5900f41e1000cf542c50ff30
|
||||
title: 'Завдання 177: Чотирикутники з цілими кутами'
|
||||
challengeType: 5
|
||||
forumTopicId: 301812
|
||||
dashedName: problem-177-integer-angled-quadrilaterals
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай ABCD — опуклий чотирикутник з діагоналями AC та BD. При кожній вершині діагональ утворює кут з обома сторонами, тобто маємо вісім кутів.
|
||||
|
||||
<img class="img-responsive center-block" alt="опуклий чотирикутник ABCD з діагоналями AC та BD" src="https://cdn.freecodecamp.org/curriculum/project-euler/integer-angled-quadrilaterals.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
До прикладу, при вершині А є два кути — CAD та CAB.
|
||||
|
||||
Чотирикутник, вісім кутів якого мають цілі значення у градусах, називається чотирикутником з цілими кутами. Прикладом такого чотирикутника є квадрат з кутами по 45°. Ще одним прикладом такого чотирикутника може бути чотирикутник з кутами: DAC = 20°, BAC = 60°, ABD = 50°, CBD = 30°, BCA = 40°, DCA = 30°, CDB = 80°, ADB = 50°.
|
||||
|
||||
Яка загальна кількість неподібних чотирикутників з цілими кутами?
|
||||
|
||||
**Примітка:** В розрахунках можна припустити, що обчислений кут є цілим, якщо він знаходиться у межах ${10}^{-9}$ цілого значення.
|
||||
|
||||
# --hints--
|
||||
|
||||
`integerAngledQuadrilaterals()` має повертати `129325`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(integerAngledQuadrilaterals(), 129325);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function integerAngledQuadrilaterals() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
integerAngledQuadrilaterals();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f41e1000cf542c50ff31
|
||||
title: 'Завдання 178: Крокові числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301813
|
||||
dashedName: problem-178-step-numbers
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо число 45656.
|
||||
|
||||
Зауважимо, що будь-які дві послідовні цифри відрізняються на одиницю.
|
||||
|
||||
Число, в якому будь-які дві цифри, що стоять поряд, відрізняються на одиницю, називається кроковим числом.
|
||||
|
||||
У панцифровому числі кожна десяткова цифра від 0 до 9 зустрічається хоча б раз.
|
||||
|
||||
Скільки існує панцифрових крокових чисел, менших за ${10}^{40}$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`stepNumbers()` має повертати `126461847755`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(stepNumbers(), 126461847755);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function stepNumbers() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
stepNumbers();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,38 @@
|
||||
---
|
||||
id: 5900f41f1000cf542c50ff32
|
||||
title: 'Завдання 179: Послідовні додатні дільники'
|
||||
challengeType: 5
|
||||
forumTopicId: 301814
|
||||
dashedName: problem-179-consecutive-positive-divisors
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Знайдіть кількість цілих чисел $1 < n < {10}^7$, для яких $n$ і $n + 1$ мають однакову кількість додатних дільників. Наприклад, число 14 має додатні дільники 1, 2, 7 і 14, а число 15 — 1, 3, 5, 15.
|
||||
|
||||
# --hints--
|
||||
|
||||
`consecutivePositiveDivisors()` має повертати `986262`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(consecutivePositiveDivisors(), 986262);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function consecutivePositiveDivisors() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
consecutivePositiveDivisors();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,109 @@
|
||||
---
|
||||
id: 5900f37e1000cf542c50fe91
|
||||
title: 'Завдання 18: Максимальна сума шляху I'
|
||||
challengeType: 5
|
||||
forumTopicId: 301815
|
||||
dashedName: problem-18-maximum-path-sum-i
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Починаючи із вершини трикутника, зображеного нижче, і рухаючись до суміжних чисел у рядку нижче, максимальна сума згори донизу дорівнюватиме 23.
|
||||
|
||||
<span style='display: block; text-align: center;'>
|
||||
<strong style='color: red;'>3</strong><br>
|
||||
<strong style='color: red;'>7</strong> 4<br>
|
||||
2 <strong style='color: red;'>4</strong> 6<br>
|
||||
8 5 <strong style='color: red;'>9</strong> 3
|
||||
</span>
|
||||
|
||||
Тобто 3 + 7 + 4 + 9 = 23.
|
||||
|
||||
Знайдіть максимальну суму шляху від вершини до основи у трикутнику, зображеному нижче:
|
||||
|
||||
75
|
||||
95 64
|
||||
17 47 82
|
||||
18 35 87 10
|
||||
20 04 82 47 65
|
||||
19 01 23 75 03 34
|
||||
88 02 77 73 07 63 67
|
||||
99 65 04 28 06 16 70 92
|
||||
41 41 26 56 83 40 80 70 33
|
||||
41 48 72 33 47 32 37 16 94 29
|
||||
53 71 44 65 25 43 91 52 97 51 14
|
||||
70 11 33 28 77 73 17 78 39 68 17 57
|
||||
91 71 52 38 17 14 91 43 58 50 27 29 48
|
||||
63 66 04 68 89 53 67 30 73 16 69 87 40 31
|
||||
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
|
||||
|
||||
**Note:** Оскільки у цьому випадку є тільки 16384 шляхи, то дане завдання можна розв'язати, перевіривши кожен маршрут. Однак завдання 67 є тією самою задачею із трикутником, що має 100 рядків і яку не можна розв'язати за допомогою методу перебору, вона вимагає розумного підходу! ;o)
|
||||
|
||||
# --hints--
|
||||
|
||||
`maximumPathSumI(testTriangle)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof maximumPathSumI(testTriangle) === 'number');
|
||||
```
|
||||
|
||||
`maximumPathSumI(testTriangle)` має повернути число 23.
|
||||
|
||||
```js
|
||||
assert.strictEqual(maximumPathSumI(testTriangle), 23);
|
||||
```
|
||||
|
||||
`maximumPathSumI(numTriangle)` має повернути число 1074.
|
||||
|
||||
```js
|
||||
assert.strictEqual(maximumPathSumI(numTriangle), 1074);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --before-user-code--
|
||||
|
||||
```js
|
||||
const numTriangle = [[75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [95, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [17, 47, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [18, 35, 87, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [20, 4, 82, 47, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [19, 1, 23, 75, 3, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0], [88, 2, 77, 73, 7, 63, 67, 0, 0, 0, 0, 0, 0, 0, 0], [99, 65, 4, 28, 6, 16, 70, 92, 0, 0, 0, 0, 0, 0, 0], [41, 41, 26, 56, 83, 40, 80, 70, 33, 0, 0, 0, 0, 0, 0], [41, 48, 72, 33, 47, 32, 37, 16, 94, 29, 0, 0, 0, 0, 0], [53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14, 0, 0, 0, 0], [70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57, 0, 0, 0], [91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48, 0, 0], [63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31, 0], [4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23]];
|
||||
```
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function maximumPathSumI(triangle) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const testTriangle = [[3, 0, 0, 0],
|
||||
[7, 4, 0, 0],
|
||||
[2, 4, 6, 0],
|
||||
[8, 5, 9, 3]];
|
||||
|
||||
maximumPathSumI(testTriangle);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
const testTriangle = [[3, 0, 0, 0],
|
||||
[7, 4, 0, 0],
|
||||
[2, 4, 6, 0],
|
||||
[8, 5, 9, 3]];
|
||||
|
||||
function maximumPathSumI(triangle) {
|
||||
let maxSum = triangle.slice();
|
||||
|
||||
for (let i = triangle.length - 1; i > 0; i--) {
|
||||
let currentRow = maxSum[i];
|
||||
let previousRow = maxSum[i - 1];
|
||||
const temp = [];
|
||||
for (let j = 0; j < i; j++) {
|
||||
temp.push(Math.max((currentRow[j] + previousRow[j]), (currentRow[j + 1] + previousRow[j])));
|
||||
}
|
||||
maxSum[i - 1] = temp;
|
||||
maxSum.pop();
|
||||
}
|
||||
return maxSum[0][0];
|
||||
}
|
||||
```
|
@ -0,0 +1,52 @@
|
||||
---
|
||||
id: 5900f4201000cf542c50ff33
|
||||
title: 'Завдання 180: Раціональні нулі функції з трьома змінними'
|
||||
challengeType: 5
|
||||
forumTopicId: 301816
|
||||
dashedName: problem-180-rational-zeros-of-a-function-of-three-variables
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Для будь-якого цілого числа $n$ розглянемо три функції
|
||||
|
||||
$$\begin{align} & f_{1,n}(x,y,z) = x^{n + 1} + y^{n + 1} − z^{n + 1}\\\\ & f_{2,n}(x,y,z) = (xy + yz + zx) \times (x^{n - 1} + y^{n - 1} − z^{n - 1})\\\\ & f_{3,n}(x,y,z) = xyz \times (x^{n - 2} + y^{n - 2} − z^{n - 2}) \end{align}$$
|
||||
|
||||
та їхню комбінацію
|
||||
|
||||
$$\begin{align} & f_n(x,y,z) = f_{1,n}(x,y,z) + f_{2,n}(x,y,z) − f_{3,n}(x,y,z) \end{align}$$
|
||||
|
||||
$(x,y,z)$ ми називаємо золотою трійкою послідовності $k$, якщо $x$, $y$ і $z$ є раціональними числами форми $\frac{a}{b}$ with $0 < a < b ≤ k$ і є хоча б одне ціле число $n$, щоб виконувалася рівність $f_n(x,y,z) = 0$.
|
||||
|
||||
Нехай $s(x,y,z) = x + y + z$.
|
||||
|
||||
Нехай $t = \frac{u}{v}$ є сумою всіх різних $s(x,y,z)$ для золотих трійок $(x,y,z)$ послідовності 35. Всі $s(x,y,z)$ і $t$ повинні бути в скороченій формі.
|
||||
|
||||
Знайдіть $u + v$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`rationalZeros()` повинен повернутися як `285196020571078980`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(rationalZeros(), 285196020571078980);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function rationalZeros() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
rationalZeros();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f4231000cf542c50ff34
|
||||
title: >-
|
||||
Завдання 181: Скількома способами можна згрупувати об'єкти двох різних кольорів
|
||||
challengeType: 5
|
||||
forumTopicId: 301817
|
||||
dashedName: >-
|
||||
problem-181-investigating-in-how-many-ways-objects-of-two-different-colours-can-be-grouped
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Три чорних об'єкти $B$ і один білий об'єкт $W$ можна згрупувати сімома способами:
|
||||
|
||||
$$(BBBW)\\;(B,BBW)\\;(B,B,BW)\\;(B,B,B,W)\\;(B,BB,W)\\;(BBB,W)\\;(BB,BW)$$
|
||||
|
||||
Скількома способами можна згрупувати шістдесят чорних об'єктів $B$ та сорок білих об'єктів $W$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`colorsGrouping()` має повертати `83735848679360670`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(colorsGrouping(), 83735848679360670);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function colorsGrouping() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
colorsGrouping();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,102 @@
|
||||
---
|
||||
id: 5900f4231000cf542c50ff35
|
||||
title: 'Завдання 182: шифрування RSA'
|
||||
challengeType: 5
|
||||
forumTopicId: 301818
|
||||
dashedName: problem-182-rsa-encryption
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Шифрування RSA базується на наступній процедурі:
|
||||
|
||||
Згенерувати два різні простих числа `p` і `q`. Обчислити `n=p*q` і `φ=(p-1)(q-1)`. Знайдіть ціле число `e`, `1 < e < φ`, якщо `gcd(e,φ) = 1`
|
||||
|
||||
Повідомлення в цій системі — це число в інтервалі `[0,n-1]`. Текст, що буде зашифровано, певним чином перетворюється на повідомлення (числа з інтервалом `[0,n-1]`). Щоб зашифрувати текст, для кожного повідомлення обчислюється `m`, c=m<sup>e</sup> mod n.
|
||||
|
||||
Щоб розшифрувати текст, необхідна наступна процедура: порахуйте `d`, якщо `ed=1 mod φ`, тоді для кожного зашифрованого повідомлення `c` обчисліть m=c<sup>d</sup> mod n.
|
||||
|
||||
Виявлено значення `e` і `m` такі, що m<sup>e</sup> мод n = m. Ми називаємо повідомлення `m`, для яких m<sup>e</sup> мод n=m, неприхованими.
|
||||
|
||||
Проблема при виборі `e` полягає в тому, що не має бути занадто багато неприхованих повідомлень. Наприклад, нехай `p=19` і `q=37`. Потім `n=19*37=703` і `φ=18*36=648`. Якщо ми вибираємо `e=181`, то хоча `gcd(181,648)=1`, виявляється, що всі можливі повідомлення m `(0≤m≤n-1)` неприховані при розрахунку m<sup>e</sup> мод n. Для будь-якого відповідного вибору `e` існує декілька неприхованих повідомлень. Важливо, що кількість неприхованих повідомлень має бути мінімальною.
|
||||
|
||||
Для будь-якого заданого `p` і `q`, знайдіть суму всіх значень `e`, `1< e < φ(p,q)` і `gcd(e,φ)=1`, так, щоб кількість неприхованих повідомлень для цього значення `e` була мінімальною.
|
||||
|
||||
# --hints--
|
||||
|
||||
`RSAEncryption` має бути функцією.
|
||||
|
||||
```js
|
||||
assert(typeof RSAEncryption === 'function')
|
||||
```
|
||||
|
||||
`RSAEncryption` має повертати число.
|
||||
|
||||
```js
|
||||
assert.strictEqual(typeof RSAEncryption(19, 37), 'number');
|
||||
```
|
||||
|
||||
`RSAEncryption(19, 37)` має повертати `17766`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(RSAEncryption(19, 37), 17766);
|
||||
```
|
||||
|
||||
`RSAEncryption(283, 409)` має повертати `466196580`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(RSAEncryption(283, 409), 466196580);
|
||||
```
|
||||
|
||||
`RSAEncryption(1009, 3643)` має повертати `399788195976`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(RSAEncryption(19, 37), 17766);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function RSAEncryption(p, q) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
RSAEncryption(19, 37);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function gcd(a, b) {
|
||||
if (b)
|
||||
return gcd(b, a % b);
|
||||
else
|
||||
return a;
|
||||
}
|
||||
|
||||
function RSAEncryption(p, q) {
|
||||
let phi = (p - 1) * (q - 1);
|
||||
|
||||
let best = Number.MAX_SAFE_INTEGER;
|
||||
let sum = 0;
|
||||
|
||||
for (let e = 0; e < phi; ++e) {
|
||||
if (!(gcd(e, phi) == 1))
|
||||
continue;
|
||||
|
||||
let msg = (gcd(p - 1, e - 1) + 1) * (gcd(q - 1, e - 1) + 1);
|
||||
|
||||
if (best == msg) {
|
||||
sum += e;
|
||||
} else if (best > msg) {
|
||||
best = msg;
|
||||
sum = e;
|
||||
}
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
```
|
@ -0,0 +1,54 @@
|
||||
---
|
||||
id: 5900f4231000cf542c50ff36
|
||||
title: 'Задача 183: Максимальний добуток часток'
|
||||
challengeType: 5
|
||||
forumTopicId: 301819
|
||||
dashedName: problem-183-maximum-product-of-parts
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нехай $N$ є цілим додатним числом і нехай $N$ розбивається на $k$ рівних частин, $r = \ frac {N}{k}$, так що $N = r + r + \cdots + r$.
|
||||
|
||||
Нехай $P$ - добуток цих частин, $P = r × r × \cdots × r = r^k$.
|
||||
|
||||
Наприклад, якщо 11 розділити на п'ять рівних частин, 11 = 2,2 + 2,2 + 2,2 + 2,2 + 2,2, то $P = {2.2}^5 = 51,53632$.
|
||||
|
||||
Нехай $M(N) = P_{max}$ для заданого значення $N$.
|
||||
|
||||
Виявляється, максимум для $N = 11$ визначається шляхом поділу одинадцяти на чотири рівні частини, що призводить до $P_{max} = {(\ frac{11} {4})}^4 $; тобто $M(11) = \frac {14641}{256} = 57.19140625$, що є кінцевим десятковим числом.
|
||||
|
||||
Однак для $N = 8$ максимум досягається шляхом поділу його на три рівні частини, тому $M(8) = \frac{512}{27}$, що є десятковим числом, що не закінчується.
|
||||
|
||||
Нехай $D(N) = N$, якщо $M(N)$ є десятковим числом, що не закінчується, і $D(N) = -N$, якщо $M(N)$ є кінцевим десятковим числом.
|
||||
|
||||
Наприклад, $\sum D(N)$ для $5 ≤ N ≤ 100$ дорівнює 2438.
|
||||
|
||||
Find $\суму D(N)$ для $5 ≤ N ≤ 10000$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`maximumProductOfParts()` повинен повертатися `48861552`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(maximumProductOfParts(), 48861552);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function maximumProductOfParts() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
maximumProductOfParts();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,46 @@
|
||||
---
|
||||
id: 5900f4241000cf542c50ff37
|
||||
title: 'Завдання 184: трикутники, що містять початок координат'
|
||||
challengeType: 5
|
||||
forumTopicId: 301820
|
||||
dashedName: problem-184-triangles-containing-the-origin
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо множину $I_r$ точок $(x,y)$ з цілочисленими координатами всередині кола з радіусом $r$ з центром у початку координат, тобто: $x^2 + y^2 < r^2$.
|
||||
|
||||
Якщо радіус дорівнює 2, тоді $I_2$ містить точки (0,0), (1,0), (1,1), (0,1), (-1,1), (-1,0), (-1,-1), (0,-1) і (1,-1). Існує вісім трикутників з трьома вершинами в $I_2$, які всередині містять початок координат. Два з них наведено нижче, а решта отримується завдяки їх повертанню.
|
||||
|
||||
<img class="img-responsive center-block" alt="радіус кола, який дорівнює 2, із центром у початку координат, з дев'ятьма позначеними точками й двома трикутниками - (-1,0), (0,1), (1,-1) і (-1,1), (0,-1), (1,1)" src="https://cdn.freecodecamp.org/curriculum/project-euler/triangles-containing-the-origin.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Якщо радіус дорівнює 3, існує 360 трикутників, які містять початок координат всередині й для яких всі вершини в $I_3$, а для $I_5$ їх кількість дорівнює 10600.
|
||||
|
||||
Скільки існує трикутників, які містять початок координат всередині й для яких всі вершини в $I_{105}$?
|
||||
|
||||
# --hints--
|
||||
|
||||
`trianglesConttainingOrigin()` має повертати `1725323624056`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(trianglesConttainingOrigin(), 1725323624056);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function trianglesContainingOrigin() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
trianglesContainingOrigin();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,52 @@
|
||||
---
|
||||
id: 5900f4251000cf542c50ff38
|
||||
title: 'Завдання 185: Number Mind'
|
||||
challengeType: 5
|
||||
forumTopicId: 301821
|
||||
dashedName: problem-185-number-mind
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Гра Number Mind є варіантом відомої гри Master Mind.
|
||||
|
||||
Замість кольорових кілочків, ви повинні вгадати секретну послідовність цифр. Після кожної здогадки вам показують тільки ті цифри послідовності, які ви вгадали. Отже, якщо послідовність була 1234, а ви вказали 2036, то маєте одну правильну цифру; однак, вам не покажуть, що ви вгадали також ще одну цифру, але у неправильному місці.
|
||||
|
||||
Наприклад, для секретної послідовності 5 цифр,
|
||||
|
||||
$$\begin{align} & 90342 ;2\\;\text{correct}\\\\ & 70794 ;0\\;\text{correct}\\\\ & 39458 ;2\\;\text{correct}\\\\ & 34109 ;1\\;\text{correct}\\\\ & 51545 ;2\\;\text{correct}\\\\ & 12531 ;1\\;\text{correct} \end{align}$$
|
||||
|
||||
Правильна послідовність 39542 унікальна.
|
||||
|
||||
На основі наступних здогадок,
|
||||
|
||||
$$\begin{align} & 5616185650518293 ;2\\;\text{correct}\\\\ & 3847439647293047 ;1\\;\text{correct}\\\\ & 5855462940810587 ;3\\;\text{correct}\\\\ & 9742855507068353 ;3\\;\text{correct}\\\\ & 4296849643607543 ;3\\;\text{correct}\\\\ & 3174248439465858 ;1\\;\text{correct}\\\\ & 4513559094146117 ;2\\;\text{correct}\\\\ & 7890971548908067 ;3\\;\text{correct}\\\\ & 8157356344118483 ;1\\;\text{correct}\\\\ & 2615250744386899 ;2\\;\text{correct}\\\\ & 8690095851526254 ;3\\;\text{correct}\\\\ & 6375711915077050 ;1\\;\text{correct}\\\\ & 6913859173121360 ;1\\;\text{correct}\\\\ & 6442889055042768 ;2\\;\text{correct}\\\\ & 2321386104303845 ;0\\;\text{correct}\\\\ & 2326509471271448 ;2\\;\text{correct}\\\\ & 5251583379644322 ;2\\;\text{correct}\\\\ & 1748270476758276 ;3\\;\text{correct}\\\\ & 4895722652190306 ;1\\;\text{correct}\\\\ & 3041631117224635 ;3\\;\text{correct}\\\\ & 1841236454324589 ;3\\;\text{correct}\\\\ & 2659862637316867 ;2\\;\text{correct} \end{align}$$
|
||||
|
||||
Знайдіть унікальну секретну послідовність з 16 цифр.
|
||||
|
||||
# --hints--
|
||||
|
||||
`numberMind()` має повернути `4640261571849533`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(numberMind(), 4640261571849533);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function numberMind() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
numberMind();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,57 @@
|
||||
---
|
||||
id: 5900f4281000cf542c50ff39
|
||||
title: 'Завдання 186: Підключення до мережі'
|
||||
challengeType: 5
|
||||
forumTopicId: 301822
|
||||
dashedName: problem-186-connectedness-of-a-network
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Ось записи з зайнятої телефонної системи з мільйоном користувачів:
|
||||
|
||||
| RecNr | Абонент | Дзвонили |
|
||||
| ----- | ------- | -------- |
|
||||
| 1 | 200007 | 100053 |
|
||||
| 2 | 600183 | 500439 |
|
||||
| 3 | 600863 | 701497 |
|
||||
| ... | ... | ... |
|
||||
|
||||
Телефонний номер абонента і набраний номер у записі $n$ є $Caller(n) = S_{2n - 1}$ та $Called(n) = S_{2n}$, де ${S}_{1,2,3,\ldots}$ утворюється через "Генератор Фібоначчі":
|
||||
|
||||
Для $1 ≤ k ≤ 55$, $S_k = [100003 - 200003k + 300007{k}^3]\\;(\text{modulo}\\;1000000)$
|
||||
|
||||
Для $56 ≤ k$, $S_k = [S_{k - 24} + S_{k - 55}]\\;(\text{modulo}\\;1000000)$
|
||||
|
||||
Якщо $Caller(n) = Called(n)$ вважається, що користувач помилився номером і стався збій виклику, в іншому випадку виклик успішний.
|
||||
|
||||
Від початку записів ми кажемо, що будь-яка пара користувачів $X$ та $Y$ - друзі, якщо $X$ телефонує $Y$ або навпаки. Аналогічно $X$ є другом друга $Z$, якщо $X$ є друг $Y$ і $Y$ є другом $Z$; і так далі в довших ланцюжках.
|
||||
|
||||
Номер телефону прем'єр-міністра - 524287. Після скількох успішних викликів, не рахуючи збої викликів, 99% користувачів (включаючи прем'єр-міністра) будуть друзями, або друзями друзів і т. д. прем'єр-міністра?
|
||||
|
||||
# --hints--
|
||||
|
||||
`connectednessOfANetwork()` повинен повернути `2325629`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(connectednessOfANetwork(), 2325629);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function connectednessOfANetwork() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
connectednessOfANetwork();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,42 @@
|
||||
---
|
||||
id: 5900f4291000cf542c50ff3a
|
||||
title: 'Завдання 187: Напівпрості числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301823
|
||||
dashedName: problem-187-semiprimes
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Складене число - число, яке складається зі щонайменше двох простих множників. Наприклад, $15 = 3 × 5; 9 = 3 × 3; 12 = 2 × 2 × 3$.
|
||||
|
||||
Є десять складених чисел менших від тридцяти, що містять саме два, не обов'язково різні, прості множники: 4, 6, 9, 10, 14, 15, 21, 22, 25, 26.
|
||||
|
||||
Скільки складених чисел $n < {10}^8$ мають саме два, не обов'язково різні, прості множники?
|
||||
|
||||
# --hints--
|
||||
|
||||
`semiPrimes()` має повернути `17427258`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(euler187(), 17427258);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function semiPrimes() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
semiPrimes();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,44 @@
|
||||
---
|
||||
id: 5900f4291000cf542c50ff3b
|
||||
title: 'Задача 188: Гіперекспонентація числа'
|
||||
challengeType: 5
|
||||
forumTopicId: 301824
|
||||
dashedName: problem-188-the-hyperexponentiation-of-a-number
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Гіперекспонентація, або тетрація числа $a$ додатним цілим числом $b$, яка позначається $a↑↑b$ або ${}^ba$, рекурсивно визначається так:
|
||||
|
||||
$a↑↑1 = a$,
|
||||
|
||||
$a↑↑(k+1) = a^{(a↑↑k)}$.
|
||||
|
||||
Таким чином, маємо, наприклад, $3↑↑2 = 3^3 = 27$, отже $3↑↑3 = 3^{27} = 7625597484987$ і $3↑↑4$ приблизно дорівнюють ${10}^{3.6383346400240996 \times {10}^{12}}$. Знайдіть останні 8 цифр із $1777↑↑1855$.
|
||||
|
||||
# --hints--
|
||||
|
||||
`hyperexponentation()` має повертати до `95962097`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(hyperexponentation(), 95962097);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function hyperexponentation() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
hyperexponentation();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,50 @@
|
||||
---
|
||||
id: 5900f4291000cf542c50ff3c
|
||||
title: 'Задача 189: Заповнення трикутної сітки трьома кольорами'
|
||||
challengeType: 5
|
||||
forumTopicId: 301825
|
||||
dashedName: problem-189-tri-colouring-a-triangular-grid
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Розглянемо наступні налаштування для 64 трикутників:
|
||||
|
||||
<img class="img-responsive center-block" alt="64 трикутники, розміщені таким чином, що утворюють більший трикутник зі сторонами довжиною в 8 трикутників" src="https://cdn.freecodecamp.org/curriculum/project-euler/tri-colouring-a-triangular-grid-1.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Ми хочемо заповнити внутрішню область кожного трикутника одним із трьох кольорів: червоним, зеленим чи синім таким чином, щоб жодні два сусідні трикутники не мали однакового кольору. Таке забарвлення вважається допустимим. Тут два трикутники вважаються сусідніми, якщо вони мають спільне ребро. Зверніть увагу: якщо вони мають лише спільну вершину, вони не сусідні.
|
||||
|
||||
Наприклад, ось допустиме забарвлення наведеної вище сітки:
|
||||
|
||||
<img class="img-responsive center-block" alt="забарвлена сітка, що складається з 64 трикутників" src="https://cdn.freecodecamp.org/curriculum/project-euler/tri-colouring-a-triangular-grid-2.gif" style="background-color: white; padding: 10px;" />
|
||||
|
||||
Забарвлення C', отримане за допомогою повороту або відбиття забарвлення C, вважається відмінним від C, якщо вони не ідентичні.
|
||||
|
||||
Скільки різних допустимих забарвлень існує для наведених вище налаштувань?
|
||||
|
||||
# --hints--
|
||||
|
||||
`triangularGridColoring()` має повертати до `10834893628237824`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(triangularGridColoring(), 10834893628237824);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function triangularGridColoring() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
triangularGridColoring();
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
```
|
@ -0,0 +1,76 @@
|
||||
---
|
||||
id: 5900f37f1000cf542c50fe92
|
||||
title: 'Завдання 19: Підраховуємо неділі'
|
||||
challengeType: 5
|
||||
forumTopicId: 301827
|
||||
dashedName: problem-19-counting-sundays
|
||||
---
|
||||
|
||||
# --description--
|
||||
|
||||
Нижче наведена наступна інформація, але Ви можете зробити певні дослідження самостійно.
|
||||
|
||||
<ul>
|
||||
<li>1 січня 1900 року був понеділком.</li>
|
||||
<li>По 30 днів налічують вересень,<br>квітень, червень та листопад.<br>Усі інші - по 31 дню,<br>не враховуючи лютий,<br>який зазвичай має 28 днів.<br>А у високосні роки - 29 днів.</li>
|
||||
<li>Високосний рік випадає на рік, який рівно ділиться на 4, але це не стосується сторіччя, хіба що воно кратне 400.</li>
|
||||
</ul>
|
||||
|
||||
Скільки неділь випало на перше число місяця протягом двадцятого сторіччя (від 1 січня 1901 по 31 грудня 2000)?
|
||||
|
||||
# --hints--
|
||||
|
||||
`countingSundays(1943, 1946)` має повернути число.
|
||||
|
||||
```js
|
||||
assert(typeof countingSundays(1943, 1946) === 'number');
|
||||
```
|
||||
|
||||
`countingSundays(1943, 1946)` має повернути число 6.
|
||||
|
||||
```js
|
||||
assert.strictEqual(countingSundays(1943, 1946), 6);
|
||||
```
|
||||
|
||||
`countingSundays(1995, 2000)` має повернути число 10.
|
||||
|
||||
```js
|
||||
assert.strictEqual(countingSundays(1995, 2000), 10);
|
||||
```
|
||||
|
||||
`countingSundays(1901, 2000)` має повернути число 171.
|
||||
|
||||
```js
|
||||
assert.strictEqual(countingSundays(1901, 2000), 171);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function countingSundays(firstYear, lastYear) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
countingSundays(1943, 1946);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
function countingSundays(firstYear, lastYear) {
|
||||
let sundays = 0;
|
||||
|
||||
for (let year = firstYear; year <= lastYear; year++) {
|
||||
for (let month = 0; month <= 11; month++) {
|
||||
const thisDate = new Date(year, month, 1);
|
||||
if (thisDate.getDay() === 0) {
|
||||
sundays++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return sundays;
|
||||
}
|
||||
```
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user