Pip , 62 59 56 byte
55 byte mã, +1 cho -S
cờ.
[sXbRA_AEv-_aM,b(Y^aWR_Xb/2s)MyRVsX,b.aYaXbJsxyRL2x]@Aa
Lưu ý rằng giải pháp này hoạt động với đầu vào của ÷
phép chia và *
phép nhân, mặc dù nó sử dụng các ký tự đó để vẽ ASCII-art /
và x
, tương ứng. OP đã làm rõ rằng điều này là ổn. Hãy thử trực tuyến!
Làm sao?
Đây là một phiên bản khoảng cách và nhận xét . Lưu ý rằng a
và b
là các đối số dòng lệnh, tức là toán tử và kích thước tương ứng. Các -S
điều khiển cờ như thế nào danh sách được xuất ra: nó tham gia vào dòng mới đầu tiên, nhưng tham gia bất kỳ danh sách lồng nhau trên không gian.
[ 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
Và đây là các phần riêng lẻ:
Phép nhân
Đối với mỗi hàng trong hình, chúng tôi tạo ra một chuỗi khoảng trắng và sau đó thay thế hai trong số chúng bằng ký tự đầu vào. Đối với hàng i
, chúng tôi muốn thay thế khoảng trắng tại chỉ mục i
và b-1-i
; nhưng lưu ý rằng cái sau có thể sử dụng chỉ số âm -1-i
. (Nó thậm chí còn ngắn hơn vì biến v
được khởi tạo trước thành negati v e 1.)
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
Thêm vào
Sử dụng chiến lược từ tôi vẽ một hình vuông rỗng câu trả lời, chúng ta định nghĩa một hàm bọc lấy một +
trong b/2
các bản sao của đối số của nó và trả về kết quả là một danh sách các nhân vật. (Phân chia số nguyên //
không cần thiết vì toán tử lặp chuỗi X
tự động cắt ngắn thành số nguyên.) Trước tiên, chúng tôi gọi hàm này trên một khoảng trắng, cho [" ";" ";"+";" ";" "]
; sau đó, chúng tôi ánh xạ chức năng tương tự với kết quả đó, đưa ra [" ";" ";"+";" ";" "]
hầu hết các dòng nhưng ["+";"+";"+";"+";"+"]
trên đường trung tâm. Danh sách lồng nhau này sau đó là đầu ra, vì -S
cờ, với khoảng trắng giữa tất cả các ký tự trên một hàng và dòng mới giữa các hàng.
(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ộ phận
Mỗi hàng có giữa b-1
và 0
khoảng trắng, theo sau là ký tự đầu vào 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
Phép trừ
Tạo một hàng ngăn cách không gian của ký tự đầu vào. Lưu một bản sao cho sau này.
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
Bằng
Bước trừ được lưu trữ một nửa những gì chúng ta cần trong y
- điều chỉnh gấp đôi nó.
yRL2 (Implicitly) convert y to list and repeat it twice
Outputs newline-separated
Các x
giá trị giả có ở đó để đệm danh sách chính để lập chỉ mục mô-đun cung cấp một chỉ mục duy nhất cho mỗi ký tự đầu vào +-*÷=
.
= 10
?