Ốc sên xám , 1206 byte cho I / O số, 149 byte cho I / O đơn
Cho vui. Thành phần của chương trình đầu tiên:
- 451 byte, chuyển đổi số thành dấu chấm
- 121 byte, chức năng cốt lõi (một phiên bản riêng biệt được viết bên dưới)
- 634 byte, chuyển đổi dấu chấm thành số
Lấy đầu vào số và đầu ra. Đầu vào là A
, B
, C
tương ứng. So với O(1)
câu trả lời (gần) khác , mã có độ phức tạp O(n)
. Nhưng đối với số lượng lớn, nó có thể ăn hết bộ nhớ của bạn đầu tiên.
Hang nếu không tìm thấy giải pháp.
INPUT p
POP Z r .!
f
POP Z o .
q
POP Z p [p]
GOTO [Z]
0
POP Z n .
GOTO w
1
POP Z n ..
GOTO w
2
POP Z n ...
GOTO w
3
POP Z n ....
GOTO w
4
POP Z n .....
GOTO w
5
POP Z n ......
GOTO w
6
POP Z n .......
GOTO w
7
POP Z n ........
GOTO w
8
POP Z n .........
GOTO w
9
POP Z n ..........
GOTO w
w
POP Z o .[o][o][o][o][o][o][o][o][o][o][n]
GOTO [r] [p]
GOTO q
!
POP Z A .[o]
INPUT p
POP Z r .@
GOTO f
@
POP Z B .[o]
INPUT p
POP Z r .#
GOTO f
#
POP Z C .[o]
POP H N .[B]
U
POP Z A [A]
POP Z B [B]
GOTO D [A]
GOTO $ [B]
GOTO U
$
POP Z A .[A][C]
POP Z H ..[H]
POP Z B .[N]
GOTO U
D
POP Z r .
POP Z M .
POP Z N ...........
POP Z z .[N]
POP Z V .[H]
+
GOTO l[V] [H]
POP Z H [H]
POP Z z [z]
GOTO ( [z]
GOTO +
(
GOTO ) [H]
POP Z z .[N]
POP Z M ..[M]
POP Z V .[H]
GOTO +
)
POP Z r .0[r]
POP Z M ..[M]
POP Z H .[M]
POP Z M .
POP Z V .[H]
POP Z z .[N]
GOTO +
l
POP Z r .0[r]
GOTO -
l.
POP Z r .1[r]
GOTO -
l..
POP Z r .2[r]
GOTO -
l...
POP Z r .3[r]
GOTO -
l....
POP Z r .4[r]
GOTO -
l.....
POP Z r .5[r]
GOTO -
l......
POP Z r .6[r]
GOTO -
l.......
POP Z r .7[r]
GOTO -
l........
POP Z r .8[r]
GOTO -
l.........
POP Z r .9[r]
GOTO -
-
GOTO / [M]
POP Z H .[M]
POP Z M .
POP Z V .[H]
POP Z z .[N]
GOTO +
/
OUTPUT [r]
f
là một hàm đệ quy (có thể) để chuyển đổi số nguyên thành dấu chấm. Đối số được lưu trong [p]
và đầu ra trong [o]
.
U
là một chức năng kiểm tra S1>=S2
, lưu trữ tham số trong B, A
khi lưu A-B
vào A
.
Mã bắt đầu từ D
là một sơ khai chuyển đổi dấu chấm thành số.
Nguyên tắc cơ bản là giống với câu trả lời C của tôi (tách ra đầu ra giả cho các giải pháp không thể).
Phiên bản độc lập, 149 156 157 167 170 230 byte, chỉ hỗ trợ I / O đơn nguyên
Đầu vào cần phải là dấu chấm, ví dụ ..........
cho 10
.
INPUT A
INPUT B
INPUT C
POP N H .
GOTO U
$
POP N A .[A][C]
POP Z H ..[H]
U
POP Z A [A]
POP Z N ..[N]
GOTO D [A]
GOTO $ .[B] [N]
GOTO U
D
OUTPUT .[H]
U
tính toán của A=A-B
, và nhảy đến D
khi A<=0
. Nếu không $
gán A+C
đến A
và cuộc gọi U
.
Hang nếu không tìm thấy giải pháp.
Thủ thuật: lạm dụng khả năng của trình biên dịch để giải thích chuỗi rỗng. Bạn có thể tách ra các điều kiện trong GOTO
câu lệnh để thực hiện các bước nhảy vô điều kiện và cùng một thủ thuật hoạt động POP
.
Lưu ý: Tôi có thể đánh gôn thêm 3 byte nhưng bằng cách đó, câu trả lời của tôi và WheatWizard sẽ có cùng logic. Kết quả có lẽ là giải pháp GraySnail ngắn nhất và tôi đang cố gắng chứng minh điều đó.