มันคือ Hip ที่จะเป็น Square


44

ท้าทาย

ดังนั้นอืมดูเหมือนว่าในขณะที่เรามีความท้าทายมากมายที่ทำงานกับรูปสี่เหลี่ยมจตุรัสหรือตัวเลขของรูปทรงอื่น ๆ เราไม่มีสิ่งที่ถาม:

รับจำนวนเต็มn(ที่ไหนn>=0) เป็นอินพุตส่งกลับค่าความจริงหากnเป็นตารางที่สมบูรณ์แบบหรือค่าเท็จถ้าไม่


กฎระเบียบ

  • คุณสามารถป้อนข้อมูลด้วยวิธีการที่เหมาะสมและสะดวกสบายใด ๆ ตราบเท่าที่มันได้รับอนุญาตตามกฎ I / Oมาตรฐาน
  • คุณไม่จำเป็นต้องจัดการอินพุตมากกว่าภาษาที่คุณเลือกสามารถจัดการได้อย่างเป็นธรรมชาติและจะนำไปสู่ความไม่ถูกต้องของจุดลอยตัว
  • เอาท์พุทควรจะเป็นหนึ่งในสอง truthy สอดคล้อง / ค่า falsey (เช่นtrueหรือfalse, 1หรือ0) - truthy ถ้าใส่เป็นตารางที่สมบูรณ์, falsey หากยังไม่ได้
  • นี่คือดังนั้นจำนวนไบต์ที่น้อยที่สุดจึงชนะ

กรณีทดสอบ

Input:  0
Output: true

Input:  1
Output: true

Input:  64
Output: true

Input:  88
Output: false

Input:  2147483647
Output: false

@ ไม่มีฉันตระหนักถึงความผิดพลาดของฉัน ฉันเพิกถอนคำแนะนำนั้นและแทนที่ offer 18014398509481982( 2**54-2) ซึ่งสามารถแทนได้ด้วย double และทำให้คำตอบที่ใช้sqrtล้มเหลว
Mego

@Mego ฉันอาจจะผิดหรือแค่เข้าใจผิดในสิ่งที่คุณพูด แต่ฉันแน่ใจว่า2**54-2ยังมีขนาดใหญ่กว่าสองเท่าที่สามารถจัดการได้อย่างปลอดภัยอย่างน้อยใน JavaScript18014398509481982 > 9007199254740991
Tom

@ ฉันคิดว่าค่า จำกัด คือ 9007199515875288 มันไม่ใช่สแควร์ของ 94906267 เพราะมันไม่สามารถแทนได้เป็นสองเท่า แต่ถ้าคุณเอาสแควร์รูทมาคุณก็จะได้จำนวนเต็มตามนั้น
Neil

@Tom พิมพ์2**54-2ลงในคอนโซล JS และเปรียบเทียบสิ่งที่คุณได้รับด้วย18014398509481982(ค่าที่แน่นอน) JS เอาท์พุทค่าที่แน่นอนดังนั้นจึง2**54-2เป็นตัวแทนกับคู่ หากยังไม่สามารถโน้มน้าวใจคุณได้ให้นำข้อมูลไบนารี่0100001101001111111111111111111111111111111111111111111111111111มาตีความว่าเป็นความแม่นยำสองชั้นแบบลอยตัวของ IEEE-754 และดูว่าคุณได้รับคุณค่าอะไรบ้าง
Mego

3
ขออภัยพวกก้าวออกไปทานอาหารกลางวันและ ... เอาละที่เพิ่มขึ้น! และที่นั่นฉันคิดว่านี่จะเป็นความท้าทายที่ดีและเรียบง่าย! การเพิ่มกฎที่คุณไม่ต้องการจัดการกับอินพุตที่นำไปสู่ความไม่ถูกต้องของจุดลอยตัวในภาษาที่คุณเลือกครอบคลุมหรือไม่?
Shaggy

คำตอบ:


27

Neim , 2 ไบต์

q𝕚

คำอธิบาย:

