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
50bir 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.