في Toyland، القطارات مشغولة دائمًا بنقل الكنوز عبر المدينة، من الكرات الزجاجية اللامعة إلى مكعبات البناء النادرة. السكك التي تسير عليها مصنوعة من قطع ملونة على شكل الدومينو، تحمل كل قطعة منها رقمين. ولتتحرك القطارات، يجب أن تشكّل قطع الدومينو تسلسلًا متكاملًا تتطابق فيه الأرقام.
اليوم، توصيلٌ عاجل لشحنة من الألعاب النادرة في الانتظار. وقد أُعطيتَ مجموعة من قطع السكة لفحصها. إذا استطاعت أن تشكّل تسلسلًا متصلًا، انطلق القطار ناشرًا البسمة في أرجاء Toyland. وإن لم تستطع، ستُستبعد المجموعة وتُجرَّب أخرى.
الألعاب تعتمد عليك لحل هذا اللغز. فهل ستربط قطع الدومينو السكك وتُطلق القطار في مسيره، أم ستُترك المجموعة خلفها؟
كوّن سلسلة من قطع الدومينو.
احسب أسلوبًا لترتيب مجموعة معطاة من أحجار الدومينو بحيث تكوّن سلسلة دومينو صحيحة. في السلسلة، يجب أن تتطابق النقاط على أحد نصفَي الحجر مع النقاط على النصف المجاور من حجر مجاور. بالإضافة إلى ذلك، يجب أن تتطابق النقاط على نصفي الحجرين بلا جيران (الحجر الأول والحجر الأخير) مع بعضها.
على سبيل المثال، عند وجود الأحجار [2|1] و[2|3] و[1|3] ينبغي أن تحسب ترتيبًا مثل [1|2] [2|3] [3|1] أو [3|2] [2|1] [1|3] أو [1|3] [3|2] [2|1] وهكذا، حيث يكون الرقمان الأول والأخير متماثلين.
بالنسبة للأحجار [1|2] و[4|1] و[2|3] فإن السلسلة الناتجة غير صحيحة: الرقمان الأول والأخير في [4|1] [1|2] [2|3] ليسا متماثلين.
4 != 3
قد تستخدم بعض حالات الاختبار أحجارًا مكررة في حل السلسلة. افترض أنه يجري استخدام عدة مجموعات دومينو.
عرّف دالة Go واحدة باسم MakeChain، تقبل شريحة من أحجار الدومينو وتحاول بناء سلسلة صحيحة من أحجار الدومينو.
يجب أن يكون توقيع MakeChain كما يلي:
type Domino [2]int
func MakeChain(input []Domino) (chain []Domino, ok bool)
تشير نتيجة ok من النوع bool إلى ما إذا كان يمكن ترتيب قائمة أحجار الدومينو المُدخلة في سلسلة صحيحة.
تُعدّ قائمة المدخلات الفارغة صحيحة، كما يُعدّ حجر دومينو واحد يتساوى جانِباه صحيحًا أيضًا.
نتيجة chain هي شريحة من صفر أو أكثر من أحجار الدومينو مرتبة بترتيب يُظهر السلسلة الصحيحة.
من المقبول (بل والمتوقع) أن تحتاج أحجار الدومينو في input إلى تدوير بحيث يطابق كل جانب الحجر المجاور له في السلسلة.
ويجب أيضًا أن يتطابق الحجران في بداية السلسلة ونهايتها عند جانبهما الخارجي.
إذا تعذّر ترتيب شريحة أحجار الدومينو المُدخلة في سلسلة صحيحة
فيمكن أن تُرجع MakeChain القيمة nil كنتيجة chain، لكن يجب أن تُرجع false كنتيجة ok.
ولأنه قد يوجد أكثر من ترتيب صحيح للسلسلة لقائمة مدخلات معيّنة، فحين تكون قيمة ok هي true، سيتحقق برنامج الاختبار من صحة السلسلة فقط.
سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا165 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.