q      Push an infinite list of squares
 𝕚     Is the input in that list?

เมื่อฉันพูดว่า 'ไม่มีที่สิ้นสุด' ฉันหมายถึงจนกว่าเราจะตีค่าสูงสุดของ longs (2 ^ 63-1) อย่างไรก็ตาม Neim เปลี่ยนไปเป็น BigIntegers ที่มีขนาดใหญ่ในทางทฤษฎี

ลองมัน!


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Dennis

น่าสนใจ ดังนั้นสิ่งนี้จะทำการบัฟเฟอร์รายการล่วงหน้าหรือเป็นตัวกำเนิด / ตัววนซ้ำที่ตรวจสอบการมีอยู่ของอินพุตต่อไปจนกว่าจะสิ้นสุดลงหรือไม่?
Patrick Roberts

@PatrickRoberts เราสามารถพูดคุยในการแชทได้ไหม?
Okx

แน่นอนว่าเพียงแค่ ping ฉันในศตวรรษที่สิบเก้าไบต์ ฉันอยู่ที่นั่นเป็นครั้งคราว
Patrick Roberts

นี่คือ ... ฟังก์ชั่นจริงๆ
Chromium


8

TI-Basic, 4 ไบต์

not(fPart(√(Ans

เพียงตรวจสอบว่าสแควร์รูทเป็นจำนวนเต็มโดยการค้นหาส่วนที่ไม่ใช่ศูนย์เศษส่วน / ทศนิยม


คุณสามารถเพิ่ม TIO (หรือเทียบเท่า) ได้หรือไม่?
Shaggy

@Shaggy ฉันไม่คิดว่ามี TI-Basic เป็นกรรมสิทธิ์และจะทำงานเฉพาะกับเครื่องคิดเลขของ TI และในโปรแกรมจำลองการเรียกใช้ ROM จากเครื่องคิดเลขดังนั้นคุณจึงไม่สามารถใช้ TI-Basic ได้อย่างถูกกฎหมายหากคุณไม่ได้เป็นเจ้าของเครื่องคิดเลข
Adám

1
@Shaggy หากคุณมี ROM ใด ๆ คุณสามารถใช้อีมูเลเตอร์ (ความต้องการของฉันคือ jstified) เพื่อลองออนไลน์
Timtech

8

C #, 27 ไบต์

n=>System.Math.Sqrt(n)%1==0

วิธีที่ถูกต้อง / แม่นยำมากขึ้นในการทำเช่นนี้คือ:

n=>System.Math.Sqrt(n)%1<=double.Epsilon*100

double.Epsilon ไม่มีประโยชน์สำหรับการตรวจสอบประเภทนี้ tl; dr: เมื่อเปรียบเทียบตัวเลข> 2, Double.Epsilon นั้นเหมือนกับศูนย์ การคูณด้วย 100 จะทำให้ความล่าช้านั้นเล็กน้อย
Robert Fraser

@RobertFraser ฉันไปที่โพสต์ SO ที่เชื่อมโยงและไม่ได้อ่านอะไรมาก ไม่ว่าจะด้วยวิธีใดก็ตามมันก็ไม่ไร้ประโยชน์เลย
TheLethalCoder

...<int>==0เป็น...!<int>ผมคิดว่า
สแตนดีด

@StanStrum Not in C #
TheLethalCoder

7

JavaScript (ES6), 13 ไบต์

n=>!(n**.5%1)

ผลตอบแทนจริงถ้าสแควร์รูทของ n เป็นจำนวนเต็ม

ตัวอย่างข้อมูล:

f=
n=>!(n**.5%1)

console.log(f(0));
console.log(f(1));
console.log(f(2));
console.log(f(4));
console.log(f(8));
console.log(f(16));
console.log(f(88));
console.log(f(2147483647));


7

dc, 9

0?dvd*-^p

ส่งออก 1 สำหรับความจริงและ 0 สำหรับความเท็จ

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

0            # Push zero.  Stack: [ 0 ]
 ?           # Push input.  Stack: [ n, 0 ]
  dv         # duplicate and take integer square root.  Stack: [ ⌊√n⌋, n, 0 ]
    d        # duplicate.  Stack: [ ⌊√n⌋, ⌊√n⌋, n, 0 ]
     *       # multiply.  Stack: [ ⌊√n⌋², n, 0 ]
      -      # take difference. Stack: [ n-⌊√n⌋², 0 ]
       ^     # 0 to power of the result.  Stack: [ 0^(n-⌊√n⌋²) ]
        p    # print.

คำสั่งการยกกำลังdcของหมายเหตุ^ให้ 0 0 = 1 และ 0 n = 0 โดยที่ n> 0


สวย! +1 สำหรับใช้dcในรูปแบบที่แยบยลเช่นนั้น
สัญลักษณ์ตัวแทน

6

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

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

ลองออนไลน์! ดัดแปลงมาจากคำตอบของ @ MartinEnder อย่างไร้ยางอายเป็นตัวเลขสามเหลี่ยมนี้หรือไม่ แต่ด้วยการแปลงฐานรวมอยู่ที่ค่าใช้จ่าย 6 ไบต์

โปรดทราบว่าตัวเลขนี้เป็นสามเหลี่ยมหรือไม่ ไม่ใช่เหตุผลที่อธิบายไม่ได้บางอย่างที่จำเป็นในการสนับสนุนเลขศูนย์เป็นจำนวนสามเหลี่ยมดังนั้นส่วนหนึ่งของการดัดแปลงคือการเพิ่ม a ?เพื่อทำให้ตัวเลือก 1 ตัวเลือกชั้นนำทำให้กลุ่มสามารถจับคู่สตริงว่างได้ อย่างไรก็ตามในขณะนี้เมื่อจับคู่สตริงว่างแล้ว+โอเปอเรเตอร์จะหยุดการทำซ้ำเพื่อหลีกเลี่ยงการวนซ้ำไม่สิ้นสุดที่จะเกิดขึ้นหากมันยังคงจับคู่กับสตริงว่างเปล่าอย่างตะกละตะกลาม (หลังจากทั้งหมด^1?จะทำการจับคู่) ซึ่งหมายความว่าจะไม่พยายามจับคู่ทางเลือกอื่นในกลุ่มดังนั้นหลีกเลี่ยงการจับคู่ 2, 6, 12 เป็นต้นเนื่องจาก @MartinEnder ชี้ให้เห็นวิธีที่ง่ายกว่าในการหลีกเลี่ยงในขณะที่ยังคงจับคู่สตริงว่างคือ ^(^1|11\1)*$ยึดการแข่งขันที่เริ่มต้นในขณะที่ทำให้ตัวเลือกกลุ่มนับไบต์เดียวกัน


มองไปข้างหน้าคำอธิบายว่าทำไมนี้ไม่ตรงกับ2, 6หรือตัวเลขอื่น ๆ n^2-nของแบบฟอร์ม ;) (วิธีหลีกเลี่ยงคำอธิบายนั้นสำหรับจำนวนไบต์เดียวกันจะเป็น^(^1|11\1)*$)
Martin Ender

@MartinEnder เหตุผลเดียวกับที่คุณไม่สามารถใช้(^|1\1)+$ฉันคิดว่า?
Neil

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

สำหรับบันทึกที่จะหยุดการวนลูปถ้ามีก็ไม่ได้เป็นทางเลือกที่ว่างเปล่าเช่นในกรณีของ+ ((?(1)11\1|1?))+เมื่อมีการวนซ้ำที่ว่างเปล่ามันจะไม่ลองสิ่งใดเพิ่มเติมอีกไม่ว่าพวกเขาจะว่างเปล่าหรือเปล่าก็ตาม
Martin Ender

@ มาร์ตินเอนเดอร์ฉันหมายถึง "มีการจับคู่แล้ว" แทนที่จะเป็น "จับคู่ทันที" แก้ไขแล้ว.
Neil


6

MATL , 5 4 ไบต์

ขอบคุณ Luis ที่ลดขนาดโค้ดของฉันลงหนึ่งไบต์อีกสองไบต์ทำให้เป็นรหัสที่สั้นที่สุด

t:Um

ลองออนไลน์

คำอธิบาย:

         % Implicit input
t        % Duplicate it
 :       % Range from 1 to input value
  U      % Square the range, to get 1 4 9 ... 
   m     % ismember, Checks if the input is a member of the range of perfect squares

คำตอบเก่า:

X^1\~

ลองออนไลน์!

        % Implicit input
X^      % Square root of input
  1\    % Modulus 1. All perfect squares will have 0, the rest will have decimal value
     ~  % Negate, so the 0 becomes 1, and the decimal values become 0

@ ฉันไม่เห็นด้วย MATL ทำไม่mod(2**127-, 1000)ได้ เว้นแต่ว่าตัวเลขสี่ตัวสุดท้ายจะเป็น 0 ....
Stewie Griffin

t:Umนอกจากนี้คุณยังสามารถใช้ ผลงานว่าสำหรับปัจจัยการผลิตขึ้นไป2^53เนื่องจากความแม่นยำ จำกัด จุดลอย
หลุยส์ Mendo

ฉันเห็นแล้วว่าสิ่งนี้คล้ายกับการแก้ไขของคุณสั้นกว่า :-) นิดหน่อย
Luis Mendo

คำสั่งสแควร์ที่ดีซ่อนอยู่! U: str2num / string to array / square. ฉันรู้ว่าจะต้องมีฟังก์ชั่นรูปสี่เหลี่ยม แต่ฉันหามันไม่ได้ ...
Stewie Griffin

1
@cairdcoinheringaahing ที่มีวัตถุประสงค์บางส่วน ฉันมีวิธีแก้ปัญหาสองข้ออันแรกคือ 5 ไบต์ส่วนอีก 6 ไบต์ หลุยส์ golfed off สองไบต์จากหนึ่งกับ 6 ดังนั้นฉันบันทึกสองไบต์ขอบคุณเขา แต่ฉันบันทึก byte บนคะแนนเท่านั้น ...
Stewie Griffin

6

Python 3 , 40 38 ไบต์

ขอบคุณ squid สำหรับการบันทึก 2 ไบต์!

lambda n:n in(i*i for i in range(n+1))

ลองออนไลน์!

ช้าเกินไปที่จะส่งคืนคำตอบ2147483647ภายในระยะเวลาที่เหมาะสม (แต่เขียนโดยใช้ตัวสร้างเพื่อบันทึกหน่วยความจำเนื่องจากมันไม่เสียค่าใช้จ่ายไบต์ใด ๆ )

ใช้งานได้ใน Python 2 เช่นกันแม้ว่าOverflowErrorจะมีความเป็นไปได้เนื่องจากrangeถ้าคุณลองด้วยอินพุตจำนวนมาก (A MemoryErrorน่าจะเป็นใน Python 2 เช่นกันเนื่องจากrange)



5

05AB1E , 4 ไบต์

Ln¹å

ลองออนไลน์!


ไม่ทำงานสำหรับคนจำนวนมากตัวอย่างเช่น4111817668062926054213257208
Emigna

@Emigna โอ้เพราะมันถือว่ายาวมาก ฉันคิดว่า 05AB1E ใช้ Python 3
Erik the Outgolfer


มันใช้ python 3 ปัญหาคือว่ารากที่สองให้ข้อผิดพลาดในการปัดเศษสำหรับจำนวนมาก
Emigna

@Emigna โอ้ ... ฉันเดาว่าฉันจะต้องหาวิธีอื่นแล้วไม่ควรยาก
Erik the Outgolfer

5

Python 3 , 19 ไบต์

lambda n:n**.5%1==0

ลองออนไลน์!


4111817668062926054213257208ล้มเหลวสำหรับปัจจัยการผลิตที่มีขนาดใหญ่เช่น
L3viathan

แก้ไขใน 25 ไบต์:lambda n:int(n**.5)**2==n
L3viathan

4
@ L3viathan นั่น (พร้อมกับการแก้ปัญหาใด ๆ ที่เกี่ยวข้องกับการsqrt) 2**4253-1ล้มเหลวในค่าที่อยู่นอกช่วงของคู่เหมือน
Mego

@tallyallyhuman ลอยหลังจาก%1นั้นแน่นอน<1ดังนั้นข้อเสนอของคุณจะกลับมาจริงสำหรับอินพุตทั้งหมด สังเกตได้ว่าn**.5เป็นแบบลอย
Leun Nun

5

SageMathขนาด 9 ไบต์

is_square

ลองออนไลน์

ฟังก์ชั่นในตัวทำสิ่งที่มันบอกบนดีบุก เนื่องจาก Sage ใช้การคำนวณเชิงสัญลักษณ์จึงไม่มีข้อผิดพลาดด้านความแม่นยำในการคำนวณที่ทำให้เกิดปัญหา IEEE-754 ลอยตัว


5

Japt , 3 ไบต์

¬v1

ลองออนไลน์!

ดูเหมือนว่าจะทำงานได้ดี2**54-2ในJaptic Interpreterแต่ล้มเหลวใน TIO ด้วยเหตุผลบางอย่าง ...



@ Mego นั่นไม่ใช่วิธีการแก้ปัญหาที่ไม่จำเป็นต้องจัดการกับตัวเลขที่ใหญ่กว่าภาษาที่สามารถจัดการได้ใช่หรือไม่
Shaggy

@Shaggy Japt ขึ้นอยู่กับ JavaScript ซึ่งใช้ความแม่นยำสองเท่าของลอย 2**127-1อยู่ในช่วงของการเป็นสองเท่า
Mego

2
@Mego ไม่ปลอดภัยสูงสุดสำหรับ JavaScript 2**53-1ใช่ไหม
Tom

3
@Mego แต่ตัวเลขของ JavaScript มีความแม่นยำเพียง 53 บิตดังนั้น JS ไม่สามารถแสดงค่าได้2**127-1อย่างแน่นอน 2**127ที่อยู่ใกล้ก็จะได้รับคือ
ETHproductions


5

Prolog (SWI) 27 ไบต์

+N:-between(0,N,I),N=:=I*I.

ลองออนไลน์!

คำอธิบาย

การค้นหาผ่านตัวเลขทั้งหมดมากกว่าหรือเท่ากับ0และน้อยกว่าหรือเท่ากับและการทดสอบไม่ว่าจะเป็นตัวเลขที่ยกกำลังสองเท่ากับNN



5

MathGolf 1 ไบต์

°

ลองออนไลน์!

ฉันไม่คิดว่าต้องการคำอธิบาย ฉันเห็นความต้องการผู้ดำเนินการ "is perfect square" ก่อนที่ฉันจะเห็นความท้าทายนี้เนื่องจากภาษาได้รับการออกแบบมาเพื่อจัดการกับความท้าทายเกี่ยวกับกอล์ฟ ส่งคืน 0 หรือ 1 เนื่องจาก MathGolf ใช้จำนวนเต็มเพื่อเป็นตัวแทนของ booleans


4

PHP, 21 ไบต์

<?=(-1)**$argn**.5<2;

หากรากที่ไม่ได้เป็นตัวเลขจำนวนเต็มคือ(-1)**$argn**.5NAN


ฉันจะเรียกใช้สิ่งนี้ได้อย่างไร
ติตัส

@Titus ด้วยธงและท่อ:-F echo 144 | php -F script.php
user63956

อ่าฉันถึงfจุดสุดยอดจดหมายฉบับนั้น ขอบคุณ
ติตัส

4

ทับทิมขนาด 25 ไบต์

Math.sqrt(gets.to_i)%1==0

อาจเป็นวิธีที่สั้นกว่า แต่นั่นคือทั้งหมดที่ฉันพบ

ลองออนไลน์!


ยินดีต้อนรับสู่ PPCG :) คุณช่วยเพิ่มTIO (หรือเทียบเท่า) นี้ได้ไหม?
Shaggy

