در این چالش، شما باید امتیازهای کسب شده توسط دو بازیکن (به نامهای بازیکن A و بازیکن Z) را پس از یک بازی ASCII مشخص کنید.
دو بازیکن به صورت تصادفی 26 حرف از الفبای انگلیسی را در یک رشته و ده عدد صحیح (در بازه 0 تا 25) را در یک لیست قرار میدهند. هر عدد نشاندهنده ایندکس یک حرف برای حذف از رشته حریف است، بنابراین دو بازیکن با دو رشته کاهش یافته 16 حرفی وارد نبرد میشوند.
نحوه نمایش دادهها و حذف شاخصها:
str_A = "MZNHUVIOEPTWFJCBXKALSDQGYR"
# 26 حرف بازیکن A...
str_Z = "YFTUCSQOMGKPXNDWHIVJRABZEL"
# 26 حرف بازیکن Z
ind_A = [1, 3, 2, 8, 10, 12, 9, 7, 4, 22]
# ایندکس هایی که باید از str_Z حذف شوند:
# str_Z[1] حرف "F" است، آن را حذف کنید
# str_Z[3] حرف "U" است، آن را حذف کنید
# و به همین ترتیب ...
ind_Z = [21, 24, 25, 3, 4, 1, 8, 9, 10, 17]
# ایندکس هایی که باید از str_A حذف شوند:
# str_A[21] حرف "D" است، آن را حذف کنید
# str_A[24] حرف "Y" است، آن را حذف کنید
# و به همین ترتیب ...
str_A = "MNVIOWFJCBXALSQG"
# بازیکن A اکنون 16 حرف دارد
# ترتیب نسبی همانند قبل از حذف است...
str_Z = "YSQPNDWHIVJRAZEL"
# برای بازیکن Z نیز به همین صورت است
اکنون، شما باید حروف رشتههای بازیکنان را از چپ به راست مقایسه کنید و مقادیر ASCII آنها را بدست آورید: در طول این سری از برخوردها، حرف بزرگتر (به معنای مقدار بزرگتر ASCII) به دارنده خود تعداد امتیازی برابر با مقدار خود منهای مقدار حریفش میدهد. اگر حروف برای هر دو بازیکن برابر باشند، هیچ کدام امتیاز نمیگیرند.
نحوه اختصاص امتیازها:
str_A = "MNVIOWFJCBXALSQG"
str_Z = "YSQPNDWHIVJRAZEL"
# هر حرف دارای یک مقدار ASCII است...
# از چپ شروع میکنیم:
Player A = 77, 78, 86, 73, 79, 87, 70, 74, 67, 66, 88, 65, 76, 83, 81, 71
Player Z = 89, 83, 81, 80, 78, 68, 87, 72, 73, 86, 74, 82, 65, 90, 69, 76
# هر مقدار ASCII با مقدار متناظر خود بین بازیکنان مقایسه میشود
# نمادگذاری: بازیکن A در برابر بازیکن Z
# برخورد 1: 77 در برابر 89
# بازیکن Z برنده میشود و او 12 امتیاز میگیرد (89 - 77)
# برخورد 2: 78 در برابر 83
# بازیکن Z برنده میشود و او 5 امتیاز میگیرد (83 - 78)
# برخورد 3: 86 در برابر 81
# بازیکن A برنده میشود و او 5 امتیاز میگیرد (86 - 81)
# برخورد 4: 73 در برابر 80
# بازیکن Z برنده میشود و او 7 امتیاز میگیرد (80 - 73)
# برخورد 5: 79 در برابر 78
# بازیکن A برنده میشود و او 1 امتیاز میگیرد (79 - 78)
# و به همین ترتیب ...
شما چهار پارامتر دریافت میکنید:
str_A
یک رشته حاوی 26 حرف که توسط بازیکن A قرار داده شده است (فقط حروف بزرگ منحصربفرد).ind_A
یک لیست حاوی 10 شاخص (به صورت اعداد صحیح در بازه 0 تا 25) که توسط بازیکن A ارائه شده است.str_Z
رشته بازیکن Z.ind_Z
لیست بازیکن Z.
شما باید تابعی پیادهسازی کنید که امتیاز بازیکنان را به عنوان لیست که به ترتیب امتیاز بازیکن A و Z را نشان میدهد، برگرداند:
نتیجه بازی قبل:
[64, 96]
نمونه ورودی و خروجی
AlphaClash("MZNHUVIOEPTWFJCBXKALSDQGYR", [1, 3, 2, 8, 10, 12, 9, 7, 4, 22], "YFTUCSQOMGKPXNDWHIVJRABZEL", [21, 24, 25, 3, 4, 1, 8, 9, 10, 17]) ➞ [64, 96]
AlphaClash("OZLICHFRKYBVUDSPWXJNGTQAEM", [8, 6, 4, 2, 0, 10, 12, 14, 16, 18], "WKJVUNXHRFDIOBTCSLZMPYGQAE", [7, 5, 3, 1, 9, 11, 13, 15, 17, 19]) ➞ [77, 63]
AlphaClash("IBXOWMUSGYPADJCLVKETQRZHFN", [23, 19, 21, 22, 2, 4, 6, 1, 0, 12], "TOLFIYHGKWAXRBDQMVNJSPCUZE", [15, 8, 2, 1, 0, 25, 12, 13, 16, 14]) ➞ [75, 50]
Assert.Equal(new int[] { 64, 96 }, Backendbaz.AlphaClash("MZNHUVIOEPTWFJCBXKALSDQGYR", new int[] { 1, 3, 2, 8, 10, 12, 9, 7, 4, 22 }, "YFTUCSQOMGKPXNDWHIVJRABZEL", new int[] { 21, 24, 25, 3, 4, 1, 8, 9, 10, 17 })); Assert.Equal(new int[] { 77, 63 }, Backendbaz.AlphaClash("OZLICHFRKYBVUDSPWXJNGTQAEM", new int[] { 8, 6, 4, 2, 0, 10, 12, 14, 16, 18 }, "WKJVUNXHRFDIOBTCSLZMPYGQAE", new int[] { 7, 5, 3, 1, 9, 11, 13, 15, 17, 19 })); Assert.Equal(new int[] { 75, 50 }, Backendbaz.AlphaClash("IBXOWMUSGYPADJCLVKETQRZHFN", new int[] { 23, 19, 21, 22, 2, 4, 6, 1, 0, 12 }, "TOLFIYHGKWAXRBDQMVNJSPCUZE", new int[] { 15, 8, 2, 1, 0, 25, 12, 13, 16, 14 })); Assert.Equal(new int[] { 0, 0 }, Backendbaz.AlphaClash("IBXOWMUSGYPADJCLVKETQRZHFN", new int[] { 15, 8, 2, 1, 0, 25, 12, 13, 16, 14 }, "IBXOWMUSGYPADJCLVKETQRZHFN", new int[] { 15, 8, 2, 1, 0, 25, 12, 13, 16, 14 }));
نظرات