বাইজিক ফাংশন ℤ → ℤⁿ


23

(সমস্ত পূর্ণসংখ্যার সেট) থেকে (উদাহরণস্বরূপ পরিচয় ফাংশন) পর্যন্ত দ্বিপ্রবাহমূলক ফাংশন তৈরি করা তুচ্ছভাবে সম্ভব ।জেডজেডজেড

from থেকে (2 টি সংখ্যার সমস্ত জোড়ের সেট; এবং এর কার্টেসিয়ান পণ্য ) একটি বাইজিক ফাংশন তৈরি করাও সম্ভব । উদাহরণস্বরূপ, আমরা 2D বিমানের পূর্ণসংখ্যার প্রতিনিধিত্বকারী জালটি নিতে পারি, 0 টির বাইরে থেকে একটি সর্পিল আঁকতে পারি এবং সর্পিলের সাথে দূরত্ব হিসাবে জোড় সংখ্যক জোড় এনকোড করি যখন এটি সেই বিন্দুটি ছেদ করে।জেড 2 জেড জেডZZ2Zজেড

সর্পিল

(একটি ফাংশন যা প্রাকৃতিক সংখ্যার সাথে এটি করে এটি একটি জুড়ি ফাংশন হিসাবে পরিচিত )

প্রকৃতপক্ষে, এই দ্বিপ্রদীপক কার্যগুলির একটি পরিবার রয়েছে:

(এক্স):জেডজেড

চ্যালেঞ্জ

(যেখানে ইতিবাচক পূর্ণসংখ্যার) ফাংশনের একটি পরিবারকে সংজ্ঞা দিন যে বাইজেক্টরূপে পূর্ণসংখ্যার টিপলসের জন্য পূর্ণসংখ্যার মানচিত্র করে ।k f k ( x ) কে(এক্স)(এক্স)

আপনার , ইনপুট এবং দেওয়া উচিত, ।এক্স এফ কে ( এক্স )এক্স(এক্স)

এটি , সুতরাং সংক্ষিপ্ততম বৈধ উত্তর (বাইটগুলিতে পরিমাপ করা) জয়ী।

বিশেষ উল্লেখ

  • যে কোনও পরিবার যতক্ষণ না উপরের মানদণ্ডটি পূরণ করে ততক্ষণ ব্যবহার করা যেতে পারে।(এক্স)
  • আপনার ফাংশন পরিবার কীভাবে কাজ করে তার একটি বিবরণ যুক্ত করার জন্য, পাশাপাশি ফাংশনের বিপরীত গণনা করার জন্য একটি স্নিপেটকে উত্সাহিত করা হয় (এটি আপনার বাইট গণনায় অন্তর্ভুক্ত নয়)।
  • বিপরীত ফাংশনটি যদি আপত্তিজনক না হয় তবে এটি ঠিক আছে, যতক্ষণ আপনি এটি প্রমাণ করতে পারবেন ততক্ষণ কার্যটি দ্বিপ্রস্থ is
  • আপনি আপনার ভাষার জন্য স্বাক্ষরিত পূর্ণসংখ্যা এবং স্বাক্ষরিত পূর্ণসংখ্যার তালিকার জন্য উপযুক্ত উপস্থাপনা ব্যবহার করতে পারেন, তবে আপনাকে অবশ্যই আপনার ক্রিয়াকলাপের ইনপুটগুলিকে আনবাউন্ড করার অনুমতি দিতে হবে।
  • আপনার কেবল 127 অবধি মানগুলি সমর্থন করতে হবে।

পূর্ণসংখ্যার পরিবর্তে kএবং এর xপরিবর্তে স্ট্রিং সংস্করণ নেওয়া কি ঠিক ?
জংহওয়ান মিন

ইনপুট নম্বরগুলি উপস্থাপন করে জংহওয়ানমিন স্ট্রিংগুলি ভাল।
Esolanging ফল

উত্তর:


19

এলিস , 14 12 বাইট

/O
\i@/t&Yd&

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

বিপরীত ফাংশন (গল্ফড নয়):

/o     Q
\i@/~~\ /dt&Z

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

ব্যাখ্যা

