হাইপারপ্রোগ্রামিং: এন + এন, এন × এন, এন ^ এন সব মিলিয়ে


151

একটি প্রোগ্রাম লিখুন যা 1 থেকে 9 সহ অন্তর্ভুক্ত N নম্বরে নিয়ে থাকে। এর স্থানীয় আকারে আপনার প্রোগ্রামটি N + NEg আউটপুট 2যদি N হয় 1, 4যদি N হয় 2, 6N হয় 3, এবং অন্য output

যখন আপনার প্রোগ্রামের প্রতিটি অক্ষর স্থানে ডুপ্লিকেট করা থাকে, তখন এটি এমন একটি প্রোগ্রাম হওয়া উচিত যা N কে নিয়ে যায় (এখনও 1 থেকে 9 পর্যন্ত) এবং 1যদি N থাকে তবে N × NEg আউটপুট আউটপুট দেয় 1, 4যদি N হয় 2, 9যদি N থাকে 3, ইত্যাদি।

যখন আপনার প্রোগ্রাম প্রতিটি চরিত্র জায়গায় triplicated করা হয়, তাহলে এটি একটি প্রোগ্রাম যা (এখনও 1 থেকে 9) n লাগে এবং N ^ NEg আউটপুট আউটপুট হওয়া উচিত 1যদি n হল 1, 4যদি n হল 2, 27যদি এন হয় 3, 387420489যদি n হল 9, প্রভৃতি

9 এর উপরে নম্বরগুলি প্রয়োজনীয় নয় কারণ 10 ^ 10 অনেক ভাষার স্বাভাবিক পূর্ণসংখ্যার ব্যাপ্তির বাইরে।

উদাহরণ

যদি আপনার প্রাথমিক প্রোগ্রাম ছিল

My_Program!
Exit();

তারপরে এটি এন গ্রহণ এবং এন + এন আউটপুট করতে সক্ষম হওয়া উচিত।

অতিরিক্তভাবে, প্রোগ্রাম

MMyy__PPrrooggrraamm!!

EExxiitt(());;

N এবং আউটপুট N × N নেওয়া উচিত।

পরিশেষে, প্রোগ্রাম

MMMyyy___PPPrrrooogggrrraaammm!!!


EEExxxiiittt((()));;;

N এবং আউটপুট N ^ N নেওয়া উচিত।

চতুর্মুখী-চরিত্রের প্রোগ্রামগুলি এবং এর বাইরে প্রয়োজনীয় নয়।

বিধি

  • ইনপুট এবং আউটপুট সাধারণ হওয়া উচিত, সাধারণত ফর্ম্যাট দশমিক সংখ্যা। আপনি আপনার কোডটি দেখানোর জন্য আলাদা বেস ব্যবহার করে উত্তর দিতে পারেন তবে তার উত্তরটি প্রতিযোগিতামূলক।

  • উইন্ডোজ ব্যবহারকারীরা \r\nএকটি চরিত্র হিসাবে বিবেচনা করতে পারে যেহেতু জিনিসগুলি \r\r\n\nবোধগম্য হয় না বা এমনকি এমনকি কাজ করে না।

  • বাইটের মধ্যে সবচেয়ে সংক্ষিপ্ত নেটিভ প্রোগ্রাম (এন + এন এক)।


11
এটা কি সম্ভব?
সার্জে বোর্শ

77
এটি সম্পন্ন হওয়া অবধি সর্বদা অসম্ভব বলে মনে হচ্ছে - নেলসন ম্যান্ডেলা
আদনান

42
পছন্দ করুন
ডেনিস

8
দুর্ভাগ্যক্রমে এটি সীমিত পরিমাণে ভাষায়ই সম্ভব।
ম্যাথিউরক

2
@ আর কেপ নং, খুব বিভ্রান্ত বলে মনে হচ্ছে।
ক্যালভিনের

উত্তর:


203

জেলি , 12 বাইট

N + এন

“(ẹ+)‘FQṖṪỌv

এটি অনলাইন চেষ্টা করুন!

এন × এন

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

এটি অনলাইন চেষ্টা করুন!

এন ^ এন

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

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

জেলি বিভিন্ন স্ট্রিং আক্ষরিক বিভিন্ন ধরণের আছে; তাদের সব একটি দিয়ে শুরু । আক্ষরিক যদি একের বেশি থাকে তবে একটি স্ট্রিং অ্যারে ফিরে আসে এবং স্ট্রিংগুলি একে অপরের থেকে পৃথক করে।

