Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Скрипт, угадывающий число от 1 до 100. (https://javascript.ru/forum/offtopic/68476-skript-ugadyvayushhijj-chislo-ot-1-do-100-a.html)

SplaTT 19.04.2017 14:11

Скрипт, угадывающий число от 1 до 100.
 
Новичёк в js, только учу. Просмотрев начальный курс, балуюсь программками мелкими. У кого есть интерес, или кто может помочь, напишите программку которая угадывает число от 1 до 100 (1<num<100) либо (1<=num<=100). Алгоритм:
1. Загадываешь число в уме. // 1<num<100
2. Запускаешь скрипт.
3. Появляется вопрос "Ваше число 57?" // рандомное число от 1 до 100
4. Если ваше число меньше 57, пишешь smaller.
5. Появляется вопрос "Ваше число 32?"
6. Если ваше число больше 32, пишешь bigger.
7. И так пока он не спросит ваше загаданное число, ответом на вопрос будет yes. Обычно цикл из 5-7 вопросов чтобы угадать, зависит от того как работает рандом...

Просто хочу сравнить код опытных разработчиков и свой, может что то интересное, либо новое подчеркнуть...
Написана для ConEmu, желательно увидеть ваш код, без анализа моего, дабы увидеть проблемы, ньюансы, и нейкие решения людей знающих js.
var x, y, r, num, answer;
function myFirstProgramm(x, y) {
	function rnd(x, y){
		r = Math.floor(Math.random() * (y - x)) + x;
		switch(r){
			case x: r++; break;
			case y: r--; break;
		};
		return r;
	};
	do {
		num = rnd(x, y);
		putstr("Your number " + num + "? y/b/s : ");
		answer = readline();
		switch(answer) {
			case "b": x = num; break;
			case "s": y = num; break;
		};
	}
	while (answer != "y") {
		print("Your number " + num + ".");
	};
};
myFirstProgramm(1, 100);

ksa 19.04.2017 15:06

Цитата:

Сообщение от SplaTT
балуюсь программками мелкими. У кого есть интерес, или кто может помочь, напишите программку которая угадывает число от 1 до 100

Баловство заключается в убеждении других делать маленькие задачки? :D

SplaTT 19.04.2017 15:29

Цитата:

Сообщение от ksa (Сообщение 450305)
Баловство заключается в убеждении других делать маленькие задачки? :D

Выучить циклы, методы, объекты функции и тд это одно, а всё это згребсти в кучу и заставить работать - другое. Например на задачку эту у меня ушло часов 4-5 :) вроде бы и понимаешь как работает, а нет, есть нюансы, короче, кому я объясняю)) Вот и хочу узнать как можно было бы сделать по другому, понять какие либо нюансы в работе моего скрипта и тд, вообщем, кому не лень и кому интересно... Дабы переходить к DOM BOM урокам.

рони 19.04.2017 17:45

Цитата:

Сообщение от SplaTT
(1<=num<=100).

function fn(b, d) {
    function e() {
        var a = b + Math.random() * (d + 1 - b) | 0,
            c = prompt("Ваше число " + a + "?", "smaller/bigger/yes");
        "yes" == c ? alert(a + "!!!") : ("bigger" == c && (b = a), "smaller" == c && (d = a), e())
    }
    e()
};
fn(1,100)

SplaTT 19.04.2017 18:23

Цитата:

Сообщение от рони (Сообщение 450316)
function fn(b, d) {
    function e() {
        var a = b + Math.random() * (d + 1 - b) | 0,
            c = prompt("Ваше число " + a + "?", "smaller/bigger/yes");
        "yes" == c ? alert(a + "!!!") : ("bigger" == c && (b = a), "smaller" == c && (d = a), e())
    }
    e()
};
fn(1,100)

24 против 9 строк, а смысл тотже.
Забавная штука программирование)) Спасибо!

SplaTT 19.04.2017 18:53

Не понял единственного, что обозначает и как называется вот это часть в 3 строке в конце?
| 0

рони 19.04.2017 19:18

SplaTT,
замена Math.floor на Побитовое ИЛИ (отрезание дробной части числа)

SplaTT 19.04.2017 19:25

Цитата:

Сообщение от рони (Сообщение 450324)
SplaTT,
замена Math.floor на Побитовое ИЛИ (отрезание дробной части числа)

Разобрался, спасибо.

SplaTT 19.04.2017 20:23

Цитата:

Сообщение от Rise (Сообщение 450326)
SplaTT, стоит еще отметить, что побитовые операторы не только обрезают дробную часть, но и обрезают двоичное представление числа до 32 бит, поэтому такое округление актуально только в диапазоне чисел [-2147483648, 2147483647]

Главное я узнал что есть побитовые операторы, а разобраться с в них дело другое. Будем осиливать, спасибо.


Часовой пояс GMT +3, время: 14:56.