ย้อนกลับและสี่เหลี่ยม


19

ในการท้าทายนี้คุณจะคำนวณตัวเลขจากลำดับที่น่าสงสัย

ข้อมูลที่คุณป้อนเป็นจำนวนเต็มแบบไม่ลบทศนิยม กลับบิตในจำนวนเต็มนี้แล้วตารางจำนวนเพื่อรับผลลัพธ์ที่ต้องการ

เมื่อย้อนกลับบิตคุณต้องไม่ใช้เลขศูนย์นำหน้าในอินพุต ตัวอย่างเช่น:

26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121

25 อินพุต / เอาต์พุตแรกของลำดับนี้:

0: 0
1: 1
2: 1
3: 9
4: 1
5: 25
6: 9
7: 49
8: 1
9: 81
10: 25
11: 169
12: 9
13: 121
14: 49
15: 225
16: 1
17: 289
18: 81
19: 625
20: 25
21: 441
22: 169
23: 841
24: 9

โซลูชันของคุณควรทำงานกับจำนวนเต็มที่มีขนาดตามอำเภอใจ หากภาษาของคุณไม่มีวิธีการใช้ที่สะดวกให้ใช้คำตอบของคุณราวกับว่ามันเป็น คุณจะถูกแก้ตัวถ้าคำตอบของคุณแบ่งเป็นจำนวนมาก อย่างไรก็ตามอย่าใช้ลูกเล่น / ขอบเขตที่ใช้ได้กับโดเมนที่ จำกัด เท่านั้น (เช่นตารางการค้นหา)


คะแนนของคุณคือจำนวนไบต์ของซอร์สโค้ด

โบนัส -50% หากคุณไม่เคยแปลงจำนวนเป็น / จากไบนารี สิ่งนี้ไม่ได้ จำกัด อยู่ที่บิวด์อินหากคุณวนซ้ำตัวเลขทีละบิต (ไม่ว่าจะโดยการเลื่อนหรือการปิดบังหรือวิธีการอื่นใด) ก็จะนับเป็นการแปลงด้วย ฉันไม่รู้ว่ามันเป็นไปได้จริง ๆ หรือไม่ แต่มันก็เป็นแรงจูงใจให้เห็นรูปแบบตามลำดับ

คะแนนที่น้อยที่สุดชนะ



1
หากรหัสเรียกวิธีการที่ส่งผลให้สตริงอักขระที่แสดงถึงบิตนั้นมีสิทธิ์ได้รับโบนัสหรือไม่
แบรดกิลเบิร์ต b2gills

2
@ BradGilbertb2gills ไม่ใช่
orlp

ฉันคิดว่าการใช้คณิตศาสตร์เพื่อแยกบิตยังนับเป็นการแปลงแบบไบนารีหรือไม่
lirtosiast

คำตอบ:


5

พาร์ 5 ไบต์

✶Σ⌐Σ²

นั่นคือ read-binary-reverse-binary-square



@ CᴏɴᴏʀO'Bʀɪᴇɴตัวนับไบต์นั้นถือว่า UTF-8 ฉันเชื่อว่า Mauris ใช้การเข้ารหัสที่ไม่ใช่ UTF-8 เพื่อนับจำนวนไบต์ แต่เขาไม่ได้ระบุการเข้ารหัสนี้
orlp

Par ใช้การเข้ารหัสแปลก ๆ ของตัวเอง การเป็นตัวแทนที่ยอมรับได้คือชุดย่อยบางตัวของ <256 Unicode อักขระ ฉันไม่แน่ใจว่ามีชื่อหรือไม่ ฉันควรรอ @Ypnypn เพื่อพูดสอด
Lynn

อ้อเข้าใจแล้ว. @orlp
Conor O'Brien

อาจเป็นไปได้ว่ามันมี SBCS ของตัวเอง?
HyperNeutrino

19

Mathematica, 42 21 ไบต์

ขอบคุณ alephalpha สำหรับการลดคะแนนลงครึ่งหนึ่ง

#~IntegerReverse~2^2&

