মঙ্গল, এটি ট্যাবগুলিতে আবৃত!


26

স্পেস ইনডেন্টেশন ব্যবহারকারীরা, iteক্যবদ্ধ ! আমাদের অবশ্যই নীচু ট্যাব ব্যবহারকারীর বিরুদ্ধে লড়াই করতে হবে !

আপনার মিশনটি (যদি আপনি এটি গ্রহণ করার পছন্দ করেন) তবে এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হয় যা দুটি যুক্তি দেখায়:

  • একটি স্ট্রিং: এটি ইনপুট।
  • একটি ধনাত্মক পূর্ণসংখ্যা: এটি প্রতি ট্যাবে ফাঁকের সংখ্যা।

আপনাকে অবশ্যই স্ট্রিংয়ের প্রতিটি লাইনের মধ্য দিয়ে যেতে হবে এবং প্রদত্ত সংখ্যক স্পেসের সাহায্যে ইন্ডেন্টেশনের জন্য ব্যবহৃত প্রতিটি ট্যাবকে প্রতিস্থাপন করতে হবে না এবং প্রতিটি ট্যাব একটি স্থানের সাথে ইনডেন্টেশনের জন্য ব্যবহৃত হবে না (যেমন একটি লাইনের মাঝখানে)।

নোট করুন যেমন লাইনগুলি \t \tabcঅপরিজ্ঞাত আচরণ; আপনার প্রোগ্রামগুলিকে জটিল করার জন্য এগুলি দুষ্ট ট্যাব ব্যবহারকারীরা .োকানো হয়েছিল।

ট্যাব মাস্ট ডাই সোসাইটি অনুসারে, দুষ্ট ট্যাব ব্যবহারকারীদের দ্বারা সনাক্তকরণ এড়াতে আপনার প্রোগ্রামটি যথাসম্ভব সংক্ষিপ্ত হতে হবে।

উদাহরণ

\t এখানে ট্যাব উপস্থাপন করতে ব্যবহৃত হয়।

ইনপুট স্ট্রিং:

a
\t\tb\tc
d

ইনপুট নম্বর:

4

আউটপুট:

a
        b c
d

মাঝের লাইনটি 8 টি স্পেস দ্বারা ইন্ডেন্ট করা হয়েছিল, প্রতি ট্যাব 4 (যেহেতু প্রদত্ত সংখ্যাটি ছিল 4)।

ইনপুট স্ট্রিং:

\ta\t\tb

ইনপুট নম্বর:

4

আউটপুট:

    a  b

দ্রষ্টব্য: এটি ট্যাব সম্প্রসারণ চ্যালেঞ্জের সদৃশ নয় ; এটির জন্য একটি খুব আলাদা ইনপুট ফর্ম্যাট এবং কিছুটা পৃথক প্রয়োজন।


1
হ্যাঁ , যতক্ষণ না প্রশ্ন স্পষ্টভাবে দশমিক সংখ্যার জন্য জিজ্ঞাসা করে না (যা এটি না)।
মার্টিন ইন্ডার


1
আমরা কি ধরে নিতে পারি যে ইনপুটটিতে কেবল প্রিন্টযোগ্য এএসসিআইআই, ট্যাব এবং নিউলাইন রয়েছে?
ডেনিস

2
প্রস্তাবিত পরীক্ষা মামলা: \ta\t\tb, 4(আমার পূর্ববর্তী সংস্করণে ব্যর্থ হয়েছিল যে এক)
ডেনিস

2
আমাদের হোয়াইটস্পেসে একটি উত্তর দরকার।
কাজ ওল্ফ

উত্তর:


7

সিজেএম, 30 24 23 বাইট

