Die van der Corput-Sequenz ist eines der einfachsten Beispiele für Sequenzen mit geringer Diskrepanz . Sein n
-ter Ausdruck ist gerecht 0.(n written in base 10 and mirrored)
, daher lauten seine ersten Ausdrücke:
0.1
, 0.2
, 0.3
, 0.4
, 0.5
, 0.6
, 0.7
, 0.8
, 0.9
,
0.01
, 0.11
, 0.21
, 0.31
, 0.41
, 0.51
, 0.61
, 0.71
, 0.81
, 0.91
,
0.02
, 0.12
, 0.22
, 0.32
, 0.42
, 0.52
, 0.62
, 0.72
, 0.82
, 0.92
, ...
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion in einer beliebigen Programmiersprache, die eine positive ganze Zahl n
kleiner als 10^6
eingibt und die ersten n
Terme der van der Corput-Sequenz zurückgibt oder ausgibt. Das Ausgabeformat kann eine Liste von Gleitkommazahlen, eine Liste von Zeichenfolgen des Formulars 0.digits
oder eine eindeutige Zeichenfolge sein, bei der die Begriffe durch Kommas und / oder Leerzeichen und Zeilenumbrüche getrennt sind.
Standardlücken sind verboten. Der kürzeste Quellcode gewinnt.
Oracle SQL 11.2,
646258 BytesAlte Version
Durch Verketten von '' mit einer Zahl wird eine Zeichenfolge erstellt. Es ist 2 Bytes kürzer als TRIM (), was kürzer ist als TO_CHAR ().
Da das Verknüpfen einer Zeichenfolge mit einer NUMMER zu einer Zeichenfolge führt, kann diese Zeichenfolge zum Verwalten der '0' verwendet werden. Teil des Ergebnisses.
quelle
CJam,
1411 BytesDanke an Sp3000 für das Speichern von 3 Bytes.
Teste es hier.
Erläuterung
quelle
Perl 6,
242220 BytesVielen Dank, Aleks-Daniel Jakimenko-A. für noch zwei Bytes
alte Version
EDIT: Danke raiph für zusätzliche 2 Bytes
Verwendung
quelle
{("0."~.flip for ^$_)}
speichert 2 BytesMathematica, 40 Bytes
Testfall
quelle
Pyth, 8 Bytes
Probieren Sie es online aus.
Dies ist wirklich nur eine Kombination aus dieser und dieser Antwort. Deshalb mache ich daraus ein Community-Wiki.
quelle
Pyth, 11 Bytes
Probieren Sie es hier aus!
Erläuterung
quelle
Pyth - 10 Bytes
Probieren Sie es hier online aus .
quelle
VSQ...
JavaScript (ES6), 58
Eine anonyme Funktion, die eine Zeichenfolge mit durch Kommas getrennten Werten zurückgibt
PRÜFUNG
quelle
MATL , 10 Bytes
Probieren Sie es online!
quelle
Haskell,
36, 27 BytesZwei Bytes von nimi und weitere 7 von Lynn.
quelle
f n=reverse.show<$>[1.0..n]
Brachylog , 23 Bytes
Dies nimmt eine Zahl als Eingabe und gibt das Ergebnis an STDOUT aus, getrennt durch Leerzeichen.
Ziemliech direkt. Leider müssen wir die Zahl mit einer leeren Zeichenfolge verketten, um diese Zahl in eine Zeichenfolge (
:""rc
) zu konvertieren , da es noch kein eingebautes Konvertierungsprädikat gibt.Die Konvertierung in einen String ist notwendig, denn wenn wir die Ziffern der Zahl umkehren, gehen die führenden Nullen (zB
10
werden01
) verloren.quelle
PowerShell, 52 Byte
Ein bisschen länger als ich es gerne hätte, benutzt aber ein paar nette Tricks.
Die
while
Schleife ist offensichtlich, aber die Bedingung ist ein wenig knifflig - wir haben$a
(die beginnt als$null
wenn zuerst verwiesen wird) und subtrahieren dann unsere Eingabenummer$args[0]
. In PowerShell wird es bei mathematischen Operationen$null
als Null behandelt, sodass dies beispielsweise bei der Eingabe20
zur Folge hat-20
. Da jede Zahl ungleich Null ist$true
, bleibt die Schleifenbedingung$true
bis zu$a
unserer eingegebenen Zahl bestehen (an diesem Punkt ist die Subtraktion gleich0
oder$false
). Der Trick kommt vom Nachinkrement++
, das erst ausgeführt wird, nachdem die Subtraktion berechnet wurde. Die Eingabe von1
wird also korrekt ausgegeben0.1
und die Schleife bei der nächsten Iteration gestoppt.Jedes Mal in der Schleife erstellen wir einfach ein String-Literal, das in der Pipeline verbleibt und entsprechend ausgegeben wird. Wir konstruieren dies aus der
"0."
Verkettung mit dem Ergebnis des unären-join
Operators, der auf das Zeichen-Array reagiert hat, das durch Rücknahme des Strings"$a"
(durch Indizieren über den Bereich"$a".length..0
) erstellt wurde.Testläufe
quelle
Bash, 36 Bytes
Nimmt eine Zahl als Befehlszeilenargument und gibt jeden Begriff in einer separaten Zeile aus. Beispielsweise:
quelle
seq -f%g.0 $1|rev
.seq
dass formatierte Ausgaben möglich sind.Japt, 12 Bytes
Online testen!
Wie es funktioniert
quelle
Bienenwachs ,
5753 BytesAls ich an dem Problem der Binärziffernausgabe für Rosettacode arbeitete, bemerkte ich, dass ich für die Van-der-Corput-Sequenz denselben Algorithmus für die Kurzdivision verwenden konnte, indem ich nur Division und Modulo durch 10 anstelle von 2 verwendete. Die Ausgabe ist in beiden Fällen umgekehrt.
4 Bytes weniger, indem der Code gespiegelt wird:
Sechseckiger Prettyprint zur leichteren Orientierung:
Erläuterung eines Zyklus durch das Programm unter Verwendung des Originalcodes:
Beispiel:
quelle
R, 59 Bytes
Erläuterung
example(strsplit)
schafft die FunktionstrReverse
(dann sollte es selbstverständlich sein)Mit
IRanges::reverse
könnte dies auf 47 Bytes golfen werdenquelle
Python 3, 47 Bytes
eine kürzere Lösung mit Python 2
Testfall
quelle
f=
ist nicht erforderlich, also 47 Bytes lang.n-1
Terme aus.lambda n:['0.'+`i+1`[::-1]for i in range(n)]
ist kürzer, wenn Sie Python 2 verwenden. Außerdem sollten Sie nicht "Python 3.5" sagen, es sei denn, es erfordert 3.5, was nicht der Fall ist. Diese Version benötigt Python 2.𝔼𝕊𝕄𝕚𝕟 12 Zeichen / 15 Byte
Try it here (Firefox only).
Es ist in Ordnung.
Erläuterung
⩤⁽1ï⒨
Erstellt einen Bereich[1,ï]
für die Zuordnung,ß)
konvertiert Mapitem (Zahl) in Zeichenfolge,Ė⍞.0
setzt sich.0
bis zum Ende zusammen undᴙ
kehrt die gesamte Zeichenfolge um.quelle
Python 2, 54 Bytes
Erläuterung:
Iteriere durch den Satz
[1,input)
und hänge das Umgekehrtei
an.
.Immer noch mehr golfen.
quelle
`i`
anstelle vonstr(i)
. Außerdem denke ich, dass Sie die führende Null drucken müssen.PHP,
4541 BytesÜbernimmt das Eingabeargument von CLI. Laufen Sie wie folgt:
quelle
Retina, 39 Bytes
Nimmt unäre Eingaben auf.
Probieren Sie es hier online aus.
quelle
Gema, 45 Zeichen
Probelauf:
quelle
Julia ,
50383331 BytesIch habe ein anderes Ausgabeformat gewählt, um den Code um 12 Byte zu verkürzen. Die Funktion gibt jetzt ein Array von Strings zurück. Verkürzt um 5 weitere Bytes. Vielen Dank an Alex A. , der mich an die Interpolation von Strings erinnert hat und eine anonyme Funktion verwendet hat (2 weitere Bytes wurden entfernt).
oder alternativ
Prüfung
quelle
n->["0."reverse("$i")for i=1:n]
map(n->["0."reverse("$i")for i=1:n],3)
(für n = 3) nicht erforderlich, um eine Ausgabe zu erzeugen? Das würde es (zumindest) so lange machen wie meine Lösung.Python 2, 40 Bytes
Beispiel:
Algebraisches Lösen:
quelle
jq 1,5,
4035 Zeichen(34 Zeichen Code + 1 Zeichen Befehlszeilenoption.)
Probelauf:
Online-Test (Die Weitergabe
-r
über eine URL wird nicht unterstützt. Prüfen Sie die Raw-Ausgabe selbst.)Das gleiche mit Links zur Dokumentation:
Als lesbarere Alternative könnte das oben Genannte auch so geschrieben werden ( online ):
quelle
"\(.+1).0"/""
funktioniert?\(…)
und eine Division/
, die im Falle von Strings aufgeteilt wird.BBC BASIC,
898887 BytesVerwendete Abkürzungen, um die Dinge so weit wie möglich zu verkürzen. Kompatibel mit Brandy Basic und BASIC 2 auf der Originalmaschine.
Bei modernen BBC-BASICs können Sie auch die Zeilennummern weglassen, um zwei weitere Bytes zu sparen.
quelle
Dyalog APL , 12 Bytes
Probieren Sie es online!
Straight-Forward: Die Funktion
{
Zeichenfolge'0.'
vor,
dem reversed⌽
strang Darstellung⍕
des Arguments⍵
an die Funktion}
für jede¨
der Zahlen 1 bis n⍳
.quelle
JS, 66
Ausgabe ist das Array mit dem Namen "o"
quelle
Groovy, 36 Zeichen
Probelauf:
quelle