MATL , 56 53 bayt
:"'!!((!((!!#*```).?p0```!!!]'8eP!P]'p(.' '.a-'XE&hqc
Çevrimiçi deneyin!
açıklama
Uyanık keçi
Uyanık keçi iple doldurulabilir
'' '' ")___(->o/___ \
ve paketlenmemiş olarak kısaca açıklanacaktır. Bununla birlikte, tekli teklif sembollerinin, onlardan kaçmak için çoğaltılması gerekir, bu nedenle karakter dizisinin şu şekilde tanımlanması gerekir:
' '''' '''' ")___(->o/___ \'
Baytları kaydetmek için dizgeyi , üstünde bir kod noktası olan karakterleri kullanarak tanımlarız , böylece çoğaltmayı önleriz. Dize değişmez olur
'!!((!((!!#*```).?p0```!!!]'
Kodun sonunda 1'i çıkartacağız ve char'e çevireceğiz. (Tam anlamıyla dizgiden hemen sonra bunu yapabiliriz; ancak sonuna kadar bırakmak, göreceğimiz gibi başka bir tek alıntı yinelemesini kurtarır).
Dizenin nasıl açıldığını açıklamak için orijinal karakterlerle (kodun sonunda 1'i kullanarak üretilir) çalışacağız, böylece açıklamayı takip etmek daha kolaydır. İlk önce dizgiyi yeniden şekillendiririz
'' '' ")___(->o/___ \
8 sıralı 2B karakter dizisine, sütun ana sırada (aşağı, sonra çapraz). Bu otomatik olarak son sütunu char 0 ile doldurur (kodun sonunda, 1 çıkarması, onu char 'e dönüştürür, bu char char' a tekrar char 0 verir). Char 0 boşluk olarak gösterilir. Yani etkili bir şekilde boşluklarla doluyuz. Yeniden şekillendirmenin sonucu
>
"o\
')/
'__
__
'__
'(
-
Şimdi dikey olarak çeviriyoruz:
-
'(
'__
__
'__
')/
"o\
>
ve sonra uyanık keçiyi üretmek için tekrar dikey olarak çevirin ve ters çevirin:
\
___/o>
-(___)"
'' ''
Orijinal çevirme ipinin "ters" olduğu için iki çevirme işlemi gereklidir. Bu, keçiyi temsil eden gerçek 2D karakter dizisinin ilk satırında 6 başlangıç boşluğuna sahip olması gerçeğinden yararlanmak, bu durum dizge 8 satır 2D diziye yeniden şekillendirildiğinde otomatik olarak doldurma ile doldurulur. Ancak dolgu, son sütunun sonunda (başlangıçta değil) (satırda değil) yapılır, bu nedenle çevirir ve transpoze edilir.
Uyuyan keçi
Bir uyku keçi transliterasyonu karakter ile bir uyanıklık keçi oluşturulur o
, '
, -
içine -
, `
, ,
sırasıyla. Aslında, çünkü tek kod noktası yukarıda dönüşümün, biz karakter çevirisini p
, (
, '
içine .
, a
, -
yine tek tırnak sembolü çoğaltmak zorunda bizi kurtarır hangi. Bu yüzden çıkarma işlemi bir programın sonuna bırakıldı.
Kod yapısı
- Uyanık bir keçi
N
süreleri yaratın , kod puanlarıyla çalışın 1.
- Son keçiyi uyuyan bir keçiye dönüştürün.
- Tüm keçileri yatay olarak birleştirin. Noktaları kodlamak için 1'i çıkartın ve karaktere dönüştürün
Yorumlanan kod
: % (Step 1) Implicitly input N. Push range [1 2 ... N]
" % For each (i.e. repeat N times)
'!!((!((!!#*```).?p0```!!!]' % Push this string. Quotes are escaped by duplicating
8e % Reshape into an 8-row 2D array of char, in
% column-major order, padding last column with
% char 0
P % Flip vertically
!P % Transpose and flip vertically
] % End
'p(.' % (Step 2) Push this string: source for transliteration
'.a-' % Push this string: target for transliteration
XE % Transliterate. Transforms last goat into sleeping
&h % (Step 3) Horizontally concat all 2D char arrays
qc % Subtract 1 and convert to char. 0 becomes −1, which
% is converted to char 0, which is displayed as a space
% Implicitly display