Câu đố
Một câu đố nhỏ mà tôi nghe được khi còn học trung học đã giống như thế này ...
- Người hỏi sẽ yêu cầu tôi cho anh ta một con số;
- Khi nghe con số, người hỏi sẽ thực hiện một số kiểu biến đổi liên tục (ví dụ, anh ta có thể nói mười là ba ) cho đến khi cuối cùng đến số 4 (lúc đó anh ta sẽ kết thúc với bốn là phép thuật ).
- Bất kỳ số nào dường như có thể biến đổi thành bốn cuối cùng, không có vấn đề gì.
Mục đích là cố gắng tìm ra hàm biến đổi và sau đó có thể tự giải câu đố này một cách đáng tin cậy.
Giải pháp
Hàm chuyển đổi ở bất kỳ bước nào là
- Lấy số được đề cập,
- Đếm số chữ cái trong biểu diễn từ tiếng Anh của nó, bỏ qua dấu gạch ngang hoặc dấu cách hoặc "và" (ví dụ: "mười" có 3 chữ cái trong đó, "ba mươi tư" có 10 chữ cái trong đó, "một trăm bốn mươi ba" có 20 chữ cái trong đó).
- Trả lại số lượng chữ cái.
Đối với tất cả các số tôi từng quan tâm để kiểm tra, điều này hội tụ thành 4. Vì "bốn" cũng có bốn chữ cái trong đó, sẽ có một vòng lặp vô hạn ở đây; thay vào đó nó chỉ đơn thuần được gọi là ma thuật theo quy ước để kết thúc chuỗi.
Các thách thức
Thử thách của bạn là tạo một đoạn mã sẽ đọc một số từ người dùng và sau đó in các dòng hiển thị chức năng biến đổi được áp dụng nhiều lần cho đến khi đạt được "bốn là ma thuật".
Đặc biệt:
- Các giải pháp phải là các chương trình hoàn chỉnh trong và của chính chúng. Chúng không thể chỉ là các hàm lấy một số - hệ số trong đầu vào.
- Đầu vào phải được đọc từ đầu vào chuẩn. (Đường ống từ "echo" hoặc sử dụng chuyển hướng đầu vào đều tốt vì điều đó cũng đi từ stdin)
- Đầu vào phải ở dạng số.
- Đối với mọi ứng dụng của hàm chuyển đổi, một dòng sẽ được in:
a is b.
trong đó a và b là dạng số của các số trong phép biến đổi. - Bắt buộc phải dừng đầy đủ (khoảng thời gian)!
- Dòng cuối cùng nên nói một cách tự nhiên,
4 is magic.
,. - Mã phải tạo ra đầu ra chính xác cho tất cả các số từ 0 đến 99 .
Ví dụ:
> 4
4 is magic.
> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.
> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.
> 0
0 is 4.
4 is magic.
> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.
Người chiến thắng là người gửi ngắn nhất tính theo số ký tự mã nguồn cũng chính xác .
TẶNG KEM
Bạn cũng có thể thử viết một phiên bản của mã in ra các TÊN TIẾNG ANH cho các số với mỗi ứng dụng của hàm chuyển đổi. Đầu vào ban đầu vẫn là số, nhưng các dòng đầu ra phải có dạng từ của số.
(Nhân đôi tiền thưởng cho việc vẽ hình bằng mã của bạn)
(EDIT) Một số làm rõ:
- Tôi muốn từ xuất hiện ở cả hai mặt trong tất cả các trường hợp áp dụng, ví dụ:
Nine is four. Four is magic.
- Tôi không quan tâm đến việc viết hoa. Và tôi không quan tâm đến cách bạn tách các thẻ từ, mặc dù chúng nên được tách biệt:
ninety-nine
được,ninety nine
được,ninetynine
không được.
Tôi đang coi đây là một danh mục riêng để cạnh tranh tiền thưởng liên quan đến thử thách, vì vậy nếu bạn tiếp tục điều này, đừng lo lắng về việc mã của bạn dài hơn phiên bản số.
Vui lòng gửi một giải pháp cho mỗi phiên bản.