Według Wikipedii silną funkcją Darboux jest
taki, dla którego obraz każdego (niepustego) interwału otwartego jest całą rzeczywistą linią
Innymi słowy, funkcja jest mocno Darboux jeśli podano 3 dowolnych liczb rzeczywistych , i zawsze jest możliwe znalezienie między (odrębny) i tak, że .
Na potrzeby tego wyzwania rozważymy zamiast tego funkcje Darboux nad racjonalnymi.
Twoim wyzwaniem jest napisanie programu lub funkcji, która:
- podaje liczbę wymierną jako wynik dla każdego wejścia liczby wymiernej,
- zawsze daje to samo wyjście dla danego wejścia, oraz
- ma silnie właściwość Darboux.
Dane wejściowe i wyjściowe mogą być następujące:
- typ liczb o dowolnej dokładności, jeśli twój język ma jeden (lub bibliotekę dla jednego, np. GMP).
- ciąg znaków reprezentujący liczbę, który możesz założyć, zawsze będzie zawierał przecinek dziesiętny i co najmniej jedną cyfrę po każdej stronie. Może być w dowolnej bazie , ale wejście i wyjście musi być w tej samej bazie. Możesz użyć dowolnego zestawu znaków dla cyfr i kropki dziesiętnej (ale znowu, muszą one być spójne między wejściem a wyjściem).
Wejście będzie zawsze miało końcową ekspansję bazy . Jeśli chodzi o dane wyjściowe, które mogą mieć teoretycznie niekończące się rozszerzenie bazy zależności od wyboru funkcji, możesz wybrać dowolną z następujących opcji:
- wyprowadzaj cyfry na zawsze.
- weź dodatkową liczbę całkowitą jako wejście i wyjście co najmniej tyle cyfr.
- wypisuje co najmniej tyle cyfr, ile jest na wejściu (które mogą zawierać końcowe zera).
Należy zauważyć, że ze względu na charakter tego wyzwania nie ma zastosowania konwencja, że liczby mogą być reprezentowane przez standardowe typy liczb , z wyjątkiem drugiego wejścia opisanego w opcji 2 powyżej.
Aby uniknąć luk w funkcjach, które są zdefiniowane tylko w nieracjonalnych uzasadnieniach, twoje przesłanie musi być w stanie wygenerować wyjście arbitralnie zbliżone do pożądanej wartości w praktyce . Formalnie, biorąc pod uwagę liczby wymierne , , i , musi istnieć liczba wymierna która kończy się w wybranej przez ciebie bazie, tak aby i .
Aby dać ci kilka pomysłów, oto opis funkcji Conway base 13 :
- Konwertuj na podstawę 13 i usuń przecinek dziesiętny.
- Jeśli wynik ma postać , gdzie i składają się tylko z cyfr od 0 do 9, to .
- Jeśli wynik ma postać , gdzie i składają się tylko z cyfr od 0 do 9, to .
- W przeciwnym razie .
Ta funkcja jest silnie Darboux. Załóżmy na przykład, że chcemy znaleźć między i tak, że . Wartość podstawy 13 spełniałaby ten wymóg.
Twoje zgłoszenie może być implementacją tej funkcji, chociaż podejrzewam, że istnieją inne funkcje zdecydowanie Darboux, które są o wiele krótsze do wdrożenia. :)
Odpowiedzi:
Retina 0.8.2 ,
4350 bajtówWypróbuj online! I / O jest jak ciąg binarny. Zakoduj liczbę binarną
y
blisko innej liczby binarneja
w następujący sposób:a
nie zawiera.
, sufiks jeden.a
po paśmie zawiera nieparzystą liczbę cyfr.
, sufiks a0
.y
jest ujemny, to w11
przeciwnym razie przyrostek10
.y
sufiks,0
po którym następuje ta cyfra.y
zawiera.
, przyrostek11
w tym punkcie, w przeciwnym razie sufiks go po wszystkich cyfry
.Wyjaśnienie:
Sparuj cyfry, zaczynając od punktu binarnego. Jeśli liczba jest prawidłowym kodowaniem, wówczas dekoduj ostatnią
1x
parę cyfr na a,.
a drugą na-
znak opcjonalny . Wcześniejsze cyfry są ignorowane.Powinno to po prostu pozostawić pary zaczynające się od
0
, więc usuń0
s.źródło
-.
. Czy oznaczają one zera, czy nie powinny być tworzone?*
s na+
s, co gwarantowałoby co najmniej jedną cyfrę przed i po.
?.
. Myślę jednak, że wciąż mogę zagwarantować cyfrę przedtem.
..
nie zmienia jego wartości, ale taka zmiana wejścia twojej funkcji zmienia wynik. Być może możesz to naprawić, zakładając, że dane wejściowe nie mają takich zer. Ponadto, jeśli pogrupujesz pary od prawej, jak to „teoretycznie działa dla dowolnego rzeczywistego wkładu”?11
dołączane w kroku 2.)Galaretka , 71 bajtów
Wypróbuj online!
Pełny program, który przyjmuje liczbę podstawową 10 jako dane wejściowe i wyjściowe i implementuje funkcję podstawy 13 Conwaya, ale używa zasad 7 i 10 zamiast 10 i 13. Zarówno dane wejściowe, jak i wyjściowe używają przecinka jako separatora dziesiętnego. Wyjście będzie miało wiodące - dla liczb ujemnych.
źródło
Siatkówka ,
28252628 bajtówWypróbuj online!
Wyjaśnienie
Może generować zera wiodące i końcowe oraz liczby bez części całkowitej.
Mogłabym grać w golfa o 2 lub 3 bajty więcej, gdybym mógł użyć
4+
. Ale nie jestem pewien, jak zdefiniować wynik teoretyczny, jeśli dane wejściowe mają nieskończony strumień4
s.źródło