পূর্ণসংখ্যা, একত্রিত!


30

আপনার টাস্ক থেকে পূর্ণসংখ্যার জড় করা হয় 1থেকে N(ইনপুট হিসেবে দেওয়া) প্রস্থের একটি আয়তক্ষেত্র মধ্যে Wএবং উচ্চতা H(এছাড়াও ইনপুট হিসাবে দেওয়া)। স্বতন্ত্র সংখ্যাগুলি 90 ডিগ্রির যে কোনও একক দ্বারা আবর্তিত হতে পারে তবে তাদের অবশ্যই আয়তক্ষেত্রের সামঞ্জস্যপূর্ণ ব্লক হিসাবে উপস্থিত হওয়া উচিত। এটি হ'ল, আপনি কোনও একটি সংখ্যাকে একাধিক অঙ্কে বিভক্ত করতে এবং অঙ্কগুলি পৃথকভাবে আয়তক্ষেত্রগুলিতে স্থাপন করতে পারবেন না, আপনি কোনও কোণার চারপাশে কোনও সংখ্যার তিনটি অঙ্ককে বাঁকতে পারবেন না। আপনি প্রতিটি সংখ্যাকে একটি ইট বিবেচনা করতে পারেন যা থেকে আপনি প্রাচীর তৈরি করছেন।

এখানে একটি উদাহরণ। বলুন আপনার ইনপুট (N, W, H) = (12, 5, 3)। একটি সম্ভাব্য সমাধান হ'ল:

18627
21901
53114

স্পষ্টতার জন্য, এখানে এই গ্রিডের দুটি অনুলিপি রয়েছে, একটিতে এক-অঙ্কের সংখ্যা লুকানো আছে এবং একটি দুটি অঙ্কের সংখ্যার সাথে লুকানো রয়েছে:

1####    #8627
2##01    #19##
##11#    53##4

আয়তক্ষেত্রটি যদি অনন্য উপায়ে আবার বিযুক্ত না করা যায় তবে তা ঠিক। উদাহরণস্বরূপ, উপরের উদাহরণে, 12এছাড়াও এইভাবে স্থাপন করা যেতে পারে:

#####    18627
21#01    ##9##
##11#    53##4

বিধি

আপনি অনুমান করতে পারে যে Nইতিবাচক হয় এবং যে W*Hথেকে পূর্ণসংখ্যার ডিজিটের সংখ্যার সাথে মেলে 1থেকে Nসমেত, এবং প্রদত্ত সংখ্যার মধ্যে আয়তক্ষেত্র একটি টালি দ্বারা আচ্ছাদন অস্তিত্বই নেই। এটি সর্বদা সম্ভব কিনা আমার কাছে বর্তমানে কোনও প্রমাণ নেই তবে আপনি যদি তা করেন তবে আমি আগ্রহী be

আউটপুট হয় একক লাইনফিড-বিচ্ছিন্ন স্ট্রিং বা স্ট্রিংগুলির তালিকা (প্রতিটি লাইনের জন্য একটি) বা একক-সংখ্যার পূর্ণসংখ্যার (প্রতিটি ঘরের জন্য একটি) তালিকার একটি তালিকা হতে পারে।

আপনার জমা দেওয়ার ফলাফল অবশ্যই নির্ধারক হতে পারে এবং আপনার যুক্তিসঙ্গত ডেস্কটপ মেশিনে এক মিনিটেরও কম সময়ে সমস্ত পরীক্ষার কেসগুলি পরিচালনা করতে সক্ষম হওয়া উচিত।

আপনি কোনও প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন এবং ইনপুট গ্রহণ এবং আউটপুট সরবরাহের আমাদের মানক পদ্ধতির কোনওটি ব্যবহার করতে পারেন ।

আপনি যে কোনও প্রোগ্রামিং ভাষা ব্যবহার করতে পারেন তবে নোট করুন যে এই ফাঁকগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়েছে।

