Hyperprogramming: N + N, N × N, N ^ N ทั้งหมดในที่เดียว


151

เขียนโปรแกรมที่ใช้หมายเลข N ตั้งแต่ 1 ถึง 9 ในพื้นเมืองในรูปแบบโปรแกรมของคุณควรเอาท์พุท N + NEG การส่งออก2ถ้า N คือ1, 4ถ้า N คือ2, 6ถ้า N คือ3และอื่น ๆ

เมื่อตัวละครในโปรแกรมของคุณทุกคนจะทำซ้ำในสถานที่แล้วมันควรจะเป็นโปรแกรมที่ใช้ใน N (ยังคง 1-9) และเอาท์พุทเอาท์พุท N × NEG 1ถ้า N คือ1, 4ถ้า N คือ2, 9ถ้า N คือ3และอื่น ๆ

เมื่อตัวละครในโปรแกรมของคุณทุกคนจะ triplicated ในสถานที่แล้วมันควรจะเป็นโปรแกรมที่ใช้ใน N (ยังคง 1-9) และผลการส่งออก N ^ NEG 1ถ้า N คือ1, 4ถ้า N คือ2, 27ถ้ายังไม่มีข้อความ3, 387420489ถ้า N คือ9, เป็นต้น

ไม่จำเป็นต้องใช้ตัวเลขที่สูงกว่า 9 เนื่องจาก 10 ^ 10 อยู่นอกช่วงจำนวนเต็มปกติของหลายภาษา

ตัวอย่าง

หากโปรแกรมเริ่มต้นของคุณคือ

My_Program!
Exit();

จากนั้นควรจะสามารถรับใน N และส่งออก N + N

นอกจากนี้โปรแกรม

MMyy__PPrrooggrraamm!!

EExxiitt(());;

ควรใช้ใน N และเอาท์พุท N × N

ในที่สุดโปรแกรม

MMMyyy___PPPrrrooogggrrraaammm!!!


EEExxxiiittt((()));;;

ควรใช้ใน N และเอาท์พุท N ^ N

ไม่จำเป็นต้องใช้โปรแกรมสี่ตัวอักษร

กฎระเบียบ

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

  • ผู้ใช้ Windows อาจถือว่า\r\nเป็นตัวละครตัวหนึ่งเนื่องจากสิ่งต่าง ๆ เช่น\r\r\n\nไม่เหมาะสมหรืออาจใช้งานได้

  • โปรแกรมเนทีฟที่สั้นที่สุด (N + N หนึ่ง) เป็นไบต์ชนะ


11
เป็นไปได้ไหม
Sarge Borsch

77
ดูเหมือนจะเป็นไปไม่ได้จนกว่าจะเสร็จ - Nelson Mandela
Adnan

42
@SargeBorsch ใช่
Dennis

8
น่าเสียดายที่มีเพียงบางภาษาเท่านั้น
MatthewRock

2
@ R.Kap ไม่ดูเหมือนสับสนเกินไป
งานอดิเรกของ Calvin

คำตอบ:


203

เยลลี่ 12 ไบต์

N + N

“(ẹ+)‘FQṖṪỌv

ลองออนไลน์!

N ร N

““((ẹẹ++))‘‘FFQQṖṖṪṪỌỌvv

ลองออนไลน์!

N ^ N

“““(((ẹẹẹ+++)))‘‘‘FFFQQQṖṖṖṪṪṪỌỌỌvvv

ลองออนไลน์!

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

เจลลี่มีสตริงตัวอักษรหลากหลายประเภท ทั้งหมดของพวกเขาเริ่มต้นด้วย หากตัวอักษรมีมากกว่าหนึ่งสตริงอาร์เรย์จะถูกส่งคืนและแยกสตริงออกจากกัน

ยกตัวอย่างเช่นอัตราผลตอบแทน“abc“def”['abc', 'def']

ขึ้นอยู่กับตัวอักษรตัวสุดท้ายของตัวอักษร (ใด ๆ ของ”«»‘’ที่«ไม่ได้ดำเนินการในปัจจุบัน) หนึ่งสามารถเลือกระหว่างตัวอักษรประเภทที่แตกต่างกัน สำหรับเราได้คะแนนรหัสในหน้ารหัสของเยลลี่แทนอักขระ Unicode ที่เกี่ยวข้อง

ยกตัวอย่างเช่นอัตราผลตอบแทน“abc“def‘[[97, 98, 99], [100, 101, 102]]

ตัวอักษรสามตัวในโปรแกรมตรงกับอาร์เรย์จุดรหัสต่อไปนี้

