সীমাবদ্ধতা সহ পূর্ণসংখ্যার সমস্ত সম্ভাব্য গ্রিডগুলি গণনা করুন


17

সমস্যা

অ-নেতিবাচক পূর্ণসংখ্যার 3 বাই 3 গ্রিড বিবেচনা করুন। প্রতিটি সারির iজন্য পূর্ণসংখ্যার যোগফল নির্ধারিত হয় r_i। একইভাবে প্রতিটি কলামের জন্য column কলামটিতে jপূর্ণসংখ্যার যোগফল সেট করা আছে c_j

কাজটি হ'ল সারি এবং কলামের যোগফলের সীমাবদ্ধতার ভিত্তিতে গ্রিডে পূর্ণসংখ্যার সমস্ত সম্ভাব্য বিভিন্ন কার্যভার নির্ধারণের জন্য কোড লেখা। আপনার কোডে একবারে একটি কাজ নির্ধারণ করা উচিত।

ইনপুট

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

আউটপুট

আপনার কোডটিকে বিভিন্ন 2 ডি গ্রিডগুলি আউটপুট করা উচিত যা এটি আপনার পছন্দের কোনও মানব পাঠযোগ্য বিন্যাসে গণনা করে। অবশ্যই অবশ্যই ভাল। আউটপুটে অবশ্যই নকল গ্রিড থাকতে হবে না।

উদাহরণ

যদি সমস্ত সারি এবং কলামের সীমাবদ্ধতাগুলি ঠিক থাকে 1তবে কেবলমাত্র 6বিভিন্ন সম্ভাবনা রয়েছে। প্রথম সারির জন্য আপনি 1প্রথম তিনটি কলামের যে কোনও একটিতে একটি রাখতে পারেন , দ্বিতীয় সারির জন্য এখন 2বিকল্প রয়েছে এবং শেষ সারিটি পূর্ববর্তী দুটি দ্বারা সম্পূর্ণ নির্ধারণ করা হয়েছে। গ্রিডের অন্য সমস্ত কিছু সেট করা উচিত 0

বলুন ইনপুটটি 2 1 0সারি এবং 1 1 1কলামগুলির জন্য। এপিএল এর সুন্দর আউটপুট ফর্ম্যাট ব্যবহার করে, সম্ভাব্য পূর্ণসংখ্যার গ্রিডগুলি হ'ল:

┌─────┬─────┬─────┐
│0 1 1│1 0 1│1 1 0│
│1 0 0│0 1 0│0 0 1│
│0 0 0│0 0 0│0 0 0│
└─────┴─────┴─────┘

এখন বলুন ইনপুটটি 1 2 3সারি এবং 3 2 1কলামগুলির জন্য। সম্ভাব্য পূর্ণসংখ্যার গ্রিডগুলি হ'ল:

┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│0 0 1│0 0 1│0 0 1│0 1 0│0 1 0│0 1 0│0 1 0│1 0 0│1 0 0│1 0 0│1 0 0│1 0 0│
│0 2 0│1 1 0│2 0 0│0 1 1│1 0 1│1 1 0│2 0 0│0 1 1│0 2 0│1 0 1│1 1 0│2 0 0│
│3 0 0│2 1 0│1 2 0│3 0 0│2 1 0│2 0 1│1 1 1│2 1 0│2 0 1│1 2 0│1 1 1│0 2 1│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘

উত্তর:


9

এপিএল (ডায়ালগ) , 42 বাইট

{o/⍨(⍵≡+/,+⌿)¨o←3 3∘⍴¨(,o∘.,⊢)⍣8⊢o←⍳1+⌈/⍵}

এটি অনলাইন চেষ্টা করুন!

⎕IO←0বিভিন্ন সিস্টেমে ডিফল্ট যা ব্যবহার করে। শিরোনামের অন্যান্য জিনিসগুলি ম্যাট্রিক্সের জন্য ঠিক সুন্দর মুদ্রণ (বক্সযুক্ত প্রদর্শন) is

ইনপুটটি ছয়টি মানের তালিকা, প্রথমে সারিগুলির যোগফল এবং তারপরে কলামের যোগফল।

কিভাবে?

o←⍳1+⌈/⍵- ইনপুট সর্বাধিক ( ) oসীমা পায়0⌈/

,o∘.,⊢- কার্টেসিয়ান পণ্য সহ oএবং সমতল ( ,)

⍣8 - আটবার পুনরাবৃত্তি

