প্রতিসম লেডিবাগস ug


22

পরিচিতি:

আমরা যখন লেডিবাগগুলি সম্পর্কে চিন্তা করি, আমরা সাধারণত কালো দাগযুক্ত একটি লাল বা গা dark় কমলা রঙের বাগের কথা ভাবি। যদিও এটি প্রয়োজনীয় তা সত্য নয়, যেহেতু লাল / কমলা রঙের দাগযুক্ত লেডিব্যাগগুলি বা দাগ ছাড়াই লেডিব্যাগগুলি রয়েছে , তাই আমরা সাধারণত এশিয়ান লেডিবাগের মতো লেডিব্যাগগুলি চিত্রিত করি:

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

আরেকটি বিষয় লক্ষণীয় যে লেডিবগগুলির দাগগুলি প্রায়শই প্রতিসম মিশ্রিত। এবং এই যেখানে এই চ্যালেঞ্জ আসে।

চ্যালেঞ্জ:

একটি পূর্ণসংখ্যা দেওয়া n( >= 0) দেওয়া হলে , নিম্নলিখিত ASCII- আর্ট লেডিব্যাগটি এক বা একাধিক বার আউটপুট করুন, প্রতিসামগ্রীযুক্ত দাগগুলি পাশাপাশি উভয় পক্ষের পাশাপাশি দুটি বা আরও বেশি লেডিব্যাগগুলি সমানভাবে বিভক্ত করুন।

এখানে ডিফল্ট লেডিবগ লেআউটটি রয়েছে:

    _V_ 
  /(@I@)\
 /   |   \
|    |    |
 \   |   /
  ''-!-''

যদি n=0, আমরা উপরের লেডিবগকে আউটপুট করি।

যখন nশূন্যের চেয়ে বড় হয়, আমরা হয় ASCII- আর্ট বাগের শূন্যস্থানগুলি একটি ছোট হাতের সাহায্যে পূরণ করি o, বা |কেন্দ্রে একটি মূলধন দিয়ে প্রতিস্থাপন করি O। লক্ষ্যটি হ'ল n'খালি' লেডিবাগ (গুলি) এ পরিবর্তন করা, যখন এখনও একটি প্রতিসাম্য আউটপুট (প্রতি লেডিবগ) উত্পাদন করা হয় এবং যতটা সম্ভব লেডিব্যাগ আউটপুট করা যায়।

এর জন্য বৈধ আউটপুটগুলি হ'ল n=1:

    _V_ 
  /(@I@)\
 /   O   \
|    |    |
 \   |   /
  ''-!-''

    _V_ 
  /(@I@)\
 /   |   \
|    O    |
 \   |   /
  ''-!-''

    _V_ 
  /(@I@)\
 /   |   \
|    |    |
 \   O   /
  ''-!-''

তবে এটি অবৈধ হবে:

    _V_ 
  /(@I@)\
 /   |   \
| o  |    |
 \   |   /
  ''-!-''

এর জন্য বৈধ আউটপুটগুলি হ'ল n=2:

    _V_ 
  /(@I@)\
 /   O   \
|    O    |
 \   |   /
  ''-!-''

    _V_ 
  /(@I@)\
 /   O   \
|    |    |
 \   O   /
  ''-!-''

    _V_ 
  /(@I@)\
 /  o|o  \
|    |    |
 \   |   /
  ''-!-''

    _V_ 
  /(@I@)\
 /   |   \
| o  |  o |
 \   |   /
  ''-!-''

etc. There are a lot of possible outputs.

প্রথমটি nযে কোনও একক লেডিবগের সাথে ফিট করা সম্ভব নয় তা হ'ল n=24। এক্ষেত্রে আপনাকে এটিকে যথাসময়ে সমানভাবে দুটি লেডিবগগুলিতে ভাগ করতে হবে (এগুলি একে অপরের পাশে আউটপুট দিতে হবে কিনা তা বেছে নিতে পারেন বা একে অপরের অধীনে - allyচ্ছিকভাবে একটি স্থান বা তাদের মধ্যে একটি নতুন লাইন)। উদাহরণ স্বরূপ:

    _V_        _V_ 
  /(@I@)\    /(@I@)\
 /o o|o o\  /o o|o o\
|o o | o o||o o | o o|
 \o o|o o/  \o o|o o/
  ''-!-''    ''-!-''

