Bu görevdeki göreviniz buna benzer bir "Kibrit çöpü Eşitliği" ni analiz etmektir ...
... ve maçları yeniden düzenleyerek geçerli bir denkleme dönüştürülüp dönüştürülemeyeceğini öğrenmek. Eğer öyleyse, bunu yapmak için en az sayıda hareket ve sonuçtaki denklemi çıkarmalısınız.
Giriş
Giriş, STDIN'den okunabilen, işlev bağımsız değişkeni olarak alınabilen veya hatta bir dosyada saklanabilen bir Dizedir. Bir kibrit çöpü düzenlemesini temsil eden bir denklemdir ve aşağıdaki EBNF kullanılarak açıklanabilir:
input = term, "=", term ;
term = number | (term, ("+" | "-"), term) ;
number = "0" | (numeralExceptZero , {numeral}) ;
numeralExceptZero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
numeral = "0" | numeralExceptZero ;
Geçerli bir giriş için örnek olarak gösterilebilir 3+6-201=0+0+8
.
Görev
Her bir kibrit çöpünün atanmış bir numarası olduğu aşağıdaki çizimi düşünün:
Şimdi her bir giriş sembolünü karşılık gelen kibrit çöpü konumlarıyla aşağıdaki gibi eşleştiriyoruz:
0 ↦ 1,2,3,4,5,6
1 ↦ 4,5
2 ↦ 2,3,5,6,8
3 ↦ 3,4,5,6,8
4 ↦ 1,4,5,8
5 ↦ 1,3,4,6,8
6 ↦ 1,2,3,4,6,8
7 ↦ 4,5,6
8 ↦ 1,2,3,4,5,6,8
9 ↦ 1,3,4,5,6,8
- ↦ 8
+ ↦ 8,10
= ↦ 7,9
Her giriş formülü bir kibrit çöpü düzenlemesine dönüştürülebilir. Örneğin, "45 + 6 = 92" denklemi
kullanılmayan kibrit çubukları gri renkte görünür. Göreviniz, denklemi geçerli kılmak için yeniden düzenlenmesi gereken en az sayıda kibrit çöpü bulmaktır.
Çıktı
Üç olası durumu birbirinden ayırıyoruz:
- Giriş geçerli değilse (yani yukarıdaki EBNF'yi karşılamıyorsa), ne istersen ver.
- Kibrit yeniden düzenleyerek geçerli bir birine denklemi açmak için yollar vardır Aksi takdirde, sen çıkışına sahip her iki düzenlenmeleri minimum sayıda ve karşılık gelen denklem. Girdi gibi, çıkan denklem de verilen EBNF'yi karşılamalıdır. Yukarıdaki örnekte, doğru çıktı
1
ve olacaktır46+6=52
. Elde edilen denklem için birden fazla olasılık varsa, bunlardan herhangi birini çıktılayın. - Aksi takdirde (giriş geçerliyse, ancak denklemi doğru yapmanın bir yolu yoksa) çıktı vermeniz gerekir
-1
.
ayrıntılar
- Eşleşmeleri kaldırma veya ekleme izniniz yok. Bu, eğer giriş
n
kibrit çubuklarından yapılmışsa, çıktı da tam olarakn
kibrit çubuklarından oluşmalıdır . - "Boş" kibrit çöpü bloklarına sadece denklemin sonunda ve başında izin verilir, ortada değil. Yani, örneğin, dönüm
7-1=6
içine7 =6-1
basitçe kaldırarak-1
sol taraftan ve sadece 3 kibrit çöpü yeniden düzenlemeleri içeren sağ tarafta eklemeden izin verilmez. Gerçekten bir artı için, bu meydan ilginç bir parçası olarak konumlarını kibrit çöpü kadar numaralardan eşleme görmüyorum yana 20 bayt , şunlardan birini yapabilirsiniz
- eşlemenin
(number/operation ↦ matchstick positions)
makul bir şekilde saklandığı bir dosyaya erişebilir veya - programlama diliniz bir
Map
veri tipini destekliyorsa, -mapping ile önceden(number/operation ↦ matchstick positions)
başlatılmış bir haritaya erişiminiz olduğunu varsayın. Bu harita örneğin şöyle görünebilir:{(0,{1,2,3,4,5,6}),(1,{4,5}),(2,{2,3,5,6,8}),(3,{3,4,5,6,8}), ..., (-,{8}),(+,{8,10}),(=,{7,9})}
- eşlemenin
Örnekler
Giriş: 1+1=3
↦ Çıkış: 1
ve1+1=2
Giriş: 15+6=21
↦ Çıkış: 0
ve15+6=21
Giriş: 1=7
↦ Çıkış: -1
Giriş: 950-250=750
↦ Çıkış: 2
ve990-240=750
Giriş: 1-2=9
↦ Çıkış: 1
ve1+2=3
Giriş: 20 + 3=04
↦ Çıkış: herhangi bir şey
kazanan
Bu kod golf , bu yüzden en kısa doğru cevap (bayt cinsinden) kazanır. Kazanan ilk doğru cevap gönderildikten bir hafta sonra seçilecektir.
=
(2 kibrit çöpü) ve -
(1 kibrit çöpü) konumunu değiştirebilir ve tüm numaraları oldukları yerde bırakabilirsiniz. Ancak, 2'nin sola taşınması gerekiyorsa, gerekli hamleleri de saymanız gerekir.
1+1+2=3-6+10
? Aynı soru çıktı.
0: 1, 2, 3, 4, 5, 6
tutarlılık için ekleyin