অর্ধেক ট্যাবগুলি ভাঙ্গুন


31

পবিত্র যুদ্ধগুলি স্পেস বনাম ট্যাবগুলিতে লড়াই করা হয়েছে। (এবং অবশ্যই স্পেস, নিরপেক্ষভাবে উচ্চতর হচ্ছে, জিতেছে।) - অ্যালেক্স উ:

এস Ome peo পি Le এখনো অস্বীকার করার একটি ccept যে whi জ CL হয় arly গুলি upreme। আপনি শুধু পেয়েছি একটি ফাইল incor ব্যবহার পুনরায় CT, বিজ্ঞাপন, এবং INF whi এর rior ফর্ম টি Espace, এবং এখন t তিনি চলছে ফাইলটি একটি এর nts R ই দূষিত এবং ছারখার।

আপনি স্থির করে নিন যে আপনি সেই ব্যক্তিকে দেখিয়ে দিতে পারেন যিনি আপনাকে ফাইলটি প্রেরণ করেছেন কেবল তারা কতটা ভুল - হিংস্রভাবে।

বিবরণ

শিরোনামের পরামর্শ অনুসারে, আপনার চ্যালেঞ্জটি এমন একটি ফাইল নেওয়া যা একটি বা একাধিক ট্যাব ধারণ করে:

this is an evil tab    onoes

এবং নির্মমভাবে তাদের টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করা

this is an evil tab

                     o
                     n
                     o
                     e
                     s

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

চ্যালেঞ্জ

সমাধানটি ইনপুট হিসাবে একটি একক স্ট্রিং গ্রহণ করা উচিত, এতে মুদ্রণযোগ্য এএসসিআইআই, নিউলাইনস এবং ট্যাব থাকতে পারে। ইনপুটটিতে সর্বদা কমপক্ষে একটিমাত্র ট্যাব থাকবে।

নিম্নলিখিত বিধি প্রয়োগ করে আউটপুট একই স্ট্রিং হওয়া উচিত:

  • স্থানাঙ্ক (0,0) এবং ডান দিকের সাথে কার্সারটি শুরু করুন। স্থানাঙ্কগুলি হ'ল (কলাম, সারি), শূন্য-সূচকযুক্ত এবং দিকনির্দেশটি কোনও অক্ষর মুদ্রণের পরে কার্সারটি সরানো উচিত way

  • স্ট্রিংয়ের প্রতিটি চরিত্রের জন্য:

    • যদি এটি একটি নতুন লাইন থাকে তবে স্থানাঙ্কগুলিতে যান (0, n), যেখানে n এখন পর্যন্ত স্ট্রিংয়ের নতুন লাইনের সংখ্যা (এটি সহ) টিপুন এবং ডানদিকে দিকটি পুনরায় সেট করুন।

    • যদি এটি কোনও ট্যাব হয় তবে দুটি স্পেস আউটপুট করুন, কার্সার দিকটি 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরান , এবং আরও দুটি স্পেস আউটপুট করুন, কার্যকরভাবে ট্যাবটিকে অর্ধেক "ব্রেক"। এখানে একটি ভিজ্যুয়াল উদাহরণ রয়েছে, যেখানে কোনও ট্যাব হিসাবে উপস্থাপিত হয় --->এবং স্থানগুলি ·:

      foo--->bar--->baz
      

      হয়ে

      foo···
           ·
           b
           a
           r
           ·
           ·
       zab··
      
    • অন্যথায়, কেবল কার্সারে অক্ষর আউটপুট করুন এবং কার্সারটিকে বর্তমান দিকের এক ধাপে সরান।

যেহেতু আপনি স্ট্রিংটি শুরু থেকে শেষ পর্যন্ত পড়ছেন, তাই সম্ভবত বিদ্যমান অক্ষরের "শীর্ষে" আপনাকে লিখতে হবে - এটি ঠিক আছে। উদাহরণস্বরূপ, ইনপুট

foo--->bar


spaces are superior

এর একটি আউটপুট হতে হবে

foo

     b
spaces are superior
     r