เหตุผลที่แท้จริงที่ฉันทำใน Mathematica นั้นเป็นเพราะฉันต้องการดูพล็อต ... แน่นอนว่ามันดูตลก:

enter image description here


11
แต่ฉันชอบคะแนน! XD
Conor O'Brien

1
ทำไมคำตอบนี้จึงมีคะแนนมากกว่าคำตอบที่มีจำนวนไบต์น้อยที่สุด? o_O
Seadrus

27
@Seadrus คุณรู้ว่าสิ่งที่พวกเขาพูด รูปภาพมีค่า 7 ไบต์
Martin Ender

5
ดังนั้นคะแนนของคุณคือ 42 + 7 = 49 bytes: P
Seadrus

3
ขออภัย @ CᴏɴᴏʀO'Bʀɪᴇɴ
Martin Ender

8

Minkolang 0.14 , 43 bytes

ขอบคุณ Mego สำหรับแรงบันดาลใจนี้

n1{d1`,2$3*&$z2zd2%-2l$Md1%-;z2%*z2:{+}2;N.

ทดสอบรหัสที่นี่และตรวจสอบกรณีทดสอบทั้งหมดที่นี่

คำอธิบาย

สิ่งนี้ใช้ความสัมพันธ์ที่เกิดซ้ำนี้:

a(0) = 0
a(1) = 1
a(2n) = a(n)
a(2n+1) = a(n) + 2^(floor(log_2(n))+1)

ถ้าnเป็นอินพุทก็a(n)จะเป็นผลลัพธ์ที่ได้หลังจากลำดับเลขฐานสองของมันถูกพลิก 0 และ 1 ชัดเจน สำหรับการa(2n) = a(n)พิจารณาว่าx0(ซึ่งxเป็นลำดับของตัวเลขไบนารี) พลิกเป็นซึ่งเป็นเช่นเดียวกับ0x xสำหรับa(2n+1)เหตุผลนั้นซับซ้อนกว่าเล็กน้อย x1พลิกเป็น1xซึ่งมีค่าเท่ากับสำหรับบางคนx + 2^k kนี้kเป็นหนึ่งมากกว่าจำนวนของตัวเลขในซึ่งเป็นx floor(log_2(n))+1สูตรเต็มตามมายกเว้นว่ามีการปรับเปลี่ยนเล็กน้อย นี่คือสิ่งที่ฉันรหัสจริง:

a(0) = 0
a(1) = 1
a(n) = a(n//2) + (n%2) * 2^(floor(log_2(n - n%2)))

ฉันกับเมโกะทำงานในการแชท, floor(n/2) = (n - n%2)/2. ดังนั้นlog_2(floor(n/2))+1 = log_2(n - n%2). นอกจากนี้การคูณด้วยการ(n%2)ยุบทั้งส่วนคี่และคู่เป็นนิพจน์เดียว

ในที่สุดโดยไม่ต้องกังวลใจใด ๆ เพิ่มเติมนี่คือรหัสอธิบาย

n                                              Take number from input
 1{                                            Start recursion that takes only one element
   d1`,                                        1 if top of stack 0 or 1, 0 otherwise
       2$3*                                    26
           &                                   Jump if top of stack is not zero
            $z                                 Store top of stack in register (z)

               zd2%-                           n - n%2
                    2l$M                       log_2(n - n%2)
                        d1%-                   floor(log_2(n - n%2))
              2             ;                  2^floor(log_2(n - n%2))
                             z2%               n%2
                                *              Multiply
                                 z2:           n//2
                                    {          Recurse
                                     +         Add
                                      }        Return
                                       2;N.    Square it, output as number, and stop.

1
ฉันคิดว่าการเกิดซ้ำเป็นเพียงการวนซ้ำของแต่ละบิต
Martin Ender

3
ฉันกลัวว่านี่จะไม่นับ เมื่อใดก็ตามที่คุณเห็น2nและ2n+1อยู่ในความสัมพันธ์ที่เกิดซ้ำคุณควรคิดทันทีว่ามันวนซ้ำ
orlp

1
@ orlp: เอ่อนั่นเป็นคนเกียจคร้าน ตอนนี้ฉันเชื่อแล้วว่าโบนัสของคุณเป็นไปไม่ได้
El'endia Starman

@ El'endiaStarman ฉันเกือบจะเข้าใจแล้วฉันคิดว่า
Conor O'Brien

8

Japt , 29 28 11 7 ไบต์

(คุณสามารถบันทึกโปรแกรมเป็นไฟล์ที่เข้ารหัส IEC_8859-1 ขนาด 7 ไบต์แล้วอัปโหลดไปที่ล่าม )

Japt จะสั้นลง JavaScript ทำโดยETHproductions

¢w n2 ²

ลองออนไลน์!

คำอธิบาย:

  1. ¢เป็นทางลัดไปซึ่งคอมไพล์Us2 คืออินพุต (โดยนัย) ซึ่งเรียกโดยตัวเลขจะเรียกใช้(แปลงเป็นไบนารีแยกวิเคราะห์เป็นสตริง)U.s(2)U.s(2).toString(2)

  2. wรวบรวมเพื่อ.w()ย้อนกลับสตริง ( .split('').reverse().join(''))

  3. n2ทำงานเป็นparseInt(<number>,2)เช่นแปลงไบนารีเป็นทศนิยม

  4. ²ขอร้องMath.pow(<number>,2)คือยกกำลังสองจำนวน


1
มีฟังก์ชั่น toNumber สตริงเป็นเพื่อให้คุณสามารถทำn Us2 a w a n2 p2ทำได้ดีมาก!
ETHproductions

1
นอกจากนี้wการทำงานเดียวกันในสายมันไม่เกี่ยวกับอาร์เรย์ดังนั้นคุณจึงไม่จำเป็นต้องใช้สองas :)
ETHproductions