বা:

    _V_ 
  /(@I@)\
 /ooo|ooo\
|    |    |
 \ooo|ooo/
  ''-!-''
    _V_ 
  /(@I@)\
 /ooo|ooo\
|    |    |
 \ooo|ooo/
  ''-!-''

চ্যালেঞ্জ বিধি:

  • nএর সীমার মধ্যে থাকবে 0-1000
  • আপনি STDOUT এ আউটপুট চয়ন করতে পারেন, স্ট্রিং বা 2D-Char অ্যারে / তালিকা হিসাবে ফিরে আসতে পারেন, ইত্যাদি etc.
  • শীর্ষস্থানীয় নতুন লাইনগুলি বা অপ্রয়োজনীয় শ্বেতস্পেসের অনুমতি নেই। ট্রেলিং হোয়াইট স্পেসস এবং একক পেছনের নতুন লাইন অনুমোদিত।
  • উপরে উল্লিখিত হিসাবে, যখন দুই বা ততোধিক লেডিব্যাগগুলি প্রয়োজনীয় হয়, আপনি সেগুলি একে অপরের পাশে বা একে অপরের নীচে আউটপুট করা যায় কিনা তা বেছে নিতে পারেন (বা উভয়ের সংমিশ্রণ ..)
  • যখন দুটি বা ততোধিক লেডিব্যাগগুলি একে অপরের পাশে মুদ্রণ করা হয় তখন এর মধ্যে একটি একক alচ্ছিক স্থান অনুমোদিত। যখন দুটি বা ততোধিক লেডিব্যাগগুলি একে অপরকে মুদ্রিত করা হয় তখন এর মধ্যে একটি একক alচ্ছিক নতুন-লাইনের অনুমতি দেওয়া হয়।
  • সিক্যুয়ড চলাকালীন যেকোন ধাপে আপনি লেডিব্যাগগুলির লেআউট চয়ন করতে পারেন, যতক্ষণ না সেগুলি প্রতিসাম্য এবং ইনপুট সমান হয় n
  • যেহেতু লক্ষ্যটি nপরিবর্তন এবং যতটা সম্ভব কম কয়েকটি লেডিব্যাগ রয়েছে, আপনি উপরের দিকে একাধিক লেডিবগ ব্যবহার শুরু করবেন n=23। এই লেডিব্যাগগুলির বিন্যাস একই হওয়া দরকার নেই। আসলে, কিছু ইনপুটগুলির পক্ষে, যেমন দুটি n=25বা n=50নাম রাখাও এটি সম্ভব নয় ।
  • তদাতিরিক্ত, কখনও কখনও দুটি বা ততোধিক লেডিবগগুলির মধ্যে বিন্দুগুলি সমানভাবে ভাগ করা সম্ভব হয় না। সেক্ষেত্রে আপনাকে তাদের যথাসময়ে সমানভাবে বিভক্ত করতে হবে, তাদের মধ্যে সর্বাধিক 1 এর পার্থক্য সহ।

সুতরাং n=50, শেষ দুটি নিয়ম মাথায় রেখে, এটি একটি বৈধ সম্ভাব্য আউটপুট হবে (যেখানে প্রথম বাগের 16 টি স্পট রয়েছে এবং অন্য দুটিতে 17 টি রয়েছে):

    _V_        _V_        _V_ 
  /(@I@)\    /(@I@)\    /(@I@)\
 /oooOooo\  /   O   \  /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
 \   |   /  \oooOooo/  \o oOo o/
  ''-!-''    ''-!-''    ''-!-''

সাধারাইওন রুল:

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
    কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার পক্ষে যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন।
  • স্ট্যান্ডার্ড নিয়মগুলি আপনার উত্তরের জন্য প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং রিটার্ন-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে। আপনার কল
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে আপনার কোডের জন্য একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন।
  • এছাড়াও, প্রয়োজনে একটি ব্যাখ্যা যোগ করুন।

খালি লেডিব্যাগে "যত সম্ভব সম্ভব কিছু পরিবর্তন" বলতে কী বোঝ? কোনও একক লেডিব্যাগে এন (<24) অক্ষরগুলি o / O স্থাপন করার সময় আপনি এতে n পরিবর্তন করেন। অথবা আপনি কি এন -1 থেকে এন-তে পরিবর্তিত পরিবর্তনগুলি বোঝাচ্ছেন (ইনপুটগুলি 1 দ্বারা পৃথক হওয়ার সাথে সাথে আউটপুটগুলি যতটা সম্ভব সামান্য পরিবর্তিত হয়)?
হিমডল