"ভাঙা ট্যাবগুলি" অন্যান্য অক্ষরগুলিকে মুছে ফেলা উচিত কিনা তা আপনি বেছে নিতে পারেন — আসল উদ্দেশ্যটি তারা না করে তবে স্পেসটি অস্পষ্ট ছিল তাই এটি আপনার সিদ্ধান্ত।

তদ্ব্যতীত, এই বিধি প্রয়োগ করার পরে, আপনিও করতে পারেন

  • আপনার পছন্দ মতো অনেকগুলি ট্রেলিং স্পেস যুক্ত বা সরিয়ে দিন।

  • সর্বাধিক একক ট্রেলিং নিউলাইন যুক্ত করুন।

ইনপুটটিতে কখনই পিছনের স্থান থাকবে না ; এটিতে কখনও কখনও শীর্ষস্থানীয় বা পিছনে থাকা নিউলাইন থাকবে না। আপনি সর্বদা ধরেও নিতে পারেন যে আপনাকে কখনই কোনও কলামে বা 0 থেকে কম সারি (যেমন পর্দার বাইরে) লিখতে হবে না।

পরীক্ষা ক্ষেত্রে

এই পরীক্ষার ক্ষেত্রে ট্যাবগুলি উপস্থাপন করা হয় --->কারণ অন্যথায় এসই সেগুলি আপ করে।

ইনপুট:

Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah

আউটপুট:

Test case. Here's a tab
blah
blah                     t
blah blah blah blah blah blah
                        blaablah
                         r     b
                         e     l  b
                      h  'h    a  l
                      a  sa    a  a
                      l   l    h  h
       this is some mobe tbxt

                         haalhalb
     b                   a
     a                   b
     t

        bat a erehwyreve

অভিনব অ্যানিমেশন:

বিধি

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

আপনি যখন বলছেন কার্সারটি শুরু করতে (0,0)হবে তখন আপনার অর্থ কি আমাদের প্রথমে কনসোলটি সাফ করা দরকার, বা আপনি কেবল এটির দ্বারা কার্সরের ডিফল্ট অবস্থানটি বোঝাতে চান?
মার্টিন এন্ডার

18
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এটি ঘৃণা এবং নিন্দার দ্বারা পরিপূর্ণ।
অ্যাডিটসু

1
আপনার অ্যানিমেশনটি> <> দোভাষীর মতো দেখতে দেখতে এখন একটি স্ব-পরিবর্তনকারী> <> এন্ট্রি দেখতে চাই।
সানচিইস

1
শুরুর অনুচ্ছেদে লুকানো বার্তাটি আমি পছন্দ করেছি তবে আমার এতে একমত হতে হবে না।
wf4

@ মার্টিনব্যাটনার এর অর্থ হ'ল ডিফল্ট অবস্থান।
ডোরকনবব

উত্তর:


8

ম্যাটল্যাব, 144 বাইট

স্ট্রিংগুলির সাথে কাজ করার জন্য পছন্দসই অস্ত্র অবশ্যই সংখ্যার হেরফের করার জন্য তৈরি একটি ভাষা [উদ্ধৃতি আবশ্যক]। একসাথে ঠাট্টা করা, মতলব সম্পর্কে দুর্দান্ত বিষয় হ'ল আপনি যদি কোনও অ্যারে 'সীমানা ছাড়াই' অর্পণ করেন তবে এটি বিবেচ্য নয়: এটি কেবল একটি বৃহত্তর ম্যাট্রিক্স তৈরি করবে। তদুপরি, ডিফল্ট ম্যাট্রিক্স উপাদানটি, ASCII স্পষ্ট অনুসারে বর্ণচিহ্নের 0পরিবর্তে একটি স্থান হিসাবে রেন্ডার হয় null

ট্যাবগুলি কেবল স্থানাঙ্কের মধ্যে ঝাঁপ, তাই কোনও ট্যাবের জন্য কোনও স্থান ফাঁকা হয় না।

function o=q(t)
u=2;v=0;x=1;y=1;n=1;for s=t
if s==9 x=x+u-v;y=y+v+u;a=v;v=u;u=-a;elseif s<11
n=n+1;x=1;y=n;else
o(y,x)=s;x=x+u/2;y=y+v/2;end
end