ขอขอบคุณที่เพิ่ม TIO แต่สิ่งนี้ดูเหมือนจะไม่ส่งคืนผลลัพธ์ใด ๆ
Shaggy

ฉันไม่ดีฉันอัปเดต
เกรกอรี่

ไม่ยังคงไม่ทำงาน
Shaggy

3

CJam , 8 ไบต์

ri_mQ2#=

ลองออนไลน์!

คำอธิบาย

รากที่สองจำนวนเต็ม, สแควร์, เปรียบเทียบกับจำนวนเดิม


ฉันเดาตามนี้คุณไม่ต้องการ 2 ไบต์แรก
Chromium

และอีกทางหนึ่งด้วยการใช้แนวคิดของคำตอบนี้คุณสามารถทำได้mq1%0=ซึ่งก็คือ 6 ไบต์
Chromium

@Chromium ขอบคุณ แต่ในกรณีที่ผมจำเป็นต้อง{... }ที่จะทำให้รหัสฟังก์ชั่นการนับไบต์เดียวกันดังนั้น
หลุยส์ Mendo

อันที่จริงฉันสับสนเล็กน้อยว่าจะเพิ่มเครื่องมือจัดฟันแบบโค้งหรือไม่ เพราะถ้าคุณไม่ได้เพิ่มมันเป็นโปรแกรมที่ได้รับอนุญาต
Chromium

