Pip , 62 59 56 bayt
55 bayt kodu, -S
bayrak için +1 .
[sXbRA_AEv-_aM,b(Y^aWR_Xb/2s)MyRVsX,b.aYaXbJsxyRL2x]@Aa
Not Bu çözüm girişi ile çalıştığını ÷
bölünme ve *
bunun ASCII sanatı çizmek için bu karakterleri kullanır olsa çoğalması için /
ve x
sırasıyla. OP bunun yolunda olduğunu açıklığa kavuşturdu . Çevrimiçi deneyin!
Nasıl?
İşte kısmen boşluk bırakılmış ve yorumlanmış bir versiyon . Not, a
ve b
örneğin, operatör ve sırasıyla boyutu komut satırı bağımsız değişken vardır. -S
Bayrak denetimleri nasıl listeleri çıktı şunlardır: ilk satırbaşıyla üzerinde katılır, ancak boşluklar üzerinde herhangi iç içe listeleri katılır.
[ Build a list of all possible figures:
sXbRA_AEv-_aM,b 0 - Multiplication
(Y^aWR_Xb/2s)My 1 - Addition
RVsX,b.a 2 - Division
YaXbJs 3 - Subtraction
x 4 - Empty
yRL2 5 - Equals
x 6 - Empty
] @ Aa Index, mod 7, with ASCII value of a
Ve işte bireysel bölümler:
Çarpma işlemi
Şekildeki her satır için, bir boşluk dizisi oluşturuyoruz ve ardından ikisini giriş karakteriyle değiştiriyoruz. Satır için i
, biz endeksinde boşluk değiştirmek istiyor i
ve b-1-i
; ancak ikincisinin negatif dizini kullanabileceğini unutmayın -1-i
. (Bu değişken daha da kısadır, çünkü değişken v
negati v e 1'e önceden başlatılmıştır .)
sXbRA_AEv-_aM,b
M,b Map this function to range(b):
sXb Space, repeated b times
_ Function arg
AE (Implicitly) convert to list and append element...
v-_ -1 minus function arg
RA Replace the characters at those indices...
a ... with input character
The resulting list is output with one item per line
İlave
Dan stratejisini kullanarak benim içi boş kare çizin cevabı, bir sarar bir işlev tanımlamak +
içinde b/2
onun argüman kopyalarının ve karakterlerin bir listesi olarak sonuç döndürür. ( //
Dize tekrarı işleci X
otomatik olarak tamsayıya kısaldığından dolayı tamsayı bölme gerekli değildir .) İlk önce, bu işlevi bir boşlukta çağırırız [" ";" ";"+";" ";" "]
; daha sonra aynı işlevi bu sonuçla eşleriz [" ";" ";"+";" ";" "]
, çoğu satırda ancak ["+";"+";"+";"+";"+"]
orta satırda. Bu iç içe geçmiş liste, -S
bayrağından dolayı , bir satırdaki tüm karakterler arasındaki boşluklarla satırlar arasındaki yeni satırlarla birlikte çıkar.
(Y^aWR_Xb/2s)My
Anonymous function:
_Xb/2 Function arg, repeated b/2 times (implicitly rounded down)
aWR Wrap a in two copies of the above
^ Split resulting string into list of chars
Y Yank that function into y
( s) Apply function y to space
My Map y to that result
Bölünme
Her bir satır arasında yer alır b-1
ve 0
giriş karakteri ve ardından boşluk, a
.
RVsX,b.a
,b Range(b)
sX Space, repeated that many times (works itemwise)
.a Concatenate a (itemwise)
RV Reverse (puts the larger number of spaces at the beginning)
Outputs newline-separated
Çıkarma
Giriş karakterinden boşlukla ayrılmış bir satır yapın. Bir kopyasını daha sonra saklayın.
YaXbJs
aXb b copies of a
Js Join on space
Y Yank into y (overwrites the function from earlier, but we're done using it anyway)
This is a string, so it just gets output
Eşittir
Çıkarma adımı ihtiyacımız olanın yarısını depoladı - y
sadece iki katına çıkarın.
yRL2 (Implicitly) convert y to list and repeat it twice
Outputs newline-separated
Sahte x
değerler, ana listeyi doldurmak için vardır, böylece modüler indeksleme, her giriş karakteri için benzersiz bir indeks verir +-*÷=
.
= 10
?