Sadece karakterleri içeren bir tek uzunluk dizede götüren bir program yazın .
ve :
. Başlangıçta boş bir yığının yardımıyla, bu dizgiden aşağıdaki gibi bir sayı oluşturun:
Karakter dizisindeki her c karakteri için (soldan sağa doğru) ...
- C ise
.
ve yığında 2 öğeden daha az varsa , yığında 1 tuşuna basın. - Eğer c olan
.
ve yığın 2 ya da daha fazla eleman vardır, yığın kapalı, iki üst değerleri pop ve yığına bunların toplamı itin. - C ise
:
ve yığında 2 öğeden daha az varsa , yığında 2 tuşuna basın. - Eğer c olan
:
ve yığın 2 ya da daha fazla eleman vardır, yığın kapalı, iki üst değerleri pop ve yığın üzerine kendi ürün itin.
Sonuçta ortaya çıkan sayı yığının en üstündeki değerdir. Programınız bu numarayı stdout'a yazdırmalıdır (isteğe bağlı izleyen bir yeni satır ile).
(Küçük bir analiz, dizenin uzunluğu daha uzun olmadığı sürece, sadece bir sayı kaldığını gösteriyor, bu yüzden bunları görmezden geliyoruz.
Örneğin ::...:.:.
, 9 sayısı :
2 1 2 2 /______ stack just after the character below is handled
2 2 4 4 5 5 7 7 9 \
: : . . . : . : . <-- string, one character at a time
Akıl sağlığı kontrolü olarak, işte tüm uzunluk 1, 3 ve 5 dizelerinin sayıları:
. 1
: 2
... 2
..: 1
.:. 3
.:: 2
:.. 3
:.: 2
::. 4
::: 4
..... 3
....: 2
...:. 4
...:: 4
..:.. 2
..:.: 1
..::. 3
..::: 2
.:... 4
.:..: 3
.:.:. 5
.:.:: 6
.::.. 3
.::.: 2
.:::. 4
.:::: 4
:.... 4
:...: 3
:..:. 5
:..:: 6
:.:.. 3
:.:.: 2
:.::. 4
:.::: 4
::... 5
::..: 4
::.:. 6
::.:: 8
:::.. 5
:::.: 4
::::. 6
::::: 8
Bayt cinsinden en kısa program kazanır. Tiebreaker daha önce yayınlandı.
- Girişin her zaman geçerli olduğunu, yani yalnızca içeren
.
ve:
uzunluğu tuhaf bir dize olduğunu varsayabilirsiniz . - Bir program yazmak yerine, geçerli bir dize alan ve oluşturulan sayıyı basan veya döndüren bir işlev yazabilirsiniz.