আনুমানিক স্কোয়ার গঠন


11

পটভূমি

আমার কাছে সমান আকারের বর্গাকার আকৃতির বাক্সগুলির একটি গুচ্ছ রয়েছে, এবং যেহেতু আমি একজন ঝরঝরে মানুষ, তাই আমি সেগুলি একটি বর্গ গঠনের ব্যবস্থা করতে চাই। যাইহোক, তাদের সংখ্যা অগত্যা একটি নিখুঁত বর্গ নয়, সুতরাং আমার বর্গাকার আকৃতি আনুমানিক করতে হতে পারে। আমি অবশ্যই চাই আপনি আমাকে সবচেয়ে নান্দনিকভাবে আনন্দদায়ক বিন্যাসটি খুঁজে পান - প্রোগ্রামামগতভাবে অবশ্যই।

ইনপুট

আপনার ইনপুটটি একক ধনাত্মক পূর্ণসংখ্যা k, বাক্সের সংখ্যা উপস্থাপন করে।

আউটপুট

আপনার প্রোগ্রামটি এমন দুটি ধনাত্মক পূর্ণসংখ্যা বেছে নেবে m, nযা m*(n-1) < k ≤ m*nহোল্ড করে। এগুলি বৃহত বর্গক্ষেত্রের মতো আকারের আমরা প্রস্থের প্রস্থ এবং উচ্চতা উপস্থাপন করে। যেহেতু আমরা aesttethically সন্তোষজনক আকারের সন্ধান করছি, পরিমাণটি ন্যূনতম হবে, যাতে আকারটি একটি বর্গাকার কাছাকাছি এবং এর ক্ষেত্রফলের কাছাকাছি হয় । জোড়ের জন্য এখনও যদি বেশ কয়েকটি প্রার্থী থাকে তবে প্রস্থ সর্বাধিক যেখানে একটি বেছে নিন ।(m - n)2 + (m*n - k)2k(m, n)m

এখন, আপনার আসল আউটপুট সংখ্যা এবং হবে না । পরিবর্তে, আপনি বাক্সের উপস্থাপনা করতে অক্ষরটি ব্যবহার করে বাক্সগুলির বিন্যাসটি মুদ্রণ করবেন । আরও সুনির্দিষ্টভাবে, আপনি সারিগুলি মুদ্রণ করবেন , যার প্রত্যেকটিতে অক্ষর রয়েছে এবং তারপরে অক্ষরের একটি সারি থাকবে । নোট করুন আউটপুটে হুবহু অক্ষর রয়েছে ।mn#n-1m#k - m*(n-1)#k#

বিধি এবং স্কোরিং

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

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

পরীক্ষার কেস

এখানে কয়েকটি ইনপুট মানগুলির সঠিক ফলাফল রয়েছে।

1
#
2
##
3
##
#
4
##
##
8
###
###
##
13
#####
#####
###
17
######
######
#####
18
#####
#####
#####
###
20
#####
#####
#####
#####
21
######
######
######
###
22
######
######
######
####
23
#####
#####
#####
#####
###

উত্তর:


6

পাইথ, 28 বাইট

jbc*\#Qho.a,,N*NJ_/_QN,JQ_SQ

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

কর্সটি হ'ল আমি নীচের সম্পত্তিতে সম্ভাব্য মিটিকে বাছাই করি:

(m - ceil(k/m))^2 + (m*ceil(k/m) - k)^2

মোট অনুপস্থিতি নোট করুন n। মোট আকারটি কেবলমাত্র দ্বারা সংজ্ঞায়িত করা হয় m। তারপরে আমি উপরের সম্পত্তিটিকে আরও একবার রূপান্তর করি এবং আমার চূড়ান্ত বাছাই ওজন নিম্নলিখিত দুটি পয়েন্টের মধ্যে ইউক্লিডিয়ান দূরত্ব হিসাবে সংজ্ঞায়িত করা হয়:

(m, m*ceil(k/m)) and (ceil(k/m), k)

এটি ওজন মান পরিবর্তন করে, কিন্তু তাদের ক্রম না।


3

পাইথন 3, 202 বাইট

আমি জানি যে সিজেম বা পাইথ সলিউশনগুলির তুলনায় এটি দীর্ঘতর, তবে তবুও, পাইথনে এই সমস্যাটি সমাধান করার একটি উপায় এখানে রয়েছে:

