একটি নির্দিষ্টকরণ থেকে একটি আয়তক্ষেত্র তৈরি করুন


14

ভূমিকা

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

ইনপুট

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

  • অবশ্যই ছোট হাতের অক্ষরের দেওয়া c, একটি স্ট্যাকে ধাক্কা m×nচরিত্রের গ্রিড cকোন জন্য, m, n ≥ 1
  • একটি পাইপ দেওয়া হয়েছে |, দুটি গ্রিড পপ করুন Aএবং Bস্ট্যাক থেকে ( Bউপরে ছিল), এবং ডানদিকে ABসংযুক্ত করে গ্রিডটি চাপুন । এটির প্রয়োজন এবং সমান উচ্চতা রয়েছে।BAAB
  • হাইফেন দেওয়া হয়েছে -, দুটি গ্রিড পপ করুন Aএবং Bস্ট্যাক থেকে ( Bউপরে ছিল) এবং নীচের অংশে A/Bসংযোগ দিয়ে গ্রিডটি চাপুন । এটির প্রয়োজন এবং সমান প্রস্থ রয়েছে widthBAAB

এটি গ্যারান্টিযুক্ত যে পার্সিং প্রক্রিয়া চলাকালীন কিছু পছন্দ mএবং nকরা (যা প্রতিটি অক্ষরের জন্য পৃথক হতে পারে) এর জন্য, ইনপুট স্পেসিফিকেশন সঠিকভাবে কিছু আয়তক্ষেত্র বর্ণনা করে, যা শেষে স্ট্যাকের উপর ছেড়ে যায়।

আউটপুট

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

মনে রাখবেন যে উপরে বর্ণিত ঠিক মতো ইনপুটটি প্রসেস করার দরকার নেই; শুধুমাত্র গুরুত্বপূর্ণ জিনিসটি আপনার আউটপুটটি সঠিক।

উদাহরণ

স্পেসিফিকেশন বিবেচনা করুন

par-s||e-

প্রথমত, আমরা একটি 1×2আয়তক্ষেত্র pএবং ধরণের 1×1আয়তক্ষেত্রকে ধাক্কা বেছে নিই aএবং rএর কারণটি পরে স্পষ্ট হবে)। তারপরে, আমরা পপগুলি aএবং rআয়তক্ষেত্রগুলিকে পপ করি এবং তাদের উল্লম্ব সংমিশ্রণে ঠেলা দেই

a
r

এরপরে, আমরা একটি 1×2আয়তক্ষেত্রটি চাপি s, এটি এবং উপরের আয়তক্ষেত্রটি পপ করব এবং তাদের অনুভূমিক সংমিশ্রণটি ধাকব

as
rs

তারপরে আমরা সেই আয়তক্ষেত্রটি এবং আয়তক্ষেত্রটি পপ করব pএবং তাদের উপবৃত্তিকে ধাক্কা দেব

pas
prs

অবশেষে, আমরা একটি 3×1আয়তক্ষেত্রটি চাপি e, এটি এবং উপরের আয়তক্ষেত্রটি পপ করব এবং উল্লম্ব সংমিশ্রণটিকে ধাক্কা দেব

pas
prs
eee

এটি প্রোগ্রামের আউটপুট, বা সম্ভাব্যতার অন্তত একটি। যদিও খেয়াল করুন

ppas
ppas
pprs
eeee

স্পেসিফিকেশন দ্বারা উত্পাদিত হয়, এটি একটি বৈধ আউটপুট নয়, যেহেতু সারি এবং কলামগুলির অনেকগুলি সরানো যেতে পারে।

আরও সূক্ষ্ম উদাহরণ হিসাবে বিবেচনা করুন

co|m|p|il|e|r|-

এই স্পেসিফিকেশনটি আয়তক্ষেত্র তৈরি করে

comp
iler

যা একটি বৈধ আউটপুট। তবে এটি জেনারেটও করে

commp
iiler

যা বৈধও, যেহেতু কোনও একক সারি বা কলাম অকার্যকর না করে সরানো যাবে না।

