Wprowadzenie
W podstawie 10 stała Champernowne jest zdefiniowana przez połączenie reprezentacji kolejnych liczb całkowitych. W bazie 10: 0.1234567891011121314151617...
i tak dalej.
Widać, że pierwsze pojawienie się 15
zaczyna się po 20th
przecinku:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
15 = position 20
Pierwsze pojawienie się 45
zaczyna się po 4th
przecinku:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
45 = position 4
Zadanie jest więc łatwe. Biorąc pod uwagę nieujemną liczbę całkowitą, wypisuje pozycję liczby całkowitej w stałej Champernowne.
Zasady
- Możesz podać funkcję lub program
- To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Przypadki testowe
Input: 20
Output: 30
Input: 333
Output: 56
Input: 0
Output: 11 (note that the 0 before the decimal point is ignored)
Input: 2930
Output: 48
0 <= x <= 99
, ale teoretycznie powinno to działać dla liczb całkowitych wyższych niż99
.Odpowiedzi:
Pyth, 10
Łączy pierwsze
input + 10
liczby, a następnie znajduje indeks oparty na 0 plus jeden. Dodatkowe dziesięć jest potrzebne tylko dla 0.Pakiet testowy
źródło
2015-12-17 15:01:23Z
czy coś takiego?LabVIEW, 29 LabVIEW Prymitywy
Na razie używa to ciągów znaków. Dopasowuje dane wejściowe jako wzorzec i wyświetla offset - (długość wejściowa -1).
źródło
JavaScript, 57 bajtów
Oszczędność 1 bajtu dzięki Conorowi O'Brienowi.
źródło
y=
część doy=b=" "
; inkrementacja spacji jest jak inkrementacja zera. (a=prompt(y=b=" ");...
)Haskell, 62 bajty
Przykład użycia:
(#(show=<<[1..])).show $ 2930
->48
.Jak to działa:
a # b
znajduje pozycję wa
ciągub
: ifa
jest prefiksemb
return1
, w przeciwnym razie dodaj1
do wywołania rekurencyjnego za pomocąa # tail b
. Funkcja pointfree(#(show=<<[1..])).show
oczekuje (nienazwanego) argumentun
i wywołańshow n # show=<<[1..]
.Funkcja
subIndex
również wykona zadanie#
, ale wymaganeimport Data.List.Utils
nie opłaca się.źródło
.show
Ruby, 28 lat
Zawiera 0 na początku, więc dopasowania są indeksowane 1, ale
\B
wymaga, aby dopasowanie nie było na początku łańcucha.źródło
Japt, 11 bajtów
To pierwotnie pokonało Pytha, ale najwyraźniej nie działało na wejście
0
.Wypróbuj online!
Jak to działa
źródło
q
w kodzie a nie logiczny symbol negacji¬
?¬
to skrót doq
(q
z następującą spacją). Wydaje się to często wprowadzać zamieszanie, więc ustawiłem krótszą wersję z pełną.Lua, 54 bajtów
Uwaga:
Obecnie ten program wypisuje zarówno pierwsze wystąpienie pierwszego znaku ciągu, jak i punkt, w którym się kończy. Jeśli nie jest to dozwolone, będzie kosztować kilka dodatkowych bajtów.Chciałbym prosić o premię, ponieważ mój program wypisuje zarówno pierwszą pozycję, jak i ostatnią pozycję liczby wejściowej.źródło
MATL , 22 bajty
Weź input (
i
), ustaw wektor 1 na input + 10 (10+:
), konwertuje wektor na string (Ys
) i usuń spacje, co jest bolesne, (t' '=~)
). Następnie przekonwertuj dane wejściowe na ciąg znaków (Ys
), znajdź ciąg znaków wejściowych w ciągu liczb (Xf
) i wybierz pierwszą lokalizację (1)
).t
„Sw
” y manipuluje stos (zduplikowane i wymienne, odpowiednio).źródło
PowerShell,
3944 bajtów[Edycja: moje założenie nie działa, budowanie tablicy z 1-0 nie znajduje 0 w miejscu 11. Zamiast tego buduj z 1-x + 10, aby obsługiwać również 0, teraz 44 bajty]
Zawsze znajdziesz x podczas budowania ciągu stałej Champernowne w ostatnim punkcie, kiedy dodajesz x na końcu, więc tablica od 1-x zawsze będzie zawierała odpowiedź. Pytanie brzmi „czy to nastąpi wcześniej?” . Ten kod
generuje zakres liczb, rzutuje go na ciąg znaków i wyszukuje w nim parametr. Ponieważ PowerShell jest powłoką obiektową, parametr jest w rzeczywistości
[int]
typem, więc próba zapisania dwóch znaków za pomocą.IndexOf($i)
przeszukałaby łańcuch w celu znalezienia liczby całkowitej i niczego nie znalazłaby. Dlatego używam interpolacji ciągów"$i"
.źródło
.IndexOf()
najwyraźniej ma wyższe preferencje operacyjne niż jednoargumentowe-join
wymuszanie parens i cytatów. : - /Mátl (uwalnianie 1.0.1), 22 bajtów
Przykład
Wyjaśnienie
MATL (wydanie 20.8.0), 16 bajtów (wyzwanie dla postdatacji języka)
Podziękowania dla @Giuseppe za tę wersję programu (nieznacznie zmodyfikowaną)
Wypróbuj online!
Wyjaśnienie
źródło
G
zawiera dane wejściowe (i dane niejawne), myślę, że odpowiedź ta może zostać znacznie skrócona, a wszystko toYs
trzeba zmienić na iV
tak; Wymyśliłem10+:"@Vv]!GVXf1)
16 bajtów.Ys
się zmienić,V
aby korzystać z najnowszej wersji tłumacza. Zawsze jestem pod wrażeniem tego, jak bardzo poprawił się język!PowerShell,
5450 bajtówDzięki TessellatingHeckler za pomysł zamiany
while
pętli nafor
pętlę.Wykonuje się przez
for
pętlę. Podobnie jak w przypadku innych języków, pierwsza instrukcja w pętli może konstruować zmienne i przypisania, więc zaczyna się od$c
równego tylko pustemu ciągowi''
dzięki czemu mamy zerowe indeksowanie ciągu zgodne z dziesiętnym indeksowaniem wyzwania. Jesteśmy wtedy w pętli, która sprawdza, czy gdzieś w niej$c
jest wejściowa liczba całkowita ($args
) (tzn. Ponieważ.IndexOf()
zwraca,-1
jeśli ciąg nie zostanie znaleziony, dodajemy jedną do niej (0
), a nie do ($TRUE
), aby kontynuować pętlę). Jeśli nie zostanie znaleziony, dodajemy naszą wstępnie zwiększoną$i
zmienną licznika, a następnie ponownie sprawdzamy ciąg. Po znalezieniu ciągu.IndexOf()
zwróci wartość dodatnią, której nie będzie$FALSE
, wyrwanie się z pętli. Na koniec wyprowadzamy indeks za pomocą$x
.źródło
for
pętli ...for($c='.';($x=$c.IndexOf("$args"))-lt0;$c+=++$i){}$x
i uratuj 1 postać. Ponieważ większość wywołań IndexOf zwróci -1, dodaj jeden do niego i wstaw wartość logiczną! rzuć to, na krótszy test. Ale do tego potrzebne są pareny. Opróżnij $ c i +1 w istniejących parenach, bonus jest krótszy.for($c='';!($x=$c.IndexOf("$args")+1);$c+=++$i){}$x
51 bajtów. (ale opublikowałem mój 39-bajtowy jeden jako własną odpowiedź, ponieważ jest to zupełnie inne podejście: P).$c
konkatenację do pętli, aby zagrać w średnik. Teraz o 50.JavaScript (ES6), 40 bajtów
Używa funkcji rekurencyjnej,
f
aby uniknąć pętli. The wyszukiwania działa tak samo,indexOf
z tym wyjątkiem, że przyjmuje RegExp jako parametr, co nie ma znaczenia dla tego wyzwania.Dodanie
" "
don=0
obudowy (zero falsy w JS) przekształcająca wartość+
wykonać konkatenacji zamiast dodawania i koryguje do indeksowania zera.źródło
Python 3, 54.
źródło
CJam, 11 bajtów
Sprawdź to tutaj.
Znajduję pozycję
N
w ciągu,01234...N
aby uwzględnić indeksowanie 1. Na koniec naprawiam0
, stosując logiczne OR z 11.źródło
Poważnie, 13 bajtów
Pobiera dane wejściowe jako liczbę całkowitą. Zawiera niedrukowalne, więc zrzut heksowy:
Wypróbuj online
Wyjaśnienie:
źródło
𝔼𝕊𝕄𝕚𝕟, 13 znaków / 22 bajty
Try it here (Firefox only).
źródło
k4, 21 bajtów
To samo algo jak wszyscy inni - łączenie
[1..10+x]
jako ciągi, wyszukiwanie x jako ciąg, konwersja do indeksowania opartego na jednym, zwracanie pierwszego trafienia.Sprawdzanie przypadków testowych:
źródło
Mathematica, 101 bajtów
źródło
Haskell ,
827355 bajtówMigrowałem z duplikatu
Wypróbuj online!
Wyjaśnienie
Najpierw zdefiniujemy
!
.x!b
obcinab
się do pierwszego pojawienia sięx
. Robi to, sprawdzając, czyb
zaczyna się odx
(or$zipWith(==)x b
) zwracając,x
jeśli tak, i przesuwając jeden w dół łańcucha w przeciwnym razie. Następnie definiujemy naszą główną funkcję. Naszą główną funkcją jest funkcja bez punktów, która przyjmuje stałą (show=<<[1..]
) i obcina ją do pierwszego pojawienia sięx
. To trwax
jako ciąg.źródło
05AB1E , 6 bajtów (niekonkurujące)
Wypróbuj online!
źródło
JavaScript (ES6),
503938 bajtówSpróbuj
źródło
Galaretka , 5 bajtów
Wypróbuj online!
źródło
Stax , 6 bajtów
Uruchom i debuguj
źródło
Perl 6 , 26 bajtów
Wypróbuj online!
Znajduje indeks elementu w konkatenowanym zakresie od 0 do tego elementu lub
11
jeśli liczba jest zeremźródło
Perl 5 , 42 + 1 (-p) = 43 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Perl 6 / Rakudo 29 bajtów
Definiuje funkcję z jednym wejściem ($ ^ a). Zadzwoń w ten sposób:
Dołączanie
$
, anonimowa zmienna, zwiększająca się$++
do momentu$^a
znalezienia wejścia , a następnie zliczająca liczbę znaków przed nim. Wymaganie co najmniej 1 znaku przed nim.+
w wyrażeniu regularnym użytecznie wyklucza przypadek 0–> 0źródło
J, 30 bajtów
Prawdopodobnie można go nieco pograć w golfa, szczególnie w połączeniu pierwszych liczb całkowitych n + 10.
Wyjaśnienie:
Zauważ, że jest to indeksowane na 0. Przykłady:
źródło
Łuska , 6 bajtów
Wypróbuj online!
źródło