using System.Collections.Generic;
public static void Main()
List<List<string>> codeList = new List<List<string>>()
new List<string>() { "apple", "apple" },
new List<string>() { "banana", "anything", "banana" }
List<string> shoppingCart1 = new List<string>() { "orange", "apple", "apple", "banana", "orange", "banana" };
List<string> shoppingCart2 = new List<string>() { "banana", "orange", "banana", "apple", "apple" };
List<string> shoppingCart3 = new List<string>() { "apple", "banana", "apple", "banana", "orange", "banana" };
List<string> shoppingCart4 = new List<string>() { "apple", "apple", "apple", "banana" };
Console.WriteLine(IsWinner(codeList, shoppingCart1));
Console.WriteLine(IsWinner(codeList, shoppingCart2));
Console.WriteLine(IsWinner(codeList, shoppingCart3));
Console.WriteLine(IsWinner(codeList, shoppingCart4));
private static bool IsWinner( List<List<string>> codeList, List<string> shoppingCart ) {
while(cartIndex < shoppingCart.Count && codeIndex < codeList.Count) {
string currentItem = shoppingCart[cartIndex];
if (CodeMatch(shoppingCart, cartIndex, codeList[codeIndex])) {
cartIndex += codeList[codeIndex++].Count;
return codeIndex == codeList.Count;
private static bool CodeMatch(List<string> shoppingCart, int cartIndex, List<string> codes) {
foreach(string code in codes) {
if (cartIndex < shoppingCart.Count && ItemMatch(code, shoppingCart[cartIndex])) {
private static bool ItemMatch( string code, string item ) => code == "anything" ? true : code == item;