3 3∘⍴¨ - প্রতি 9-আইটেমের তালিকাটিকে 3 × 3 ম্যাট্রিক্সে আকার দিন

¨o←- এই ম্যাট্রিকগুলি oএবং প্রত্যেকটির জন্য সংরক্ষণ করুন

+/,+⌿- সারিগুলির যোগফলগুলি ( +/) কলামের যোগফলগুলিতে যোগ করা হয়েছে কিনা তা পরীক্ষা করুন ( +⌿)

⍵≡ - ইনপুট সাথে সামঞ্জস্য

o/⍨- oসত্যবাদী মান দ্বারা ফিল্টার (ম্যাট্রিকেস অ্যারে)


খুব সুন্দর দেখতে এই উত্তরটির একটি ব্যাখ্যা দরকার (দয়া করে)।

@ লেলেবিক ব্যাখ্যা যুক্ত করেছেন
উরিল

ধন্যবাদ। সুতরাং আপনি সমস্ত সম্ভাব্য ম্যাট্রিক গণনা করুন এবং এটি মনে হচ্ছে যে সীমাবদ্ধতা মাপসই এটি ফিট করে। সবচেয়ে দক্ষ নয়, তবে এটি কাজ করে।

1
@ লেবেমিক হ্যাঁ, এটি সবচেয়ে সংক্ষিপ্ততম। আমি যোগফলগুলির সাথে মেলে এমন সমস্ত 3-আইটেমের তালিকা পেয়ে আরও কিছুটা দক্ষ পরিচালনা করতে পারি, তারপরে প্রথম সারির যোগফলগুলির সাথে মানিয়ে যায় তারপরে প্রথম কলামের যোগফলের সাথে মেলে এমনগুলি (পূর্ববর্তী প্রতিটি সংমিশ্রনের জন্য) বেছে নিন, এবং তাই পিছনে এবং পিছনে। এটি অ-নিষ্ঠুর-শক্তি জেনারেল অ্যালগরিদম হবে।
উরিল

@ এরিকথ আউটগলফার ধন্যবাদ, আমি সর্বদা আমার বাইট গণনা আপডেট করতে ভুলে যাই
উরিল

7

হুশ , 20 17 বাইট

fȯ=⁰mΣS+Tπ3π3Θḣ▲⁰

-3 বাইট @ H.PWiz ধন্যবাদ

xsসীমাবদ্ধতার এনকোডিংয়ের তালিকা হিসাবে ইনপুট নেয় [r_1,r_2,r_3,c_1,c_2,c_3], এটি অনলাইনে চেষ্টা করুন!

ব্যাখ্যা

ব্রুট ফোর্স অ্যাপ্রোচ: পি এন্ট্রি সহ সমস্ত 3x3 গ্রিড উত্পন্ন করুন [0..max xs]:

f(=⁰mΣS+T)π3π3Θḣ▲⁰  -- input ⁰, for example: [1,1,1,1,1,1]
                ▲⁰  -- max of all constraints: 1
               ḣ    -- range [1..max]: [1]
              Θ     -- prepend 0: [0,1]
            π3      -- 3d cartesian power: [[0,0,0],...,[1,1,1]]
          π3        -- 3d cartesian power: list of all 3x3 matrices with entries [0..max] (too many)
f(       )          -- filter by the following predicate (eg. on [[0,0,1],[1,0,0],[0,1,0]]):
      S+            --   append to itself, itself..: [[0,0,1],[1,0,0],[0,1,0],..
        T           --   .. transposed:             ..[0,1,0],[0,0,1],[1,0,0]]
      mΣ            --   map sum: [1,1,1,1,1,1]
    =⁰              --   is it equal to the input: 1

6

ব্র্যাচল্যাগ , 17 বাইট

{~⟨ṁ₃{ℕᵐ+}ᵐ²\⟩≜}ᶠ

এটি অনলাইন চেষ্টা করুন!

সতর্কতা: কুরুচিপূর্ণ আউটপুট! শিথিল করবেন না, এটি এখনও মানব-পঠনযোগ্য, আমার কত হিসাব নেওয়ার প্রয়োজন নেই। ;)

কোন কারণে এটি বোধ করার চেয়ে বেশি দীর্ঘ হতে হবে (13 বাইট):

⟨ṁ₃{ℕᵐ+}ᵐ²\⟩ᶠ

এই পরবর্তী সংস্করণটি যদি এটি কাজ করে তবে তার পরিবর্তে আউটপুট (যেমন কমান্ড-লাইন আর্গুমেন্ট) থেকে ইনপুট নেওয়া হত।