1
สิ่งสุดท้ายที่หนึ่ง: Us2 = ¢และp2= ²นำลงมาที่ 7 ไบต์:¢w n2 ²
ETHproductions

3
ล่ามออนไลน์ในขณะนี้ยอมรับ IEC_8859-1 ไฟล์ที่เข้ารหัส (แม้ว่าฉันไม่แน่ใจว่าจะทำอย่างไร UTF-8 และ UTF-16 เช่นกัน ... )
ETHproductions

2
@ETHproductions - ตอนนี้ฉันสามารถ +1 สิ่งนี้ได้ :)
Digital Trauma

5

Python ขนาด 32 ไบต์

lambda x:int(bin(x)[:1:-1],2)**2

ลองออนไลน์

รหัสตรงไปตรงสวย: bin(6)ตัวอย่างเช่นให้0b110, ฐานเป็นตัวแทนของ 6. กลับสตริงและลบ[:1:-1] แปลงสตริงเป็นจำนวนเต็มจากไบนารี่และยกกำลังสอง0bint**2


5

Jolf , 7 ไบต์

เพียงแค่เรียกใช้ อินพุตในหน้าไม่ทำงาน

^C_Bj22

คำอธิบาย

^C_Bj22
    j   numeric input
   B    convert to binary (str)
  _     reverse
 C   2  parse as binary integer to base 10
^     2 square
        implicit output

ฉันเพิ่มQคำสั่งซึ่งทำให้ 6 ไบต์นี้:QC_Bj2


4
ถูกตัดออก 7 ยังดูเหมือนว่า 7
ปาเก็ตตี้

2
@quartata ไม่ดีเท่าที่ข้ามออก 4.
orlp

4

TeaScript ขนาด 9 ไบต์ 11

TeaScript เป็น Javascript สำหรับเล่นกอล์ฟ

®x÷v¤)**2

กอล์ฟจะมากขึ้นเมื่อฉันกลับไปที่คอมพิวเตอร์ของฉัน

ลองออนไลน์!

ทดสอบทั้งหมด


ล่ามเข้าใจการเข้ารหัสใด ๆ นอกเหนือจาก UTF8 หรือไม่ โดยใช้การเข้ารหัส UTF8 ผมคิดว่ารายการของคุณคือ 12 ไบต์นาน
Digital Trauma

4

อย่างจริงจัง , 8 7 ไบต์

