> 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ı >
, > Input
veya ile başlar > {0}
ve bu satırda temsil edilen tam değeri > {0}
döndürür;{ 0 }. > Input
mü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=2
ve >> L⋅R
. Bu iki değer L
ve ifadeleriyle R
birlikte kullanılır Each
. Each
ifadeleri, 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 L
ve R
iş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 Each
ifadelerin 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.