@ রিকার ওপির "আউটপুট" বিভাগটি পড়ুন। অবশ্যই, এটি এখনও গ্রিড পৃথক পৃথক বন্ধনী আছে, এটি তাদের পাশাপাশি ছিনিয়ে নিতে পারে এবং আউটপুট এখনও কোনও তথ্য
হারাতে


4

হাস্কেল, 94 88 84 79 বাইট

q=mapM id.(<$"abc")
f r=[k|k<-q$q$[0..sum r],(sum<$>k)++foldr1(zipWith(+))k==r]

একক ফ্ল্যাট--এলিমেন্টের তালিকা হিসাবে সারি এবং কলামগুলির পরিমান ধরে [r1,r2,r3,c1,c2,c3]

এটি অনলাইন চেষ্টা করুন!

q=mapM id.(<$"abc")         -- helper function 

f r =                       -- 
  [k | k <-   ,    ]        -- keep all k
    q$q$[0..sum r]          --   from the list of all possible matrices with
                            --   elements from 0 to the sum of r
                            -- where
    (sum<$>k) ++            --   the list of sums of the rows followed by
    foldr1(zipWith(+))k     --   the list of sums of the columns
    == r                    -- equals the input r

পরীক্ষার জন্য ম্যাট্রিকগুলির উপাদানগুলি সমষ্টিতে চলে যাওয়ার সাথে সাথে rবড় সারি / কলামের অঙ্কের জন্য যুক্তিসঙ্গত সময়ে কোডটি শেষ হয় না। এখানে এমন একটি সংস্করণ রয়েছে rযা সর্বাধিক দ্রুততর হয় তবে 4 বাইট দীর্ঘ হয়: এটি অনলাইনে চেষ্টা করুন!


3

গণিত, 81 বাইট

