อ้อมฉันช่วยฉันด้วย


23

ได้รับการป้อนข้อมูลn, โปรแกรมหรือฟังก์ชั่นที่ต้องส่งออกของคุณจำนวนเต็มบวกที่เล็กที่สุดkเช่นที่nโค้งมนไปหลายที่ใกล้ที่สุดของมีค่ามากกว่าkn

ตัวอย่าง.

รับอินพุต20ค่าเอาต์พุตควรเป็น3:

  • หลายที่ใกล้ที่สุดของ1มีที่20ซึ่งเป็นได้20มากกว่า

  • หลายที่ใกล้ที่สุดของ2มีที่20ซึ่งเป็นได้20มากกว่า

  • หลายที่ใกล้ที่สุดของ3มีที่21ซึ่งเป็นมากกว่า20ดังนั้นจึงเป็นเอาท์พุท

กรณีทดสอบ

#Input  #Output
2       3
4       5
6       4
8       3
10      4
12      7
14      3
16      6
18      4
20      3
22      4
24      5
26      3
28      5
30      4
32      3
34      4
36      8
38      3
40      6
42      4
44      3
46      4
48      5
50      3
52      6
54      4
56      3
58      4
60      7
62      3
64      5
66      4
68      3
70      4
72      11
74      3
76      6
78      4
80      3
82      4
84      5
86      3
88      5
90      4
92      3
94      4
96      7
98      3
1000    6

เอาต์พุตที่กำหนดอินพุตคี่ใด ๆ ควรเป็น 2

กฎระเบียบ

  • n เป็นจำนวนเต็มบวกน้อยกว่า 2^32
  • การปัดเศษจะดำเนินการเช่นนั้นหากมีทวีคูณสองkเท่าของระยะห่างเท่ากันnจะมีการเลือกปัดเศษขึ้น ( "ปัดครึ่งรอบขึ้น" ) ด้วยวิธีนี้ทุกคี่อัตราผลตอบแทนของการส่งออกn2
  • นี่คือดังนั้นรหัสที่สั้นที่สุดในแต่ละภาษาจะชนะ

ฉันได้แก้ไขรูปแบบกรณีทดสอบของคุณเพื่อให้อ่านง่ายขึ้นและกระชับยิ่งขึ้น แจ้งให้เราทราบหากคุณมีปัญหาใด ๆ กับสิ่งนี้หรือหากมีตัวอย่างใหม่ใด ๆ ปิดอยู่ :)
DJMcMayhem

@Shaggy Done! ฉันลบราคาต่อรอง 500 รายการและ 450 รายการออกจากรายการ
fireflame241

มีลิงก์ oeis สำหรับลำดับนี้หรือไม่
James K

@JamesK ฉันไม่พบหนึ่งเมื่อฉันค้นหาก่อนหน้านี้ อาจเป็นคนที่มีบัญชี OEIS อาจสร้างได้หรือไม่
fireflame241

คำตอบ:



9

Japtap , 6 ไบต์

@<rX}a

ลองออนไลน์!

คำอธิบาย:

@    <r X}a
XYZ{U<UrX}a
X              // X = 0; Increments when the condition in between {...} fails
   {     }a    // Return the first integer X where:
    U          //   The input
     <U        //   is less than the input
       rX      //     rounded to the nearest multiple of X

2
rในตัวคืออะไร? o_o
Erik the Outgolfer

@EriktheOutgolfer: Japt ยังมี built-ins สำหรับการปัดเศษขึ้นหรือลง :)
Shaggy

5
ฉันรู้ว่าคุณลักษณะนี้มีประโยชน์ในสักวันหนึ่ง: D
ETHproductions

@Shaggy นั่นคือถั่ว! o_o_o
Erik the Outgolfer

@Oliver: นี่ทำให้ฉันมีความมั่นใจมากขึ้นในการใช้วิธีการฟังก์ชั่นตอนนี้ - รุ่นของฉันเองมีขนาด 7 ไบต์:o æ@<rX
Shaggy

