> Input
> Input
>> 1²
>> (3]
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
>> L⋅R
>> Each 9 4 8
> {0}
>> {10}
>> 12∖11
>> Output 13
Çevrimiçi deneyin!
Olası tüm çözümler kümesini ve boş kümeyi (ör. ∅) çözüm bulunmadığında.
Nasıl çalışır
Şaşırtıcı olmayan bir şekilde, diğer birçok cevapla neredeyse aynı şekilde çalışır: bir sayı listesi oluşturur ve her birini argümanla ters modül için kontrol eder.
Whispers'in program yapısının nasıl çalıştığını biliyorsanız, yatay çizgiye atlamaktan çekinmeyin. Değilse: esasen, Whispers son satırdan başlayarak satır satır referans sisteminde çalışır. Her satır iki seçenekten biri olarak sınıflandırılır. Ya bir nilad hattı ya da bir operatör hattı .
Nilad satırları >, > Inputveya ile başlar > {0}ve bu satırda temsil edilen tam değeri > {0}döndürür;{ 0 }. > Inputmümkünse değerlendirilen bir sonraki STDIN satırını döndürür.
Operatör hatları >>, >> 1²veya ile başlar >> (3]ve bir veya daha fazla değer üzerinde bir operatörün çalıştırılmasını gösterir. Burada, kullanılan sayılar bu açık sayılara başvurmaz, bunun yerine o satırdaki değere başvurur. Örneğin ², kare komut (n → n2), bu nedenle >> 1²değeri döndürmez12bunun yerine , bu durumda ilk giriş olan satır 1'in karesini döndürür .
Genellikle, operatör satırları yalnızca referans olarak sayıları kullanarak çalışır, ancak satırları >> L=2ve >> L⋅R. Bu iki değer Lve ifadeleriyle Rbirlikte kullanılır Each. Eachifadeleri, yine sayısal başvurular olarak iki veya üç bağımsız değişken alarak çalışır. İlk argüman (örn. 5), Bir işlev kullanılan bir operatör satırına bir referanstır ve diğer argümanlar dizilerdir. Daha sonra işlevi dizi üzerinde yineliyoruz; burada Lve Rişlevindeki yinelenen dizilerdeki geçerli öğeleri temsil eder. Örnek olarak:
İzin Vermek A = [ 1 , 2 , 3 , 4 ], B = [ 4 , 3 , 2 , 1 ] ve f( x , y) = x + y. Aşağıdaki kodu çalıştırdığımızı varsayarsak:
> [1, 2, 3, 4]
> [4, 3, 2, 1]
>> L+R
>> Each 3 1 2
Daha sonra Eachifadelerin nasıl çalıştığına dair bir gösteri elde ederiz . İlk olarak, iki diziyle çalışırken, bunları oluşturmak için sıkıştırıyoruzC= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] sonra harita f( x , y) her bir çiftin üzerinde D = [ f( 1 , 4 ) , f( 2 , 3 ) , f( 3 , 2 ) , f( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Çevrimiçi deneyin!
Bu kod nasıl çalışır?
Whispers'ın nasıl çalıştığına sezgisel olarak çalışarak, ilk iki satırdan başlıyoruz:
> Input
> Input
Bu iki girdimizi toplar, diyelim ki x ve yve bunları sırasıyla 1. ve 2. satırlarda depolar . Sonra depolarızx23. satırda bir aralık oluşturun ve bir aralık oluşturunA : = [ 1 . . . x2]satır 4 . Sonra bölüme atlıyoruz
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
Burada yürütülen ilk şey çizgidir 7 , >> Each 5 4çizgi yinelediğinden 5 hattı üzerinden 4 . Bu dizi verirB : = [ i%x|i ∈ A ], nerede bir%b'nin modülü olarak tanımlanır .bir ve b.
Daha sonra çizgiyi yürütmek 8 , >> Each 6 7çizgi yinelediğinden 6 overB, bir dizi verir C: = [ ( i%x ) = y|i ∈ A ].
Girişler için x = 5 , y= 2, sahibiz A = [ 1 , 2 , 3 , . . . , 23 , 24 , 25 ], B=[0,1,2,1,0,5,5,...,5,5] and C=[0,0,1,0,0,...,0,0]
We then jump down to
>> L⋅R
>> Each 9 4 8
which is our example of a dyadic Each statement. Here, our function is line 9 i.e >> L⋅R and our two arrays are A and C. We multiply each element in A with it's corresponding element in C, which yields an array, E, where each element works from the following relationship:
Ei={0AiCi=0Ci=1
We then end up with an array consisting of 0s and the inverse moduli of x and y. In order to remove the 0s, we convert this array to a set (>> {10}), then take the set difference between this set and {0}, yielding, then outputting, our final result.