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 7
ve 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]]
1M
tü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
,3M
ve4M
ikinci, üçüncü, tüm giriş geri ve dördüncü son işlev çağrıları. Yani2M
verir12
,16
;3M
verir4
; ve4M
verir5
,6
. - Birden fazla giriş alan çağrıları işlevlendirmek için
4
belirli 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 .5M
28
6M
11
7M
16
8M
12
9M
6
4
10M
5
Örnek 3'teki pano durumu için:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
verir3
.2M
verir2
,40
,34
.3M
verir7
,8
,15
.4M
vardır tanımsız davranış sadece üç işlev çağrıları olmuştur, çünkü (bu meydan amaçları için).5M
verir34
.6M
verir40
.7M
verir2
.8M
verir15
.9M
verir8
,10M
verir7
.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,
n
olamaz4
ya11
.
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