7

MATL , 13 ไบต์

tQ:yy/Yo*<fX<

ลองออนไลน์! หรือตรวจสอบปัจจัยการผลิตทั้งหมดจาก11000การ

คำอธิบาย

6พิจารณาการป้อนข้อมูล

t      % Implicit input. Duplicate
       % STACK: 6, 6
Q:     % Add 1, range
       % STACK: 6, [1 2 3 4 5 6 7]
yy     % Duplicate top two elements
       % STACK: 6, [1 2 3 4 5 6 7], 6, [1 2 3 4 5 6 7]
/      % Divide, element-wise
       % STACK: 6, [1 2 3 4 5 6 7], [6 3 2 1.5 1.2 1 0.8571]
Yo     % Round to closest integer. Halves are rounded up
       % STACK: 6, [1 2 3 4 5 6 7], [6 3 2 2 1 1 1]
*      % Multiply, element-wise
       % STACK: 6, [6 6 6 8 5 6 7]
<      % Less than, element-wise
       % STACK: [0 0 0 1 0 0 1]
f      % Find: indices of nonzeros (1-based)
       % STACK: [4 7]
X<     % Minimum of vector. Implicit display
       % STACK: 4


5

JavaScript (ES6), 28 25 ไบต์

n=>g=x=>n%x>=x/2?x:g(-~x)
  • บันทึก 3 ไบต์ด้วย Arnauld

ทดสอบมัน

o.innerText=(f=

n=>g=x=>n%x>=x/2?x:g(-~x)

)(i.value=64)();oninput=_=>o.innerText=f(+i.value)()
<input id=i type=number><pre id=o>

หรือทดสอบตัวเลขทั้งหมดตั้งแต่ 1-1000 (ให้นาทีเพื่อเรียกใช้):


5

โปรตอน , 33 ไบต์

n=>[x for x:2..n+2if n%x>=x/2][0]

ลองออนไลน์!


ฉันไม่รู้อะไรเกี่ยวกับ Proton แต่ดูเหมือนว่าคุณสามารถบันทึกได้ 3 ไบต์: ลองออนไลน์!
jferard

อาจเป็นเรื่องบังเอิญ แต่นี่ก็เหมือนกับวิธีการแก้ปัญหาของมนุษย์โดยสิ้นเชิง ... : p
Erik the Outgolfer

@EriktheOutgolfer เราโพสต์ในเวลาเดียวกัน (อันที่จริงฉันนินจาเขาในเวลาไม่กี่วินาที) ด้วย 37-byter เพราะ Hyper borked โอเปอเรเตอร์และเมื่อเขาแก้ไขพวกเขาเราทั้งคู่อัพเดท
Mr. Xcoder

อืมฉันนินจาคุณ IIRC : P
มนุษย์โดยรวม

@tallyallyhuman คุณคุณนินจากับฉัน 41 byter ฉันโพสต์ข้อความแรกขนาด 37 byter และคุณนินจาด้วยอันนั้นภายในไม่กี่วินาที
Mr. Xcoder



3

เยลลี่ 11 ไบต์

÷R%1<.¬;1TṂ

ลิงก์ monadic ที่รับและส่งคืนจำนวนเต็มบวก

ลองออนไลน์! หรือดูชุดทดสอบ

อย่างไร?

÷R%1<.¬;1TṂ - Link: number, n       e.g. 10
 R          - range(n)               [ 1,2,3     ,4  ,5,6     ,7     ,8   ,9     ,10]
