Dün bu soruyu tüfek karışıklıkları hakkında sordum . Öyle görünüyor ki, dün soru biraz zor oldu, bu yüzden bu soru ilgili ama çok daha kolay bir iş.
Bugün sizden bir permütasyonun aslında bir tüfek karıştırması olup olmadığını belirlemeniz istenir. Riffle shuffle tanımımız son sorumuzdan uyarlanmıştır:
Karıştırmanın ilk kısmı bölmedir. Bölme bölümünde kart destesi ikiye bölünür. İki alt bölüm sürekli, karşılıklı olarak münhasır ve kapsamlı olmalıdır. Gerçek dünyada bölümünüzü olabildiğince yakınlaştırmak istersiniz, ancak bu meydan okumada bu dikkate alınmaz, dejenere olanlar (bir bölüm boş) dahil olmak üzere tüm bölümler eşit derecede önemlidir.
Bölümlendikten sonra kartlar, üye oldukları bölüm içindeki göreceli sıralarını koruyacak şekilde birbirine eklenir . Örneğin, A kartı destedeki B kartından önce ve A ve B kartları aynı bölümdeyse, aralarındaki kart sayısı artmış olsa bile A kartı nihai sonuçta B kartından önce olmalıdır . Eğer A ve B farklı bölümlere, onlar nihai sonuçta ne olursa olsun başlangıç düzenin, herhangi bir sırada olabilir.
Her bir tüfek karıştırması orijinal kart destesinin bir permütasyonu olarak görülebilir. Örneğin permütasyon
1,2,3 -> 1,3,2
bir tüfek shuffle. Eğer güverteyi böyle ayırırsan
1, 2 | 3
içerisindeki her kartın, 1,3,2
bölümündeki diğer tüm kartlarla aynı göreceli sıraya sahip olduğunu görüyoruz . 2
hala peşinde 1
.
Öte yandan, aşağıdaki permütasyon fırfırlı bir karıştırma değildir .
1,2,3 -> 3,2,1
Bunu görebiliriz çünkü iki (önemsiz) bölümün tümü için
1, 2 | 3
1 | 2, 3
göreceli sıralamalarını yerine getirmeyen bir çift kart vardır. İlk bölümde 1
ve 2
sıralarını değiştirirken, ikinci bölümde 2
ve 3
sıralarını değiştir.
Görev
Herhangi bir makul yöntemle bir permütasyon verildiğinde, geçerli bir tüfek shuffle'ı temsil edip etmediğini belirleyin. Biri "Evet, bu bir tüfek karıştırması" ve diğeri "Hayır, bu bir tüfek karıştırması" için olmak üzere iki farklı sabit değer çıkarmalısınız.
Bu kod golftür, bu yüzden cevaplar daha az bayt daha iyi olacak şekilde bayt cinsinden puanlanır.
Test Durumları
1,3,2 -> True
3,2,1 -> False
3,1,2,4 -> True
2,3,4,1 -> True
4,3,2,1 -> False
1,2,3,4,5 -> True
1,2,5,4,3 -> False
5,1,4,2,3 -> False
3,1,4,2,5 -> True
2,3,6,1,4,5 -> False
[3,1,4,2,5]
.
[2,3,6,1,4,5]
.
[0, ..., n-1]
yerine permütasyon alabilir miyiz [1, ..., n]
?
0
falsy için ama doğruluk için herhangi bir tamsayı[1, +∞)
?