([]<>){({}{}(({}[()])))}{}{({}()<(({})<{({}()<<>({}<>)>)}{}((()()()()()){})>)>)}{}{}{({}<>)<>}<>
Çevrimiçi deneyin!
İkinci çözüm, 96 bayt
(([]<>)<{({}({})({}[()]))}{}>){({}(({})<{({}()<<>({}<>)>)}{}((()()()()()){})>))}{}{}{({}<>)<>}<>
Çevrimiçi deneyin!
açıklama
Burada ilk çözümü açıklıyorum, ikisi de aynı uzunluktadır ancak ilkini seviyorum çünkü daha serin ve bazı güzel numaralar kullanıyor.
Kodun en önemli kısmı, bir süre önce yazdığım, değiştirilmiş bir karekök işlevidir. Orijinal versiyon
{({}[({})({}())])}{}
Ve bu işe yarıyor, ama aslında negatif karekökün iki kopyasını istiyoruz. Niye ya? İki kopyaya ihtiyacımız var çünkü dize boyunca iki düzeyde döngü yapıyoruz, biri satır yapmak, diğeri satır sayısını saymak. Negatif olmasını istiyoruz çünkü negatiflerle döngü daha ucuzdur.
Bunu olumsuz yapmak için etrafta hareket ediyoruz, [...]
öyle gözüküyor
{({}({})({}[()]))}{}
İki kopya çıkarmak için pop'lar oluştuğunda değişiyoruz
{({}{}(({}[()])))}{}
Şimdi, bu parçaya sahip olduğumuz için, ihtiyacımız olan ilk kod parçasını elde etmek için yığın yüksekliğiyle bir araya getirebiliriz.
([]<>){({}{}(({}[()])))}{}
Kök kökü fonksiyonumuzun hesaplama için iki serbest sıfır gerektirdiğinden ve yığın değiştirme konusunda geleceği biraz daha ucuz hale getirdiğinden dolayı, offstack'a geçiyoruz.
Şimdi ana döngüyü inşa ediyoruz
{({}()<(({})<{({}()<<>({}<>)>)}{}((()()()()()){})>)>)}{}{}
Bu oldukça açıktır, n öğelerini her hareket ettirdiğinizde ve onu yeni bir satırla kapattığımızda n kez döngü yaparız (ASCII 10).
Döngü tamamlandıktan sonra, çıktımızın sırasını tersine çevirmeliyiz, bu yüzden sadece standart bir ters yapı üzerine yapmalıyız.
{({}<>)<>}<>