Podwójna precyzja reprezentacji dziesiętnej może zagwarantować dokładność tylko 15 miejsc po przecinku, dlatego wartość pi jest przybliżana jako:
3.141592653589793
Możesz zobaczyć, że cyfra 3
jest w pozycjach 1, 10, 16
, cyfra 1
jest w pozycjach 2, 4
itp.
Wyzwanie
Twoim zadaniem jest utworzenie programu lub funkcji, która utworzy losową podwójną liczbę od 0 do 1 i odwzoruje wartości tej liczby na wartość pi. Robisz to, umieszczając różne cyfry w liczbach losowych w miejscu, w którym cyfra ma liczbę pi. Jeśli cyfra nie zostanie znaleziona w pi, pominiesz ją, a każda cyfra w pi, która nie jest liczbą losową, będzie reprezentowana przez x
. Każda wartość może być użyta tylko raz, zaczynając od lewej.
Kilka przykładów prawdopodobnie to wyjaśni. W poniższych przykładach pierwsza liczba to pi, druga to liczba losowa, a ostatnia to pożądana wartość wyjściowa.
3.141592653589793
0.111111111111111
x.1x1xxxxxxxxxxxx
3.141592653589793
0.531000000000000
3.1xx5xxxxxxxxxxx
3.141592653589793
0.123456789123456
3.141592653x8x7xx
3.141592653589793
0.967552381459391
3.14159265358979x
Zasady:
- Funkcja nie powinna pobierać żadnych danych wejściowych (możliwy wyjątek wyjaśniono w punkcie 3)
- Dane wyjściowe powinny składać się tylko z ciągu wyjściowego z opcjonalnym znakiem nowej linii (akceptowana jest również pojedyncza spacja)
- Jeśli twój program nie ma wbudowanej wartości Pi i / lub RNG, możesz na stałe wpisać Pi i przyjąć liczbę losową jako dane wejściowe. Nie można na stałe zakodować losowej liczby ani wziąć Pi jako danych wejściowych.
- Zarówno zapisana na stałe wartość Pi, jak i 15 losowych cyfr (możesz pominąć,
0.
ponieważ wiesz, że będzie to od 0 do 1), zostaną uwzględnione w liczbie bajtów. - Jeśli twój język nie ma wymaganej precyzji, możesz użyć mniejszej precyzji pod następującymi ograniczeniami
- Cyfry Pi muszą być dokładne z dokładnością do posiadanej dokładności
- Nie możesz wypisać więcej wartości, niż masz pewność, że są poprawne, tzn. Nie możesz wypisać 15 cyfr, jeśli precyzja pozwala tylko na 8 dokładnych miejsc po przecinku.
- Zakodowana wartość Pi będzie liczyła się jako 16 bajtów (nie potrzebujesz przecinka dziesiętnego), nawet jeśli twój program obsługuje tylko 8 cyfr.
- Wartość wejściowa dla liczby losowej będzie liczona jako 15 bajtów (nie potrzebujesz
0.
. Jest tak, ponieważ języki o niskiej precyzji nie powinny mieć nieuczciwej przewagi. - Program musi obsługiwać precyzję co najmniej 5 miejsc po przecinku.
- Edycja: Aby potwierdzić odpowiedź: Liczba losowa powinna być jakoś wydrukowana, ale ta operacja nie musi być uwzględniona w liczbie bajtów. Na przykład, jeśli możliwe jest wstawienie znaku
print r
na końcu skryptu, ta część nie zwiększy wyniku. - Nie można odjąć bajtów, jeśli jest to część innej niezbędnej operacji. To znaczy
print pi, r
, jeśli kod jest , możesz tylko odjąć, r
. - Jeśli musisz wstawić części do kilku miejsc w kodzie, dołącz obie wersje (tę, która drukuje liczbę losową i tę, która nie zawiera komentarza, na przykład:
_p
i_oNo
są potrzebne do wydrukowania liczby losowej._p
Robi xxx i_oNo
robi yyy._p
i_oNo
nie zostaną uwzględnione w liczbie bajtów.
Najkrótszy kod w bajtach wygrywa.
Tabela liderów
Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.
Aby upewnić się, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0 < random < 1
lub 0 <= random <= 1
?