অ্যালিসের মধ্যে এবং 2 এর মধ্যে একটি অন্তর্নির্মিত বাইজিকশন রয়েছে , যা Y(আনপ্যাক) এবং এর বিপরীতমুখী Z (প্যাক) দিয়ে গণনা করা যেতে পারে । হস্তক্ষেপের ব্যাখ্যা দস্তাবেজের একটি অংশ এখানে দেওয়া হয়েছে:

বেশিরভাগ ব্যবহারের ক্ষেত্রে হস্তক্ষেপের বিবরণ সম্ভবত অপ্রাসঙ্গিক। মূল বিষয়টি হ'ল এটি ব্যবহারকারীকে একটিতে দুটি পূর্ণসংখ্যার এনকোড করতে দেয় এবং পরে দুটি পূর্ণসংখ্যার আবার বের করতে দেয়। বার বার প্যাক কমান্ড প্রয়োগ করে, পূর্ণ তালিকাগুলি বা পূর্ণসংখ্যার গাছগুলি একক সংখ্যায় (যদিও বিশেষত স্মৃতিশক্তি-কার্যকর পদ্ধতিতে নয়) সংরক্ষণ করা যায়। প্যাক অপারেশন দ্বারা গণনা করা ম্যাপিং একটি বাইজিক ফাংশন 2 → ℤ (যেমন এক থেকে এক ম্যাপিং)। প্রথমে, পূর্ণসংখ্যা {..., -2, -1, 0, 1, 2, ...} প্রাকৃতিক সংখ্যায় (শূন্য সহ) ম্যাপ করা হয় like ..., 3, 1, 0, 2, 4 এর মতো , ...}(অন্য কথায়, negativeণাত্মক পূর্ণসংখ্যাগুলি বিজোড় প্রাকৃতিককে ম্যাপ করা হয় এবং অ-নেতিবাচক পূর্ণসংখ্যাগুলি এমনকি প্রাকৃতিকতে ম্যাপ করা হয়)। দুটি প্রাকৃতিক সংখ্যার পরে ক্যান্টোর জুড়ি ফাংশনটির মাধ্যমে একটিতে ম্যাপ করা হয় , যা পূর্ণসংখ্যার গ্রিডের প্রথম কোয়াড্রেন্টের ত্রিভুজগুলির সাথে প্রাকৃতিকগুলি লেখে। বিশেষ করে, {(0,0), (1,0), (0,1), (2,0), (1,1), (0,2), (3,0), ...} হয় ম্যাপ করা {0, 1, 2, 3, 4, 5, 6, ...} । ফলস্বরূপ প্রাকৃতিক সংখ্যাটি পূর্বের বাইজিকের বিপরীতটি ব্যবহার করে পূর্ণসংখ্যায় ফিরে ম্যাপ করা হয়। আনপ্যাক কমান্ড এই ম্যাপিংয়ের ঠিক বিপরীত গণনা করে।

উপরোক্ত আলোচনা উল্লিখিত, আমরা মানচিত্রে এই আনপ্যাক অপারেশন ব্যবহার করতে পারেন করার পাশাপাশি। প্রাথমিক পূর্ণসংখ্যায় এটি প্রয়োগ করার পরে, আমরা আবার ফলাফলটির দ্বিতীয় পূর্ণসংখ্যাটি আনপ্যাক করতে পারি, যা আমাদের তিনটি পূর্ণসংখ্যার একটি তালিকা দেয়। সুতরাং কে -1 অ্যাপ্লিকেশনগুলির ফলাফল হিসাবে Yআমাদের কে পূর্ণসংখ্যা দিন।

আমরা Zশেষ থেকে তালিকা প্যাক করে বিপরীতমুখী গণনা করতে পারি ।

সুতরাং প্রোগ্রাম নিজেই এই কাঠামো আছে:

/O
\i@/...d&

এটি এমন একটি প্রোগ্রামের কেবলমাত্র একটি প্রাথমিক টেম্পলেট যা দশমিক পূর্ণসংখ্যার একটি চলক সংখ্যাকে ইনপুট হিসাবে পাঠ করে এবং ফলাফল হিসাবে একটি পরিবর্তনশীল সংখ্যা মুদ্রণ করে। সুতরাং আসল কোডটি আসলেই সঠিক:

