Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1185 / 755 / 127
Регистрация: 10.03.2012
Сообщений: 4,847

Задача в которой сервер пытается угадать загаданное пользователем животное

15.01.2025, 11:08. Показов 1514. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать пример игры, в которой сервер пытается угадать загаданное пользователем животное, задавая последовательные
уточняющие вопросы, на которые можно отвечать "да" или "нет". Если сервер предложил неправильный вариант, он запрашивает
у пользователя имя животного и отличающий вопрос. Эта новая информация запоминается и используется в следующих играх.
1. Создать таблицу для представления информации.
2. Придумать интерфейс и реализуйте необходимые функции.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2025, 11:08
Ответы с готовыми решениями:

Компьютер должен угадать загаданное пользователем число
Вообщем, нужно чтобы компьютер угадывал мое число, под именем "numb". Если он не угадал, то пишется соответствующее сообщение и дальше...

Угадать слово, загаданное компьютером
Здравствуйте,помогите, пожалуйста, какие типы данных можно использовать, да и, в целом, как написать программу (ПАСКАЛЬ):Комп загадывает...

Машина должна угадать загаданное число
Добрый день, такой вопрос, нужно написать программу, которая будет выдавать 4-х значные числа, и задавать 2вопроса: 1.Сколько цифр угадано...

8
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
15.01.2025, 11:23
И че, думаешь прямо так тебе создадут и придумают? Вроде не новичек )
0
912 / 286 / 57
Регистрация: 01.06.2023
Сообщений: 808
15.01.2025, 13:13
Таблицы:

Животные (Код, Название),
Вопросы (Код, ТекстВопроса)
Истины(Код, КодВопроса, КодЖивотного, УтверждениеИстинно)
Ответы(Код, КодВопроса, УтверждениеИстинно)

1) Начало игры

SQL
1
TRUNCATE TABLE Ответы;
2) Выбор следующей реплики.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
WITH ДоступныеЖивотный AS (
  SELECT код 
  FROM Животные
  
  EXCEPT
 
  SELECT --Исключительный список
    КодЖивотного
  FROM 
    Ответы 
    INNER JOIN Истины ON 
      Истины.КодВопроса = Истины.КодВопроса AND 
      Ответы.УтверждениеИстинно <> Истины.УтверждениеИстинно
)
 
SELECT --Есть ответ, какое животное или животные кончились
  CASE WHEN COUNT(*) = 0 THEN 'ОтветНетВариантов' ELSE 'Ответ' END ТипСообщения,
  CASE WHEN COUNT(*) = 0 THEN 'ну не знаю тогда' ELSE (SELECT Название FROM Животные WHERE Животные.Код = MAX(t.Код)) END Сообщение,
  MAX(t.Код) Код 
FROM 
  (SELECT * FROM ДоступныеЖивотный LIMIT 2) AS t
HAVING
  COUNT(*) < 2
 
UNION ALL
 
SELECT * FROM (
  WITH 
    ДоступныеВопросы AS (
      SELECT 
        Вопросы.*,
        ( --Рассчитываем сколько вариантов можем исключить в худшем варианте
          SELECT 
            least(
              COALESCE(COUNT(*) FILTER (WHERE УтверждениеИстинно),0),
              COALESCE(COUNT(*) FILTER (WHERE NOT УтверждениеИстинно),0)
            )
          FROM 
            Истины
            INNER JOIN ДоступныеЖивотный ON 
              ДоступныеЖивотный.Код = Истины.КодЖивотного
          WHERE 
            Истины.КодВопроса = Вопросы.Код
        ) nCoeff        
      FROM 
        Вопросы 
      WHERE 
        NOT Вопросы.Код IN (SELECT КодВопроса FROM Ответы)
      ORDER BY nCoeff DESC
      LIMIT 1
    )
    
  --Возвращаем один единственный вопрос  
  SELECT 'Вопрос', ТекстВопроса, Код FROM ДоступныеВопросы
  
  UNION ALL 
  
  --Если вопросов нет, то вернем список предполагаемых животных
  SELECT 'ВопросыКончились', (SELECT string_agg(Животные.Название, ', ') FROM Животные WHERE Код IN (SELECT код FROM ДоступныеЖивотный)), -1
    
  LIMIT 1 
 
)
 
