เอาต์พุตลำดับ van der Corput


27

แวนเดอร์ลำดับ Corputเป็นหนึ่งในตัวอย่างที่ง่ายที่สุดของลำดับต่ำแตกต่าง ใช้nระยะ -th เป็นเพียง0.(n written in base 10 and mirrored)เพื่อให้เงื่อนไขแรกคือ:

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

ความท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นในภาษาการเขียนโปรแกรมใด ๆ ที่ใช้เป็นจำนวนเต็มบวกnน้อยกว่า10^6และส่งคืนหรือพิมพ์nคำแรกของลำดับ van der Corput รูปแบบเอาต์พุตสามารถเป็นรายการของหมายเลขจุดลอยตัวรายการของสตริงของแบบฟอร์ม0.digitsหรือสตริงที่ไม่ซ้ำกันซึ่งคำศัพท์จะถูกคั่นด้วยเครื่องหมายจุลภาคและ / หรือช่องว่างบรรทัดใหม่

ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม ซอร์สโค้ดที่สั้นที่สุดชนะ

คำตอบ:


16

05AB1E , 6 ไบต์

รหัส:

>GNÞR,

ลองออนไลน์!

คำอธิบาย:

>       # 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

ใช้การเข้ารหัส CP-1252


คุณหมายถึง windows-1252?
Ismael Miguel


ฉันรู้ แต่ปกติจะไม่เป็นที่รู้จักในชื่อ CP-1252
Ismael Miguel

คุณต้องแก้ไขภาษาของคุณเพื่อจุดประสงค์ในการท้าทายนี้หรือไม่?
Andrew Savinykh

@AndrewSavinykh ไม่นั่นถือเป็นการโกงและไม่ได้รับอนุญาตในเว็บไซต์นี้ ใช้งานได้กับเวอร์ชั่น 7.3ซึ่งเผยแพร่ก่อนที่จะมีการโพสต์ความท้าทายนี้
Adnan

8

Oracle SQL 11.2, 64 62 58 ไบต์

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

เวอร์ชั่นเก่า

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

การเชื่อมโยง '' กับตัวเลขจะทำให้มันเป็นสตริง มันสั้นกว่า 2 ไบต์เมื่อใช้ TRIM () ซึ่งสั้นกว่า TO_CHAR ()

เนื่องจากการต่อสตริงเข้ากับผลลัพธ์ NUMBER รายการในสตริงจึงเป็นไปได้ที่จะใช้สตริงนั้นเพื่อจัดการ '0' ส่วนหนึ่งของผลลัพธ์


7

CJam, 14 11 ไบต์

ขอบคุณ Sp3000 สำหรับการบันทึก 3 ไบต์

ri{)d`W%S}/

ทดสอบที่นี่

คำอธิบาย

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 ไบต์

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

ขอบคุณAleks-Daniel Jakimenko-A สำหรับอีกสองไบต์

เวอร์ชั่นเก่า

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

แก้ไข: ขอบคุณ raiph สำหรับ 2 ไบต์พิเศษ

การใช้

> 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 ^$_)}บันทึก 2 ไบต์
raiph

6

Mathematica ขนาด 40 ไบต์

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

กรณีทดสอบ

%[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 ไบต์

m+"0."_`dSQ

ลองที่นี่!

คำอธิบาย

m + "0." _` dSQ # Q = อินพุต

m SQ # ทำแผนที่ช่วง (1, Q) เพื่อ ...
 + # ... การต่อกันของ:
  "0." _ `d #" 0. " และองค์ประกอบที่ตรงกันข้าม

4

Pyth - 10 ไบต์

_M+R".0"SQ

ลองมันออนไลน์ได้ที่นี่


หนึ่งไบต์ที่เล็กกว่าถ้าคุณทำVSQ...
Jakube

4

JavaScript (ES6), 58

ฟังก์ชันที่ไม่ระบุชื่อส่งคืนสตริงที่มีค่าคั่นด้วยเครื่องหมายจุลภาค

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

ทดสอบ

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>




3

Brachylogขนาด 23 ไบต์

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

ค่านี้ใช้ตัวเลขเป็นอินพุตและเอาต์พุตผลลัพธ์ไปยัง STDOUT คั่นด้วยช่องว่าง

ค่อนข้างตรงไปตรงมา น่าเสียดายที่เราต้องต่อหมายเลขด้วยสตริงว่างเพื่อแปลงหมายเลขนี้เป็นสตริง ( :""rc) เนื่องจากยังไม่มีคำกริยาการแปลงในตัว

การแปลงเป็นสตริงเป็นสิ่งจำเป็นเพราะถ้าเราย้อนกลับตัวเลขของตัวเลขแล้วศูนย์นำหน้า (เช่น10กลายเป็น01) จะหายไป


3

PowerShell ขนาด 52 ไบต์

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

