এই কোড ব্যাখ্যা আবার সুন্দর করুন


17

ভূমিকা

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

যাইহোক, আপনি যখন কিছুটা ক্রেজি গল্ফ তৈরি করেছেন বলে আপনি এই ব্যাখ্যাটি সম্পাদনা করতে চান তখন আপনি নিজের ব্যাখ্যাটি আবার সুন্দর করে তুলতে প্রায়শই সময় ব্যয় করেন। যেহেতু এটি খুব পুনরাবৃত্তিযোগ্য কাজ, আপনি এটির জন্য একটি প্রোগ্রাম লিখতে চান।

চ্যালেঞ্জ

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

উদাহরণ

ইনপুট

shM-crz1dc4। "ANDBYOROF # z = ইনপুট

     rz1 # ইনপুটকে বড়হাতে রূপান্তর করুন
    স্পেসে সিডি # বিভক্ত ইনপুট
         c4 "" অ্যান্ডবায়রফ # একটি প্যাকযুক্ত স্ট্রিং থেকে শব্দের একটি তালিকা তৈরি করুন যা উপেক্ষা করা হবে
   - # এই শব্দগুলি ফিল্টার করুন
 এইচএম # কেবলমাত্র সমস্ত শব্দের প্রথম অক্ষর নিন
এস # তাদের সাথে একটি স্ট্রিংয়ে যোগ দিন

আউটপুট

shM-crz1dc4। "ANDBYOROF # z = ইনপুট

     rz1 # ইনপুটকে বড়হাতে রূপান্তর করুন
    স্পেসে সিডি # বিভক্ত ইনপুট
         c4 "" অ্যান্ডবায়রফ # একটি প্যাকড স্ট্রিং থেকে শব্দের একটি তালিকা তৈরি করুন যা হবে
                           # উপেক্ষা করা হয়েছে
   - # এই শব্দগুলি ফিল্টার করুন
 এইচএম # কেবলমাত্র সমস্ত শব্দের প্রথম অক্ষর নিন
এস # তাদের সাথে একটি স্ট্রিংয়ে যোগ দিন

এই কোডটি কী করে তা জানতে পারে এমন একজনের জন্য একটি কুকি।

বিন্যাসের অ্যালগরিদম

  • দীর্ঘতম কোড-লাইন (ব্যাখ্যা এবং কোড এবং বিভাজকের মধ্যে ফাঁকা স্থানগুলি বাদ দিয়ে) সন্ধান করুন।
  • এই কোড-লাইনের পরে 5 টি স্পেস যুক্ত করুন এবং সম্পর্কিত বিভাজককে ব্যাখ্যার সাথে যুক্ত করুন। এটি এখন রেফারেন্স লাইন।
  • এই রেফারেন্স লাইনের সাথে অন্য প্রতিটি লাইন সামঞ্জস্য করুন, যাতে পৃথককারীরা সমস্ত একই কলামে থাকে।
  • নিম্নলিখিত লাইনে একটি নতুন লাইনে 93 টি অক্ষরের বেশি দীর্ঘ সমস্ত লাইন মোড়ুন:
    • 93 বা তারও কম কলামে শেষ শব্দটি সন্ধান করুন।
    • এর পরে সমস্ত শব্দ নিয়ে যান এবং নেতৃস্থানীয় বিভাজক এবং সঠিক ফাঁক দিয়ে একটি নতুন লাইনে এগুলি মুড়িয়ে দিন। এই দুটি শব্দের মধ্যবর্তী স্থানটি মুছতে হবে, সুতরাং প্রথম লাইনটি একটি শব্দের অক্ষরের সাথে শেষ হয় এবং দ্বিতীয় লাইনটি বিভাজকের পরে একটি দিয়ে শুরু হয়।
    • যদি ফলাফল লাইন এখনও 93 টির চেয়ে বেশি দীর্ঘ হয় তবে প্রতিটি লাইন 94 টি অক্ষরের নীচে না হওয়া পর্যন্ত আবার একই কাজ করে again

