Diese Herausforderung wurde von einem Programmierblog inspiriert, den ich häufig betreibe. Den Originalbeitrag finden Sie hier: Ein Programmierpuzzle
Herausforderung
Definieren Sie eine Funktion f:Q->Q
so, dass sie f(f(n)) = -n
für alle Ganzzahlen ungleich Null n
gilt und wo Q
die Menge der rationalen Zahlen liegt.
Einzelheiten
In welcher Sprache bevorzugen Sie, definieren Sie eine Funktion oder ein Programm , f
das als Parameter akzeptiert eine Nummer n
und gibt oder gibt eine Zahl f(n)
.
Die Eingabe kann über den für Ihre Sprache am besten geeigneten Mechanismus erfolgen: Funktionsargument, Lesen von STDIN, Befehlszeilenargument, Stapelposition, Spracheingabe, Gruppenzeichen usw.
Die Ausgabe sollte ein Rückgabewert einer Funktion / eines Programms sein oder auf STDOUT gedruckt werden.
Ich möchte Antworten auf Funktionen beschränken, die den Programmstatus oder den globalen Speicher / die Daten, die von außerhalb der Funktion sichtbar sind, nicht nutzen f
. Wenn Sie zum Beispiel einen Zähler außerhalb f
dieses Zählers belassen , zählt, wie oft f
aufgerufen wurde, und nur eine Negation auf der Grundlage dieses Zählers durchzuführen , ist für niemanden eine große Herausforderung oder ein großes Interesse. Die Entscheidungen f
sollten sich nur auf Daten im f
lexikalischen Bereich stützen .
Diese Einschränkung ist jedoch wahrscheinlich für einige stapelorientierte Sprachen oder andere Arten von Sprachen ungeeignet, die diese Arten von Daten oder Bereichen nicht unterscheiden. Bitte verwenden Sie Ihr bestes Urteilsvermögen, um dem Geist dieser Herausforderung gerecht zu werden.
Wertung
Es gelten die allgemeinen Code-Golfregeln. Ihre Punktzahl ist die Anzahl der Bytes in Ihrem Quellcode.
Die minimale Antwort erfordert, dass die Domäne und die Codomäne von f
eine Teilmenge der Rationalen sind Q
. Wenn Sie Ihre Domain und Codomain f
auf die ganzen Zahlen beschränken Z
, entspricht Ihre Punktzahl der Obergrenze von 90% der Anzahl der Bytes in Ihrem Quellcode.
Tiebreak
Im Falle eines Unentschieden wird Folgendes verwendet:
- Nur wenige druckbare Nicht-Leerzeichen- Symbole in Ihrem Quellcode
- Frühestes Datum und Uhrzeit der Beantwortung
Bearbeiten
Sie müssen keine Zahlen mit beliebiger Größe unterstützen. Bitte interpretieren Sie die Mengen Z
und Q
Datentypen in der von Ihnen gewählten Sprache (in der Regel Integer bzw. Floating Point).
Wenn sich Ihre Lösung ausschließlich auf die zugrunde liegende Struktur oder das zugrunde liegende Bitmuster eines Datentyps stützt, beschreiben Sie bitte dessen Einschränkungen und die Verwendung.
f:Q->Q
bedeutet?
f
es sich um eine Funktion handelt, die Mitglieder von Q
(rationale Zahlen) anderen Mitgliedern (möglicherweise denselben) von (rationale Zahlen) zuordnet Q
. siehe en.wikipedia.org/wiki/Function_(mathematics)#Notation