@ হিমডাল খারাপ কথার কারণে বিভ্রান্তির জন্য দুঃখিত। আমি যখন এই চ্যালেঞ্জটির কথা ভেবেছিলাম তখন একাধিক চরিত্রকে একটি স্পট তৈরি করার অনুমতি দেওয়ার ধারণা ছিল তবে আমি এটিকে বাদ দিয়েছি oএবং এর Oপরিবর্তে ব্যবহার করেছি। আমি শব্দটি কিছুটা পরিবর্তন করেছি।
কেভিন ক্রুইজসেন

জন্য n=50উদাহরণস্বরূপ, আমি বিশ্বাস করি আপনি যদি প্রথম বাগ 16 দাগ এবং অন্য দুটি একে 17. আছে হয়েছে মানে
জন ক্লজ

এটি আমার প্রিয় জিমি হেন্ডরিক্স অ্যালবাম।
মনিকা iamnotmaynard

@ আইমনোটমায়নার্ড সম্ভবত আমি কিছু স্পষ্টরূপে মিস করছি, বা আপনি ভুল চ্যালেঞ্জ সম্পর্কে মন্তব্য করেছেন? আমি সত্যিই জিমি হেন্ডরিক্স এবং
লেডিব্যাগগুলির

উত্তর:


5

কাঠকয়লা , 84 81 বাইট

Nθ≔⌈∕∨θ¹¦²³ηFη«≔⁺÷θη‹ι﹪θηζV_¶I@)↘²↙|/←''-↑!↑⎇›ζ²¹OO²§|OζE037×o⌊⟦⁻÷ζ²Iκ⁺³⁼κ3⟧↙»‖B←

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ

মোট দাগের সংখ্যা ইনপুট করুন।

≔⌈∕∨θ¹¦²³η

প্রয়োজনীয় লেডিবার্ডের সংখ্যা গণনা করুন।

Fη«

প্রতিটি লেডিবার্ডের উপরে লুপ করুন।

≔⁺÷θη‹ι﹪θηζ

এই লেডিবার্ডে লাগানোর জন্য দাগগুলির সংখ্যা গণনা করুন।

V_¶I@)↘²↙|/←''-↑!

লেডিবার্ডের মাথা এবং ডান দিকটি মুদ্রণ করুন।

↑⎇›ζ²¹OO²

যদি 21 টিরও বেশি স্পট থাকে তবে দুটি দাগ মুদ্রণ করুন, অন্যথায় পিছনে মুদ্রণ করুন।

§|Oζ

যদি দাগের সংখ্যাটি বিজোড় হয় তবে অন্য কোনও স্পট মুদ্রণ করুন অন্যথায় পিছনের অংশটি মুদ্রণ করুন।

E037×o⌊⟦⁻÷ζ²Iκ⁺³⁼κ3⟧

দাগের সংখ্যা দুটি দ্বারা ভাগ করুন এবং তাদের 3, 4 এবং 3 স্পটের তিনটি সারিগুলির মধ্যে বিতরণ করুন।

↙»

পরবর্তী লেডিবার্ডের শুরুতে যান।

‖B←

পিছনে রেখে ক্যানভাসকে বামে প্রতিবিম্বিত করুন।


8

পাইথন 2 , 252 249 238 212 211 213 209 বাইট

n=input()
x=(n+22)/23or 1
for i in range(x):b=n/x+(n%x>i);c=r"""    _V_
  /(@I@)\
 /361%s163\
|408717804|
 \5201025/
  ''-!-''"""%'|O'[b%2];i=0;exec"c=c.replace(`i%9`,' |oO'[i>9::2][i<b/2],2);i+=1;"*11;print c

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

  • কেভিন ক্রুইজসেনকে 9 বাইট সংরক্ষণ করা হয়েছে
  • মিঃ এক্সকোডারকে 18 বাইট সংরক্ষণ করা হয়েছে
  • জোনাথন ফ্রেচের জন্য 2 বাইট সংরক্ষণ করা Sa

আমি মনে করি আপনি পরিবর্তে .replace('A','|O'[b%2])এবং ব্যবহার করতে পারেন c=" _V_\n /(@I@)\ \n /361"+'|O'[b%2]+"163\ \n|4087B7804|\n \\529B925/\n ''-!-''"?
কেভিন ক্রুইজসেন