LIMIT 1
3) Ответ пользователя на вопрос (КодВопроса, УтверждениеИстинно)

SQL
1
INSERT INTO Ответы(КодВопроса, УтверждениеИстинно) VALUES (:КодВопроса, :УтверждениеИстинно)
4) Добавляем вопрос отличающее животное (ЗагаданноеЖивотное, ОтличающийВопрос), Возвращает код животного, которое необходиом передать в запроса конца игры

SQL
1
2
3
4
5
6
WITH 
  ЖивотноеСуществует AS (SELECT Код FROM Животные WHERE UPPER(Название) = UPPER(:ЗагаданноеЖивотное))
  НовоеЖивотное AS (INSERT INTO Животные(Название) SELECT :ЗагаданноеЖивотное WHERE NOT EXISTS(ЖивотноеСуществует) returning Код),
  НовыйВопрос AS (INSERT INTO Вопросы(ТекстВопроса) VALUES (:ОтличающийВопрос) returning Код),
  НовыеИстины AS (INSERT INTO Истины(КодВопроса, КодЖивотного, УтверждениеИстинно) VALUES ((SELECT код FROM НовыйВопрос), COALESCE((SELECT код FROM НовоеЖивотное),(SELECT код FROM ЖивотноеСуществует)), TRUE) returning *)
SELECT COALESCE((SELECT код FROM НовоеЖивотное),(SELECT код FROM ЖивотноеСуществует))
5) Зафиксировать истины для животного

SQL
1
2
3
4
5
6
7
8
--До этого шли по правильному пути поэтому сохраним ответы
INSERT INTO Истины(КодВопроса)
SELECT
  КодВопроса, :КодЖивотного, УтверждениеИстинно 
FROM
  Ответы
WHERE 
  NOT Ответы.КодВопроса IN (SELECT КодВопроса FROM Истины WHERE КодЖивотного = :КодЖивотного);
Процесс игры:
  1. При старте сессии вызываем запрос [1]
  2. Вызываем запрос [2], может вернуть сообщения следующих типов
    • ОтветНетВариантов: Под заданные вопросы не подошло ни одно животное. Показываем сообщение и переходим к п (3)
    • Ответ: Найдено одно животное, дополнительно возвращается его имя и код.
      • Если не угадали переходим к пункту (3)
      • Если угадали то переходим к пункту (4)
    • Вопрос: Показываем текст вопроса. Пользователь отвечает, его ответ записываем запросом [3], переходим к пункту (2)
    • ВопросыКончились: Выводим список животных и переходим к пункту (3)
  3. Запрашиваем имя загаданного животного и идентифицирующий запрос. Выполняем запрос [4] он вернет код животного передадим на пункт (4)
  4. Фиксируем ранее не известные истины выполняя запрос [5], с истинным кодом животного.
1
15.01.2025, 13:55

Не по теме:

это не правильно. ТС выложил задание не потрудившись даже вопрос задать, проявив этим самым откровенное не уважение к форумчанам, а ему целая простынь с решением

0
15.01.2025, 16:32

Не по теме:

Аватар, ну не то что бы это готовое решение, например этот алгоритм будет спамить вопросы, даже если они не уменьшают неопределенность, да и писалось без проверки так что может быть много неточностей :)

