Her biri bir tamsayı verilen sonsuz sayıda ödev problemim olduğunu (!) Varsayalım.
Matematik Problem Gösterimi, problem tanımlayıcılarını kullanarak problemin alt kümelerini tanımlamak için kullanılan bir gösterimdir.
Bir MPN ifadesi birkaç şeyden oluşabilir:
- Tek bir değer. Bu sayı içeren bir grubunu temsil eder:
99 -> {99}
. - Basit bir ürün yelpazesi. Bu aralığın başından sonuna kadar bütün sayıları içeren kümesini temsil:
10~13 -> {10, 11, 12, 13}
. Sol veya sağ taraflar eksikse, sırasıyla -Infinity veya Infinity olduğu varsayılır~10 -> {x|x ≤ 10}
:;~ -> ℤ
. - Bir MPN ifadesi, ardından "atlama" ve başka bir MPN ifadesi. Bu iki set farkını temsil eder:
10~20 skip 12~14 -> {10, 11, 15, 16, 17, 18, 19, 20}
. - Virgülle ayrılmış iki MPN ifadesi. Bu iki takım birlikteliğini temsil eder:
1,8~9,15~17 -> {1,8,9,15,16,17}
.
"Atla" operatörü, virgül operatörüne göre daha sıkı bağlanır, bu nedenle 16,110~112 skip 16 -> {16,110,111,112}
(16 kümeye dahil edilmez {110,111,112}
, bu nedenle hariç tutma 16 fark etmez.)
Ayrımcılık için parantez içine ifadeler de koyabilirsiniz:
1~9 skip (2~8 skip (3~7 skip (4~6 skip 5))) -> {1,3,5,7,9}
Bu dilbilgisi:
<expr> ::= "(" <expr> ")"
|| <number>
|| [<number>] "~" [<number>]
|| <expr> "skip" <expr>
|| <expr> "," <expr>
Göreviniz iki girdi alan bir program yazmaktır:
- MPN ifadesi
- Bir sayı
ve bu sorunun MPN ifadesi tarafından tanımlanan kümede olup olmamasına bağlı olarak bazı doğruluk veya falsey değeri verir.
Özellikler
- İlk girişin iyi biçimlendirilmiş bir MPN ifadesi olduğunu varsayabilirsiniz (yani yukarıdaki dilbilgisi ile eşleşir)
- MPN ifadesindeki sayılar her zaman tamsayıdır. Negatif veya sıfır olabilirler, ancak asla kesirli bir kısmı olmayacaktır.
- Bu kod golf , bu nedenle (bayt olarak ölçülen) en kısa geçerli gönderim kazanır.
- İsterseniz
~
ve için farklı karakterler kullanabilirsiniz,
.
Test Durumları
10~20 14 -> True
10~20 20 -> True
10~20 skip 14~18 17 -> False
~ skip 6 8 -> True
16,17 skip 16 16 -> True
(16,17) skip 16 16 -> False
~10,5~ 8 -> True
~10,5~ 4 -> True
6 skip 6,~ 6 -> True
~
ve ,
ancak için skip
.
6 skip 6,~
ben inanıyorum Ben doğru yorumlanır ettik. Diğer 2 cevap şimdiye kadar tatmin etmiyor (yine doğru yorumladığımı varsayarak). Yanlış anladıysam, lütfen düzeltin ve açıklığa kavuşturun, ancak benim anlayışımdan, herhangi bir şeyle eşleşmelidir (hiçbir şeyle eşleşmeyen bir setin birleşimidir). Bunlar, daha önce bahsettiğim, çözümlerimizi test ederken çok yardımcı olabileceğini düşündüğüm türler.