Dość łatwo jest n
utworzyć zakres od 0
do , biorąc pod uwagę liczbę n-1
. W rzeczywistości wiele języków udostępnia tę operację jako funkcję wbudowaną.
Poniższy program CJam odczytuje liczbę całkowitą, a następnie drukuje taki zakres ( Wypróbuj online! ):
ri,
Zauważ, że wypisuje liczby bez separatora.
Wyzwanie
Twoim zadaniem jest odwrócenie tego procesu. Powinieneś napisać program, który, biorąc pod uwagę ciąg reprezentujący zakres, zwraca liczbę użytą do wytworzenia tego zakresu.
Dane techniczne
- Liczby podano bez separatora.
- Możesz założyć, że łańcuch tworzy prawidłowy zakres.
- Możesz użyć indeksowania opartego na 0 lub 1 dla swojego zakresu.
- Możesz założyć, że poprawne wyjście nigdy nie przekroczy 32 767 (więc prawidłowe dane wejściowe nigdy nie będą miały długości większej niż 152 725).
- Możesz założyć, że poprawne wyjście zawsze będzie dodatnie (więc nie musisz obsługiwać wartości 0 lub ujemnych).
To jest golf golfowy , więc wygrywa najkrótsza konkurencyjna odpowiedź (mierzona w bajtach).
Przypadki testowe
0-indeksowane:
0123 -> 4
0 -> 1
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 101
1-indeksowany:
1234 -> 4
1 -> 1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 100
Odpowiedzi:
Prolog (SWI) ,
9180 bajtów0-indeksowane.
Dodano nowe linie dla czytelności.
Wypróbuj online!
źródło
Łuska , 5 bajtów
Wypróbuj online!
Tylko litery!
Pobiera dane wejściowe jako ciąg, wynik jest indeksowany 1.
Wyjaśnienie
źródło
05AB1E ,
76 bajtów1-indeksowany.
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
0
bez względu na dane wejściowe: tio.run/##MzBNTDJM/f8/3efcdi/PbLv//5UMjYxNTM3MLSwNDZQA[NÝJQ#]N
był mój pomysł, ale jest to lepsze, ponieważ działa""
.Java 8,
6659 bajtów0-indeksowane
-7 bajtów dzięki @ PunPun1000 .
Mam wrażenie, że można to skrócić, sprawdzając tylko jakoś długość danych wejściowych, ponieważ możemy założyć, że dane wejściowe są zawsze prawidłowe. Nadal to rozgryzam.Nie można tego rozgryźć i prawdopodobnie będzie to kosztować zbyt wiele bajtów w Javie, aby było przydatne (to samo dotyczy zwracania podłańcucha końca danych wejściowych o indeksie 1).Wyjaśnienie:
Wypróbuj tutaj.
źródło
Brachylog ,
97 bajtówWypróbuj online!
0-indeksowane.
Wyjaśnienie
Tutaj przekazujemy dane wejściowe przez zmienną Output i uzyskujemy dostęp do wyniku przez zmienną Input.
źródło
Ly , 29 bajtów
Wypróbuj online!
Nie mogę uwierzyć, że to działało tak dobrze, jak ...
źródło
Japt , 8 bajtów
Zaczynam rozumieć metody funkcji w Japt.
0-indeksowane. Może przyjmować dane wejściowe jako ciąg, liczbę całkowitą lub tablicę zawierającą 0 lub 1 elementy.
Sprawdź to
Wyjaśnienie
Domniemane wprowadzanie ciągu
U
.Uzyskaj pierwszą liczbę całkowitą,
>=0
która zwraca wartość true, gdy zostanie przekazana przez funkcję, która ...Generuje tablicę liczb całkowitych od
0
do 1 mniej niż bieżąca liczba całkowita ...Łączy go w ciąg ...
Sprawdza ten ciąg pod kątem równości z
U
.Wyjściowa wartość wynikowa liczby całkowitej.
Alternatywnie, 8 bajtów
Sprawdź to
źródło
Węgiel drzewny , 13 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Haskell,
4037 bajtówFunkcja odwracająca zakresy zerowe.
Dzięki Laikoni za oszczędność 3 bajtów!
Wypróbuj online.
źródło
f s=[n|n<-[0..],(show=<<[0..n])>s]!!0
.|m<-n+1=s!m
.Siatkówka , 30 bajtów
Rekurencyjnie dodaje średnik po każdej liczbie, a następnie zlicza średnik
Wypróbuj online!
źródło
JavaScript (ES6),
3231 bajtówOszczędność 1 bajtu dzięki Challenger5
Przypadki testowe
Pokaż fragment kodu
źródło
f(payload_param)()
lub nawetf(payload_param)(some_constant)
. (Nawiasem mówiąc, nie jestem pewien, czy to zadziałałoby w tym konkretnym przypadku, ponieważ potrzebuję obur
i mamn
inicjalizację.)Mathematica, 46 bajtów
1-indeksowany
wkład
źródło
Ruby ,
515046 bajtów(To mój pierwszy program Ruby, więc dalsza gra w golfa musi być łatwa)
-4 bajty dzięki @Nnnes
źródło
.index(gets)
=>.index gets
. Możesz użyć4e4
zamiast8**5
, ale spowoduje to, że będzie działał jeszcze wolniej. Generalnie jest OK i często oszczędza kilka bajtów, aby użyć anonimowych lambdów dla odpowiedzi Ruby: Wypróbuj online! (Zmieniłem limit na 100, aby nie przekroczył limitu czasu.)Python 2 , 43 bajty
Wypróbuj online!
Python 2 , 43 bajty
Wypróbuj online!
Python , 46 bajtów
Wypróbuj online!
Inna strategia. Pobiera liczbę znaków od końca równą długości największego ciągu znaków
0
w.Python , 46 bajtów
Wypróbuj online!
Recursive version of the above.
źródło
... i*'0'in s[1:] for ...
or something like that?R, 47 bytes
Try it online!
1-indexed
źródło
"if"
instead ofifelse
nchar
works as you might expect on numbers. However, you need to handle printing your output, since this wouldn't when run as a full program.n=nchar(scan());cat(which(cumsum(nchar(1:n))==n))
APL (Dyalog),
1711 bytes-6 bytes thanks to ngn.
Try it online!
⍳⊂
find the ɩndex of the entire argument in{
…}
the result of this anonymous function:≢
length of the argument⍳
ɩntegers until that⍕¨
format (stringify) each,\
cumulative concatenation of thoseźródło
{,\⍕¨⍳≢⍵}⍳⊂
(11 chars)Perl 5, 19 bytes
18 bytes code + 1 for
-p
.Uses 1-based indexing. -7 bytes thanks to @nwellnhof's much better approach!
Try it online!
Explanation
$\
is a special variable that isprint
ed automatically after each statement, so by using that to store our number we don't need to update$_
(which is automatically printed as part of the functionality of the-p
flag) to contain the desired output. Then, whilst the input starts with$\
, remove it andredo
the program, which again increments$\
and replaces it. When it no longer finds the number at the beginning of the string, we're done! Finally, decrement$\
so we have the last number in the range.źródło
$i++while s/$i\B//
(18 + 1 bytes)?Python 2, 46 bytes
0-indexed
Try it online!
źródło
CJam, 16 bytes
Try it online!
Alternative 16 bytes
Try it online!
źródło
CJam, 13 bytes
So many commas...
Try it online!
Explanation
źródło
Perl 6,
30 2827 bytesTest it
Test it
Test it
Expanded:
'',0...*
produces an infinite sequence of values''
,0
,1
,2
,3
…[\~] '',0...*
produces an infinite sequence of all of the possible inputsNote that this code will never stop if you give it an invalid input.
źródło
Pyth,
1110 bytes1-indexed.
Try it here
If the empty string could be ignored, this can be shortened to 6 bytes:
-1 byte thanks to @Mnemonic
źródło
?QfqQjkUT)1
can do it in 11 as well, but I feel like some reordering can golf off a byte. Any ideas?jk
instead of s`m.CJam,
141211 bytesTry it Online
źródło
Dyvil,
4238 bytesSame algorithm as this Java answer, except it (ab)uses some of Dyvil's syntactic specialties.
Explanation:
4
bytes by using a brace access expression instead of a variable for the accumulatorźródło
MATL, 14 bytes
1-indexed.
Try it online!
Explanation
źródło
C#, 72 bytes
Data
String
i
The int array to be decipheredInt32
The number used to make the arrayGolfed
Ungolfed
Ungolfed readable
Full code
Releases
72 bytes
- Initial solution.Notes
źródło
i=>{int c,p=c=0;for(;p<i.Length;)p+=(c+++"").Length;return c;}
62 bytesSOGL V0.12,
11109 bytes1-indexed.
Try it Here!
Explanation:
..or 7 bytes without the empty case
Try it Here!
źródło
Aceto,
2725 bytes1-based index.
We
r
ead the input andM
emorize it (and directlyL
oad it again), then we negate it (!
; leading to a truthy value only for an empty string). If this value is truthy (`
), we jump to the end (;
), where wep
rint the implicit zero.Otherwise, we increment the current stack value (initially a zero), duplicate it, and put one copy on the stack to the right, while also moving there (
Id]
). We then construct a decreasing range (z
), join the stack as a string (¥
), and move the value (and us) on the original stack again ([
). WeL
oad the value we memorized earlier (the input) and compare it with this string. If equal, we jump to the end again, where we print the current "counter" value (=`;
).Otherwise, lots of empty space is traversed until the Hilbert curve eventually hits the
<
which puts the IP on top ofI
again, incrementing the counter and testing again.źródło
Stacked, 23 bytes
Try it online!
Basically, increments
0
until the range from0
to the number looks like the input, checking for equality first.źródło
Jelly, 8 bytes
Try it online!
źródło