বিধি

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

অতিরিক্ত পরীক্ষার কেস

আপনি আপনার প্রোগ্রামটি পরীক্ষা করতে এটি ব্যবহার করতে পারেন।

Input:
a
Output:
a

Input:
co|mp|l|-ex|i|f|-y|
Example output:
cccoy
mplly
exify

Input:
ja-r|g-o|ni-|ze|d-|
Example output:
jronze
arondd
ggoidd

Input:
un|co|p-yr|i|gh-t-ab|-|le-||-
Example output:
unnnnnnn
coyriggl
ppyrihhe
ppyritte
ppyriabe

এন এবং এম কোথা থেকে আসে?
সন্ধান করুন

স্থির হতে পারে বা ইনপুট কিছু ফর্ম হতে হবে?

@ সিগ nএবং mঅ- নিরঙ্কুশভাবে বেছে নেওয়া হয়েছে। এটি গ্যারান্টিযুক্ত যে তাদের জন্য উপযুক্ত মান বিদ্যমান, তবে এটিগুলি খুঁজে পাওয়া আপনার প্রোগ্রামের কাজ।
জাগারব

তারা আসলে কী তা আপনি সংজ্ঞায়িত করেন না।
seequ

un|co|p-|yr|i|gh--t-ab|-|le-||-বৈধ হওয়া অসম্ভব। সর্বশেষের -2 টির আরটি থাকে, যখন স্ট্যাকটিতে কেবল 1 টি উপাদান থাকে।
orlp

উত্তর:


6

কে, 123 110 বাইট

আমি কার্ডবোর্ড_বক্সের সমাধানের অনুরূপ পদ্ধতির ব্যবহার করেছি।