÷           - n divided by           [10,5,3.33..,2.5,2,1.66..,1.42..,1.25,1.11..,1 ]
  %1        - modulo by 1            [ 0,0,0.33..,0.5,0,0.66..,0.42..,0.25,0.11..,0 ]
    <.      - less than 0.5?         [ 1,1,1     ,0  ,1,0     ,1     ,1   ,1     ,1 ]
      ¬     - not                    [ 0,0,0     ,1  ,0,1     ,0     ,0   ,0     ,0 ]
       ;1   - concatenate a 1        [ 0,0,0     ,1  ,0,1     ,0     ,0   ,0     ,0 , 1]
         T  - truthy indices         [            4    ,6                           ,11]
          Ṃ - minimum                4

หมายเหตุ: กำหนดการ1เป็นเพียงการจัดการกับกรณีที่nเป็นหนึ่ง1, 2หรือ4เมื่อความต้องการผลที่จะn+1( ‘R÷@%1<.¬TṂยังจะทำงาน)




2

Pyth, 5 ไบต์

fgy%Q

ชุดทดสอบ

ไม่มีการปัดเศษบิวอินเพียงแค่ตรวจสอบค่าจำนวนเต็มบวก T ตัวแรกที่ซึ่งอินพุต mod T สองครั้งมากกว่าหรือเท่ากับ T

คำอธิบาย:

fgy%Q
fgy%QTT    Implicit variable introduction.
f          Find the first positive integer T such that the following is truthy:
   %QT     Input % T
  y        Doubled
 g    T    Is greater than or equal to T

2

x86 รหัสเครื่อง, 17 ไบต์

รหัสนี้ใช้วิธีการแก้ปัญหาขั้นพื้นฐานซ้ำในรูปแบบของฟังก์ชั่นนำมาใช้ใหม่:

31 F6                   xor    esi, esi
46                      inc    esi         ; set ESI (our temp register) to 1

                     Loop:
89 C8                   mov    eax, ecx    ; copy 'n' to EAX for division
46                      inc    esi         ; eagerly increment temp
99                      cdq                ; extend EAX into EDX:EAX
F7 F6                   div    esi         ; divide EDX:EAX by ESI
01 D2                   add    edx, edx    ; multiply remainder by 2
39 F2                   cmp    edx, esi    ; compare remainder*2 to temp
7C F4                   jb     Loop        ; keep looping if remainder*2 < temp

96                      xchg   eax, esi    ; put result into EAX (1 byte shorter than MOV)
C3                      ret

ฟังก์ชั่นดังต่อไปนี้การประชุมสาย fastcallเพื่อให้พารามิเตอร์เดียว ( n) ถูกส่งผ่านในการECXลงทะเบียน ค่าส่งคืน (k ) คือตามปกติส่งคืนในEAXรีจิสเตอร์

ลองออนไลน์!


2

Java 8, 42 ไบต์

แลมบ์ดาจากไปIntegerInteger

n->{for(int f=1;;)if(n%++f*2>=f)return f;}

ลองใช้ออนไลน์

กิตติกรรมประกาศ

  • -1 ไบต์ต้องขอบคุณKevin Cruijssen

4
คุณสามารถบันทึก byte โดยเริ่มต้นf=1และใช้งาน++fในครั้งแรกfเช่นนี้:n->{for(int f=1;;)if(n%++f*2>=f)return f;}
Kevin Cruijssen

1

Perl 5 , 24 + 1 (-p) = 25 ไบต์

1while$_%++$k<$k/2;$_=$k

ลองออนไลน์!

พยายามแต่ละจำนวนเต็ม$kเริ่มต้นที่ 1 $kจนกว่าจะพบที่เหลือที่มีอย่างน้อยครึ่งหนึ่งของ


1

Forth (gforth) , 45 ไบต์

: f 1 begin 1+ 2dup mod over 1+ 2/ >= until ;

ลองออนไลน์!

รหัสคำอธิบาย

: f             \ start a new word definition
  1             \ start a counter at 1
  begin         \ start an indefinite loop
    1+          \ add 1 to counter
    2dup mod    \ duplicate input value and counter, get remainder of input/counter
    over 1+ 2/  \ get counter/2 (add 1 to force rounding up)
    >=          \ check if remainder is greater than counter/2
  until         \ end loop if true, otherwise go back to beginning
