Sie möchten einen String erstellen, in dem das ( 1-indizierte ) Zeichen am Index n
steht n
. Wenn n
weniger als 10, dann ist dies einfach: "123456789"
. Wenn n
zum Beispiel 12 ist, wird es unmöglich, da Zahlen größer als 9 (in der Basis 10) mehr als ein Zeichen belegen. Wir können durch Kompromisse die Zeichenfolge in zwei Zeichen Teilteilung: "020406081012"
. Nun wird der Index des Endes jeder Teilkette n
ist n
.
Dies kann für jede d
einstellige Zahl verallgemeinert werden . Hier ist eine Erklärung für den Teil "0991021" der Zeichenfolge für eine dreistellige Zahl:
Index: ... * 97 98 99*100 101 102*103 ...
* * *
*---+---+---*---+---+---*---+
Character: ... * 0 | 9 | 9 * 1 | 0 | 2 * 1 | ...
*---+---+---*---+---+---*---+
Wenn Sie es noch nicht herausgefunden haben, müssen Sie ein Programm / eine Funktion schreiben, die eine Zeichenfolge oder eine Ganzzahl verwendet und die selbstreferenzierende Zeichenfolge wie oben angegeben ausgibt. Sie können auch ein Array aus einstelligen Zahlen, Zeichen oder Zeichenfolgen ausgeben.
Die angegebene Ganzzahl ist immer positiv und durch ihre Länge teilbar (z. B. 126 ist durch 3 teilbar; 4928 ist durch 4 teilbar). Ihr Programm sollte theoretisch für eine beliebig große Eingabe funktionieren, Sie können jedoch davon ausgehen, dass es kleiner als die maximale Ganzzahl und / oder Zeichenfolgenlänge Ihrer Sprache ist.
Einige Beobachtungen, wenn Sie sie immer noch nicht erhalten: Die Länge der Ausgabe ist immer die Eingabe selbst, und die Zahlen, die in der Ausgabe erscheinen, sind durch die Anzahl der Stellen in der Eingabe teilbar.
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Testfälle
1 => 1
9 => 123456789
10 => 0204060810
105 => 003006009012015018021024027030033036039042045048051054057060063066069072075078081084087090093096099102105
1004 => 00040008001200160020002400280032003600400044004800520056006000640068007200760080008400880092009601000104010801120116012001240128013201360140014401480152015601600164016801720176018001840188019201960200020402080212021602200224022802320236024002440248025202560260026402680272027602800284028802920296030003040308031203160320032403280332033603400344034803520356036003640368037203760380038403880392039604000404040804120416042004240428043204360440044404480452045604600464046804720476048004840488049204960500050405080512051605200524052805320536054005440548055205560560056405680572057605800584058805920596060006040608061206160620062406280632063606400644064806520656066006640668067206760680068406880692069607000704070807120716072007240728073207360740074407480752075607600764076807720776078007840788079207960800080408080812081608200824082808320836084008440848085208560860086408680872087608800884088808920896090009040908091209160920092409280932093609400944094809520956096009640968097209760980098409880992099610001004
C 64 Bytes
Nimmt eine einzelne Ganzzahl als Eingabe für stdin.
quelle
JavaScript (ES6), 83 Byte
Ja, das ist eine verschachtelte Vorlagenzeichenfolge. 79 Bytes in ES7:
quelle
MATL ,
15 bis14 BytesProbieren Sie es online!
quelle
05AB1E , 15 Bytes
Code:
Erläuterung:
Das Zusammenführen geschieht folgendermaßen:
Von diesen:
Daraus ergibt sich:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
ñ
funktioniert.Python 2,
7870686463 BytesBasierend auf der Idee von Destructible Watermelon wird es sogar noch kleiner (mit
input
ist sogar noch besser) (Füllen der Zeichenfolge spart 4 Bytes) (no()
atwhile
):Hier ist der alte 70-Byte-Ansatz (Speichern von 8 Byte durch Verwendung von Anführungszeichen anstelle von
str
und Ablegen der eckigen Klammern um den Generator dank Dennis):quelle
`x`
anstelle von verwendenstr(x)
. Auch das[]
rund um den Generator braucht man nicht .while(n)
.Python 2, 63 Bytes
Teste es auf Ideone .
quelle
JavaScript (ES6), 66
Rekursiv, Eingabe
n
als Zeichenfolge (keine Zahl) und Beschränkung der Größe der Ausgabezeichenfolge auf 2 GB (dh über der Zeichenfolgenbeschränkung der meisten JavaScript-Engines)Prüfung
quelle
R,
666462 Bytesbearbeiten:
x=nchar(n<-scan());paste0(str_pad(1:(n/x)*x,x,,0),collapse="")
erster Golfversuch ...
quelle
2sable , 13 Bytes
Code:
Verwendet die CP-1252- Codierung.
quelle
15AB1E
Brachylog ,
5345423728 BytesProbieren Sie es online!
quelle
Bash,
3122 BytesTeste es auf Ideone .
Vielen Dank an @izabera für das Golfen mit 6 Bytes!
quelle
Ruby,
5248 +n
Flag = 49 Bytesquelle
chop
wenn Sie davon ausgehen, dass die Eingabe ohne nachfolgende Zeilenumbrüche übergeben wird. Ich bin mir nicht sicher, ob das funktionieren würde. Oder wie wäre es anzunehmen, dass es immer einen gibt und zu schreibenl=~-size
?size
funktioniert bei mir nicht. Na ja, ich erinnere mich an einen Trick, den ich in einer früheren Antwort verwendet hatte und der sowieso kürzer warPython
32,797469656867 BytesDanke Dennis!
Erhöhung der Byteanzahl aufgrund einer fehlerhaften Ausgabemethode
quelle
len(x)
stattdessenf
Bytes speichern, indem es einer Variablen zugewiesen wird?/
Führt die Ganzzahldivision foe.integer-Argumente aus.zsh, 28 Bytes
zsh + seq,
2120 BytesDies ist so ziemlich die gleiche Antwort wie Dennis, aber in 20 Bytes, weil zsh
quelle
Haskell, 51 Bytes
quelle
Perl, 40 Bytes
39 Byte Code + 1 für
-n
.Verwendung
quelle
k4, 27
Überhaupt nicht wirklich golfen, nur eine unkomplizierte Umsetzung der Spezifikation.
quelle
Javascript - 76
oder 71, wenn Zeichenfolgenargumente zulässig sind:
Vielen Dank an @ user81655!
Ungolfed:
Viel Raum für Verbesserungen, aber ich bin gerade müde
quelle
n=>eval('c="";for(a=b=(""+n).length;a<=n;a+=b)c+=`${+`1e${b}`+a}`.slice(1)')
. Die Hauptbits verwenden einefor
Schleife und Neils1e${b}
Trick.Uncaught SyntaxError: Invalid or unexpected token
. Noch nicht ausgetestet , wie ich gerade bin wach: DR
149142138 BytesVerlassen
nchar
des Codes ergibt ein Programm mit der gleichen Anzahl von Bytes wie das Ersetzen durchb
, aber zufällige Buchstaben im Code machen es ... mysteriöserUngolfed:
Jeder
nchar(strtoi(something))
erlaubt die Berechnung der Anzahl der Ziffern in einer bestimmten Anzahl.Die
strsplit
Funktion gibt eine Liste von Vektoren aus, die die aufgeteilten Elemente enthalten. Deshalb müssen Sie zuerst das1
st-Element der Liste und dann dasi
th-Element des Vektors erreichen und schreibenstrsplit[[1]][i]
quelle
SQF - 164
Verwenden des Formats "Funktion als Datei":
Anrufen als
INTEGER call NAME_OF_COMPILED_FUNCTION
quelle
PowerShell, 77 Byte
Verwendet String-Interpolation, um String-Casts zu verkürzen. Die Teile vor dem zweiten Semikolon verkürzen die Namen wiederverwendeter Objekte. Dann wird jede ganze Zahl bis zur Eingabe - und nur die, die ein Vielfaches der Länge der Eingabe sind - mit der Länge der Eingabezeichenfolge aufgefüllt und schließlich zu einer zusammengefügt.
quelle
Eigentlich 30 Bytes
Probieren Sie es online!
Ich bin mit der Länge dieses Codes nicht zufrieden, aber ich bin nicht sicher, ob er (wenn überhaupt) viel kürzer gemacht werden kann.
Erläuterung:
quelle
CJam, 19 Bytes
Probieren Sie es online aus . Bisher hat noch niemand in CJam gepostet. Dies ist also das Skript, das ich für die Testfälle verwendet habe.
Erläuterung
quelle
PHP,
83-78BytesTrinkgelder sind mehr als willkommen. Verwalten Sie es selbst, indem Sie es von einer for-Schleife in eine while-Schleife ändern.
In diesem Code wird davon ausgegangen, dass dies über die Befehlszeile ausgeführt wird und dass $ argv [1] das int ist.
Dank an:
@AlexGittemeier Sein Vorschlag (siehe Kommentare) golfte dies um 5 Bytes auf 78 Bytes.
quelle
echo sprintf(...)
->printf(...)
Perl 6,
695946 Bytesquelle
fmt
in der Liste anstelle vonmap
,sprintf
und verwenden[~]
. 42 Bytes