Geçen gün ekibimiz bir kaçış odasına gitti. Bulmacalardan biri, bir kutunun kilidini açmak için doğru açma / kapama kombinasyonunu bulmak zorunda olduğunuz altı mekanik anahtardan oluşan bir tahtadan oluşuyordu.
-v-v-v-
-v-v-v-
Geliştiriciler olarak, 2 ^ 6 = 64 kombinasyonlarının her birini denemenin aslında bulmacayı çözmekten daha etkili olacağına karar verdik. Bu yüzden bazı zavallı adama ikili sayma yapacak.
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
ve bunun gibi.
Meydan
yukarıdaki gibi biçimlendirilmiş bir dize olarak pozisyon kapama anahtarları tüm göz önüne alındığında, bu bir program yazın, herhangi bir sırada ve kapalı tüm kombinasyonlarını üretir.
Tam bir program veya bir fonksiyon yazabilirsiniz. Böylece, programınız stdin, dosya veya tek bir dize argümanı olarak girdi alabilir ve çıktıyı döndürür veya basar. Döndüğünde, çıktı / array / etc listesinde olabilir. tek bir dize yerine. Çıktı tek bir dize ise, panolar yeni satırlarla ayrılmalıdır (arkadaki satırlara izin verilir).
Giriş dizeleri regex r'((-v)+-)(\n(-v)+-)*'
ile eşleşecek ve tüm kapanmaları ile bir kartı temsil edecektir . Bu, sıfır durum yok demektir ve anahtarlar sola hizalanır. Her satır aynı sayıda anahtara sahip olmayabilir.
Her çıkış kartı giriş ile tam olarak aynı formatta olmalıdır, ancak v'lerin gerektiği gibi ^ ile değiştirilmesi gerekir. Çıkış panoları herhangi bir sayıda yeni satırla ayrılabilir.
Çalışma zamanı doğal olarak anahtar sayısında O (2 ^ n) olduğundan, kodunuz herhangi bir düzende 10'dan fazla anahtarda test edilmeyecektir.
Bu kod-golf, bayt sayısındaki en kısa kod kazanır.
Örnek girişler ve çıkışlar
Giriş:
-v-
Mümkün çıktı:
-v-
-^-
Giriş:
-v-
-v-
Mümkün çıktı:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
O anahtarların büyük sayılar için cevabınızı kontrol etmek son derece sıkıcı olduğundan, burada bir aklı kontrol aracı olarak bir Python komut dosyası. (Daha fazla test vakası istemeniz durumunda belirli bir girdi dosyasından beklenen çıktıyı elde etmek için şu anda yorumlanmış bir snippet'i ekledim.) Giriş ve çıkış açısından özellikten biraz daha az esnek; giriş dizisini 'input' adındaki bir dosyaya ve aynı satırdaki 'output' adındaki dosyaya newline ile ayrılmış çıktıya (üzgünüm, liste biçimlendirme yok) yerleştirin ve çalıştırın python3 sanitycheck.py
.