"গ্রিডটি পূরণ করুন" সমস্যা


36

সাধারণ নিয়ম কিন্তু তুচ্ছ তুচ্ছ অ্যালগরিদম সহ একটি চ্যালেঞ্জ। :-)

কার্য

স্থান-বিভাজিত পূর্ণসংখ্যার আকারে ইনপুট নিন:

N A B S

যেখানে এন হ'ল 2 ডি বর্গ ম্যাট্রিক্সের পাশের দৈর্ঘ্য এ এবং বি সমেতের মধ্যে স্বতন্ত্র সংখ্যা (পূর্ণসংখ্যার) দিয়ে পূর্ণ। এই ম্যাট্রিক্সের প্রতিটি সারি এবং কলামের জন্য যোগফল সর্বদা এক রকম: এস (অন্য কথায়, ম্যাট্রিক্সটি একটি আধা-যাদু বর্গ)।

বিঃদ্রঃ:

সমস্ত সংখ্যা ইতিবাচক are ব্যতিক্রম এ, যা 0 হতে পারে।

উদাহরণ

জন্য

3 1 10000 2015

একটি বৈধ সমাধান হবে

এখানে চিত্র বর্ণনা লিখুন

জন্য

8 1 300 500

একটি বৈধ সমাধান হবে

এখানে চিত্র বর্ণনা লিখুন

আউটপুট

আপনার আউটপুটটি ASCII টেবিল হওয়া উচিত। উপরের প্রথম উদাহরণের উদাহরণ:

 384  159 1472
1174  499  342
 457 1357  201

ফাঁকা স্থান দ্বারা প্যাড ডান প্রান্তিক পূর্ণসংখ্যার। প্রতিটি কলামের প্রস্থটি সেই কলামের বৃহত্তম পূর্ণসংখ্যার প্রস্থ।

স্কোরিং

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


1
আমরা কী এ এবং বি এর মধ্যে এলোমেলো সংখ্যা তৈরি করার অনুমতি দিচ্ছি যতক্ষণ না তারা সঠিকভাবে যোগ হয় এবং অনন্য হয়?
lirtosiast

শুধু চেক করতে, A, B, এবং Nনেতিবাচক হতে পারে?
xnor

2
আসলে, আমি বলছি না যে এটিই সেরা সমাধানটি আমি নিয়ে আসতে পারি, আমি বলছি এটি সবচেয়ে কমতম হতে পারে।
lirtosiast

3
@ লুইসেমেন্ডো আপনাকে কাজ অনুসারে একটি নমুনা আউটপুট উত্পন্ন করতে হবে। যদি আপনি কোনও প্রাণঘাতী বলের মাধ্যমে আপনার জীবদ্দশায় এটি পরিচালনা করতে পারেন তবে আমি মুগ্ধ হব। :-)। আমি এটিকে বাতিল করতে পারি, তবে এটি খুব ঝাপসা হবে, যেহেতু সর্বাধিক জনপ্রিয় সমাধান (যা জিএ) এখনও এলোমেলোভাবে জড়িত। এছাড়াও যখন কেউ ইতিমধ্যে সমাধানে কাজ করতে পারে তখন আমি নিয়মগুলি পরিবর্তন করতে চাই না।
mınxomaτ

1
@ মিনমোম্যাট আপনার সমস্ত তিনটি যুক্তি খুব ভাল পয়েন্ট :-)
লুইস মেন্ডো

উত্তর:


19

সিজেম, 119 91 বাইট