;               \ end word definition

1

05AB1E , 9 ไบต์

∞.ΔIs/Dò‹

ลองออนไลน์!

คำอธิบาย

∞.ΔIs/Dò‹ Full code
∞.Δ       Returns the first number for which the following code returns true
             -> stack is [n]
   Is     Push the input and swap the stack -> stack is [input, n]
     /    Divide both of them -> stack is [input/n]
      Dò  Duplicate and round the second -> stack is [input/n, rounded(input/n)]
        ‹ Check if input/n got larger by rounding -> stack is [bool]
             -> if bool is true, abort and return the current number

1

Rockstar , 681 ไบต์

Thought takes Patience and Control
While Patience is as high as Control
Let Patience be without Control

Give back Patience

Rock takes Art
Love is neverending
Sex is bottomless
Put Thought taking Art & Love into your head
If your head is Sex
Give back Art
Else
Limits are inspiration
Put Art with Limits without your head into the rubbish
Give back the rubbish


Listen to Chance
Questions are unstoppable
Until Questions is Chance
Build Questions up
Put Thought taking Chance, Questions into your mind
Answers are independence (but)
Put Questions over Answers into the world
Put Rock taking the world into the world
If your mind is as big as the world
Say Questions
Break it down

คุณสามารถลอง rockstar ออนไลน์แต่คุณจะต้องคัดลอกและวางรหัสผ่าน มันจะแจ้งให้คุณใส่หมายเลข

ฉันไม่ได้ไปนับไบต์ที่ต่ำที่สุดเพราะ Rockstar ไม่ได้ทำเพื่อเล่นกอล์ฟดังนั้นฉันจึงพยายามไปหาเนื้อเพลง Rock 'n' Roll

คำอธิบาย:

สิ่งนี้ขึ้นอยู่กับโซลูชันเดียวกับวิธีอื่น ๆ (python, java):

Iterate up from 2:
if n % iterator >= ceil(n/2)
    return iterator

ก่อนอื่นฉันต้องนิยามฟังก์ชั่นโมดูลัสและเพดานซึ่งเพื่อประโยชน์ของบทกวีเรียกว่า Thought and Rock

ด้านล่างเป็นเวอร์ชันกวีน้อยที่มีชื่อตัวแปรต่างกันและคำอธิบายที่ไวยากรณ์ไม่ชัดเจน วงเล็บแสดงความคิดเห็น

Modulus takes Number and Divisor
While Number is as high as Divisor
Put Number minus Divisor into Number
    (blank line ending While block)
Give back Number (return Number)
    (blank line ending function declaration)
Ceil takes Decimal
Put Modulus taking Decimal, 1 into Remainder
If Remainder is 0
Give back Decimal (return Decimal)
Else
Put Decimal with 1 minus Remainder into Result
Give back Result (return Result)
    (blank line ending if block)
    (blank line ending function declaration)
Listen to Input (Read from STDIN to Input)
Index is 1
Until Index is Input
Build Index up (Increment by 1)
Put Modulus taking Input, Index into LHS
Put Index over 2 into RHS
Put Ceil taking RHS into RHS
If LHS is as big as RHS
Say Index
Break it down (Break from loop)


0

สวิฟท์ 3 , 51 ไบต์

{n in(2..<n+2).filter{Float(n%$0)>=Float($0)/2}[0]}

ด้วยเหตุผลแปลกประหลาดบางอย่าง[0]ไม่ทำงานออนไลน์ นี่เป็นเวอร์ชั่นคอมไพเลอร์ที่เข้ากันได้ออนไลน์ (ที่ใช้.first!แทน):

{n in(2..<n+2).filter{Float(n%$0)>=Float($0)/2}.first!}

ชุดทดสอบ (ใช้งานออนไลน์ได้)



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