আমি 209 বাইট দিয়ে যাত্রা শুরু করেছিলাম, তবে আরও কিছু যত্নশীল গল্ফিং এর বেশিরভাগ অংশ থেকে মুক্তি পেয়েছে; এই কোডটিতে প্রচুর পুনরাবৃত্তি রয়েছে, তাই আমি কিছু ট্রায়াল-ত্রুটি করেছি যা বিকল্পগুলি সবচেয়ে ভাল কাজ করেছে। আমি মনে করি না এই কোডটি দিয়ে আরও অপ্টিমাইজেশনের জন্য খুব বেশি জায়গা আছে তবে আমি ভুল প্রমাণিত হয়ে সর্বদা খুশি। সম্পাদনা: টম কার্পেন্টার আমাকে ভুল প্রমাণ করতে পরিচালিত; সে 9 টি বাইট সংরক্ষণ করতে সক্ষম হয়েছিল যা আমি পুরো 29 টি বাইট সংরক্ষণ করতে অনুকূলিত করেছি। nullইনপুটটিতে কোনও নিয়ন্ত্রণ অক্ষর (ASCII <9) নেই বলে ধরে নিয়ে শেষ বাইটটি সংরক্ষণ করা হয়েছে - MATLAB স্ট্রিংগুলি নির্ধারিত নয় ।


কাজে হাজির হয় না। আমি এটি চেষ্টা করেছিলাম q('hello<tab>my name<tab>is tom<tab>c'), কিন্তু এটির লাইনে কিছু রয়েছে Attempted to access o(11,-2); on line 7। যদিও প্রশ্নের কোনও ইস্যু নিয়ে এটি আরও কাজ করতে পারে - যদি কার্সারটি পিছনের দিকে চলে যায় এবং প্রথম কলামের বাইরে চলে যায় তবে বাকী রেখার কী ঘটে।
টম কার্পেন্টার

হ্যাঁ, আমার খারাপ আমি কিছুটা মিস করেছি। আমি এখনই চলে যাব;)
টম কার্পেন্টার

1
আপনি dভেরিয়েবলটি সরিয়ে এবং এর পরিবর্তে 4 টি ভেরিয়েবল রেখে আরও 9 টি অক্ষর সংরক্ষণ করতে পারেন যা একটি লুপের জন্য [1 0 -1 0] প্যাটার্নটি যেমন তৈরি করতে পারে: function o=q(t) u=1;v=0;w=-1;z=0;x=0;y=1;n=1;for s=t if s==9 x=x+2*u-2*v;y=y+2*v+2*u;a=z;z=w;w=v;v=u;u=a;elseif s==10 n=n+1;x=0;y=n;else x=x+u;y=y+v;o(y,x)=s;end end (মন্তব্যগুলিতে থাকা এটি সমস্ত লাইন মুছে ফেলেছে, তাই আপনার কাছে থাকবে আমি যা করেছি তা দেখার জন্য এটির মতো এটির পুনরায় ফর্ম্যাট করতে)
টম কার্পেন্টার

@ টমকার্পেন্টার এটি ... সত্যিই কুৎসিত। আমি এটা ভালোবাসি.
সান্ধ্যকাল

5

পাইথন 3, 272 270 266 262 255 253 244 বাইট

I=[]
try:
 while 1:I+=[input()]
except:r=m=0
M=sum(map(len,I))
O=[M*[' ']for _ in[0]*M]
for l in I:
 x=b=0;y=r;a=1;r+=1
 for c in l:
  if'\t'==c:a,b=-b,a;x+=a+2*b;y+=b-2*a
  else:O[y][x]=c
  x+=a;y+=b;m=max(m,y)
for l in O[:m+1]:print(*l,sep='')

\tপ্রকৃত ট্যাব অক্ষর হওয়া উচিত।

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

আউটপুটটিতে (সাধারণত প্রচুর পরিমাণে) পিছনের স্থান এবং 1 টি পূর্ববর্তী নিউলাইন থাকে।


3

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

"স্পেসগুলির একটি বিশাল গ্রিড তৈরি করুন, পূরণ করুন এবং ছাঁটাই করুন" পদ্ধতির চেষ্টা করেছিলেন, যা অন্যটির চেয়ে কম 19 বাইট শেষ হয়েছিল।

