Bir sayacım var. Şuna benzeyen küçük bir cihaz:
Ekran gider 0000için 9999. Üstte sayıyı 1 artıran küçük bir basma düğmesi ve sağda, sayacı 0'a sıfırlamak olan küçük bir düğme vardır.
Şimdi, küçük düğme ile ilgili şey, geriye doğru çevirirseniz, tekrar ileri doğru çevirdiğinizde istediğiniz herhangi bir rakamı artırabilmenizdir. Sayaç düğmesini gösterecek şekilde sayaç düğmesine 10 kez basarsam, 0010küçük bir klik sesi duyana kadar düğmeyi geriye doğru döndürebilirim, sonra tekrar ileri doğru çevirip düz konuma getirebilirim 0090.
Ancak, düğme, sayıları her ileri ittiğinde aynı basamağın tüm oluşumlarını her zaman 1 artırır. Yani sayaç gösterileri ise 6060, sadece o yükselmesi yapabilir 7070değil, 6070ya da 7060. Ayrıca, düğme yuvarlanacak 9için s üzerinde 0taşıyan olmadan 0990ilerlemek olacaktır 0000yerine 1000ya 1100.
Sayacı belirli bir sayıya ayarlamanın en etkili yolunu bilmek istiyorum. Göreviniz, düğme basma ve düğme ilerlemelerinin en kısa sırasını belirleyecek bir program veya işlev yazmaktır.
Programınız girdi olarak 4 basamaklı bir sayı alacak 0000için 9999ve aşağıdaki biçimde bir dizi adım döndürür:
> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678
Nerede Canlamına gelir ve herhangi bir rakamla "Karşı düğmeye basmak" D"tüm tekrarlarını ilerlemek için düğmeyi kullanmak için 0 ila 9 tribünden D1 ile".
Programınız tüm olası dört basamaklı kombinasyonlar için geçerli bir adım dizisi üretmelidir ve tüm 10.000 vaka için gereken toplam adım sayısına göre puanlanır. Beraberlik durumunda (muhtemelen en uygun algoritma bulunduğunda), daha kısa kod kazanacaktır.

0010içine0020bu durumda? Ya da sadece düğmeyi geriye çevirebilir misiniz? Ve ayrıca, her "D" düğmenin "D" sayısı olarak sayılır mı (örneğin,1234567düğmeyi 1 kez, sonra 2 kez, sonra 3 kez, yani böyle çevirmek anlamına gelir)? Yoksa her bir ayrı düğme dönüşünü1234567ifade ediyor mu?