এটি , তাই সংক্ষিপ্ততম বৈধ উত্তর - বাইটগুলিতে মাপা - জয়।

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

প্রথমটি বাদে এগুলির কোনওটিই অনন্য নয়। প্রতিটি পরীক্ষার কেস N W Hএকটি সম্ভাব্য আউটপুট দ্বারা অনুসরণ করা হয়। বৃহত্তর সংখ্যাগুলি অনুভূমিকভাবে লিখতে যখন আয়তক্ষেত্রটি খুব সংকীর্ণ হয় তখন আপনার উত্তরটি কাজ করে তা নিশ্চিত করুন।

1 1 1
1

6 6 1
536142

6 2 3
16
25
34

10 1 11
1
0
8
9
2
6
7
3
1
5
4

11 13 1
1234567891011

27 9 5
213112117
192422581
144136119
082512671
205263272

183 21 21
183116214112099785736
182516114011998775635
181116013911897765534
180415913811796755433
179115813711695745332
178315713611594735231
177115613511493725130
176215513411392715029
175115413311291704928
174115313211190694827
173115213111089684726
172015113010988674625
171915012910887664524
170814912810786654423
169714812710685644322
168614712610584634221
167514612510483624120
166414512410382614019
165314412310281603918
164214312210180593817
163114212110079583716

200 41 12
81711132917193661114105533118936111184136
50592924448815915414562967609909953662491
89529721161671582389717813151113658811817
41418184511110119010183423720433017331118
35171183614003547461181197275184300111711
41874381132041861871718311415915921116264
11914245014112711011594492626831219331845
17125112629222085166344707736090956375181
94507611291431121128817413566319161275711
11011540021119913511011169939551729880780
92725141607727665632702567369893534277304
78118311405621148296417218591118562161856

8
এটি কি সর্বদাই সম্ভব বলে প্রমাণ রয়েছে?
ফ্যাটালাইজ করুন

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

@ ফ্যাটালাইজ করুন: অন্তত ইনপুটটির তুচ্ছ ঘটনায় (10, 1, 1)এটি সম্ভব নয় (ধরে নেওয়া যে 1 থেকে শুরু করে সমস্ত সংখ্যা Nনির্মাণে ব্যবহৃত হবে)। যদি এই সীমাবদ্ধতাটি ধরে রাখা হয়, এটি ইউনিটগুলিতে আয়তক্ষেত্রের ক্ষেত্রটি 1..Nসম্ভব করার জন্য কমপক্ষে অঙ্কের সংখ্যা হওয়া উচিত । যদি এই প্রতিবন্ধকতা শিথিল করা হয় তবে এটি সব ক্ষেত্রেই সম্ভব (তবে চ্যালেঞ্জটি খুব মজাদার নয়: পি)
সেবাস্তিয়ান লেনারটোভিজ

2
@ সেবাস্তিয়ানলনার্টোভিজ: আমার মনে হয় আপনি যে অংশটি মিস করেছেন তাতে এটি বলে যে আয়তক্ষেত্রের ক্ষেত্রটি [1, N] এর সংখ্যার অঙ্কের যোগফলের সাথে মেলে। যদি এন == 10 হয়, তবে প্রস্থ এবং উচ্চতা 1 এবং 11 হতে হবে যদি প্রস্থ বা উচ্চতা 1 হয়, এই সমস্যাটি সর্বদা সমাধানযোগ্য।
ইয়ে 295

1
@ মার্টিনএেন্ডার বিপরীত চ্যালেঞ্জটি আকর্ষণীয়ও হতে পারে: অঙ্কগুলির একটি আয়তক্ষেত্র হিসাবে আয়তনের (এবং শেষ পর্যন্ত) N , তবে প্রোগ্রামটি প্রস্থ এবং উচ্চতা থেকে গণনা করতে পারে), এবং প্রোগ্রামটি এই চ্যালেঞ্জটির একটি আয়তক্ষেত্রের একটি যথাযথ উত্তর কিনা তা পরীক্ষা করা উচিত। ...
দাদ

