hw1.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. //ДЗ: Вложенные декларативные структуры и код в них. Отображение циклических и
  2. //древовидных структур.Циклы.
  3. //html tree
  4. // <body>
  5. // <div>
  6. // <span>Enter a data please:</span><br/>
  7. // <input type='text' id='name'>
  8. // <input type='text' id='surname'>
  9. // </div>
  10. // <div>
  11. // <button id='ok'>OK</button>
  12. // <button id='cancel'>Cancel</button>
  13. // </div>
  14. // </body>
  15. const body = {
  16. tagName: 'body',
  17. subTags: [
  18. {
  19. tagName: 'div',
  20. subTags: [
  21. {
  22. tagName: 'span',
  23. text: 'Enter a data please:',
  24. },
  25. {
  26. tagName: 'br',
  27. },
  28. {
  29. tagName: 'input',
  30. attrs: {
  31. type: 'text',
  32. id: 'name',
  33. },
  34. },
  35. {
  36. tagName: 'input',
  37. attrs: {
  38. type: 'text',
  39. id: 'surname',
  40. },
  41. },
  42. ],
  43. },
  44. {
  45. tagName: 'div',
  46. subTags: [
  47. {
  48. tagName: 'button',
  49. text: 'OK',
  50. attrs: {
  51. id: 'ok',
  52. },
  53. },
  54. {
  55. tagName: 'button',
  56. text: 'Cancel',
  57. attrs: {
  58. id: 'cancel',
  59. },
  60. },
  61. ],
  62. },
  63. ],
  64. };
  65. // console.log(
  66. // body.subTags[1].subTags[0].text,
  67. // 'and',
  68. // body.subTags[1].subTags[1].text
  69. // ); //Выведите значения текста во второй кнопке, используя . и [].
  70. // console.log(body.subTags[0].subTags[3].attrs.id);
  71. //Выведите значение атрибута id во втором input, используя . и [].
  72. //declarative fields
  73. //Как известно, элемент массива и объекта может быть любого типа данных JS,
  74. //т.е.в коде может быть любое выражение, которое вычисляется в то или иное
  75. //значение типа данных.А значит, мы можем применять функции для ввода данных
  76. //типа confirm или prompt:
  77. // const laptop = {
  78. // brand: prompt('Enter a brand') || 'HP',
  79. // type: prompt('Enter a type') || '440 G4',
  80. // model: prompt('Enter a model') || 'Y7Z75EA',
  81. // ram: +prompt('Enter a ram') || 4,
  82. // size: +prompt('Enter a size') || 14,
  83. // weight: +prompt('Enter a weight') || 1.8,
  84. // resolution: {
  85. // width: +prompt('Enter a width') || 1920,
  86. // height: +prompt('Enter a height') || 1080,
  87. // },
  88. // };
  89. // const {
  90. // brand,
  91. // type,
  92. // model,
  93. // ram,
  94. // size,
  95. // weight,
  96. // resolution: { width, height },
  97. // } = laptop;
  98. // console.log(brand, type, model, ram, size, weight, width, height);
  99. // const phone = {
  100. // brand: prompt('Enter a brand') || 'meizu',
  101. // model: prompt('Enter a model') || 'm2',
  102. // ram: +prompt('Enter a ram') || 2,
  103. // color: prompt('Enter a color') || 'black',
  104. // };
  105. // const { brand: phoneBrand, model: phoneModel, ram: phoneRam, color } = phone;
  106. // console.log(phoneBrand, phoneModel, phoneRam, color);
  107. // const person = {
  108. // name: prompt('Enter a name') || 'Donald',
  109. // surname: prompt('Enter a surname') || 'Trump',
  110. // married: confirm('Married?'),
  111. // };
  112. // const { name, surname, married } = person;
  113. // console.log(name, surname, married);
  114. //object links
  115. //Добавьте персоне гаджеты, используя новые поля smartphone и laptop в объекте персоны
  116. // person.smartphone = phone;
  117. // person.laptop = laptop;
  118. //Добавьте владельца в гаджеты, используя новое поле owner в объектах телефона и ноутбука.
  119. // laptop.owner = person;
  120. // phone.owner = person;
  121. //обратите внимание на цикличность ссылок в объектах, если вы все сделали правильно, то
  122. // console.log(
  123. // person.smartphone.owner.laptop.owner.smartphone == person.smartphone
  124. // );
  125. //imperative array fill 3
  126. //Создайте пустой массив и добавьте в него три элемента, введенные пользователем
  127. //(prompt), используя императивный подход(несколько операторов подряд)
  128. // const emptyArray = [];
  129. // const firstPrompt = prompt('Write something');
  130. // const secondPrompt = prompt('Write something else');
  131. // const thirdPrompt = prompt('Write something again');
  132. // emptyArray.push(firstPrompt, secondPrompt, thirdPrompt);
  133. // console.log(emptyArray);
  134. //while confirm
  135. //Сделайте цикл с confirm, который продолжается по Отмена и заканчивается по ОК.
  136. // let ageConfirm;
  137. // do {
  138. // ageConfirm = confirm('Do you have more that 18 years old?');
  139. // } while (!ageConfirm);
  140. //array fill
  141. //Создайте пустой массив и добавляйте в него элементы, пока пользователь
  142. //не нажмет Отмена в очередном prompt.Используйте push для удобства: push
  143. // const emptyArray = [];
  144. // let userConfirm;
  145. // do {
  146. // userConfirm = prompt('Please select filed!');
  147. // userConfirm && emptyArray.push(userConfirm);
  148. // } while (userConfirm);
  149. // console.log(emptyArray);
  150. //array fill nopush
  151. //Сделайте предыдущее задание, не используя push, а обращаясь к элементам по индексу.
  152. // const emptyArray = [];
  153. // let userConfirm;
  154. // do {
  155. // userConfirm = prompt('Please select filed!');
  156. // if (userConfirm)
  157. // emptyArray[emptyArray.length === 0 ? 0 : emptyArray.length] = userConfirm;
  158. // } while (userConfirm);
  159. // console.log(emptyArray);
  160. //infinite probability
  161. //Создайте бесконечный цикл, который прерывается с помощью конструкции break,
  162. //когда Math.random() > 0.9.Код должен подсчитывать количество итераций
  163. //и вывести это число с помощью alert.
  164. // for (var i = 1; i < Infinity; i++) {
  165. // if (Math.random() > 0.9) {
  166. // alert(
  167. // `Loop made ${i} iterations before Math.random() > 0.9 was equel to true`
  168. // );
  169. // break;
  170. // }
  171. // console.log(i);
  172. // }
  173. //empty loop
  174. //Сделайте цикл с prompt, который прерывается по нажатию OK и продолжается
  175. //по нажатию "Отмена" c пустым телом цикла.
  176. // const promptValue = prompt('How are you');
  177. // while (is === null) {
  178. // console.log('executin with empty body of loop');
  179. // }
  180. //progression sum
  181. //Подсчитать сумму арифметической прогрессии от 1 до N c шагом 3 (1,4,7,10,13,16,19,22,25,28)
  182. //используя цикл for.
  183. // const progressionSum = (N = 2, startValue = 1, step = 3) => {
  184. // let sum = startValue;
  185. // let sumResult = startValue;
  186. // for (let i = 1; i < N; i++) {
  187. // sum += step;
  188. // sumResult += sum;
  189. // }
  190. // return sumResult;
  191. // };
  192. // console.log(progressionSum(10, 1, 3));
  193. //chess one line
  194. //Сформировать строку " # # # # # " с помощью цикла for.
  195. //Длина строки может быть четной и нечетной, и указывается в одном месте в коде.
  196. // const chessOneLine = (value = '#', lenght = 5) => {
  197. // let str = '';
  198. // for (let i = 0; i < lenght; i++) {
  199. // str += value;
  200. // }
  201. // return str;
  202. // };
  203. // console.log(chessOneLine());
  204. //numbers
  205. //Сформировать строку c помощью вложенных циклов. Для перевода строки используйте \n.
  206. // const isertedLoop = (n) => {
  207. // let table = '';
  208. // for (let i = 0; i < n; i++) {
  209. // let row = '';
  210. // for (let j = 0; j < n; j++) {
  211. // row += j;
  212. // }
  213. // table = `${table}\n${row}`;
  214. // }
  215. // return table;
  216. // };
  217. // console.log(isertedLoop(10));
  218. //chess
  219. //Сформируйте строку с шахматной доской из вложенных циклов.
  220. //Для перевода строки используйте \n.Код должен поддерживать легкое изменение размеров доски.
  221. // const chessLoop = (n, firstSighn, secondSighn) => {
  222. // let table = '';
  223. // for (let i = 0; i < n; i++) {
  224. // let row = '';
  225. // for (let j = 0; j < n; j++) {
  226. // if (j % 2 === 0) {
  227. // row += firstSighn;
  228. // } else {
  229. // row += secondSighn;
  230. // }
  231. // }
  232. // table = `${table}\n${row}`;
  233. // }
  234. // return table;
  235. // };
  236. // console.log(chessLoop(10, '.', '#'));
  237. //cubes
  238. //Сформируйте массив из N элементов, содержащий в себе кубы индексов, т. е:
  239. // const cubes = (N = 1, pow = 3) => {
  240. // const indexesArrayInPow = [];
  241. // for (let i = 0; i < N; i++) {
  242. // indexesArrayInPow.push(Math.pow(i, pow));
  243. // }
  244. // return indexesArrayInPow;
  245. // };
  246. // console.log(cubes(5, 3));
  247. //multiply table
  248. //C помощью вложенного цикла сформируйте массив массивов "таблица умножения".
  249. //Для инициализации вложенных массивов используйте
  250. //arr[i] = [] //в i-тый элемент массива заносится новый пустой массив
  251. //arr[5][6] должен быть равен, соответственно, 30, arr[7][2] == 14 и так далее.
  252. // const multiplyTable = () => {
  253. // let table = [];
  254. // for (let i = 0; i < 10; i++) {
  255. // table[i] = [];
  256. // for (let j = 0; j < 10; j++) {
  257. // table[i][j] = i * j;
  258. // }
  259. // table;
  260. // }
  261. // return table;
  262. // };
  263. // const result = multiplyTable();
  264. // console.log(result[5][6], result[7][2]);
  265. //matrix to html table
  266. //Сделайте вложенный цикл, который формирует HTML-таблицу в переменной
  267. //строкового типа из любого двумерного массива.Т.е.если в нём использовать
  268. //результат работы предыдущего задания, то получится таблица умножения в HTML
  269. // const matrixToHtmltable = (twoDimensionalArray) => {
  270. // const table = document.createElement('table');
  271. // for (let i = 1; i < twoDimensionalArray.length; i++) {
  272. // const tr = document.createElement('tr');
  273. // for (let j = 1; j < twoDimensionalArray[i].length; j++) {
  274. // const th = document.createElement('th');
  275. // th.textContent = `${j}*${i}=${twoDimensionalArray[j][i]}`;
  276. // tr.appendChild(th);
  277. // }
  278. // table.appendChild(tr);
  279. // }
  280. // return table;
  281. // };
  282. // const tableMatrix = matrixToHtmltable(result);
  283. // const matrixDiv = document.getElementById('matrix');
  284. // matrixDiv.append(tableMatrix);
  285. // console.log(matrixDiv);
  286. //Задание на синий пояс: Треугольник
  287. //Сформировать следующую строку - треугольник:
  288. // const trangl = (firstSign = '.', secondSign = '#') => {
  289. // let firTree = '';
  290. // const middle = [5];
  291. // for (let i = 0; i < 6; i++) {
  292. // let row = '';
  293. // if (i !== 0) {
  294. // middle.unshift(middle[0] - 1);
  295. // middle.push(middle[middle.length - 1] + 1);
  296. // }
  297. // for (let j = 0; j < 11; j++) {
  298. // if (middle.includes(j)) {
  299. // row += secondSign;
  300. // } else {
  301. // row += firstSign;
  302. // }
  303. // }
  304. // firTree = `${firTree}\n${row}`;
  305. // }
  306. // return firTree;
  307. // };
  308. // console.log(trangl());
  309. //Задание на черный пояс: Электронная гадалка
  310. //Пользователь вводит 0 или 1. Гадалка пытается угадать, что введет пользователь
  311. //(естественно перед его вводом), но не показывает пользователю,
  312. //что бы пользователь не выбрал противоположный вариант, а выводит
  313. //предполагаемый вариант в консоль, скрытую от пользователя.
  314. // function makeDimensional(dim, lvl, arr) {
  315. // if (lvl === 1) return [];
  316. // if (!lvl) lvl = dim;
  317. // if (!arr) arr = [];
  318. // for (let i = 0, l = dim; i < l; i += 1) {
  319. // arr[i] = makeDimensional(dim, lvl - 1, arr[i]);
  320. // }
  321. // return arr;
  322. // }
  323. // const predictArray = makeDimensional(4);
  324. // const hystory = [1, 1, 1, 1];
  325. // const internalGame = () => {
  326. // const answer = confirm(
  327. // 'Choose OK or Cancel to play in this game and will see if you guess answer of PC '
  328. // )
  329. // ? 0
  330. // : 1;
  331. // predictArray[hystory[0]][hystory[1]][hystory[2]][hystory[3]] = answer;
  332. // console.log(hystory, 'hystory before changes');
  333. // hystory.shift();
  334. // hystory.push(answer);
  335. // console.log(hystory, 'hystory after changes');
  336. // console.log(predictArray);
  337. // internalGame();
  338. // };
  339. // internalGame();