বক্সটি ইমপ্লোড করুন


17

এএসসিআইআই বাক্সগুলি দেখতে দেখতে:

++    +---+    +------+    +---+    +---+
++    |   |    |      |    |   |    |   |
      |   |    |      |    |   |    |   |
+-+   |   |    |      |    |   |    |   |
+-+   |   |    |      |    |   |    +---+
      +---+    |      |    |   |
+--+           |      |    |   |    ++
|  |           |      |    |   |    ||
|  |           +------+    |   |    ||
+--+                       |   |    ||
                           +---+    ||
                                    ||
                  +-----+           ||
+------------+    |     |           ++
|            |    |     |
|            |    |     |
+------------+    +-----+

সমপরিমাণ একই ASCII বাক্সগুলির কয়েকটি উদাহরণ এখানে রয়েছে:

++    +- -+    +-    -+    +- -+    +- -+
++    | - |    | -  - |    | - |    | - |
       | |      | -- |      | |      | |
+-+    | |       |  |        "      | - |
+-+   | - |       ||        | |     +- -+
      +- -+      |  |      |   |
+--+            | -- |      | |     ++
|  |           | -  - |      "      ||
|  |           +-    -+     | |     ||
+--+                       | - |   |  |
                           +- -+   |  |
      --                            ||
     -  -         +-   -+           ||
+-  -    -  -+    | - - |           ++
| --      -- |     | = |
| --      -- |    | - - |
+-  -    -  -+    +-   -+
     -  -
      --

একটি অনুলিপি-অনুলিপি ফর্ম্যাটে এই সমস্ত পরীক্ষার কেস বাক্সের লিঙ্ক এখানে । অর্ডারটি সমস্ত ইনপুট হয় একই ক্রমে সমস্ত আউটপুট।

আপনার লক্ষ্য হ'ল একটি এএসসিআইআই বাক্সকে ইনপুট হিসাবে গ্রহণ করা এবং সজ্জিত বাক্সটি ফিরিয়ে দেওয়া। বিভ্রান্তির বিধিগুলি হ'ল:

  1. "+" কখনই পরিবর্তন হয় না; "-" বা "|" নাও সরাসরি "+" সংলগ্ন
  2. কোণ থেকে শুরু করে, "-" এবং "|" কোণের কাছাকাছি একই চরিত্রের চেয়ে আরও একটি স্পেসে অভ্যন্তরে সরান। যদি একটি "-" এবং "|" কখনও একই জায়গায় চলে যাবে, না সরানো।
  3. যদি "-" এবং "-" একই জায়গায় চলে যায়, তবে সেই জায়গাতে একটি "=" রাখুন। যদি একটি "|" এবং "|" একই স্পটে চলে যান, একটি "সেই জায়গায়" রাখুন These এগুলি একই স্পটে তাদের স্ব স্ব চরিত্র হিসাবে দুটি হিসাবে বিপরীত দিকে অগ্রসর হয় count
  4. দুটি "-" বা দুটি "|" নীচের বাম উদাহরণে যেমন দেখা যায়, একে অপরকে অতিক্রম করতে পারে।
  5. বাক্সটি যদি পর্যাপ্ত পরিমাণে চর্মসার হয় তবে এটি একইভাবে বাহিরের দিকে প্রসারিত হবে, সর্বদা পাশ থেকে দূরে সরে যেতে শুরু করে যা এর কিছু অংশ শুরু হয়েছিল।
  6. এক্স এবং y উভয় দিকের (নিউলাইনগুলি উপেক্ষা করে) কেন্দ্রের লাইন জুড়ে ফলাফল সমান্তরাল হওয়া উচিত; এর মধ্যে শূন্যস্থান অন্তর্ভুক্ত রয়েছে, সুতরাং ফলস্বরূপ এটি সন্তুষ্ট করার জন্য ফাঁকা স্থানের সাথে প্যাড করা দরকার।

