จำนวนค่าระหว่างอินพุตและสี่เหลี่ยมจัตุรัสถัดไปสูงสุด


9

รับค่าจตุรัสบวกเป็นอินพุต เอาต์พุตจำนวนของค่าระหว่างอินพุตและสี่เหลี่ยมจัตุรัสถัดไปสูงสุด

ตัวอย่าง

อินพุต: 1

ผลลัพธ์: 2

สาเหตุ: ตัวเลข 2 และ 3 อยู่ระหว่าง 1 และ 4 ซึ่งเป็นจตุรัสสูงสุดถัดไป

อินพุต: 4

ผลลัพธ์: 4

เหตุผล: ตัวเลข 5, 6, 7, 8 อยู่ระหว่าง 4 และ 9


1
เราต้องสนับสนุนช่วงของค่าอินพุตใด
Martin Ender

16
ฉันคิดว่านี่น่าจะน่าสนใจกว่าถ้าอินพุตไม่จำเป็นต้องเป็นสี่เหลี่ยมจัตุรัส
xnor

1
@xnor Hindsight ฉันเห็นด้วยอย่างแน่นอน
Shayne03

คำตอบ:


8

เยลลี่ 2 ไบต์

½Ḥ

ลองออนไลน์!

พอร์ตของคำตอบทางคณิตศาสตร์ของฉัน (ใช้สแควร์รูทแล้วเพิ่มเป็นสองเท่า) ซึ่ง จำกัด ไว้ที่อินพุตซึ่งสามารถแสดงได้อย่างชัดเจนว่าเป็นเลขทศนิยม หากนั่นเป็นปัญหาวิธีแก้ปัญหาแบบสามไบต์ƽḤใช้กับสี่เหลี่ยมที่กำหนดเองได้ (ซึ่งเดนนิสโพสต์ก่อน แต่ถูกลบไปแล้ว)


1
โอ้ฉันพลาดทั้งอินพุต "จะเป็นสี่เหลี่ยม" โอ๊ะโอ
Jonathan Allan

1
@JanathanAllan ฉันด้วย สเป็คแปลก ๆ
Digital Trauma

มีสี่เหลี่ยมที่ไม่สามารถแสดงได้อย่างแน่นอนในจุดลอยตัวหรือไม่?
กระจาย

@ คริสเตียนแน่นอนว่าจำนวนจุดลอยตัวจะถูกกำหนดในขนาดดังนั้นจึงมีเพียงจำนวน จำกัด ของค่าที่พวกเขาสามารถเป็นตัวแทน
Martin Ender

@MartinEnder ในกรณีดังกล่าวเมื่อได้รับการสนับสนุนจาก Jelly สำหรับจำนวนเต็มความแม่นยำโดยพลการและการขาดสเปคของขอบเขตฉันลงคะแนนให้ควรสนับสนุนอินพุตที่ถูกต้องทั้งหมด
กระจาย

12

Brain-Flak , 38 , 22 bytes

{([[]](({})))}{}([]<>)

ลองออนไลน์!

ฉันมากความภาคภูมิใจของคำตอบนี้ IMO หนึ่งในสนามกอล์ฟที่ดีที่สุดของฉัน

มันทำงานยังไง?

ขณะที่ผู้ใช้อื่น ๆ อีกมากมายมีการชี้คำตอบก็คือsqrt (n) * 2 อย่างไรก็ตามการคำนวณรากที่สองในสมองสะเก็ดนั้นเป็นเรื่องที่ไม่สำคัญมาก เนื่องจากเรารู้ว่าอินพุตจะเป็นรูปสี่เหลี่ยมเสมอเราจึงสามารถปรับให้เหมาะสม เราเขียนลูปที่ลบออก

1, 3, 5, 7, 9...

จากอินพุตและติดตามจำนวนครั้งที่รัน เมื่อมันมาถึง 0 คำตอบคือจำนวนสุดท้ายที่เราลบออก

แต่เดิมฉันได้ผลักเคาน์เตอร์เพื่อกองอื่น อย่างไรก็ตามเราสามารถใช้สแต็กหลักเป็นตัวนับได้โดยเพิ่มความสูงของสแต็ก

