Pozitif tamsayılar listesini alan bir program veya işlev yazın. Bu tamsayıların her biri 2B düzlemdeki bir karenin yan uzunluğunu temsil eder. Her kare düzlemdeki herhangi bir tamsayı koordinatına taşınabilir, ancak dönemez ve diğer karelerle çakışamaz.
Her kare için farklı bir yazdırılabilir ASCII karakteri kullanarak (boşluk için kullanılan alan hariç), programınızın / fonksiyonunuzun yatay veya dikey yansıma simetrisine sahip karelerin herhangi bir tek düzenini yazdırması gerekir. Böyle bir düzenleme yoksa hiçbir şey yazdırılmamalıdır.
Kareler farklı karakterlerdir, böylece ayrı ayrı söylenebilirler. Sadece tüm karelerin birleşmesi ile yapılan şeklin simetrik olması gerekir. Listenin 94'ten fazla öğe içermediğini varsayabilirsiniz (94 karakter olduğu için).
Örneğin, girdiyse, [2, 1, 2, 2, 2]
olası bir çıktı:
DD--
DD--
Z
FFPP
FFPP
Bu şeklin yatay bir yansıma simetrisi çizgisi vardır; üst ve alt yarıları ayna görüntüleridir. Diğer bazı olasılıklar şunlardır: (Aynı karakterden iki kare yapılmadığı sürece karelerin dokunması gerekmediğini ve herhangi bir karakterin kullanılabileceğini unutmayın.)
55
55
%%
%%
@
HH
HH
((
((
G
11 33
11 33
22 44
22 44
Simetri satırı, karakterler arasındaki sınır da olabilir, örneğin [2, 4]
:
!!!!
!!!! ++
!!!! ++
!!!!
Bazı kareler kümelerini simetrik olarak düzenlemek imkansızdır, örneğin [1, 2, 3]
:
AAA BB C
AAA BB (these can't be vertically or horizontally symmetric => no output)
AAA
Kare sınırları olmasa bile genel şeklin simetrik olabileceğini unutmayın. örneğin için geçerli bir çıktı [2, 1, 1, 1, 1, 4]
:
AA----
AA----
BC----
DE----
Benzer şekilde, için geçerli bir çıktı [1, 1, 2, 3, 5]
:
44444
44444
44444
44444
44444
33301
33322
33322
notlar
- Giriş listesinde her zaman 1 ila 94 öğe olacaktır.
- Girdiyi makul bir şekilde alın: stdin, komut satırı, metin dosyası, işlev arg. İhtiyaçlarınıza uyacak şekilde biraz biçimlendirilebilir, örneğin
{1, 2, 3, 4}
veya[1 2 3 4]
. - Stdout veya benzeri çıktılar. Ortaya çıkan şekil simetri çizgisine sahip olduğu sürece, herhangi bir miktarda öndeki / arkadaki boşluklar veya satırsonları iyidir.
- Çapraz bir simetri çizgisi sayılmaz (aksi takdirde bu çok kolay olurdu). Ayrıca, dönel veya geçişli değil, yansıtıcı simetri olmalıdır.
- Dürüst olmak gerekirse, bu görevin hesaplama açısından ne kadar zor olduğundan emin değilim. Sorunun bazı alt kümelerini çözen kısmi yanıtlar gönderebilirsiniz (özellikle özellikle akıllı bir algoritma göstermek istiyorsanız). Bunlar kazanmaya uygun değil.
- Örneğin, girdinin her zaman en az bir simetrik düzene sahip olduğunu varsayabilirsiniz (bu nedenle listeler
[1, 2, 3]
asla girilmez). - Ya da, örneğin, sadece kare sınırlarının ve genel şeklin simetrik olduğu düzenlemeleri düşünebilirsiniz. Bu durumda
[1, 1, 2, 3, 5]
çıktı olmaz. - Eğer çıldırmak istiyorsanız, fikri dikdörtgenlere, hatta poliminolara kadar genişletebilirsiniz .
- Örneğin, girdinin her zaman en az bir simetrik düzene sahip olduğunu varsayabilirsiniz (bu nedenle listeler
puanlama
Puanınız, programınızın bayt cinsinden boyutudur . En düşük puan kazanır. Tiebreaker ilk gönderilen cevaba gider.
[2, 4, 6, 7, 8, 9, 11, 15, 16, 17, 18, 19, 24, 25, 27, 29, 33, 35, 37, 42, 50, 112]
Çözüm için bonus puan , ancak soru çok daha fazla özgürlük verdiği için muhtemelen başka çözümler var.