t   Decrement k.
&   Repeat the next command k-1 times.
Y   Unpack.

একটি বিষয় যা আমি উল্লেখ করতে চাই তা হ'ল "কেন এলিস একটি" ℤ ℤ 2 বাইজিকেশনটির জন্য অন্তর্নির্মিত থাকবে , সেই গল্ফিং ভাষার অঞ্চল নয় "? অ্যালিসের বেশিরভাগ ওয়েইডার বিল্ট-ইনগুলির মতো, মূল কারণ অ্যালিসের নকশা নীতিটি যে প্রতিটি কমান্ডের দুটি অর্থ রয়েছে, একটি কার্ডিনাল (পূর্ণসংখ্যা) মোডের জন্য এবং একটি অর্ডিনাল (স্ট্রিং) মোডের জন্য এবং এই দুটি অর্থ কোনওভাবেই সম্পর্কিত হতে হবে কার্ডিনাল এবং অর্ডিনাল মোড এই অনুভূতিটি যে তারা মিরর ইউনিভার্স যেখানে জিনিসগুলি একই ধরণের হয় তবে ভিন্ন। এবং প্রায়শই আমি যে দুটি মোড যুক্ত করতে চেয়েছিলাম তার মধ্যে একটির জন্য একটি কমান্ড ছিলাম এবং তারপরে এটি যুক্ত করতে অন্য কোন কমান্ডটি খুঁজে বের করতে হয়েছিল।

ক্ষেত্রে Yএবং Zপূরণবাচক মোড প্রথম: আমি দুটি স্ট্রিং (জিপ) বইয়ের পাতার মাঝে মাঝে এবং তাদের আবার আলাদা (আনজিপ) এর একটি ফাংশন আছে চেয়েছিলেন। আমি কার্ডিনাল মোডে ক্যাপচার করতে চেয়েছিলাম তার গুণটি ছিল দুটি থেকে একটি পূর্ণসংখ্যা গঠন করা এবং পরে দুটি পূর্ণসংখ্যার আবার বের করতে সক্ষম হওয়া, যা এই জাতীয় দ্বিঘাতকে প্রাকৃতিক পছন্দ করে তোলে।

আমি আরও বুঝতে পেরেছিলাম যে এটি গল্ফিংয়ের বাইরে খুব কার্যকর হবে কারণ এটি আপনাকে একটি সম্পূর্ণ তালিকা বা এমনকি পূর্ণসংখ্যার গাছ এমনকি মেমরির একক ইউনিটে (স্ট্যাক উপাদান, টেপ সেল বা গ্রিড সেল) সংরক্ষণ করতে দেয়।


সর্বদা হিসাবে দুর্দান্ত ব্যাখ্যা
লুইস মেন্ডো

অ্যালিস ডক্স অনুসন্ধান করা Yএবং Zএটি আসলে আমাকে এই চ্যালেঞ্জটি পোস্ট করতে প্ররোচিত করেছিল (আমি এটি সম্পর্কে কিছুক্ষণ ভাবছিলাম, তবে এটি আমাকে স্মরণ করিয়ে দিয়েছিল)।
Esolanging ফল

11

পাইথন, 96 93 বাইট

def f(k,x):
 c=[0]*k;i=0
 while x:v=(x+1)%3-1;x=x//3+(v<0);c[i%k]+=v*3**(i//k);i+=1
 return c

ইনপুট সংখ্যা রূপান্তর দ্বারা নীতিগতভাবে এই কাজ xকরার জন্য সুষম তিন , এবং তারপর trits (তিন সংখ্যার) চেয়ে কম গুরুত্বপূর্ণ প্রথমে একটি রাউন্ড-রবিন ফ্যাশন বিভিন্ন স্থানাঙ্ক মধ্যে বিতরণ। তাই জন্য k=2উদাহরণস্বরূপ, যে এমনকি স্থান trit অবদান হবে xতুল্য, এবং প্রত্যেক বিজোড় স্থান trit অবদান হবে yতুল্য। কারণ k=3আপনি প্রথম, চতুর্থ এবং সপ্তম লেখ (ইত্যাদি ...) অবদান রাখতে চান x, যখন দ্বিতীয়, পঞ্চম এবং অষ্টম অবদান রাখে yএবং তৃতীয়, ষষ্ঠ ও নবম অবদান রাখে z

উদাহরণস্বরূপ, এর সাথে দেখা k=2যাক x=35। সুষম তিন সালে 35হয় 110T(উইকিপিডিয়া নিবন্ধের স্বরলিপি যেখানে ব্যবহার Tএকটি প্রতিনিধিত্ব করে -1অঙ্ক)। ট্রিটগুলি বিভক্ত করা স্থানাঙ্কের জন্য 1T(প্রথম এবং তৃতীয় লিখন, ডান থেকে গণনা) এবং xস্থানাঙ্কের জন্য 10(দ্বিতীয় এবং চতুর্থ ট্রিট) দেয় y। প্রতিটি সমন্বয়কে দশমিক দশকে রূপান্তর করা, আমরা পাই 2, 3

অবশ্যই, আমি গল্ফ কোডটিতে একবারে পুরো সংখ্যাটি ভারসাম্য ত্রিনিরিতে রূপান্তর করছি না। আমি কেবলমাত্র একবারে একটি ত্রিটি গণনা করছি ( vপরিবর্তনশীলতে), এবং এর মানটি যথাযথ স্থানাঙ্কের সাথে সরাসরি যুক্ত করছি।

এখানে একটি নিরবচ্ছিন্ন বিপরীত কার্য রয়েছে যা স্থানাঙ্কের একটি তালিকা নেয় এবং একটি নম্বর দেয়:

def inverse_f(coords):
    x = 0
    i = 0
    while any(coords):
        v = (coords[i%3]+1) % 3 - 1
        coords[i%3] = coords[i%3] // 3 + (v==-1)
        x += v * 3**i
        i += 1
    return x

আমার fকাজটি সম্ভবত তার অভিনয়টির জন্য উল্লেখযোগ্য। এটি কেবল O(k)মেমরি ব্যবহার করে এবং O(k) + O(log(x))ফলাফলগুলি খুঁজতে সময় নেয় , সুতরাং এটি খুব বড় ইনপুট মানগুলির সাথে কাজ করতে পারে। ব্যবহার করে দেখুন f(10000, 10**10000)উদাহরণস্বরূপ, এবং আপনি একটি উত্তর প্রায় কাছাকাছি অবিলম্বে (এক্সপোনেন্ট একটি অতিরিক্ত শূন্য যোগ করার তাই পাবেন xহয় 10**100000করে তোলে আমার পুরোনো পিসিতে 30 সেকেন্ড বা তার নেওয়া)। বিপরীতমুখী ফাংশনটি তত দ্রুত নয়, বেশিরভাগ কারণে যে এটি হয়ে গেলে এটি বলা শক্ত। (এটি প্রতিটি পরিবর্তনের পরে সমস্ত স্থানাঙ্ক স্ক্যান করে, তাই এটি O(k*log(x))সময়ের মতো কিছু লাগে )। এটি সম্ভবত দ্রুত হওয়ার জন্য অনুকূলিত করা যেতে পারে তবে এটি ইতিমধ্যে স্বাভাবিক পরামিতিগুলির পক্ষে পর্যাপ্ত দ্রুত।


আপনি যখন
লুপটির

ধন্যবাদ, আমি ভুল করে ভেবেছিলাম যে একটি লুপের মধ্যে এবং ;একক লাইনে বিবৃতি শৃঙ্খলাবদ্ধ করে কিছুটা দ্বন্দ্ব রয়েছে ।
ব্ল্যাককিংহিট

9

হুশ , 10 বাইট

§~!oΠR€Θݱ

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

বিপরীত ফাংশনটিও 10 বাইট।

§o!ȯ€ΠRΘݱ

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

ব্যাখ্যা

ফরোয়ার্ড দিকনির্দেশ:

