<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Home Task #3. Prokhorova</title>
</head>
<body>
    <script>
    // Задание 1. Создать функцию calculate(operand1, operand2, sign), где operand1 и operand2 — два числа, sign — знак арифметической операции.
    //Функция должна расчитывать результат операции, исходя из переданного ей знака.
    //Функция должна проверять корректность введенных чисел и знака операции.
    //Все аргументы для функции принять от пользователя.
        function calculate(operand1, operand2, sign) {
            var result;
            if (isNaN(operand1) || isNaN(operand2) )
            {
                alert("One of arguments is not a number!");
                return;
            }
            switch (sign) {
                case "+" : {
                    result = operand1 + operand2;
                    break;
                }
                case "-" : {
                    result = operand1 - operand2;
                    break;
                }
                case "/" : {
                    result = operand1 / operand2;
                    break;
                }
                case "*" : {
                    result = operand1 * operand2;
                    break;
                }
                default: {
                    alert("Unsupported operation!");
                    return;
                }
            }
            return result;
        }
        var operand1 = +prompt("Enter number:");
        var operand2 = +prompt("Enter number:");
        var sign = prompt("Enter sign:");
        result = calculate(operand1, operand2, sign);
        if (result != undefined) {
            alert(result);
        }
    </script>

    <script>
        // 2. Создать функцию, возводящую число в степень, число и сама степень вводится пользователем.
        var number = +prompt('Enter number:');
        var power = +prompt('Enter power:');
        function abs(val) {
            if (val < 0) {
                return -val;
            }
            else {
                return val;
            }
        }
        function fun1(a,b) {
            if (b == 0) {
                return 1;
            } else if (b == 1) {
                return a;
            }
            var r = 1;
            for (var n = 0; n < abs(b); n++) {
                r = r * a;
            }
            if (b < 0) {
                return 1 / r;
            }
            return r;
        }

        alert(fun1(number, power));

    </script>

    <script>
    // 3. Создать игру "Камень-Ножницы-Бумага".
    // Выбор компьютера определяется строкой:
    // var computerChoice = Math.random();
    // alert(computerChoice);
    // Math.random() выдает произвольное число в промежутке от 0 до 1, на основании этого можно построить принцип выбора решения компьютера.
        function getRandomInt(min, max) {
            return Math.floor(Math.random() * (max - min)) + min;
        }
        
        function play() {
            do {
                pcChoice = getRandomInt(0, 3);

                switch (pcChoice) {
                    case 0: 
                        alert("stone!");
                        break;
                    case 1:
                        alert("scissors!");
                        break;
                    case 2:
                        alert("paper!");
                        break;
                    default:
                        alert("Something wrong!");
                }
                question = confirm("Another one?");
            } while (question);
        }

        play();
    </script>

    <script>
    // 4. Напишите функцию, которая возвращает n-е число Фибоначчи. Для решения используйте цикл.
    // бонус: для решения использовать не цикл, а рекурсию
        function fibo(n) {
            var f = 0, p = 1, c;
            if (n <= 0) {
                return NaN;
            } else if (n == 1) {
                return f;
            } else if (n == 2) {
                return p;
            }
            for (var i = 0; i < n - 2; i++) {
                c = f + p;
                f = p;
                p = c;
            }
            return c;
        }

        n = +prompt("Enter n:");
        alert(fibo(n));

    </script>
    <script>
        // 4. бонус: для решения использовать не цикл, а рекурсию
        var f = 0, p = 1;
    
        function fibor(f, p, n) {
            if (n <= 0) {
                return NaN;
            } else if (n == 1) {
                return 0;
            }

            var c = f + p;
            n -= 1;
            f = p;
            p = c;
            if (n - 2 > 0) {
                c = fibor(f, p, n);
            }
            return c;
        }
        n = +prompt("Enter n:");
        alert(fibor(f, p, n));
    </script>
    
</body>
</html>