Mümkün olduğunca küçük bir alanda biriktirmem gereken bir sürü tahta var. Ne yazık ki, tahtaları 10'dan fazla yükseğe yığarsam düşer. Panoları ondan fazla yüksek istiflemeden veya panoları boş alan üzerine asmadan olabildiğince az yatay alan alacak şekilde nasıl istifleyeceğimi söyleyecek bir programa ihtiyacım var.
Senin görevin:
Pano uzunluklarını içeren bir dizi verildiğinde, ASCII sanatı olarak çıktıları, panoları 10'dan fazla istiflemeden veya herhangi bir parçasına sahip olmadan mümkün olduğunca fazla yatay alandan tasarruf etmek için panoları istifleme yolunun çıktısını veren bir program veya işlev yazın. tahta üzerinde boş yer dışarı asılı. ASCII resminiz, her biri farklı bir karakter kullanılarak gösterilen panoların yapılandırmasını göstermelidir. En fazla 20 pano olacaktır. Örneğin, girdi [2,2,4,2,2,4,4,4] ise, olası bir çıktı:
dhh
dgg
dff
dee
abc
abc
abc
abc
bu kararlı bir konfigürasyon (bu gerçek hayatta ~ 0.1 saniye içinde düşmesine rağmen).
Giriş:
Kartların uzunluklarını gösteren en fazla 20 tamsayı içeren bir dizi.
Çıktı:
Yukarıda ana hatlarıyla gösterildiği gibi panoların konfigürasyonlarını gösteren ASCII sanatı.
Test Durumları:
Test senaryoları için başka çözümler olabileceğini ve her kart için gösterilen karakterlerin farklı olabileceğini unutmayın.
[12,2,2,2,3,4,4,8,8] -> ffgghhiii
ddddeeeeeeee
bbbbbbbbcccc
aaaaaaaaaaaa
[4,4,4,4,4,4,4,4,4,4,4,4] -> llll
aaaa
cfghk
cfghk
cfghk
cfghk
debij
debij
debij
debij
[4,4,4,4,4,4,3,3,3,2,2,2,1] -> jjml
iiil
hhhk
gggk
ffff
eeee
dddd
cccc
bbbb
aaaa
puanlama:
Bu kod golf , bayt kazanır en düşük puan