6. 派屈網路的模擬
Dictionary<string, List<string>> nodeToStick = new();
Dictionary<string, int> cnt = new();
Dictionary<string, string?> stickToNode = new();
Console.WriteLine("輸入 輸入小圓盤 的數目及名稱:");
Console.ReadLine().Split(" ")[1..].ToList().ForEach(e =>
{
nodeToStick[e] = [];
cnt[e] = 0;
});
Console.WriteLine("輸入 內部小圓盤 的數目及名稱:");
Console.ReadLine().Split(" ")[1..].ToList().ForEach(e =>
{
nodeToStick[e] = [];
cnt[e] = 0;
});
Console.WriteLine("輸入 輸出小圓盤 的數目及名稱:");
Console.ReadLine().Split(" ")[1..].ToList().ForEach(e =>
{
nodeToStick[e] = [];
cnt[e] = 0;
});
Console.WriteLine("輸入 2-1轉移棒 的名稱及小圓盤的名稱:");
while (true)
{
var k = Console.ReadLine().Split(" ");
stickToNode[k[0]] = k[3];
nodeToStick[k[1]].Add(k[0]);
nodeToStick[k[2]].Add(k[0]);
Console.Write("Continue?(1/0):");
if (Console.ReadLine() == "0") break;
}
Console.WriteLine("輸入 1-1轉移棒 的名稱及小圓盤的名稱:");
while (true)
{
var k = Console.ReadLine().Split(" ");
stickToNode[k[0]] = k[2];
nodeToStick[k[1]].Add(k[0]);
Console.Write("Continue?(1/0):");
if (Console.ReadLine() == "0") break;
}
Console.Write("轉移棒與小圓盤的關係:");
foreach (var item in stickToNode)
{
Console.Write($"{item.Key}: {string.Join(" ",
nodeToStick.ToList()
.FindAll(e => e.Value.Contains(item.Key))
.Select(e => e.Key)
)} {item.Value} ");
}
Console.WriteLine("\n小圓盤與轉移棒的關係:");
foreach (var item in nodeToStick)
{
Console.Write($"{item.Key}: {stickToNode
.ToList().Find(e => e.Value == item.Key).Key} {string.Join(" ", item.Value)} ");
}
Console.WriteLine();
while (true)
{
Console.Write("鍵入將放權杖的小圓盤名稱:");
var n = Console.ReadLine();
cnt[n]++;
Console.Write("查看各個小圓盤權杖的情況:");
foreach (var item in cnt)
{
Console.Write($"{item.Key}: {item.Value} ");
}
Console.WriteLine();
while (true)
{
bool con = false;
foreach (var stick in stickToNode)
{
var from = nodeToStick.ToList().FindAll(
e => e.Value.Contains(stick.Key));
if (from
.Select(e => cnt[e.Key])
.All(e => e == 1))
{
foreach (var item in from)
{
cnt[item.Key]--;
}
cnt[stick.Value]++;
con = true;
break;
}
}
if (con) continue;
break;
}
Console.WriteLine("執行轉移棒.");
Console.Write("查看各個小圓盤權杖的情況:");
foreach (var item in cnt)
{
Console.Write($"{item.Key}: {item.Value} ");
}
Console.WriteLine();
Console.Write("Continue?(1/0):");
if (Console.ReadLine() == "0") break;
}
Last updated