ฉันต้องการให้หนังสือของฉันอยู่ห่างจากโต๊ะนี้


21

เรื่องราว

ดังนั้นฉันจึงมีหนังสือเล่มหนึ่งที่ฉันต้องการแยกออกจากโต๊ะโดยไม่มีอะไรเลยนอกจากหนังสือเล่มอื่น ฉันต้องการทราบว่าฉันต้องใช้หนังสือกี่เล่มเพื่อให้บรรลุสิ่งนี้ด้วยความยาวหนังสือn

นี่คือการสร้างภาพข้อมูลที่เพื่อนของฉันที่ Wolfram ดึงมาให้ฉัน:

การสร้างภาพจาก Wolfram

ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อในวุลแฟรมและวิกิพีเดีย

ท้าทาย

ได้รับการป้อนข้อมูลจำนวนเต็ม , เอาท์พุทว่าหนังสือหลายเล่มที่จำเป็นสำหรับหนังสือด้านบนจะเป็นระยะเวลาในหนังสือเล่มนี้ออกไปจากตารางในแนวนอน หรือ ค้นหาค่าจำนวนเต็มน้อยที่สุดของสำหรับอินพุตในความไม่เท่าเทียมกันดังต่อไปนี้ n m n m i = 1 1nn

ม.n

Σผม=1ม.12ผมn

แก้ไข:สำหรับเศษส่วนใช้อย่างน้อยหนึ่งจุดลอยตัวที่มีความแม่นยำเดียวของ IEEE ขอโทษที่แก้ไขความท้าทายหลังจากโพสต์

( OEIS A014537 )

กรณีทดสอบ

 1          4
 2         31
 3        227
 5      12367
10  272400600

1
youtube.com/watch?v=pBYPXsGka74 <- เกี่ยวข้อง
streetster

ไม่ได้จะต้องมีการใช้นี้จัดโดยเฉพาะอย่างยิ่งของหนังสือซึ่ง IIRC ไม่ดีที่สุด?
user253751

คำตอบ:


13

คู่ , 41 40 33 ไบต์

บันทึก 1 ไบต์ด้วย @Dennis

@(n)find(cumsum(.5./(1:9^n))>n,1)

ลองออนไลน์!

คำอธิบาย

สิ่งนี้ใช้ความจริงที่ว่าตัวเลขฮาร์มอนิกสามารถถูก จำกัด ขอบเขตด้วยฟังก์ชันลอการิทึม

นอกจากนี้การ>=เปรียบเทียบสามารถถูกแทนที่ด้วย>เพราะตัวเลขฮาร์มอนิกไม่สามารถเป็นจำนวนเต็มได้ (ขอบคุณ @Dennis!)

@(n)                                   % Anonymous function of n
                     1:9^n             % Range [1 2 ... 9^n]
                .5./(     )            % Divide .5 by each entry
         cumsum(           )           % Cumulative sum
                            >n         % Is each entry greater than n?
    find(                     ,1)      % Index of first true entry


10

Husk , 8 ไบต์

V≥⁰∫m\İ0

ลองออนไลน์!

เนื่องจาก Husk ใช้หมายเลขที่มีเหตุผลเมื่อเป็นเช่นนี้จึงไม่มีปัญหาจุดลอยตัว

คำอธิบาย

      İ0    The infinite list of positive even numbers
    m\      Reciprocate each
   ∫        Get the cumulative sum
V           Find the index of the first element
 ≥⁰         that is greater than or equal to the input

8 ไบต์ แต่ในชุดอักขระใด
john16384

3
@ john16384 Husk มีเพจเพจของตัวเองโดยที่แต่ละสัญลักษณ์นั้นสอดคล้องกับไบต์เดียว นี่คือhexdump ที่สอดคล้องกัน
H.PWiz





3

Javascript (ES6), 34 ไบต์

n=>eval("for(i=0;n>0;n-=.5/i)++i")

Ungolfed

n => {
    for(i = 0; n > 0; ++i)
        n -= .5 / i
    return i;
}

กรณีทดสอบ


มาพร้อมกับโซลูชันที่คล้ายกันโดยใช้การเรียกซ้ำเป็นเวลา 30 ไบต์ Dunno จะโพสต์หรือไม่หลังจากเห็นคุณ
ขนปุย

1
ฉันอาจจะหายไปบางสิ่งบางอย่าง แต่ทำไมคุณต้องห่อไว้ในevalงบ?
caird coinheringaahing

1
@cairdcoinherigaahing โดยไม่ต้องตัวแปรจะต้องed ที่สิ้นสุดที่ค่าใช้จ่ายของไบต์มากขึ้นไม่กี่คน evalireturn
Shaggy




2

TI-BASIC ขนาด 27 ไบต์

พร้อมต์ให้ผู้ใช้ป้อนข้อมูลและแสดงเอาต์พุตเมื่อมีการยกเลิก หมายเหตุ: ⁻¹เป็นโทเค็น-1 (ผกผัน)