যৌক্তিক বা পরিবর্তে পরিবর্তিত [' o','|O'][i>9]হয়ে ' |oO'[i>9::2]এবং ব্যবহার করে 230 বাইট| । এছাড়াও for i in range(11)একটি execবিবৃতি ঘুরিয়ে 4 বাইট সংরক্ষণ করা।
মিঃ এক্সকোডার

1
এবং মন্তব্য বিশৃঙ্খলার জন্য দুঃখিত, তবে লুপের সাথে আপনার তালিকা বোঝার মিশ্রিত করে , একটি অপ্রয়োজনীয় পরিবর্তনশীলটিকেও সরিয়ে 218 বাইটfor
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার অনেক অনেক ধন্যবাদ :)
টিফিল্ড

এটা সম্ভব সবচেয়ে কম লেডিব্যাগ উত্পাদন করার কথা, না? আমি যখন টিআইওতে 24-এর মাধ্যমে 46 রেখেছিলাম তখন এটি দুটিটির পরিবর্তে 3 টি লেডিব্যাগ দেয়।
নিক মাত্তিও

7

জাভাস্ক্রিপ্ট (ES6), 183 186 বাইট

লেডিব্যাগগুলির মধ্যে দাগগুলি বিভক্ত করতে টিফেল্ডের উত্তরের মতো একই সূত্র ব্যবহার করে ।

n=>(g=k=>k--?`    _V_
  /(@I@)\\
 /3\\
|4|
 \\3/
  ''-!-''
`.replace(/\d/g,i=>(h=s=>i--?h((p=N?(N-=2,'o'):' ')+s+p):s)('|O'[N>2*i|N&1&&+!!N--]),N=(n%j>k)+n/j|0)+g(k):'')(j=n/23+.99|0||1)

ডেমো


6

বেফুঞ্জ, 292 279 বাইট

#j07-00p&>::1-27*9+/\!!*:1+06pv-1_@#:<<g61$<<:
v"h"**95%2:+`g61%g60\/g60::p61<>-0g*+35*-,:!|
>\-30p2/:55+`:59**"g"\-40p-26pv^*84\!`"."::<<9
v\%+55+g62:%+55+4*g62:::-1<+55<>:"/n"$#->#<^#<
>`26g!+"O"*"Y"\-\-\5+0p:>#^_" 66<0<66// >,-"v
"n //>7OXO8k />'&%$%&'k !(*+)#)+*(! /k,-.$."<v

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

ব্যাখ্যা

প্রথম 15 টি মুদ্রণযোগ্য অক্ষর বিশেষ উদ্দেশ্যে সংরক্ষণের অনুমতি দেওয়ার জন্য লেডিবগের জন্য এএসসিআইআই আর্ট একটি একক বেফঞ্জ স্ট্রিংয়ে এনকোড করা হয়েছে, যা 15 দ্বারা অফসেট হয়। এই বিশেষ অক্ষরের প্রথম দুটি নতুন লাইন এবং চরিত্রকে উপস্থাপন করে |, উভয়ই অন্যথায় মুদ্রণযোগ্য হবে না। তৃতীয়টি ব্যবহৃত হয় না, কারণ এটি একটি ", যা কোনও স্ট্রিংয়ে ব্যবহার করা যায় না। পরবর্তী দুটি কেন্দ্রের বৃহত স্থানগুলিকে উপস্থাপন করে। এবং বাকি দশটি ডানাগুলির দাগগুলির জন্য।

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

এটি ব্যাখ্যা করা সহজ করার জন্য, হাইলাইট করা বিভিন্ন উপাদান অংশ সহ এটি কোড:

কার্যকরকরণের পাথ সহ উত্স কোড

