Bu soruyu ortaya çıkardığı için @ Agawa001'e verilen krediler .
açıklama
Yeni "anahtar deliğimin" yalnızca 2 düğmesi vardır, +
ve -
.
Bellekteki sayı şuradan başlar 0
.
Art arda +
veya düğmesine her basışta, -
tam olarak art arda kaç kez basıldığı için bellek artırılır / azaltılır.
Bu nedenle, +
4 kez basarsanız , ilk kez 1 eklediğinde, ikinci kez 2 ekler, üçüncü kez 3 ekler, dördüncü kez 4 ekler ve size 10
(on) verir.
Şimdi, -
3 kez basarsanız , ilk kez 1, ikinci kez 2, üçüncü kez 3 çıkarır ve sizi 4
(dört) ile bırakır .
TL; DR
+ Ve - karakter dizisi verildiğinde, karakteri her karakter değişikliğinde bölün. Daha sonra, sonuçta ortaya çıkan her m +
simgesi dizisi, m'inci üçgen sayısını ekler ve n -
sembollerinin her bir dizisi, n'inci üçgen numarasını çıkarır.
Walk-yoluyla
Şimdi, hala anlamıyorsanız, size nasıl +++--+--
yaratıldığını göstereceğim 1
.
Program | Counter | Memory
----------------------------
| 0 | 0
+ | +1 | 1
++ | +2 | 3
+++ | +3 | 6
+++- | -1 | 5
+++-- | -2 | 3
+++--+ | +1 | 4
+++--+- | -1 | 3
+++--+-- | -2 | 1
Görev
- Fonksiyonel argüman olarak veya STDIN'den girdi olarak pozitif bir tamsayı alırsınız.
- Ardından, yukarıdaki yöntemi kullanarak bu sayıyı oluşturmak için gereken minimum tuş vuruş sayısını çıkarır / yazdırırsınız.
testcases
+
Veya -
run'ların yeniden düzenlenmesi aynı sayıyı verdiğinden, bu tür her grup için sadece sözlükbilimsel olarak en erken sekans listelenir.
Input | Output | Possible corresponding sequences
-------------------------------------------------
4 | 5 | -+++-
6 | 3 | +++
9 | 5 | ++++-
11 | 7 | +++-+++
12 | 7 | +++++--, ++++-++
19 | 8 | -++++++-
39 | 12 | +++++++++---
40 | 13 | +++++++++---+, ++++++++-+++-
45 | 9 | +++++++++
97 | 20 | ++++++++++++++--+---, +++++++++++++-++++--, ++++++++++++-++++++-
361 | 34 | ++++++++++++++++++++++++++-+++-+++
Ekstra kaynaklar
- Herhangi bir sayının yapılabileceğinin kanıtı : temel olarak, tekrarlayarak
++-
herhangi bir çift sayı elde edebilirsiniz. Tek sayıları elde etmek+
için sonuna bir a koyun . - Herhangi bir sayı almanın başka bir genel yolu. Örneğin, oluşturmak için
50
bir yol+
50 kez basmak ve sonra-
49 kez basmaktır. - İlk 50 sayının çözümü .
- Zorunlu JSFiddle .
puanlama
Bu kod golfü . Baytlarda en kısa çözüm kazanır.
+++++--
aynı zamanda bir alternatiftir, ancak ++-++++
eşdeğer olduğundan kaldırıldım ++++-++
). Eğer bir tane daha verimli bir çözüm bulursa, daha sonra eklemek istiyorum bir dava daha var, eğer ben üretmek yönetmek eğer.
++-++++
Kaldırılmasını istemedim . Ayrıca, bu SİZİN düzenlememdi, SİZİN değil.
+++++--
(ya da eşdeğer --+++++
), bu yüzden ilk etapta düzenleme ihtiyacını hissettim.