Input N
1
Repeat 2N≤Σ(I⁻¹,I,1,Ans
Ans+1
End
Ans

2
หากคุณกำลังจะบันทึกAnsในNทันทีแล้วInput Nหรือเป็นวิธีการป้อนข้อมูลที่ช่วยให้คุณประหยัดมากกว่าหนึ่งไบต์Prompt N Ans→NและMสามารถถูกแทนที่ด้วยAnsดังนั้น1→Mจะกลายเป็น1และจะกลายเป็นM+1→M Ans+1(แต่ฉันสงสัยเกี่ยวกับผลลัพธ์Ansที่ไม่แสดง - ดูนี่ - ดังนั้นอาจลงท้ายด้วยความ:Ansเหมาะสม: จากนั้นค่าจะแสดงแทน "เสร็จสิ้น")
Misha Lavrov

ขอขอบคุณ! ฉันรู้ว่าAns→Nรู้สึกตลก การเพิ่มประสิทธิภาพที่ดี ยังเอาคำแนะนำของคุณเกี่ยวกับผลผลิตออกมาเพื่อความปลอดภัย ยังคงออกมาพร้อมกับ -3 ไบต์สุทธิ: D
kamoroso94



1

Japt , 12 ไบต์

ความยาวเดียวกันกับ แต่มีประสิทธิภาพมากกว่าตัวเลือกแบบเรียกซ้ำ

@T¨(Uµ½÷X}a1

ลองมัน


คำอธิบาย

@T¨(Uµ½÷X}a1
                 :Implicit input of integer U
@        }a1     :Return the first number X >=1 that returns truthy when passed through the following function
 T               :Zero
  ¨              :Greater than or equal to
    Uµ           :Decrement U by...
      ½÷X        :0.5 divided by X

1

J, 22 ไบต์

-6 ไบต์ขอบคุณ frownyfrog

I.~0+/\@,1%2*1+[:i.9&^

ลองออนไลน์!

คำตอบเดิม

คำตอบของ Luis ใน J:

1+]i.~[:<.[:+/\1%2*1+[:i.9&^

Ungolfed

1 + ] i.~ [: <. [: +/\ 1 % 2 * 1 + [: i. 9&^

ส่วนใหญ่อยากรู้อยากเห็นเพื่อดูว่ามันสามารถปรับปรุงอย่างมาก ( ไมล์ไอเพจจิ้ง)

คำอธิบาย

1 +      NB. 1 plus... 
] i.~    NB. find the index of the arg in...
[: <.    NB. the floor of...
[: +/\   NB. the sumscan of...
1 %      NB. the reciprical of...
2 *      NB. two times...
1 +      NB. 1 plus...
[: i.    NB.  the integers up to 
9&^      NB. 9 raised to the power of the arg

ลองออนไลน์!


1+]i.~[:<.-> 1+]I.~->I.~0,
FrownyFrog

Ofc! ขอบคุณ frownyfrog
โยนาห์

และจากนั้นI.~0+/\@,
FrownyFrog

หากคุณแก้ไขคุณจะชนะ Julia :)
FrownyFrog

@FrnyFrog เสร็จแล้ว ถ้าคุณมีเวลาผมจะชอบที่จะเห็นคุณแก้ปัญหานี้: codegolf.stackexchange.com/questions/154345/bracket-expansion การแก้ปัญหาทั้งหมดที่ฉันสามารถคิดเป็น verbose เกินไปที่จะโพสต์ในจิตสำนึกที่ดี ...
โจนาห์

0

PHP, 35 ไบต์

while($argv[1]>$s+=.5/++$i);echo$i;

รันโดยใช้ CLI:

$ php -d error_reporting=0 -r 'while($argv[1]>$s+=.5/++$i);echo$i;' 5


0

Java 8, 49 ไบต์

n->{float r=0,s=0;for(;s<n;)s+=.5f/++r;return r;}

คำอธิบาย:

ลองออนไลน์ (หมดเวลาสำหรับกรณีทดสอบด้านบนn=7)

n->{             // Method with integer parameter and float return-type
  float r=0,     //  Result-float, starting at 0
        s=0;     //  Sum-float, starting at 0
  for(;s<n;)     //  Loop as long as the sum is smaller than the input
    s+=.5f/++r;  //   Increase the sum by `0.5/(r+1)`,
                 //   by first increasing `r` by 1 with `r++`
  return r;}     //  Return the result-float

0

tinylisp , 98 ไบต์

(load library
(d _(q((k # N D)(i(l N(* D # 2))(_(inc k)#(+(* N k)D)(* D k))(dec k
(q((#)(_ 1 # 0 1

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

คำอธิบาย

เฉพาะชนิดข้อมูลตัวเลข tinylisp มีจำนวนเต็มดังนั้นเราจึงคำนวณอนุกรมฮาร์โมนิกเป็นเศษส่วนโดยการติดตามตัวเศษและส่วน ในแต่ละขั้นตอนNคือตัวเศษDเป็นตัวส่วนและkเป็นดัชนีผลรวม เราต้องการผลรวมบางส่วนใหม่ที่จะหรือN/D + 1/k (N*k + D)/(D*k)ดังนั้นเราจึง recurse กับเศษใหม่ของการN*K + Dเป็นส่วนใหม่และดัชนีใหม่ของD*kk+1

การเรียกซ้ำควรหยุดลงเมื่อผลรวมบางส่วนมากกว่าหรือเท่ากับ#จำนวนหนังสือที่ต้องการ ณ k-1จุดนี้เราได้หนังสือเล่มหนึ่งไปไกลเกินไปดังนั้นเราจึงกลับมา เงื่อนไขคือ1/2 * N/D < #; เราจะได้ตัวคูณหารด้วยN < D*#*2ซึ่งเป็นวิธีที่ง่ายที่สุดในการเขียน

ฟังก์ชันตัวช่วยแบบเรียกซ้ำทำหน้าที่_คำนวณเหล่านี้ทั้งหมด หน้าที่หลักเป็นเพียงเสื้อคลุมหนึ่งโต้แย้งว่าสาย_มีค่าเริ่มต้นที่ถูกต้องสำหรับk, และND

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