উত্তর:


3

পাইথ, 35 বাইট

juum+WghHl+dQd~tQN<+.TGmkeHeH)_BvzY

Mbomb007 এর ক্রেডিট। আমি তার অ্যালগরিদম ব্যবহার করেছি। মূলত আমি কেবল স্টিভেন এইচকে সহায়তা করতে চেয়েছিলাম তবে আমি সত্যিই একটি সংক্ষিপ্ত সংস্করণ দেখতে চাইছিলাম।

Nপ্রথম লাইনে এবং W,Hদ্বিতীয় লাইনে লাগে : অনলাইনে চেষ্টা করে দেখুন: বিক্ষোভ

পাইথ বাস্তবায়নে একটি বাজে বাগ পেয়েছি .[(আমার নিজের দোষ, যেহেতু আমি এটি প্রয়োগ করেছি)। আগামীকাল এটি ঠিক করতে হবে। এটির ফলস্বরূপ +3 বাইট।

ব্যাখ্যা:

juum+WghHl+dQd~tQN<+.TGmkeHeH)_BvzY
                                  Y   start with the empty list []
                                      I'll perform all operations on this list. 
                                      Sometimes it is called G, sometimes N. 
                                vz    read the second line and evaluate it: [W, H]
                              _B      bifurcate it with reverse: [[W, H], [H, W]]
 u                                    for each pair H in ^:
                    .TG                  transpose G
                   +   mkeH              append H[1] empty strings
                  <        eH            use only the first H[1] strings
                                         lets call this result N
  u                          )           modify N, until it doesn't change anymore:
   m                        N               map each d in N to:
     WghHl+dQ                                  if H[0] >= len(d+Q):
    +        d  Q                                 d + Q
              ~t                                  and decrement Q by 1
             d                                 else:
                                                  d
j                                     at the end print every row on a separate line

7

পাইথন 2, 210 200 বাইট

সম্পাদনা: এখন কাজ!

উপরের থেকে নীচে, বাম থেকে ডানে, সবচেয়ে বড় সংখ্যা দিয়ে শুরু করে ills তারপরে, স্থানান্তর করুন এবং এটি আবার করুন। তারপরে ট্রান্সপোজ এবং মুদ্রণ করুন। ট্রান্সপোসেশনটি কাজ করার জন্য আমাকে ফাঁকা স্থান দিয়েছিল, যেহেতু লাইনগুলি এখনও তাদের পূর্ণ দৈর্ঘ্যের নয়।

নেস্টেড execকাজ করতে আমার সমস্যা হয়েছিল (করতে exec'exec"..."*w\n;...'*2। কেউ যদি এটি বের করতে পারে তবে আমাকে জানান) know

n,w,h=input()
s=[""]*h
for x in 1,2:
    exec"for i in range(h):l=len(s[i]+`n`)<=w;s[i]+=`n`*l;n-=l\n"*w;s=[r.replace(" ","")for r in map(lambda x:`x`[2::5],zip(*[r.ljust(w)for r in s]))];w,h=h,w
print s

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

কম গল্ফড:

def f(n,w,h):
    s=[""]*h
    for x in 1,2:
        for j in[0]*w:
            for i in range(h):
                l=len(s[i]+`n`)<=w
                s[i]+=`n`*l
                n-=l
        s=[r.ljust(w)for r in s]
        s=map(lambda x:`x`[2::5],zip(*s))
        s=[r.replace(' ','')for r in s]
        w,h=h,w
    print"\n".join(s)

এটি খুব সম্ভবত এটি এখন সব ক্ষেত্রে কাজ করা উচিত, তবে একটি (অনানুষ্ঠানিক) প্রমাণ এখনও প্রশংসা করা হবে। ;)
মার্টিন এন্ডার

