Bir esnek yılan şöyle görünür:
<||=|||:)~
|
Bir esnek kısım olarak bilinen esnek bir yılandaki dikey çubukların ( ) her ayrı dizisi , genişliğinin iki katı kadar ayrı ayrı genişletilebilir ve bir kez uzatılmış alternatif eğik çizgilerle ( /
, \
) çizilir .
Yukarıdaki özel yılan, dört olası poz vererek, bu gibi iki esnek kısma sahiptir:
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
Esnek bir yılanın en az gerilmiş pozundaki genel formu bu regex ile tanımlanır :
<(\|+=)*\|+:\)~
Kelimelerde şu şekilde ifade edilebilir:
<
, Dizilerin herhangi bir sayıda ve ardından|
's birleştirilmiş ile=
, ardından işaretler:)~
.
Yani <|:)~
ve <||:)~
ve <|=|:)~
ve <|=|=||=|||||=||:)~
esnek yılan vardır, ama <=:)~
ve <=|:)~
ve <||=:)~
ve <|==||:)~
değillerdir.
Esnek yılanlar ayrıca sağ yerine sola da bakabilir, örn ~(:|||=||>
. Formlar aynı, sadece yansıtılmış.
Meydan okuma
Aralarında bazı boşluklar olacak şekilde birbirine bakan iki esnek yılandan oluşan tek bir satır dizgisine geçen bir program yazın. Her iki yılan da en az gerilmiş pozunda olacaktır (tüm dikey çubuklar, eğik çizgi yok). İp, sağa bakan yılanın kuyruğuyla başlayacak ve sola bakan yılanın kuyruğuyla sona erecektir (isteğe bağlı olarak ayrıca izleyen bir yeni satır olduğunu da varsayabilirsiniz).
Örneğin, yılanlar arasında beş boşluk bulunan olası bir girdi:
<|=||:)~.....~(:||||>
.
Netlik için gerçek boşluk karakterleri yerine perioları ( ) kullanıyorum.
Yılanlar arasındaki sıfır boşluklar da geçerli girişlerdir:
<|=||:)~~(:||||>
Dilleri böyle dokunurken yılanların öpüştüğünü söylüyoruz .
Programınızın, her iki yılanın esnek kısımlarının bir birleşimini genişletmesi gerekir; böylece yılanlar, aralarında mümkün olan en az sayıda boşluğa sahip olur (örtüştürmeden), yani yılanlar, mümkün olduğunca öpmeye yakındır .
Her iki yılanın ucu da sabit ancak başları ve gövdeleri, hangi esnek bölümlerin uzatıldığına göre - sağa bakan yılan için sağa, sola bakan yılan için sağa doğru - hareket edebiliyor.
Programınızın çıktısı, uzatılmış kısımlar için dikey çubukların yerine çizilen alternatif eğik çizgileri olan yılanları mümkün olduğunca öpmeye yakın gösteren tek satır dizisidir (artı isteğe bağlı izleyen yeni satır).
Örneğin, <|=||:)~.....~(:||||>
(yukarıdan) için çıktı şöyle olacaktır:
</\=||:)~~(:/\/\/\/\>
Buradaki tek çözüm bu çünkü uzatılmış esnek kısımların başka bir kombinasyonu ile yılanlar üst üste gelecek veya öpüşmekten daha uzakta olacaklardır.
Mümkün olan birden fazla çözüm varsa, çıktı bunlardan herhangi biri olabilir.
Örneğin, giriş olsaydı
<|=||:)~.....~(:|||=|>
çıktı olabilir
<|=/\/\:)~~(:/\/\/\=|>
veya
</\=||:)~~(:/\/\/\=/\>
Yılanların öpüşmesini sağlamak her zaman mümkün olmayacak, ama yine de onları mümkün olduğunca yaklaştırman gerek.
Örneğin, giriş olsaydı
<||=||||:)~...~(:||>
çıktı olabilir
</\/\=||||:)~.~(:||>
veya
<||=||||:)~.~(:/\/\>
Yılanlar zaten öpüşüyorsa, çıkış girişle aynı olacaktır. Örneğin
<|=||:)~~(:||||>
Genel olarak, herhangi bir esnek bölümün uzatılması yılanların üst üste binmesine neden olacaksa, çıktı, girişle aynı olacaktır. Örneğin
<|||=|||:)~..~(:||||=|||||=||||||>
notlar
- Her zamanki gibi stdin'den veya komut satırından girdi alır veya dize alan bir işlev yazar. Çıktıyı yazdırın veya iade edin.
- İsterseniz
.
giriş ve çıkışta boşluk () yerine bölümler ( ) kullanabilirsiniz.
- Sadece eğik çizgilerin değiştirdikleri dikey çubuk dizisi içinde dönüşümlü olması önemlidir. Yılandaki büyük sıraları veya öne veya arkaya eğik çizginin gelip gelmediği önemli değil.
- Sıkı kısımlar kısmen uzayamaz - bu tam olarak iki katıdır veya uzaması yoktur.
puanlama
Bu kod golfü . Bayt cinsinden en kısa gönderme kazanır. Tiebreaker daha erken bir cevaptı.
>
haline olmaz <
, biri için aynı (
ve )
), ama aynı zamanda Onların yerini dikey çubukların dizisi içinde alternatif eğik olduğunu sadece önemli" diyor. Onların sipariş içinde büyük ya da ileri ya da geri eğik çizginin gelip gelmediği önemli değil. ”