“(ẹ+)‘           -> [40, 214, 43, 41]
““((ẹẹ++))‘      -> [[], [40, 40, 214, 214, 43, 43, 41, 41]]
“““(((ẹẹẹ+++)))‘ -> [[], [], [40, 40, 40, 214, 214, 214, 43, 43, 43, 41, 41, 41]]

N + N

“(ẹ+)‘FQṖṪỌv                          Main link. Argument: n

“(ẹ+)‘                                As before.
      F                               Flatten the array. Yields an integer array.
       Q                              Unique; deduplicate the integers.
                                      This yields [40, 214, 43, 41].
        Ṗ                             Pop; remove the last element.
         Ṫ                            Tail; extract the last element. 
                                      This yields 43, the Unicode code point of +.
          Ọ                           Unordinal; cast to character.
           v                          Eval; execute the character as a Jelly
                                      program with argument n.

N ร N

““((ẹẹ++))‘‘FFQQṖṖṪṪỌỌvv              Main link. Argument: n

““((ẹẹ++))‘                           As before.
           ‘                          Increment all integers.
            FF                        Flatten the array. Yields an integer array.
              QQ                      Unique; deduplicate the integers.
                                      This yields [41, 215, 44, 42].
                ṖṖ                    Pop twice; remove the last two elements.
                  ṪṪ                  Tail; extract the last element.
                                      This yields 215, the Unicode code point of ×.
                    ỌỌ                Unordinal; cast to character.
                      v               Eval; execute the character as a Jelly
                                      program with argument n.
                       v              Eval; convert the return value (n×n) to a
                                      string and execute that string as a Jelly
                                      program with argument n. Since the string
                                      consists of a single integer literal, that
                                      integer is returned, ignoring the argument.

โปรดทราบว่าF, Q, และไม่เปลี่ยนแปลงอาร์เรย์ 1D อาร์เรย์โดยไม่ซ้ำกันจำนวนเต็มและตัวอักษร (ตามลำดับ)

N ^ N

“““(((ẹẹẹ+++)))‘‘‘FFFQQQṖṖṖṪṪṪỌỌỌvvv  Main link. Argument: n

“““(((ẹẹẹ+++)))‘                      As before.
                ‘‘                    Increment all integers twice.
                  FFF                 Flatten the array. Yields an integer array.
                     QQQ              Unique; deduplicate the integers.
                                      This yields [42, 216, 45, 43].
                        ṖṖṖ           Pop thrice; remove the last three elements.
                           ṪṪṪ        Tail; extract the last element.
                                      This yields 42, the Unicode code point of *.
                              ỌỌỌ     Unordinal; cast to character.
                                 v    Eval; execute the character as a Jelly
                                      program with argument n.
                                  vv  Eval twice. See N×N.

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

19
ฉันไม่คิดว่าฉันเคยเห็นคำตอบจากเดนนิสมาก่อนนั่นไม่ได้ทำให้ฉันเริ่มคิดว่า "ไม่มีทาง" จากนั้นก็ค่อย ๆ เชื่อว่าเขาเป็นเทพเจ้าแบบหนึ่งโดยการอ่านคำอธิบาย
Magic Octopus Urn

14
เข้าร่วมเพื่อโหวต ว้าว.
Daniel R

4
ไม่มีทาง ... คุณใช้เวลาเล่นกอล์ฟกี่ชั่วโมงต่อวัน!?
tfrascaroli

16
@ ฟัลโกฉันแน่ใจว่าเดนนิสเพิ่งหลับเมื่อมันถูกโพสต์ ;)
Martin Ender

87

> <> , 41 ไบต์

\<
1:: :
&&* +
i*n n
c&
%:
4l
0(
.i
n}
&?

ลองมันออนไลน์: N + N , N * N , N ^ N สมมติว่าอินพุต STDIN เป็นอักขระตัวเดียว

> <> เป็นภาษา 2D ดังนั้นเราจึงสามารถใช้ประโยชน์จากความจริงที่ว่าความหมายของรหัสส่วนใหญ่จะไม่เปลี่ยนแปลงหากเราดำเนินการตามคำสั่งด้านล่าง - บรรทัดว่างพิเศษที่เกิดขึ้นเป็นเพียงแค่ไม่มีตัวเลือก ข้อยกเว้นนี้คือแทรมโพลีนแบบมีเงื่อนไข?ซึ่งปรากฏค่าและข้ามคำสั่งถัดไปหากค่าไม่ใช่ศูนย์ - บรรทัดใหม่พิเศษจะทำให้ยุ่งเหยิง?เนื่องจากไม่มีตัวแทรก แต่เราสามารถทำสิ่งนี้ได้โดยการใส่?จุดสิ้นสุดของ คอลัมน์และใช้ประโยชน์จากการตัด

