হেক্সাগনি উত্স কোডটি প্রকাশ করা


52

ভূমিকা

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

abcdefg

এবং

 a b
c d e
 f g

সুতরাং মূলত, কোডটি একটি নিয়মিত ষড়ভুজ হয়ে গেছে। তবে মনে রাখবেন যে কোডটিতে একটি নতুন কমান্ড যুক্ত করা, যা abcdefghনিম্নলিখিত প্রোগ্রামে প্রদর্শিত হবে:

  a b c
 d e f g
h . . . .
 . . . .
  . . .

আপনি দেখতে পাচ্ছেন যে, প্রথম পদক্ষেপটি কোডটিকে একটি ষড়্চাগ্রহে পরিণত করছে এবং তার পরে ষড়ভুজটি .পরবর্তী কেন্দ্রিক ষড়ভুজ সংখ্যাতে নো-অপ্স ( ) দিয়ে পূর্ণ হবে ।

আপনার কাজটি সহজ, যখন একটি স্ট্রিং দেওয়া হয় (উত্স কোড), সম্পূর্ণ ষড়ভুজ উত্স কোড আউটপুট।

নিয়ম

  • আপনি কোনও প্রোগ্রাম বা একটি ফাংশন সরবরাহ করতে পারেন।
  • শীর্ষস্থানীয় হোয়াইটস্পেস অনুমোদিত, তবে কেবল যখন ষড়ভুজ আকারের থেকে বেরিয়ে আসে না
  • ট্রেলিং হোয়াইটস্পেস অনুমোদিত।
  • নোট করুন যে প্রোগ্রামের সাদা স্থান উপেক্ষা করা হয় । তাই a b cসমানabc
  • কেবল প্রিন্টযোগ্য এএসসিআইআই অক্ষর ( 32 - 126) ব্যবহার করা হয়, তাই কেবল নিয়মিত Spaceঅক্ষরটিকেই উপেক্ষা করা হয়।
  • ধরে নিন যে স্ট্রিংয়ের দৈর্ঘ্য 0 এর চেয়ে বেশি।
  • এটি , তাই সর্বনিম্ন পরিমাণ বাইটের সাথে জমাটি জয়!

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

