> 1
> Input
>> 1…2
>> L!
>> L+1
>> L∣2
>> L⋅R
>> 2%L
>> Each 4 3
>> Each 5 9
>> Each 6 10
>> Each 7 11 3
> {0}
>> 12∖13
>> Each 8 14
>> L≠1
>> Each 16 15
>> Each 7 17 15
>> 18∖13
>> [19]
>> 2’
>> 21⋅20
>> Output 22
Çevrimiçi deneyin!
Bu, Pillai olmayan asallar için boş bir liste, aksi takdirde boş olmayan bir liste döndürür.
Nasıl çalışır
Fısıltılar, gerçek / karmaşık sayılar üzerinde manipülasyon için tasarlandı, iyi bir ölçüm için biraz dizi komutları eklendi, böylece Each
oluşturulan listeler üzerinde tekrarlamak için tekrarlanan kullanımı .
Fısıltılar hakkında biraz bilgi:
Fısıltılar, diğer dillerin çoğunun yürütme yolunda biraz farklıdır. Her satırda doğrusal olarak çalışmak yerine, yalnızca koşullu dallanma, Whispers dosyadaki son satırda başlar >
(kurallar bundan biraz daha karmaşıktır, ancak şimdilik bilmemiz gereken tek şey) ve sayıların anlamları satırın >
veya ile başlayıp başlamadığına bağlı olarak farklılık gösterir >>
.
Çizgi ile başlarsa >
gibi, > 1
ya da > Input
, bu bir sabit hat - aynı değer her bir zaman verir. Burada, sayılar sayısal formlarını temsil eder, bu nedenle ilk satır çağrıldığında her zaman 1 değerini döndürür .
>>
Bununla birlikte, hat ile başlarsa , numaralar diğer satırlara referans olarak kabul edilir, eğer isterseniz, benzer işlev çağrıları gibi. Örneğin, satırda >> 1…2
, bu …
komut 1 ve 2 tamsayılarında değil, satır 1 ve 2'den döndürülen değerlerde komutu yerine getirir . Bu durumda, bu değerler 1 tamsayısıdır ve girdi olarak hangi tamsayıyı geçiririz.
Bu örnek için, 23 girişini ele alalım . Whispers'in önişlemi nedeniyle ikinci satırın ( > Input
) dönüştürüldüğünü unutmayın > 23
.
Bizim ilk komut satırında 3 üzerindedir: >> 1…2
. …
diyadik aralığı bu durumda gelen, olan , 1 ile 23 elde edildi, {1, 2, ... 22, 23} . Sonra, satır aşağı atlamak 9 ile 12 :
>> Each 4 3
>> Each 5 9
>> Each 6 10
>> Each 7 11 3
Burada Each
, her biri bir önceki sonuç üzerinde yinelenen 4 temelde deyimimiz var , temel olarak 4 komutunu 3. satırdaki dizi üzerinde eşleştiriyoruz : aralık. İlk üç ifade, 4 , 5 ve 6 satırlı basit haritalardır :
>> L!
>> L+1
>> L∣2
Bu üç tam sayı fazla komutları, n , verimler (n! 1) |x , burada ! belirtmektedir faktöryel , | belirtir divisbility ve x girişidir. Son olarak, hat 12 bir var diyadik haritası yapısını.
Bir ikili harita yapısı üç tamsayı alır: hedef, sol ve sağ, her biri diğer satırlara endekslenir. Burada, bir çift listesi oluşturmak için sola ve sağa sıkıştırıyoruz, ardından her çifti ikili komutla (hedef) azaltıyoruz. Burada, giriş 23 ise, listeler {1, 2, ... 22, 23} ve {0, 0, ... 1, 0} şeklindedir ve komut
>> L⋅R
sol argümanı sağ ile çarpar. Bu , faktöriyelleri artırılan tamsayıların dizinlerinde 0 ve girdiler tarafından bölünemeyen bir tamsayı dizisi ve bulundukları yerde orijinal dizin oluşturur. Bu diziye A diyoruz . Daha sonra, kaldırma 0 dan s A arasındaki grubu farkını alarak {0} ve A :
> {0}
>> 12∖13
Örnek girişimizle bu, {14, 18, 22} kümesini üretir . Sonra, girdinin kalanını setteki her değere böleriz ve kalanın 1'e eşit olup olmadığını kontrol ederiz :
>> 2%L
>> Each 8 14
>> L≠1
>> Each 16 15
Yine, ya bir listesi var 0 veya 1 s ve çıkarmaya gerek 0 s ve değiştirme 1 özgün değerlerle s. Burada yukarıda gördüğümüz kodu tekrarlıyoruz, ama >> 18∖13
yerine 12
. Son olarak, bu sonuç kümesini son bir kontrol için bir listeye yayınladık. Maalesef kodumuz, 437 gibi tüm bu ölçütleri karşılayan kompozit sayıları da reddetmelidir . Bu yüzden son kontrolümüzü ekleyerek son listemizi girdinin ilkeliğiyle çarpıyoruz. Python çarpımının listelerde nasıl çalıştığı nedeniyle, 0 boş bir listeyle değiştirilir ve 1'in hiçbir etkisi yoktur. Bu nedenle, girdinin ilkeliğini hesaplıyoruz, bunu m listesiyle çarpıyoruzgiriş için s ve nihai sonuç çıkış:
>> 2’
>> 21⋅20
>> Output 22