r:{y,x#,*|y};h:{t:(#x)|#y;r[t-#x;x],'r[t-#y]y};a:{(,x .|2#y),2_ y};*(){(a[{+h[+x;+y]}]x;a[h]x;(,,y),x)"-|"?y}/

এই প্রোগ্রামটি সাহায্যকারী সংজ্ঞাগুলির একটি সিরিজ যা অনুসরণকারী ফাংশন দ্বারা অনুসরণ করে যা একটি সঠিক যুক্তি হিসাবে স্ট্রিং নেয়। পঠনযোগ্যতার জন্য পুনরায় ফর্ম্যাট করা এবং চূড়ান্ত ফাংশনটি নির্ধারিত হিসাবে f:

r: {y,x#,*|y};                           / repeat last row x times
h: {t:(#x)|#y;r[t-#x;x],'r[t-#y;y]};     / append horizontal
v: {+h[+x;+y]};                          / append vertical
a: {(,x[y@1;y@0]),2_ y};                 / pop two values, concat

f: *(){:[y="-";a[v;x]; y="|";a[h;x]; (,,y),x]}/;

উদাহরণ ব্যবহার করুন:

  f "ja-r|g-o|ni-|ze|d-|"
("jronze"
 "aroidd"
 "ggoidd")

কোনা ব্যবহার করে পরীক্ষিত, তবে আপনি যদি সংজ্ঞা দ্বারা প্রতিস্থাপন করেন তবে এটি ওকেতেও কাজ করবে:f একটি $- কে 5 সাথে "কনড" এর বাক্য গঠন পরিবর্তন করেন।

একটি মূল বিষয়টি স্বীকৃতি দিচ্ছে যে একটি উল্লম্ব সংযোজন করা উভয় ম্যাট্রিকের ট্রান্সপোজের অনুভূমিক সংযোজনের স্থানান্তর। (সংজ্ঞাটি দেখুন v। যদি কেউ আরও বিস্তারিত ব্যাখ্যা করতে আগ্রহী হয় তবে আমি একটি সরবরাহ করতে পারি।

সম্পাদনা:

এই এন্ট্রিটির শীর্ষে প্রোগ্রামটি আপডেট করুন। অবরুদ্ধ সংস্করণ:

r: {y,x#,*|y};                           / repeat row x times
h: {t:(#x)|#y;r[t-#x;x],'r[t-#y;y]};     / append horizontal
v: {+h[+x;+y]};                          / append vertical
a: {(,x .|2#y),2_ y};                    / apply a concat
f: *(){(a[v]x;a[h]x;(,,y),x)"-|"?y}/;

উল্লেখযোগ্য দৈর্ঘ্যের অপ্টিমাইজেশানগুলির মধ্যে "ডট প্রয়োগ" এর ব্যবহার অন্তর্ভুক্ত রয়েছে a, "কনড" এর পরিবর্তে তালিকাটি ইনডেক্সিং f(কম দক্ষ, তবে খাটো) এবং ফর্মের শর্তাবলী প্রতিস্থাপনের a[b;c]মাধ্যমে a[b]cযেখানে গ্রুপিংয়ের দ্বারা অনুমোদিত। যেহেতু আমি আর "কনড" বা কোনও আদিম ব্যবহার করছি না যা কে 3 এবং কে 5 এর মধ্যে পৃথক রয়েছে এই সংস্করণটি এখন কোনও পরিবর্তন ছাড়াই ওকে কাজ করে।


অনুদান জিতে অভিনন্দন!
জাগারব

ধন্যবাদ! এটি একটি আকর্ষণীয় সমস্যা ছিল যা কে-কে বেশ ভাল ফল পেয়েছিল comparison তুলনামূলকভাবে জে বা এপিএলে চেষ্টা দেখতে আগ্রহী হত।
জন

4

প্রোলোগ, 539 বাইট

:-lib(ic).
:-lib(util).
b(A,B,C):-between(A,B,C).
g(S):-string_list(S,L),p(L,[]).
w(h(L,R):_:_,I,J):-w(L,I,J);L=_:W:_,X is I-W,w(R,X,J).
w(v(U,D):_:_,I,J):-w(U,I,J);U=_:_:H,Y is J-H,w(D,I,Y).
w(f(C):W:H,I,J):-b(1,W,I),b(1,H,J),char_code(S,C),put_char(S).
p([],[S]):-term_variables(S,V),S=_:X:Y,labeling(V),!,b(1,Y,J),(b(1,X,I),w(S,I,J);nl),fail.
p([124|T],[Q,Z|R]):-!,Q=_:WA:H,Z=_:WB:H,W #= WA+WB,p(T,[h(Z,Q):W:H|R]).
p([45|T],[Q,Z|R]):-!,Q=_:W:HA,Z=_:W:HB,H #= HA+HB,p(T,[v(Z,Q):W:H|R]).
p([C|T],R):-!,[H,W] #:: 1..100,p(T,[f(C):W:H|R]).

ব্যাখ্যা

আমরা প্রিডিকেট দিয়ে শুরু করি g, যা একটি স্ট্রিং নেয়, এটিকে অক্ষরের তালিকায় রূপান্তরিত করে এবং কল করেp দ্বিতীয় তর্ক হিসাবে খালি স্ট্যাক দিয়ে (পার্স) প্রিকেটটিকে ।

ভবিষ্যদ্বাণীত pযথাযথভাবে সংশোধিত স্ট্যাকের সাথে নিজেকে পুনরাবৃত্তভাবে কল করে ( [H|T]ধ্বংস এবং নির্মাণকারীর নিদর্শনগুলি দেখুন)। যখন বেস কেসে ফোন করা হয়, যেখানে ইনপুট তালিকাটি খালি থাকে,p স্ট্যাকের অনন্য উপাদানটি মুদ্রণ করে। স্ট্যাকের যদি এই পর্যায়ে এক বা একাধিক উপাদান থাকে তবে এর অর্থ হ'ল আমাদের একটি খালি ইনপুট স্ট্রিং, একটি খারাপ ইনপুট স্ট্রিং বা একটি বাগ (এমটিপি স্ট্রিং সহ, প্রিডিকেট ব্যর্থ হয় (প্রোলগ বলে No)) তবে কিছুই মুদ্রিত হয় না, যা ঠিক আছে, যেহেতু খালি স্ট্রিংয়ের জন্য আমাদের কিছু মুদ্রণ করা উচিত নয়)।

সমাধানে

স্ট্যাকটিতে নির্মিত আয়তক্ষেত্রগুলির বিবরণ রয়েছে, চিহ্নিত আছে S:W:Hযেখানে Sআয়তক্ষেত্রের প্রতীকী উপস্থাপনা রয়েছে,W এর প্রস্থ এবং Hউচ্চতা (নোট, একটি ফান্টারের সাথে টিপলটির A:Bজন্য সিনট্যাকটিক চিনি) এটি একটি টিপল থাকার চেয়ে লেখার চেয়ে খাটো মাত্র উপসর্গ স্বরলিপি সহ)।:(A,B):

সঙ্গে ABউপ-আয়তক্ষেত্রের স্পেসিফিকেশন এবং Sহতে পারে:

  • h(A,B) : A এবং B এর অনুভূমিক কনক্যাট
  • v(A,B) : A এবং B এর উল্লম্ব কনক্যাট
  • f(C) : সি দিয়ে পূরণ করুন, যেখানে সি একটি অক্ষর কোড

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

প্রক্রিয়া শেষে লেবেল স্টেপ ন্যূনতম সম্ভাব্য মানগুলি ব্যবহার করে (এটি সেই আদেশের সম্পত্তি যা সমাধানগুলি চেষ্টা করে) using

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

এও নোট করুন যে ভেরিয়েবলের জন্য ডিফল্ট ডোমেন সেট করা আছে 1..100, সম্ভাব্য আকারের গ্রিডগুলির উপর একটি সীমাবদ্ধতা রয়েছে। প্রয়োজনে উপরের সীমাটি পরিবর্তন করা যেতে পারে। এর পারফরম্যান্সের প্রভাবগুলি হ'ল কোনও নির্দিষ্ট সমাধান কোনও সমাধানই স্বীকার করে না তা নির্ধারণ করতে এটি অনেক সময় নিতে পারে । আমি বললাম " পারলাম " কারণ সীমাবদ্ধতাগুলি ঘনিষ্ঠভাবে তীক্ষ্ণ অনুসন্ধানে ছাঁটাই করতে পারে। যদি আপনি এমন একটি ইনপুট স্ট্রিং খুঁজে পান যা প্রত্যাখ্যান করা শক্ত / ব্যয়সাধ্য হয় তবে দয়া করে ভাগ করুন।

মুদ্রণ

মুদ্রণ অংশ আকর্ষণীয় এক ধরনের কারণ রশ্মি ভোটদান গঠন উপর অ্যালগরিদম: আমি বারবার ফলে গ্রিড প্রতিটি কক্ষে, পয়েন্ট থেকে (1,1)বিন্দু (W,H)এবং কল wসম্পৃক্ত প্রধান গাছে গ্রিড বিষয়বস্তু মুদ্রণ করতে এ এই অবস্থানটি (অবশ্যই প্রতিটি লাইন প্রক্রিয়া করার পরে একটি নতুন লাইন প্রিন্ট করা হবে)।

ইন w, অবস্থানগুলি বর্তমান গ্রিডের তুলনায় (রুট গ্রিড পরম স্থানাঙ্ক সংজ্ঞায়িত করে)।

h(A,B)বিন্দুতে কোনও কাঠামো (X,Y)প্রিন্ট করার সময় , আমি উভয় শাখায় শর্তহীন মুদ্রণ করি:

  • গ্রিডে Aপয়েন্ট এ (X,Y), এবং
  • গ্রিড Bবিন্দুতে (H,Y), যেখানে Hহয় Xমাইনাস প্রস্থ A

গ্রিড-গাছের পাতার শাখাগুলি f(C), শেষ পর্যন্ত হয় অক্ষরটি মুদ্রণ করে C, যদি আপেক্ষিক অবস্থান গ্রিডের অভ্যন্তরে থাকে বা কিছুই না করে। এইভাবে আমি গ্রিডের সামগ্রীটি উপরের থেকে নীচে, বাম থেকে ডানদিকে আউটপুট স্ট্রিমে মুদ্রণ করতে পারি। কোনও আসল অ্যারে তৈরি করা হয় না।

টেস্ট

t("ja-r|g-o|ni-|ze|d-|").
t("un|co|p-yr|i|gh-t-ab|-|le-||-").
t("co|mp|l|-ex|i|f|-y|").
t("a").

tt :- t(X),nl,g(X).
tt.

চলমান পরীক্ষা:

[eclipse] tt.

jronze
aronze
ggoidd

uuuuuuun
coyriggl
coyrihhl
coyrittl
ppyriabe

cccoy
mmply
exify

a

Yes (0.00s cpu)

No actual arrays are produced.এটি করা উচিত কিভাবে +1 । ব্যাকরণটি এত সহজ এবং শর্টকাট রয়েছে বলে এই ক্ষেত্রে ওভারকিল।
edc65

@ edc65 হ্যাঁ, এটি ওভারকিল। তবে এটি কোডগল্ফ হওয়ায়, আমি আকারটি হ্রাস করার চেষ্টা করেছি এবং অ্যারেগুলি হেরফের করা খুব ভার্জিক ছিল।
coredump

3

পাইথন 2.7, 259

z=zip
def p(a,b):
 s,l=sorted([a,b],key=len)
 s+=([s[-1]]*(len(l)-len(s)))
 return z(*(z(*a)+z(*b)))
g=lambda s,t=[]:s and(s[0]=='-'and g(s[1:],t[:-2]+[z(*p(z(*t[-2]),z(*t[-1])))])or(s[0]=='|'and g(s[1:],t[:-2]+[p(t[-2],t[-1])])or g(s[1:],t+[[s[0]]])))or t[0]

gএকটি ফাংশন যা একটি স্পেসিফিকেশন নেয় এবং একটি 2D অক্ষর দেয়। আপনি যদি আরও ব্যবহারকারী-বান্ধব সংস্করণ চান তবে এটি স্ট্যান্ডিনের কাছ থেকে একটি স্পেসিফিকেশন নেওয়ার জন্য গ্রিডটি মুদ্রণ করতে এই লাইনটি যুক্ত করুন:

print'\n'.join(''.join(s)for s in g(raw_input()))

পরীক্ষার কেস

Input:
a
Output:
a
==========
Input:
co|mp|l|-ex|i|f|-y|
Output:
coooy
mplly
exify
==========
Input:
ja-r|g-o|ni-|ze|d-|
Output:
jronze
aroidd
ggoidd
==========
Input:
un|co|p-yr|i|gh-t-ab|-|le-||-
Output:
unnnnnnn
coyriggl
ppyrihhe
ppyritte
ppyriabe

ব্যাখ্যা

কৌশলটি সহজ: কোনও গ্রিড যদি কোনও Gনির্দিষ্টকরণের জন্য বৈধ হয় Sতবে তার ডানদিকের কলামটি পুনরাবৃত্তি Gকরাও এর জন্য একটি বৈধ স্পেসিফিকেশন দেয় Sএবং নীচের সারিটি পুনরাবৃত্তি করার ক্ষেত্রেও এটি সত্য (স্ট্রাকচারাল আন্ডার দ্বারা এটির প্রমাণ S)। সুতরাং, যখন আমরা দুটি আয়তক্ষেত্র একত্রিত করতে চাই, তখন ছোট আকারের শেষ কলাম / সারিটি আকারে মেলে যতক্ষণ না হয় (ফাংশন পি এটি করে) we


3

হাস্কেল, 388 367 352 বাইট

data C=L{c::Char}|N{t::Int,w::Int,h::Int,l::C,r::C}
q=replicate
[]#[x]=x
(c:i)#(b:a:s)|c=='-'=i#(N 1(max(w a)$w b)(h a+h b)a b:s)|c=='|'=i#(N 2(w a+w b)(max(h a)$h b)a b:s)
(c:i)#s=i#(N 0 1 1(L c)(L c):s)
p i|t i==0=q(h i)$q(w i)$c$l i|t i==2=zipWith(++)(p(l i){h=h i})$p(r i){h=h i,w=w i-w(l i)}|1<2=p(l i){w=w i}++p(r i){w=w i,h=h i-h(l i)}
f=p.(#[])

ব্যবহার: f "par-s||e-" ->["pas","prs","eee"]

সুন্দর মুদ্রণ সহ পরীক্ষা চালান:

> putStr $ unlines $ f "par-s||e-"
pas
prs
eee

> putStr $ unlines $ f "co|m|p|il|e|r|-"
comp
iler

> putStr $ unlines $ f "a"
a

> putStr $ unlines $ f "co|mp|l|-ex|i|f|-y|"
coooy
mplly
exify

> putStr $ unlines $ f "ja-r|g-o|ni-|ze|d-|"
jronze
aroidd
ggoidd

> putStr $ unlines $ f "un|co|p-yr|i|gh-t-ab|-|le-||-"
unnnnnnn
coyriggl
ppyrihhe
ppyritte
ppyriabe

এটি কীভাবে কাজ করে: ফাংশনটি #গাছের কাঠামোর মধ্যে ইনপুট স্ট্রিংকে পার্স করে Cযা Lমুদ্রণের জন্য অক্ষর ধারণ করে এমন একটি পাতা বা নোড NNক) পাশাপাশি থাকতে পারে জোড় ( t==2), খ) উপরের নীচের অংশে যোগ হওয়া ( t==1) বা সি) একক অক্ষরের বর্গক্ষেত্র (t==0 )। সমস্ত নোডের একটি প্রস্থ এবং উচ্চতা ক্ষেত্র এবং একটি বাম এবং ডান শিশু রয়েছে। বিশ্লেষণের পরে, pতার শিশু নোডগুলির আকার (প্রস্থ x উচ্চতা) পুনরাবৃত্তভাবে সমন্বয় করে এবং সেগুলিতে যোগদান করে অবশিষ্ট রুট নোডটি মুদ্রণ করে।

সম্পাদনা করুন: সুন্দর মুদ্রণের পরিবর্তে লাইনগুলির তালিকা হিসাবে আউটপুট


1

জাভাস্ক্রিপ্ট (ES6), 283 295

সম্পাদন করাএখন করুন এটি (ভারীভাবে গল্ফ করা) জেএস সমাধানটি রেফারেন্সের তুলনায় কমপক্ষে ছোট (বেশ গল্ফযোগ্য) পাইথন সমাধান।

কার্ডবোর্ড_বক্সের অনুরূপ, কেবলমাত্র বামতম কলাম বা শীর্ষতম সারির পুনরাবৃত্তি।

F=w=>(
s=[t=1,l='length'],
[for(c of w)(
  b=s[t],a=s[--t],
  c>'z'?
    s[t]=(G=(a,b,m=b[l]-a[l])=>m?m>0?G([a[0],...a],b):G(a,[b[0],...b]):a.map((r,i)=>r+b[i]))(a,b)
  :c<'a'?
    s[t]=a.map(r=>r[m=b[0][l]-r[l],0].repeat(m>0&&m)+r).concat(b.map(r=>r[0].repeat(m<0&&-m)+r))
  :s[t+=2]=[c]
)],
s[t].join('\n'))

নিখুঁত এটি আমার প্রথম, নিরবচ্ছিন্ন সমাধান।

F=sp=>{
  s=[]
  for(c of sp){
    a=s.pop(b=s.pop())
    if (c > 'z')
    {
      l = a.length
      m = b.length
      for(; l-m ;)
        l < m ? l = a.unshift(a[0]) : m = b.unshift(b[0])
      s.push(a.map((r,i) => r + b[i]))
    }
    else if (c < 'a')
    {
      l = a[0].length
      m = b[0].length
      s.push(
        a.map(r => r[0].repeat(l < m ? m-l : 0) + r)
        .concat(b.map( r => r[0].repeat( l > m ? l-m : 0) + r))
      )
    }
    else 
    {
      s.push(a,b,[c])
    }
  }
  return s.pop().join('\n')
}

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

;['par-s||e-','co|m|p|il|e|r|-','co|mp|l|-ex|i|f|-y|',
 'ja-r|g-o|ni-|ze|d-|','un|co|p-yr|i|gh-t-ab|-|le-||-']
.forEach(w=>console.log(F(w)))

আউটপুট

pas
prs
eee

comp
iler

cccoy
mmply
exify

jronze
aronze
ggoidd

uuuuuuun
coyriggl
coyrihhl
coyrittl
ppyriabe

0

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

আমি যে প্রতিবেদনের উত্তর দিয়েছি প্রতিশ্রুতি দিয়েছিলাম তা এখানে আরও খানিকটা গল্ফ করেছে।

T=lambda m:list(map(list,zip(*m)))
E=lambda a,b:a[:1]*(len(b)-len(a))+a
H=lambda a,b:[d+c for c,d in zip(E(a,b),E(b,a))]
s=[]
for k in input():s=k>"z"and[H(*s[:2])]+s[2:]or k<"a"and[T(H(*map(T,s[:2])))]+s[2:]or[[[k]]]+s
for r in s[0]:print("".join(r))

এটি একটি সম্পূর্ণ প্রোগ্রাম যা STDIN থেকে স্ট্রিংটি STDOUT এ প্রিন্ট করে। পদ্ধতির কার্ডবোর্ড_বক্সের মতোই: একটি চরিত্রের জন্য একটি 1x1 অ্যারে টিপুন এবং সংলগ্নতার জন্য প্রয়োজন হলে সারিগুলির সদৃশ করুন।

$ echo "par-s||e-" | python3 gr.py
pas
prs
eee

বিস্তারিত ব্যাখ্যা

  • Tপ্রদত্ত তালিকার তালিকাটি স্থানান্তর করে। বেশিরভাগ কাজ সম্পন্ন হয় zip(*m)যার সাহায্যে সারিগুলি কলামগুলিতে অদলবদল করা হয় , বাকিগুলি ফলাফলকে তালিকার তালিকায় রূপান্তর করে, যেহেতু zipটিপলসগুলির একটি জেনারেটর দেয়।
  • E(a,b)আয় aতার প্রথম উপাদান সঙ্গে দৈর্ঘ্য মেলে যথেষ্ট বার পুনরাবৃত্তি b। নোট করুন যে কোনও নেতিবাচক সংখ্যার দ্বারা তালিকাটি গুণিত করা খালি তালিকা দেয়, তাই যদি এর bচেয়ে কম হয় তবে এটি aফিরে আসে a
  • H(a,b)এর অনুভূমিক সংক্ষিপ্ত বিবরণ প্রদান করে aএবং bসংক্ষিপ্ততর দ্বারা দীর্ঘ করা হয়E যদি প্রয়োজন তবে ।
  • s স্ট্যাক হয়।
  • ইন forলুপ, আমরা বারবার ইনপুট স্ট্রিং ধরে এবং প্রতিস্থাপন sকরা একটি নতুন মান দ্বারা যদি এটা |(তার চেয়ে অনেক বেশী z), আমরা দুটি মানের পপ এবং তাদের ধাক্কা H, যদি এর -(কম a), আমরা দুই মূল্যবোধ, TRANSPOSE, এর ফিড পপ H, আবার স্থানান্তর করুন এবং ফলাফলটি চাপ দিন এবং অন্যথায় অক্ষরটি দিয়ে একটি 1x1 অ্যারে চাপুন push
  • অবশেষে, আমরা এর প্রথম উপাদানটি মুদ্রণ করি s
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.