นานกว่าที่ฉันต้องการเพียงเล็กน้อย แต่ใช้เล่ห์เหลี่ยมบางอย่าง

whileห่วงเป็นที่ชัดเจน แต่มีเงื่อนไขเป็นเรื่องยุ่งยากน้อย - เรามี$a(ซึ่งเริ่มเป็น$nullเมื่ออ้างอิงแรก) $args[0]และแล้วลบตัวเลขป้อนข้อมูลของเรา ใน PowerShell ให้ดำเนินการทางคณิตศาสตร์ในการ$nullรักษามันเป็นศูนย์ดังนั้นสำหรับการป้อนข้อมูลเช่นนี้จะส่งผลให้20 -20เนื่องจากจำนวนที่ไม่เป็นศูนย์ใด ๆ$trueเงื่อนไขวงจะถูก$trueต้องจนกว่าจะ$aเท่ากับจำนวนอินพุตของเรา (ณ จุดที่การลบจะเท่ากัน0หรือ$false) เคล็ดลับมาจากการเพิ่มภายหลัง++ซึ่งไม่ได้ดำเนินการจนกระทั่งหลังจากคำนวณการลบดังนั้นการจัดการอินพุตของ1จะถูกส่งออกอย่างถูกต้อง0.1แล้วหยุดลูปในการวนซ้ำครั้งถัดไป

แต่ละครั้งในลูปเราเพิ่งสร้างสตริงตัวอักษรซึ่งจะถูกทิ้งไว้บนไพพ์ไลน์และเอาต์พุตตามนั้น เราสร้างสิ่งนี้จากการ"0."ต่อกันกับผลลัพธ์ของตัวดำเนิน-joinการเอกที่ทำหน้าที่เกี่ยวกับ char-array ที่สร้างจากการใช้สตริง"$a"ย้อนกลับ (โดยการทำดัชนีผ่านช่วง"$a".length..0)

ทดสอบการทำงาน

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 ไบต์

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

รับตัวเลขเป็นอาร์กิวเมนต์บรรทัดคำสั่งและส่งออกแต่ละคำในบรรทัดแยกต่างหาก ตัวอย่างเช่น:

$ ./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
ถ้าไม่ใช่ Bash บริสุทธิ์ล่ะก็: seq -f%g.0 $1|rev.
จัดการ

@ การทำงานที่ยอดเยี่ยม ฉันไม่รู้ว่าseqสามารถจัดรูปแบบผลลัพธ์
ossifrage คลื่นไส้


3

ขี้ผึ้ง ,57 53 ไบต์

ทำงานกับปัญหาเอาท์พุทเลขฐานสองสำหรับ rosettacode ฉันสังเกตเห็นว่าฉันสามารถใช้อัลกอริธึมการหารแบบสั้นเดียวกันสำหรับลำดับ van der Corput เพียงแค่ใช้การหารและโมดูโล 10 แทน 2 การส่งออกจะถูกสลับในทั้งสองกรณี

เลื่อนลง 4 ไบต์โดยทำมิรเรอร์รหัส:

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

Prettyprint หกเหลี่ยมเพื่อการวางแนวที่ง่ายขึ้น:

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

คำอธิบายของหนึ่งรอบผ่านโปรแกรมโดยใช้รหัสเดิม:

;#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)

ตัวอย่าง:

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 ไบต์

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

คำอธิบาย

example(strsplit)สร้างฟังก์ชั่นstrReverse(จากนั้นควรชัดเจน)

การใช้IRanges::reverseสิ่งนี้สามารถเล่นกอล์ฟได้ถึง 47 ไบต์

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

2

Python 3, 47 ไบต์

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

ทางออกที่สั้นกว่าด้วย Python 2

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

กรณีทดสอบ

>>> 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']

Python ของฉันเหมือนเดิม แต่ฉันคิดว่าf=ไม่จำเป็นดังนั้นจึงมีความยาว 47 ไบต์
บ๊อบ

@Bob โอเคฉันเอามันออก
Erwan

สิ่งนี้จะส่งผลn-1คำแรก
seequ

@Seeq คุณมีสิทธิที่ฉันจะเปลี่ยนวิธีการแก้ก็ไม่ได้เปลี่ยนไบต์นับ
Erwan

lambda n:['0.'+`i+1`[::-1]for i in range(n)]สั้นลงถ้าคุณใช้ Python 2 และคุณไม่ควรพูดว่า "Python 3.5" เว้นแต่ว่าต้องการ 3.5 ซึ่งไม่เป็นเช่นนั้น รุ่นนี้ต้องการ Python 2
mbomb007

1

𝔼𝕊𝕄𝕚𝕟, 12 ตัวอักษร / 15 ไบต์

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

Try it here (Firefox only).

ไม่เป็นไร.

คำอธิบาย

