Zadanie
Przedrostek, append-Sequence jest definiowany rekurencyjnie, w ten sposób
- a (1) = 1
- a (n) = a (n-1) .n, jeśli n jest parzyste
- a (n) = na (n-1), jeśli n jest nieparzyste
gdzie . reprezentuje konkatenację liczb całkowitych.
Tak więc kilka pierwszych terminów to: 1,12,312,3124,53124,531246,7531246,...
To jest A053064 .
Twoim zadaniem jest, biorąc pod uwagę liczbę całkowitą a> 0, aby zwrócić n , tak aby n- ty element w przedrostku, append-Sequence był równy a, a jeśli nie istnieje n , zwróć 0, ujemna liczba lub błąd itp.
Zasady
- Dane wejściowe można traktować jako liczbę całkowitą, ciąg, listę znaków / cyfr itp.
- Dane wyjściowe można wydrukować do STDOUT lub zwrócić (liczba całkowita, łańcuch itp. Jest w porządku)
- W przypadku niepoprawnego wejścia iw przypadku, gdy takie n nie istnieje, program może zrobić cokolwiek innego niż zwrócić dodatnią liczbę całkowitą (np. Zapętlić na zawsze, zwrócić 0 itd.)
- Możesz zdecydować się na użycie indeksowania 0, ale wtedy wyjście w przypadku, gdy nie istnieje n , nie może wynosić 0
Przypadki testowe
1 -> 1
12 -> 2
21 -> 0
123 -> 0
312 -> 3
213 -> 0
211917151311975312468101214161820 -> 21
2119171513119753102468101214161820 -> 0
333129272523211917151311975312468101214161820222426283031 -> 0
999795939189878583817977757371696765636159575553514947454341393735333129272523211917151311975312468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100 -> 100
a(n-1)*(int(log(n))+1)+n
in*(int(log(n))+1)+a(n-1)
?Odpowiedzi:
JavaScript (ES6), 40 bajtów
Pobiera dane wejściowe jako ciąg. Zgłasza błąd rekurencji, jeśli nie znaleziono indeksu.
Próbny
Pokaż fragment kodu
źródło
f=(n,s=k='1')=>n-s?f(n,++k&1?k+s:s+k):k
C # (.NET Core) ,
83, 80, 6059 bajtówWypróbuj online!
Pobiera dane wejściowe jako ciąg znaków do funkcji lambda. 1-indeksowany. Zwraca indeks wartości truey lub nieskończenie pętli dla „falsey”
źródło
Python 2 , 63 bajty
-1 bajt dzięki @EriktheOutgolfer .
Wypróbuj online!
Python 2 , 64 bajty
-18 bajtów dzięki @officialaimm , ponieważ nie zauważyłem, że pomyłka była dozwolona!
Wypróbuj online!
Python 2 , 82 bajty (nie zapętla się wiecznie)
Ten zwraca
0
niepoprawne dane wejściowe.Wypróbuj online!
źródło
f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j
sys.setrecursionlimit()
. Czy możesz podać tio?x=1
? Czyx=12
? Myślałem, że to rzuciło taki błąd przynajmniej nax=151311975312468101214
coś takiego.Galaretka , 12 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
05AB1E , 14 bajtów
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
0-indeksowane .
Zwraca -1, jeśli danych wejściowych nie ma w sekwencji.
źródło
g
usuniętą i skróconą funkcją dodawania / dodawania.R , 73 bajty
Odczytuje ze standardowego wejścia i zwraca wartość indeksu (niejawnie wydrukowanego). Nieskończone pętle, gdy wartość nie jest w sekwencji.
F
jest domyślnieFALSE
rzutowany,0
gdy jest używany w arytmetyce.Wypróbuj online!
źródło
Mathematica, 135 bajtów
źródło
Galaretka ,
19 1815 bajtówMonadyczny link przyjmujący i zwracający liczby całkowite.
Wypróbuj online! (bardzo wolno - zajmuje ~ 50 s na TIO tylko po to, aby potwierdzić, że
3124
jest na indeksie4
)Aby uzyskać znacznie szybszą wersję, użyj poprzednich 18 bajtów (sprawdza tylko długość wejściową, co jest wystarczające).
W jaki sposób?
źródło
211917151311975312468101214161820
?Swift 4 , 92 bajty
Zapętla się w nieskończoność w przypadku nieprawidłowych przypadków, więc nie umieściłem ich w łączu testowym.
Pakiet testowy.
Zabawne, że jest dłużej z zamknięciem:
Pakiet testowy.
źródło
Haskell ,
11585 bajtówWypróbuj online!
źródło
Perl 5 , 54 + 1 (-n) = 55 bajtów
Wypróbuj online!
Nic nie zwraca, jeśli nie zostanie znalezione.
źródło
Haskell,
757157 bajtówPrzyjmuje
n
jako sznur.Wypróbuj online!
źródło