Select[0~Range~Max[s=#,t=#2]~g~3~(g=Tuples)~3,(T=Total)@#==s&&T@Transpose@#==t&]&

0..Max উপাদানগুলির সাথে সমস্ত 3x3 ম্যাট্রিক খুঁজে পায় এবং সঠিকগুলি নির্বাচন করে
যার অর্থ (Max+1)^9ম্যাট্রিকগুলি পরীক্ষা করা উচিত

এটি অনলাইন চেষ্টা করুন!


আপনি একটি ব্যাখ্যা যোগ করতে পারেন দয়া করে।

3
@ ললেবিক, আপনি কিছু পরীক্ষার কেস যুক্ত করার পরে এবং এই চ্যালেঞ্জকে এখানকার সমস্ত লোকের জন্য "পরিষ্কার" করার পরে আমি এটি পুনরায় চালু করার পক্ষে ভোট দিয়েছি তবে যাদের সাহায্যের প্রয়োজন তাদের পক্ষে এটি আরও ভাল করার চেষ্টা করবেন বলে মনে হয় না
J42161217

এখন প্রশ্ন যুক্ত।

এখনও কি অস্পষ্ট? / Gridটিআইওর সাথেও কাজ করে ToStringএটি অনলাইন চেষ্টা করুন!
ব্যবহারকারী 202729

@ ব্যবহারকারী202729 আমার কাছে কিছুই না, তবে পরীক্ষার কেসগুলি অনুপস্থিত ছিল
J42161217

3

আর , 115 110 বাইট

function(S)for(m in unique(combn(rep(0:max(S),9),9,matrix,F,3,3)))if(all(c(rowSums(m),colSums(m))==S))print(m)

এটি অনলাইন চেষ্টা করুন!

c(r1,r2,r3,c1,c2,c3)একক হিসাবে ইনপুট নেয় vectorএবং স্ট্যাটআউটে ম্যাট্রিকগুলি প্রিন্ট করে।

এটি উরিলের এপিএল উত্তরের সাথে বেশ মিল , তবে এটি 3x3 গ্রিড কিছুটা আলাদাভাবে উত্পন্ন করে।

লেটিং M=max(S), এটি ভেক্টর উত্পাদন করে 0:M, তারপর repএটি 9 বার, অর্থাৎ [0..M, 0...M, ..., 0...M]নয় বার খায় । তারপরে এটি matrix, 3, 3প্রতিটি 9-সংমিশ্রণকে 3x3ম্যাট্রিক্সে রূপান্তর করতে এবং একবারে simplify=Fঅ্যারের পরিবর্তে একটি তালিকা ফেরত দিতে বাধ্য করে 9 সময়ে নেওয়া নতুন ভেক্টরের সমস্ত সংমিশ্রণগুলি নির্বাচন করে । এটি তখন এই তালিকাটিকে স্বতন্ত্র করে এবং এটি সংরক্ষণ করে m

তারপরে এটি mতাদের জন্য ফিল্টার করে যেখানে সারি / কলামের যোগফলগুলি ইনপুটটির অনুরূপ, যা মুদ্রণ করে এবং যা না হয় তাদের জন্য কিছুই করে না।

যেহেতু এটি choose(9*(M+1),9)বিভিন্ন সম্ভাব্য গ্রিডগুলি ( (M+1)^9সম্ভাবনার চেয়ে বেশি ) গণনা করে , তাই নীচের থেকে আরও দক্ষ (তবে কম গোল্ফ) উত্তরের চেয়ে দ্রুত মেমরি / সময় চলে যাবে:

আর , 159 বাইট

function(S,K=t(t(expand.grid(rep(list(0:max(S)),9)))))(m=lapply(1:nrow(K),function(x)matrix(K[x,],3,3)))[sapply(m,function(x)all(c(rowSums(x),colSums(x))==S))]

এটি অনলাইন চেষ্টা করুন!


আর খুব স্বাগত!

3

এমএটিএল , 35 22 বাইট

-13 বাইট ধন্যবাদ লুই মেন্ডোকে ধন্যবাদ

X>Q:q9Z^!"@3et!hsG=?4M

এটি অনলাইন চেষ্টা করুন!

লিঙ্কটি কোডের এমন একটি সংস্করণের সাথে যুক্ত যা আরও কিছু সুন্দরভাবে প্রিন্ট করে; এই সংস্করণটি কেবলমাত্র সমস্ত ম্যাট্রিককে তাদের মধ্যে একটি একক নিউলাইন দিয়ে মুদ্রণ করবে।

হিসাবে ইনপুট লাগে [c1 c2 c3 r1 r2 r3]

একথাও ঠিক যে, এই কার্টিজিয়ান ক্ষমতা নির্ণয় X^এর 0...max(input)এক্সপোনেন্ট সঙ্গে 9, এবং পক্ষান্তরিত করে !। এরপরে "এটি কলামগুলির উপরে লুপ করে প্রতিটিকে @3x3 ম্যাট্রিক্স হিসাবে পুনরায় আকার দেয় 3e, ডুপ্লিকেট করে t, ট্রান্সপোসিং করে !এবং অনুভূমিকভাবে তাদেরকে সুস্পষ্ট করে তোলে h। তারপর এটি কলাম অঙ্কের নির্ণয় s, যা ভেক্টর পরিণাম ডেকে আনবে [c1 c2 c3 r1 r2 r3]। আমরা ইনপুটটিতে প্রাথমিকভাবে সমতা করি G=, এবং যদি ?সমস্ত ননজারো হয় তবে আমরা !ব্যবহার করে ফাংশনে ইনপুট নির্বাচন করে সঠিক ম্যাট্রিক্স পুনরুদ্ধার করি 4M


2

ব্যাচ, 367 বাইট

@echo off
for /l %%i in (0,1,%1)do for /l %%j in (%%i,1,%1)do for /l %%k in (%%i,1,%4)do call:c %* %%i %%j %%k
exit/b
:c
set/a"a=%1-%8,c=%4-%9,f=%8-%7,g=%9-%7,l=%5-f,m=%2-g,l^=m-l>>31&(m^l),m=%5+c-%3-f,m&=~m>>31
for /l %%l in (%m%,1,%l%)do set/a"b=%2-g-%%l,d=%5-f-%%l,e=%6-a-b"&call:l %7 %%l
exit/b
:l
echo %1 %f% %a%
echo %g% %2 %b%
echo %c% %d% %e%
echo(

উপরের বাম 2 × 2 বর্গফল ফলাফলকে জোর করে, তাই সর্বোত্তম পদ্ধতির শীর্ষ বাম এবং শীর্ষ মধ্যম পূর্ণসংখ্যার যোগফলের জন্য সমস্ত বৈধ মান, শীর্ষের যোগফলের জন্য সমস্ত বৈধ মান বাম এবং মধ্যম বাম পূর্ণসংখ্যার এবং মধ্যম পূর্ণসংখ্যার জন্য বৈধ মানগুলির পরিসীমা গণনা করুন, তারপরে, সমস্ত উপযুক্ত ব্যাপ্তিটি লুপ করে সীমাবদ্ধতা থেকে অবশিষ্ট মানগুলি গণনা করুন।


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