Tuyên bố miễn trừ trách nhiệm: trong khi tôi đã ở trên trang này cho mục đích giải trí trong một thời gian ngắn, đây là câu hỏi đầu tiên của tôi, vì vậy xin vui lòng tha thứ cho bất kỳ lỗi nhỏ nào.
Lý lịch
Khi giao cho chúng tôi bài tập về nhà, giáo viên của tôi thực sự khó chịu và viết ra tất cả các vấn đề chúng tôi phải làm riêng. Như vậy, tôi phải mất mãi mãi để sao chép những vấn đề tôi phải làm. Tôi nghĩ để làm cho cuộc sống của tôi dễ dàng hơn, tôi sẽ gửi cho anh ấy một chương trình có thể làm cho danh sách các vấn đề chiếm ít không gian hơn.
Trong khi viết ra một danh sách các số trang hoặc số vấn đề, chúng tôi sử dụng dấu gạch ngang để biểu thị một phạm vi. Ví dụ, 19-21
trở thành 19, 20, 21
. Nếu có một khoảng cách ở giữa, hai phạm vi được phân tách bằng dấu phẩy được sử dụng: 19-21, 27-31
trở thành 19, 20, 21, 27, 28, 29, 30, 31
.
Ngay lúc này, có lẽ bạn đang nghĩ: "điều này có vẻ khá tầm thường". Trong thực tế, điều này đã được trả lời ở đây và ở đây .
Tuy nhiên, có một nhược điểm. Nếu chúng ta có một phạm vi với các chữ số liên tiếp bằng nhau, các chữ số lặp lại có thể bị bỏ lại. Ví dụ: 15, 16, 17
trở thành 15-7
, và 107, 108, 109
trở thành 107-9
. Đối với phần thưởng, nếu chữ số bằng nhau liên tiếp cuối cùng lớn hơn 1 và chữ số cuối của giới hạn trên nhỏ hơn hoặc bằng chữ số dưới, thì có thể bỏ qua phần sau (xin lỗi nếu điều đó nghe có vẻ khó hiểu; có lẽ một số ví dụ sẽ xóa nó) . 109-113
trở thành109-3
, như một chữ số cuối cùng thấp hơn ngụ ý tăng vị trí 10 giây.
Thử thách
Chương trình của bạn nên lấy danh sách các số nguyên thông qua đầu vào (bất cứ điều gì là tiêu chuẩn cho ngôn ngữ của bạn hoặc chức năng). Bạn có thể quyết định xem danh sách này được phân tách bằng dấu phẩy, phân tách bằng dấu cách hoặc dưới dạng danh sách / mảng thực tế.
Xuất ra con đường ngắn nhất (đầu tiên được sắp xếp theo số lượng phạm vi, sau đó tổng các ký tự có trong phạm vi) để thể hiện danh sách đó bằng cách sử dụng ký hiệu này. Mỗi phạm vi nét đứt phải nằm trên cùng một dòng, nhưng các phạm vi có thể được phân tách bằng dấu phẩy hoặc dòng mới (cho phép dòng mới hoặc dấu phẩy được phép). Các phạm vi này phải theo thứ tự.
Vì Wi-Fi của trường chúng tôi rất tệ , tôi phải làm cho tệp nhỏ nhất có thể để gửi cho anh ấy. Mã ngắn nhất (tính bằng byte) sẽ thắng.
Tiền thưởng
Giáo viên của tôi là người cẩu thả, vì vậy có một vài điều sẽ giúp anh ta ra. Nhiều phần thưởng xếp chồng lên nhau thông qua phép nhân, ví dụ phần thưởng -10% (x 90%) và phần thưởng -25% (x 75%) = 90% * 75% = x 67,5% (phần thưởng -32,5%).
- Đôi khi anh ta đặt chúng theo thứ tự sai (anh ta không phải là giáo viên toán). Nhận phần thưởng -20% nếu chương trình của bạn có thể chấp nhận các số nguyên không được sắp xếp từ nhỏ nhất đến lớn nhất.
- Cuốn sách của chúng tôi rất kỳ lạ và mỗi phần bắt đầu đếm các vấn đề ở mức -10. Nếu chương trình của bạn có thể chấp nhận số âm, hãy lấy -25%.
- Nếu nó chấp nhận phần thưởng của chữ số cuối thấp hơn tăng vị trí 10, ví dụ như
25-32
giảm xuống25-2
, hãy nhận phần thưởng -50%.
Các trường hợp thử nghiệm
In: 1, 2, 3, 4, 5
Out: 1-5
In: 3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12
In: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60
In: 1 2 3 4
Out: 1-4
For bonuses:
In: 109, 110, 111, 112, 113
Out: 109-3
In: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9
In: -3, -2, -1, 0, 1, 2
Out: -3-2
In: -3, -2, -1
Out: -3--1
Một câu trả lời sẽ được chấp nhận vào thứ Bảy, ngày 19 tháng 12 năm 2015.
GLHF!
149 150 151 152 153 154 155 156 157 178 159 160
?
19-9
cho 19,20,...,29
và không 19-29
như các văn bản ngụ ý. Vậy cái nào đúng?
1-4 9-2
?