Input: ?({{&2'2':{):!/)'*/

Output:
  ? ( {
 { & 2 '
2 ' : { )
 : ! / )
  ' * /


Input: H;e;l;d;*;r;o;Wl;;o;*433;@.>;23<\4;*/

Output:
   H ; e ;
  l ; d ; *
 ; r ; o ; W
l ; ; o ; * 4
 3 3 ; @ . >
  ; 2 3 < \
   4 ; * /


Input: .?'.) .@@/'/ .!.>   +=(<.!)}    (  $>( <%

Output:
   . ? ' .
  ) . @ @ /
 ' / . ! . >
+ = ( < . ! )
 } ( $ > ( <
  % . . . .
   . . . .

6
এছাড়াও, আপনি যে পিকে হতে চান তা আমি নিশ্চিত নই, তবে কোডের প্রস্থ নির্ধারণের প্রক্রিয়ায় ব্যাকটিকগুলি উপেক্ষা করা হবে কারণ তারা পরবর্তী চরিত্রটি বর্নিত করে। সুতরাং abc`defgবাস্তবে পেস্টবিন.com
মার্টিন এন্ডার

2
@ মার্টিনব্যাটনার ওহ, আমি জানতাম না :)। এই চ্যালেঞ্জের জন্য, ব্যাকটিকগুলি এড়ানো হবে না।
আদনান 20

18
আমি সত্যিই এই প্রশ্নের জন্য হেক্সাগনির একটি উত্তর দেখতে চাই।
আর্কটরাস

2
@ আদনান সম্ভবত আরও ভাল প্রতিক্রিয়া হবেন "আপনি ধরে নিতে পারেন ইনপুটটিতে কোনও ডিবাগ পতাকা ( `অক্ষর) নেই" "
০৩

4
@ আম্পোরা জিজ্ঞাসা করুন এবং আপনি পাবেন।
মার্টিন ইন্ডার

উত্তর:


13

পাইথ, 57 54 50 49 48 46

V+UJfgh*6sUTlK-zd1_UtJ+*d-JNjd:.[K\.^TJZ=+Z+JN

পরীক্ষা স্যুট

প্রতিটি লাইনে একটি শীর্ষস্থানীয় স্থান মুদ্রণ করে।

এই সংস্করণটির এমন প্রমাণ প্রয়োজন যা 10 ^ n> = 3n (n - 1) +1 সমস্ত n> = 1 এর জন্য । প্রমাণ সরবরাহের জন্য এনারডিআই এবং এরিকওয়ংকে ধন্যবাদ ।

এই অসমতার অনুসরণ করে: 10 ^ n> (1 + 3) ^ n = 1 + 3n + 9n (এন - 1) + ...> 3 এন (এন - 1) + 1 সহজেই দেখতে পাবেন যে এটি এন> = 2এন = 1 কেসটি পরীক্ষা করা বরং তুচ্ছ, 10> 1 প্রদান করে ।

বিকল্পভাবে, এই সমীকরণগুলির ডেরিভেটিভগুলি দু'বার নেওয়ার পরে দেখানো হয় যে 10 all n এর মধ্যে সমস্ত এন> = 1 এর জন্য বৃহত্তর দ্বিতীয় ডেরিভেটিভ রয়েছে , যা পরে প্রথম ডেরাইভেটিভগুলিতে এবং শেষ পর্যন্ত মূল সমীকরণগুলিতে ক্যাসকেড করা যায়।

ব্যাখ্যা

              ##  Implicit: z=input(); Z=0
Jf...1        ##  Save to J the side length of the hexagon the code fills up
              ##  by finding the first number such that:
gh*6sUT       ##  the the T'th hexagonal number is greater than...
              ##  Computes 6 * T'th triangular number (by using sum 1..T-1) + 1
    lK-zd     ##  ...the length of the code without spaces (also save the string value to K)
V+UJ_UtJ      ##  For loop over N = [0, 1, ..., J-1, ..., 0]:
+*d-JN        ##  append J - N spaces to the front of the line
jd            ##  riffle the result of the next operation with spaces
:.[K\.yJ      ##  slice the string given by K padded to be the length of the Jth hexagon
              ##  number with noops
Z=+Z+JN       ##  from Z to Z + J + N, then set Z to be Z + J + N

2
প্রথমে আপনাকে n> = 1 এর জন্য ln (10) * 10 ^ n> 6n-3 (ডেরাইভেটিভস) প্রমাণ করতে হবে। এটি সহজ, কারণ এই এক্সপ্রেশনগুলির ডেরাইভেটিভগুলি ln (10) ^ 2 10 ^ n এবং 6 হওয়ায় 10 ^ n যেহেতু একঘেয়েমি বৃদ্ধি পাচ্ছে এবং 10 ^ 1> 6 * 1, 10 ^ n সকলের জন্য 6n-3 এর চেয়ে বড় এন> = 1। আপনি 10 ^ n এবং 3n (n-1) +1 এর প্রমাণটি সম্পূর্ণ করতে একই যুক্তি ব্যবহার করতে পারেন।
আর্কটরাস

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

সাহায্য করে আনন্দ পেলাম. ক্যালক কখনও কখনও সত্যই কদর্য পেতে পারে।
আর্কটরাস

উপরের লিঙ্কে পাইথ.হেরোকুয়াপ.com/?code=etc আমি সংকলকটি চালিত দেখতে
পাই

1
@ ফ্রাইআমএইজিগম্যান খুব শক্তিশালী 4 4 n> 3n (n-1) + 1 n> = 1 এর জন্য দেখানোর একটি খুব সহজ উপায় আছে, কোনও ক্যালকুলাসের প্রয়োজন নেই। (1 + 3) the n = 1 + 3n + 9n (n-1) / 2 + ... কেবল দ্বিপদী প্রসারিত করে ব্যবহার করুন। প্রথম এবং তৃতীয় পদগুলি সরাসরি 1 + 3 এন (এন-1 )কে বড় করে তোলে, সুতরাং তৃতীয় শব্দটি উপস্থিত থাকলে (যা এন> = 2 এর জন্য) অসমতা অবিলম্বে। এটি কেবলমাত্র n = 1 কেস ছেড়ে দেয় যা আরএইচএস 1 হওয়ার কারণে তুচ্ছ
এরিক ওয়াং

90

হেক্সাগনি , 271 বাইট

আমি আপনাকে একটি হেক্সাগনির স্ব-দোভাষী প্রথম 3% উপস্থিত করছি ...

|./...\..._..>}{<$}=<;>'<..../;<_'\{*46\..8._~;/;{{;<..|M..'{.>{{=.<.).|.."~....._.>(=</.\=\'$/}{<}.\../>../..._>../_....@/{$|....>...</..~\.>,<$/'";{}({/>-'(<\=&\><${~-"~<$)<....'.>=&'*){=&')&}\'\'2"'23}}_}&<_3.>.'*)'-<>{=/{\*={(&)'){\$<....={\>}}}\&32'-<=._.)}=)+'_+'&<

এটি অনলাইন চেষ্টা করুন! আপনি এটিকে নিজে চালাতে পারেন তবে এটি প্রায় 5-10 সেকেন্ড সময় নিতে পারে।

নীতিগতভাবে এটি পার্শ্ব-দৈর্ঘ্য 9 (217 বা তার কম স্কোরের জন্য) মাপসই হতে পারে, কারণ এটি কেবল 201 কমান্ড ব্যবহার করে এবং আমি প্রথমে লিখেছি ng যাইহোক, আমি পুরোপুরি নিশ্চিত যে সব কিছুকে বাস্তবে উপযুক্ত করতে চিরকালের জন্য লাগবে, তাই আমি আসলে এটি চেষ্টা করব কিনা তা নিশ্চিত নয়।

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

ব্যাখ্যা

কোডটি উন্মুক্ত করে এবং নিয়ন্ত্রণ প্রবাহের পাথগুলি টীকা দিয়ে শুরু করা যাক:

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

এটি এখনও বেশ অগোছালো, তাই এখানে আমি প্রথমে যে "অগল্ফড" কোডটি লিখেছিলাম তার জন্য একই চিত্রটি দেওয়া হয়েছে (আসলে, এটি পাশের দৈর্ঘ্যের 20 এবং মূলত আমি পাশের দৈর্ঘ্যের 30 এ কোডটি লিখেছিলাম তবে এটি এতটা স্পর্শকাতর ছিল যে এটি হবে না 'পাঠযোগ্যতার মোটেও উন্নতি করতে পারবেন না, তাই আকারটিকে কিছুটা যুক্তিসঙ্গত করতে আমি কিছুটা কমপ্যাক্ট করেছি):

এখানে চিত্র বর্ণনা লিখুন
আরও বড় সংস্করণের জন্য ক্লিক করুন।

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

বেসিক অ্যালগরিদম আমার সিজেএম উত্তরের সাথে প্রায় একই রকম । দুটি পার্থক্য রয়েছে:

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

এর অর্থ মূল ধারণাটি এটিকে ফুটিয়ে তোলে:

  • ইনপুট স্ট্রিংটির দৈর্ঘ্য গণনা করার সময় পড়ুন এবং সঞ্চয় করুন।
  • ক্ষুদ্রতম পার্শ্ব-দৈর্ঘ্য N(এবং সংশ্লিষ্ট কেন্দ্রিক ষড়ভুজ সংখ্যা hex(N)) সন্ধান করুন যা পুরো ইনপুটটি ধরে রাখতে পারে।
  • ব্যাস গণনা করুন 2N-1
  • প্রতিটি লাইনের জন্য, ইনডেন্ট এবং ঘরগুলির সংখ্যার (যা যোগফল 2N-1) গণনা করুন । ইন্ডেন্টটি প্রিন্ট করুন, ঘরগুলি মুদ্রণ করুন ( .ইনপুটটি ইতিমধ্যে শেষ হয়ে গেছে তা ব্যবহার করে ), একটি লাইনফিড মুদ্রণ করুন।

উল্লেখ্য তাই প্রকৃত কোড (বাঁদিকের কোণায় মধ্যে শুরু হয় শুধুমাত্র নো অপস আছে $, যা উপর অনেক উঁচুতে লাফাতে >, তাই আমরা সত্যিই শুরু ,গাঢ় ধূসর পথে)।

এখানে প্রাথমিক মেমরি গ্রিড রয়েছে:

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

সুতরাং মেমরি পয়েন্টারটি উত্তরের দিকে নির্দেশ করে প্রান্তের লেবেল ইনপুট থেকে শুরু হয় । ,STDIN বা একটি থেকে বাইট পড়ে -1যদি আমরা সেই প্রান্তে EOF টি আঘাত করে থাকি। অতএব, <ডান এর পরে শর্তযুক্ত যে আমরা সমস্ত ইনপুট পড়েছি কিনা। আপাতত ইনপুট লুপে থাকি। পরবর্তী কোডটি আমরা কার্যকর করি

{&32'-

এটি প্রান্ত লেবেলযুক্ত স্পেসে একটি 32 লিখেছেন এবং তারপরে এটি প্রান্তের লেবেলযুক্ত ডিফারের ইনপুট মান থেকে বিয়োগ করে । মনে রাখবেন এটি কখনই নেতিবাচক হতে পারে না কারণ আমরা গ্যারান্টেড যে ইনপুটটিতে কেবল প্রিন্টযোগ্য এএসসিআইআই রয়েছে। এটি শূন্য হবে যখন ইনপুটটি একটি স্থান ছিল। (টিমভি যেমন উল্লেখ করেছেন, ইনপুটটিতে লাইনফিড বা ট্যাব থাকতে পারে তবে এটি এখনও কাজ করতে পারে তবে এটি 32 অক্ষরের চেয়ে কম অক্ষরযুক্ত কোড সহ সমস্ত অপ্রিন্টযোগ্য অক্ষরও সরিয়ে ফেলতে পারে)) <সেক্ষেত্রে নির্দেশ পয়েন্টারটি (আইপি) বামে প্রতিফলিত করে এবং হালকা ধূসর পথ নেওয়া হয়েছে। এই পথটি এমপির অবস্থানটি সহজেই পুনরায় সেট করে {=এবং তারপরে পরবর্তী অক্ষরটি পড়বে - সুতরাং, স্পেসগুলি এড়িয়ে যায়। অন্যথায়, চরিত্রটি যদি স্থান না থাকে তবে আমরা কার্যকর করি

=}}})&'+'+)=}

