প্রাইমস অফ ম্যাপিং


19

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

ম্যাপিং

একটি সংখ্যা বিবেচনা করুন এন কারণের সঙ্গে যেখানে । তারপর:

উদাহরণ স্বরূপ:

বিধি

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

পরীক্ষার মামলা

  • 10: {{},{{}},{}}
  • 21: {{{}},{},{{}}}
  • 42: {{{}},{},{{}},{}}
  • 30030: {{{}},{{}},{{}},{{}},{{}},{}}
  • 44100: {{{{}}},{{{}}},{{{}}},{},{}}
  • 16777215: {{{{}}},{{}},{{}},{},{{}},{{}},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{{}}}
  • 16777213: পেস্টবিন

কমা ছাড়া একই আউটপুটটি কি এখনও ক্রম হিসাবে চিহ্নিতযোগ্য ?
ডেনিস

@ ডেনিস হ্যাঁ, আপনি বন্ধনী দ্বারা বলতে পারেন।
LegionMammal978

1 নম্বর সম্পর্কে
আকাংকা

ওহ, এটি {}}
আকাংকা

1
চান এই একটি গ্রহণযোগ্য আউটপুট ফরম্যাট হবে? সিজেএম খালি তালিকা এবং খালি স্ট্রিংগুলির মধ্যে পার্থক্য করে না, সুতরাং এটি কোনও নেস্টেড অ্যারের প্রতিনিধিত্ব করার প্রাকৃতিক উপায়।
ডেনিস

উত্তর:


1

পাইথ, 29 বাইট

L+'MhMtbmYhbL&JPby/LJf}TPTSeJ

প্রদর্শন

এটি একটি ফাংশন সংজ্ঞায়িত 'করে, যা পছন্দসই ম্যাপিং সম্পাদন করে।

একটি সহায়ক ফাংশন, yম্যাপিংটি পুনরাবৃত্তভাবে একটি প্রধান পচা দেওয়া সম্পাদন করে। বেস কেস এবং প্রাইম পচনটি সঞ্চালিত হয় '


5

সিজেম, 51 48 44 42 41 39 39 33 33 বাইট

{mf_W=)1|{mp},\fe=(0a*+{)J}%}:J

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

@ মার্টিনব্যাটনারকে 3 বাইট বন্ধ করে দেওয়ার জন্য ধন্যবাদ!

3 বাইট বন্ধ করে আরও 1 টির পথ সুগম করার জন্য @ পিটারটেলরকে ধন্যবাদ!

কমপক্ষে আমার কম্পিউটারে ফাইলটি ডাউনলোড করা প্রোগ্রাম চালানোর চেয়ে বেশি সময় নেয় ...

ইনপুট / আউটপুট

এটি একটি নামকৃত ফাংশন যা এসটিডিইএন থেকে পপ এবং পূর্ণসংখ্যা এবং বিনিময়ে একটি অ্যারে ধাক্কা দেয়।

যেহেতু সিজেএম খালি অ্যারে এবং খালি স্ট্রিংয়ের মধ্যে পার্থক্য করে না - একটি স্ট্রিং কেবলমাত্র একটি তালিকা যা কেবল অক্ষর ধারণ করে - তাই স্ট্রিং প্রতিনিধিত্বটি দেখতে এই রকম হবে:

[[""] "" [""] ""]

নিম্নলিখিত, নেস্টেড অ্যারে উল্লেখ

[[[]] [] [[]] []]

প্রতিপাদন

$ wget -q pastebin.com/raw.php?i=28MmezyT -O test.ver
$ cat prime-mapping.cjam
ri
  {mf_W=)1|{mp},\fe=(0a*+{)J}%}:J
~`
$ time cjam prime-mapping.cjam <<< 16777213 > test.out

real    0m25.116s
user    0m23.217s
sys     0m4.922s
$ diff -s <(sed 's/ //g;s/""/{}/g;y/[]/{}/' < test.out) <(tr -d , < test.ver)
Files /dev/fd/63 and /dev/fd/62 are identical

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

{                           }:J  Define a function (named block) J.
 mf                              Push the array of prime factors, with repeats.
   _W=                           Push a copy and extract the last, highest prime.
      )1|                        Increment and OR with 1.
         {mp},                   Push the array of primes below that integer.

                                 If 1 is the highest prime factor, this pushes
                                 [2], since (1 + 1) | 1 = 2 | 1 = 3.
                                 If 2 is the highest prime factor, this pushes
                                 [2], since (2 + 1) | 1 = 3 | 1 = 3.
                                 If p > 2 is the highest prime factor, it pushes
                                 [2 ... p], since (p + 1) | 1 = p + 2, where p + 1
                                 is even and, therefor, not a prime.

              \fe=               Count the number of occurrences of each prime
                                 in the factorization.

                                 This pushes [0] for input 1.

                  (              Shift out the first count.
                   0a*           Push a array of that many 0's.
                      +          Append it to the exponents.

                                 This pushes [] for input 1.

                       {  }%     Map; for each element in the resulting array:
                                   Increment and call J.


mf e=প্রশ্নটি স্যান্ডবক্সে থাকাকালীন আমি যখন স্যানিটি পরীক্ষাটি ছুঁড়েছিলাম তখন তার চেয়ে অনেক ভাল আমি খুঁজে পেয়েছি, তবে একটি উন্নতি আমি খুঁজে পেয়েছি যা আপনি ব্যবহার করেন নি তা হল দ্বিগুণ হিসাবে ম্যাপিং করা (0a*+- অর্থাৎ ri{}sa2*{mf_W=){mp},\fe=(0a*+0j\{)j}%*}j। এবং আরও অনেক বড় উন্নতি হয়েছে যা আমি আপনাকে কয়েক ঘন্টা 'হেডস্টার্ট চালু করব ...
পিটার টেলর

@ পিটারটেলর গল্ফ এবং ইঙ্গিতটির জন্য ধন্যবাদ
ডেনিস

হ্যাঁ, আউটপুট প্রতিনিধিত্ব পরিবর্তন করা আসলেই আরও বড় উন্নতি হয়েছিল। বেস কেস পরিচালনা করার আরও ভাল উপায় আছে, যা আমি কেবল সন্ধান করেছি, তবে আপনার সমাধানটি হারাতে আমাকে আপনার দুটি ধারণা ব্যবহার করতে হবে:{mf_W=)1|{mp},\fe=(0a*+{)J}%}:J
পিটার টেলর

@PeterTaylor এক ঐন্দ্রজালিক যে 1|। আবার ধন্যবাদ!
ডেনিস

2

গণিত, 88 বাইট

f@1={};f@n_:=f/@Join[1+{##2},1&~Array~#]&@@SparseArray[PrimePi@#->#2&@@@FactorInteger@n]

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