Browse Source

loops and arrays homework done

me@helium 8 years ago
parent
commit
df17321034
1 changed files with 85 additions and 2 deletions
  1. 85 2
      03LoopsAndArraysHomeWork.md

+ 85 - 2
03LoopsAndArraysHomeWork.md

@@ -7,5 +7,88 @@
 2. Сделать цикл с `prompt`, который прерывается по нажатию **OK** и продолжается по нажатию **Отмена** **c пустым телом цикла**.
 3. Подсчитать сумму арифметической прогрессии от 1 до N используя цикл `for`.
 4. Подсчитать сумму арифметической прогрессии от 1 до N используя цикл `for` **c пустым телом цикла**.
-5. Сформировать строку `"34567890"` с помощью цикла `for`.
-5. Сформировать строку `"34567890"` с помощью цикла `for`.
+5. Сформировать строку `" # # # # # "` с помощью цикла `for`.
+6. Сформировать строку `"34567890"` с помощью цикла `for`.
+7. Сформировать строку c помощью вложенных циклов. Для перевода строки используйте `\n`
+
+```javascript
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+```
+
+8. Сформируйте строку с шахматной доской из вложенных циклов. Для перевода строки используйте `\n`. Код должен поддерживать легкое изменение размеров
+доски.
+
+```javascript
+ # # # # # #
+# # # # # #
+ # # # # # #
+# # # # # #
+ # # # # # #
+# # # # # #
+ # # # # # #
+# # # # # #
+ # # # # # #
+# # # # # #
+ # # # # # #
+```
+
+9. Сформируйте массив из N элементов, содержащий в себе квадраты индексов, т. е:
+```javascript
+[0,1,4,9,16...]
+```
+
+10. C помощью вложенного цикла сформируйте массив массивов "таблица умножения". Для инициализации вложенных массивов используйте
+```javascript
+arr[i] = []
+```
+`arr[5][6]` должен быть равен, соответственно, 30, `arr[7][2]` == 14 и так далее.
+
+11. Сделайте вложенный цикл, который формирует HTML-таблицу из любого двумерного массива. Т. е. если в нём использовать результат работы 
+предыдущего задания, то получится таблица умножения HTML, как на занятии;
+
+12. Сделайте цикл `while`, который подменяет в массиве все строки `"abcd"` на `null`, используя `indexOf`
+13. Сделайте цикл 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 содержит, например, нули, или иные значения, которые отличаются от пользовательского ввода. История пусть состоит из единиц:
+`history = [1,1,1,1];`, Т. е. считается что пользователь нажимал 1 четыре ряда подряд. Пока мы не можем предсказать, так как в массиве еще не сохранилось
+то, что вводил пользователь, мы используем Math.random в качестве предсказания, и записываем ввод пользователя в массив predictArray, добавляя новые значения в history, и 
+сдвигая его. Т. е. если пользователь ввел 0, то:
+```javascript
+predictArray[1,1,1,1] = 0; //1,1,1,1 - история, 0 - новое значение
+history = [1,1,1,0]        //удаляем старую единицу из истории и добавляем введенный только что 0
+```
+
+Для предсказания следующего достаем значение массива predictArray[1,1,1,0], а после ввода опять записываем туда то, что ввёл пользователь (пусть 1):
+
+```javascript
+predictArray[1,1,1,0] = 1; //1,1,1,0 - история, 1 - новое значение
+history = [1,1,0,1]        //удаляем старую единицу из истории и добавляем введенный только что 1
+```
+
+Таким образом в predictArray накапливаются знания о том, что вводит пользователь после определенной истории чисел.