Chcesz, aby ciąg, gdzie ( 1-indeksowane ) znak o indeksie n
jest n
. Gdy n
jest mniej niż 10, to jest proste: "123456789"
. Na n
przykład, kiedy jest 12, staje się to niemożliwe, ponieważ liczby większe niż 9 (w bazie 10) zajmują więcej niż jeden znak. Możemy kompromisu poprzez podzielenie ciąg na podciągi dwuznakowych: "020406081012"
. Teraz indeks końca każdego podciągu n
wynosi n
.
Można to uogólnić dla dowolnego d
numeru cyfrowego. Oto wyjaśnienie części „0991021” ciągu trzech cyfr:
Index: ... * 97 98 99*100 101 102*103 ...
* * *
*---+---+---*---+---+---*---+
Character: ... * 0 | 9 | 9 * 1 | 0 | 2 * 1 | ...
*---+---+---*---+---+---*---+
Jeśli jeszcze tego nie rozgryzłeś, musisz napisać program / funkcję, która pobiera ciąg lub liczbę całkowitą i wyprowadza swój ciąg referencyjny, jak określono powyżej. Możesz także wypisać tablicę liczb jednocyfrowych, znaków lub ciągów jednoznakowych.
Podana liczba całkowita będzie zawsze dodatnia i podzielna przez swoją długość (np. 126 jest podzielna przez 3; 4928 jest podzielna przez 4). Twój program powinien teoretycznie działać na dowolnie duże dane wejściowe, ale możesz założyć, że jest on mniejszy niż maksymalna liczba całkowita i / lub długość łańcucha w twoim języku.
Pewne spostrzeżenia, jeśli nadal ich nie otrzymujesz: długością wyjścia zawsze będzie sam sygnał wejściowy, a liczby pojawiające się na wyjściu będą podzielne przez liczbę cyfr na wejściu.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Przypadki testowe
1 => 1
9 => 123456789
10 => 0204060810
105 => 003006009012015018021024027030033036039042045048051054057060063066069072075078081084087090093096099102105
1004 => 00040008001200160020002400280032003600400044004800520056006000640068007200760080008400880092009601000104010801120116012001240128013201360140014401480152015601600164016801720176018001840188019201960200020402080212021602200224022802320236024002440248025202560260026402680272027602800284028802920296030003040308031203160320032403280332033603400344034803520356036003640368037203760380038403880392039604000404040804120416042004240428043204360440044404480452045604600464046804720476048004840488049204960500050405080512051605200524052805320536054005440548055205560560056405680572057605800584058805920596060006040608061206160620062406280632063606400644064806520656066006640668067206760680068406880692069607000704070807120716072007240728073207360740074407480752075607600764076807720776078007840788079207960800080408080812081608200824082808320836084008440848085208560860086408680872087608800884088808920896090009040908091209160920092409280932093609400944094809520956096009640968097209760980098409880992099610001004
C, 64 bajty
Pobiera jedną liczbę całkowitą jako wejście na standardowe wejście.
źródło
JavaScript (ES6), 83 bajty
Tak, to zagnieżdżony ciąg szablonu. 79 bajtów w ES7:
źródło
MATL ,
1514 bajtówWypróbuj online!
źródło
05AB1E , 15 bajtów
Kod:
Wyjaśnienie:
Łączenie odbywa się w następujący sposób:
Z tych:
Wynikiem tego jest:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
ñ
tak to działa.Python 2,
7870686463 bajtyW rzeczywistości bazując na idei Destructible Watermelon czyni go jeszcze mniejszym (użycie
input
jest jeszcze lepsze) (wypełnienie łańcucha do tyłu oszczędza 4 bajty) (no()
atwhile
):Oto stare podejście 70-bajtowe (Oszczędność 8 bajtów poprzez użycie cudzysłowów zamiast
str
i upuszczanie nawiasów kwadratowych wokół generatora dzięki Dennisowi):źródło
`x`
zamiaststr(x)
. Ponadto nie potrzebujesz[]
wokół generatora.while(n)
.Python 2, 63 bajty
Przetestuj na Ideone .
źródło
JavaScript (ES6), 66
Rekurencyjne, wprowadzane
n
jako ciąg (nie liczba) i ograniczające rozmiar ciągu wyjściowego do 2 GB (czyli powyżej limitu ciągu większości silników javascript)Test
źródło
R,
666462 bajtówedytować:
x=nchar(n<-scan());paste0(str_pad(1:(n/x)*x,x,,0),collapse="")
pierwsza próba golfa ...
źródło
2sable , 13 bajtów
Kod:
Wykorzystuje kodowanie CP-1252 .
źródło
15AB1E
Brachylog ,
5345423728 bajtówWypróbuj online!
źródło
Bash,
3122 bajtówPrzetestuj na Ideone .
Dzięki @izabera za grę w golfa z 6 bajtów!
źródło
Ruby,
5248 +n
flaga = 49 bajtówźródło
chop
jeśli zakładasz, że dane wejściowe zostały przekazane bez końcowego znaku nowej linii? Nie jestem pewien, czy to zadziała. A może założyć, że zawsze istnieje, i pisaćl=~-size
?size
ten sposób nie działa dla mnie. No cóż, przypomniałem sobie sztuczkę, której użyłem we wcześniejszej odpowiedzi, która i tak jest krótszaPython
32,797469656867 bajtówDzięki Dennis!
wzrost liczby bajtów ze złej metody wyjściowej
źródło
len(x)
zamiastf
zapisywać bajty, a następnie przypisywać je do zmiennej?/
wykonuje argumenty dzielenia liczb całkowitych foe.integer.zsh, 28 bajtów
zsh + seq,
2120 bajtówTo jest prawie taka sama odpowiedź jak Dennis, ale w 20 bajtach, ponieważ zsh
źródło
Haskell, 51 bajtów
źródło
Perl, 40 bajtów
39 bajtów kodu + 1 dla
-n
.Stosowanie
źródło
k4, 27
W rzeczywistości nie grałem w golfa, po prostu proste wdrożenie specyfikacji.
źródło
JavaScript - 76
lub 71, jeśli dopuszcza się argumenty łańcuchowe:
Dzięki @ user81655!
Nie golfowany:
dużo miejsca do poprawy, ale jestem teraz zmęczony
źródło
n=>eval('c="";for(a=b=(""+n).length;a<=n;a+=b)c+=`${+`1e${b}`+a}`.slice(1)')
. Główne bity używająfor
pętli i1e${b}
sztuczki Neila .Uncaught SyntaxError: Invalid or unexpected token
. Nie debugowałem jeszcze, bo właśnie się obudziłem: DR,
149142138 bajtówPozostawienie
nchar
kodu daje programowi taką samą liczbę bajtów, jak zastąpienie gob
, ale losowe litery wędrujące po kodzie sprawiają, że jest on bardziej ... tajemniczyNiegolfowany:
Każdy
nchar(strtoi(something))
pozwala obliczyć liczbę cyfr w podanej liczbie.strsplit
Funkcji generuje listę wektorów zawierających splitten elementy. Właśnie dlatego musisz dotrzeć do1
elementu st listy, a następnie doi
elementu th pismastrsplit[[1]][i]
źródło
SQF - 164
Używając formatu pliku jako funkcji:
Zadzwoń jako
INTEGER call NAME_OF_COMPILED_FUNCTION
źródło
PowerShell, 77 bajtów
Używa interpolacji ciągów w celu skrócenia rzutów ciągów. Części przed drugim średnikiem skracają nazwy ponownie używanych rzeczy. Następnie każda liczba całkowita do wejścia - i tylko te, które są wielokrotnościami długości wejścia - są dopełniane tak, aby były tak długie jak łańcuch wejściowy i ostatecznie były łączone w jedną.
źródło
Właściwie 30 bajtów
Wypróbuj online!
Nie jestem zadowolony z długości tego kodu, ale nie jestem pewien, czy można go znacznie skrócić (jeśli w ogóle).
Wyjaśnienie:
źródło
CJam, 19 bajtów
Wypróbuj online . Nikt jeszcze nie pisał w CJam, więc jest to skrypt, którego użyłem dla przypadków testowych.
Wyjaśnienie
źródło
PHP,
8378 bajtówWskazówki są więcej niż mile widziane. Zarządzaj golfem sam o jeden bajt, zmieniając go z pętli for na pętlę while.
Ten kod zakłada, że jest on wykonywany z wiersza poleceń i że $ argv [1] to int.
Dzięki:
@AlexGittemeier Jego sugestia (patrz komentarze) grała w golfa o 5 bajtów do 78 bajtów.
źródło
echo sprintf(...)
->printf(...)
Perl 6,
695946 bajtówźródło
fmt
na liście zamiastmap
,sprintf
i[~]
. 42 bajty