মন্তব্য

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

বিধি

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

এখানে ইনপুট ফর্ম্যাটটি লাইনের প্রতিনিধিত্ব করে স্ট্রিংয়ের তালিকা এবং বিভাজকের জন্য একক স্ট্রিং। উভয়ই কমা দ্বারা পৃথক করা হয়। আউটপুট স্ট্রিংগুলির একটি তালিকা।

['shM-crz1dc4। "" ANDBYOROF # z = ইনপুট', '', 'rz1 # ইনপুটকে বড় হাতের মধ্যে রূপান্তর করুন', 'সিডি # স্পেসে বিভাজন ইনপুট', 'সি 4 " স্ট্রিং যা উপেক্ষা করা হবে ',' - # এই শব্দগুলিকে ফিল্টার করুন ',' এইচএম # কেবলমাত্র সমস্ত শব্দের প্রথম অক্ষর নিয়ে যান ',' # এর সাথে একটি স্ট্রিংয়ে যুক্ত হন '], "#" -> [' shM-crz1dc4 "" ANDBYOROF # z = ইনপুট ',' ',' rz1 # ইনপুটকে বড় হাতের মধ্যে রূপান্তর করুন ',' সিডি # স্প্লিটসে স্প্লিট ইনপুট ',' সি 4 "" , '# উপেক্ষা', '- # এই শব্দগুলিকে ফিল্টার করুন ',' এইচএম # কেবলমাত্র সমস্ত শব্দের প্রথম অক্ষর নিয়ে যান ',' এর # এগুলিকে একটি স্ট্রিংয়ে যুক্ত করুন ']
['কোডেকোডকোড ই # ব্যাখ্যা', 'এসডিএফ ডিএসএফ এসডিএফ ই # একটি খুব খুব খুব খুব খুব খুব খুব খুব দীর্ঘ খুব দীর্ঘ দীর্ঘ দীর্ঘ দীর্ঘ দীর্ঘ দীর্ঘ দীর্ঘ দীর্ঘ ব্যাখ্যা এবং এটি দীর্ঘ এবং দীর্ঘতর হতে থাকে', '', 'কিছু আরও কোড # এবং আরও কিছু ব্যাখ্যা '], "ই #" -> [' কোডেকোডকোড ই # ব্যাখ্যা ',' এসডিএফ ডিএসএফ এসডিএফ ই # একটি খুব খুব খুব খুব খুব খুব খুব খুব দীর্ঘ দীর্ঘ দীর্ঘ দীর্ঘ ',' ই # দীর্ঘ দীর্ঘ দীর্ঘ দীর্ঘ দীর্ঘ ব্যাখ্যা এবং এটি দীর্ঘতর হতে থাকে ',' ই # এবং আরও দীর্ঘ ',' ',' আরও কিছু কোড ই # এবং আরও কিছু ব্যাখ্যা ']

শুভ কোডিং!


1
@ ম্যাট সমস্ত বিভাজক সর্বদা কলামে থাকে length of the longest code-line + 5। এটি এমন রেখাগুলিতেও প্রযোজ্য যেখানে কেবল একটি ব্যাখ্যা রয়েছে, কারণ সেগুলি মোড়ানো ছিল।
ডেনকার

ওহে আমার lastশ্বর, আমি এই গত 3 ঘন্টা ধরে ভুল করছি। আমি দীর্ঘ কোডটি মোড়ানোর চেষ্টা করছিলাম এবং ব্যাখ্যাগুলি দীর্ঘ রেখে দিয়েছিলাম ... ভাল শুরু করে starting কমপক্ষে এখন এটি আরও সহজ। ধন্যবাদ। আপনি এটা ভাল কথা বলেছেন .... আমি কেবল নির্বোধ।
ম্যাট

Characters৩ টি অক্ষরের চেয়ে বেশি লম্বা সমস্ত রেখা মোড়ানো কি এর অর্থ কি কোড, শীর্ষস্থানীয় স্পেসগুলি সহ, কখনও কখনও 87 টির বেশি অক্ষর দীর্ঘ হবে না?
ম্যাট

@ ম্যাট কোড এবং সেপারেটর একসাথে 87 87 টি বর্ণের বেশি হবে না কারণ আমাদের কোড এবং বিভাগের মধ্যে ৫ টি স্পেস এবং ব্যাখ্যাটির জন্য একটি অক্ষরের প্রয়োজন।
ডেনকার

1
পাইথ কোড কোনও প্রদত্ত স্ট্রিংয়ের সংক্ষিপ্তসার সন্ধান করে। আমি জানতাম কারণ এটি আমার প্রশ্নের উত্তর ছিল।
অ্যাপলেট 123

উত্তর:


3

রুবি, 245 237 220 216 212 209 205 বাইট

বেনামে ফাংশন। সুন্দর বুনিয়াদি পদ্ধতির (সর্বোচ্চ দৈর্ঘ্য সন্ধান করুন, 5 যোগ করুন, তারপরে প্রতিটি লাইনে প্রক্রিয়াজাতকরণ করুন, মোড়কের সাথে মোকাবিলার জন্য পুনরাবৃত্তি সহ) এবং আরও একটি পন্থা থাকতে পারে যা আরও বাইট সংরক্ষণ করে।

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

->x,d{l,S=0," "
s=->n{m,q=n.size,94-l-d.size
m>q ?(i=n.rindex(S,q)
n[0,i]+"
"+S*l+d+s[n[i+1,m]]):n}
x.map{|n|c,t=n.split d
c=(c||S).rstrip
l=[l,5+c.size].max
[c,t]}.map{|c,t|c+S*(l-c.size)+d+s[t]if t}*"
"}

পরিবর্তণের:

  • ইনপুটটিতে কিছু প্রতিশ্রুতি লাভ করার মাধ্যমে কিছু বাইট সংরক্ষণ করা হয়েছে, বিশেষত প্রতিশ্রুতি যে সমস্ত খালি রেখার বিভাজক চরিত্র এবং ব্যাখ্যা রয়েছে।
  • প্রথম mapকল থেকে বিভক্ত স্ট্রিংগুলি সংরক্ষণ করে stripএবং ব্যাখ্যাটির শব্দের মধ্যে সবসময় তাদের মধ্যে ঠিক এক ফাঁক থাকে এই প্রতিশ্রুতির উপর ভিত্তি করে কিছু অপ্রয়োজনীয় ফাংশন করে আরও কিছুটা গল্ফ পরিচালিত হয় । এছাড়াও," " এখনই একটি ধ্রুবককে বরাদ্দ করা হয়েছে যেহেতু আমি এটি এত বেশি ব্যবহার করি।
  • উভয় mapকলকে উচ্চতর-ক্রমের ক্রিয়াকলাপের ক্ষমতা দিয়ে একত্রে বেঁধে রাখা হয়েছে, যার অর্থ প্রথম ম্যাপ কলটি দৈর্ঘ্য ভেরিয়েবলটিকে lসঠিকভাবে সেট করবে যদি এটি সহায়ক ফাংশন ঘোষণার পরে ডাকা হয় s। -4 বাইট.
  • \nপ্রকৃত নিউলাইনগুলির সাথে প্রতিস্থাপনের জন্য মাল্টিলাইন স্ট্রিংগুলি অপব্যবহার করা হয়েছে , তারপরে ifটের্নারি অপারেটরগুলি ব্যবহার করে সামান্য কৌশল (যখন মানগুলির joinসাথে একটি অ্যারেতে ডাকা হয় nil, তারা খালি স্ট্রিং হয়ে যায়)
  • .joinস্পষ্টতই একটি সঙ্গে প্রতিস্থাপন করা যেতে পারে *

আমার মনে হয় এখনই ঠিক করা উচিত?
মান কালি

কিভাবে এই মোড়ানো 94?
ভেন

ঠিক আছে, এখন কোডটিতে কাজ করার জন্য আমার আরও বেশি সময় ছিল, এটি সঠিকভাবে মোড়ানো।
মান কালি

"যদিও ব্যাখ্যায় সীমাহীন দৈর্ঘ্য থাকতে পারে তবু বিভাজক এবং কোডের মধ্যে 93 - 5 = 87কেবল চারটি সংযুক্ত সর্বোচ্চ দৈর্ঘ্য থাকতে পারে 5 5 টি অক্ষর কোড এবং বিভাজকের মধ্যে ফাঁকা স্থান Code কোড এবং বিভাজক সর্বদা কমপক্ষে একটি অক্ষর দীর্ঘ হবে" " আপনার কোড বিভাগটি 97 টি অক্ষরের সাথে সীমা ছাড়িয়ে গেছে, সুতরাং প্রোগ্রামটির আচরণের সংজ্ঞা নেই।
মান ইঙ্ক

আহ, ভাল দাগযুক্ত, বোঝায়!
ভেন

9

লাইভস্ক্রিপ্ট, 243 236 233 228 219 225 বাইট

f = (x,k,m+5)->l=(.length);x.=map(->it/"#k"=>..0-=/ +$/;m>?=5+l ..0);i=0;[..0&&..0+' '*(m- l ..0)+k+..1 for x]=>while i<(l ..),++i=>j=(s=..[i])lastIndexOf ' ' 93;(..splice i+1 0 ' '*m+k+s[j to]*'';s.=substr 0 j) if 94<l s;..[i]=s

এটি কীভাবে কাজ করে: বেশিরভাগ জাভা কোডের মতো। দৈর্ঘ্যকে বাড়িয়ে দিয়ে শুরু করুন (লাইভস্ক্রিপ্ট প্যারেন্টেসিস ব্যবহার করে অপারেটর থেকে একটি ফাংশন তৈরি করতে দেয়)। .=যা a = a.b- আমরা এখানে মানচিত্র ব্যবহার করি।

=> blabla ..স্মলটাক-ইশ ক্যাসকেড কনস্ট্রাক্ট: বাম দিকের অংশটি ব্লকের বাকী =>অংশগুলির মতো অ্যাক্সেসযোগ্য ..; এবং ফিরে আসবে। এখানে, এটি K তে উপাদান বিভক্ত। দ্রষ্টব্য: আমি স্ট্রিং ইন্টারপোলেশন ব্যবহার করছি, কারণ /কেবল আক্ষরিক স্ট্রিং সহ "বিভক্ত" means

এলএস আমাদের a-=/regexp/এই ল্যাম্বদাতেও ব্যবহার করতে দেয় (স্ট্রিং লিটারেলগুলির সাথেও কাজ করে): এটি কেবল একটি .replaceকলের জন্য চিনি ।

অবশেষে, এটি >?=হ'ল সংযুক্ত- >?ক্যাসিন অপারেটর, যা দুটি অপারেন্ডের বেশি প্রদান করে।

এলএসের উপলব্ধিগুলির জন্য পাইথন / হাস্কেল-স্টাইল রয়েছে, এগুলিতে দীর্ঘকালীন জায়গার পুনরাবৃত্তি করতে "স্ট্রিং * টাইম" ব্যতীত এগুলিতে কোনও অভিনব ধারণা নেই।

বোঝার জন্য এটি বিষয় হিসাবে কাজ করে (ক্যাসকেডগুলি সম্পর্কে ব্লকটি দেখুন)।

তারপরে আমরা অ্যারের প্রতিটি উপাদানকে লুপ করব (আমরা কেবল এটি উপলব্ধি দিয়ে তৈরি করেছি) এবং যদি কোনও লাইন 93chars এর চেয়ে বড় হয় তবে আমরা এর শেষ সূচকটি খুঁজে পেয়েছি, সেখানে বিভক্ত হয়েছি এবং এই বর্তমান পুনরাবৃত্তির ঠিক পরে বিচ্ছিন্ন রেখাটি ধাক্কা দিয়েছি ( ... যাতে লাইনটি খুব বড় হলে পরবর্তী পুনরাবৃত্তি আবার বিভক্ত হবে।

শুধু শেষ জিনিস অভিনব a[j to](ঞ থেকে শেষ পর্যন্ত) একটি সীমার, কিন্তু যেহেতু এটি এরে পদ্ধতি ব্যবহার আমরা এটা ফিরে স্ট্রিং যোগদানের জন্য, যা আমরা ওভারলোড ব্যবহার করে তা করতে আছে *: *''

উদাহরণ

s = """this is kod # Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
d # y

efgh # z"""

f = (x,k,m=5)->l=(.length);x.=map(->it/"#k"=>..0-=/ +$/;m>?=5+l ..0);i=0;[..0&&..0+' '*(m- l ..0)+k+..1 for x]=>while i<(l ..),++i=>j=(s=..[i])lastIndexOf ' ' 93;(..splice i+1 0 ' '*m+k+s[j to]*'';s.=substr 0 j) if 94<l s;..[i]=s

console.log (f s / '\n', '#') * \\n

আউটপুট:

this is kod     # Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
                # tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
                # veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
                # commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
                # velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
                # cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
                # est laborum.
d               # y

efgh            # z

1
যেটি হ্রাস পেয়েছে: উত্তর স্থির।
ভেন

2
যখন কোনও ব্যাখ্যা উপচে পড়ে যায়, আপনার বাকী আইআইআরসি দিয়ে তাদের বিভাজক অক্ষরগুলি সারিবদ্ধ করার জন্য আপনার নতুন লাইন (গুলি) দরকার।
মান কালি

পছন্দ করুন
ভেন

আপনি কি আপনার উদাহরণ আউটপুট আপডেট করতে পারেন?
মান কালি

@ কেভিনলউ করেছেন
ভেন

6

জাভা, 347 + 19 = 366 বাইট

প্রয়োজন

import java.util.*;

এইভাবে +19 বাইট।

(c,s)->{int p=0,i=0,t;String l;for(;i<c.size();i++){l=c.get(i);l=l.replaceAll(" *"+s,s);p=Math.max(l.indexOf(s),p);c.set(i,l);}p+=5;for(i=0;i<c.size();i++){l=c.get(i);t=l.indexOf(s);while(t>-1&t<p)l=l.substring(0,t)+" "+l.substring(t++);t=93;if(l.length()>t){while(l.charAt(t)!=' ')t--;c.add(i+1,s+l.substring(t));l=l.substring(0,t);}c.set(i,l);}}

বিন্যাসে লাগে f.accept(List<String> code, String seperator)। জায়গায় জায়গায় বিন্যাস। এমন একটি সংস্করণ যা একটি নতুন তৈরি করে এবং তা ফিরিয়ে দেয় List<String>তা বাস্তবায়নের জন্য তুচ্ছ হবে তবে কিছু বাইটের জন্য খরচ হবে।

ইনডেন্টড + উদাহরণ ব্যবহার:

static BiConsumer<List<String>, String> prettify = (code, seperator) -> {
    int space = 0, i=0, t;
    String line;
    for (; i<code.size(); i++) { // for each line
        line = code.get(i); // get line
        line = line.replaceAll(" *" + seperator, seperator); // strip space before seperator
        space = Math.max(line.indexOf(seperator), space); // save biggest space until seperator
        code.set(i, line); // save line
    }
    space += 5;
    for (i=0; i<code.size(); i++) { // for each line
        line = code.get(i); // get line
        t = line.indexOf(seperator); // get index of seperator
        while (t>-1&t<space) // while the seperator exists and is further left than desired
            line = line.substring(0,t) + " " + line.substring(t++); // move it right by adding a space before it
        t = 93; // get desired line length
        if (line.length()>t) { // if the line is longer than that
            while (line.charAt(t)!=' ') t--; // scan backwards for a space
            code.add(i+1, seperator + line.substring(t)); // add a line after this one with seperator and the rest of the line
                                                          // the next pass will space it correctly
            line = line.substring(0,t); // cut off this line at that point
        }
        code.set(i, line); // save edited line back to List
    }
};

public static void main(String[] args) {
    List<String> code = new ArrayList<>();
    code.add("shM-crz1dc4.\"ANDBYOROF  # z = input");
    code.add("");
    code.add("     rz1      # convert input to uppercase");
    code.add("    c   d        # split input on spaces");
    code.add("         c4.\"ANDBYOROF        # create a list of the words from a packed string which shall be ignored");
    code.add("   -          # filter those words out");
    code.add(" hM                # only take the first letter of all words");
    code.add("s                   # join them into one string");
    prettify.accept(code, "#");
    code.stream().forEach(System.out::println);
}

... সম্ভবত আমার নিজেরাই এটি চালানো উচিত: পি


যদি কেউ বুঝতে পারে যে কেন replace(" *"+s)কাজ করছে না তবে replaceAll(" *"+s)আমি এটি শুনতে খুব পছন্দ করি - আমি এটি বের করতে পারি না।
CAD97

<ব্যাডগেস> replaceস্ট্রিং ব্যবহার করে তবে replaceAllরেজিক্সগুলি ব্যবহার করে। </badguess>
ক্যালকুলেটরলাইন

@ ক্যাটস আরেফ্লফী ভাল, আপনি সঠিক ! কীভাবে আমি বুঝতে পারি না তা জানেন না: P
CAD97

আপনি কি নতুনলাইন সরাতে পারবেন না?
ক্যালকুলেটরলাইন

ঠিক আছে প্রয়োজনীয় সেমির কারণে নিউলাইনটি সরানো যেতে পারে: গুলি (যা হওয়া উচিত) যাই হোক না কেন
ক্যালকুলেটরফ্লাইন

2

পাওয়ারশেল, 224 217 235 বাইট

param($d,$s)$d=$d-split"`r`n";$p="\s+\$([char[]]$s-join"\")\s";$m=($d|%{($_-split$p)[0].Length}|sort)[-1];$d|%{$l,$c=$_-split$p;$c=if($c){"$s "+(("$c "-split"(.{1,$(87-$m)})\s"|?{$_})-join"`n$(" "*($m+5))$s ")}$l.PadRight($m+5," ")+$c}

সর্বাধিক কোড স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করার জন্য যুক্তি আপডেট করা হয়েছে। একাধিক বিভাজককে রেগেক্স মেটা অক্ষর অন্তর্ভুক্ত করার জন্য আপডেট করা হয়েছে।


সামান্য ব্যাখ্যা

এটি ইনপুটটির জন্য পুরো নিউলাইন সীমিত স্ট্রিংয়ের মধ্যে নেয়।

param($d,$s)
# $d is a newline delimited string. $s is the separator.
# Take the string and turn it into a string array. Stored as $d
$d=$d-split"`r`n"
# Save a regex pattern as it is used more than once
$p="\s+\$([char[]]$s-join"\")\s"
# Get the longest string of code's length
$m=($d|%{($_-split$p)[0].Length}|sort)[-1]
# Split each line again into code and comment. Write out each line with formatted explanations based on separator column position $m
$d|%{
# Split the line
$l,$c=$_-split$p
# Build the comment string assuming there is one.
$c=if($c){"$s "+(("$c "-split"(.{1,$(87-$m)})\s"|?{$_})-join"`n$(" "*($m+5))$s ")}
# Pad the right amount of space on the code and add the comment string.
$l.PadRight($m+5," ")+$c
}

কিছু Lorem Ipsum সহ নমুনা আউটপুট

shM-crz1dc4."ANDBYOROF     # z = input

     rz1                   # convert input to uppercase
    c   d                  # split input on spaces
         c4."ANDBYOROF     # But I must explain to you how all this mistaken idea of
                           # denouncing pleasure and praising pain was born and I will give
                           # you a complete account of the system, and expound the actual
                           # teachings of the great explorer
   -                       # filter those words out
 hM                        # only take the first letter of all words
s                          # join them into one string

@ নিমি আশা করি আপডেটগুলি এখন আরও ভাল সমাধানের জন্য নিয়ে আসে।
ম্যাট

@ নিমিমি আপনি অন্য কিছু ভুল দেখেন? আমি দৃশ্যত শেষ দু'দিন পড়তে সমস্যা বোধ করছি।
ম্যাট

নং এখন একটি +1 আছে।
নিমি

1

ম্যাটল্যাব, 270 265 262 বাইট

function d=f(I,s);S=@sprintf;R=@regexprep;m=regexp(I,['\s*\',s]);L=max([m{:}])+4;a=@(x)S('%-*s%s',L,x,s);b=@(x)R(R(x,S('(.{1,%d}(\\s+|$))',93-L),S('$1\n%*s ',L+1,s)),['\n\s*\',s,' $'],'');c=R(I,['(.*?)\s*\',s,'\s*(.*$)'],'${a($1)} ${b($2)}');d=S('%s\n',c{:});end

প্রোগ্রামটি Iস্ট্রিংগুলির একটি সেল অ্যারের আকারে ইনপুট গ্রহণ করে যেখানে ঘর অ্যারের প্রতিটি উপাদান ইনপুটটির একটি পৃথক লাইন। এটি একটি দ্বিতীয় ইনপুট গ্রহণ করে যা মন্তব্য চরিত্রটি কী তা বোঝায় (অর্থাত #)। ফাংশনটি একটি বহু-লাইন স্ট্রিং দেয় যা সঠিকভাবে ফর্ম্যাটেড।

সংক্ষিপ্ত বর্ণনা

function d = f(I,s)
    %// Setup some shortcuts for commonly-used functions
    S = @sprintf;
    R = @regexprep;

    %// Find the location of the space AFTER each code block but before a comment
    m = regexp(I, ['\s*\',s]);

    %// Compute the maximum column location of the code and add 4 (5 - 1)
    L = max([m{:}]) + 4;

    %// This is a callback for when we detect code
    %// It left justifies and pads the string to L width
    a = @(x)S('%-*s%s', L, x, s);

    %// This is a callback for when we detect a comment.
    b = @(x)R(...
            R(x, ...
                S('(.{1,%d}(\\s|$))', 93 - L), ... Regex for wrapping text to desired width
                S('$1\n%*s ', L+1, s)), ... Append a newline and padding for next line 
            ['\n\s*\',s,' $'], ''); ... Remove the trailing newline (to be improved)

    %// Perform replacement of everything.
    c = R(I, ...
            ['(.*?)\s*\',s,'\s*(.*$)'], ... Match "code comment_char comment"
            '${a($1)} ${b($2)}');   ... Replace using the output of the callbacks

    %// Concatenate all of the strings together with a newline in between
    d=S('%s\n',c{:});
end

উদাহরণ ইনপুট

I = {
    'shM-crz1dc4."ANDBYOROF  # z = input'
    ''
    '     rz1      # convert input to uppercase'
    '    c   d        # split input on spaces'
    '         c4."ANDBYOROF        # create a list of the words from a packed string which shall be ignored'
    '   -          # filter those words out'
    ' hM                # only take the first letter of all words'
    's                   # join them into one string'
};

disp(f(I,'#'));

উদাহরণ আউটপুট

shM-crz1dc4."ANDBYOROF     # z = input

     rz1                   # convert input to uppercase
    c   d                  # split input on spaces
         c4."ANDBYOROF     # create a list of the words from a packed string which shall be
                           # ignored
   -                       # filter those words out
 hM                        # only take the first letter of all words
s                          # join them into one string
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.