সমস্ত দিকের আয়তক্ষেত্রের বিপরীত কোণে যান - হার্ড


17

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

প্রোগ্রামটি অর্ডারযুক্ত জোড়াকে গ্রহণ করবে (width, height)এবং এগুলি একটি আয়তক্ষেত্রের মাত্রা হিসাবে ব্যবহার করবে। আপনার প্রোগ্রামটি তখন সমাধানটির একটি ASCII- শিল্প তৈরি করবে (ব্যবহার করুন). একটি খালি বর্গক্ষেত্রের #জন্য, সমাধানের অংশের Xজন্য এবং স্কোয়ার শুরু করার জন্য) এবং শেষের পয়েন্টে পৌঁছানোর জন্য এটি কতগুলি চালনা করে তা গণনা করবে।

উদাহরণ

ইনপুট: (5, 6)

আউটপুট:

....#
....#
...#.
..#..
.#...
X....
Move count: 5

বাইট জিতে স্বল্পতম উত্তর!


7
এটি নয়, সমাধানগুলির জন্য প্রচুর সম্পাদনার দরকার হবে
ব্লু

4
প্রস্তাবিত সদৃশটির মতো এই চ্যালেঞ্জটি হ'ল একটি তুচ্ছ সহজ সমস্যা যা গল্ফের কাছে অপ্রয়োজনীয়, এটি একটি দুর্দান্ত সংমিশ্রণ। সাদৃশ্য থাকা সত্ত্বেও, এই চ্যালেঞ্জটির একটি পৃথক পদ্ধতির প্রয়োজন এবং পূর্ববর্তী চ্যালেঞ্জের ভাল গল্ফযুক্ত সমাধানগুলি এখানে প্রতিযোগিতামূলক হওয়ার জন্য তুচ্ছভাবে সংশোধন করা যায় না।
ট্রাইকোপলাক্স

এটি যদিও আরও বিশিষ্ট শিরোনাম দিয়ে করতে পারে ...
ট্রাইকোপল্যাক্স

হ্যাঁ, কোন ধারণা?
ericw31415

1
@ লুইসমেডো সর্বনিম্নতম সম্ভাব্যতম গ্রিড; 1 দ্বারা 1.
ericw31415

উত্তর:


1

এমএটিএল , 38 বাইট

'.#X'!iSPXytf0)Jh1w(tzqDQI1()Gd0<?!]XP

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

ব্যাখ্যা

সাজানো ইনপুট যাক mএবং এর চেয়ে বড় বা সমান । কোডটি প্রথমে নীচে x ম্যাট্রিক্স তৈরি করে:nmnmn

  • মূল তির্যকটি সহ এবং শেষ কলামের নীচের অংশে মান 2। এটি চরিত্রের সাথে মিলে যায় #। এই এন্ট্রি বিয়োগ 1 এর সংখ্যাটি সরানো গণনা।
  • প্রবেশদ্বারে মান 3 (1,1), এর সাথে সম্পর্কিত X
  • বাকী এন্ট্রিগুলিতে অক্ষর অনুসারে 1 টি রয়েছে .

প্রয়োজনে ম্যাট্রিক্সটি এখন স্থানান্তর করা হয়েছে যাতে এটির পছন্দসই আকার থাকে। মনে রাখবেন যে ম্যাট্রিক্সের প্রথম মাত্রাটি তার উচ্চতা, প্রস্থ নয়, সুতরাং এটি দ্বিতীয় ইনপুটটির সাথে মিলে যায়।

ম্যাট্রিক্সটি উল্টোদিকে উল্টানো হয় যাতে Xএটি প্রথম কলামের নীচে প্রদর্শিত হয় এবং এর এন্ট্রিগুলি '.#X'পছন্দসই 2 ডি চর অ্যারে তৈরি করতে স্ট্রিংয়ের সূচক হিসাবে ব্যবহৃত হয় ।

'.#X'    % push this string
!        % transpose into a column
i        % input array
SP       % sort it in non-increasing order
Xy       % identity matrix with that size: fill diagonal with 1, rest entries are 0
tf0)     % linear index of last 1
Jh       % append 1j (imaginary unit): linear index of lowest part of last column
1w(      % fill those entries with 1
tzq      % duplicate. Number of nonzero entries minus 1: this is the move count
D        % display move count (and remove it from the stack)
Q        % add 1. Matrix now contains values 1 and 2
I1(      % set first entry (in linear order) to value 3
)        % use matrix as index into the initial string. Gives 2D char array
Gd0<     % push input array again. Is it decreasing?
?        % if so
  !      %   transpose char array
]        % end
XP       % flip upside down. Implicitly display

1
এটা সরানো গণনা বলে না ...?
ericw31415

@ ericw31415 দুঃখিত। এখনই সমাধান হয়েছে
লুইস মেন্ডো

5

পাইথ, 46 45 44 বাইট

eSKtMQjsM_mm?sJ,kd?q#J.umtWbbNeSKK\#\.\XhQeQ

এখানে চেষ্টা করুন।

ব্যাখ্যা:

move-count-printing:

  K     assign K to...
     Q  the input, a 2-length array...
   tM   with each element decremented
eS      take the max and output it (this is the number of moves)


main path-finding logic:

    mm                     hQeQ  map over x-values and y-values...
        J,kd                     assign J to [x,y]
      ?s                         if both x and y are NOT zero (sum is truthy)...
            ?q#J[...]              if [x,y] is present in [...] (see below)...
                     \#            ... put a # at this position in the output
                       \.          ... else, put a . at this position
                         \X      ... else, put the X here (at [0,0])
