অ্যান্ড্রয়েড লক স্ক্রিন


25

ইন্ট্রো

আপনি একটি দীর্ঘ টেবিলের শেষে বোর্ডের ঘরে বসে আছেন। আপনি চারপাশে তাকান এবং টিম কুক, অ্যাপল পরিচালনা পর্ষদ, স্টিভ জবসের ভূত এবং জ্যাক ডোনাঘি দেখতে পাবেন। অ্যাপল এই সভাটি ডেকেছে কারণ তারা বুঝতে পেরেছে যে অ্যান্ড্রয়েড লক স্ক্রিনটি কত শীতল এবং তারা তাদের 1-আপ করতে চায়। ঘস্ট স্টিভ চিৎকার করে উঠার সাথে সাথে রুমের সবাই আপনাকে তাকাচ্ছে, "আমাকে সাহায্য করুন, কোডগল্ফ ম্যান! আপনিই আমার একমাত্র আশা!"

সমস্যাটি

অ্যান্ড্রয়েড লক স্ক্রিনটি 3 x 3 গ্রিডের বিন্দু যা একটি বিন্দু থেকে অন্য বিন্দুতে একটি আঙুল সোয়াইপ করে একটি পথ তৈরি করে সংযুক্ত হতে পারে। একটি পাসওয়ার্ডকে যে কোনও সম্ভাব্য পথ হিসাবে বিবেচনা করা হয় যাতে কোনও সংখ্যক বিন্দু অন্তর্ভুক্ত থাকে এবং কোনও সংখ্যক বিন্দু বাদ দেয়। (প্রকৃত ফোনে, পথটি অবশ্যই কমপক্ষে 4 ডট দীর্ঘ হতে হবে this গুণ ভাল!

নিয়মাবলী:

  • একটি শূন্য বিন্দুর পথ কোনও পাসওয়ার্ড নয়, তবে একটি 1 ডট পাথ
  • একটি পথ নিজেই অতিক্রম করতে পারে
  • কোনও বিন্দু সেই বিন্দুটি অন্তর্ভুক্ত না করে সরাসরি কোনও বিন্দুর উপরে ক্রস করতে পারে না
  • একটি বিন্দু শুধুমাত্র একবার ব্যবহার করা যেতে পারে
  • যে পথগুলি ঘূর্ণন অনুসারে অভিন্ন, একই পাসওয়ার্ড নয়
  • যে পথগুলি অভিন্ন তবে বিপরীতে অর্ডার করা হয়েছে একই পাসওয়ার্ড নয়
  • উদাহরণস্বরূপ, 1 থেকে 9 পর্যন্ত নম্বরযুক্ত বিন্দুর সাথে 3x3 গ্রিডে:

    1 2 3
    4 5 6
    7 8 9
    

    কিছু বৈধ পাথ হ'ল:

    1
    3
    7,2,3
    1,5,9,2
    1,8,6,5,4
    4,2,3,5,6,7,8,9
    5,9,6,4
    

    এবং কিছু অবৈধ পাথ হ'ল:

    1,3
    1,9,5
    7,5,4,7
    4,6
    

    আপনার ইনপুটটি তিনটি সংখ্যা হবে:

    (M,N,d)
    

    যেখানে গ্রিডটি এম x এন এবং ডি পথটির দৈর্ঘ্য

    1 <= M <= 16
    1 <= N <= 16
    1 <= d <= M * N
    

    আপনার প্রোগ্রাম বা ফাংশনটি কমা দ্বারা পৃথক করা স্ট্রিং হিসাবে ইনপুট দেওয়া হবে এবং এটি অবশ্যই সেই দৈর্ঘ্যের সম্ভাব্য পাসওয়ার্ডের সংখ্যা ফেরত পাঠাবে। উদাহরণ স্বরূপ:

    Input:  2,2,1 
    Output: 4
    Input:  2,2,2
    Output: 12
    Input:  7,4,1
    Output: 28
    

    স্ট্যান্ডার্ড কোড গল্ফ নিয়ম প্রয়োগ, সংক্ষিপ্ততম কোড জয়!

    //If I've made a mistake or the rules are unclear, please correct me!
    

    2
    ইনপুটটি কি কমা-বিযুক্ত স্ট্রিং বা তিনটি পৃথক পরামিতি?
    ব্যবহারকারী 80551

    1
    @ user80551 প্রসঙ্গের ভিত্তিতে, আমি মনে করি এটি কোনও প্রোগ্রামের ইনপুট হলে এটি একটি স্ট্রিং হবে, বা যদি ফাংশনটি কল করতে ব্যবহৃত হয় তবে পৃথক পরামিতি।
    ব্যবহারকারী 12205

    1
    @ প্লাটাট্যাট আপনি দয়া করে ব্যবহারকারী 80551 এর প্রশ্নের উত্তর দিতে পারেন, কারণ কোডটি ডিজাইন করা এটি সত্যই গুরুত্বপূর্ণ
    রোননডেক্স

    3
    আপনার সিদ্ধান্ত নেওয়া উচিত যে কোনও প্রদত্ত সমাধানের সংকলন এবং প্রয়োগের সময় উভয়ের জন্য কোনও সময়সীমা থাকবে কিনা। এই ধরনের সীমা ছাড়াই, এমন একটি প্রোগ্রাম লেখা সহজ যা তাত্ত্বিকভাবে, 256!16 x 16 গ্রিডের বিন্দুগুলির সমস্ত অনুমোদনের মধ্যে কোনটি বৈধ আনলক প্যাটার্ন উপস্থাপন করে। অনুশীলনে, এই জাতীয় প্রোগ্রাম কখনই শেষ হবে না।
    ডেনিস

    3
    তবে আমি বলেছিলাম যে সমস্যাটি অ্যান্ড্রয়েড লক সিস্টেমের ভিত্তিতে ছিল ... তবে আমি কেন অ্যান্ড্রয়েড লক সিস্টেমের মতো একই নিয়মগুলি ব্যবহার করব না?
    প্লাটাট্যাট

    উত্তর:


    14

    পাইথন - 170 বাইট

    from fractions import*
    p=lambda m,n,d,l=0,s=set():d<1or sum([p(m,n,d-1,i,s|{i})for i in range(m*n)if not(s and(s&{i}or set(range(l,i,abs(i-l)/gcd(i%n-l%n,i/n-l/n)))-s))])
    

    আমি বুঝতে পারি যে বন্ধনীগুলির ভিতরে sum([...])কঠোরভাবে প্রয়োজনীয় নয়, তবে সেগুলি অন্তর্ভুক্ত না করার জন্য একটি বৃহত পারফরম্যান্স জরিমানা রয়েছে।

    সমস্ত 3x3s এর আউটপুট:

    for i in range(4, 10):
      print p(3, 3, i)
    

    উত্পাদন:

    1624
    7152
    26016
    72912
    140704
    140704
    

    পরীক্ষার / নিশ্চিতকরণের উদ্দেশ্যে, 4x5 বোর্ডের জন্য প্রথম 6 টি মান:

    20
    262
    3280
    39644
    459764
    5101232
    

    4x5 যাচাই করার জন্য একটি আকর্ষণীয় কেস কারণ এটিতে 2x2, 3x3 এবং 2x4 পেগ জাম্প রয়েছে।


    সংক্ষিপ্ত বর্ণনা

    সাধারণভাবে, এটি ক্রমযুক্ত ছাঁটাই সহ একটি বিস্তৃত অনুসন্ধান। উদাহরণস্বরূপ, কারণ p(3, 3, 4)1624, p(3, 3, 5)নিখরচায় সমস্ত 15120 যাচাই না করে কেবল 8120 সম্ভাবনাগুলি পরীক্ষা করবে Most বেশিরভাগ যুক্তি শর্তে রয়েছে:

    if not(s and(s&{i}or set(range(l,i,abs(i-l)/gcd(i%n-l%n,i/n-l/n)))-s))
    

    সরল ইংরাজীতে, এটি হিসাবে বোঝা যায়:

    If no pegs have been used yet
         OR
       the target peg has not yet been used
         AND
       each of the pegs directly between the target peg and the
       current peg (a.k.a. "jumped over") have already been used
    

    2
    আপনি এখানে ব্যাখ্যা করতে পারেন বিশ্বের এখানে কি চলছে?
    22uʎs

    1
    আপনি sতালিকার পরিবর্তে সেট হয়ে কয়েকটি বাইট সংরক্ষণ করতে পারেন । আমি বন্ধনীগুলি ছাড়ার বৃহত পারফরম্যান্স পেনাল্টিটি দেখছি না; কেন এমন শাস্তি হবে?
    ব্যবহারকারী 2357112

    1
    @ ব্যবহারকারী 2357112 এক জেনারেটরের উপর সংক্ষিপ্তসার করছে, অন্যটি তালিকার উপরে। সিপিথনের সাথে, আপনি ঠিক বলেছেন, খুব বেশি পার্থক্য নেই (প্রায় 20% ধীর)। পিপিওয়াইয়ের সাথে, এটি 5 গুণ বেশি ধীর।
    প্রিমো

    1
    @ ব্যবহারকারী 2357112 শেষ পর্যন্ত sসেট হিসাবে সংজ্ঞা দিয়ে আপনি কী বোঝাতে চেয়েছেন তা আমি দেখতে পাচ্ছি । আজকের জন্য আমার অজগর পাঠ: {i}হিসাবে মূল্যায়ন set([i])। আমি একটি সিনট্যাক্স ত্রুটি আশা করতে হবে। একটি সেট একটি আইটেম যোগ করার পরে হয়ে যায় s|{i}, এবং এটি i in sদ্বারা প্রতিস্থাপন করতে পারবেন s&{i}
    প্রিমো
    আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
    Licensed under cc by-sa 3.0 with attribution required.