Bu zorluk, Mayıs 2018 Ayın Dili etkinliğinin bir parçası olarak MATL dilinin bazı özellikleri ile ilgilidir . İlişkili zorluk: İşlev panosu: kopyalama .
Giriş
MATL'in fonksiyon panosu , girişleri normal, giriş alma işlevlerine yapılan en son dört çağrının içinde saklar ("kopyalar"). Normal işlevler, MATL'de en yaygın işlev türüdür. Giriş alma , işlevin en az bir giriş alması anlamına gelir. Saklanan pano içeriği yığının üzerine itilebilir ("yapıştırıldı").
Bu meydan okuma pano içeriğini girdi olarak alacaktır. Pano durumunu üreten tüm işlevlerin girdi olarak bir veya daha fazla pozitif tamsayı aldığı varsayılacaktır. Böylece pano durumu bir sayı listesi listesi ile temsil edilebilir. (Panonun gerçekte nasıl doldurulduğu hakkında daha fazla bilgi için ilgili zorluğa bakın; ancak mevcut olan için bu gerekli değildir).
Pano içeriklerini yorumlama
örnek 1
İlk iç liste atıfta En son , böyle devam Böylece pano durumunu işlev çağrısı ve
[[11, 28], [12, 16], [4], [5, 6]]
Son işlev çağrısı iki giriş aldı işaret eder, yani 11, 28; ikinci son çağrı girişlerini aldı 12, 16; (Bu pano durumu ilgili zorluğun ilk örneğindeki kod tarafından üretilir).
ÖRNEK 2
Eğer yeterince işlev çağrıları var olmamıştır , panoya bazı sondaki iç listeler boş olacaktır:
[[7, 5], [], [], []]
(Bu sadece 7ve ekleyen bir program tarafından üretilir 5).
ÖRNEK 3
İşlev çağrıları herhangi bir sayıda giriş içerebilir , ancak her zaman en azından 1(giriş almayan işlevler pano durumunu değiştirmez). Böylece aşağıdakiler de mümkündür.
[[3], [2, 40, 34], [7, 8, 15], []]
Pano içeriğine erişme
İşlev panosunun içeriği, MATL'nin işlevi kullanılarak yığına itilir M(bu arada, normal bir işlev değil, bir pano işlevi). Bu işlev giriş olarak pozitif bir tamsayı alır ve pano içeriğinin bazılarını aşağıdaki gibi yığının üzerine iter. Örnek 1'deki pano durumuna referansla:
[[11, 28], [12, 16], [4], [5, 6]]
1Mtüm girişleri en son işlev çağrısına döndürür . Yani, dikkate alınan örneğin o verir11,28.- Benzer şekilde,
2M,3Mve4Mikinci, üçüncü, tüm giriş geri ve dördüncü son işlev çağrıları. Yani2Mverir12,16;3Mverir4; ve4Mverir5,6. - Birden fazla giriş alan çağrıları işlevlendirmek için
4belirli girişlerin ötesindeki sayılar . Böylece son girdiyi bu tür en son çağrıya döndürür . Bizim durumumuzda bu verir . önceki bağımsız girdiyi döndürür . ikinci son aramanın son girişini, yani , ve verir . Şimdi verir . İşlev çağrısındaki tek girdi olduğundan girdinin nasıl atlandığına dikkat edin . Son olarak verir .5M286M117M168M129M6410M5
Örnek 3'teki pano durumu için:
[[3], [2, 40, 34], [7, 8, 15], []]
1Mverir3.2Mverir2,40,34.3Mverir7,8,15.4Mvardır tanımsız davranış sadece üç işlev çağrıları olmuştur, çünkü (bu meydan amaçları için).5Mverir34.6Mverir40.7Mverir2.8Mverir15.9Mverir8,10Mverir7.11M,,12M... ayrıca tanımsız davranışa sahiptir .
Meydan okuma
Giriş :
- panoların listesi, liste listesi veya diğer makul biçimler;
- pozitif bir tam sayı , n .
Çıktı : giriş olarak nM ile çağırma fonksiyonunun sonucu . Çıktı, açık bir ayırıcıya sahip bir veya birkaç sayı veya liste veya dizi gibi makul bir biçimde olacaktır.
Açıklamalar:
- Pano durumu dört sayı listesinden oluşur. Takip eden listelerin bazıları örnek 2 ve 3'te olduğu gibi boş olabilir. İstenirse, panoya bu boş listeler olmadan giriş yapabilirsiniz. Böylece örnek 3 olur
[[3], [2, 40, 34], [7, 8, 15]]. - Panodaki tüm sayılar, muhtemelen birden fazla rakamla pozitif tamsayılar olacaktır.
- N sayısının geçerli olduğu garanti edilir. Yani yukarıdaki örnekte 3,
nolamaz4ya11.
Ek kurallar:
Giriş ve çıkış herhangi bir makul yolla alınabilir .
Programlara veya işlevlere, programlama dilinde . Standart boşluklar yasaktır .
Bayt cinsinden en kısa kod kazanır.
Test senaryoları
Clipboard state
Number
Output(s)
[[11, 28], [12, 16], [4], []]
2
12, 16
[[11, 28], [12, 16], [4], []]
5
28
[[7, 144], [12], [4, 8], [3, 4, 6]]
1
7, 144
[[7, 144], [12], [4, 8], [3, 4, 6]]
10
4
[[30], [40], [50, 60], [70, 80, 90]]
2
40
[[30], [40], [50, 60], [80, 90]]
7
90
[[15], [30], [2, 3, 5], [4, 5, 10]]
3
2, 3, 5
[[15], [30], [2, 3, 5], [4, 5, 10]]
7
2