q~:M;),>:R;(:L{{R{ML)d/-Y#)mr}$L/L<2{{M1$:+-+}%z}*:U:+__O|=R*-}gU{:s_:,:e>f{Se[}}%zSf*N*}M?

এটি একটি কার্যকরভাবে সঠিক, অ-নিরস্তকর পদ্ধতির।

আমার ডেস্কটপে, দ্বিতীয় পরীক্ষার কেসটি সাধারণত 10 মিনিটেরও কম সময়ে শেষ হয়।

প্রথম কেসটি তাত্ক্ষণিকভাবে শেষ হয়। সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

নমুনা রান

$ cjam grid.cjam <<< '8 1 300 500'
77  66  37 47  56  46 86  85
63 102  70 72  49  54 81   9
62  69  58 57  71  17 48 118
64  65  67 87  53  44 80  40
73  60  55 89  51  76 84  12
68  59  28 78  74  38 50 105
61  75  52 43 125  83 42  19
32   4 133 27  21 142 29 112

ধারণা

সময় সীমা ছাড়াই, আমরা কোনও বৈধ স্কোয়ার না পাওয়া পর্যন্ত এলোমেলোভাবে স্কোয়ারগুলি তৈরি করতে পারি। এই পদ্ধতির দুটি ধারণাটি যুক্ত করে এই ধারণাটি তৈরি করে:

  • সিউডো-এলোমেলোভাবে পার্শ্ব দৈর্ঘ্যের N এর বর্গক্ষেত্র উত্পন্ন করার পরিবর্তে , আমরা পাশের দৈর্ঘ্য N-1 এর বর্গক্ষেত্র উত্পন্ন করি , একটি N × (N-1) আয়তক্ষেত্র তৈরি করতে একটি কলাম যুক্ত করি যার সারিগুলিতে S থাকে , তারপরে একটি সারি একটি বর্গ গঠন করে পাশের দৈর্ঘ্য N যার কলামগুলিতে যোগফল এস

    যেহেতু সমস্ত কলামের উপাদানগুলির যোগফল NS হবে এবং প্রথম এন -1 সারিগুলির উপাদানের যোগফল (এন -1) এস হবে , সুতরাং শেষ সারিটিতে যোগফল এস হবে

    তবে, এই প্রক্রিয়াটি একটি অবৈধ ম্যাট্রিক্স উত্পন্ন করতে পারে, যেহেতু শেষ সারির এবং কলামের সমস্ত উপাদান অনন্য হবে বা [A ... B] এর পরিসরে পড়বে এমন কোনও গ্যারান্টি নেই ।

  • [এ ... বি] এবং এলোমেলোভাবে সমানভাবে পাশের দৈর্ঘ্যের এন -1 এর বর্গাকারটি অনন্য পূর্ণসংখ্যার চয়ন করা অনেক দীর্ঘ সময় নেয়। পূর্ববর্তী বুলেট পয়েন্টে বিস্তারিতভাবে প্রক্রিয়াটি প্রয়োগ করার পরে আমাদের কোনওভাবে স্কোয়ারগুলিকে অগ্রাধিকার দিতে হবে যার পাশের দৈর্ঘ্যের N এর বৈধ বর্গক্ষেত্র হওয়ার উচ্চতর সম্ভাবনা রয়েছে ।

    প্রদত্ত প্রতিটি সারি ও কলাম একটি সমষ্টি আছে যে এস , তার উপাদানের একটি গড় আছে S / n । সুতরাং, সেই গড়ের আরও বেশি উপাদান বাছাই করা আমাদের সম্ভাবনা বাড়িয়ে তুলবে।

    প্রত্যেকের জন্য আমি[একটি ... বি] , আমরা সিউডো-এলোমেলোভাবে মধ্যে একটি ভাসমান বাছাই 0 এবং (আমি - S / n) 2 + 1 টি এবং সাজানোর উপাদান [একটি ... বি] বাছাই করা ভাসে দ্বারা। আমরা প্রথম এন 2 রাখি নম্বর রাখি এবং সেগুলি একটি স্কোয়ারে পড়ার ক্রমে রাখি।

    প্রতিটি পদক্ষেপে 0 এবং (আই - এস / এন) 2 + 1 এর মধ্যে সমস্ত আসল সংখ্যার পুরোপুরি অভিন্ন বিতরণ ধরে নেওয়া , সমস্ত স্কোয়ারের বাছাইয়ের অ-শূন্য সম্ভাবনা থাকে, যার অর্থ প্রক্রিয়াটি শেষ পর্যন্ত শেষ হবে।

কোড

q~          e# Read all input from STDIN and evaluate it.
:M;         e# Save "S" in M and discard it from the stack.
),>:R;      e# Transform "A B" into [A ... B], save in R and discard.
(:L         e# Save "N - 1" in L and keep it on the stack.
{           e# If L is non-zero:
  {         e#   Do:
    R{      e#     For each I in R:
      ML)d/ e#       Compute M/Double(L+1).
      -Y#   e#       Subtract the result from I and square the difference.
      )mr   e#       Add 1 and pick a non-negative Double below the result.
    }$      e#     Sort the values of I according to the picks.
    L/      e#     Split the shuffled R into chunks of length L.
    L<      e#     Keep only the first L chunks.
    2{      e#     Do twice:
      {     e#       For each row of the  L x L array.
        M1$ e#       Push M and a copy of the row.
        :+- e#       Add the integers of the row and subtract their sum from M.
        +   e#       Append the difference to the row.
      }%    e#
      z     e#       Transpose rows and columns.
    }*      e#
    :U:+    e#     Save the result in U and concatenate its rows.
    __O|    e#     Push two copies. Deduplicate the second copy.
    =R*     e#     Push R if all elements are unique, an empty array otherwise.
    -       e#     Remove the result's elements from U's elements.
  }g        e#   If the resulting array is non-empty, repeat the loop.
  U{        e#   For each row in U:
    :s      e#     Convert its integers into strings.
    _:,     e#     Copy and replace each string with its length.
    :e>     e#     Compute the maximum length.
    f{      e#     For each integer, push the maximum length; then
      Se[   e#       Left-pad the integer with spaces to that length.
    }       e#
  }%        e#
  z         e#   Transpose rows with columns.
  Sf*N*     e#   Join columns by spaces, rows by linefeeds.
}M?         e# Else, push M.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.