⩤⁽1ï⒨สร้างช่วง[1,ï]ที่จะแมมากกว่าß)แปลง mapitem (จำนวน) เพื่อสตริงĖ⍞.0concats .0ไปที่สิ้นสุดและฝืนสตริงทั้ง


1

Python 2, 54 ไบต์

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

คำอธิบาย:

ย้ำผ่านชุด[1,input)และผนวกกลับไปi.

ยังคงเป็น golfed เพิ่มเติม


ใช้แทน`i` str(i)นอกจากนี้ฉันคิดว่าคุณต้องพิมพ์ศูนย์นำหน้าด้วย
mbomb007

1

PHP, 45 41 ไบต์

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

รับอาร์กิวเมนต์อินพุตจาก CLI ทำงานแบบนี้:

php -r 'for(;$i++<$argv[1];)echo strrev(",$i.0");' 100
  • บันทึก 3 ไบต์โดยเชื่อมโยงสตริงก่อนย้อนกลับ



1

จูเลีย ,50 38 33 31 ไบต์

ฉันใช้รูปแบบเอาต์พุตอื่นเพื่อย่อรหัสให้สั้นลง 12 ไบต์ ฟังก์ชันส่งคืนอาร์เรย์ของสตริงทันที สั้นลงอีก 5 ไบต์ ขอบคุณAlex A.สำหรับเตือนฉันถึงการแก้ไขสตริงและใช้ฟังก์ชันที่ไม่ระบุชื่อ (กำจัดอีก 2 ไบต์)

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

หรืออีกวิธีหนึ่ง

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

ทดสอบ

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 ไบต์:n->["0."reverse("$i")for i=1:n]
Alex A.

1
โดยวิธีการที่คุณสามารถขอรายละเอียดของคุณถูกรวมเข้ากับคนเก่าที่นี่
Alex A.

เจ๋งมากไม่รู้ว่า ขอบคุณ!
ML

@AlexA ฟังก์ชั่นที่ไม่ระบุชื่อตัวเองไม่ได้ส่งออกอะไร จะไม่จำเป็นต้องใช้เวอร์ชันที่ยาวกว่าเช่นmap(n->["0."reverse("$i")for i=1:n],3)(สำหรับ n = 3) หรือไม่ นั่นจะทำให้ (อย่างน้อย) ตราบใดที่ทางออกของฉัน
ML

1
สำหรับฟังก์ชั่นที่ไม่ระบุชื่อคุณเพียงแค่เพิ่มข้อตกลงที่จะเรียกมันว่าอย่างใดอย่างหนึ่งจะต้องกำหนดให้กับตัวแปร บันทึกสองไบต์บนฟังก์ชันที่ระบุชื่อและเป็นไปตามกฎของเรา
Alex A.

1

Python 2, 40 ไบต์

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

ตัวอย่าง:

>>> 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']

การแก้พีชคณิต:

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

1

jq 1.5, 40 35 ตัวอักษร

(34 ตัวอักษรรหัส + 1 ตัวเลือกบรรทัดคำสั่ง)

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

วิ่งตัวอย่าง:

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

การทดสอบออนไลน์ ( -rไม่รองรับการส่งผ่าน URL - ตรวจสอบข้อมูลดิบด้วยตัวคุณเอง)

เช่นเดียวกับลิงก์ไปยังเอกสาร:

ช่วง ( . ) | " \ ( . + 1 ) .0" / "" | ย้อนกลับ | เพิ่ม

ในฐานะที่เป็นทางเลือกที่อ่านได้ง่ายขึ้นสามารถเขียนข้างต้นได้เช่นนี้ ( ออนไลน์ ):

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

jq เจ๋งจริงๆ ใจอธิบายว่า"\(.+1).0"/""ทำงานอย่างไร
seequ

ไม่มีอะไรพิเศษเพียงแค่การแก้ไขสตริง \(…)และการหาร /ซึ่งในกรณีที่มีการแบ่งสตริง
จัดการ

1

BBC BASIC, 89 88 87 ไบต์

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

ใช้ตัวย่อเพื่อย่อให้สั้นที่สุด เข้ากันได้กับทั้ง Brandy Basic และ BASIC 2 บนเครื่องดั้งเดิม

สำหรับ BBC BASIC ที่ทันสมัยคุณสามารถปล่อยให้หมายเลขบรรทัดเพื่อบันทึกสองไบต์เพิ่มเติม


1

Dyalog APLขนาด 12 ไบต์

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

ลองออนไลน์!

ตรงไปข้างหน้า: ฟังก์ชั่น{สตริง'0.'ก่อนที่จะ,กลับสตริงเป็นตัวแทนของการโต้แย้งไปยังฟังก์ชัน}สำหรับแต่ละ¨ของตัวเลข 1 ถึง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

เอาต์พุตคืออาร์เรย์ที่เรียกว่า "o"


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.