Wyzwanie
Napisz funkcję lub program, który pobiera dodatnią liczbę dziesiętną, nazwij ją A i wyślij dwie liczby dodatnie, B i C , tak aby:
- A == B bitxor C.
- B i C nie mogą zawierać cyfr 0, 3 lub 7 w postaci dziesiętnej.
Przykłady
>>> decompose(3)
1, 2
>>> decompose(7)
1, 6
>>> decompose(718)
121, 695
>>> decompose(99997)
2, 99999
>>> decompose(4294967296)
4294968218, 922
>>> decompose(5296080632396965608312971217160142474083606142654386510789497504098664630388377556711796340247136376)
6291484486961499292662848846261496489294168969458648464915998254691295448225881546425551225669515922,
1191982455588299219648819556299554251659915414942295896926425126251962564256469862862114191986258666
Ponieważ rozkład nie jest unikalny, twoja funkcja / program nie musi generować dokładnie takich samych wyników jak te podane przykłady.
Bardzo szczegółowe zasady
Zgłoszenia powinny mieć formę pełnej funkcji lub programu .
importOświadczenia nie liczą się do punktacji końcowej.Możesz założyć, że wejście A zawsze zawiera co najmniej cyfrę 0, 3 lub 7.
Możesz założyć, że rozkład zawsze istnieje.
Możesz użyć BigInt, jeśli są one częścią standardowych bibliotek języka lub można je zainstalować za pomocą języka menedżera pakietów de jure .
Funkcja powinna być szybka. Nie powinno to zająć więcej niżUruchomienie na rozsądnie nowoczesnym komputerze 20 sekund, jeśli zostanie podany numer 100-cyfrowy, i nie więcej niż 2 sekundy, gdy zostanie podany numer 10-cyfrowy.
Funkcja / program powinien obsługiwać dane wejściowe co najmniej 100 cyfr .
- Jeśli funkcja / program obsługuje tylko liczby całkowite do N <100 cyfr, zostanie nałożona kara wysokości + 10 × (100 / N - 1) bajtów do wyniku końcowego. Ma to zachęcić golfistów do obsługi szerszego zakresu liczb, nawet jeśli import może być pełny.
Jest ma ograniczeń w prezentacji danych wejściowych / wyjściowych, o ile są one wyraźnie w postaci dziesiętnej.
- Funkcja może wprowadzać i wyprowadzać ciągi znaków / BigInts, jeśli wbudowane typy liczb całkowitych nie są wystarczające.
- Dane wejściowe mogą pochodzić z parametru funkcji, argumentu wiersza poleceń lub STDIN.
- Funkcja może zwrócić wynik lub po prostu wydrukować wynik bezpośrednio do STDOUT.
- Jednak podpisane przepełnienie wejść / wyjść jest niedozwolone.
- Przybliżone odpowiedzi nie są tolerowane, dane wejściowe / wyjściowe muszą być dokładne.
Punktacja
To jest golf golfowy . Najkrótsze rozwiązanie w bajtach wygrywa.
Jeżeli program obsługuje tylko liczby mniejsze niż 100 cyfr, obowiązuje kara:
- 64-bitowe liczby całkowite (19 cyfr) = +42 bajty
- 63-bitowe liczby całkowite (18 cyfr) = +45 bajtów
- 53-bitowe liczby całkowite (15 cyfr) = +56 bajtów
- 31/32-bitowe liczby całkowite (9 cyfr) = +101 bajtów