এটি প্রথমে দৈর্ঘ্যের প্রান্ত দিয়ে ষড়ভুজের চারপাশে তার বিপরীত প্রান্তের বিপরীতমুখী হওয়া অবধি চলবে=}}} । তারপর এটি কপি বিপরীত থেকে মান দৈর্ঘ্য মধ্যে প্রান্ত দৈর্ঘ্য সঙ্গে প্রান্ত, এবং এটি বাড়তি )&'+'+)। আমরা এটি একটি সেকেন্ডে দেখব কেন এটি বোধগম্য। শেষ পর্যন্ত, আমরা এর সাথে একটি নতুন প্রান্তটি সরিয়ে নিয়েছি =}:

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

(নির্দিষ্ট প্রান্তের মানগুলি চ্যালেঞ্জে প্রদত্ত সর্বশেষ পরীক্ষার ক্ষেত্রে থেকে। সুতরাং অন্য একটি চরিত্র পড়ার পরে, আমরা এটি পেয়েছি:

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

এখন আপনি দেখতে পাচ্ছেন যে আমরা ধীরে ধীরে উত্তর-পূর্ব তির্যকটি বরাবর প্রতিটি অন্যান্য প্রান্তের অক্ষরগুলি সহ ইনপুট (বিয়োগ স্পেস) লিখছি এবং সেই চরিত্রের দৈর্ঘ্যটি প্রান্তের লেবেলযুক্ত দৈর্ঘ্যের সমান্তরালভাবে সংরক্ষণ করা হচ্ছে ।

আমরা যখন ইনপুট লুপটি সম্পন্ন করি তখন মেমরিটি দেখতে দেখতে (যেখানে আমি ইতিমধ্যে পরবর্তী অংশের জন্য কয়েকটি নতুন প্রান্ত লেবেল করেছি):

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

%শেষ অক্ষর আমরা পড়েছি হয়, 29আমরা পড়েছি অ স্থান অক্ষর সংখ্যা। এখন আমরা ষড়ভুজটির পাশের দৈর্ঘ্য সন্ধান করতে চাই। প্রথমত, গা green় সবুজ / ধূসর পথটিতে কিছু রৈখিক সূচনা কোড রয়েছে:

=&''3{

এখানে, =&প্রান্তের লেবেল দৈর্ঘ্যে দৈর্ঘ্য (আমাদের উদাহরণে 29 টি) অনুলিপি করুন । তারপরে 3''3 লেবেলযুক্ত প্রান্তে চলে যায় এবং এর মান সেট করে (যা আমাদের কেবল গণনার ক্ষেত্রে ধ্রুবক হিসাবে প্রয়োজন)। শেষ পর্যন্ত এন (এন -1) লেবেলযুক্ত প্রান্তে চলে যায় ।3{

এখন আমরা নীল লুপ প্রবেশ করি। এই লুপের ইনক্রিমেন্টগুলি N( এন লেবেলযুক্ত কক্ষে সংরক্ষিত ) এরপরে এর কেন্দ্রিক ষড়্ভুজাকার সংখ্যাটি গণনা করে এবং ইনপুট দৈর্ঘ্য থেকে বিয়োগ করে। লিনিয়ার কোড যা এটি করে তা হল:

{)')&({=*'*)'-

এখানে, {)সরানো এবং এনক্রিমেন্ট এনএন -1')&( লেবেলযুক্ত প্রান্তে চলে যায় , সেখানে অনুলিপিগুলি হ্রাস করে। N (N-1) এ তাদের পণ্য গণনা করে । ধ্রুবক দ্বারা বৃদ্ধি করে এবং প্রান্তের লেবেলযুক্ত হেক্স (এন) এর ফলাফল বৃদ্ধি করে । যেমনটি প্রত্যাশিত, এটি হ'ল নবম কেন্দ্রিক ষড়ভুজ সংখ্যা। অবশেষে এটি এবং ইনপুট দৈর্ঘ্যের মধ্যে পার্থক্য গণনা করে। যদি ফলাফলটি ইতিবাচক হয় তবে পার্শ্ব-দৈর্ঘ্য এখনও যথেষ্ট বড় নয় এবং লুপটি পুনরাবৃত্তি করে (যেখানে এমপিটিকে N (N-1) লেবেলযুক্ত প্রান্তে ফিরে যান )।N{=*'*)3'-}}

পাশের দৈর্ঘ্য একবারে যথেষ্ট বড় হয়ে গেলে পার্থক্যটি শূন্য বা নেতিবাচক হবে এবং আমরা এটি পেতে পারি:

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

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

{=&}}}32'"2'=&'*){=&')&}}