বিধি বিশদ:

  1. এটি কোড-গল্ফ, তাই বাইট জেতে সংক্ষিপ্ততম প্রোগ্রাম।
  2. স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।
  3. আপনি প্রতিটি লাইন একটি নতুন লাইনের অক্ষরে শেষ বলে ধরে নিতে পারেন।
  4. ইনপুট স্ট্রিংয়ের কেবলমাত্র অক্ষরগুলি "+", "-", "|", "" এবং "\ n" (নতুন লাইন) হবে এবং আপনার আউটপুট স্ট্রিং "=" সংযোজন সহ একই নিয়মগুলি অনুসরণ করা উচিত এবং "সম্ভাব্য অক্ষর হিসাবে।
  5. শেষ লাইনের শেষে আপনার optionচ্ছিকভাবে একক পেছনের নতুন লাইন থাকতে পারে।
  6. আপনাকে যে ছোট ছোট ASCII বাক্সটি পরিচালনা করতে হবে তা হ'ল উপরের বাম উদাহরণ। প্রতিটি ASCII বাক্সের ঠিক কোণে ঠিক 4 "+" থাকবে।
  7. আপনি আকারের বক্স হ্যান্ডেল করতে হবে m x nকোন পূর্ণসংখ্যার জন্য m,nযেমন যে 2<=m,n<256(বৃহত্তম সম্ভব স্ট্রিং এর আকার 255*(255+1))
  8. আপনি ধরে নিতে পারেন আপনি ইনপুট হিসাবে সর্বদা একটি বৈধ ASCII বাক্স পাবেন।

আমি মনে করি আপনি বিধি
বিধানের

এই 1x6 উদাহরণটি মজার, কেন এটি বাহ্যিকভাবে প্ররোচিত হয়? আমি মনে করি সেই ||"
ম্যাজিক অক্টোপাস উরন

নীচের বাম উদাহরণের মতো @ কারাসোকম্পটপুট, দেয়ালগুলি একে অপরের মধ্য দিয়ে চলেছে (সুতরাং বাক্সের পরিমাণটি নেতিবাচক) - 4 এবং 5 বিধি
ল্যথ

@ এখনও এখনও কিছু হওয়া উচিত নয় "? আমি অনুমান করি যে "কেবলমাত্র 3-প্রশস্ত বা তার বেশি প্রদর্শিত হবে?
ম্যাজিক অক্টোপাস উরন

এই টুইটগুলি দেখুন: কোথায় যাবে "? বাম দিকে, না ডানদিকে? এটি উভয়ই হতে পারে না, তবে ফলাফলটি প্রতিসাম্যহীন হওয়ায় এটিও হতে পারে না।
হাইপারনিউটারিনো

উত্তর:


15

পাইথন 2 , 591 555 545 527 525 496 436 351 334 333 303 বাইট

s=input()
w=len(s[0])
h=len(s)
V=max(0,w/2-h)
H=max(0,h/2-w)
p=[[' ']*w]*V
q=[' ']*H
s=[q+k+q for k in p+s+p]
d,c=' -=',' |"'
exec"c,d,V,H,w,h=d,c,H,V,h,w;s=map(list,zip(*s))[::-1]\nfor j in range(h-4):q=s[V+j+2];q[H]=c[q[H]==c[2]];r=H+min(j+1,h-4-j);q[r]=c[1+(q[r]>' ')]\n"*4
for x in s:print''.join(x)

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

