03LoopsAndArraysHomeWork.md 7.0 KB

Циклы и массивы: домашнее задание

Подсказка: для заданий 6,7,9 используйте остаток от деления %

Циклы

  1. Сделать цикл с prompt, который прерывается по нажатию OK и продолжается по нажатию Отмена
  2. Сделать бесконечный цикл, который прерывается с помощью конструкции break, когда Math.random() > 0.9. Подсчитать количество итераций и вывести это число с помощью alert
  3. Сделать цикл с prompt, который прерывается по нажатию OK и продолжается по нажатию Отмена c пустым телом цикла.
  4. Подсчитать сумму арифметической прогрессии от 1 до N используя цикл for.
  5. Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3 (1,4,7....) используя цикл for c пустым телом цикла.
  6. Сформировать строку " # # # # # " с помощью цикла for.
  7. Сформировать строку "34567890" с помощью цикла for.
  8. Сформировать строку c помощью вложенных циклов. Для перевода строки используйте \n.
    0123456789
    0123456789
    0123456789
    0123456789
    0123456789
    0123456789
    0123456789
    0123456789
    0123456789
    0123456789
    
  9. Сформируйте строку с шахматной доской из вложенных циклов. Для перевода строки используйте \n. Код должен поддерживать легкое изменение размеров доски.
    .#.#.#.#.#.#
    #.#.#.#.#.#.
    .#.#.#.#.#.#
    #.#.#.#.#.#.
    .#.#.#.#.#.#
    #.#.#.#.#.#.
    .#.#.#.#.#.#
    #.#.#.#.#.#.
    .#.#.#.#.#.#
    #.#.#.#.#.#.
    
  10. Сформируйте массив из N элементов, содержащий в себе квадраты индексов, т. е: [0,1,4,9,16...]
  11. C помощью вложенного цикла сформируйте массив массивов "таблица умножения". Для инициализации вложенных массивов используйте

    arr[i] = []
    

    arr[5][6] должен быть равен, соответственно, 30, arr[7][2] == 14 и так далее.

  12. Сделайте вложенный цикл, который формирует HTML-таблицу из любого двумерного массива. Т. е. если в нём использовать результат работы предыдущего задания, то получится таблица умножения HTML, как на занятии;

  13. Сделайте цикл while, который подменяет в массиве все строки "abcd" на null, используя indexOf

  14. Сделайте цикл for, который подменяет в массиве все строки "abcd" на null, не используя indexOf

Задание на синий пояс: Треугольник

Сформировать следующую строку - треугольник:

.....#.....
....###....
...#####...
..#######..
.#########.
###########

Задание на черный пояс: Электронная гадалка

Пользователь вводит 0 или 1. Гадалка пытается угадать, что введет пользователь (естественно перед его вводом), но не показывает пользователю, что бы пользователь не выбрал противоположный вариант, а выводит предполагаемый вариант в консоль, скрытую от пользователя.

Как это работает?

Гадалка хранит историю ввода (4 последних числа) пользователя в массиве history. Каждое следующее число добавляется с помощью push в конец массива, при этом первое число из массива (самое старое) удаляется с помощью shift.

Гадалка запоминает что пользователь ввёл в предыдущий раз после такой истории. То есть, если пользователь вводил 0,1,0,1,0, то логично предположить, что с историей 0,1,0,1 следующим вариантом будет 0. Для хранения используется 4х мерный массив, индексами которого является история:

predictArray[history[0]][history[1]][history[2]][history[3]] равно тому, что пользователь ввёл после истории в предыдущий раз.

Алгоритм:

Изначально predictArray содержит, например, -1, или иные значения, которые отличаются от пользовательского ввода. История пусть состоит из единиц: history = [1,1,1,1];, Т. е. считается что пользователь нажимал 1 четыре ряда подряд. Пока мы не можем предсказать, так как в массиве еще не сохранилось то, что вводил пользователь, мы используем Math.random в качестве предсказания, и записываем ввод пользователя в массив predictArray, добавляя новые значения в history, и сдвигая его. Т. е. если пользователь ввел 0, то:

predictArray[1,1,1,1] = 0; //1,1,1,1 - история, 0 - новое значение
history = [1,1,1,0]        //удаляем старую единицу из истории и добавляем введенный только что 0

Для предсказания следующего достаем значение массива predictArray[1,1,1,0], а после ввода опять записываем туда то, что ввёл пользователь (пусть 1):

predictArray[1,1,1,0] = 1; //1,1,1,0 - история, 1 - новое значение
history = [1,1,0,1]        //удаляем старую единицу из истории и добавляем введенный только что 1

Таким образом в predictArray накапливаются знания о том, что вводит пользователь после определенной истории чисел.