§~!oΠR€Θݱ  Implicit inputs, say k=3 and x=-48
        ݱ  The infinite list [1,-1,2,-2,3,-3,4,-4,..
       Θ    Prepend 0: [0,1,-1,2,-2,3,-3,4,-4,..
 ~    €     Index of x in this sequence: 97
§    R      Repeat the sequence k times: [[0,1,-1,..],[0,1,-1,..],[0,1,-1,..]]
   oΠ       Cartesian product: [[0,0,0],[1,0,0],[0,1,0],[1,1,0],[-1,0,0],[0,0,1],..
  !         Index into this list using the index computed from x: [-6,1,0]

উল্টো পথে:

§o!ȯ€ΠRΘݱ  Implicit inputs, say k=3 and y=[-6,1,0]
     ΠRΘݱ  As above, k-wise Cartesian product of [0,1,-1,2,-2,..
   ȯ€       Index of y in this sequence: 97
§o!         Index into the sequence [0,1,-1,2,-2,.. : -48

কার্টেসিয়ান পণ্য অন্তর্নির্মিত Πঅসীম তালিকার জন্য দুর্দান্ত আচরণ করে, প্রতিটি কে- টিপলকে একবারে গণনা করে ।


[[0,1,-1,..],[[0,1,-1,..],[[0,1,-1,..]]এই অংশ অনুমিত হয় [[0,1,-1,..],[0,1,-1,..],[0,1,-1,..]]?
এরিক দি আউটগল্ফার

@ এরিকথ আউটগলফার উম্ম হ্যাঁ, এখনই ঠিক করা হয়েছে।
Zgarb

এটা সুন্দর. জে প্রোগ্রামার হিসাবে, আপনি কি জানেন যে এই জাতীয় অলস তালিকার সমাধানটিকে জে রূপান্তর করার কোনও ভাল উপায় আছে যা তাদের সমর্থন করে না? ^:^:_ধরণের সমাধানগুলি সাধারণত আরও জটিল হয়ে ওঠে ...
জোনা

@ জোনাঃ আমি নিশ্চিত নই আপনি সমস্ত কে- টিপলগুলির অ্যারের গণনা করার চেষ্টা করতে i: xপারেন এবং এটিকে পরম মানগুলির যোগফল অনুসারে বাছাই করতে পারেন, তারপরে সূচকটি। ধারণাটি হ'ল এই অ্যারেগুলি হ'ল একটি "অসীম অ্যারে" এর উপসর্গ যা সমস্ত কে- টিপলস ধারণ করে ।
Zgarb

7

ওল্ফ্রাম ভাষা (গণিত) , 61 বাইট matic

SortBy[Range[-(x=2Abs@#+Boole[#>=0]),x]~Tuples~#2,#.#&][[x]]&

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

(পূর্ণসংখ্যা এবং ইনপুট হিসাবে tuple দৈর্ঘ্য পরে লাগে।)

ইনভার্স:

If[OddQ[#],#-1,-#]/2&@Tr@Position[SortBy[Range[-(x=Ceiling@Norm@#),x]~Tuples~Length@#,#.#&],#]&

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

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

ধারণাটি সোজা: আমরা পূর্ণসংখ্যার ইনপুটটিকে ইতিবাচক পূর্ণসংখ্যায় রূপান্তর করি (0,1,2,3, ... ম্যাপিংয়ের মাধ্যমে 1,3,5,7, ... এবং -1, -2, -3, ... থেকে 2,4,6, ...) এবং তারপরে সমস্ত কে- টিপলসগুলিতে সূচক , উত্স থেকে দূরত্ব অনুসারে বাছাই করা এবং তারপরে ম্যাথামেটিকার ডিফল্ট টাই-ব্রেকিং।

কিন্তু আমরা অসীম তালিকা ব্যবহার করতে পারবেন না, তাই যখন আমরা খুঁজছেন সেটি এন -tuple, আমরা কেবল উৎপন্ন সীমার মধ্যে পূর্ণসংখ্যার -tuples {- এন , ..., এন }। এই যথেষ্ট হতে নিশ্চিত করা হয়, কারণ এন ক্ষুদ্রতম আদর্শ দ্বারা -tuple আদর্শ কম হয়েছে এন , এবং আদর্শ সব tuples এন বা কম এই তালিকায় অন্তর্ভুক্ত করা হয়।

বিপরীতের জন্য, আমরা কেবল কে- টিপলসগুলির একটি দীর্ঘ পর্যাপ্ত তালিকা তৈরি করি, সেই তালিকায় প্রদত্ত কে- টিপলটির অবস্থানটি সন্ধান করি এবং তারপরে " ভাঁজটিকে ইতিবাচক পূর্ণসংখ্যায়" ক্রিয়াকলাপটি উল্টে ফেলি ।


2
ইনপুট দিয়ে চালানো [15, 5]আমার পিসি ক্র্যাশ করেছে ...
JungHwan Min

2
এটা হবে। নীতিগতভাবে, অ্যালগরিদম কোনও কিছুর জন্যই কাজ করে তবে আপনার ক্ষেত্রে এটি 5 -31, .., 31 range পরিসীমা থেকে সমস্ত 5-টিউপল তৈরি করে এবং পরে 31 তম গ্রহণ করে কাজ করে, তাই এটি বরং স্মৃতি-নিবিড়।
মিশা লাভরভ

3

জে, 7 বাইট

#.,|:#:

এই বিব্রতকরভাবে সহজ জে কোড

একটি খুব সাধারণ জুড়ি ফাংশন (বা, ফাংশন টিউপলিং) হ'ল প্রতিটি সংখ্যার বাইনারি সম্প্রসারণের অঙ্কগুলি কেবল ইন্টারলাইভ করা। সুতরাং, উদাহরণস্বরূপ (47, 79)এইভাবে যুক্ত করা হবে:

1_0_0_1_1_1_1
 1_0_1_1_1_1
-------------
1100011111111

বা, 6399. স্পষ্টতই, আমরা তুচ্ছভাবে কোনও এন-টিপলকে সাধারণ করতে পারি।

আসুন পরীক্ষা করে দেখুন কীভাবে এটি ক্রিয়া দ্বারা ক্রিয়া কাজ করে।

#:অ্যান্টি-বেস টু, যখন একাকীভাবে ব্যবহৃত হয় এটি একটি সংখ্যার বাইনারি সম্প্রসারণ প্রদান করে। #: 47 79ফলাফল দেয়:

0 1 0 1 1 1 1
1 0 0 1 1 1 1

|:হ'ল ট্রান্সপোজ অপারেটর, যা কেবল একটি অ্যারে ঘোরায়। প্রদানের ফলাফল ঘোরানো #: 47 79:

0 1
1 0
0 0
1 1
1 1
1 1
1 1

যখন রূপকভাবে ব্যবহার করা হয়, তখন কি রেভেল ,অপারেটর, এটি একটি টেবিল থেকে 1-মাত্রিক তালিকা তৈরি করে:

0 1 1 0 0 0 1 1 1 1 1 1 1 1

পরিশেষে, #.বাইনারি সম্প্রসারণকে আবার রূপান্তর করে আমাদের ফলাফল দেয় 6339

এই সমাধানটি পূর্ণসংখ্যার যে কোনও স্ট্রিংয়ের জন্য কাজ করবে।


7
এটি নেতিবাচক সংখ্যার জন্য কীভাবে কাজ করে?
নিল

2

পার্ল 6 , 148 বাইট

my@s=map ->\n{|grep {n==abs any |$_},(-n..n X -n..n)},^Inf;my&f={$_==1??+*!!do {my&g=f $_-1;my@v=map {.[0],|g .[1]},@s;->\n{@v[n>=0??2*n!!-1-2*n]}}}

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

Ungolfed:

sub rect($n) {
    grep ->[$x,$y] { abs($x|$y) == $n }, (-$n..$n X -$n..$n);
}

my @spiral = map { |rect($_) }, ^Inf;

sub f($k) {
    if ($k == 1) {
        -> $_ { $_ }
    } else {
        my &g = f($k-1);
        my @v = map -> [$x, $y] { $x, |g($y) }, @spiral;
        -> $_ { $_ >= 0 ?? @v[2*$_] !! @v[-1-2*$_] }
    }
}

ব্যাখ্যা:

  • rect($n)একটি সহায়ক ফাংশন যা স্থানাঙ্ক থেকে এক আয়তক্ষেত্রের প্রান্তে অবিচ্ছেদ্য পয়েন্টগুলির স্থানাঙ্ক তৈরি (-$n,$n)করে ($n, $n)

  • @spiral 0 থেকে শুরু করে ক্রমবর্ধমান আকারের আয়তক্ষেত্রগুলির প্রান্তে অবিচ্ছেদ্য পয়েন্টগুলির একটি অলস, অসীম তালিকা।

  • f($k)একটি ফাংশন প্রদান করে যা পূর্ণসংখ্যা থেকে পূর্ণসংখ্যার-টিপলস পর্যন্ত একটি $kস্রোত।

যদি $kহয় 1, fপরিচয় ম্যাপিং ফেরত দেয় -> $_ { $_ }

অন্যথায়, &gপূর্ণসংখ্যার $k-1পূর্বে-পূর্বে পূর্ণসংখ্যার থেকে পুনরাবৃত্তভাবে প্রাপ্ত ম্যাপিং ।

তারপরে, আমরা @spiralউত্স থেকে বেরিয়ে এসেছি এবং প্রতিটি বিন্দুতে $kএক্স-কোঅর্ডিনেট এবং gওয়াই-কোঅর্ডিনেটের সাথে কল করার সমতল ফলাফল নিয়ে একটি- টিপল গঠন করি । এই অলসভাবে উত্পন্ন ম্যাপিংটি অ্যারেতে সংরক্ষণ করা হয় @v

@v$kসূচক 0 দিয়ে শুরু হওয়া সমস্ত- টিপল রয়েছে , সুতরাং সূচকটিকে theণাত্মক পূর্ণসংখ্যায় প্রসারিত করতে আমরা কেবলমাত্র সংখ্যার ইতিবাচক ইনপুটগুলি এবং বিজোড় সংখ্যায় নেতিবাচক ইনপুটগুলি ম্যাপ করি। একটি ফাংশন (সমাপ্তি) ফেরত দেওয়া হয় যা @vএইভাবে উপাদানগুলির সন্ধান করে ।


2

জাভাস্ক্রিপ্ট, 155 বাইট

f=k=>x=>(t=x<0?1+2*~x:2*x,h=y=>(g=(v,p=[])=>1/p[k-1]?v||t--?0:p.map(v=>v&1?~(v/2):v/2):[...Array(1+v)].map((_,i)=>g(v-i,[...p,i])).find(u=>u))(y)||h(y+1))(0)

সুন্দর সংস্করণ:

k => x => {
  // Map input to non-negative integer
  if (x > 0) t = 2 * x; else t = 2 * -x - 1;
  // we try to generate all triples with sum of v
  g = (v, p = []) => {
    if (p.length === k) {
      if (v) return null;
      if (t--) return null;
      // if this is the t-th one we generate then we got it
      return p;
    }
    for (var i = 0; i <= v; i++) {
      var r = g(v-i, [...p, i]);
      if (r) return r;
    }
  }
  // try sum from 0 to infinity
  h = x => g(x) || h(x + 1);
  // map tuple of non-negative integers back
  return h(0).map(v => {
    if (v % 2) return -(v + 1) / 2
    else return v / 2;
  });
}
  • প্রথমে, আমরা একে অপরের সমস্ত অ-নেতিবাচক পূর্ণসংখ্যার মানচিত্র তৈরি করি:
    • যদি এন> 0 হয় তবে ফলাফল = এন * 2
    • অন্যথায় ফলাফল = -n * 2 - 1
  • দ্বিতীয়ত, আমরা কে-দৈর্ঘ্যের অ-নেতিবাচক পূর্ণসংখ্যার সাথে সমস্ত টিপলকে অর্ডার দিই:
    • সমস্ত উপাদানের যোগফল গণনা করুন, ছোটটি প্রথমে আসে
    • সমষ্টি যদি সমান হয় তবে বাম থেকে ডানে তুলনা করুন, ছোটটি প্রথমে আসে
    • ফলস্বরূপ, আমরা কে অ-নেতিবাচক পূর্ণ সংখ্যাসূচক টিউপলগুলিতে সমস্ত অ-নেতিবাচক পূর্ণসংখ্যার মানচিত্র পেয়েছি
  • অবশেষে, প্রথম ধাপে একই সূত্র সহ সমস্ত পূর্ণসংখ্যাকে দ্বিতীয় ধাপে প্রদত্ত টুপলে নন-নেগেটিভ পূর্ণসংখ্যার মানচিত্র

আমার মনে হয় x<0?~x-x:x+x2 বাইট সাশ্রয়
নিল

2

ওল্ফ্রাম ভাষা (গণিত) , 107 বাইট by

(-1)^#⌈#/2⌉&@Nest[{w=⌊(√(8#+1)-1)/2⌋;x=#-w(w+1)/2,w-x}~Join~{##2}&@@#&,{2Abs@#-Boole[#<0]},#2-1]&

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

বিপরীত, 60 বাইট

(-1)^#⌈#/2⌉&@Fold[+##(1+##)/2+#&,2Abs@#-Boole[#<0]&/@#]&

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

ব্যাখ্যা:

জেড -> এন0 এর মাধ্যমে f(n) = 2n if n>=0 and -2n-1 if n<0

এন0 -> জুটি ফাংশনের বিপরীত হয়ে N0 ^ 2

N0 -> N0 ^ k আমাদের দৈর্ঘ্য না পাওয়া পর্যন্ত উপরের বামতম সংখ্যায় বারবার প্রয়োগ করুন k

N0 ^ k -> জেড ^ কে মাধ্যমে f(n) = (-1)^n * ceil(n/2), উপাদান অনুসারে


গণিত, 101 বাইট

(-1)^#⌈#/2⌉&@Nest[{a=#~IntegerExponent~2+1,#/2^a+1/2}~Join~{##2}&@@#&,{2Abs@#+Boole[#<=0]},#2-1]&

উপরের মতো (এন 0 এর পরিবর্তে এন ব্যবহার করে) তবে বাইজেকশনটির বিপরীতটি ব্যবহার করে f: N ^ 2 -> N এর মাধ্যমে f(a, b) = 2^(a - 1)(2b - 1)


আপনি বলতে চাইছেন ... এর জন্য কোনও গাণিতিক অন্তর্নির্মিত নেই (যখন অ্যালিসের আছে)? আমি নির্বাক.
জয়সি

1

জাভাস্ক্রিপ্ট, 112 বাইট

k=>x=>(r=Array(k).fill(''),[...`${x<0?2*~x+1:2*x}`].map((c,i,s)=>r[(s.length-i)%k]+=c),r.map(v=>v&1?~(v/2):v/2))
  1. অ-নেতিবাচক রূপান্তর
  2. (n * k + i) তম সংখ্যাটি আই-তম নম্বর পর্যন্ত
  3. ফিরে রূপান্তর

পুনঃটুইট করবেন না হারমানলাউনস্টাইন
tsh

আমার মনে হয় x<0?~x-x:x+x2 বাইট সাশ্রয়
নীল

-5 বাইট ব্যবহার করে [...BT${x<0?~x-x:x+x}BT].reverse().map((c,i)=>r[i%k]+=c),(@ নীল এর কাছে ক্রেডিট x<0?~x-x:x+x)। এটি প্রথমে অতিরিক্ত প্যারামিটারের প্রয়োজনীয়তা এড়িয়ে যাওয়ার .reverse()পরিবর্তে ব্যবহৃত হয় । অস্থায়ী অ্যারেটি আবার ব্যবহার না করায় পিছনে ফিরে যাওয়ার দরকার নেই। (আমি এটি পরীক্ষা করেছি না তবে এটি সম্ভবত কাজ করা উচিত)(s.length-i)s.map
হারমান এল

আরেকটি বাইট প্রতিস্থাপন সংরক্ষণ করা যাবে .fill('')সঙ্গে .fill(0), যেহেতু একটি শূন্য (অন্তত যখন সাফারি পরীক্ষিত নয়) কোনো পার্থক্য করে তোলে
হারমান এল

@ হারমানলাউনস্টাইন আপনি কি চেষ্টা করেছেন .fill`` ? এটি অন্য কয়েকটা বাইট সংরক্ষণ করতে পারে।
নিল


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.