Keluarkan urutan van der Corput


27

Urutan van der Corput adalah salah satu contoh paling sederhana dari urutan perbedaan rendah . nIstilah ke- nya adil 0.(n written in base 10 and mirrored), jadi syarat pertamanya adalah:

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, ...

Tantangan

Tulis program atau fungsi dalam bahasa pemrograman apa pun yang mengambil input bilangan bulat positif nkurang dari 10^6dan mengembalikan atau mencetak nistilah pertama dari urutan van der Corput. Format output dapat berupa daftar angka floating point, daftar string formulir 0.digits, atau string unik di mana istilah dipisahkan oleh koma dan / atau spasi putih, baris baru.

Celah standar dilarang. Kode sumber terpendek menang.

Jawaban:


16

05AB1E , 6 byte

Kode:

>GNÞR,

Cobalah online!

Penjelasan:

>       # Increment, pushes input + 1
 G      # For N in range(1, input + 1):
  N     # Push N
   Þ    # Convert to double, which appends `.0` at the end of an integer
    R   # Reverse top of the stack
     ,  # Pop and print with a newline

Menggunakan pengodean CP-1252.


Maksud Anda, windows-1252?
Ismael Miguel

@IsmaelMiguel Itu sama
Adnan

Saya tahu, tetapi biasanya tidak dikenali dengan nama CP-1252
Ismael Miguel

Apakah Anda harus memodifikasi bahasa Anda untuk tujuan tantangan ini?
Andrew Savinykh

@AndrewSavinykh Tidak, itu dianggap curang dan tidak diizinkan di situs ini. Ini bekerja dengan versi 7.3 , yang dirilis sebelum tantangan ini diposting.
Adnan

8

Oracle SQL 11.2, 64 62 58 byte

SELECT REVERSE(LEVEL||'.0')FROM DUAL CONNECT BY LEVEL<=:1;

Versi lama

SELECT '0.'||REVERSE(TRIM(LEVEL))FROM DUAL CONNECT BY LEVEL<=:1;

Menggabungkan '' ke nomor melemparkannya ke string. Ini lebih pendek 2 byte daripada menggunakan TRIM (), yang lebih pendek dari TO_CHAR ().

Karena menggabungkan string ke NUMBER menghasilkan string, dimungkinkan untuk menggunakan string itu untuk mengelola '0.' bagian dari hasilnya.


7

CJam, 14 11 byte

Terima kasih kepada Sp3000 untuk menghemat 3 byte.

ri{)d`W%S}/

Uji di sini.

Penjelasan

ri     e# Read input and convert to integer N.
{      e# For each i from 0 to N-1...
  )    e#   Increment.
  d    e#   Convert to double.
  `    e#   Get string representation (which ends in ".0").
  W%   e#   Reverse.
  S    e#   Push a space.
}/

7

Perl 6, 24 22 20 byte

{"0."X~(^$_)».flip}

Terima kasih Aleks-Daniel Jakimenko-A. untuk dua byte lagi

versi lama

{("0."~.flip for ^$_)}
# Alternate below, same byte count
{map ^$_: "0."~*.flip}

SUNTING: Terima kasih raiph untuk 2 byte tambahan

pemakaian

