Skip to content

Instantly share code, notes, and snippets.

@aloisdg
Last active October 12, 2018 08:49
Show Gist options
  • Save aloisdg/ce043b2be4a78b96a9b19dcf7cffa1fb to your computer and use it in GitHub Desktop.
Save aloisdg/ce043b2be4a78b96a9b19dcf7cffa1fb to your computer and use it in GitHub Desktop.
using System;
using System.Linq;
using System.Collections.Generic;
// https://rpg.stackexchange.com/a/133360/11129
public class Program
{
public class Player
{
public string Name
{
get;
set;
}
public IEnumerable<int> Rolls
{
get;
set;
}
public Player(string name, IEnumerable<int> rolls)
{
Name = name;
Rolls = rolls;
}
public override bool Equals(object obj)
{
var item = obj as Player;
return item == null ? false : this.Name.Equals(item.Name) && this.Rolls.SequenceEqual(item.Rolls);
}
public override int GetHashCode() => this.Name.GetHashCode() ^ this.Rolls.GetHashCode();
}
public static List<int>[] Draft(IEnumerable<int> source, int z)
{
var results = Enumerable.Range(0, z).Select(_ => new List<int>()).ToArray();
var rollsCount = source.Count();
for (var i = 0; i < rollsCount; i += z)
{
var draft = source.Skip(i).Take(z).OrderBy(x => i / z % 2 == 0 ? -x : x).ToArray();
for (var j = 0; j < z; j++)
{
results[j].Add(draft[j]);
}
}
return results;
}
public static IEnumerable<Player> DraftRolls(IEnumerable<Player> players)
{
var z = players.Count();
var rolls = players.SelectMany(x => x.Rolls).OrderByDescending(x => x);
var results = Draft(rolls, z);
return players.Select((x, i) => new Player(x.Name, results[i]));
}
public static void Main()
{
{
var players = new[]{new Player("A", new[]{1,2}), new Player("B", new[]{2,3}), new Player("C", new[]{3,4})};
var expected = new Player("C", new[]{3,2});
var actual = DraftRolls(players).Last();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1,2}), new Player("B", new[]{2,3}), new Player("C", new[]{3,4})};
var expected = new Player("A", new[]{4,1});
var actual = DraftRolls(players).First();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1}), new Player("B", new[]{2}), new Player("C", new[]{3})};
var expected = new Player("C", new[]{1});
var actual = DraftRolls(players).Last();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1}), new Player("B", new[]{2}), new Player("C", new[]{3})};
var expected = new Player("A", new[]{3});
var actual = DraftRolls(players).First();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1,2,4,1}), new Player("B", new[]{3,4,4,1})};
var expected = new Player("B", new[]{4,4,1,1});
var actual = DraftRolls(players).Last();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1,2,4,1}), new Player("B", new[]{3,4,4,1})};
var expected = new Player("A", new[]{4,3,2,1});
var actual = DraftRolls(players).First();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1,2,4}), new Player("B", new[]{3,4,4})};
var expected = new Player("B", new[]{4,4,1});
var actual = DraftRolls(players).Last();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1,2,4}), new Player("B", new[]{3,4,4})};
var expected = new Player("A", new[]{4,3,2});
var actual = DraftRolls(players).First();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1,2}), new Player("B", new[]{3,4})};
var expected = new Player("B", new[]{3,2});
var actual = DraftRolls(players).Last();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1,2}), new Player("B", new[]{3,4})};
var expected = new Player("A", new[]{4,1});
var actual = DraftRolls(players).First();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1}), new Player("B", new[]{1})};
var expected = new Player("B", new[]{1});
var actual = DraftRolls(players).Last();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1}), new Player("B", new[]{1})};
var expected = new Player("A", new[]{1});
var actual = DraftRolls(players).First();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1, 2})};
var expected = new Player("A", new[]{2, 1});
var actual = DraftRolls(players).First();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
{
var players = new[]{new Player("A", new[]{1})};
var expected = new Player("A", new[]{1});
var actual = DraftRolls(players).First();
var b = expected.Equals(actual);
if (!b)
actual.Dump();
}
Console.WriteLine("done");
}
}
@aloisdg
Copy link
Author

aloisdg commented Oct 11, 2018

@aloisdg
Copy link
Author

aloisdg commented Oct 12, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment