আমাকে চুল কাটা!


18

এটি আমার মাথা:

\         /-- -|
 /   -\  |  |  |
\      \ \  \  |
 --\    | \  | |
    / |--| / / |
 /|-  //--| /  |
| |  ||   //\  |
| \  /|  //  \ |

এটি ঠিক আটটি চুল নিয়ে গঠিত। আমার চুল অনেক লম্বা। আমি নির্দিষ্ট প্রতিটি দৈর্ঘ্য কাটা

ইনপুট

এই বিভাগের প্রধান আকর্ষণ চুলের আসল মাথা। অলসতার জন্য এখানে অ্যানিমেশন সহ একটি গ্রাফিকাল, রঙ-কোডেড উপস্থাপনা :

কালার কোডড জিনিস অ্যানিমেটেড জিনিস

এবং চুলের সেটটি কী কী তা সম্পর্কিত একটি সম্পূর্ণ স্পেসিফিকেশন :

  • পৃথক চুল, যা আমরা ডাকব সুতা , বাইরে তৈরি করা হবে /, \, |, এবং -ASCII অক্ষর, অত: পর নামে পরিচিত পরমাণু
  • শোনার পুরো মাথাটি (সমস্ত স্ট্র্যান্ড মিলিত) সারিগুলির cদ্বারা কলাম হবে r, যেখানে c≥ 1 এবং r≥ 2।
  • প্রতিটি স্ট্র্যান্ড হবে ...
    • মাথার শেষ সারিতে শুরু করুন (সারি r- 1)।
    • একটি দৈর্ঘ্য lযেখানে l≥ 2।
  • স্ট্র্যান্ডগুলি নিম্নলিখিত পদ্ধতির সাথে পার্স করা যেতে পারে:
    1. স্ট্র্যান্ডের নীচে শুরু করুন। এটি হবে একটি /, |বা \পরমাণু, যাকে আমরা মূল বলব । (মূলগুলি নির্দেশ করে স্ট্র্যান্ডগুলি বাম থেকে ডানে পার্স করা হয়))
    2. মূলের দিকে নির্দেশিত পরমাণুটি সন্ধান করুন।
      • একটি |পরমাণু উপরে এবং নীচে পয়েন্ট। একটি -পরমাণু বাম এবং ডান পয়েন্ট (তবে কখনই মূলকে নির্দেশ করতে পারে না যেহেতু কেবলমাত্র মূলগুলি নীচের সারিতে থাকতে পারে)। একটি /পরমাণু বাম-নীচে এবং উপরে-ডানদিকে নির্দেশ করে এবং একটি \পরমাণু বিপরীত করে।
      • সর্বদা ঠিক একটি পরমাণু থাকবে যা মূল পরমাণুর দিকে নির্দেশ করে।
    3. একটি অব্যবহৃত পরমাণু (এটি এখনও কোনও স্ট্র্যান্ডের অংশ নয়) সন্ধান করুন যা এই পরমাণুর দিকে নির্দেশ করে এবং এই পরমাণুর নীচেও নেই (চুল নীচের দিকে বাড়তে পারে না, তবে পাশাপাশি রয়েছে ঠিক আছে)।
      • যদি শূন্য থাকে তবে আপনি স্ট্র্যান্ডের শেষ প্রান্তে পৌঁছে গেছেন!
      • যদি একটি থাকে তবে এটি স্ট্র্যান্ডের পরবর্তী পরমাণু। এই পরমাণুর সাথে 3 ধাপ পুনরাবৃত্তি করুন। (এই পরমাণুটি এখন ধাপ 3 এর উদ্দেশ্যে "ব্যবহৃত" হিসাবে চিহ্নিত হয়েছে, যেহেতু এটি স্ট্র্যান্ডের অংশ part
      • মাথার যে কোনও বিন্দুতে এখানে কখনও একাধিক অব্যবহৃত পরমাণু থাকবে না ।

ইনপুট ফর্ম্যাট হবে:

  • চুলের মাথা। হ'ল ইনপুট (আক্ষরিক নিউলাইনগুলির সাথে একাধিক ইনপুট), বা নতুন লাইনের জায়গায় আপনার পছন্দসই একটি ডিলিমিটার সহ হতে পারে। নোট করুন যে মাথা সর্বদা একটি আয়তক্ষেত্র হবে; অর্থাত্ ট্রেলিং হোয়াইটস্পেসটি প্রয়োজনীয় হিসাবে যুক্ত করা হবে (ডানদিকে অদ্ভুত সরল রেখার চুলগুলি কেবল বিভ্রান্তি এড়াতে অতিরিক্ত পেছনের সাদা অংশটি বাদ দেওয়ার জন্য)।
  • একটি সংখ্যা ≥ 1 নির্দিষ্ট করে কত চুল কাটা উচিত। এটি পরবর্তী বিভাগে বিস্তারিতভাবে বর্ণনা করা হবে।

আপনি কোনও ফাংশনে ইনপুট গ্রহণ করতে পারবেন, STDIN / STDOUT ইত্যাদি ব্যবহার করুন ( যুক্তিসঙ্গত কিছু )।

আউটপুট

আপনার আউটপুট চুল কাটা প্রয়োগের সাথে চুলের মাথা হবে। চুল কাটা দিতে, চুলের শেষ দিক থেকে মূলের দিকে অগ্রসর হওয়া থেকে শুরু করে চুলের প্রতিটি স্ট্র্যান্ডের দৈর্ঘ্য নির্দিষ্ট করে (যা সর্বদা 1 বা তার বেশি হবে) দ্বারা কমিয়ে দিন। তবে, সবসময় মূল অক্ষত রেখে দিন!

এখানে একটি সহজ উদাহরণ। মাথার ইনপুটটি বলুন

\ 
 /
| 
| 

দ্বিতীয় ইনপুট সহ 2, আপনি স্ট্র্যান্ড থেকে দুটি পরমাণু কেটে ফেলবেন এবং এর ফলাফল পাবেন

|
|

এবং একটি ইনপুট সঙ্গে 42, আউটপুট ঠিক হবে

|

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

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

সমস্ত পরীক্ষার ক্ষেত্রে, এই পোস্টের একেবারে শুরুতে উপস্থাপিত উদাহরণটি ব্যবহৃত হবে।

চুল কাটার দৈর্ঘ্য = 1:

          /-   |
 /    \  |     |
\      \ \  \  |
 --\    | \  | |
    / |--  / / |
  |-  //--| /  |
| |  ||   //   |
| \  /|  //  \ |

3 দৈর্ঘ্য:

         |      
         \     |
 --\    | \    |
    / |--  / / |
  |-  //  | /  |
  |  ||   //   |
| \  /|  //  \ |

7 এর দৈর্ঘ্য:

  |-  /   |     
  |  |    /    |
| \  /|  //  \ |

1337 এর দৈর্ঘ্য:

| \  /|  //  \ |

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে!


নীচের সারিতে পরমাণু রয়েছে? পয়েন্ট 2 হ্যাঁ বলে মনে হচ্ছে, পয়েন্ট 1 মনে হয় না বলে মনে হচ্ছে।
edc65

@ edc65 না, নেই। (পরিষ্কার করার জন্য সম্পাদিত)
ডুরকনব

আমি মনে করি পরীক্ষার ক্ষেত্রে কোনও ভুল আছে। নীচে থেকে চতুর্থ সারিতে, -বাম দিক |থেকে চতুর্থ স্ট্র্যান্ডের বাম পয়েন্ট থেকে তৃতীয় স্ট্র্যান্ডের মধ্যে
ফেয়ারসাম

পছন্দ করুন পথ দ্বারা নির্ধারিত হয় কি পয়েন্ট- , না কি এটি পয়েন্ট । উদাহরণস্বরূপ, প্রথম স্ট্র্যান্ডে এটিটি |নির্দেশ করে না /তবে এটি দ্বারা চিহ্নিত করা হয়েছে /। (হ্যাঁ, আমি জানি এটি বিভ্রান্তিকর; আমাকে বেশ কয়েকবার জিআইএফ পুনরায় করতে হয়েছিল কারণ আমি নিজেও বিভ্রান্ত হয়েছিলাম!) এটি বোঝার একটি সহজ উপায় হতে পারে দ্বিতীয় স্ট্র্যান্ডের শীর্ষ দিকে তাকানো।
ডোরকনবব

আমি জানি এটি পূর্ববর্তীগুলিতে নির্দেশ করে পরবর্তী টুকরা দ্বারা নির্ধারিত হয়। আমার যুক্তিটি হ'ল চতুর্থ প্রান্তে -যুক্ত হওয়া উচিত , তৃতীয় নয়।
feersum

উত্তর:


12

জাভাস্ক্রিপ্ট (E6) 195 212 222 232

প্রতিটি স্ট্র্যান্ডের পথ সন্ধান করতে পুনরাবৃত্তাকারী ফাংশন আর ব্যবহার করে এবং মূল থেকে সবচেয়ে প্রিয়তমের জন্য 1 থেকে শুরু করা অবস্থানগুলি চিহ্নিত করে। তারপরে, দ্বিতীয় পাসে, ফাঁকা দিয়ে নীচের চিহ্নিত অবস্থানের বিকল্প স্থাপন করা সহজ।

F=(h,t,
   n=[...h],c=h.search('\n'),
   R=p=>[1,-1,c+2,c+1,c].some((d,i)=>n[p-d]=='--\\|/'[i]?n[p-=d]=1:0)&&R(p)+(R[p]=l++)
  )=>
  n.map((v,p)=>R[p]<t?' ':h[p],n.map((a,p)=>!h[p+c]&a>' '&&R(p,l=0))).join('')

টেস্ট ফায়ারফক্স / Firebug কনসোলে

head = "\\         /-- -|\n /   -\\  |  |  |\n\\      \\ \\  \\  |\n --\\    | \\  | |\n    / |--| / / |\n /|-  //--| /  |\n| |  ||   //\\  |\n| \\  /|  //  \\ |";
console.log(F(head,0))
console.log(F(head,1))
console.log(F(head,3))
console.log(F(head,7))
console.log(F(head, 1337))

আউটপুট

\         /-- -|
 /   -\  |  |  |
\      \ \  \  |
 --\    | \  | |
    / |--| / / |
 /|-  //--| /  |
| |  ||   //\  |
| \  /|  //  \ |

          /-   |
 /    \  |     |
\      \ \  \  |
 --\    | \  | |
    / |--  / / |
  |-  //--| /  |
| |  ||   //   |
| \  /|  //  \ |


         |      
         \     |
 --\    | \    |
    / |--  / / |
  |-  //  | /  |
  |  ||   //   |
| \  /|  //  \ |






  |-  /   |     
  |  |    /    |
| \  /|  //  \ |








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