Bu zorluk, Mayıs 2018 Ayın Dili etkinliğinin bir parçası olarak MATL dilinin bazı özellikleriyle ilgilidir . İlişkili zorluk : İşlev panosu: yapıştır .
Giriş
MATL, daha sonra alınacak değerleri (kopya) depolayabileceğiniz (yapıştır) birkaç panoya sahiptir . Bazı panolar otomatiktir , yani kopyalama bazı olaylar tarafından otomatik olarak tetiklenir. Bu zorluk, işlev giriş panosu veya basitçe işlev panosu adı verilen otomatik klip kartlarından birine odaklanır .
Bu pano, girişleri normal, giriş alma işlevlerine yapılan en son dört çağrının içinde saklar. Normal işlevler, MATL'de en yaygın işlev türüdür. Girdi alma , işlevin en az bir girdi alması anlamına gelir (herhangi bir girdi almayan işlevler işlev panosu tarafından dikkate alınmaz).
Bu en iyi iki normal işlevi kullanan aşağıdaki örneklerle açıklanmaktadır:
+
yığınından iki sayı çıkar ve toplamlarını iter.U
, bir sayı çıkar ve karesini iter.
Örnek 1 :
3 2 + 6 + 12 4 U + +
sonucu üretir39
. Kod şu şekilde yorumlanır:
- Gibi sayısı sabitleri
3
veya12
yığınına itilir olsun +
Girdilerini açma ve çıktılarını yığına itme gibi işlevler .
Kronolojik sırayla işlev çağrıları şunlardır:
3 2 +
verir5
5 6 +
verir11
4 U
verir16
12 16 +
28
11 28 +
verir39
.
Pano, dört listenin listesi olarak görüntülenebilir. Her bir iç liste bir işlev çağrısının girişlerini içerir, en son çağrılar önce gelir . Her iç listede, girdiler orijinal sıralarına göre sıralanmıştır .
Bu yüzden kodu çalıştırdıktan sonra pano içeriği (Python notasyonunda):
[[11, 28], [12, 16], [4], [5, 6]]
Örnek 2 :
10 20 U 30 +
numaraları 10
ve 430
yığın üzerinde bırakır . Yığın, programın sonunda aşağıdan yukarıya görüntülenir.
Fonksiyon çağrıları
20 U
verir400
400 30 +
verir430
Yalnızca iki işlev çağrısı olduğundan, panoyu tanımlayan iç listelerin bazıları boş olacaktır . Ayrıca 10
herhangi bir işleve giriş olarak nasıl kullanılmadığına dikkat edin.
Bu nedenle, kodu çalıştırdıktan sonra pano içeriği şunlardır:
[[400, 30], [20], [], []]
Örnek 3 (geçersiz):
10 20 + +
ikinciye bir girdi +
eksik olduğu için geçersiz kabul edilir (MATL'de bu dolaylı olarak kullanıcı girişini tetikler).
Meydan okuma
Girdi : sayı değişmezleri olan ve boşluklarla ayrılmış bir S dizesi .+
U
Çıktı : S dizesini değerlendirdikten sonra işlev panosunun içeriği .
Açıklamalar:
- Bu işlevleri temsil etmek için basamaklar dışında iki tutarlı simge kullanabilirsiniz. Ayrıca, boşluk yerine ayırıcı olarak herhangi bir tutarlı sembolü kullanabilirsiniz.
- Sadece belirtilen iki fonksiyon dikkate alınacaktır.
- Giriş dizesi en az bir sayı değişmezi ve en az bir işlev içerecektir.
- Tüm sayılar, muhtemelen birden fazla basamaklı pozitif tamsayılar olacaktır.
- Bazı sayı değişmezlerinin, örnek 2'deki gibi herhangi bir işlev tarafından kullanılmaması mümkündür.
- Girişin, ek numaralar gerektirmeden geçerli bir kod olması garanti edilir. Yani örnek 3'teki gibi bir dize asla oluşmayacaktır.
- Çıktıdaki boş iç listelerin izlenmesi ommite edilebilir. Yani örnek 2'deki sonuç
[[400, 30], [20]]
- Herhangi bir makul, net çıktı biçimi kabul edilebilir. Örneğin, dış ayırıcı olarak iç ayırıcı ve noktalı virgül ile bir dizge:
400,30;20;;
.
Ek kurallar:
Giriş ve çıkış herhangi bir makul yolla alınabilir .
Programlara veya işlevlere herhangi bir programlama dilinde izin verilir . Standart boşluklar yasaktır .
Bayt cinsinden en kısa kod kazanır.
Test senaryoları
Input
Output
3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]
15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]
3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]
8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]
10 1 1 + U U U U U
[[65536], [256], [16], [4]]
M
mu?
M
. Bunu "macun" mücadelesinde yapacağım
[[28, 11], [16, 12], [4], [6, 5]]
İlk örnek için geçerli çıktı mı ?