0
1185 / 755 / 127
Регистрация: 10.03.2012
Сообщений: 4,847
18.01.2025, 21:44  [ТС]
SQL
1
CREATE DATABASE plpgsql_queries;
SQL
1
2
3
4
5
6
CREATE TABLE animals(
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
yes_id INTEGER REFERENCES animals(id),
no_id INTEGER REFERENCES animals(id),
name text
);
SQL
1
2
3
4
INSERT INTO animals(name) VALUES
('млекопитающее'), ('слон'), ('черепаха');
UPDATE animals SET yes_id = 2, no_id = 3 WHERE id = 1;
SELECT * FROM animals ORDER BY id;
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE FUNCTION start_game(
OUT context INTEGER,
OUT question text
) AS $$
DECLARE
root_id CONSTANT INTEGER := 1;
BEGIN
SELECT id, name||'?'
INTO context, question
FROM animals
WHERE id = root_id;
END
$$ LANGUAGE plpgsql;
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CREATE FUNCTION continue_game(
INOUT context INTEGER,
IN answer BOOLEAN,
OUT you_win BOOLEAN,
OUT question text
) AS $$
DECLARE
new_context INTEGER;
BEGIN
SELECT CASE WHEN answer THEN yes_id ELSE no_id END
INTO new_context
FROM animals
WHERE id = context;
IF new_context IS NULL THEN
you_win := NOT answer;
question := CASE
WHEN you_win THEN 'Сдаюсь'
ELSE 'Вы проиграли'
END;
ELSE
SELECT id, NULL, name||'?'
INTO context, you_win, question
FROM animals
WHERE id = new_context;
END IF;
END
$$ LANGUAGE plpgsql;
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE FUNCTION end_game(
IN context INTEGER,
IN name text,
IN question text
) RETURNS void
AS $$
DECLARE
new_animal_id INTEGER;
new_question_id INTEGER;
BEGIN
INSERT INTO animals(name) VALUES (name)
RETURNING id INTO new_animal_id;
INSERT INTO animals(name) VALUES (question)
RETURNING id INTO new_question_id;
UPDATE animals SET yes_id = new_question_id
WHERE yes_id = context;
UPDATE animals SET no_id = new_question_id
WHERE no_id = context;
UPDATE animals SET yes_id = new_animal_id, no_id = context
WHERE id = new_question_id;
END
$$ LANGUAGE plpgsql;
0
1185 / 755 / 127
Регистрация: 10.03.2012
Сообщений: 4,847
20.01.2025, 10:27  [ТС]
SQL
1
SELECT * FROM start_game();
SQL
1
SELECT * FROM continue_game(1,TRUE);
SQL
1
SELECT * FROM continue_game(2,FALSE);
SQL
1
SELECT * FROM end_game(2,'кит','живет в воде');
SQL
1
SELECT * FROM animals ORDER BY id;
SQL
1
SELECT * FROM start_game();
SQL
1
SELECT * FROM continue_game(1,TRUE);
SQL
1
SELECT * FROM continue_game(5,TRUE);
SQL
1
SELECT * FROM continue_game(4,TRUE);
0
1303 / 357 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
25.01.2025, 11:01
Ууу... прямо журнал "Наука и Жизнь" за 1988 год.
Или 1989, не помните?
0
1185 / 755 / 127
Регистрация: 10.03.2012
Сообщений: 4,847
25.01.2025, 17:33  [ТС]
Цитата Сообщение от uaggster Посмотреть сообщение
Ууу... прямо журнал "Наука и Жизнь" за 1988 год.
Или 1989, не помните?
Нет
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2025, 17:33
Помогаю со студенческими работами здесь

Угадать по подсказкам число, загаданное программой. Что не так с кодом?
текстовая игра, где рандомайзер загадывает число и ты должен его угадать по подсказкам больше или меньше код: A = gets.chomp b =...

Играющему нужно угадать загаданное число за минимальное количество вопросов
Пожалуйста помогите c алгоритмом к следующей задаче: Дано множество чисел от 1 до N. Играющему нужно угадать загаданное число за...

Угадать животное на картинке
Мен нужна прога загадываешб животно с фотки и нужно компьютеру отгадать Животных всего 16 и главное условие минимум вопросо Так чтобы...

Написать программу угадать животное
Работа с БД. Создадим небольшую экспертную систему, которая будет пытаться угадать заданную человеком животное. Если упомянутая...

Угадать животное из списка, задав пользователю 4-5 вопросов
Помогите написать программу которая могла бы угадать животное из этих:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru