Thử thách:
Có một câu đố ngớ ngẩn lưu hành trên các mạng xã hội có nội dung:
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
Thực hiện một hàm hoặc toán tử, khi được cho hai số nguyên dương x
và y
như vậy x > y > 0
, sẽ trả lời đúng là một số nguyên , trong đó các chữ số của câu trả lời là các chữ số x * y
theo sau các chữ số x + y
theo sau là các chữ số của x - y
. Rất đơn giản.
Quy tắc:
- Sơ hở tiêu chuẩn là không được phép.
- Đây là mã golf để mã ngắn nhất tính theo byte thắng.
- Xác nhận dữ liệu đầu vào là không cần thiết. Chương trình này có thể sụp đổ hoặc trả lại rác khi được cung cấp đầu vào không hợp lệ.
- Bạn được phép sử dụng các hàm số và toán tử (bao gồm số nguyên và dấu phẩy động, hàm thư viện toán học và các hàm khác chấp nhận và trả về số).
- Bạn được phép sử dụng hàm trả về số chữ số của một số, nếu có.
- Bạn không được phép sử dụng chuỗi hoặc bất kỳ loại nối nào ở bất kỳ đâu trong mã của bạn.
- Kết quả có thể được trả về hoặc đẩy vào ngăn xếp, tùy theo áp dụng trong ngôn ngữ. Kết quả phải là một số nguyên, không phải là một chuỗi.
Mã mẫu:
Các mã sau đây tạo ra một toán tử dyadic có tên X
.
X ← {(⍺ - ⍵) + ((⍺ +)) 10 ⍵}
Giải trình:
Trong APL, bạn đánh giá từ phải sang trái.
⍺ and ⍵
lần lượt là toán hạng trái và phải⌊10⍟⍺-⍵
đọc :floor of log10(⍺-⍵)
. Đầu tiên thực hiện cơ chất sau đó logarit sau đó sàn. Từ phải qua trái. log10 được thực hiện để đếm các chữ số của⍺-⍵
(bạn phải tính tổng 1 sau đó).⍺×⍵×10*(...)
đọc:10 to the (...)th power, multiplied by ⍵, multiplied by ⍺
Do đó,
⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵
là sản phẩm, được dịch sang trái bởi tổng số chữ số của tổng và hiệu. Nhân với lũy thừa 10 sẽ dịch chuyển một số nguyên sang trái.((⍺+⍵)×10*1+⌊10⍟⍺-⍵)
là tổng, dịch chuyển sang trái theo số chữ số của chênh lệch.(⍺-⍵)
là sự khác biệt Không có sự thay đổi là cần thiết ở đây.X←{...}
là cách bạn xác định một toán tử trong APL.
Ví dụ:
8 X 2
16106
5 X 4
2091
9 X 6
54153
GNU dc:
Đoạn mã sau tạo một macro có tên a
:
[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa
Giải trình:
sx
vàsy
bật một phần tử từ ngăn xếp và lưu nó vào các thanh ghix
vày
, tương ứng.lx
vàly
tải một phần tử từ các thanh ghix
vày
tương ứng và đẩy nó vào ngăn xếp.d
nhân đôi phần tử cuối cùng trong ngăn xếp.^
tính sức mạnh của hai số.Z
bật một số và trả về số chữ số của nó. Điều này được thực hiện vìdc
không có chức năng logarit.[...]sa
lưu trữ một macro trong đăng kýa
.la
tải nóx
thực thi macro ở đầu ngăn xếp.
Ví dụ:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153