Wyzwanie: Zdefiniuj x
w taki sposób, aby wyrażenie (x == x+2)
miało wartość true.
Oznacziłem pytanie jako C, ale odpowiedzi w innych językach są mile widziane, o ile są kreatywne lub podkreślają interesujący aspekt języka.
Mam zamiar zaakceptować rozwiązanie typu C, ale inne języki mogą uzyskać mój głos.
- Prawidłowo - działa na implementacjach zgodnych ze standardami. Wyjątek - przyjęcie implementacji podstawowych typów, jeśli jest to powszechna implementacja (np. Założenie, że
int
jest to uzupełnienie 32-bitowe 2) jest OK. - Prosty - powinien być mały, używaj podstawowych funkcji językowych.
- Ciekawe - przyznaję, subiektywne. Mam kilka przykładów tego, co uważam za interesujące, ale nie chcę udzielać wskazówek. Aktualizacja : Unikanie preprocesora jest interesujące.
- Szybko - pierwsza dobra odpowiedź zostanie zaakceptowana.
Po uzyskaniu 60 odpowiedzi (nigdy nie spodziewałem się takiego oskarżenia), może warto je streścić.
60 odpowiedzi dzieli się na 7 grup, z których 3 można zaimplementować w języku C, pozostałe w innych językach:
- Preprocesor C.
#define x 2|0
zasugerowano, ale istnieje wiele innych możliwości. - Zmiennoprzecinkowy. Duże liczby, nieskończoność
lub NaNdziałają wszystkie. Wskaźnik arytmetyczny. Wskaźnik do ogromnej struktury powoduje dodanie 2 w celu zawinięcia.
Reszta nie działa z C:
- Przeciążenie operatora - A
+
nie dodaje się lub==
zawsze zwraca true. - Wykonywanie
x
połączenia funkcji (niektóre języki pozwoli go bezx()
składni). Następnie za każdym razem może zwrócić coś innego. - Jednobitowy typ danych. Potem
x == x+2 (mod 2)
. - Zmiana
2
- jakiś język pozwala ci to przypisać0
.
add to Set
standardową bibliotekę, bez redefiniowania +
siebie, nie pasuje do tych 7 kategorii, IMHO.
4. Quick
? Masz na myśli „Ktokolwiek zna i ma szczęście, by najpierw przeczytać to pytanie”?