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.

Bob
sumber

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.

Adnan
sumber
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.

Jeto
sumber
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.
}/
Martin Ender
sumber
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)
Tombol cepat
sumber
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} *)
njpipeorgan
sumber
5

Pyth, 8 byte

m_`cd1SQ

Cobalah online.

Ini benar-benar hanya kombinasi dari ini dan jawaban ini . Karenanya saya menjadikannya wiki komunitas.

Pietu1998
sumber
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
Denker
sumber
4

Pyth - 10 byte

_M+R".0"SQ

Cobalah online di sini .

Maltysen
sumber
Satu byte lebih kecil jika Anda melakukannyaVSQ...
Jakube
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>

edc65
sumber
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
Luis Mendo
sumber
4

Haskell, 36 , 27 byte

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

Dua byte disimpan oleh nimi dan 7 tambahan oleh Lynn.

Michael Klein
sumber
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.

Fatalisasi
sumber
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
AdmBorkBork
sumber
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
osifrque melengking
sumber
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
Produksi ETH
sumber
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!
ML
sumber
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())))
mnel
sumber
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']
Erwan
sumber
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.

Mama Fun Roll
sumber
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.

intboolstring
sumber
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
aross
sumber
1

Retina, 39 byte

1
1$`0. 
(1)+
$#1
+`(\d)0\.(\d*)
0.$2$1

Mengambil input di unary.

Cobalah online di sini.

randomra
sumber
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 
manatwork
sumber
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"
ML
sumber
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]
seequ
sumber
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("")
manatwork
sumber
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.

Darzzr
sumber
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}¨ .

Adám
sumber
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"

xem
sumber
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]
manatwork
sumber