Nehmen Sie eine positive ganze Zahl als Eingabe. Beginnen Sie mit und erhöhen Sie wiederholt um die größte ganzzahlige Potenz von zehn so dass und .
Wiederholen Sie diesen Vorgang, bis und geben Sie eine Liste aller Zwischenwerte von , einschließlich der ersten und der letzten .
Während dieses Prozesses wird das Wachstum zunächst durch die erstere Ungleichung und erst danach durch die letztere begrenzt; Das Wachstum wird in Form einer anfänglichen "Expansions" -Periode erfolgen, in der durch immer größere Potenzen erhöht wird, gefolgt von einer "Kontrakt" -Periode, in der durch immer kleinere Potenzen erhöht wird, um zu "zoomen". auf die richtige Nummer.
Testfälle
1 => [1]
10 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
321 => [1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 20, 30, 40, 50, 60, 70, 80, 90,
100, 200, 300, 310, 320, 321]
1002 => [1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 20, 30, 40, 50, 60, 70, 80, 90,
100, 200, 300, 400, 500, 600, 700, 800, 900,
1000, 1001, 1002]
Das ist Code-Golf , also gewinnt die kürzeste Antwort (in Bytes).
Antworten:
Haskell ,
72686463 BytesProbieren Sie es online!
Vielen Dank an Sriotchilism O'Zaic für -4 Bytes!
Verwendung
Erläuterung
quelle
(^)
hat eine höhere Priorität, als dass(+)
Sie keine Klammern um den(^)
Ausdruck benötigen . Gleiches gilt für(!)
und(:)
pred.length.show.min c$t-c
kann auf gekürzt werdenlength(show.min c$t-c)-1
. Anonyme Funktionen sind akzeptabel, daher können Sie die Führung löschen,f=
wie in unserem Handbuch zu den Golfregeln in Haskell erläutert .c!t=c: if t>c then (c+10^(length(show.min c$t-c)-1))!t else []
. Auf diese Weise können Sie diesen Tipp anwenden , um ein paar weitere Bytes zu sparen: Probieren Sie es online aus!JavaScript (ES6), 50 Byte
Probieren Sie es online!
Wie?
Theorie
Die folgenden Schritte werden wiederholt, bisn = 0 :
Implementierung
Der Wert vonx wird direkt als Zeichenfolge mit dem folgenden Ausdruck berechnet:
Hinweis : Ohne Berücksichtigung der führenden10 (zB n = 10 00 ) , aber die Anzahl der erfassten Nullen für Werte nicht wie ändern n = 10 23 00 (wegen der zusätzlichen nicht-Null mittleren Ziffern,
'10'
wirkt sich nur auf genaue Potenzen von'10'
eigentlich ist in solchen Fällen überhaupt nicht übereinstimmen).quelle
k
etwas völlig anderes als in der Beschreibung der Herausforderung verwenden (in der Tat ist Ihrn
OP eine Mischung ausn
undk
und Ihrx
ist ihri
.)Python 2 , 61 Bytes
Probieren Sie es online!
quelle
Perl 6 ,
4841 BytesProbieren Sie es online!
Erläuterung:
quelle
APL (Dyalog Unicode) , 30 Byte SBCS
Anonyme implizite Präfixfunktion. Druckt Zahlen in separaten Zeilen auf Standardausgabe.
Probieren Sie es online!
{
}∘1
⍺=⍵
⍺
⋄
sonst:⎕←⍵
⍺-
⍵,
10⍟
⌊
Boden diejenigen⌊/
Minimum davon10*
zehn, die dazu erzogen wurden⍵+
⍺∇
quelle
05AB1E , 15 Bytes
Port von @PaulMutsers (erster) Haskell-Antwort , also stelle sicher, dass du ihn positiv bewertest !!
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Gibt die durch Zeilenumbrüche getrennten Zahlen aus.
Wenn es eine Liste sein muss, müsste ich 3 Bytes hinzufügen:
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Jelly , 19 Bytes
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 51 Byte
Probieren Sie es online!
quelle
Batch, 131 Bytes
Übernimmt die Eingabe als Befehlszeilenparameter und gibt die Liste der Zahlen an STDOUT aus. Erläuterung:
Beginnen Sie mit
n=1
undi=1
repräsentieren Sie die Potenz von 10.Mit
i
10 multiplizieren, wennn
die nächste Zehnerpotenz erreicht ist.Den aktuellen Wert von ausgeben
n
.Das Wiederholen von while
i
kann hinzugefügt werden,n
ohne dass die Eingabe überschritten wird.Stellen Sie den vorherigen Wert von wieder her
n
und dividieren Siei
durch 10.Wenn
i
nicht dann Null versuchen Siei
zun
wieder.quelle
R ,
6765 Bytes-2 Bytes dank Giuseppe
Ziemlich einfach. Es werden Potenzen von 10 benötigt, die über die in umgekehrter Reihenfolge erforderliche Menge hinausgehen
i
.(Ich würde es vorziehen,
i=10^rev(0:log10(k))
anstatt zu verwenden,i=10^(k:0)
da letzteres rechnerisch ineffizient ist, aber Golf ist Golf!).Wendet dann in einer while-Schleife die Bedingungen auf
i
die erste (dh die größte) an und nimmt sie an. wird aktualisiertn
und an die Ausgabe angehängtProbieren Sie es online!
quelle
T
stattn
; es sollte 2 sein, aber ich denke nicht, dass diesTRUE
eine akzeptable Ausgabe für istk=1
, also setzen wiro=+T
. Versuch es!o=1
das zweite Byte setzen und abrufen.Gelee , 12 Bytes
Probieren Sie es online!
quelle
Pip , 27 Bytes
Probieren Sie es online!
Im Pseudocode:
Ich bin ziemlich zufrieden mit den Golf-Tricks, die ich anwenden konnte, um diesen Algorithmus zu verkürzen. Durch Initialisieren, Aktualisieren und Drucken von Inhalten im Schleifenkopf konnte ich geschweifte Klammern für den Schleifenkörper vermeiden. Es gibt jedoch wahrscheinlich einen golferischeren Algorithmus.
quelle
Japt , 18 Bytes
Versuch es
quelle
C # (Visual C # Interactive Compiler) ,
123 bis122 ByteProbieren Sie es online!
quelle
Prolog (SWI) , 142 Bytes
Probieren Sie es online!
Erklärung kommt morgen oder so
quelle