Bir sayacım var. Şuna benzeyen küçük bir cihaz:
Ekran gider 0000
iç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, 0010
küçü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 7070
değil, 6070
ya da 7060
. Ayrıca, düğme yuvarlanacak 9
için s üzerinde 0
taşıyan olmadan 0990
ilerlemek olacaktır 0000
yerine 1000
ya 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 0000
için 9999
ve aşağıdaki biçimde bir dizi adım döndürür:
> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678
Nerede C
anlamı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 D
1 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.
0010
içine0020
bu 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,1234567
düğ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ü1234567
ifade ediyor mu?