*|এগুলি ধ্রুবক হওয়ায় আমরা অনুসন্ধান সারণীতে নতুন লাইন এবং চরিত্রটি শুরু করে শুরু করি ।
*এরপরে আমরা স্টিডিন থেকে দাগের সংখ্যাটি পড়ি এবং প্রয়োজনীয় লেডিবগগুলি গণনা করি।
*এরপরে আমরা বাগের সেটটির জন্য বাইরের লুপটি শুরু করতে পারি, পরবর্তী লেডিবগের রেন্ডার করার জন্য স্পটগুলির সংখ্যা গণনা করে।
*প্রতিটি লেডিবগের জন্য, আমরা গণনা করি যে বৃহত কেন্দ্র স্পটটি প্রদর্শিত হবে (যদি spots%2 == 1), এবং অনুসন্ধানের টেবিলে যথাযথ মানটি লিখুন।
*একইভাবে, আমরা বড় দাগের অন্য জোড়াটি spots/2 > 10আবার দেখাবার টেবিলটি আপডেট করে (যদি ) দেখানো দরকার কিনা তা আমরা গণনা করি । আমরা প্রতিটি উইংসে প্রয়োজনীয় অবশিষ্ট দাগগুলিও গণনা করি।
*লুক টেবিল আরম্ভের চূড়ান্ত অংশটি একটি লুপ যা ছোট দাগগুলির মধ্যে প্রদর্শিত হবে তা গণনা করে। মূলত অ্যালগরিদম হ'ল: যদি (spotnum*spotcount+4)%10 > ((spotnum+1)*spotcount+4)%10, তবে স্পটটি প্রদর্শিত হওয়া দরকার।
*এরপরে আমরা লেডিবগের এনকোডযুক্ত স্ট্রিং উপস্থাপনাটিকে স্ট্যাকের দিকে ঠেলা দেই। এটি মূলত কেবল একটি সরল স্ট্রিং, তবে কোডের ফাঁকদিকগুলি ফাঁক করে দেখার চেষ্টা করায় এটি কিছুটা সংশ্লেষিত হয়ে গেল যাতে উত্সটি একটি আয়তক্ষেত্র গঠন করবে।
*এই সময়ে, আমরা আউটপুট লুপটি শুরু করতে প্রস্তুত, অক্ষরগুলি একে একে প্রক্রিয়াজাতকরণ, বিশেষভাবে তৈরি করা দাগগুলি (দাগগুলি, লাইন ব্রেকগুলি ইত্যাদির) পূর্বে নির্মিত তদন্তের সারণির মাধ্যমে রূপান্তরিত করে।
*অবশেষে আমরা যাচাই করি যে আমরা সমস্ত প্রয়োজনীয় লেডিব্যাগগুলি প্রদর্শিত করেছি কিনা, অন্যথায় বাইরের লুপের প্রারম্ভে ফিরে যেতে হবে continue


ভাল লাগল, আমি আপনার লেডিবগগুলি প্রতিটি স্তরের 1-23 থেকে প্যাটার্নগুলি পছন্দ করি। অন্যান্য উত্তরগুলির চেয়ে বেশ আলাদা। আমার কাছ থেকে +1 আপনার কি কোনও ব্যাখ্যা যুক্ত করতে আপত্তি হবে (আপনি সম্ভবত এটি আরও গল্ফ করা শেষ করার পরে)?
কেভিন ক্রুইজসেন

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

3

রুবি , 203 193 190 বাইট

f=->n{s=%q{    _V_ 
  /(@I@)\
 /137x731\
|0596x6950|
 \248x842/
  ''-!-''
}
n-=d=n>0?n/(1+~-n/23):0
s.gsub!(/\d/){$&.to_i<d/2??o:' '}
x=[d%2,d<=>21]*2
s.gsub!(?x){"|O|"[x.pop]}
n>0?s+f[n]:s}

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

  • জর্দানের জন্য 10 বাইট সংরক্ষণ করা হয়েছে

{|m|m.সঙ্গে প্রতিস্থাপন করা যেতে পারে {$&.; b=(n-1)/23+1সঙ্গে প্রতিস্থাপন করা যেতে পারে b=1+~-n/23; এবং x=[z=d>21,d%2>0,z]⏎s.gsub!(?x){x.pop ? ?O:?|}সঙ্গে প্রতিস্থাপন করা যেতে পারে x=[d%2,d<=>21]*2⏎s.gsub!(?x){"|O|"[x.pop]}
জর্দান

ব্যবহার করে আপনি অন্য বাইট সংরক্ষণ করতে পারবেন %q{XY}পরিবর্তে 'X'+"Y"করে প্রথম আট লাইন এবং আপনার মাত্র কয়েক আরো d=n>0?n/(b=1+~-n/23):b=0পরিবর্তে n>0?d=n/(b=(n-1)/23+1):d=b=0
জর্দান

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