Podana lista liczb całkowitych {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}
. Dla tych, którzy są zainteresowani, te liczby są wykorzystywane w obliczeniach dnia tygodnia.
Dzień tygodnia = (m[n] + d + y + y>>2 + y/400 - y/100) % 7;
, gdzie m[n]
- szukam wyrażenia, d
- dzień miesiąca, y
- year - (month <= 2)
.
Skonstruuj wyrażenie składające się z operatorów arytmetycznych, logicznych i bitowych, które będą generować dodatnią liczbę n
całkowitą dodatnią, m
tak aby była m % 7
równa n-tej liczbie na liście.
Oddziały, operatory trójskładnikowe, wyszukiwanie tabel i wskaźniki są niedozwolone.
Ocena:
1 - dla | & ^ ~ >> <<
operatorów
1,1 - dla + - < > <= >= == != ! && ||
operatorów
1,2 - dla *
operatora
1,4 - dla / %
operatorów
Odpowiedź z najniższym wynikiem wygrywa.
Osobiście znalazłem:
(41*n)>>4+((n+61)>>4)<<2
z wynikiem 6,4. Myślałem, że będzie to trudne do znalezienia, więc pod warunkiem własnego wyrażenia na początek.
źródło
table lookups
Ciekawy frazowanie przypuszczam ...Odpowiedzi:
2
2.2Uwielbiam arytmetykę dowolnej precyzji.
Lub, jeśli nie lubisz hexa,
Test:
źródło
4*n
zamiast tego zrobić tabelę przeglądową i zapisać 0,2 punktu, pisząc ją jakon<<2
?7
. Mój najlepszy kandydat do podziału na liczby całkowiteconst/n
wpada w sprzeczność zn=4
in=8
.const%n
który może zadowolić wszystko oprócz n = 1,2 i 3.2.0
lub (ocena 2.2):
Wszystko znaleziono z brutalną siłą :-)
źródło
for
pętlę, testując wszystkie wartości p, q dla formuły(p >> i) ^ q
, a potem poszedłem na kawę, a po 10 minutach przyszedłem przeczytać wyniki.35,3
Podejrzewam, że może to być najmniej wydajna metoda tworzenia listy:
Właśnie obliczyłem regresję wielomianową. Kusi mnie, aby zobaczyć, jaką inną okropną metodę można by zastosować.
Mógłbym zaoszczędzić 3,3 punktu, gdyby wynik był zaokrąglony. W tym momencie nie sądzę, żeby to miało znaczenie.
źródło
3.2
Rozwiązanie oparte na zerach:
Jedno oparte rozwiązanie:
Początkowo myślałem, że
%7
operacja również zostanie policzona, a ponieważ%
jest to droga operacja, próbowałem ją rozwiązać bez niej.Doszedłem do wyniku 3.2 takiego:
Byłbym zainteresowany optymalizacjami wykorzystującymi to podejście (bez
%
). Dzięki.źródło
(0426415305230 >> (i*3)) & 7
? Możesz zobaczyć cyfry wyjściowe w odwrotnej kolejności.Python (3)
Ponieważ w dzisiejszych czasach jest ich sporo, postanowiłem stworzyć program, który automatycznie rozwiąże je w 3 (lub 2) tokenach. Oto wynik tego wyzwania:
Dowód, że to działa:
źródło
&
.