Seri Hakkında
Öncelikle, bunu diğer kod golf zorlukları gibi ele alabilir ve seri hakkında endişelenmeden cevaplayabilirsiniz. Ancak, tüm zorluklarda bir lider tablosu vardır. Liderlik tablosunu, diziyle ilgili daha fazla bilgiyi ilk gönderide bulabilirsiniz .
Dizi için sıralanmış bir sürü fikrim olmasına rağmen, gelecekteki zorluklar henüz taş değil. Eğer herhangi bir öneriniz varsa, lütfen ilgili sandbox yazı hakkında bana bildirin .
Delik 3: Tamsayı Bölümleri
Zorluğu biraz artırma zamanı.
Pozitif bir tamsayının bir bölümü , n
toplamı oluşturan pozitif tamsayıların çoklu kümesi olarak tanımlanır n
. Örnek olarak n = 5
, aşağıdaki bölümler bulunur:
{1,1,1,1,1}
{2,1,1,1}
{2,2,1}
{3,1,1}
{3,2}
{4,1}
{5}
Bu MULTISETS, bu nedenle hiçbir emir onlara, orada o Not {3,1,1}
, {1,3,1}
ve {1,1,3}
tüm özdeş kabul edilir.
Göreviniz, n
rastgele bir bölüm oluşturmak için verilir n
. Ayrıntılı kurallar şunlardır:
Üretilen bölümlerin dağılımı eşit olmalıdır . Yani, yukarıdaki örnekte, her bölüm 1/7 olasılıkla döndürülmelidir.
Tabii ki, PRNG'lerin teknik sınırlamaları nedeniyle, mükemmel tekdüzelik imkansız olacaktır. Gönderinizin tekdüzeliğini değerlendirmek amacıyla, aşağıdaki işlemler mükemmel şekilde eşit dağılımlar sağladığı düşünülecektir:
- Bir PRNG'den (herhangi bir aralıkta) bir sayı elde etmek (yaklaşık olarak) tek tip olarak belgelenmiştir.
- Modulo veya çarpma (veya değerleri eşit olarak dağıtan başka bir işlem) aracılığıyla daha büyük bir sayı kümesi üzerinde daha küçük bir kümeye tekdüze bir dağılım eşleme. Büyük küme, küçük kümenin en az 1024 katı değer içermelidir.
Bölümler çoklu kümeler olduğu için bunları herhangi bir sırayla döndürebilirsiniz ve bu siparişin tutarlı olması gerekmez. Ancak, rastgele dağılım amacıyla, sıra ihmal edilir. Kendisine, yukarıdaki örnekte,
{3,1,1}
,{1,3,1}
ve{1,1,3}
birlikte döndürülen 1/7 bir olasılığına sahip olmalıdır.- Algoritmanızın deterministik bir çalışma zamanı olmalıdır . Özellikle, rastgele çoklu ayarlar oluşturamaz ve toplamıyorlarsa reddedemezsiniz
n
. - Algoritmanızın zaman karmaşıklığı polinom olmalıdır
n
. Özellikle, tüm bölümleri oluşturamaz ve rastgele bir bölüm seçemezsiniz (bölüm sayısı katlanarak arttığındann
). Kullandığınız PRNG'nin değer başına O (1) olarak eşit dağıtılmış değerler döndüğünü varsayabilirsiniz. - Bu görevi çözen yerleşik bir işlev kullanmamalısınız.
Tam bir program veya işlev yazabilir ve STDIN veya en yakın alternatif, komut satırı bağımsız değişkeni veya işlev bağımsız değişkeni ile girdi alabilir ve dönüş değeri üzerinden veya STDOUT'a (veya en yakın alternatife) yazdırarak çıktı üretebilirsiniz.
Sen varsayabiliriz n ≤ 65
bölümleri sayısının 2'den az olacak şekilde ( 21 ). Çıktı herhangi bir uygun, anlaşılır liste veya dize biçiminde olabilir.
Bir işlev gönderirseniz, lütfen işlevi birkaç kez çağıran ve sonuçları yazdıran küçük bir test programı da sağlayın. Parametrelerin kodda değiştirilmesi gerekiyorsa sorun değil. Bu, insanların çözümün en azından yaklaşık olarak tek tip olduğunu kontrol edebilmeleri içindir.
Bu kod golf, yani en kısa gönderme (bayt cinsinden) kazanır. Ve elbette, kullanıcı başına en kısa gönderim de serinin genel skor tablosuna girecektir.
Liderler Sıralaması
Serinin ilk gönderisi bir skor tablosu oluşturur.
Yanıtlarınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak her cevaba bir başlık ile başlayın:
# Language Name, N bytes
N
gönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(Dil şu anda gösterilmiyor, ancak snippet gerektiriyor ve ayrıştırıyor ve gelecekte bir dil lider tablosu ekleyebilirim.)