মোড-ফোল্ডগুলি সনাক্ত করুন


18

কার্য

F (x) = x% a 1  % a 2  %…% a k ফর্মের ফাংশন হিসাবে একটি মোড-ফোল্ডকে সংজ্ঞায়িত করুন , যেখানে a আমি ইতিবাচক পূর্ণসংখ্য এবং কে ≥ 0 । (এখানে, % হ'ল বাম-সহযোগী মডুলো অপারেটর))

N পূর্ণসংখ্যা y 0 ,…, y n − 1 এর একটি তালিকা দেওয়া , নির্ধারণ করুন যে সেখানে কোনও মোড-ফোল্ড f রয়েছে কিনা যাতে প্রতিটি y i  = f (i) থাকে

আপনার ফাংশন / প্রোগ্রামের জন্য আপনি যে কোনও দুটি আউটপুট Y এবং N বেছে নিতে এবং ঠিক করতে পারেন । যদি এরকম কোনও উপস্থিত থাকে তবে আপনাকে অবশ্যই সর্বদা Y / ফেরত পাঠাতে হবে ; যদি তা না হয় তবে আপনাকে অবশ্যই সর্বদা এন / প্রিন্ট করতে হবে । (এগুলি true/ false, বা 1/ 0, বা false/ true, ইত্যাদি হতে পারে ) আপনার উত্তরে এগুলি উল্লেখ করুন।

বাইটস মধ্যে সংক্ষিপ্ততম জমা জয়।

উদাহরণ

F (x) = x% 7% 3 সংজ্ঞায়িত করুন । এর মানগুলি শুরু হয়:

|   x  | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ...
| f(x) | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | ...

সুতরাং, 0 1 2 0 1 2 0 0 1 2আমাদের সমাধানের ইনপুট হিসাবে দেওয়া , আমরা Y প্রিন্ট করব , কারণ এই চটি ক্রমটি তৈরি করে। যাইহোক, 0 1 0 1 2ইনপুট হিসাবে প্রদত্ত , আমরা এন মুদ্রণ করব , যেহেতু কোনও সে ক্রমটি তৈরি করে না ।

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

আউটপুট Y হলে প্রদত্ত সূত্রগুলি কেবলমাত্র রেফারেন্সের জন্য; আপনি অবশ্যই কোনও মুহুর্তে এগুলি মুদ্রণ করবেন।

0 1 2 3 4 5              Y    (x)
1                        N
0 0 0                    Y    (x%1)
0 1 2 0 1 2 0 0 1 2      Y    (x%7%3)
0 0 1                    N
0 1 2 3 4 5 6 0 0 1 2    Y    (x%8%7)
0 1 2 0 1 2 0 1 2 3      N
0 2 1 0 2 1 0 2 1        N
0 1 0 0 0 1 0 0 0 0 1    Y    (x%9%4%3%2)

কোন সময় বা স্মৃতি সীমা আছে?
ডেনিস

2
আমি কি পরিবর্তে সত্যবাদী মান এবং মিথ্যা মানগুলি আউটপুট করতে পারি?
ফুটো নুন

2
পছন্দ করুন আমি সত্যবাদী-মিথ্যা এর বড় ভক্ত নই; আমি স্পষ্টভাবে এটিকে আরও উদ্দেশ্যমূলক বিকল্প হিসাবে চেষ্টা করছি যা এখনও আপনাকে স্বাধীনতা দেয়।
লিন

@ লিন এটা কি আমি বা আপনি এখনও এটি স্থির করেন নি?
লিকি নুন

স্মৃতি / সময়ের সীমাবদ্ধতা সম্পর্কে: আমি মনে করি না যে আমি নিজেই চ্যালেঞ্জের সাথে যুক্ত করব, তবে আমি বাইটের সংক্ষিপ্ত উত্তরের জন্য একটি অনুগ্রহ চালাতে পারি যা আমার পরীক্ষার কেসগুলির কিছুটা যুক্তিসঙ্গত সময়ের সাথে উত্তর দিতে পারে।
লিন

উত্তর:


7

পাইথ, 14 বাইট

}Qm%M+RdUQy_Sl

রিটার্নস True/False। এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

}Qm%M+RdUQy_SlQ   implicit Q (=input) at the end
             lQ   length of input list
            S     create the list [1, 2, ..., len]
           _      reverse => [len, ..., 2, 1]
          y       generate all subsets (these are all possible mod-folds)
  m               map each subset d to:
        UQ           take the range [0, 1, ..., len-1]
     +Rd             transform each number into a list by prepending it to d
                     e.g. if mod-fold = [7,3], than it creates:
                        [[0,7,3], [1,7,3], [2,7,3], [3,7,3], ...]
   %M                fold each list by the modulo operator
                  this gives all possible truthy sequences of length len
}Q                so checking if Q appears in the list returns True or False

পাইথ, 11 বাইট

q%M.e+k_tx0

@ ফেরসমের ধারণার ভিত্তিতে । আমি প্রকৃতপক্ষে সাবসেট জেনারেশনের জন্য শূন্য-সূচকগুলি ব্যবহার করার কথা ভেবেছিলাম, তবে বুঝতে পারিনি যে সমস্ত শূন্য সূচকগুলি ইতিমধ্যে সমাধান হতে হবে।


4

পাইথন 3, 239 218 বাইট

from itertools import*
lambda z:z in[[eval(''.join([str(l)]+['%'+str(i[::-1][k])for k in range(len(i))]))for l in range(len(z))]for i in(i for j in(combinations(range(1,len(z)+1),i+1)for i in range(len(z)))for i in j)]

একটি বেনামি ফাংশন যা কোনও তালিকার ইনপুট নেয় zএবং ফেরত দেয় TrueবাFalse জন্য Yএবং N

