Czy kiedykolwiek chciałeś zapytać kompilatora „Dlaczego?” Większość z nas była sfrustrowana, gdy kod nie działa tak, jak powinien. Mathworks wdrożył więc ładną małą funkcję why, która odpowiada na pytanie. Aby podać kilka przykładów z MATLAB:
why
The programmer suggested it.
why
To fool the tall good and smart system manager.
why(2)
You insisted on it.
why(46)
Bill insisted on it.
Twoim zadaniem jest wdrożenie whyfunkcji w Twoim języku. Funkcja powinna działać z argumentem wejściowym i bez niego (alternatywnie użyj danych wejściowych 0lub -1). Funkcja musi zostać nazwana why(lub napisanie why(n)w STDIN powinno spowodować wydrukowanie odpowiedniego łańcucha).
Jeśli nie podano żadnego argumentu lub argument jest zerowy lub ujemny, ciąg wyjściowy powinien być losową, prawidłową frazą. Więc nie powinno być funkcją why, why(), why(0)lub why(-1)że zwraca losowego zdania.
Jeśli podano argument wejściowy n(argument funkcyjny, a nie STDIN), wynik powinien być n-tym ciągiem (zdefiniowanym poniżej). Dlatego why(1)zawsze powinien wypisywać (drukować / wyświetlać) ten sam wynik.
Zdania są budowane w następujący sposób (Typ 1, Typ 2 i Specjalne). Wszystkie zdania kończą się na !.
"Person" "ending" !
"Verb" "adjective" "Person" !
A list of special cases
Lista osób:
Stewie
Peter
Homer
The programmer
The system manager
You
Lista zakończeń:
suggested it
insisted on it
did it
Lista czasowników to:
To fool
To satisfy
To please
Lista przymiotników:
the smart
the bald
the tall
the rich
the stupid
Lista przypadków specjalnych:
How should I know?
Stop asking!
Don't ask!
Sposób na wybranie numeru jest:
Rodzaj zdań:
Odd number => Type 1
Even number => Type 2
n % 7 = 0 => Type 3 (% is the modulus operator)
Nazwy: n-ta nazwa jest definiowana za pomocą modułu (%).
n = 1: 1 % 7 => Stewie
n = 2: 2 % 7 => Peter
...
n = 6: 6 % 7 => You
n = 7: 7 % 7 => How should I know?
n = 11: 11 % 7 => The programmer
n = 14: 14 % 7 => Stop asking!
n = 21: 21 % 7 => Don't ask!
Zakończenia: n-te zakończenie jest również definiowane za pomocą modułu. Załóżmy, że zakończenia (1, 2 i 3) są wymienione podobnie (1 2 2 3). Ponieważ liczby są zawsze nieparzyste, użyj((n+1)/2 % 4)
n = 1: ((1+1)/2 % 4) => suggested it
n = 3: ((3+1)/2 % 4) => insisted on it
n = 13: ((13+1)/2 % 4) => did it
Przymiotniki: n-ty przymiotnik definiuje się za pomocą modułu. Ponieważ liczby są zawsze parzyste, użyj:(n % 10)/2
n = 2: (2 % 10)/2 => Smart
n = 6: (6 % 10)/2 => The tall
...
Czasowniki: n-ty czasownik jest również definiowany za pomocą modułu. Załóżmy, że czasowniki (1, 2 i 3) są wymienione tak, (1 2 2 3)jak w przypadku czasowników, więc zawsze używaj liczb(n % 8) / 2
n = 2: (2 % 8)/2 => To fool
n = 4: (4 % 8)/2 => To satisfy
n = 6: (6 % 8)/2 => To satisfy
n = 8: (8 % 8)/2 => To please
Teraz sposób utworzenia losowego powinien być dość prosty, wystarczy wybrać losowy n.
Kilka przykładów:
why
You suggested it!
why
To fool the tall Homer!
why
Don't ask!
why(1)
Stewie suggested it!
why(14)
Stop asking!
why(8)
To please the rich Stewie!
Obowiązują standardowe zasady gry w golfa. Zwycięzca zostanie wybrany tydzień po opublikowaniu wyzwania.
/2działać. To daje wartości ułamkowe. 13powinno być również insisted(14/2 = 7% 4 = 3 = 2 z naleganych).
the rich The programmerpowodu określonego the?
Thei Tolisty powinny być
whyczy byłobyWHYdo przyjęcia?