{=&মধ্যে ফলাফলের অনুলিপি করে শুরু পরিবর্তন মধ্যে প্রান্ত দৈর্ঘ্য প্রান্ত, কারণ আমরা পরে কিছু অ ইতিবাচক সেখানে প্রয়োজন। }}}32প্রান্তের লেবেলযুক্ত স্পেসে একটি 32 লিখেছেন । '"2উপরে লেবেল বিহীন প্রান্ত মধ্যে একটি ধ্রুবক 2 লিখেছেন পরিবর্তন । একই লেবেল সহ দ্বিতীয় প্রান্তে '=&অনুলিপি করুন N-1'*)এটি 2 দ্বারা গুণিত করে এবং এটি বৃদ্ধি করে যাতে শীর্ষে 2N-1 লেবেলযুক্ত প্রান্তে আমরা সঠিক মান পাই । এটি হেক্সাগনের ব্যাস। 2N-1{=&')& লেবেলযুক্ত অন্য প্রান্তে ব্যাসটি অনুলিপি করে । অবশেষে শীর্ষে 2N-1 লেবেলযুক্ত প্রান্তে ফিরে যায় ।}}

প্রান্তগুলি পুনরায় বিদ্রোহ করা যাক:

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

আমরা বর্তমানে যে প্রান্তে রয়েছি (যা এখনও ষড়্ভুজটির ব্যাস ধারণ করে) আউটপুটটির লাইনগুলিতে পুনরাবৃত্তি করতে ব্যবহৃত হবে। প্রান্তের লেবেলযুক্ত ইন্ডেন্টটি বর্তমান লাইনে কত স্পেসের প্রয়োজন তা গণনা করবে। প্রান্তের লেবেলযুক্ত কক্ষগুলি বর্তমান লাইনের কক্ষের সংখ্যার উপর পুনরাবৃত্তি করতে ব্যবহৃত হবে।

আমরা এখন গোলাপী পথে যা ইনডেন্ট গণনা করে । ('-decrements লাইন পুনরুক্তিকারীর এবং এ থেকেই subtracts এন -1 (মধ্যে ইন্ডেন্ট প্রান্ত)। কোডে সংক্ষিপ্ত নীল / ধূসর শাখা ফলাফলের মডুলাসটি সহজেই গণনা করে ( ~মানটি নেতিবাচক বা শূন্য হলে অবহেলা করে এবং ইতিবাচক হলে কিছুই হয় না)। বাকী গোলাপী পথ "-~{যা ব্যাস থেকে ইনডেন্টটি কোষের প্রান্তে বিয়োগ করে এবং তারপরে ইনডেন্ট প্রান্তে ফিরে যায় ।

নোংরা হলুদ পথ এখন ইন্ডেন্টেশন মুদ্রণ করে। লুপ বিষয়বস্তু সত্যিই ঠিক

'";{}(

কোথায় '"থেকে প্যাচসমূহ স্থান প্রান্ত, ;এটা ছাপে, {}চলে আসে ফিরে ইন্ডেন্ট এবং (এটা decrements।

যখন আমরা এটি দিয়ে শেষ করি (দ্বিতীয়) গা dark় ধূসর পথটি পরবর্তী অক্ষরটি মুদ্রণের জন্য অনুসন্ধান করে। =}অবস্থানে প্যাচসমূহ (যার মানে, সম্মুখের কোষ প্রান্ত, সাউথ প্রতি নির্দেশ)। তারপরে আমাদের একটি খুব টান লুপ রয়েছে {}যার একটি কেবল দক্ষিণ-পশ্চিম দিকের দুটি প্রান্তটি নীচে সরানো হয়, যতক্ষণ না আমরা সঞ্চিত স্ট্রিংয়ের শেষটিকে আঘাত করি:

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

লক্ষ্য করুন যে আমি সেখানে EOS এর একটি প্রান্তটি পুনর্বিবেচনা করেছি ? । একবার আমরা এই চরিত্রটি প্রক্রিয়া করার পরে, আমরা সেই প্রান্তটিকে নেতিবাচক করব, যাতে {}পরবর্তী পুনরাবৃত্তির পরিবর্তে লুপটি এখানে শেষ হয়ে যায়:

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

