Skip to content

Commit

Permalink
📒 docs(readme): Task 9 description
Browse files Browse the repository at this point in the history
  • Loading branch information
worthant committed Oct 15, 2024
1 parent bee55f6 commit 3398e94
Showing 1 changed file with 43 additions and 14 deletions.
57 changes: 43 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,51 @@
# Functional Programming Lab 1
# Лабораторная работа №1 (Проект Эйлера)

`Warm welcome!`
---

This project showcases the exercises and solutions implemented as part of the
first lab assignment in functional programming.
- Студент: `Дворкин Борис Александрович`
- Группа: `P3331`
- ИСУ: `368090`
- Функциональный язык программирования: `Elixir`

## Contents
---

- **Lab Report**: [Latex report made with heart to it](./common/main.pdf)
## Проблема №9

## Overview
---

This lab focuses on solving Euler project tasks using functional paradigm.
Solutions are presented to you in Elixir. The exercises emphasize concepts like
recursion, tail-recursion, higher-order functions, and working with collections.
- Название: `Special Pythagorean Triplet`
- Описание:
A Pythagorean triplet is a set of three natural numbers, $a < b < c$, for which
$$a^2 + b^2 = c^2$$
For example, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$.
There exists exactly one Pythagorean triplet for which $a + b + c = 1000$.
- Задание: `Find the product abc.`

### Key Topics Covered:
---

- Recursive and tail-recursive function implementations
- Handling infinite sequences and lazy collections
- Modular arithmetic and sequence mapping techniques
### Основная идея решения

Конечно, задачу можно банально решить полным перебором, как я и сделал на
императивном языке `Python`. Но в функциональных языках принято пользоваться
рекурсией, фильтрацией, генерацией и другими концепциями, поэтому для различных
ситуаций пришлось придумать другие решения.

Для рекурсии идея состоит в следующем:

Установим $a = 1$ и $b = 2$, как обычно вычислим $c = \text{sum} - a - b$ и
проверим, удовлетворяют ли $a$, $b$, $c$ условию Пифагоровой тройки.

Теперь заметим, что $a < b < c$ (по условию), а значит, можно записать условия
перебора для каждой переменной, а потом просто рекурсивно вызывать функцию, либо
увеличивая $b$, либо увеличивая $a$, при этом не забывая проверять, что
$a < b < c$.

А именно:

- если $b < c$, то можно безопасно увеличить $b$ на 1 и вызвать функцию для
этого значения.
- Так как $c = \text{sum} - a - b$, то получаем условие
$b < \text{sum} - a - b$.
- Иначе, это значит, что мы перебрали все возможные значения $b$ для данного
$a$, поэтому "сбрасываем" значение $b$, делая его на 1 больше, чем $a$, так
как $a < b < c$.

0 comments on commit 3398e94

Please sign in to comment.