#While TOS (top of stack, e.g. input) != 0:
{

    #Push:
    (

      #The negative of the height of the stack (since we're subtracting)
      [[]]

      #Plus the TOS pushed twice. This is like incrementing a counter by two
      (({}))
    )

#Endwhile
}

#Pop one value off the main stack (or in other words, decrement our stack-counter)
{}

#And push the height of the stack onto the alternate stack
([]<>)

ใน python-y pseudocode นี่เป็นอัลกอริทึมดังต่อไปนี้:

l = [input]
while l[-1] != 0:   #While the back of the list is nonzero
    old_len = len(l)
    l.append(l[-1])
    l.append(l[-1] - old_len)

l.pop()

print(len(l))

2
สมองของฉันได้รับการสะบัดอย่างนี้เป็นงานที่ดี
Magic Octopus Urn

9

Mathematica ขนาด 8 ไบต์

2Sqrt@#&

ลองออนไลน์! (ใช้คณิตศาสตร์)

ความแตกต่างระหว่างn 2และ(n + 1) 2เสมอ2n + 1แต่เราเพียงแค่ต้องการค่าระหว่างพวกเขาไม่รวมปลายทั้งสองซึ่งเป็น2n

สิ่งนี้อาจสั้นลงได้2#^.5&ขึ้นอยู่กับข้อกำหนดด้านความแม่นยำ


1
ประมาณ2√ # &
chyanog


2

dc, 5

?2*vp

ลองมันออนไลน์


ก่อนหน้านี้ฉันอ่านคำถามผิด รุ่นนี้ใช้ได้กับอินพุตจำนวนเต็มบวกใด ๆ ไม่ใช่แค่กำลังสองที่สมบูรณ์แบบ:

dc, 12

?dv1+d*1-r-p

ลองมันออนไลน์


2

เยลลี่ ,  7  6 ไบต์

ฉันพลาดคำเตือน "อินพุตจะเป็นรูปสี่เหลี่ยม" แต่วิธีนี้จะใช้ได้กับจำนวนเต็มทั้งหมดที่ไม่เป็นค่าลบ ... Martin Ender ให้โซลูชัน 2 ไบต์แล้ว

½‘Ḟ²’_

ลิงก์ monadic ส่งคืนการนับ

ลองออนไลน์!



2

Brain-Flakขนาด 20 ไบต์

ส่งเสียงตอบคำถามที่น่าพิศวง (albiet อีกต่อไปเล็กน้อย) ที่ DJMcMayhem ที่นี่

{({}()[({}()())])}{}

ลองออนไลน์!

คำอธิบาย

รหัสนี้ใช้งานได้โดยนับถอยหลังจากเลขยกกำลังสองโดยการเพิ่มคี่ เนื่องจากทุกช่องเป็นผลรวมของจำนวนคี่ที่ต่อเนื่องกันจะมีค่าเป็น 0 ใน n 1/2ขั้นตอน เคล็ดลับที่นี่คือเราจริงติดตามขั้นตอนของเราในแม้จำนวนและการใช้งานคงที่()จะชดเชยไปยังเลขคี่ที่เหมาะสม เนื่องจากคำตอบคือ 2n 1/2เลขคู่นี้จึงเป็นคำตอบของเรา ดังนั้นเมื่อเราไปถึง 0 เราก็ลบศูนย์และคำตอบของเรานั่งอยู่บนกอง




1

เยลลี่ขนาด 7 ไบต์

½‘R²Ṫ_‘

ลองออนไลน์!

คำอธิบาย:

½‘R²Ṫ_    Input:              40
½         Square root         6.32455532...
 ‘        Increment           7.32455532...
  R       Range               [1, 2, 3, 4, 5, 6, 7]
   ²      Square              [1, 4, 9, 16, 25, 36, 49]
    Ṫ     Tail                49
     _‘   Subtract input+1    8

Btw อินพุตจะเป็นรูปสี่เหลี่ยมจัตุรัสเสมอ
Martin Ender

1
@JonathanAllan แก้ไขแล้ว
กระจาย