সম্পাদনা : আমার পুরানো পদ্ধতিটি প্রথমে উপরে এবং নীচে এবং পরে বাম এবং ডানদিকে ছড়িয়ে পড়ে। পরিবর্তে, আমরা শীর্ষটি ইমপ্লোড করতে পারি, 90 ডিগ্রি ঘোরান এবং 4 বার করতে পারি। এছাড়াও, আমি ব্যবহারকারী-বান্ধব কোডটি ব্যবহার করছিলাম, এটির জন্য ফর্মটিতে ইনপুট থাকা দরকার[['+', '-', '-', '-', '-', '-', '+'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['+', '-', '-', '-', '-', '-', '+']] যা প্রোগ্রামটির জন্য কুৎসিত হলেও খাটো: পি (এটি ধরার জন্য ফিনিক্সকে ধন্যবাদ)

টিআইও লিঙ্কে শিরোনাম কোডের জন্য লেখক নুনকে ক্রেডিট যা কম্পিউটারে পঠনযোগ্য ইনপুটটিতে মানব-পঠনযোগ্য ইনপুটকে রূপান্তর করতে ব্যবহৃত হয়।

-85 বাইট ধন্যবাদ লিকি নুনকে!
-১ by বাইট শীর্ষ-ইমপ্লোশন থেকে বাম-ইমপ্লোনে স্যুইচ করে যা পুরো সারিটি একটি পরিবর্তনশীল এবং পরিবর্তিত হিসাবে সংরক্ষণ করতে দেয়। পরামর্শের জন্য লিকি নুনকে ধন্যবাদ!
কোনও স্থান সরাতে চারপাশে জিনিসগুলি স্যুইচ করে বাইট করুন।
-30 বাইট ধন্যবাদ লিকি নুনকে!


কয়েকটি বাইট সংরক্ষণের জন্য ভেরিয়েবলকে বরাদ্দ করুন s[0]এবং সংযুক্ত করুনS[0]
caird coinheringaahing

@ ইল্কমিডগ ওহ, ঠিক আছে ধন্যবাদ!
হাইপারনিউটারিনো

আপনি প্রতিস্থাপন করতে পারেন p=s[0]এবং P=S[0]সঙ্গে p=z(s[0])এবং P=z(S[0])যথাক্রমে, এবং তারপর সব ঘটনার প্রতিস্থাপন z(p)সঙ্গে pএবং সমস্ত z(P)সঙ্গে Pসংরক্ষণ 18 বাইট।
আর কাপ,

এছাড়াও আপনি প্রতিস্থাপন করতে পারেন (z(s)-1)/2-pসঙ্গে z(s)/2-.5-pএবং (p-1)/2-z(s)সঙ্গে p/2-.5-z(s)2 আরও বেশি বাইট সংরক্ষণ করুন।
আর কাপ,

@ আর কেপ ওহ ঠিক আছে। উভয় পরামর্শের জন্য ধন্যবাদ!
হাইপারনিউটারিনো

1

সি (ঝনঝন) , 693 বাইট

পাঠযোগ্যতার জন্য নতুন লাইন যুক্ত হয়েছে। প্রথম দুটি প্রয়োজন তবে বাকিগুলি নেই।

#define P B[i][l]
#define m malloc(8)
I(B,h,V,S,J,Z,i,j,l,n,H,W,c,C,a,z,_,L,G,u,N,M)char**B,**Z;char*L,*G,*u;{
V=strlen(B[0]);
S=J=0;
Z=m;
for(i=0,j=h-1;i<h/2+h%2;i++,j--){
for(l=0,n=V-1;l<V/2+V%2;l++,n--){
if(P!=43&&((B[i][l-1]!=43&&i<1)||(B[i-1][l]!=43&&l<1))){
H=P==45;
W=P=='|';
P=B[j][l]=B[i][n]=B[j][n]=32;
if(H){
c=(N=i+l-1)==(M=j-l+1)?61:45;
if(M<0)L=m,sprintf(L,"%*s",V,""),L[l]=L[n]=c,Z[J]=L,J++;
else B[N][l]=B[N][n]=B[M][l]=B[M][n]=c;
}
if(W){
c=(N=l+i-1)==(M=n-i+1)?34:'|';
if(M<0)G=m,sprintf(G,"|%*s%s%*s|",i-n-2,"",B[i],i-n-2,""),B[i]=B[j]=G,S++;
else B[i][N]=B[j][N]=B[i][M]=B[j][M]=c;
}
}
}
}
for(a=-J+1;a<=h+J;u=a<1?Z[-a]:a<=h?B[a-1]:Z[a-h-1],C=S+1-strlen(u)/2,printf("%*s%s\n",C>0?C:0,"",u),a++);
}

দুর্দান্ত চ্যালেঞ্জের জন্য ধন্যবাদ! এটি বেশ কৌতুকময় ছিল তবে আমি এখনও অনেক মজা পেয়েছিলাম had

এটি ইনপুটটিকে কমান্ড-লাইন আর্গুমেন্ট হিসাবে গ্রহণ করে এবং ইনপলড বক্সের একটি বহু-লাইন স্ট্রিং STDOUT এ আউটপুট দেয়। সর্বদা হিসাবে, গল্ফিং টিপস খুব প্রশংসা করা হয়।

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

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