jsM_                             reverse and output in the proper format


the [...] part in the code above, which finds positions where #s go:

.u      eSKK  cumulative reduce on <number of moves> elements, starting at K,
                which is [max_x, max_y] as assigned at the beginning
  m    N      map over x and y...
   tWbb       decrement, only if the value is > 0

2

জাভাস্ক্রিপ্ট (ES6), 132

2 বাইট সম্পাদনা করুন thx @ নীল

(w,h)=>[...Array(--h)].map((_,i)=>R(w-i)+'#'+R(i),--w,R=(n,c='.')=>c.repeat(n>w?w:n>0&&n)).join`
`+`
x${R(w-h,'#')+R(h)}
`+(h>w?h:w)

পরীক্ষা

f=(w,h)=>[...Array(--h)].map((_,i)=>R(w-i)+'#'+R(i),--w,R=(n,c='.')=>c.repeat(n>w?w:n>0&&n)).join`
`+`
x${R(w-h,'#')+R(h)}
`+(h>w?h:w)

function test() {
  var w,h
  [w,h]=I.value.match(/\d+/g)
  O.textContent=f(w,h)
}  

test()
Test <input id=I value="4 5"><button onclick="test()">-></button>
<pre id=O></pre>


w--,R=... এ সরিয়ে 2 বাইট সংরক্ষণ করুন map()
নীল

0

জাভাস্ক্রিপ্ট (বাইরের লাইব্রেরি ব্যবহার করে) (২৩৫ বাইট)

জিজ এই কঠিন ছিল! আচ্ছা ... আমার লাইব্রেরিটি এই হাহার পক্ষে সত্যিই সঠিক কাজ ছিল না। তবে আমি চ্যালেঞ্জটি পছন্দ করেছি

(x,y)=>{r=x-1;s=y-1;m=Math.max(r,s);n=Math.min(r,s);l=_.RangeDown(s,y).WriteLine(z=>_.Range(0,x).Write("",w=>z==0&&w==0?"X":(z==w||(z==s&&w>=n)||(w==r&&z>=n))?"#":"."));return l+"\r\nMove count: "+(l.length-l.split("#").join("").length)}

লিবের লিঙ্ক: https://github.com/mvegh1/ গণনাযোগ্য

কোড ব্যাখ্যা: 2 ভেরিয়েবলের ফাংশন তৈরি করুন। এক্স -1 এবং y-1 ভেরিয়েবলগুলিতে সঞ্চয় করুন। ভেরিয়েবলের মধ্যে সর্বাধিক এবং মিনিট সঞ্চয় করুন। Y এর গণনার জন্য (y-1) থেকে উল্লম্বভাবে অবতীর্ণ পরিসীমা তৈরি করুন। উল্লম্ব পরিসরের প্রতিটি উপাদানের জন্য, জটিল প্রাকটিকেট অনুসারে বর্তমান উপাদানটির জন্য একটি লাইন লিখুন। এই প্রাকটিকটি x এর গণনার জন্য 0 থেকে পূর্ণসংখ্যার একটি আরোহণের পরিসীমা তৈরি করে। এই ব্যাপ্তির প্রতিটি উপাদানের জন্য, একটি জটিল ভবিষ্যদ্বানী অনুসারে 1 স্ট্রিংয়ে সংযুক্ত করুন। এটি নীচে বাম দিকে রয়েছে কিনা তা পরীক্ষা করে দেখায়, অন্যথায় তির্যকটি রয়েছে কিনা তা পরীক্ষা করে, অন্যথায় আমরা এক্স বা ওয়াই সীমান্তে আছি কিনা তা পরীক্ষা করে। অবশেষে, সেগুলি সমস্ত একটি ভেরিয়েবলে সংরক্ষণ করা হয়েছিল। তারপরে সরানো গণনাটি পেতে, আমরা মূলত কেবল # গুলি গণনা করি। তারপরে এটি স্টোরেজ ভেরিয়েবলের সাথে যুক্ত করে ফলাফলটি ফিরিয়ে দিন

ওটা ছিল মুখের হা হা। স্ক্রিনশটটিতে ভুল বাইকোয়ান্ট রয়েছে কারণ এটি পোস্ট করার সময় আমি 4 টি বাইট সংরক্ষণের একটি উপায় খুঁজে পেয়েছি

সম্পাদনা: আমি দেখতে পাচ্ছি অন্যান্য উত্তরগুলি তাদের আউটপুটে "মুভ কাউন্ট:" রাখছে না, তবে আমার। যদি এটির প্রয়োজন না হয় তবে এটি একগুচ্ছ বাইটস শেভ করে ...

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


0

পাইথন 3, 161 156 বাইট

def f(w,h):
 x=[['.']*w for i in[0]*h];i=0
 while i<w or i<h:x[~min(i,h-1)][min(i,w-1)]=['#','X'][i<1];i+=1
 for i in x:print(''.join(i))
 print(max(w,h)-1)

একটি ফাংশন যা আর্গুমেন্টের মাধ্যমে ইনপুট নেয় এবং এসিএসই-আর্ট প্রিন্ট করে, তারপরে মুভি গণনাটি STDOUT এ যায়।

কিভাবে এটা কাজ করে

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

আইডিয়নে চেষ্টা করে দেখুন

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