a=t=>(o=`${' '.repeat(l=t.length)}
`.repeat(l).split`
`.map(q=>q.split``),d=x=y=z=0,s=c=>o[d>2?y--:d==1?y++:y][d?d==2?x--:x:x++]=c,[...t].map(c=>c=='\t'?(s` `,s` `,++d,d%=4,s` `,s` `):c==`
`?(x=d=0,y=++z):s(c)),o.map(p=>p.join``).join`
`.trim())

দ্বিতীয়-শেষ-শেষ লাইনের মতো পরিবর্তন করে আপনি প্রতিটি লাইনে প্রচুর পরিমাণে ট্রেলিং স্পেস সরিয়ে ফেলতে পারেন:

...o.map(p=>p.join``.trimRight())...

এটি এখানে চেষ্টা করুন:

ব্যাখ্যা শীঘ্রই আসছে; পরামর্শ স্বাগত!


3

জাভাস্ক্রিপ্ট (ES6), 180 183

টেমপ্লেট স্ট্রিংগুলি ব্যবহার করে কিছু নতুন লাইন রয়েছে যা তাৎপর্যপূর্ণ এবং গণনাযোগ্য।

অনুরোধ করা আউটপুট ফিরিয়ে আনার এটি একটি ফাংশন (ট্রেনিংয়ের বহু সংখ্যক স্থানের সাহায্যে প্যাড করা)

এখানে ব্যাখ্যা করার মতো খুব কম বিষয় রয়েছে: সারিগুলি নিধি হিসাবে তৈরি করা হয়। কোনও দিক পরিবর্তনশীল নেই, কেবলমাত্র এক্স এবং ওয়াইয়ের জন্য 2 অফসেট, যেমন ঘড়ির কাঁটার ঘোরান এগুলি সহজেই পরিচালিত হয়:dx <= -dy, dy <= dx

ফায়ারফক্সে নীচে স্নিপেট চলমান পরীক্ষা করুন

f=s=>[...s].map(c=>c<`
`?(x+=2*(d-e),y+=2*(e+d),[d,e]=[-e,d]):c<' '?(y=++r,e=x=0,d=1):(t=[...(o[y]||'')+' '.repeat(x)],t[x]=c,o[y]=t.join``,x+=d,y+=e),o=[r=x=y=e=0],d=1)&&o.join`
`

// TEST  

// Avoid evil tabs even in this source 
O.innerHTML = f(`Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah`
 .replace(/--->/g,'\t'))
<pre id=O></pre>


আমি আশা করি সব ভাষার [X, Y] = [expr1, expr2] ছিল ...
Sanchises

1

পাইথন 2, 370 369 368 বাইট

আমাকে প্রতিটি বাইট সংরক্ষণ করার জন্য @ সানচাইজস এবং @ এডসি 65 কে ধন্যবাদ ।

J=''.join
u=raw_input().replace('\t','  \t  ')
w=u[:]
G=range(len(u))
d,r=0,[[' 'for _ in G]for _ in G]
u=u.split('\n')
for t in G:
 x,y=0,0+t
 for c in u[t]:
  if c=='\t':d=(d+1)%4
  if c!='\t':
   if c.strip():r[y][x]=c
   if d<1:x+=1
   if d==1:y+=1
   if d==2:x-=1
   if d>2:y-=1
r=r[:max(i for i,n in enumerate(r)if J(n).strip())+1]
for i in r:print J(i).rstrip()

এটি সম্ভাব্য বৃহত্তম গ্রিড উত্পন্ন করে এবং তারপরে লুপগুলি, অক্ষর অনুসারে, প্রতিটি ট্যাবে দিক পরিবর্তন করে switch


ইঙ্গিত: if !dএবংif d>2
সানচিইস

!dবৈধ সিনট্যাক্স নয়। জন্য ধন্যবাদ @sanchises d>2ডগা, যদিও।
জাচ গেটস

দুঃখিত, আমি আসলে পাইথন জানি না :) কেবল ধরণের ধারণা করা হয়েছে যে এটি এর মতো কাজ করবে।
সানচিইস

আমি খুব পাইথন বুঝতে পারছি না, কিন্তু যদি 0 ... 3, d==0->d<1
edc65

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