ที่จะตัดสินใจว่าการดำเนินการในการดำเนินการที่สำคัญคือ40.ซึ่ง teleports (4, 0)ทรัพย์สินทางปัญญาให้ดำรงตำแหน่ง เนื่องจากการขยายตัวของรหัสx = 4คอลัมน์สอดคล้องกับ+สำหรับโปรแกรมฐาน*สำหรับโปรแกรมสองเท่าและ^สำหรับโปรแกรมสามเท่า น่าเสียดายที่> <> ไม่มีการยกกำลังในตัวทำให้เป็นส่วนใหญ่ของโปรแกรม

[Setup]
\         Mirror: reflect IP direction to downwards
1&        Put 1 into the register
ic%       Push a code point of input, then take it mod 12. This maps the char '1' to the
          number 1, and so forth for '2' to '9'.
40.       Jump to (4, 0), still heading downwards

[N+N version]
:+        Duplicate then add
n         Output as number
          (Stack is now empty, so the program errors out trying to do the above again)

[N*N version]
:*        Duplicate then multiply
n         Output as number
          (Stack is now empty, so the program errors out trying to do the above again)

[N^N version]
:&*&      Multiply register by N
:l(       Push (N < length of stack + 1)
i         Push input, but since we're now at EOF this pushes -1 (stack length += 1)
}         Move -1 to the back
?<        If (N < length + 1) was 1, execute the < to move leftward. Otherwise, skip it.
          (Continue loop)

\         Mirror: reflect IP direction upwards
&n        Output register
.         Jump to (-1, N), which is invalid so the program errors out

21

TovTovTov (การกลายพันธุ์ของไก่ ): 810147050 ไบต์

อธิบายไว้ด้านล่างนี้เป็นวิธีแก้ไขปัญหาที่แนะนำสองข้อ: หนึ่งวิธีแก้ปัญหาอย่างเต็มรูปแบบสำหรับคำถามที่ต้องใช้จำนวนมากไบต์และวิธีแก้ปัญหาบางส่วนที่สอง(การแก้เฉพาะส่วนN + NและN * Nต้องการเพียง 484 ไบต์) ชุดของเทคนิคที่ยอดเยี่ยม! :)

1. โซลูชันเต็มรูปแบบ (810147050 ไบต์)

ใช้TovTovTov(TOV='hi',SEP=',')ในTOVองค์ประกอบที่มีภูมิคุ้มกันที่จะทำซ้ำตัวละครในสถานที่ (ทั้ง"hihihi"และ"hhiihhiihhii"มีสาม"hi"ในพวกเขาและทุกคนTovTovTovใส่ใจเกี่ยวกับวิธีการหลายTOVs ปรากฏระหว่างSEPs)

ถ้าเราใช้SEP=', 'โปรแกรมทั้งหมดจะมีภูมิคุ้มกันต่อการซ้ำซ้อนของอักขระ (ซึ่งเจ๋ง แต่จะไม่แก้คำถาม) SEP=','ดังนั้นเราจึงใช้

ดังนั้นโปรแกรม"hihihi,hi"ตัวอย่างเช่นรวบรวมไป ints อาร์เรย์[3,1]ขณะ"hhiihhiihhii,,hhii"ที่คอมไพล์[3,0,1]และการ"hhiihhiihhii,,hhii" [3,0,0,1]ซึ่งหมายความว่าคำสั่งนั้นจะไม่เปลี่ยนความหมายหลังจากทำซ้ำ แต่ความยาวโดยรวมจะเปลี่ยนไปด้วยการทำสำเนาอักขระ วิธีการแก้ปัญหาด้านล่างแบบสอบถามความยาวของโปรแกรมและใช้สิ่งนี้ในการตัดสินใจว่าจะพิมพ์N+N, หรือN*NN^N

วิธีการแก้ปัญหาเต็มแนะนำเป็นอาร์เรย์ ints คือ: [6, 12, 9, 18, 9, 142, 11, 38, 8, 9, 260, 11, 73, 8, 22, 75, 7, 10, 14, 3, 1, 22, 24, 18, 15, 8, 10, 16, 3, 1, 22, 24, 18, 15, 8, 10, 45, 16, 7, 22, 3, 1, 22, 24, 18, 15, 8, 22, 3, 1, 22, 24, 18, 15, 8, 25, 3, 1, 22, 24, 18, 15, 8, 48, 3, 1, 22, 24, 18, 15, 8, 277, 3, 1, 22, 24, 18, 15, 8, 3146, 3, 1, 22, 24, 18, 15, 8, 46677, 3, 1, 22, 24, 18, 15, 8, 823564, 3, 1, 22, 24, 18, 15, 8, 16777237, 3, 1, 22, 24, 18, 15, 8, 387420510, 3, 1, 22, 24, 18, 15, 8]

