public long GetOreRequirementFor(ReactionItem ri)
        {
            var pool         = ReactionPool.InitWith(ri);
            var reactionItem = ReduceToOre(pool);

            return(reactionItem.Quantity);
        }
        public static ReactionPool InitWith(ReactionItem ri)
        {
            var pool = new ReactionPool();

            pool[ri.Chemical] = ri;
            return(pool);
        }
            static List <ReactionItem> ParseInput(ReadOnlySpan <char> str)
            {
                var result = new List <ReactionItem>();

                while (true)
                {
                    var idx = str.IndexOf(',');
                    if (idx == -1)
                    {
                        result.Add(ReactionItem.Parse(str));
                        return(result);
                    }
                    else
                    {
                        result.Add(ReactionItem.Parse(str.Slice(0, idx)));
                        str = str.Slice(idx + 2); // +1 for space after ','
                    }
                }
            }
 static ReactionItem ParseOutput(ReadOnlySpan <char> str)
 {
     return(ReactionItem.Parse(str));
 }
 public Reaction(ReactionItem output, IEnumerable <ReactionItem> input)
 {
     Output = output;
     Input  = input;
 }