এটি @ জাকুবের উত্তরের অনুরূপ একটি পদ্ধতি ব্যবহার করে এবং এটি মূলত একটি নিষ্ঠুর শক্তি হলেও খুব দ্রুত চলে।

from itertools import*               Import everything from the Python module for
                                     iterable generation
lambda z                             Anonymous function with input list z
combinations(range(1,len(z)+1),i+1)  Yield all sorted i+1 length subsets of the range
                                     [1,len(z)]...
...for i in range(len(z))            ...for all possible subset lengths
(i for j in(...)for i in j)          Flatten, yielding an iterator containing all possible
                                     mod-fold values as separate lists
...for i in...                       For all possible mod-fold values...
...for k in range(len(i))            ...for all mod-fold values indices k...
...for l in range(len(z))            ...for all function domain values in [0,len(z)-1]...
[str(l)]+['%'+str(i[::-1][k])...]    ...create a list containing each character of the
                                     expression representing the function defined by the
                                     mod-fold values (reversed such that the divisors
                                     decrease in magnitude) applied to the domain value...
 eval(''.join(...))                  ...concatenate to string and evaluate...
 [...]                               ...and pack all the values for that particular
                                     function as a list
 [...]                               Pack all lists representing all functions into a list
 ...:z in...                         If z is in this list, it must be a valid mod-fold, so
                                     return True. Else, return False

আইডিয়নে চেষ্টা করে দেখুন


4

পাইথন 2, 69 বাইট

f=lambda a,i=0:i/len(a)or a[i]in[a[i-1]+1,i,0][i<=max(a)::2]*f(a,i+1)

ব্যবহারসমূহ True / False

একটি মোড-ফোল্ডেবল সিরিজটির বৈশিষ্ট্যটির উত্তরটি প্রথমটির চেয়ে কম আকর্ষণীয় বলে প্রমাণিত হয়েছে। এটি 0, 1, ..., এম - 1, 0, 1, ... এক্স 1 , 0, 1, ..., এক্স 2 , ... ফর্মের একটি ধারাবাহিক যা আমি, 0 এর জন্য <= x আমি <এম। এই জাতীয় ক্রমটি প্রথম বাদ দিয়ে অ্যারেতে শূন্যের সমস্ত (0-ভিত্তিক) সূচকগুলির মোড চেইন দ্বারা উত্পাদিত হতে পারে।


3

জেলি , 19 15 14 বাইট

LṗLUZ’1¦%/sLe@

রিটার্নস 1 truthy জন্য, 0 falsy জন্য।এটি অনলাইন চেষ্টা করুন!

অ্যালগরিদম হল ও (এন এন ) , যেখানে এন তালিকার দৈর্ঘ্য, এটি বেশিরভাগ পরীক্ষার ক্ষেত্রে ধীর এবং স্মৃতি-নিবিড় করে তোলে।

একটি পরিবর্তিত সংস্করণ - যা দ্বিতীয়টির পরিবর্তে Lএকটি 5- এর সাথে ব্যবহার করা যেতে পারে can সমস্ত পরীক্ষার কেস যাচাই । নোট করুন যে এই পরিবর্তিত সংস্করণটি নির্বিচারে দীর্ঘ তালিকার জন্য কাজ করবে না।

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

LṗLUZ’1¦%/sLe@  Main link. Argument: A (array of integers)

L L             Yield the length l of A.
 ṗ              Take the l-th Cartesian power of [1, ..., l], i.e., construct
                all arrays of length l that consist of elements of [1, ..., l].
   U            Upend/reverse each array. This way, the first l arrays start
                with [1, ..., l], as do the next l arrays, etc.
    Z           Zip/transpose the array of arrays.
     ’1¦        Decrement the first array to map [1, ..., l] to [0, ..., l - 1].
        %/      Reduce the array's columns by modulus/residue.
          sL    Split the result into chunks of length l.
            e@  Verify if A belongs to the resulting array.

আপনি একটি ব্যাখ্যা যোগ করতে পারেন? যে কেউ জেলি ব্যবহার করেন নি (এখনও), এটি কীভাবে কাজ করে তা আমার কোনও ধারণা নেই।
স্টিভেন এইচ।

আমি গল্ফিংয়ের সাথে সাথে একটি যুক্ত করব। আমি প্রথমে চেষ্টা করতে চাইছে এখনও কিছু জিনিস আছে।
ডেনিস

আমি (ছেড়ে দেওয়া এবং) একটি ব্যাখ্যা যুক্ত করেছি।
ডেনিস

3

জাভাস্ক্রিপ্ট (ES6), 98 বাইট

a=>a.every((n,i)=>n?n<(l+=p==i)&&n==p++:p=1,l=p=1)

@ ফেয়ারসামের আবিষ্কারে স্যুইচ করে 48 বাইট সংরক্ষণ করা হয়েছে। nঅ্যারেতে প্রদত্ত মানটি হয় শূন্য হয়, এক্ষেত্রে পরবর্তী ভবিষ্যদ্বাণীটি p1 হয়, বা এটি পরবর্তী ভবিষ্যদ্বাণীটির সমান হয়, যার ক্ষেত্রে pবৃদ্ধি হয়। আমরা দৈর্ঘ্য পরিমাপ lতুলনা করে প্রাথমিক ক্রম pথেকে i, যেমন nআবশ্যক সবসময় কম হওয়া lসব সময়ে।


2

পাইথন 2, 103 99 বাইট

f=lambda l,r:r==x or l and f(l-1,[t%l for t in r])|f(l-1,r)
x=input();l=len(x);print+f(l,range(l))

ছাপে 1 truthy এবং 0 falsy জন্য। আইডিয়নে এটি পরীক্ষা করুন ।

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