Dominók

Dominók

Nehéz

Bevezetés

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?

Utasítások

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.

Megvalósítás

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.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Go Exercism

Készen állsz elkezdeni a(z) Dominók feladatot?

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.