কোডটিতে, আমরা অন্ধকার ধূসর পথের শেষে, যেখানে 'ইনপুট চরিত্রের এক ধাপ পিছনে যায়। যদি পরিস্থিতি শেষ দুটি ডায়াগ্রামগুলির মধ্যে একটি হয় (যেমন আমরা এখনও ইনপুট থেকে প্রিন্ট করি নি এমন একটি চরিত্র রয়েছে), তবে আমরা সবুজ পথটি নিচ্ছি (নীচের অংশটি, এমন সব লোকের জন্য যা সবুজ এবং ভাল নয়) নীল)। এটি মোটামুটি সহজ: ;চরিত্রটি নিজেই মুদ্রণ করে। 'সংশ্লিষ্ট চলে আসে স্থান প্রান্ত যা এখনও আগের থেকে 32 ঝুলিতে ;কপি করে প্রিন্ট যে স্থান। তাহলে {~আমাদের ইওএফ তৈরি করে? পরবর্তী পুনরাবৃত্তির জন্য নেতিবাচক, 'একটি পদক্ষেপ পিছনে সরিয়ে দেয় যাতে আমরা স্ট্রিংয়ের উত্তর-পশ্চিম প্রান্তে ফিরে যেতে পারি অন্য শক্ত }{লুপের সাহায্যে। যা দৈর্ঘ্যে শেষ হয়কোষ ( হেক্স (এন) এর নীচে অ-ধনাত্মক Finally অবশেষে কোষের প্রান্তে }ফিরে যায় ।

যদি আমরা ইতিমধ্যে যদিও ইনপুটটি শেষ করে ফেলেছি, তবে লুপটি ইওএফের জন্য অনুসন্ধান করবে? আসলে এখানেই শেষ হবে:

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

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

{*46;{{;{{=

{*46;লিখেছেন প্রান্ত মধ্যে একটি 46 লেবেল নো অপ এবং এটি (অর্থাত একটি নির্দিষ্ট সময়ের) ছাপে। তারপরে স্পেস প্রান্তে {{;চলে যায় এবং এটি মুদ্রণ করে। থেকে প্যাচসমূহ ফিরে কোষ পরবর্তী পুনরাবৃত্তিতে জন্য প্রান্ত।{{=

এই মুহুর্তে পাথগুলি আবার একসাথে যোগদান করে এবং কক্ষগুলির প্রান্ত (হ্রাস করে । যদি পুনরুক্তিকারকটি এখনও শূন্য না হয়, আমরা হালকা ধূসর পথটি গ্রহণ করব, যা এমপির দিকনির্দেশকে সহজভাবে বিপরীত করে এবং তারপরে পরবর্তী অক্ষরটি মুদ্রণের জন্য সন্ধান করবে।=

অন্যথায়, আমরা বর্তমান লাইনের শেষ প্রান্তে পৌঁছেছি এবং এর পরিবর্তে আইপি বেগুনি পথ নেবে। মেমরি গ্রিডটি এই মুহূর্তে দেখতে দেখতে এটি:

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

বেগুনি পথে এটি রয়েছে:

=M8;~'"=

=আবার এমপি দিক reverses। M8তার মান সেট করে সেট 778(কারণ চরিত্র কোড Mহল 77ও স w খ্যা বর্তমান মান নিজেরাই যোগ হবে)। এটি হ'ল 10 (mod 256)তাই আমরা যখন এটি মুদ্রণ করি তখন আমরা ;একটি লাইনফিড পাই get তারপরে ~প্রান্তটিকে আবার নেতিবাচক করে তোলে, লাইনের প্রান্তে '"ফিরে যায় এবং এমপিটিকে আরও একবার বিপরীত করে দেয়।=

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


টিমভির হেক্সাগনি কলরারের সাহায্যে তৈরি প্রবাহের চিত্রগুলি নিয়ন্ত্রণ করুন । তাঁর এসোটেরিক আইডিইতে ভিজ্যুয়াল ডিবাগারের সাহায্যে মেমরি ডায়াগ্রাম তৈরি করা হয়েছে ।


19
আমি নিজেকে হেক্সাগনি জবাবগুলিতে অনেক কিছুই বলে দেখতে পাই: ঠিক আছে।
কনর ও'ব্রায়েন

5
হু ... তবে .. ওয়াট ... মন = ফুঁকছে
আদনান

আমি আশা করি কেউ এই কাজ করবে এবং ... বাহ! আমি নির্বাক. সেটা খুবই ভালো.
আর্কটরাস

19
দ্বিতীয় ধাপ - অন্যান্য 97% লিখুন। :)
ASCIIThenANSI

তিন ধাপ - কমপক্ষে বাইট সহ উত্তর হিসাবে।
টম এম

19

সিজেম, 56 52 50 48 বাইট

আমার প্রথম চিন্তা ছিল, "আরে আমি এর জন্য ইতিমধ্যে কোড পেয়েছি!" তবে আমি রুবি কোড থেকে প্রয়োজনীয় টুকরো টুকরো টানতে বিরক্ত হতে পারিনি, বিশেষত কারণ এগুলি গল্ফ হওয়ার পক্ষে খুব উপযুক্ত বলে মনে হয় না। তাই আমি পরিবর্তে সিজেমে অন্য কিছু চেষ্টা করেছি ...

lS-{_,4*(3/mq:D1%}{'.+}wD{D(2/-z_S*D@-@/(S*N@s}/

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

কেন্দ্রিক ষড়ভুজ সংখ্যা সম্পর্কে প্রথমে কিছুটা গণিত। যদি নিয়মিত ষড়ভুজটির পাশের দৈর্ঘ্য Nথাকে তবে এতে 3N(N-1)+1কোষগুলি থাকবে, যা উত্স কোড দৈর্ঘ্যের সমান করতে হবে k। আমরা এটি সমাধান করতে পারি Nকারণ এটি একটি সাধারণ চতুর্ভুজ সমীকরণ:

N = 1/2 ± √(1/4 + (k-1)/3)

আমরা নেতিবাচক মূলটিকে অগ্রাহ্য করতে পারি, কারণ এটি একটি নেতিবাচক এন দেয়। এটি সমাধান করার জন্য আমাদের বর্গমূলকে আধ-পূর্ণসংখ্যার হতে হবে। বা অন্য কথায়, √(1 + 4(k-1)/3) = √((4k-1)/3)একটি পূর্ণসংখ্যা হওয়া দরকার (ভাগ্যক্রমে, এই পূর্ণসংখ্যাটি D = 2N-1হেক্সাগনের ব্যাস হতে পারে , যা আমাদের যাইহোক প্রয়োজন হবে)। সুতরাং .শর্তটি পূরণ না হওয়া পর্যন্ত আমরা বারবার একটি যুক্ত করতে পারি ।

বাকীটি একটি সরল লুপ যা ষড়ভুজ আউট দেয়। এই অংশটির জন্য একটি দরকারী পর্যবেক্ষণ হ'ল ইনডেন্টেশন এবং শূন্যস্থানগুলির প্রতিটি লাইনের কোডের ফাঁকা স্থানগুলি ব্যাস পর্যন্ত যুক্ত হয়।

lS-     e# Read input and remove spaces.
{       e# While the first block yields something truthy, evaluate the second...
  _,    e#   Duplicate the code and get its length k.
  4*(   e#   Compute 4k-1.
  3/    e#   Divide by 3.
  mq    e#   Take the square root.
  :D    e#   Store this in D, just in case we're done, because when we are, this happens
        e#   to be the diameter of the hexagon.
  1%    e#   Take modulo 1. This is 0 for integers, and non-zero for non-integers.
}{      e# ...
  '.+   e#   Append a no-op to the source code.
}w
D{      e# For every i from 0 to D-1...
  D(2/  e#   Compute (D-1)/2 = N, the side length.
  -z    e#   Subtract that from the current i and get its modulus. That's the size of the
        e#   indentation on this line.
  _S*   e#   Duplicate and get a string with that many spaces.
  D@-   e#   Subtract the other copy from D to get the number of characters of code
        e#   in the current line.
  @/    e#   Pull up the source code and split into chunks of this size.
  (S*   e#   Pull off the first chunk and riffle it with spaces.
  N     e#   Push a linefeed character.
  @s    e#   Pull up the remaining chunks and join them back into a single string.
}/

দেখা যাচ্ছে যে আমাদের মোটেও দ্বিগুণ গণিত ব্যবহার করার দরকার নেই (বর্গমূল ছাড়া)। 4 দ্বারা গুণনের কারণে, 3 দ্বারা বিভাজন করার সময় কোনও সংঘর্ষ নেই এবং কাঙ্ক্ষিতটি kপ্রথম সংখ্যার বর্গমূল তৈরি করবে।


8

পার্ল, 203 200 198

জন্য + 1 অন্তর্ভুক্ত -p

s/\s//g;{($l=y///c)>($h=1+3*++$n*($n-1))&&redo}$s=$_.'.'x($h-$l);for($a=$n;$a<($d=2*$n-1);$a++){$s=~s/.{$a}/$&\n/,$s=reverse($s)for 0..1}$_=join$/,map{(' 'x abs($n-$i++-1)).$_}$s=~/\S+/g;s/\S/ $&/g

হিসাবে চালান: echo abc | perl -p file.pl

একটি খুব নিষ্পাপ পদ্ধতি:

#!/usr/bin/perl -p

s/\s//g;                            # ignore spaces and EOL etc.
{                                   # find the smallest hex number:
    ($l=y///c)                      # calc string length
    > ($h=1+3*++$n*($n-1))          # 
    && redo                         # (should use 'and', but..)
}

$s = $_                             # save $_ as it is used in the nested for
   . '.' x ($h-$l);                 # append dots to fill hexagon

for ( $a = $n; $a < ($d=2*$n-1); $a++ )
{
        $s=~s/.{$a}/$&\n/,          # split lines
        $s=reverse($s)              # mirror
    for 0..1                        # twice
}

$_ = join$/,                        # join using newline
map {                               # iterate the lines
    (' 'x abs($n-$i++-1)) .$_       # prepend padding
} $s=~/\S+/g;                       # match lines

s/\S/ $&/g                          # prepend spaces to characters
                                    # -p takes care of printing $_

  • আপডেট 200 বাইট মুভিং ভেরিয়েবল অ্যাসাইনমেন্ট সংরক্ষণ করুন, এবং অন্য 2 ফাইনাল বাদ দিয়ে ;; কোড এখন 200 বাইট অধীনে!
  • $s=~/\S+/gপরিবর্তে 198 ব্যবহার করে 2 বাইট সংরক্ষণ করুনsplit/\n/,$s

7

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

বেনামে ফাংশন

ষড়ভুজ আকারটি উইকিপিডিয়া থেকে সমীকরণটি সমাধান করতে দেখা গেছে

3*n*(n-1)-1 = l

সমাধানের সূত্রটি মূলতঃ

n = ceil(3+sqrt(12*l-3))/6)

কিছু বীজগণিত এবং কিছু অনুমানের সাথে (থেক্স থেকে @ ব্যবহারকারী 18655 পর্যন্ত) এটি হয়ে যায়

n = trunc(sqrt(l/3-1/12)+1.4999....)
s=>eval("s=s.match(/\\S/g);m=n=Math.sqrt(s.length/3-1/12)+1.49999|0;p=o=``;for(i=n+n;--i;i>n?++m:--m)for(o+=`\n`+` `.repeat(n+n-m),j=m;j--;o+=` `)o+=s[p++]||`.`")

আরও পঠনযোগ্য

s=>{
  s=s.match(/\S/g);
  m=n=Math.sqrt(s.length/3-1/12)+1.49999;
  p=o='';
  for(i=n+n; --i; i>n?++m:--m)
    for(o += '\n'+' '.repeat(n+n-m), j=m; j--; o += ' ')
      o+=s[p++]||'.';
  return o
}

পরীক্ষার স্নিপেট (আরও ভাল পূর্ণ পৃষ্ঠা - চলমান সময় ~ 1 মিনিট)

f=s=>eval("s=s.match(/\\S/g);m=n=Math.sqrt(s.length/3-1/12)+1.49999|0;p=o=``;for(i=n+n;--i;i>n?++m:--m)for(o+=`\n`+` `.repeat(n+n-m),j=m;j--;o+=` `)o+=s[p++]||`.`")

t=0;
r='0';
(T=_=>t++<816?(O.innerHTML=f(r=t%10+r),setTimeout(T,20)):0)()
pre { font-size: 66% }
<pre id=O></pre>


1
আপনি 2 বাইট সংরক্ষণ করার n=...+1-1e-9|0পরিবর্তে ব্যবহার করতে পারেন n=Math.ceil(...)। আপনি ES7 যেতে পারেন এবং **0.5পরিবর্তে ব্যবহার করতে পারেন Math.sqrtতবে এটি আপনার উপর নির্ভর করে । আমি সাধারণত আমার উত্তরগুলি ES6 রাখি কারণ তারা আমার ব্রাউজারে কাজ করে হা হা!
ব্যবহারকারী 81655

@ ব্যবহারকারী 81655 ভাল ইঙ্গিত, ধন্যবাদ
edc65

5

পাইথ, 52 51 বাইট

Jfgh**3TtTl=H-zd1=+H*\.*lHTV+UJt_UJAcH]+JN+*-JNdjdG

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

ওপি দ্বারা অনুমোদিত হিসাবে প্রতিটি লাইনে একটি অতিরিক্ত নেতৃস্থানীয় স্থান রয়েছে।

ব্যাখ্যা

 f              1          |   find first number n for which
             -zd           |           remove spaces from input
           =H              |         put result in H
          l                |       length of input without spaces
  g                        |     is less than or equal to
   h**3TtT                 |       nth centered hexagonal number
J                          | put result (hexagon side length) in J
                           |
      *lHT                 |      ten times length of input without spaces
   *\.                     |   that amount of dots
=+H                        | append to H
                           |
  UJ                       |    numbers 0 up to side length - 1
 +  t_UJ                   |   add numbers side length - 2 down to 0
V                          | loop over result
            +JN            |       current loop number + side length
         cH]               |     split to two parts at that position
        A                  |   put parts to G and H
                 -JN       |       side length - current loop number - 1
                *   d      |     that many spaces
                     jdG   |     join code on the line (G) by spaces
               +           |   concatenate parts and print

5

রেটিনা , 161 বাইট

2 বাইট সংরক্ষণের জন্য FryAmTheEggman কে ধন্যবাদ।

এই উত্তরটি প্রতিযোগিতামূলক। এই চ্যালেঞ্জের পর থেকে রেটিনা কয়েকটি আপডেট দেখেছিল এবং আমি নিশ্চিত যে আমি আরও কয়েকটি নতুন বৈশিষ্ট্য ব্যবহার করছি (যদিও আমি যাচাই করে নি)।

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে। প্রথম লাইনে একটি একক স্থান রয়েছে। নোট করুন যে বেশিরভাগগুলি ·আসলে কেন্দ্র বিন্দু (0xB7)।

 

^
$._$*·¶
^·¶
¶
((^·|\2·)*)·\1{5}·+
$2·
^·*
$.&$* ·$&$&$.&$* 
M!&m`(?<=(?= *(·)+)^.*)(?<-1>.)+(?(1)!)|^.+$
+m`^( *·+)· *¶(?=\1)
$& 
·
 ·
O$`(·)|\S
$1
·
.
G-2`

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

আচ্ছা ...

ব্যাখ্যা

প্রথমে কেবলমাত্র একটি একক অক্ষর ( ·এই ক্ষেত্রে) ব্যবহার করে বিন্যাসটি তৈরি করা সবচেয়ে সহজ বলে মনে হচ্ছে এবং তারপরে ফলাফল লেআউটটিকে ইনপুট অক্ষরগুলি পূরণ করুন। এর প্রধান কারণ হ'ল একটি একক অক্ষর ব্যবহারের ফলে আমাকে ব্যাকরেফারেন্স এবং চরিত্র পুনরাবৃত্তি ব্যবহার করতে দেয়, যেখানে সরাসরি ইনপুট আউট ব্যয় করার জন্য ব্যয়বহুল ভারসাম্য গোষ্ঠীগুলির প্রয়োজন হবে।

 

যদিও এটি দেখতে তেমন ভাল লাগে না, এই প্রথম পর্যায়ে ইনপুট থেকে ফাঁকা স্থান সরিয়ে দেয়।

^
$._$*·¶

আমরা Mকেন্দ্রের বিন্দুযুক্ত একটি অতিরিক্ত রেখার প্রেন্ডিং দিয়ে শুরু করি , যেখানে ইনপুটটির Mদৈর্ঘ্য (স্পেসগুলি সরিয়ে দেওয়ার পরে)।

^·¶
¶

যদি ইনপুটটি একটি একক অক্ষর ছিল, আমরা আবার সেই কেন্দ্রের বিন্দুটিকে সরিয়ে দেব। এটি একটি দুর্ভাগ্যজনক বিশেষ ঘটনা যা পরবর্তী পর্যায়ে আচ্ছাদিত নয়।

((^·|\2·)*)·\1{5}·+
$2·

এটি প্রয়োজনীয় পাশের দৈর্ঘ্য Nবিয়োগ 1 টি গণনা করে Here এখানে এটি কীভাবে কাজ করে: কেন্দ্রিক ষড়ভুজ সংখ্যাগুলি ফর্মের 3*N*(N-1) + 1। যেহেতু ত্রিভুজাকার সংখ্যা N*(N-1)/2হ'ল এর অর্থ হেক্সাগোনাল সংখ্যাগুলি ত্রিভুজাকার সংখ্যার চেয়ে ছয়গুণ বেশি প্লাস 1 এটি সুবিধাজনক কারণ একটি রেজেক্সে ত্রিভুজাকার সংখ্যার (যা সত্যিই ঠিক 1 + 2 + 3 + ... + N) সামঞ্জস্যপূর্ণ ফরোয়ার্ড রেফারেন্সের সাথে মোটামুটি সহজ। (^·|\2·)*ম্যাচ বৃহত্তম ত্রিদলীয় সংখ্যা লাগাতে পারেন। একটি দুর্দান্ত বোনাস হিসাবে, $2তারপরে এই ত্রিভুজাকার সংখ্যার সূচকটি ধারণ করবে। এটি 6 দ্বারা গুণিত করতে, আমরা এটিকে দলে ক্যাপচার করি এবং 1আরও 5 বার এটি মেলে। আমরা নিশ্চিত সেখানে অন্তত দুটি বেশি ·দিয়ে ·এবং·+। এইভাবে পাওয়া ত্রিভুজাকার সংখ্যার সূচকটি কেন্দ্রিক ষড়্ভুজাকৃতির সংখ্যার চেয়ে বেশি একটি অক্ষর না হওয়া পর্যন্ত বৃদ্ধি পাবে না।

শেষ পর্যন্ত, এই ম্যাচটি আমাদের গ্রুপে প্রয়োজনীয় ষড়ভুজের পার্শ্ব-দৈর্ঘ্যের তুলনায় দু'টি কম দেয় $2, তাই আমরা আরও একটি কেন্দ্রের বিন্দুর সাথে একসাথে এটি লিখি N-1

^·*
$.&$* ·$&$&$.&$* 

এটি আমাদের N-1কেন্দ্রের বিন্দুর স্ট্রিংকে N-1ফাঁকা স্থান, 2N-1কেন্দ্রের বিন্দু এবং অন্য একটি N-1স্পেসে পরিণত করে। নোট করুন যে এটি সর্বাধিক ইন্ডেন্টেশন, এর পরে ষড়ভুজ ব্যাস এবং তারপরে আবার ইনডেন্টেশন হয়।

M!&m`(?<=(?= *(·)+)^.*)(?<-1>.)+(?(1)!)|^.+$

এটি অপ্রীতিকরভাবে দীর্ঘ, তবে এটি মূলত আমাদের সমস্ত ওভারল্যাপিং ম্যাচ দেয় যা হয় ক) 2N-1অক্ষর দীর্ঘ এবং প্রথম লাইনে বা খ) দ্বিতীয় লাইন। এটি পূর্ববর্তী পর্যায়ে থেকে ফলাফলটিকে পুরোপুরি বিস্তৃত করে, তবে অদ্ভুতভাবে ইন্টেন্টেড ষড়ভুজ করে। উদাহরণস্বরূপ ইনপুট জন্য 12345678আমরা পেতে চাই:

  ···
 ····
·····
···· 
···  
12345678

এ কারণেই আমাদের আগের পর্যায়েও স্পেস যুক্ত করতে হবে।

+m`^( *·+)· *¶(?=\1)
$& 

এটি কেন্দ্রের পরে লাইনগুলির প্রসারণকে স্থির করে, বারের চেয়ে পূর্বের চেয়ে সংক্ষিপ্ত যে কোনও লাইন (পেছনের স্থানগুলি উপেক্ষা করে) ইনডেন্ট করে, সুতরাং আমরা এটি পাই:

  ···
 ····
·····
 ···· 
  ···  
12345678

এখন আমরা কিছু স্পেস দিয়ে সন্নিবেশ করলাম

·
 ·

যা আমাদের দেয়:

   · · ·
  · · · ·
 · · · · ·
  · · · · 
   · · ·  
12345678

ভাই, এটা হয়ে গেছে।

O$`(·)|\S
$1

কেন্দ্র বিন্দুতে ইনপুট স্ট্রিং পূরণ করার সময়। এটি একটি বাছাই পর্যায়ের সাহায্যে করা হয়। আমরা সর্বশেষ লাইনে সমস্ত কেন্দ্র বিন্দু এবং প্রতিটি অক্ষর মেলে এবং আমরা প্রদত্ত প্রতিস্থাপনের ফলস্বরূপ সেগুলি বাছাই করি। সর্বশেষ লাইনের অক্ষরের ·জন্য এবং কেন্দ্রের বিন্দুগুলির জন্য সেই প্রতিস্থাপনটি খালি , সুতরাং যা ঘটে তা হ'ল কেন্দ্র বিন্দুগুলি কেবল শেষ পর্যন্ত সাজানো হয় (যেহেতু বাছাই স্থিতিশীল)। এটি ইনপুট অক্ষরগুলিকে জায়গায় স্থানান্তরিত করে:

   1 2 3
  4 5 6 7
 8 · · · ·
  · · · · 
   · · ·  
········

এখন মাত্র দুটি জিনিস বাকি:

·
.

এটি কেন্দ্রের বিন্দুগুলিকে নিয়মিত পিরিয়ডে পরিণত করে।

G-2`

এবং এটি শেষ লাইনটি বাতিল করে দেয়।


1

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

(s,n=1,l=0,p=0,m=s.match(/\S/g))=>m[n]?f(s,n+6*++l,l):[...Array(l+l+1)].map((_,i,a)=>a.map((_,j)=>j<l-i|j<i-l?``:m[p++]||`.`).join` `).join`\n`

যেখানে \nআক্ষরিক নিউলাইন চরিত্রের প্রতিনিধিত্ব করে। ষড়ভুজ তৈরি করার জন্য এমন একটি কৌশল ব্যবহার করে যা আমি এর আগে বেশ কয়েকটি অন্যান্য ব্যবহার করেছি । ES7 এর জন্য বর্গাকার শিকড়গুলি পুনরাবৃত্তির পদ্ধতির তুলনায় সামান্য কম কাজ করে:

(s,p=0,m=s.match(/\S/g),l=(~-m.length/3)**.5+.5|0)=>[...Array(l+l+1)].map((_,i,a)=>a.map((_,j)=>j<l-i|j<i-l?``:m[p++]||`.`).join` `).join`\n`

1

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

c=input().replace(' ','')
n=x=1
while x<len(c):x+=n*6;n+=1
c=c.ljust(x,'.')
while c:print(' '*(x-n)+' '.join(c[:n]));c=c[n:];n-=(len(c)<x/2)*2-1

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

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

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