Thử thách này được lấy cảm hứng từ một blog lập trình tôi thường xuyên. Xin vui lòng xem bài viết gốc ở đây: Câu đố lập trình
Thử thách
Xác định hàm f:Q->Q
sao f(f(n)) = -n
cho tất cả các số nguyên khác không n
và Q
tập hợp các số hữu tỷ ở đâu.
Chi tiết
Trong bất kỳ ngôn ngữ nào bạn thích, vui lòng xác định một chức năng hoặc chương trình f
chấp nhận làm tham số một số n
và trả về hoặc xuất một số f(n)
.
Đầu vào có thể được cung cấp thông qua cơ chế nào là tự nhiên nhất đối với ngôn ngữ của bạn: đối số chức năng, đọc từ STDIN, đối số dòng lệnh, vị trí ngăn xếp, đầu vào bằng giọng nói, dấu hiệu băng đảng, v.v.
Đầu ra phải là giá trị trả về từ một chức năng / chương trình hoặc được in ra STDOUT.
Tôi muốn hạn chế câu trả lời cho các chức năng không tận dụng trạng thái chương trình hoặc bộ nhớ / dữ liệu toàn cầu có thể nhìn thấy từ bên ngoài chức năng f
. Ví dụ: giữ một bộ đếm bên ngoài số f
đó f
được gọi bao nhiêu lần và chỉ thực hiện phủ định dựa trên số này không phải là rất khó khăn hoặc thú vị đối với bất kỳ ai. Các quyết định đưa f
ra chỉ nên dựa vào dữ liệu trong f
phạm vi từ vựng của.
Tuy nhiên, hạn chế này có thể không phù hợp với một số ngôn ngữ hướng ngăn xếp hoặc các loại ngôn ngữ khác không phân biệt các loại dữ liệu hoặc phạm vi này. Hãy sử dụng phán đoán tốt nhất của bạn để giữ với tinh thần của thách thức này.
Chấm điểm
Quy tắc golf mã phổ biến được áp dụng - điểm của bạn là số byte trong mã nguồn của bạn.
Câu trả lời tối thiểu yêu cầu tên miền và tên miền f
phải là một tập hợp con của các tỷ lệ hợp lý Q
. Nếu bạn giới hạn tên miền và tên miền của f
mình cho các số nguyên Z
, thì điểm của bạn là trần của 90% số byte trong mã nguồn của bạn.
Tiebreak
Trong trường hợp hòa, sau đây sẽ được sử dụng theo thứ tự:
- Số ít nhất của không khoảng trắng in ký tự trong mã nguồn của bạn
- Ngày và giờ sớm nhất của câu trả lời
Biên tập
Bạn không cần phải hỗ trợ các số có kích thước tùy ý. Vui lòng giải thích các tập hợp Z
và Q
dưới dạng kiểu dữ liệu trong ngôn ngữ bạn đã chọn (thường là số nguyên và dấu phẩy động).
Nếu giải pháp của bạn hoàn toàn dựa vào cấu trúc cơ bản hoặc mẫu bit của một loại dữ liệu, vui lòng mô tả các giới hạn của nó và cách sử dụng nó.
f:Q->Q
có nghĩa là?
f
là một thành viên ánh xạ hàm của Q
(số hữu tỷ) cho các thành viên khác (có thể giống nhau) của Q
. xem en.wikipedia.org/wiki/Function_(mathatures)#Notation