@ মার্টিনএন্ডার একটি প্রমাণ সম্ভবত আমার বাইরে। সংখ্যাগুলি দৈর্ঘ্যে আরও বেশি পরিবর্তিত হওয়ার জন্য, পরীক্ষার কেসগুলি খুব বড় হয়। এটি সম্ভবত এর সাথে সম্পর্কিত বা এর সমাধান হিসাবে সর্বদা কোনও সমাধান রয়েছে কিনা তার প্রমাণ হিসাবে একই।
mbomb007

6

জাভাস্ক্রিপ্ট, 284 259 245 241 240 223 209 205 বাইট

// Golfed
let f = (N,W,H)=>eval('a=Array(H).fill("");while(N)g:{s=""+N--;d=s[L="length"];for(i in a)if(a[i][L]+d<=W){a[i]+=s;break g}for(p=0;d;++p){l=a[p][L];for(k=p+d;k>p;)l=a[--k][L]-l?W:l;while(l<W&&d)a[p+--d]+=s[d]}}a');

// Ungolfed
(N,W,H) => {
    a = Array(H).fill(""); // Create `H` empty rows.

    while (N) g : {
        s = "" + N--; // Convert the number to a string.
        d = s[L="length"]; // Count the digits in the number.

        // Loop through the rows trying to fit the number in horizontally.
        for (i in a) {
            if (a[i][L] + d <= W) { // If it fits.
                a[i] += s; // Append the number to the row.
                break g; // This is what a goto statement looks like in JavaScript.
            }
        }

        // Loop through the rows trying to fit the number in vertically.
        for (p = 0; d; ++p) {
            l = a[p][L]; // Get the length of the row.

            // Find `d` adjacent rows of the same length.
            for (k = p + d; k > p; ) {
                // If `a[--k][L] == l`, continue.
                // Else set `l` to `W` so the next loop doesn't run.
                l = a[--k][L] - l ? W : l;
            }

            // Put the characters in position.
            while (l < W && d)
                a[p+--d] += s[d];
        }
    }

    return a;
}

let test_data = [[1,1,1],
                 [6,6,1],
                 [6,2,3],
                 [10,1,11],
                 [10,11,1],
                 [11,13,1],
                 [27,9,5],
                 [183,21,21],
                 [184,2,222],
                 [200,41,12],
                 [1003,83,35]];

for (let test of test_data)
    console.log(f(test[0],test[1],test[2]));


1
দুটি সংখ্যা পৃথক কিনা তা পরীক্ষা করার -পরিবর্তে 1 বাইট ব্যবহার করে সংরক্ষণ করুন !=
নীল

2

পাইথ, 79 50 48 বাইট

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

জাকুবকে ধন্যবাদ, 29 বাইট সংরক্ষণ এবং আমার কোডটি আসলে কাজ করে!

repr()কলগুলি অপ্রয়োজনীয় ছিল বুঝতে পেরে অন্য দুটি বাইট সংরক্ষণ করা হয়েছে ।

এটি মূলত mbomb007 এর পাইথন 2 উত্তরের একটি অনুবাদ।

AEJmkHFb2VHVGIgGl+@JNQ XNJ~tQ)))=.[.TJkGA,HG)jJ

আকারে ইনপুট নেয়
n
w,h


2
উত্তরগুলি কোনও বৈধ সমাধান না হওয়া পর্যন্ত মুছে ফেলা উচিত।
mbomb007

আমি মনে করি বেশিরভাগ কোডটি সঠিক। কেবলমাত্র ত্রুটিটি আমি দেখছি প্রতিস্থাপনের সময় ঘটে। mbomb007 স্থানগুলি সাবধানতার সাথে অবশিষ্ট কলামগুলি পূরণ করে স্থানান্তরিত করে, তারপরে জিপ করে এবং স্পেসগুলি সরিয়ে দেয়। এই গ্যারান্টি। যে ম্যাট্রিক্স স্থানান্তর পরে wদৈর্ঘ্য আছে। =.TZএটি গ্যারান্টি দিতে পারে না, যেহেতু এটি দৈর্ঘ্যটি জানে না w
জাকুবে