> my &f = {"0."X~(^$_)».flip}
-> ;; $_? is raw { #`(Block|333498568) ... }
> f(25)
(0.0 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)

1
{("0."~.flip for ^$_)}menghemat 2 byte
raiph

6

Mathematica, 40 byte

"0."<>StringReverse@ToString@#&~Array~#&

Kasus cobaan

%[20]
(* {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} *)


4

Pyth, 11 byte

m+"0."_`dSQ

Coba di sini!

Penjelasan

m + "0." _ `dSQ # Q = input

m SQ # Petakan rentang (1, Q) ke ...
 + # ... gabungan dari:
  "0." _ `D #" 0. " dan elemen terbalik


4

JavaScript (ES6), 58

Fungsi anonim mengembalikan string dengan nilai yang dipisahkan koma

n=>[...[...Array(n)].map(_=>n--+'.0')+''].reverse().join``

UJI

f=n=>[...[...Array(n)].map(_=>n--+'.0')+''].reverse().join``

function test() { R.textContent = f(+I.value) }

test()
N:<input id=I type=number value=20 oninput="test()"><br><pre id=R></pre>


4

MATL , 10 byte

:"'0.'@VPh

Cobalah online!

:          % implicit input. Generate vector [1,2,...,input]
"          % for each
  '0.'     %   push string '0.'
  @        %   push loop variable (that is, 1,2,3,... in each iteration)
  V        %   convert to string
  P        %   reverse
  h        %   concatenate horizontally
           % implicit end of loop
           % implicit display of all stack contents

4

Haskell, 36 , 27 byte

f n=reverse.show<$>[1.0..n]

Dua byte disimpan oleh nimi dan 7 tambahan oleh Lynn.


f n=reverse.show<$>[1.0..n]
Lynn

3

Brachylog , 23 byte

:0re:""rcr:"0."rcw,@Sw\

Ini mengambil angka sebagai input dan output hasilnya ke STDOUT, dipisahkan oleh spasi.

Cukup mudah. Sayangnya kami harus menggabungkan angka dengan string kosong untuk mengonversi angka ini menjadi string ( :""rc), karena belum ada predikat konversi bawaan.

Konversi ke string diperlukan, karena jika kita membalikkan angka angka, maka angka nol di depannya (mis 10 menjadi 01) akan hilang.


3

PowerShell, 52 byte

while($a++-$args[0]){"0."+-join"$a"["$a".Length..0]}

Sedikit lebih lama dari yang saya inginkan, tetapi menggunakan beberapa trik yang rapi.

The whileloop jelas, tetapi bersyarat adalah sedikit rumit - kami memiliki $a(yang dimulai sebagai $nullketika pertama kali direferensikan) dan kemudian mengurangi jumlah masukan kami $args[0]. Di PowerShell, operasi matematika $nullmemperlakukannya sebagai nol, jadi untuk input 20misalnya ini akan menghasilkan -20. Karena angka bukan nol adalah $true, kondisi loop akan $truebenar sampai $asama dengan nomor input kami (pada titik pengurangan akan sama dengan 0atau $false). Triknya berasal dari kenaikan-pasca ++, yang tidak mengeksekusi sampai setelah pengurangan dihitung, sehingga penanganan input 1akan keluar dengan benar 0.1dan kemudian menghentikan loop pada iterasi berikutnya.

Setiap kali dalam loop, kami hanya membuat string literal yang dibiarkan pada pipeline dan output sesuai. Kami membangun ini dari "0."digabungkan dengan hasil dari -joinoperator unary yang telah bertindak pada char-array yang dibuat dari pengambilan string"$a" ke belakang (dengan mengindeks melalui rentang "$a".length..0).

Tes Berjalan

PS C:\Tools\Scripts\golfing> .\van-der-corput-sequence.ps1 1
0.1

PS C:\Tools\Scripts\golfing> .\van-der-corput-sequence.ps1 20
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

3

Bash, 36 byte

for i in `seq $1`;do rev<<<$i.0;done

Mengambil nomor sebagai argumen baris perintah, dan menampilkan setiap istilah pada baris yang terpisah. Sebagai contoh:

$ ./vdc.sh 12
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0.01
0.11
0.21

2
Jika tidak murni Bash pula: seq -f%g.0 $1|rev.
manatwork

@manatwork Keren. Saya tidak tahu seqbisa melakukan output yang diformat.
ossifrage pelit

3

Japt, 12 byte

Uò1 ®+".0" w

Uji secara online!

Bagaimana itu bekerja

           // Implicit: U = input integer
Uò1 ®      // Create the inclusive range [1..U], and map each item Z to:
+".0" w    //  Z + ".0", reversed.
           // Implicit: output last expression

3

lilin lebah ,57 53 byte

Bekerja pada masalah keluaran digit biner untuk rosettacode Saya perhatikan bahwa saya dapat menggunakan algoritma pembagian pendek yang sama untuk urutan van der Corput, hanya menggunakan pembagian dan modulo dengan 10 alih-alih 2. Output dibalik dalam kedua kasus.

Diturunkan oleh 4 byte, dengan mencerminkan kode:

`.0` XfE@~@L#;
 { %X<#dP@T~P9_
   q<#   N
    >:'bg?b

Cetak awal heksagonal, untuk orientasi yang lebih mudah:

` . 0 `   X f E @ ~ @ L # ;
 {   % X < # d P @ T ~ P 9 _
    q < #       N
     > : ' b g ? b

Penjelasan satu siklus melalui program, menggunakan kode asli:

;#L@~@EfX `0.`
_9P~T@Pb#>X% {
      N   #>p
      d?gd':<


                                                  lstack   gstack
                                _9P              [0,0,10]•         create bee, set top to 10
                                   ~T            [0,10,n]•         flip top and 2nd, enter n
                                     @P          [n,10,1]•         flip top and 3rd, increment top
                                       b                           redirect to upper left
                     [n,10,1]•        E          [n,10,1]•      (2)clone bee in horizontal direction
flip lstack 1st/3rd  [1,10,n]•       @ f         [n,10,1]•  [1]•   push lstack top on gstack       
flip lstack 1st/2nd  [1,n,10]•       ~   X                         clone bee in all directions
flip 1st/3rd         [10,n,1]•      @     `0.`                     print "0." to STDOUT
skip if 1st>2nd      [10,n,1]•     L      >                     (1)redirect 
if 1st<2nd, del. bee              #        X                       clone bee in all directions
(if 1st>2nd, terminate program)  ;          % {  [n,10,1]•         1st=1st%2nd, output lstack 1st to STDOUT
                                            >p                     redirect
                                             <                     redirect
                                            :    [n,10,0]•         1st=1st/2nd
                                           '                       skip next instr. if 1st=0
                                          d                        redirect to upper right, loop back to (1)
                                         g       [n,10,1]   [1]•   push gstack top on lstack 1st
                                       d?                   []•    pop gstack, redirect to upper right
                                       N                           print newline to STDOUT
                                       P         [n,10,2]          increment lstack 1st
                                       E                           looped back to (2)

Contoh:

julia> beeswax("vandercorput.bswx",0,0.0,Int(20000))
i300
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.492
0.592
0.692
0.792
0.892
0.992
0.003

Program finished!

2

R, 59 Bytes

example(strsplit);cat(strReverse(sprintf('%s.0',1:scan())))

penjelasan

example(strsplit)menciptakan fungsi strReverse(maka itu harus jelas)

Menggunakan IRanges::reverse, ini bisa di-golf hingga 47 byte

cat(IRanges::reverse(sprintf('%s.0',1:scan())))

2

Python 3, 47 byte

lambda n:['0.'+str(i+1)[::-1]for i in range(n)]

solusi yang lebih pendek dengan Python 2

lambda n:['0.'+`i+1`[::-1]for i in range(n)]

Kasus cobaan

>>> f(25)
['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']

Solusi Python saya sama, tapi saya pikir itu f=tidak diperlukan, jadi panjangnya 47 byte.
Bob

@ Bob ok saya menghapusnya
Erwan

Ini menghasilkan n-1istilah pertama .
seequ

@Lihatq Anda benar saya mengubah solusi, itu tidak mengubah jumlah byte
Erwan

lambda n:['0.'+`i+1`[::-1]for i in range(n)]lebih pendek jika Anda menggunakan Python 2. Selain itu, Anda tidak boleh mengatakan "Python 3.5" kecuali itu membutuhkan 3.5, yang tidak. Versi ini membutuhkan Python 2.
mbomb007

1

𝔼𝕊𝕄𝕚𝕟, 12 karakter / 15 byte

⩤⁽1ï⒨ß)Ė⍞.0ᴙ

Try it here (Firefox only).

Tidak masalah.

Penjelasan

⩤⁽1ï⒨membuat rentang [1,ï]untuk dipetakan, ß)mengubah mapitem (angka) menjadi string, Ė⍞.0concat .0ke akhir, dan membalikkan seluruh string.


1

Python 2, 54 Bytes

def f(i):
    for i in range(1,i):print("."+str(i)[::-1])

Penjelasan:

Ulangi set [1,input)dan tambahkan yang dibalik ike ..

Masih menjadi golf lagi.


Gunakan `i`sebagai ganti str(i). Juga, saya pikir Anda perlu mencetak nol di depan.
mbomb007

1

PHP, 45 41 byte

for(;$i++<$argv[1];)echo strrev(",$i.0");

Mengambil argumen input dari CLI. Jalankan seperti ini:

php -r 'for(;$i++<$argv[1];)echo strrev(",$i.0");' 100
  • Disimpan 3 byte dengan menyatukan string sebelum membalikkan


1

Gema, 45 karakter

*=@set{i;0}@repeat{*;@incr{i}0.@reverse{$i} }

Contoh dijalankan:

bash-4.3$ gema '*=@set{i;0}@repeat{*;@incr{i}0.@reverse{$i} }' <<< 12
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.01 0.11 0.21 

1

Julia ,50 38 33 31 byte

Saya pergi untuk format output yang berbeda untuk mempersingkat kode dengan 12 byte. Fungsi mengembalikan array string sekarang. Dipersingkat 5 byte lebih. Terima kasih kepada Alex A. untuk mengingatkan saya pada interpolasi string dan menggunakan fungsi anonim (menghilangkan 2 byte lebih).

n->["0."reverse("$i")for i=1:n]

atau sebagai alternatif

n->[reverse("$(i/1)")for i=1:n]

Uji

julia> @time f(10000)
  0.002260 seconds (60.01 k allocations: 2.823 MB)
10000-element Array{ASCIIString,1}:
 "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.8799"
 "0.9799"
 "0.0899"
 "0.1899"
 "0.2899"
 "0.3899"
 "0.4899"
 "0.5899"
 "0.6899"
 "0.7899"
 "0.8899"
 "0.9899"
 "0.0999"
 "0.1999"
 "0.2999"
 "0.3999"
 "0.4999"
 "0.5999"
 "0.6999"
 "0.7999"
 "0.8999"
 "0.9999"
 "0.00001"

1
31 byte:n->["0."reverse("$i")for i=1:n]
Alex A.

1
Omong-omong, Anda dapat meminta agar profil Anda digabungkan dengan yang lama di sini .
Alex A.

Sangat keren, tidak tahu itu. Terima kasih!
ML

@AlexA. fungsi anonim itu sendiri tidak menghasilkan apa-apa. Bukankah versi yang lebih panjang seperti map(n->["0."reverse("$i")for i=1:n],3)(untuk n = 3) diperlukan untuk menghasilkan output apa pun? Itu akan membuatnya (setidaknya) selama solusi saya.
ML

1
Untuk fungsi anonim, Anda cukup menambahkan ketentuan untuk memanggilnya, seseorang harus menetapkannya ke variabel. Menghemat dua byte pada fungsi yang disebutkan dan mematuhi aturan kami.
Alex A.

1

Python 2, 40 byte

lambda n:[`i+1.`[::-1]for i in range(n)]

Contoh:

>>> f=lambda n:[`i+1.`[::-1]for i in range(n)]
>>> f(30)
['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', '0.03']

Pemecahan aljabar:

corput(x) = reversed(str(float(x+1)))
          = reversed(str(x+1.))
          = str(x+1.)[::-1]
          = `x+1.`[::-1]

1

jq 1.5, 40 35 karakter

(34 karakter kode + 1 opsi opsi perintah karakter.)

range(.)|"\(.+1).0"/""|reverse|add

Contoh dijalankan:

bash-4.3$ jq -r 'range(.)|"\(.+1).0"/""|reverse|add' <<< 12
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0.01
0.11
0.21

Tes online (Melewati -rURL tidak didukung - periksa sendiri Output Raw.)

Sama dengan tautan ke dokumentasi:

range ( . ) | " \ ( . + 1 ) .0" / "" | membalikkan | menambahkan

Sebagai alternatif yang lebih mudah dibaca, hal di atas juga dapat ditulis seperti ini ( online ):

range(.) | . + 1 | tostring | . + ".0" | split("") | reverse | join("")

jq sangat keren. Pikiran menjelaskan bagaimana cara "\(.+1).0"/""kerjanya?
seequ

Tidak ada yang istimewa, hanya a interpolasi string \(…) dan pembagian / , yang dalam hal string dipisahkan.
manatwork

1

BBC BASIC, 89 88 87 byte

0T=1:REP.P."0."FNR(STR$T):T=T+1:U.0
1DEFFNR(S$)IFS$="":=""EL.=FNR(MI.S$,2))+LE.S$,1)

Singkatan yang digunakan untuk mempersingkat hal-hal sebanyak mungkin. Kompatibel dengan Brandy Basic dan BASIC 2 pada mesin asli.

Untuk BASIC BBC modern Anda juga dapat meninggalkan nomor baris untuk menghemat dua byte lagi.


1

Dyalog APL , 12 byte

{'0.',⌽⍕⍵}¨⍳

Cobalah online!

Straight-forward: {string fungsi '0.'sebelum representasi string- ,terbalik argumen ke fungsi untuk masing-masing angka 1 sampai n}¨ .


0

JS, 66

T=101; // set T to the number of iterations wanted
for(o=[],i=0;i<T;i++)o[i]="0."+(""+i).split("").reverse().join("") // 66b

Output adalah array yang disebut "o"


0

Groovy, 36 karakter

{(1..it).collect{"$it.0".reverse()}}

Contoh dijalankan:

groovy:000> ({(1..it).collect{"$it.0".reverse()}})(12)
===> [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.01, 0.11, 0.21]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.