@ มาร์ตินฉันเข้าใจผิดโดยสิ้นเชิงจากนั้นก็ ... เพื่อไม่ให้คัดลอกคำตอบของคุณ
กระจาย






1

เพิ่ม ++ , 22 20 ไบต์

+?
_
S
+1
^2
-1
-G
O

ลองออนไลน์!

คุณต้องการที่จะรู้ว่ามันทำงานอย่างไร ก็อย่ากลัว! ฉันมาที่นี่เพื่อให้การศึกษาแก่คุณ!

+?   Add the input to x (the accumulator)
_    Store the input in the input list
S    Square root
+1   Add 1
^2   Square
-1   Subtract 1
-G   Subtract the input
O    Output as number

ฉันมีตรรกะเดียวกันสำหรับคำตอบของฉัน Qbic เดิม แต่มีวิธีที่สั้นลง
steenbergh

1

MATL ( 8 7 ไบต์)

ฉันแน่ใจว่าสิ่งนี้จะลดลงอย่างมาก (แก้ไข: ขอบคุณหลุยส์) แต่วิธีการแก้ปัญหาไร้เดียงสาคือ

X^QUG-q

ลองออนไลน์!

คำอธิบาย:

X^   % Take the square root of the input (an integer)
QU  % Square the next integer to find the next square
G-   % Subtract the input to find the difference
q    % Decrement solution by 1 to count only "in between" values.

1
คุณสามารถแทนที่2^ ด้วยU(และใช้งานได้ในเวอร์ชัน 20.1.1ซึ่งเป็นรุ่นล่าสุดในเวลาที่มีการท้าทายดังนั้นคำตอบก็จะมีสิทธิ์แม้ตามมาตรฐานเดิมของเรา)
Luis Mendo

1
ขอบคุณหลุยส์! ฉันประหลาดใจที่วิธีการที่ไร้เดียงสาของฉันสูญเสียตัวละครเพียง 1 ตัวเมื่อเทียบกับอาจารย์ MATL :)
DrQuarius



0

อลิซ 10 ไบต์

2/*<ER
o@i

ลองออนไลน์!

คำอธิบาย

อีกครั้งคำนวณ2 sqrt (n) โครงร่างบันทึกสองไบต์บนโซลูชันมาตรฐาน:

/o
\i@/2RE2*

รายละเอียดของรหัสยกเว้นการเปลี่ยนเส้นทางของ IP:

2    Push 2 for later.
i    Read all input.
i    Try reading more input, pushes "".
2    Push 2.
R    Negate to get -2.
E    Implicitly discard the empty string and convert the input to an integer.
     Then take the square root of the input. E is usually exponentiation, but
     negative exponents are fairly useless in a language that only understands
     integers, so negative exponents are interpreted as roots instead.
*    Multiply the square root by 2.
o    Output the result.
@    Terminate the program.


0

QBIC , 19 9 ไบต์

?sqr(:)*2

บันทึกพวงโดยคัดลอกวิธีของ @ MartinEnder

ไม่มีลิงก์ของ TIO สำหรับ QBIC แต่น่าเสียดายที่

คำอธิบาย

?          PRINT
 sqr( )    The square root of
     :     the input
        *2 doubled



0

เรติน่า 21 ไบต์

.+
$*
(^1?|11\1)+
$1

ลองออนไลน์! คำอธิบาย: ทำงานโดยนำสแควร์รูทของจำนวนขึ้นอยู่กับตัวแก้เลขสามเหลี่ยมของ @ MartinEnder หลังจากจับคู่หมายเลขสแควร์แล้ว$1ความแตกต่างระหว่างหมายเลขสแควร์กับหมายเลขสแควร์ก่อนหน้านี้เป็นตัวเลข เราต้องการความแตกต่างต่อไป แต่พิเศษซึ่งมีเพียงอีก 1 เพื่อให้บรรลุสิ่งนี้เราจะนับจำนวนของสตริง$1ว่าง


0

T-SQL, 22 ไบต์

SELECT 2*SQRT(a)FROM t

การป้อนข้อมูลผ่านทางตารางที่มีอยู่ก่อนต่อมาตรฐานของเรา




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