q{_9=NA=Seasi*' ?@?:N}/

আমি সাধারণত ইন্টারনেটে দূষিত কোড পোস্ট করতে অস্বীকার করি ...

এটি একটি সম্পূর্ণ প্রোগ্রাম যা এসটিডিআইএন থেকে স্ট্রিং এবং কমান্ড-লাইন আর্গুমেন্ট হিসাবে সংখ্যাটি পড়ে।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

q                        Read all input from STDIN.
 {                   }/  For each character C in the input:
  _9=                      Push 1 if C is a tab and 0 otherwise.
     NA=                   See below.
        Seasi*             Push a string of W spaces, where W is the integer from
                           the command-line arguments.
              '            Push a spaces character.
                ?          Select the string if NA= pushed a truthy value, the
                           single space otherwise.
                 @         Rotate C on top of the stack.
                  ?        Select the string of spaces or the single space if _9=
                           pushed 1, the character C otherwise.
                   :N      Save the result in N.

কি NA=করে:

  • প্রথম অক্ষরের জন্য Nএটির ডিফল্ট মান, অর্থাৎ স্ট্রিং থাকবে "\n"

    পরবর্তী সমস্ত অক্ষরের Nজন্য, সর্বশেষ পুনরাবৃত্তির ফলাফল, অর্থাৎ ইনপুট থেকে শেষ অক্ষর, একটি স্পেস অক্ষর বা এক বা একাধিক স্পেসের একটি স্ট্রিং থাকবে।

  • যদি Nস্ট্রিং হয় NA=তবে এন এর 10 টি সূচক (চারপাশে মোড়ানো) নির্বাচন করে। ফলাফলটি একটি স্থান বা একটি লাইনফিড অক্ষর হবে। উভয় সত্যবাদী।

    যদি এন একটি অক্ষর হয় তবে NA=লাইনফিডের জন্য 1 এবং অন্যথায় 0 চাপায়।

  • উপরের কারণে, NA=প্রথম চরিত্রের জন্য সত্যবাদী মানটি চাপবে , একটি লাইনফিডের পূর্বে একটি অক্ষর বা স্পেসের একটি স্ট্রিংয়ের পূর্বে একটি অক্ষর (ইতিমধ্যে প্রতিস্থাপন করা হয়েছে এমন ইনডেন্টেশন)।

    অন্যান্য সমস্ত ক্ষেত্রে (কোনও স্থানের অক্ষর দ্বারা প্রতিস্থাপন করা একটি ট্যাবুলেটর সহ ), NA=একটি মিথ্যা মানকে চাপ দেবে।


6
ভাল জিনিস আপনি দূষিত ট্যাবগুলি সরিয়ে ইন্টারনেটকে একটি পরিষেবা করছেন। ;)
অ্যালেক্স এ।

19

কে 5, 53 45 বাইট