আসলে মূল ত্রুটিটি হ'ল এটি !>+@ZN`zKহওয়া উচিত !>+@ZN`zJ। তারপরে ছোট ছোট সব পরীক্ষার কেস কাজ করে। তবে আপনি টেস্ট-কেস তৈরি করতে পারেন, যেখানে ট্রান্সপোসিং ব্যর্থ হয় (যেমন উপরে বর্ণিত)। এটি কাজ করার জন্য আপনার পরিবর্তে কিছু =.[.TZkK(খালি স্ট্রিং দিয়ে নিখোঁজ কলামগুলি পূরণ করুন) দরকার =.TZ
জাকুবে

এবং নিজেকে পাইথের সাথে বিভ্রান্ত না করার চেষ্টা করুন। আপনার কোডে আপনার কাছে দুটি একাধিক ভেরিয়েবল রয়েছে যা একই মানগুলিতে (যেমন Kএবং @Q1) নির্দেশ করে। কোন ভেরিয়েবল কোন মান, এটি ট্র্যাক করা বেশ কঠিন ছিল ... এবং কেবল কোডটি অনুলিপি করবেন না। সহজবোধ্য রাখো. বুলিয়ান ট্রিক =Y...পাইথনের জন্য ভাল ধারণা হতে পারে তবে একটি সরল I(যদি) আরও বেশি পঠনযোগ্য (এবং আরও ছোট) হতে পারে।
জাকুবে

এখানে mbomb007 এর কোড ব্যবহার করে একটি খুব সহজ সমাধান রয়েছে: লিঙ্কটি এটি nপ্রথম লাইনে লাগে (এইভাবে আমাদের কোনও অতিরিক্ত ভেরিয়েবলের মান নির্ধারণ করতে হবে না, আমরা কেবল ব্যবহার করতে পারি Q)। এবং wএবং hদ্বিতীয় লাইনে, যা তত্ক্ষণাত্ Gএবং এর Hসাথে নির্ধারিত হয়ে যায় AE
জাকুবে

1

স্ট্যাক্স , 27 বাইট

é!L↑?∞S░♠╔)¥¼/ÿµ◄÷│♦╫Δò6√√╣

এটি চালান এবং এটি ডিবাগ করুন

এটির জন্য এক লাইনে ইনপুট লাগে {N} {H} {W}

এই প্রোগ্রামটি নির্দিষ্ট আকারের স্পেসের গ্রিড দিয়ে শুরু হয়। N.. থেকে প্রতিটি সংখ্যার জন্য 1, এটি উপযুক্ত আকারের স্পেসগুলির একটি স্ট্রিং থেকে বিন্যাসিত সংখ্যায় একটি একক স্ট্রিং প্রতিস্থাপন করার চেষ্টা করে। যদি কোনও প্রতিস্থাপন সম্পাদন করা যায় না, তবে এটি ট্রান্সপোজড গ্রিড দিয়ে আবার চেষ্টা করে।

z)A+*   create "grid" of spaces and newlines of specified size
,Rr     create range [n ... 1]
F       for each number execute the indented section; it will fit the value into the grid
  $%z(  make a string out of spaces the same length as the number; e.g. 245 => "   "
  Y     store the space string in register Y; this will be used as a search substring
  [#    count the number of occurrences of y in the grid; the grid is still on the stack
  X     store the count in register X; this will be used as a condition
  G     jump to routine at closing curly brace
  y_$|e replace the first instance of y (the spaces) with the current number
  xG    push x; then jump to routine at closing curly brace
        end program
}       called routine jump target
C       pop top of stack; if it's truthy terminate routine
|jM|J   split on newlines; transpose; join with newlines

এটি চালান

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