Sorun
Her S k (k = 1 - N) k sayısının N kopyasını içerdiğinde , S 1 den S N ye sahip N yığınınız olduğunu söyleyin .
Örneğin, N = 3 olduğunda istifler şöyle görünür:
1 2 3 <- top of stack
1 2 3
1 2 3 <- bottom of stack
=======
1 2 3 <- stack index
Burada 1, 2 ve 3 olarak endeksli 3 yığın var ve her biri kendi endeksinin N örneklerini içeriyor.
Amaç, N yığınlarını, her biri aynı şekilde yukarıdan aşağıya doğru 1'den N'ye kadar sayıları içerecek şekilde yeniden düzenlemektir.
örneğin N = 3 için amaç yığınları yeniden düzenlemek:
1 1 1
2 2 2
3 3 3
=======
1 2 3
Yığınlarla gerçekleştirebileceğiniz tek işlem , üstteki sayıyı yığınlardan birinden almak (haşhaş) ve sonra hemen farklı bir yığının (itme) üzerine yerleştirmektir . Bu, bu şartlara tabidir:
Bir sayı ancak bir yığına en üstteki sayıya eşit veya daha küçükse bir yığına itilebilir.
Herhangi bir boş olmayan yığından atılabilir ve önceki kurşunun sağlandığı varsayılarak herhangi bir yığına itilebilir.
Herhangi bir sayı boş bir yığına itilebilir.
Yığınların maksimum yükseklik sınırı yoktur.
Yığınlar oluşturulamaz veya yok edilemez, her zaman N sayısı vardır.
Bu zorluk, zorunlu olarak en az hamlede değil, kesin bir şekilde, borsa değişimini tamamlamak için hangi fırlatacağı ve ne yapacağına karar vermekle ilgilidir.
(Bir deste kart ile pratik yapmak, sorunu hissetmek için iyi bir yoldur.)
Meydan okuma
Olumlu bir tamsayıda N (3 veya üstü olması zorunlu olan) alan bir program veya işlev yazın. Yığınları başlangıç durumundan yeniden düzenlemek için gereken tüm pop-push eylemlerini gösteren bir dize yazdırın veya iade edin:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
=============
1 2 3 4 5
(N = 5 durum)
Son haliyle:
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
=============
1 2 3 4 5
Çıktınızdaki her satır, boşlukla ayrılmış iki sayı içermelidir. İlk sayı, çıkacak yığının dizini ve ikinci sayı, basılacak yığının dizinidir. Tüm çizgilerin işlemlerini sırayla gerçekleştirmek, herhangi bir kurala uymadan yığınları doğru şekilde düzenlemelidir.
Örneğin, N = 3 durumu için geçerli bir potansiyel çıktı:
1 2 [move the top number on stack 1 to the top of stack 2]
1 2 [repeat]
1 2 [repeat]
3 1 [move the top number on stack 3 to the top of stack 1]
2 3 [etc.]
2 3
2 3
2 1
2 1
2 1
3 1
3 1
3 1
3 2
1 2
1 2
1 2
1 3
2 3
2 3
2 3
1 2
3 2
3 1
notlar
Çıktınız yok değil optimum olması gerekir , yalnızca doğru. yani, pop ve push sayısını en aza indirmenize gerek yok.
- Yani, bazı hareketlerin art arda yapılıp derhal tersine çevrilip çözülmemesi sorun değil.
- Aynı hamle aynı hamle tek bir hareketle atmak ve itmek
2 2
de mümkündür (elbette anlamsız olsa da).
Çıktınız yapar deterministik ve sonlu olması gerektiğini.
Yığınların 1 tabanlı dizine sahip olduğunu unutmayın. 0 tabanlı dizine izin verilmiyor.
Tabii ki 9'dan büyük olan N, tek basamak N kadar iyi çalışmalıdır.
İstenirse , boşluk ve yeni satırların yerine herhangi iki farklı, basamaksız yazdırılabilir ASCII karakterini kullanabilirsiniz. Çıktıdaki izleyen bir yeni satır (veya yeni satır yerine).
puanlama
Bayt cinsinden en kısa kod kazanır. Tiebreaker daha yüksek oyla cevap verdi.
Değerli brownie puanları eğer algoritmasını en iyi şekilde gösterebilir.
-._(._.)_.-
N=3
Optimum durumda kullanabileceğiniz olası çıktı mı ?