To wyzwanie zostało zainspirowane blogiem programistycznym, który często odwiedzam. Zobacz oryginalny post tutaj: A Programming Puzzle
Wyzwanie
Zdefiniuj funkcję f:Q->Q
taką, że f(f(n)) = -n
dla wszystkich niezerowych liczb całkowitych n
, i gdzie Q
jest zbiorem liczb wymiernych.
Detale
W jakimkolwiek języku, który preferujesz, proszę zdefiniować jedną funkcję lub program, f
który przyjmuje jako parametr jeden numer n
i zwraca lub wyprowadza jeden numer f(n)
.
Dane wejściowe mogą być dostarczane za pomocą dowolnego mechanizmu najbardziej naturalnego dla Twojego języka: argument funkcji, odczyt z STDIN, argument wiersza poleceń, pozycja stosu, wejście głosowe, znaki gangów itp.
Wyjście powinno być wartością zwracaną z funkcji / programu lub drukowane do STDOUT.
Chciałbym ograniczyć odpowiedzi do funkcji, które nie wykorzystują stanu programu lub globalnej pamięci / danych widocznych z zewnątrz funkcji f
. Na przykład trzymanie licznika poza f
tym liczy liczbę wywołań, f
a samo wykonanie negacji na podstawie tej liczby nie jest bardzo trudne ani interesujące dla nikogo. Decyzje f
powinny opierać się wyłącznie na danych w f
zakresie leksykalnym.
Jednak to ograniczenie jest prawdopodobnie nieodpowiednie dla niektórych języków zorientowanych na stos lub innych typów języków, które nie rozróżniają tych typów danych ani zakresów. Prosimy o dokonanie najlepszego osądu, aby zachować ducha tego wyzwania.
Punktacja
Obowiązują wspólne zasady gry w golfa - twój wynik to liczba bajtów w kodzie źródłowym.
Minimalna odpowiedź wymaga, aby domena i kodomain f
były podzbiorem racjonalności Q
. Jeśli ograniczysz swoją domenę i kodomainę f
do liczb całkowitych Z
, twój wynik to pułap 90% liczby bajtów w kodzie źródłowym.
Tiebreak
W przypadku remisu zostaną użyte następujące elementy:
- Najmniejsza liczba drukowanych symboli spacji w kodzie źródłowym
- Najwcześniejsza data i godzina przesłania odpowiedzi
Edytować
Nie musisz obsługiwać liczb o dowolnych rozmiarach. Interpretuj zestawy Z
i Q
typy danych w wybranym języku (zwykle odpowiednio liczby całkowite i zmiennoprzecinkowe).
Jeśli twoje rozwiązanie opiera się całkowicie na podstawowej strukturze lub strukturze bitowej typu danych, opisz jego ograniczenia i sposób użycia.
f:Q->Q
to znaczy?
f
jest funkcją mapującą członków Q
(liczb wymiernych) na inne elementy (być może takie same) Q
. patrz en.wikipedia.org/wiki/Function_(mathematics)#Notation