Написать программу по задачки на логику - C#
Формулировка задачи:
"Грустная история о том, как один лицеист очень хотел подарить "валентинку" любимой девочке. Он так сильно спешил, что подбегая к крыльцу физфака подскользнулся и... упал (растянувшись рядом с машиной декана). Придя в себя, он никак не мог вспомнить, кому он хотел отправить "валентинку". В голове крутились имена: Таня, Лена, Аня, Катя и Марина. Но вспомнить нужно только одно.
Напрягая свою память так, что можно было услышать шелест извилин в голове, несчастному влюбленному удалось установить следующее.
1. Если я люблю Таню, то я люблю Лену или Аню.
2. Если я люблю Лену, то я люблю Аню и Катю.
3. Если я люблю Аню или Катю, то я не люблю Марину.
4. Если я не люблю Катю, то я люблю Таню и Марину.
Помогите, пожалуйста, найти ему свою любовь."
Только начинаю программировать, препод задал на дом. Буду очень благодарен.
Решение задачи: «Написать программу по задачки на логику»
textual
Листинг программы
enum Кого { Таню, Лену, Аню, Катю, Марину }
static class Вспоминалка
{
static void Main()
{
var ответ =
Из_Всех_Вариантов.
Выбрать_Первый_Подходящий(
Вариант =>
ТакойЧто(
Если(Я_Люблю(Кого.Таню)).То(Я_Люблю(Кого.Лену).Или(Я_Люблю(Кого.Аню))),
Если(Я_Люблю(Кого.Лену)).То(Я_Люблю(Кого.Аню).И(Я_Люблю(Кого.Катю))),
Если(Я_Люблю(Кого.Аню).Или(Я_Люблю(Кого.Катю))).То(Я_Не_Люблю(Кого.Марину)),
Если(Я_Не_Люблю(Кого.Катю)).То(Я_Люблю(Кого.Таню).И(Я_Люблю(Кого.Марину)))
))
.Имя();
Console.WriteLine($"Чувак любит {ответ}.");
Console.ReadLine();
}
static IEnumerable<Кого> Из_Всех_Вариантов { get {
return Enum.GetValues(typeof(Кого))
.Cast<Кого>().Select(Что_С_Того);
}}
static string Имя (this Кого Вариант)
{
return Enum.GetName(typeof(Кого), Вариант);
}
static Кого ТекущийВариант;
static Кого Что_С_Того(Кого Вариант) {
ТекущийВариант = Вариант;
return Вариант;
}
static T Выбрать_Первый_Подходящий<T>(this IEnumerable<T> Sequence, Func<T, bool> Predicate) {
return Sequence.First(Predicate);
}
static bool Я_Люблю(Кого Вариант) {
return Вариант == ТекущийВариант;
}
static bool Я_Не_Люблю(Кого Вариант) {
return Вариант != ТекущийВариант;
}
static bool Или(this bool A, bool B) {
return A || B;
}
static bool И(this bool A, bool B) {
return A && B;
}
static ПредикатТо Если(bool А) {
return new ПредикатТо() { А = А };
}
static bool ТакойЧто(params bool[] Выражения) {
return Выражения.All(_ => _);
}
}
class ПредикатТо
{
public bool А;
public bool То(bool Б) { return !А || Б; }
}