Zagadka
Mała zagadka, którą usłyszałem, gdy byłem w liceum, poszła mniej więcej tak ...
- Pytający prosi mnie o podanie numeru;
- Po usłyszeniu liczby pytający dokonywałby na niej jakiejś transformacji wielokrotnie (na przykład, mógłby powiedzieć, że dziesięć to trzy ), aż w końcu dotarłby do liczby 4 (w którym to momencie zakończyłby z czterema to magia ).
- Każda liczba wydaje się ostatecznie przekształcać w cztery, bez względu na wszystko.
Celem była próba zrozumienia funkcji transformacji, a następnie umiejętność samodzielnego wykonania tej zagadki.
Rozwiązanie
Funkcją transformacji na każdym kroku było
- Weź podany numer,
- Policz liczbę liter w angielskiej reprezentacji słów, ignorując łącznik lub spacje lub „i” (np. „Dziesięć” ma 3 litery, „trzydzieści cztery” ma 10 liter, „sto czterdzieści trzy” zawiera 20 liter).
- Zwróć tę liczbę liter.
Dla wszystkich liczb, które kiedykolwiek chciałem przetestować, zbiega się to do 4. Ponieważ „cztery” również mają cztery litery, powstałaby tutaj nieskończona pętla; zamiast tego jest zwyczajowo określany jako magia w celu zakończenia sekwencji.
Wyzwanie
Twoim wyzwaniem jest stworzenie fragmentu kodu, który odczyta liczbę od użytkownika, a następnie wydrukuje wiersze pokazujące, że funkcja transformacji jest wielokrotnie stosowana, aż do osiągnięcia „cztery jest magiczne”.
Konkretnie:
- Rozwiązania muszą być kompletnymi programami same w sobie. Nie mogą być po prostu funkcjami, które przyjmują liczbę - czynnik w danych wejściowych.
- Wejście należy czytać ze standardowego wejścia. (Piping z „echo” lub użycie przekierowania danych wejściowych jest w porządku, ponieważ działa to również ze standardowego wejścia)
- Dane wejściowe powinny mieć postać liczbową.
- Dla każdego zastosowania funkcji transformacji należy wydrukować wiersz:,
a is b.
gdzie a i b są liczbowymi postaciami liczb w transformacji. - Wymagane są kropki (okresy)!
- Ostatnia linia powinna naturalnie powiedzieć
4 is magic.
. - Kod powinien dawać poprawne dane wyjściowe dla wszystkich liczb od 0 do 99 .
Przykłady:
> 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.
Zwycięzcą jest najkrótsze zgłoszenie według liczby znaków kodu źródłowego, co również jest poprawne .
PREMIA
Możesz także spróbować napisać wersję kodu, która wypisuje ANGIELSKIE NAZWY dla liczb przy każdym zastosowaniu funkcji transformacji. Oryginalne dane wejściowe są nadal numeryczne, ale wiersze wyjściowe powinny mieć postać słowa liczby.
(Podwójny bonus za rysowanie kształtów za pomocą kodu)
(EDYCJA) Kilka wyjaśnień:
- Chcę, aby słowo pojawiało się po obu stronach we wszystkich odpowiednich przypadkach, np
Nine is four. Four is magic.
- Nie obchodzi mnie jednak kapitalizacja. I nie obchodzi mnie, jak rozdzielasz tokeny słów, chociaż powinny być oddzielone:
ninety-nine
jest w porządku,ninety nine
jest w porządku,ninetynine
nie jest w porządku.
Uważam, że jest to osobna kategoria dla konkurencji bonusowej w odniesieniu do wyzwania, więc jeśli zdecydujesz się na to, nie martw się, że twój kod będzie dłuższy niż wersja numeryczna.
Zapraszam do przesłania jednego rozwiązania dla każdej wersji.