ในฐานะที่เป็นสตริงมันเป็นโปรแกรมที่ค่อนข้างยาวประกอบด้วย 810147050 ตัวอักษรเริ่มต้นด้วย: hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...

2. การแก้ปัญหาเฉพาะส่วนของ N + N และ N * N (484 ไบต์)

การใช้TovTovTov(TOV='1',SEP=', ')งานคราวนี้SEPs มีภูมิคุ้มกันต่อการทำซ้ำ ( ",, "ยังมีเพียงหนึ่ง", "ในนั้น) ดังนั้นทางออกที่แนะนำต่อไปนี้จะมี 33 คำสั่งในนั้นเสมอแม้หลังจากการทำสำเนาตัวละคร:

1111, 111111111111111111111111111111111111111111111111, 1111111111, 1111111111, 1111111111, 111111, 111111111111, 111111111, 11111111111111, 111, 1, 1111111111111111111111, 111111111111111111111111, 111111111111111111, 111111111111111, 11111111, 111111111111, 1111111111111111, 111111111111111, 1111111111111111111111, 111111111111111111111111111111111111, 11, 1111111111111111111111111111, 111111, 111, 111111, 11111111111, 111111111111111111111111111, 1111, 1, 11111111, 1, 11111111

อาร์เรย์ int ที่สอดคล้องกัน (จำนวนTOVs ( 1s) ในแต่ละคำสั่ง 33 ข้างต้น) เป็นดังนี้:[4,48,10,10,10,6,12,9,14,3,1,22,24,18,15,8,12,16,15,22,36,2,28,6,3,6,11,27,4,1,8,1,8]

การทำซ้ำอักขระในผลลัพธ์จะมีรายการคำสั่งที่แตกต่างกัน 33 รายการ: [8,96,20,20,20,12,24,18,28,6,2,44,48,36,30,16,24,32,30,44,72,4,56,12,6,12,22,54,8,2,16,2,16]

ints เดิมอาร์เรย์ (ที่คำนวณN + N ) ได้รับการออกแบบอย่างระมัดระวังเพื่อที่ว่าหลังจากคำสั่งเปลี่ยนความหมายของโปรแกรมยังคงทำให้รู้สึก แต่คำนวณN * N ตัวอย่างเช่นตัวแรก4(ที่TovTovTovเข้าใจว่าเป็น "ปฏิบัติต่อ op ถัดไปเป็นรหัส ascii เพื่อแปลงเป็นตัวอักษร") การเปลี่ยนแปลงหลังจากการทำสำเนาตัวละคร8เป็นซึ่งเป็นคำสั่งที่แตกต่างกันโดยสิ้นเชิง ("เปลี่ยนเคาน์เตอร์โปรแกรมเป็นค่าแรกที่ผุด สแต็คถ้าค่าที่ปรากฏขึ้นทันทีหลังจากนั้นเป็นจริง ")


9

Befunge-98 , 38 ไบต์

vx:k:2-k*.@
20@
j3.
>^*
>:^
>:+.@

ลองออนไลน์: N + N , N * N , N ^ N

โปรแกรมนี้จะไม่ทำงานนอกกรอบเนื่องจากต้องให้อินพุตอยู่ในสแต็กเมื่อเริ่มการทำงาน โดยการแทนที่บรรทัดแรกด้วยรหัสต่อไปนี้ (เพิ่มสามไบต์) มันจะรับอินพุตจาก stdin (แม้ว่าจะไม่สามารถใช้งานได้ใน tryitonline.net, เศร้า):

v
&x:k:2-

คำอธิบาย

ติดตั้ง

v       Redirect motion downward
02j     Jump over two instructions/spaces, executing the third
        If N=1, it will skip to the 6th line
        If N=2, it will skip to the 5th line
        If N=3, it will skip to the 4th line

N = 1

>       Move right
:+.@    Duplicate, add, print and exit

N = 2

>>::^^  Move right, duplicate twice, move up
*.@     Multiply, print and exit

N = 3

>>>^^^  Redirect motion
30x     Set instruction pointer delta to (3, 0), causing it to
        move right, executing every third instruction
:k:     Duplicate the number (we'll call it M) M+1 times
        The stack is now [M]*(M+2)
2-k*    Multiply things M-1 times (`k' is a quirky instruction)
.@      Print and exit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.