@Chromium โปรแกรมจำเป็นต้องป้อนข้อมูลดังนั้นriจำเป็นต้องใช้ในกรณีนี้
Luis Mendo

3

Mathematica ขนาด 13 ไบต์

AtomQ@Sqrt@#&

ลองออนไลน์!


ไม่มีในตัว? แปลก ....
TheLethalCoder

1
คุณสามารถใช้แทนAtomQ IntegerQ
Martin Ender

1
แน่นอนมีขนดก ...
J42161217

1
@*คุณยังสามารถใช้
Martin Ender

4
AtomQ@*SqrtAtomQ@Sqrt@#&เป็นคำพ้องสำหรับ ตัวอย่างเช่นAtomQ@*Sqrt@4ผลตอบแทนTrueและผลตอบแทนAtomQ@*Sqrt@5 False(เพราะความเป็นผู้นำAtomQ@*Sqrt[4]ไม่ทำงานไม่ถูกต้องส่งคืนAtomQ@*2)
Greg Martin


3

AWK , 27 + 2 ไบต์

{x=int($0^0.5);$0=x*x==$1}1

ลองออนไลน์!

เพิ่ม+2ไบต์สำหรับใช้-Mแฟล็กเพื่อความแม่นยำโดยพลการ ตอนแรกฉันใช้การเปรียบเทียบสตริงเนื่องจากจำนวนมากเปรียบเทียบเท่ากันแม้ว่าจะไม่ได้ แต่sqrtกลับมีค่าที่ไม่แน่นอน 2^127-2ไม่ควรเป็นสี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ


3

T-SQL, 38 ไบต์

SELECT IIF(SQRT(a)LIKE'%.%',0,1)FROM t

ค้นหาจุดทศนิยมในรากที่สอง IIFมีความเฉพาะเจาะจงกับ MS SQL ทดสอบและทำงานใน MS SQL Server 2012

การป้อนข้อมูลที่อยู่ในคอลัมน์ของที่มีอยู่ก่อนตารางตันต่อกฎป้อนข้อมูลของเรา


3

โอห์ม 2 ไบต์

Ʋ

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

คำอธิบาย

อินพุตโดยนัย -> จัตุรัสในตัวที่สมบูรณ์แบบ -> เอาต์พุตโดยนัย ...


3

Java 8, 20 ไบต์

n->Math.sqrt(n)%1==0

intการป้อนข้อมูลเป็น

ลองที่นี่


ไม่เป็นที่ถกเถียงกัน: คำถามบอกอย่างชัดเจนว่า "กำหนดจำนวนเต็ม n (โดยที่ n> = 0)" คำตอบที่สั้นที่สุดคือคำตอบที่ดีที่สุด แก้ไข: จะไม่ +1 จนกว่าคำตอบที่สั้นที่สุดไม่ใช่คำตอบแรก: p
Olivier Grégoire

@ OlivierGrégoireอืมนั่นเป็นวิธีที่ดีในการดู แต่คุณก็ยังจะไม่ทราบไม่ว่าจะเป็นint, ,long shortและด้วยคำถามที่พวกเขาถามหาจำนวนเต็ม แต่รูปแบบอินพุตมีความยืดหยุ่นบางครั้งฉันใช้อินพุตสตริงเพื่อบันทึกบางไบต์ โดยส่วนตัวฉันคิดว่าการใช้งานn->ได้ดีและคุณควรระบุว่าประเภทคืออะไร แต่เห็นได้ชัดว่าทุกคนไม่เห็นด้วยกับสิ่งนี้ ในทางกลับกันมาจากประวัติคำตอบ Java 7 ไปจากint c(int n){return ...;}ที่(int n)->...ทำให้รู้สึกมากกว่าn->...(แม้ว่าฉันชอบส่วนตัวที่สองตั้งแต่สั้นกว่าแน่นอน)
Kevin Cruijssen