2;,¡R¿ª

ความท้าทายเช่นนี้เหมาะอย่างยิ่งสำหรับ :)

ลองออนไลน์

คำอธิบาย:

2;,¡    get a string representing the (decimal) input in binary, with a 2 on the bottom of the stack
R      reverse the string
¿    convert binary string to decimal int (using that extra 2 from earlier)
ª      square it

การจับคู่ที่ดี Jolf!
Conor O'Brien

+1 สำหรับการที่ล่ามของคุณยอมรับการเข้ารหัส CP437 (หรืออย่างน้อยก็การแสดงเลขฐานสิบหกของมัน)
Digital Trauma

4

J, 10 9 ไบต์

2^~|.&.#:

นี่เป็นคำกริยาที่มีความหมายเดียว ลองออนไลน์!

ขอบคุณ @randomra สำหรับการลงเล่น 1 ไบต์!

มันทำงานอย่างไร

2^~|.&.#:  Right argument: y

       #:  Convert y to binary.
   |.      Reverse the digits.
     &.    Dual; apply the inverse of #:, i.e., convert back to integer.
 ^~        Apply power (^) with reversed argument order (~)...
2          to 2 and the previous result.

ลิงก์ใช้งานไม่ได้ฉันได้รับข้อผิดพลาด 404 บนหน้า google ที่ระบุว่า "URL ที่ร้องขอ /host/0B3cbLoy-_9Dbb0NaSk9MRGE5UEU/index.html ไม่พบในเซิร์ฟเวอร์นี้นั่นคือทั้งหมดที่เรารู้"
Bijan


2

JavaScript, 64 63 56 53 ไบต์

n=>parseInt([...n.toString(2)].reverse().join``,2)**2

ฉันรู้ว่าฉันยาวเป็นพิเศษ แต่เดี๋ยวก่อนฉันทำได้: P

การสาธิต


แทนparseInt(สิ่งที่คุณทำได้+("0b"+
Downgoat

@ ลงไป hm มันไม่ปรากฏว่าให้ผลลัพธ์ที่ถูกต้อง
nicael

[...n.toString(2)]และ.join``
Conor O'Brien

1
แม้สั้น w / ES7 (49 n=>+("0b"+[...n.toString(2)].reverse().join``)**2bytes): ยังไม่สามารถใช้งานกับเบราว์เซอร์ใด ๆ เลย
Downgoat

1
@ CᴏɴᴏʀO'Bʀɪᴇɴขอบคุณนี่จะช่วยประหยัดไบต์
nicael

2

Perl 6 , 21 ไบต์

{:2(.base(2).flip)²}

ตัวอย่างการใช้งาน:

say {:2(.base(2).flip)²}(26); # 121

say (0..24).map: {:2(.base(2).flip)²};
# (0 1 1 9 1 25 9 49 1 81 25 169 9 121 49 225 1 289 81 625 25 441 169 841 9)

my &code = {:2(.base(2).flip)²};
say code 3; # 9

say chars code 10¹⁰⁰; # 140



1

Pyth - 9 ไบต์

การแปลงที่ไม่ซับซ้อน ฉันได้รับมอบหมายให้ 2 กับ var ซึ่งเป็นเรื่องแปลก

^i_jQK2KK

Test Suite



1

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

⦅`ᶀ`+ᴙ(ïß2)²

Try it here (Firefox only).

คำตอบแบบไม่ต่อเนื่อง, 9 ตัวอักษร / 18 ไบต์

⦅Յ+ᴙ(ïⓑ)²

Try it here (Firefox only).


1
ผ่านตัวนับไบต์นี้ให้ 15 ไบต์ (ใช้การเข้ารหัสอื่น)
nicael

ฉันให้คะแนนโดยใช้ UTF-8 (จนกว่าฉันจะได้รับการเข้ารหัส Mines เพื่อทำงาน)
Mama Fun Roll

ชื่อ ... ของภาษา ... คือกล่อง?
corsiKa

มันคือ ESMin แบบทวีคูณ ไม่รองรับ Unicode chars
Mama Fun Roll


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