Lấy cảm hứng từ bài đăng này trên Puzzling. Dưới đây là spoilers cho câu đố đó.
Cho ba số nguyên dương làm đầu vào, (x, y, z)
xây dựng phạm vi bao gồm [x, y]
, ghép phạm vi đó lại với nhau, sau đó loại bỏ z
các chữ số không nhất thiết liên tiếp để tạo ra các số nguyên dương lớn nhất và nhỏ nhất có thể. Các số 0 đứng đầu không được phép (nghĩa là các số phải bắt đầu bằng [1-9]
). Xuất hai số đó theo thứ tự.
Đối với ví dụ từ bài khó hiểu, cho đầu vào (1, 100, 100)
, số lượng lớn nhất có thể là 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
và số nhỏ nhất là 10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
sau khi bên dưới logic từ jafe của câu trả lời đăng ở đó:
- Chúng tôi không thể ảnh hưởng đến độ dài của số (có một số chữ số cố định), vì vậy để tối đa hóa giá trị, chúng tôi lấy chữ số đầu tiên tối đa, sau đó là chữ số thứ hai, v.v.
- Xóa 84 số không đầu tiên (còn lại 16 chữ số để xóa):
999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Số lớn nhất trong 17 chữ số tiếp theo là 7, vì vậy từ đây, chữ số tiếp theo trong câu trả lời có thể nhiều nhất là 7 (chúng tôi không thể xóa hơn 16 chữ số). Vì vậy, xóa 15 không 7 ... (còn lại 1 chữ số để xóa):
999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Từ đây, chữ số tiếp theo có thể nhiều nhất là 8, vì vậy hãy xóa một số không 8 ở giữa:
99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Logic tương tự, nhưng đảo ngược (nghĩa là chúng ta muốn dẫn đầu
1
thay vì dẫn đầu9
) cho số nhỏ nhất.
Đây là một ví dụ nhỏ hơn : (1, 10, 5)
.
Chúng tôi xây dựng phạm vi 12345678910
và xác định những 5
chữ số nào chúng tôi có thể loại bỏ để lại số lớn nhất có thể. Rõ ràng, điều đó có nghĩa là chúng tôi muốn tối đa hóa chữ số hàng đầu, vì chúng tôi không thể ảnh hưởng đến độ dài của đầu ra. Vì vậy, nếu chúng tôi xóa 12345
, chúng tôi sẽ rời đi 678910
và đó là số tiền lớn nhất chúng tôi có thể thực hiện. Làm cho nhỏ nhất là một chút khó khăn hơn, vì thay vào đó chúng ta có thể nhổ các con số từ giữa, để lại 123410
càng nhỏ càng tốt.
Đối với (20, 25, 11)
, kết quả là khá nhàm chán, như 5
và 1
.
Cuối cùng, để loại trừ các câu trả lời thử các số 0 đứng đầu, (9, 11, 3)
đưa ra 91011
lần lượt mang lại 91
và 10
là lớn nhất và nhỏ nhất.
I / O và Nội quy
- Nếu nó dễ hơn / ngắn hơn, bạn có thể mã hai chương trình / hàm - một cho lớn nhất và một cho nhỏ nhất - trong trường hợp điểm của bạn là tổng của cả hai phần.
- Đầu vào và đầu ra có thể được cung cấp bởi bất kỳ phương pháp thuận tiện .
- Đầu vào có thể được coi là phù hợp với loại số gốc của ngôn ngữ của bạn, tuy nhiên , cả số được nối và đầu ra đều không thể được giả sử để làm như vậy.
- Hoặc là một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
- Sơ hở tiêu chuẩn bị cấm.
- Đây là môn đánh gôn, vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.
9, 11, 3
sẽ làm được.