Toylandban a vonatok szüntelenül kincseket szállítanak szerte a városban, a csillogó üveggolyóktól a ritka építőkockákig. Az a pálya, amelyen futnak, színes, dominó alakú darabokból áll, és mindegyiken két szám áll. Hogy a vonatok elindulhassanak, a dominóknak tökéletes láncot kell alkotniuk, amelyben a számok illeszkednek.
Ma egy sürgős küldemény vesztegel: ritka játékokat kell leszállítani. Kaptál egy adag pályaelemet, hogy megvizsgáld őket. Ha sikerül belőlük összefüggő láncot alkotni, a vonat útnak indul, és mosolyt csal Toyland lakóinak arcára. Ha nem, a készletet kidobják, és egy másikkal próbálkoznak.
A játékok rád számítanak, hogy megoldd ezt a rejtvényt. Vajon a dominók összekötik a pályákat, és útnak indítják a vonatot, vagy a készlet hátramarad?
Készíts dominóláncot.
Számítsd ki, hogyan lehet egy adott dominókészletet úgy sorba rendezni, hogy azok helyes dominóláncot alkossanak. A láncban az egyik kő egyik felén lévő pöttyöknek meg kell egyezniük a szomszédos kő szomszédos felén lévő pöttyökkel. Ezen kívül a szomszéd nélküli kövek (az első és az utolsó kő) felén lévő pöttyöknek is meg kell egyezniük egymással.
Például a [2|1], [2|3] és [1|3] kövekből valami olyasmit kell kiszámítanod, mint [1|2] [2|3] [3|1] vagy [3|2] [2|1] [1|3] vagy [1|3] [3|2] [2|1] stb., ahol az első és az utolsó szám ugyanaz.
A [1|2], [4|1] és [2|3] kövek esetében a kapott lánc nem érvényes: a [4|1] [1|2] [2|3] első és utolsó száma nem ugyanaz.
4 != 3
Egyes tesztesetek ismétlődő köveket használhatnak a láncmegoldásban, feltételezd, hogy több dominókészletet használnak.
Definiálj egyetlen MakeChain nevű Go-függvényt, amely dominók egy szeletét fogadja, és megpróbál felépíteni egy szabályos dominóláncot.
A MakeChain szignatúrája a következő legyen:
type Domino [2]int
func MakeChain(input []Domino) (chain []Domino, ok bool)
Az ok bool eredmény azt jelzi, hogy a megadott bemeneti dominólista elrendezhető-e szabályos lánccá.
Az üres bemeneti lista szabályosnak számít, és az az egyetlen dominó is, amelynek mindkét oldala ugyanaz.
A „chain” eredmény nulla vagy több dominóból álló szelet, olyan sorrendben elrendezve, amely megmutatja a szabályos láncot. Elfogadható (sőt elvárt), hogy a „input” dominóit forgatni kell, hogy mindegyik oldal illeszkedjen a láncban szomszédos dominóhoz. A lánc elején és végén lévő dominóknak a külső oldalukkal is egyezniük kell.
Ha a megadott bemeneti dominószelet nem rendezhető el szabályos lánccá a MakeChain a chain eredményre nil-t adhat vissza, de az ok eredményre false-t kell visszaadnia.
Mivel egy adott bemeneti listához több szabályos láncelrendezés is létezhet, amikor az ok értéke igaz, a tesztprogram csak a lánc érvényességét ellenőrzi.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Go nyelvet 34 fogalom165 feladat segítségével, valódi emberi mentorálással, mindez ingyen.