{{,/(b+a&~b:x*&\a:9=y){$[x;x#" ";y]}'y}[x]'y}

কর্মে:

  {{,/(b+a&~b:x*&\a:9=y){$[x;x#" ";y]}'y}[x]'y}[4;(,"a";"\t\tb\tc";,"d")]
(,"a"
 "        b c"
 ,"d")

আমি কেবল রেকর্ডটি দেখাতে চাই যে এই প্রশ্নটি নৈতিকভাবে নিন্দনীয়।


11
-21346106841 এর জন্য... this question is morally reprehensible.
TheNumberOne

3
এটিকে শীর্ষে ভোট দেওয়া উত্তর শেষ করা দরকার, কেবলমাত্র লোকেরা পাদটীকা দেখতে পাবে।
Geobits

ফলটি 3 টি বাইটে ছাপানোর পরিবর্তে আপনি ফিরে আসতে পারেন।
kirbyfan64sos

1
@ কিরবিফ্যান64সস: লাইনে যোগদানের প্রয়োজন এড়াতে আমি ফলাফলটি মুদ্রণ করছি। আমি যদি প্রতিটি লাইনের জন্য একটি করে স্ট্রিংয়ের তালিকা হিসাবে ফলাফলটি গ্রহণ করতে এবং তা ফিরিয়ে দিতে পারি, তবে আমি সংরক্ষণ করতে পারি `0:এবং `" \ n "\`।
জন

@ জন আমি আপনার পক্ষে পারছেন না বলে একটি বিধি প্রয়োগ করি নি, তাই আমি অনুমান করছি যে আপনি পারবেন। :)
kirbyfan64sos

8

পার্ল, 23 বাইট

22 বাইট কোড + 1 বাইট কমান্ড লাইন

আশা করা যায় যে সংখ্যাটি ইনপুট -i প্যারামিটারের মাধ্যমে দেওয়া যেতে পারে অনুমান করার জন্য খুব চটকদার নয়! প্রকৃত ট্যাব অক্ষরের সাথে নীচের কোডে \ t প্রতিস্থাপনের বিষয়টি নিশ্চিত করুন।

s/\G\t/$"x$^I/ge;y/\t/ /

ব্যবহারের উদাহরণ:

printf "a\n\t\tb\tc\nd" | perl -p entry.pl -i4

বা সুবিধার জন্য:

printf "a\n\t\tb\tc\nd" | perl -pe 's/\G\t/$"x$^I/ge;y/\t/ /' -i4

ব্যাখ্যা:

-pযুক্তি ব্যবহার করে ইনপুটটির প্রতিটি লাইনের জন্য প্রোগ্রামটি কার্যকর করা হবে, তারপরে ফলাফলটি শেষে মুদ্রণ করা হবে।

উপরের উদাহরণে, রেজেক্সের বিকল্পটি প্রতিস্থাপন \G\tকরে " "x4(একটি স্থান চারবার পুনরাবৃত্তি হয়েছিল)। \Gএকটি স্বল্প-পরিচিত রেজেক্স কনস্ট্রাক্ট যা প্রথম পুনরাবৃত্তির ক্ষেত্রে প্রথম ম্যাচের অবস্থানের সাথে মেলে বা পূর্ববর্তী ম্যাচের অবস্থান থেকে যদি প্রথম পুনরাবৃত্তি না হয় তবে এটি স্ট্রিংয়ের শুরুতে কেবল সমস্ত ট্যাব প্রতিস্থাপন করবে এবং হবে এক এক করে করতে। y/\t/ /কেবল স্পেস দিয়ে সমস্ত অবশিষ্ট ট্যাব প্রতিস্থাপন করে।


2

জুলিয়া, 69 59 বাইট

f(s,n)=(r=replace)(r(s,r"^\t*"m,i->" "^endof(i)n),"\t"," ")

Ungolfed:

function f(s::String, n::Int)
    # Replace the leading indentation tabs
    r1 = replace(s, r"^\t*"m, i -> " "^endof(i)n)

    # Replace any remaining tabs between words
    r2 = replace(r1, r"\t", " ")

    # Return
    r2
end

10 বাইট সংরক্ষণ করা এবং গ্লেন ওকে ধন্যবাদ একটি সমস্যা স্থির করে!


শীর্ষস্থানীয় ইনডেন্টেশন ট্যাবগুলি আলাদাভাবে প্রতিস্থাপনের কোনও সুবিধা আছে কি? আমার কাছে মনে হয় এটি সরাসরি "বাকী ট্যাবগুলি" অংশ দ্বারা পরিচালনা করা উচিত। এছাড়াও, আপনার "পাঠ্যের মধ্যে ট্যাবগুলি প্রতিস্থাপন করুন" অংশটি কেবল একটি একক ট্যাবের সাথে মিলবে, যদি আপনার কী থাকে "hello\t\t1"?
গ্লেন ও

যদি আমরা ধরে নিই যে সমস্ত ইনডেন্টেশন ট্যাবগুলির সাথে সম্পন্ন হয়েছে (কোনও "\t \t"পরিস্থিতি নেই), আপনি এটি করতে পারেন: এটি f(s,n)=(r=replace)(r(s,r"^\t*"m,i->" "^endof(i)n),"\t"," ")একটি প্রতিস্থাপন ফাংশন ব্যবহার করে এবং সমস্ত হরফের ইনডেন্টেশন ট্যাবকে ধরে ফেলবে।
গ্লেন ও

@ গ্লেনো বাহ, আসলেই বুদ্ধিমান। অনেক ধন্যবাদ!
অ্যালেক্স এ।

আমি লক্ষ্য করেছি আমার উত্তরটি নিম্নমানের হয়ে গেছে। আমি কি কিছু ভুল করেছি? আমি যে কোনও সমস্যা সম্বোধন করতে পেরে খুশি হব।
অ্যালেক্স এ।

আমি কোন সমস্যা দেখতে পাচ্ছি না। হতে পারে এটি কেবল সেইসব অপ্রচলিত ধরণেরগুলির মধ্যে একটি যা তাদের একটি ভাষা পছন্দ করে না বলে বা তাদের মতো জিনিসগুলিকে পছন্দ করে না? আমি কোন ত্রুটি দেখতে পাচ্ছি না।
গ্লেন ও


2

গণিত, 42 37 বাইট

একাধিক কোড-সংরক্ষণের পরামর্শের জন্য @ LegionMammal978 কে ধন্যবাদ। প্রথম প্যারামিটারটি #ইনপুট পাঠ্যের জন্য, দ্বিতীয় প্যারামিটারের #2জন্য প্রতি ট্যাবে স্পেসের সংখ্যার জন্য।

StringReplace[#,"\t"->" "~Table~{#2}]&

এছাড়াও, আপনি পরিবর্তন করতে পারেন Table[" ",{#2}]থেকে " "~Table~{#2}একটি বাইট সংরক্ষণ করুন। আপনি কেন StringJoinএটি খালি স্ট্রিং ইঙ্গিত করছেন?
LegionMammal978

1

রুবি 49 বাইট

def r s,t;s.gsub! /^\t/,' '*t;s.gsub!"\t",' ';end

2
কোনও লাইনের শুরুতে দুটি ট্যাব থাকলে এটি কাজ করে না।
চার্লস

1

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

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

(s,n,r=n)=>[...s].map(c=>c<`
`?` `.repeat(r):(r=c<` `?n:1,c)).join``

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

F=(s,n,r=n)=>[...s].map(c=>c<`
`?` `.repeat(r):(r=c<` `?n:1,c)).join``

// TEST
out=x=>O.innerHTML+=x+'\n\n'

out('Input: "A\\n\\t\\tB\\tC\\nD" 4\nOutput:\n'+F('A\n\t\tB\tC\nD',4))

out('Input: "\\tA\\t\\tB" 4\nOutput:\n'+F('\tA\t\tB', 4))
<pre id=O></pre>


1
বাহ এক ডাউনভোট! 'ফায়ারফক্সে পরীক্ষা' পড়তে বা বুঝতে না পারে এমন কেউ হতে পারেন?
edc65

আমি ভাষা পক্ষপাতিত্ব সন্দেহ। জুলিয়া এবং সিজেম পাশাপাশি ডাউনওয়েটস পেয়েছে।
ডেনিস

1

কফিস্ক্রিপ্ট, 72 বাইট

(s,n)->s.replace(/^\t+/mg,(m)->" ".repeat(m.length*n)).replace /\t/g," "

(এটি কমপক্ষে আরও 2 টি কামড় গল্ফ করার চেষ্টা করছে, তাই এটি ES6 সমাধানটি পরাজিত করবে ... প্রশংসা করতে সহায়তা করুন: ডি)

ব্যবহার:

f=(s,n)->s.replace(/^\t+/mg,(m)->" ".repeat(m.length*n)).replace /\t/g," "
str="""
My nice\tString
\tIndent <--
\t\tDouble
""" #\t is recognized as tab by CS
alert(f(str,4))

1

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

সমস্ত উপস্থিতি হ'ল .শূন্যস্থান, সমস্ত \tআক্ষরিক ট্যাব (1 বাইট) এবং <empty>একটি ফাঁকা ফাইল উপস্থাপন করে। এটি কেবল পাঠযোগ্যতার জন্য। আমি পুরোপুরি নিশ্চিত নই যে আমি লুপটি সঠিকভাবে করছি, তবে আমারও তাই মনে হয়। প্রতিটি লাইন তার নিজস্ব ফাইলে স্থাপন করা উচিত। আমি প্রতিটি অতিরিক্ত ফাইলের জন্য 1 বাইট যুক্ত করেছি।

ইনপুটটি ইনপুট শেষে নিজের লাইনে ইউনারিতে রয়েছে বলে মনে করা হয়।

(1*)$
_$1
m+`(?<!^|\t)\t
.
(`1$
<empty>
)`\t
\t.
\t|_
<empty>

ব্যাখ্যা

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


1

পাইথন, 72 68 বাইট

ট্যাবগুলি আক্ষরিক ট্যাব (1 বাইট), তাই r'...'প্রয়োজন হয় না। দুর্ভাগ্যক্রমে, পাইথনের "ফিক্সড-প্রস্থ" লুক-ব্যাকস / লুক-ফরোয়ার্ড প্রয়োজন, তাই আমি ব্যবহার করতে পারি না (?<!^|\t)। আমার রেটিনা সমাধানের মতো একই পদ্ধতি ব্যবহার করে।

import re
lambda s,n:re.sub('\t',' '*n,re.sub('(?<!^)(?<!\t)\t',' ',s))




0

হাস্কেল , 75 বাইট

s#m|let('\t':r)#n=(' '<$[1..n])++r#n;(x:r)#n=x:r#(m^sum[1|x<' ']);e#_=e=s#m

এটি অনলাইন চেষ্টা করুন! মন্তব্যগুলিতে ওপি কর্তৃক অনুমোদিত ইনপুটটিতে কেবল প্রিন্টযোগ্য অক্ষর পাশাপাশি ট্যাব এবং নতুনলাইন রয়েছে।

ব্যাখ্যা:

বাহ্যিক #ফাংশনটি একটি স্ট্রিং sএবং একটি সংখ্যা নেয় mএবং #একই আর্গুমেন্টের সাথে অভ্যন্তরীণ স্থানীয়ভাবে সংজ্ঞায়িত ফাংশনটি কল করে । mঅভ্যন্তরীণ #ফাংশনটি সংখ্যা পরিবর্তন করার সাথে সাথে এটি মূল মানের উপর নজর রাখার জন্য করা হয় :

  • ('\t':r)#n=(' '<$[1..n])++r#nযদি আপনি কোনও ট্যাবের মুখোমুখি হন তবে এটিকে nস্পেস দ্বারা প্রতিস্থাপন করুন এবং nঅপরিবর্তিত রেখে দিন ।
  • (x:r)#n=x:r#(m^sum[1|x<' '])যদি কিছু xহয় একটি ট্যাব সম্মুখীন নয়, রাখা এটি হিসাবে কিন্তু সেট nমূল নম্বরে mযদি xএকটি newline এবং হয় 1অন্যথায়। এটি এর দ্বারা সম্পন্ন হয় m^sum[1|x<' ']: mএমন একটি শক্তিতে নিয়ে যাওয়া হয় sum[1|x<' ']যা কোন স্থানের চেয়ে ছোট 1যখন x(যেমন একটি নিউলাইন) মূল্যায়ন করে , তাই আমরা পেতাম m^1 = m। অন্যথায় এটি 0এবং আমাদের আছে m^0 = 1

0

জাভা 11, 134 বাইট

n->s->{var r="";for(var p:s.split("\n")){for(;p.charAt(0)==9;p=p.substring(1))r+=" ".repeat(n);r+=p+"\n";}return r.replace('\t',' ');}

এটি অনলাইনে চেষ্টা করুন।
দ্রষ্টব্য: জাভা ১১ টি এখনও টিআইও-তে নেই, তাই পরিবর্তে একই " ".repeat(n)অনুকরণ করা হয়েছে repeat(" ",n)(একই বাইট-গণনা সহ)।

ব্যাখ্যা:

n->s->{                 // Method with integer & String parameters and String return-type
  var r="";             //  Result-String, starting empty
  for(var p:s.split("\n")){
                        //  Loop over the rows (split by new-lines)
    for(;p.charAt(0)==9;//   Inner loop as long as the current row starts with a tab
       p=p.substring(1))//     After every iteration: remove the first character (tab)
      r+=" ".repeat(n); //    Append `n` amount of spaces to the result-String
    r+=p+"\n";}         //   Append the rest of the row with a newline to the result
  return r.replace('\t',' ');} 
                        //   Replace any remaining tabs with a space, and return the result
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.