В очередной раз убеждаюсь - умение, умение, умение!
Работа моего ученика:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace Ai_0_
{
class Program
{
#region Функции
// Функция генерирующая произвольный строковый ответ
public static KeyValuePair<string[], int> Rand(string data)
{
// Создаём объект ГСЧ
var r = new Random();
// Случайная сктрока как ответ
var l = r.Next(1, 10);
string reaction = "";
for (int i = 0; i < l; i++) reaction += (char)r.Next(0, 100);
// Объедениние в ключевое значение внешней строки и ответа робота
var key = new[] {data, reaction};
// "Эмоциональная" маркировка
var value = r.Next(0, 10);
return new KeyValuePair<string[], int>(key,value);
}
// Функция поиска введённых пользователем строки в памяти, ранжировка и выдача варианта с самой большой маркировкой
public static bool Find(string data, Dictionary<string[], int> memory)
{
// Найденные ответы
var answers = new Dictionary<string[], int>();
// Перебор памяти и поиск идентичного прошлого опыта
foreach (var m in memory)
{
if (m.Key[0] == data)
{
answers.Add(m.Key, m.Value);
}
}
// Если найденны ответы ищем с самой большой маркировкой и выводим в консоль
var cond = answers.Count > 0;
if (cond)
{
var maxMark = answers.OrderBy(k => k.Value).Last().Key[1];
Console.WriteLine("Ответ:"+ maxMark);
}
return cond;
}
#endregion
static void Main(string[] args)
{
// Создаём словарь памяти
var memory = new Dictionary<string[], int>();
// Бесконечный цикл
while (true)
{
// Получаем данные от пользователя
Console.WriteLine("Запрос:");
var data = Console.ReadLine();
// Если память пуста
if (memory.Count == 0)
{
// Генерируем случайный ответ и записываем в память
var gen = Rand(data);
memory.Add(gen.Key, gen.Value);
// Ищем данные в памяти и распечатываем
Find(data, memory);
}
// Если память не пуста
else
{
// Ищем в памяти данные запоминаем факт нахождения хоть одного элемента
var cond = Find(data, memory);
// Если не был был найденн хоть один элемент
if (!cond)
{
// Генерируем случайный ответ и записываем в память
var gen = Rand(data);
memory.Add(gen.Key, gen.Value);
// Ищем данные в памяти и распечатываем
Find(data, memory);
}
}
}
}
}
}