2
@ OlivierGrégoireตกลงฉันเปลี่ยนไปแล้ว หลังจากที่ได้อ่านการอภิปรายในคำตอบนี้ผมมาถึงข้อสรุปที่ระบุการป้อนข้อมูลที่เป็นจำนวนเต็มใน Java คือความแตกต่างกว่าที่ระบุการป้อนข้อมูลที่ไม่มีรายชื่อของสองสายใน CJamหรืออาร์เรย์เซลล์ของสตริงใน MATL
Kevin Cruijssen


3

เพิ่ม ++ , 24 13 11 ไบต์

+?
S
%1
N
O

ลองออนไลน์!

ฉันลบฟังก์ชั่น clunky ที่ด้านบนและเขียนลงในเนื้อความของคำถามเพื่อลบ 11 ไบต์

ตามที่อธิบายไว้ในส่วนแรกด้านล่างแล้วเรามาดูกันว่าชิ้นส่วนใหม่ทำงานอย่างไร

S   Square root
%1  Modulo by 1. Produced 0 for integers and a decimal for floats
N   Logical NOT

รุ่นเก่า 24 ไบต์

D,i,@,1@%!
+?
^.5
$i,x
O

ลองออนไลน์!

ฟังก์ชั่นที่ด้านบน ( D,i,@,1@%!) เป็นส่วนหลักของโปรแกรมดังนั้นเรามาดูรายละเอียดเพิ่มเติม

D,     Create a function...
  i,   ...called i...
  @,   ...that takes 1 argument (for this example, let's say 3.162 (root 10))
    1  push 1 to the stack; STACK = [1, 3.162]
    @  reverse the stack;   STACK = [3.162, 1]
    %  modulo the stack;    STACK = [0.162]
    !  logical NOT;         STACK = [False]

+?     Add the input to accumulator (x)
^.5    Square root (exponent by 0.5)
$i,x   Apply function i to x
O      Output the result

3

Python 3 , 28 27 25 ไบต์

  • ขอบคุณ @mdahmoune เป็นเวลา 1 ไบต์: เปรียบเทียบ int ของ root กำลังสองกับแบบดั้งเดิม
  • บันทึก 2 ไบต์: แลมบ์ดาสั้นลง
lambda x:int(x**.5)**2==x

ลองออนไลน์!


1
แล้ว f = lambda x: int (x **. 5) ** 2 == x 27bytes
mdahmoune
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.