উদাহরণস্বরূপ, “abc“def”ফলন ['abc', 'def']

আক্ষরিক শেষ চরিত্রের উপর নির্ভর করে (যে কোনওটি ”«»‘’যেখানে «বর্তমানে অ- বাস্তবায়িত রয়েছে), কোনও ব্যক্তি বিভিন্ন ধরণের আক্ষরিকের মধ্যে চয়ন করতে পারেন। এর জন্য আমরা জেলির কোড পৃষ্ঠাতে সংশ্লিষ্ট ইউনিকোড অক্ষরের পরিবর্তে কোড পয়েন্টগুলি পাই ।

উদাহরণস্বরূপ, “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 + এন

“(ẹ+)‘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.

এন × এন

““((ẹẹ++))‘‘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 অ্যারে, অ্যারে সদৃশ ইন্টিজার, এবং অক্ষর (যথাক্রমে) ছাড়া পরিবর্তন হবে না।

এন ^ এন

“““(((ẹẹẹ+++)))‘‘‘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
আমি একটি উত্তর আশা করেছিলাম, কারণ আপনি ছেলেরা এখানে যে কোনও কিছু সমাধান করতে পারে, তবে এটি হ'ল কিছু সত্যই ক্রেজি stuff আপনি একজন মাস্টার এবং আমি আপনার মহিমা অবাক।
নোভা

19
আমি মনে করি না যে আমি ডেনিসের কাছ থেকে এর আগে কোনও উত্তর দেখেছি যার ফলশ্রুতিতে আমি "কোনও উপায় নেই" ভাবতে শুরু করি না, তবে আস্তে আস্তে বোঝা যাচ্ছে যে ব্যাখ্যাটি পড়ে তিনি একরকম godশ্বর's
ম্যাজিক অক্টোপাস উর্ন

14
Upvote যোগ দিয়েছেন। কি দারুন.
ড্যানিয়েল আর

4
কোন উপায় নেই ... আপনি কত ঘন্টা গল্ফ করতে ব্যয় করেন?!?
tfrascaroli

16
@ ফ্যালকো আমি নিশ্চিত যে ডেনিস যখন পোস্ট করা হয়েছিল ঠিক তখনই ঘুমিয়ে ছিল। ;)
মার্টিন এন্ডার

87

> <> , 41 বাইট

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

এটি অনলাইনে ব্যবহার করে দেখুন: এন + এন , এন * এন , এন ^ এন । ধরে নেওয়া যায় যে এসটিডিন ইনপুট হ'ল একটি চর।

> <> একটি 2 ডি ভাষা, তাই আমরা এই শব্দটি ব্যবহার করতে পারি যে কোড শব্দার্থকগুলি বেশিরভাগ অপরিবর্তিত রয়েছে যদি আমরা নীচের দিকে নির্দেশগুলি চালিত করি - অতিরিক্ত খালি লাইনগুলি কেবল কোনও বিকল্প নেই। এটি ব্যতিক্রমী শর্তাধীন ট্রাম্পোলিন ?যা একটি মানকে পপ করে এবং পরবর্তী নির্দেশটি এড়ায় যদি মানটি না হয় তবে - অতিরিক্ত নিউলাইনগুলি ?noোকানো নো-অপ্সের কারণে বিশৃঙ্খলা করবে , তবে আমরা ?এর শেষে রেখে এটি পেতে পারি একটি কলাম এবং মোড়ক সুবিধা গ্রহণ।

কোন ক্রিয়াকলাপটি কার্যকর করা হবে তা নির্ধারণ করার জন্য, কীটি হ'ল 40.আইপিটি অবস্থানের জন্য টেলিপোর্ট করে (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 বাইট

নীচে বর্ণিত দুটি প্রস্তাবিত সমাধান রয়েছে: প্রচুর বাইটের প্রয়োজনীয় প্রশ্নের একটি সম্পূর্ণ সমাধান এবং দ্বিতীয় আংশিক সমাধান (কেবলমাত্র এন + এন এবং এন * এন অংশগুলি সমাধান করতে, কেবল 484 বাইটের প্রয়োজন), প্রতিটি আলাদা পদ্ধতি গ্রহণ করে এবং তার নিজস্ব কুল কৌশল সেট! :)

