একটি চেইন নাম্বার


15

কিছু ইতিবাচক পূর্ণসংখ্যার চেইন বিভাজ্যতা নামে একটি সম্পত্তি রয়েছে দেখানো যেতে পারে একটি সংখ্যা দ্বারা n দ্বারা শৃঙ্খল-বিভাজ্য হওয়ার জন্য  এটি অবশ্যই তিনটি প্রয়োজনীয়তা পূরণ করবে:

  1. প্রতিটি অঙ্ক তার  অনুসরণ করে এমন এন সংখ্যা দ্বারা গঠিত সংখ্যা ভাগ করে ।

    উদাহরণস্বরূপ, সংখ্যা 7143 চেইন-বিভাজ্য 2 কারণ 7 ভাগ 14 এবং 1 ভাগ 43. এটা হয় না চেইন-বিভাজ্য দ্বারা কারণ 3 7 143 ভাগ করে না।

  2. বিভাজনের জন্য বিবেচনায় নেওয়া প্রতিটি অনুচ্ছেদে অবশ্যই অগ্রণী শূন্য থাকতে হবে না।

    উদাহরণস্বরূপ, 14208 সংখ্যাটি 2 দ্বারা চেন-বিভাজ্য নয় কারণ 08 এর একটি শূন্য শূন্য রয়েছে। এটি অবশ্য 3 দ্বারা চেইন-বিভাজ্য, কারণ 208 এর প্রথম শূন্য নেই।

  3. সংখ্যার সমস্ত অঙ্ক অবশ্যই অনন্য হতে হবে।

উদাহরণস্বরূপ, 14280 সংখ্যাটি 2, 3 এবং 4 দ্বারা চেইন-বিভাজ্য, যদি আমার চেইন বিভাজন সম্পর্কে ব্যাখ্যা অস্পষ্ট হয় তবে মন্তব্যে প্রশ্ন জিজ্ঞাসা করুন।

ইনপুট

প্রোগ্রামের ইনপুটটিতে একটি একক পূর্ণসংখ্যা থাকে n, তার পরে একটি স্থান থাকে, তারপরে এমন একটি সংখ্যায় যার নির্দিষ্ট অঙ্কগুলি আন্ডারস্কোর দ্বারা প্রতিস্থাপিত হয়। উদাহরণস্বরূপ, নিম্নলিখিতটি একটি সম্ভাব্য ইনপুট:

3 6__2__4508

n ১ এর চেয়ে বেশি হবে The সংখ্যাটি কখনই পুরোপুরি আন্ডারস্কোর হবে না। আপনার নিশ্চয়তা নেই যে প্রথম সংখ্যাটি আন্ডারস্কোর নয়। প্রথম সংখ্যা 0. হবে না এন বড় বা সংখ্যায় ডিজিটের সংখ্যার সমান হতে হবে।

আউটপুট

আউটপুট সংখ্যা, সংখ্যা সঙ্গে পূর্ণসংখ্যার দ্বারা প্রতিস্থাপিত যেমন যে ফলে সংখ্যা চেইন-বিভাজ্য হয় এন । যদি চেইন-বিভাজ্য সংখ্যাটি সম্পূর্ণ করার একাধিক উপায় বিদ্যমান থাকে তবে যে কোনও একটি আউটপুট হিসাবে ব্যবহৃত হতে পারে। যদি কোন সংখ্যার এটি সম্পন্ন করতে পারবেন, আউটপুট no answer। উদাহরণস্বরূপ, উদাহরণ ইনপুট এর আউটপুট হতে পারে:

6132794508

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম কোডটি জয়ী।


আমি ধরে নিই যে nnumber সংখ্যার অঙ্কের সংখ্যার চেয়ে বড় বা সমান হলে সংখ্যাটি শৃঙ্খলাবদ্ধ?
জন ডিভোরাক