k=int(input())
r,d,s=range(k+1),{},'#'*k
for n in r:
 for m in r:
  if m*n>=k:
   d[m,n]=(m-n)**2+(m*n-k)**2
x,y=max(i for i in d.keys()if d[i]==min(d.values()))
[print(s[i*x:(i*x+x])for i in range(y+1)]

মূল নীতিটি হ'ল আমরা জানি যে এম এবং এন উভয়ই কে-এর চেয়ে কম। এছাড়াও, এম * এন> = কে। এর অর্থ হ'ল আমরা কেবল সমস্ত এম, এন <কে জন্য চ্যালেঞ্জে প্রদত্ত ন্যূনতম অভিব্যক্তিটি খুঁজে পেতে পারি, যার পণ্যগুলি কে এর চেয়ে বেশি exc


আমি আসলে আপনার উত্সে 231 বাইটগুলি গণনা করছি, 234 নয় But তবে নির্বিশেষে, আপনি চারটি স্পেস থেকে এক স্পেসে আপনার ইনডেন্টের আকার হ্রাস করে এটি হ্রাস করতে পারবেন। এটি একই কাজ করবে।
অ্যালেক্স এ।

এটি আপনার বাইট গণনা পাওয়ার জন্য একটি সহজ সরঞ্জাম। যাইহোক, চমৎকার জমা এবং সাইটে স্বাগতম!
অ্যালেক্স এ।

:5 লাইনে অনুপস্থিত 5 কমা হ'ল একটি টিউপলকে সংজ্ঞায়িত করে, বন্ধনীটি ()6 লাইনে সরিয়ে নেওয়া যেতে পারে )এবং এর মধ্যে এবং ( ifবা for) এর মধ্যেও ফাঁকা স্থান । maxপ্যারামিটার হিসাবে জেনারেটর পেতে পারেন, এইভাবে বন্ধনীগুলি []অপ্রয়োজনীয়। আপনি dকীগুলির মাধ্যমে পুনরাবৃত্তি করেন , যাতে আপনি নিরাপদে ব্যবহার করতে পারেন d[i]
ট্রাং ওউল

আপনি পরিবর্তন দুই বাইট সংরক্ষণ করতে পারবেন (i+1)*xকরার -~i*xবা i*x+x
কেড

আপনার এখানে একটি অতিরিক্ত, অবৈধ (i*x+x
প্যারেন রয়েছে

2

সিজেএম ( ৪৪ 42 বাইট)

qi_,{)_2$d\/m]_2$-_*@@*2$-_*+~}$W=)'#@*/N*

অনলাইন ডেমো

আমি বরং প্রত্যাশা করছিলাম সেখানে বর্গমূলের সাথে জড়িত একটি সহজ সমাধান হবে, তবে এটি মোটেই সহজ নয়। উদাহরণস্বরূপ ইনপুটটির জন্য 31সারির প্রস্থটি বর্গমূলের সিলিংয়ের চেয়ে দুটি বেশি; 273(16.5 এরও বেশি বর্গমূলের জন্য ) সেরা আনুমানিক বর্গক্ষেত্র একটি নিখুঁত 21x13 আয়তক্ষেত্র।


1

সিজেম, 42 বাইট

li:K_,f-{:XdK\/m]:YX-_*XY*K-_*+}$0='#K*/N*

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

ব্যাখ্যা:

li    Get and interpret input.
:K    Store in variable K for later use.
_     Copy.
,     Build sequence [0 .. K-1].
f-    Subtract from K, to get sequence [K .. 1]. Larger values have to come
      first so that they are ahead in ties when we sort later.
{     Begin block for calculation of target function for sort.
  :X    Store width in variable X.
  d     Convert to double.
  K\/   Calculate K/X.
  m]    Ceiling.
  :Y    Store height in variable Y.
  X-    Calculate Y-X.
  _*    Square it.
  XY*   Calculate X*Y...
  K-    ... and X*Y-K
  _*    Square it.
  +     Add the two squares.
}$    Sort by target function value.
0=    Get first element, this is the best width.
'#K*  Build string of K '# characters.
/     Split using width.
N*    Join with newlines.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.