1. সম্পূর্ণ সমাধান (810147050 বাইট)

ব্যবহার TovTovTov(TOV='hi',SEP=','), TOVউপাদান জায়গায় অনুরূপ অক্ষর অনাক্রম্য হয় (উভয় "hihihi"এবং "hhiihhiihhii"তিন আছে "hi"তাদের মধ্যে গুলি, এবং সমস্ত TovTovTovবজায় রাখে অনেক কেমন TOVগুলি মধ্যে প্রদর্শিত SEPগুলি)।

যদি আমরা ব্যবহার করি SEP=', 'তবে পুরো প্রোগ্রামটি চরিত্রের নকল (যা দুর্দান্ত, তবে প্রশ্নের সমাধান করবে না) প্রতিরোধ করবে। সুতরাং আমরা ব্যবহার SEP=','

সুতরাং প্রোগ্রামটি "hihihi,hi"উদাহরণস্বরূপ, ইনট অ্যারের [3,1]সাথে "hhiihhiihhii,,hhii"সংকলন করে , যখন [3,0,1]এবং এর "hhiihhiihhii,,hhii"সাথে সংকলিত হয়েছিল [3,0,0,1]। এর অর্থ হ'ল কমান্ডগুলি সদৃশ হওয়ার পরে তাদের অর্থগুলি পরিবর্তন করে না, তবে সামগ্রিক দৈর্ঘ্যের সাথে অক্ষরের অনুলিপি পরিবর্তন হয়। নিচে সমাধান প্রোগ্রামের দৈর্ঘ্য জিজ্ঞাস্য এবং প্রিন্ট ব্যবহার করার সিদ্ধান্ত নেন এই ব্যবহার N+N, N*Nবা N^N

প্রস্তাবিত পূর্ণ সমাধান, ইনট অ্যারে হিসাবে হ'ল: [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...

২. কেবলমাত্র এন + এন এবং এন * এন প্রশ্নের সমাধান (484 বাইট)

ব্যবহার করে TovTovTov(TOV='1',SEP=', '), এই SEPবারগুলি সদৃশ প্রতিরোধী ( ",, "এখনও এটির মধ্যে কেবল একটি ", "রয়েছে), তাই নিম্নলিখিত প্রস্তাবিত সমাধানটিতে অক্ষর সদৃশতার পরেও সর্বদা এটিতে 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

সম্পর্কিত ইনট অ্যারে ( উপরের ৩৩ টি কমান্ডের প্রত্যেকটিতে গুলি) TOVএর সংখ্যা 1নিম্নরূপ:[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 অ্যারে (যে এন + এন গণনা করে ) যত্ন সহকারে ডিজাইন করা হয়েছিল যাতে কমান্ডগুলির অর্থ পরিবর্তনের পরে প্রোগ্রামটি এখনও বুদ্ধিমান হয়, তবে এন * এন গণনা করে । উদাহরণস্বরূপ, প্রথমটি 4(এটি TovTovTov"অক্ষরে রূপান্তরিত করার জন্য পরবর্তী বিকল্পটিকে" ascii কোড হিসাবে বিবেচনা করে "হিসাবে বোঝে) অক্ষরটির সদৃশ হয়ে যাওয়ার পরে পরিবর্তিত হয় 8, যা সম্পূর্ণ ভিন্ন কমান্ড (" প্রোগ্রাম কাউন্টারকে প্রথম পপড মান থেকে পরিবর্তন করুন) স্ট্যাক করুন, মানটি অবিলম্বে পপড হলে ")।


9

বেফুঞ্জ -98 , 38 বাইট

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

এটি অনলাইনে ব্যবহার করে দেখুন: এন + এন , এন * এন , এন ^ এন

এই প্রোগ্রামটি বাক্সের বাইরে কাজ করবে না কারণ কার্যকর করার শুরুতে স্ট্যাকের ইনপুট থাকা দরকার। নিম্নলিখিত কোডটি (তিনটি বাইট যুক্ত) দিয়ে প্রথম লাইনটি প্রতিস্থাপন করে এটি স্টিডিনের কাছ থেকে ইনপুট নেবে (যদিও এটি ট্রাইটিনলাইন.টনে কাজ করে না, দুঃখের সাথে):

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

এন = 2

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

এন = 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.