@ জ্যান ডিভোরাক এন কখনই ইনপুটটিতে সংখ্যার তুলনায় সমান বা তার বেশি হবে না। এটি সর্বদা আরও ছোট হবে। আমি এটি প্রতিফলিত করতে সম্পাদনা করব।
সোমরস

আমাদের কি একটি পূর্ণ প্রোগ্রাম লিখতে হবে, বা কোনও ফাংশন যথেষ্ট?
জন ডিভোরাক

@ মার্টিন হ্যাঁ চরিত্র সীমা প্যাডিং।
সোমরস

@ জন ডিভোরাক একটি সম্পূর্ণ প্রোগ্রাম।
সোমরস

উত্তর:


5

বাশ + কোর্টিলস, 197 বাইট

for i in $(eval printf '%s\\n' ${2//_/{0..9\}}|grep -vP '(\d).*\1');{
for((f=d=0;d<${#i}-$1;d++));{
((${i:d+1:1}==0||10#${i:d+1:$1}%${i:d:1}))&&f=
}
[ $f ]&&echo $i&&((c++))
}
((c))||echo no answer

আউটপুট:

$ ./chain.sh 3 714_
7140
$ ./chain.sh 2 7141
no answer
$ ./chain.sh 2 14208
no answer
$ ./chain.sh 3 14208
14208
$ ./chain.sh 2 1_208
no answer
$ ./chain.sh 3 1_208
14208
$ ./chain.sh 2 6__2__4508
no answer
$ ./chain.sh 3 6__2__4508
6132794508
$

ব্যাখ্যা

  • প্যারামিটার বিস্তৃতি ${2//_/{0..9\}}সমস্ত আন্ডারস্কোরের সাথে প্রতিস্থাপন করে {0..9}
  • ফলস্বরূপ স্ট্রিং evalএই সমস্ত ধনুর্বন্ধক এক্সপ্রেশন প্রসারিত করতে সম্পাদনা করা হয়।
  • grepসব সম্ভাবনা যেখানে কোনো পুনরাবৃত্তি ডিজিটের আছে আউট যেটি।
  • তারপরে প্রতিটি অবশিষ্ট নম্বর পরীক্ষা করা হয়, 1 এবং 2 শর্তের জন্য ডিজিট বাই বাই ডিজিট।

2

পাইথন - 239 267

from itertools import*
T=raw_input()
n=int(T[0])
N=len(T)-2
J=''.join
for i in permutations('0123456789',N):
 if all([S in[I,'_']for S,I in zip(T[2:],i)])*all([i[j]>'0'<i[j+1]and int(J(i[j+1:j+n+1]))%int(i[j])<1for j in range(N-n)]):print J(i);exit()
print'no answer'

ধীর, তবে সংক্ষিপ্ত। কেবলমাত্র প্রদত্ত প্যাটার্নের সাথে প্রতিটি সম্ভাব্য এন-অঙ্কের অনুক্রমের তুলনা করুন এবং সমস্ত প্রয়োজনীয়তা পরীক্ষা করুন। আমি এটি শুধুমাত্র 7 বা 8 ডিজিট দিয়ে পরীক্ষা করেছি। 9 বা 10 এর জন্যও কাজ করা উচিত তবে বেশ কিছুক্ষণ সময় লাগবে।

সম্পাদনা: আমি অনুপস্থিত ডিফল্ট আউটপুট "কোনও উত্তর নেই" যুক্ত করেছি।


2

গাণিতিক রুবি, 349 224 229 বাইট

n=$*[0].to_i
r='no answer'
(?0..?9).to_a.permutation($*[1].count'_'){|q|s=$*[1]
q.map{|d|s=s.sub'_',d}
c=s.chars
(t=1
c.each_cons(n+1){|c|e=c.shift.to_i
(t=!t
break)if e<1||c[0]==?0||c.join.to_i%e>0}
(r=s)if t)if c==c.uniq}
$><<r

এটি একটি খুব নিষ্পাপ বাস্তবায়ন। আমি আন্ডারস্কোরগুলির সংখ্যা গণনা করি এবং তারপরে প্রতিটি দৈর্ঘ্যের সমস্ত ডিজিটাল অনুক্রমের একটি তালিকা তৈরি করি, যাতে প্রতিটি সম্ভাব্য সংমিশ্রণটি জোর করে। এটি বৃহত সংখ্যক আন্ডারস্কোরের জন্য ভয়াবহভাবে সঞ্চালন করবে, তবে এটি কোড গল্ফ এবং দ্রুততম কোড নয়। :)

সম্পাদনা করুন: ম্যাথমেটিকা ​​থেকে এটি পোর্ট করা হয়েছে। মূল সংস্করণটির সম্পাদনা ইতিহাস দেখুন।

সম্পাদনা করুন: স্থির লিডিং আন্ডারস্কোর ক্ষেত্রে।


টিপলস (চরিত্রের গণনা উপেক্ষা করে) এর পরিবর্তে অনুমতিগুলি ব্যবহার করা উচিত নয়?
ডেভিডসি

@ ডেভিডকারারহর কেন? আমি সেখানে প্রচুর সংমিশ্রণ মিস করব, তাই না?
মার্টিন এন্ডার

সংখ্যার প্রতিটি অঙ্ক অবশ্যই অনন্য হতে হবে। Tuplesএই সীমাবদ্ধতা চাপায় না। Permutationsউইল, প্রদত্ত ইনপুট সেটে কোনও পুনরাবৃত্ত অঙ্ক নেই provided এবং আপনি কেবলমাত্র সেই অঙ্কগুলিকেই অনুমতি দিতে পারেন যা এখনও ব্যবহৃত হয়নি। (যদিও, আবারও এটি আপনার কোড দীর্ঘায়িত করতে পারে))
ডেভিডসি

@ ডেভিডকারারহর ওহহ, আমি স্বতন্ত্রতার প্রয়োজনীয়তা উপেক্ষা করেছি। আমাকে তখন অভ্যন্তরীণ লুপে যুক্ত করা দরকার, এক্ষেত্রে আমি পাশাপাশি আটকে থাকতে পারি Tuplesকারণ এটি খাটো।
মার্টিন এন্ডার

@ ডেভিডকারারহর ঠিক করেছেন।
মার্টিন এণ্ডার

1

জাভা, 421

class C{static int n;public static void main(String[]a){n=new Short(a[0]);f(a[1]);System.out.print("no answer");}static void f(String s){if(s.contains("_"))for(int i=0;i<=9;i++)f(s.replaceFirst("_",i+""));else{for(int i=1;i<s.length()-n+1;){String t=s.substring(i,i+n);if(t.charAt(0)<49||new Long(t)%new Long(s.substring(i-1,i++))>0||s.chars().distinct().count()<s.length())return;}System.out.print(s);System.exit(0);}}}

কম গল্ফড, ব্যাখ্যা সহ:

class C {

    static int n;

    public static void main(String[] a) {
        n = new Short(a[0]);
        f(a[1]);
        System.out.print("no answer");
    }

    /**
     * This method is called recursively, each time with
     * another underscore replaced by a digit, for all possible digits.
     * If there is a solution, the method prints it and exits the program.
     * Otherwise, it returns.
     */
    static void f(String s) {
        if (s.contains("_")) {
            for (int i = 0; i <= 9; i++) {
                f(s.replaceFirst("_", i + ""));
            }
        } else {
            for (int i = 1; i < s.length() - n + 1;) {
                String t = s.substring(i, i + n);       // on each substring...
                if (                                    // test for the three rules
                    t.charAt(0) < 49 ||
                    new Long(t) % new Long(s.substring(i - 1, i++)) > 0 ||
                    s.chars().distinct().count() < s.length()
                ) {
                    return;            // a rule was broken
                }
            }
            System.out.print(s);       // if we made it this far, it's a success!
            System.exit(0);
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.