Yuvalanmış bir listeyi "seçme" işlemini düşünün. Toplama aşağıdaki gibi tanımlanır:
- Argüman bir listeyse, listeden rastgele (tekdüze) bir öğe alın ve bu öğeyi seçin.
- Argüman bir liste değilse, geri döndürün.
Python'da örnek bir uygulama:
import random
def pick(obj):
if isinstance(obj, list):
return pick(random.choice(obj))
else:
return obj
Basit olması açısından, iç içe listelerin yalnızca tamsayılar veya başka iç içe listeler içerdiğini varsayıyoruz.
Herhangi bir liste göz önüne alındığında, ayırt edilemeyen düzleştirilmiş bir versiyon oluşturmak mümkündür pick
, yani ondan seçim yapmak aynı olasılıkla aynı sonuçları verir.
Örneğin, listeyi "düzleştirme"
[1, 2, [3, 4, 5]]
listeyi verir
[1, 1, 1, 2, 2, 2, 3, 4, 5]
. Basitçe düzleştirmenin geçersiz olmasının nedeni, alt listelerin öğelerinin seçilme olasılığının daha düşük olmasıdır, örneğin listede [1, [2, 3]]
1'in 2/4 = 1/2 seçilme şansı varken 3 ve 4'ün her ikisinin de 1/4 olması her biri şans.
Ayrıca, tek bir listeden seçim yapmanın öğesinden seçim yapmaya eşdeğer olduğunu ve boş bir listeden seçim yapmanın bir anlamı olmadığını da unutmayın.
Meydan okuma
İç içe negatif olmayan tamsayılar listesi verildiğinde, toplama aynı olasılıkla aynı sonuçları veren negatif olmayan tamsayıların düzleştirilmiş bir listesini döndürün.
Bu kod golf , bu nedenle (bayt cinsinden ölçülen) en kısa geçerli cevap kazanır.
Özellikler
- Girdiler
[2, 3, 4]
,[2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4]
ve[2, [3, 3], [[4]]]
eşdeğerdir (yani eşdeğer sonuçlar vermelidirler). - Çıkışlar
[2, 2, 2, 2, 3, 3, 3, 3]
ve[2, 3]
eşdeğerdir (yani her ikisi de çıktı olabilir). - Listelerde yalnızca 1-100 dahil aralığındaki sayıların bulunacağını varsayabilirsiniz.
- Üst düzey girdinin bir liste olacağını varsayabilirsiniz, yani
2
geçerli bir girdi değildir. - Örneğin, iç içe listelerin herhangi makul temsilini kullanabilirsiniz:
[1, [2, 3]]
,1 {2 3}
,"[ 1 [ 2 3 ] ]"
vb - Bir liste yerine, bir çoklu küme veya bir eşleme çıktısı alabilirsiniz veya yalnızca 1-100 aralığındaki sayılara izin verildiğinden, miktarları temsil eden tam sayı 100 uzunluklu bir liste.
Test Durumları
Listelenen çıkışların yalnızca bir geçerli olasılık olduğunu unutmayın; geçerli bir girdi veya çıktıyı nelerin oluşturduğu ile ilgili özelliklere bakın.
format:
input -> output
[3] -> [3]
[1, [1, 1]] -> [1]
[1, [2, 3]] -> [1, 1, 2, 3]
[2, 3, [4, [5, 5, 6], 6, 7]] -> [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7]
[[1, 1, 2], [2, 3, 3]] -> [1, 2, 3]
[[1, 1, 2], [2, 3, 3, 3]] -> [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3]