Khi tôi còn là một đứa trẻ và muốn đếm các hóa đơn đô la trong khoản tiết kiệm của cuộc đời tôi, tôi sẽ đếm to:
một hai ba bốn năm sáu bảy tám chín mười;
mười một, mười hai, mười ba, mười bốn, mười lăm, mười sáu, mười bảy, mười tám, mười chín, hai mươi;
hai mươi mốt, hai mươi hai, hai mươi ba, hai mươi bốn, hai mươi lăm ...
Cuối cùng, tôi cảm thấy mệt mỏi khi phát âm từng số nhiều âm tiết này. Có đầu óc toán học, tôi đã tạo ra một phương pháp đếm hiệu quả hơn nhiều:
một hai ba bốn năm sáu bảy tám chín mười;
một, hai, ba, bốn, năm, sáu, bảy, tám, chín, hai mươi;
một, hai, ba, bốn, năm, sáu, bảy, tám, chín, ba mươi ...
Như bạn có thể thấy, tôi sẽ chỉ phát âm (các) chữ số đã thay đổi từ số trước đó. Điều này có thêm lợi thế là nó lặp đi lặp lại đáng kể hơn so với tên tiếng Anh cho các số, và do đó đòi hỏi ít năng lực hơn để tính toán.
Thử thách
Viết chương trình / hàm lấy một số nguyên dương và xuất / trả về cách tôi sẽ đếm nó: đó là chữ số khác không nhất và tất cả các số 0 ở cuối.
Ví dụ
1 1
2 2
10 10
11 1
29 9
30 30
99 9
100 100
119 9
120 20
200 200
409 9
1020 20
Một danh sách đầy đủ các trường hợp thử nghiệm không cần thiết. Đây là A274206 trên OEIS.
Quy tắc
- Mục nhập của bạn về mặt lý thuyết phải hoạt động cho tất cả các số nguyên dương, bỏ qua các vấn đề về độ chính xác và bộ nhớ.
- Đầu vào và đầu ra phải ở dạng thập phân.
- Bạn có thể chọn lấy đầu vào và / hoặc đầu ra dưới dạng số, chuỗi hoặc mảng chữ số.
- Đầu vào được đảm bảo là một số nguyên dương. Mục nhập của bạn có thể làm bất cứ điều gì cho đầu vào không hợp lệ.
Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ thắng.
[1,0,2,0]
->[2,0]
cho trường hợp kiểm tra cuối cùng không? (Tôi không rõ ràng về cụm từ "mảng đơn mục").