আক্ষরিকভাবে সিআর এবং এলএফ নিন


22

ভাল পুরানো নোটপ্যাডের উদযাপন হিসাবে , আমরা আজকের দিনে ব্যবহৃত (আব-) ব্যবহারের পরিবর্তে ক্যারিজের রিটার্ন এবং লাইন ফিডকে তাদের মূলত বোঝাতে চাই।

(; এলএফ; Esc ␊ মুদ্রণযোগ্য হওয়া ASCII প্লাস লাইন ফিড নিয়ে গঠিত স্ট্রিং দেওয়া \n; হেক্স 0A; ডিসেম্বর 10) এবং ঘোড়ার গাড়ি আয় (␍; সি আর; Esc \r; হেক্স 0 দিন; ডিসেম্বর 13), কারণ অনলাইনে এটিকে পরখ করে কিভাবে মুদ্রণযোগ্য অক্ষর দেখানোর জন্য কোনও মুদ্রকে মুদ্রিত হলে অবস্থান করা হবে যা এই দুটি নিয়ন্ত্রণ অক্ষরকে অক্ষরে অক্ষরে গ্রহণ করে:

  1. একটি লাইন ফিডের উপর, আরও নীচে এক লাইন মুদ্রণ চালিয়ে যান
  2. একটি গাড়ীর ফেরার উপর বাম প্রান্ত থেকে মুদ্রণ চালিয়ে যান
  3. একাধিক একটানা গাড়িবহর রিটার্ন একক গাড়ীর ফেরতের মতো আচরণ করে

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

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

উদাহরণ ( লাইন ফিড এবং ক্যারেজ রিটার্ন ব্যবহার \nএবং এর \rজন্য)

Lorem ipsum dolor sit amet,

Lorem ipsum dolor sit amet,

consectetur adipiscing\nelit, sed

consectetur adipiscing
                      elit, sed

do eiusmod\r\ntempor incididunt\n\n ut labore

do eiusmod
tempor incididunt

                  ut labore

et dolore\n\rmagna \r\r\naliqua. Ut (পিছনের স্থানগুলি লক্ষ্য করুন)

et dolore
magna          
aliqua. Ut

\nenim ad minim veniam,\n\r quis nostrud

সবচেয়ে কম ভিনিয়াম,
     কুইস নস্টরড

\rexercitation\r\n\rullamco laboris\n\r\nnisi ut aliquip ex\n\n\rea commodo consequat.\n\n

exercitation
উল্লাম্বো লেবারিস

nisi ut aliquip ex

EA কমো ফলাফল।



28
প্রস্তাবিত উত্তর: নোটপ্যাড, 179712 বাইট
NIT

3
@ নীট: | নোটপ্যাড টিসি নয়
এএসসিআইআই-

2
লজ্জাজনক যে টিআইও একটি সঠিক টার্মিনাল ব্যবহার করে না, অন্যথায় একটি দুর্দান্ত শেল বিজয়ী হবে stty -onlcr;cat
টবি স্পিড

1
টিআইওর "ইনপুট" ফিল্ডে ক্যারেজ-রিটার্ন চরিত্রগুলি প্রবেশ করতে আমার সমস্যা হচ্ছে। পেস্ট করার সময় এগুলি কেবল গিলে ফেলা হবে (বা নিউলাইনগুলিতে রূপান্তরিত হয়েছে) - এটি কি আমার ব্রাউজারটি দোষে, নাকি এটি টিআইও?
টবি স্পিড

2
@ অ্যাডাম টিআইওর চেয়ে সমস্ত আউটপুট নিষিদ্ধ করবেন না। পরিবর্তে প্রোগ্রামগুলিকে নির্দিষ্ট টার্মিনাল ধরণের ব্যবহার বা ফাইল আউটপুট সীমাবদ্ধ করে। অথবা প্রয়োজন হয় যে আউটপুটটিতে নতুন লাইনে পাঠের পূর্ববর্তী প্রয়োজনীয় ফাঁকা স্থান রয়েছে।
mbomb007

উত্তর:


6

কাঠকয়লা , 10 বাইট

UTFθ«ι≡ι⸿↑

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

UT

ডান প্যাডিং অক্ষম করুন।

Fθ«

ইনপুট উপর লুপ।

ι

বর্তমান অক্ষর মুদ্রণ করুন। এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে \n(যা কাঠকয়লা \vএই প্রসঙ্গে যেমন আচরণ করে) তবে চারকোল এর মধ্যে অনুবাদ \rকরে \r\n, তাই ...

≡ι⸿

... একটি পরীক্ষা করে দেখুন \r...

... এবং যদি তাই হয় তবে একটি লাইন পিছনে সরিয়ে নিন।


lআপনার টিআইও লিঙ্কটি থেকে পতাকাটি সরিয়ে ফেলা উচিত নয় ?
অ্যাডম

@ অ্যাডাম আমাকে আমার উত্তরের মধ্যে কোনও গীবত করে আটকানো এবং তারপরে একটি সাবঅপটিমাল প্রোগ্রামের সাথে সংযোগ স্থাপন বন্ধ করবে?
নিল

আমি দেখি. হতে পারে কাঠকয়ালের স্টাইডার (ডিবাগ) এর সাথে টিআইও লিঙ্কটি আউটপুট করা উচিত?
অ্যাডম

@ অ্যাডম আমি এটি কেবলমাত্র ASCII- এ প্রস্তাব করব।
নিল

@ নিল স্থির, আমার মনে হয়?
ASCII-

5

রুবি , 24 17 বাইট

->s{s.tr $/,"\v"}

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

এটি টিআইও-তে কাজ করে না, তবে লিনাক্স কনসোলে কাজ করে।


tr "আমার মনে হয় আপনি এই জায়গাটি ফেলে দিতে পারেন ।
কেভিন ক্রুইজসেন

উহ, আমি এই সমাধান মনে করি না, এটা হতে পারে ঠিক কোন ভাষা সব পরিবর্তন করতে জন্য কাজ \nমধ্যে গুলি \vযখন লিনাক্স কনসোলে চালানো।
Adám

@ অ্যাডম কিছু ভাষার কি কিছুই পরিবর্তন হয় না এবং ডস কনসোলে কাজ করে?
tsh

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

5
অনুমান পরিবর্তন: আমার মনে হয় না এটি ন্যায্য। তবে আমার উত্তরটি যদি মুছে ফেলা হয় তবে আমি মুছে ফেলব।
জিবি

4

জাভা 10, 211 207 206 বাইট

s->{var a=s.replace("\r\n","\n\r").split("(?<=\n)");int i=0,p=0,j;for(var x:a){for(j=x.charAt(0)<14?0:p;j-->0;x=" "+x);j=(a[i++]=x.replace("\r","")).length()-1;p=x.matches("\\s+")?p:j;}return"".join("",a);}

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

ব্যাখ্যা:

s->{                      // Method with String as both parameter and return-type
  var a=s.replace("\r\n","\n\r")
                          //  Replace all "\r\n" with "\n\r"
        .split("(?<=\n)");//  Create String-array split by "\n",
                          //  without removing the trailing "\n" delimiter
  int i=0,                //  Index integer
      p=0,                //  Previous line-length, starting at 0
      j;                  //  Temp integer
  for(var x:a){           //  Loop over the String-array
    for(j=x.charAt(0)<14?0//   If the current line starts with either '\r' or '\n':
        0                 //    Prepend no spaces
       :                  //   Else:
        p;j-->0;x=" "+x); //    Prepand `p` amount of spaces for the current item
    j=(a[i++]=x.replace("\r",""))
                          //   Remove all "\r" from the current line
       .length()-1;       //   Set `j` to the current line-length (minus the trailing '\n')
    p=x.matches("\\s+")?  //   If the current line only contains '\r', '\n' and/or spaces:
       p                  //    Leave `p` unchanged
      :                   //   Else:
       j;}                //    Change `p` to this line-length minus 1
  return"".join("",a);}   //  Return the String-array joined together

চ্যালেঞ্জের 151 148 বাইট পরিবর্তনের আগে পুরানো উত্তর :

s->{String a[]=s.replace("\r\n","\n\r").split("(?<=\n)"),r="";int p=0,i;for(var x:a){for(i=p;i-->0;r+=" ");i=x.length()-1;p=i<1?p:i;r+=x;}return r;}

ব্যাখ্যা:

s->{                            // Method with String as both parameter and return-type
  String a[]=s.replace("\r\n","\n\r") 
                                //  Replace all "\r\n" with "\n\r"
              .split("(?<=\n)"),//  Create String-array split by "\n",
                                //  without removing the trailing "\n" delimiter
         r="";                  //  Result-String, starting empty
  int p=0,                      //  Previous line-length, starting at 0
      i;                        //  Index (and temp) integer
  for(var x:a){                 //  Loop over the String-array
    for(i=p;i-->0;r+=" ");      //   Append `p` amount of spaces to the result
    i=x.length()-1;p=i<1?p:j;   //   If the current line is not empty:
                                //    Replace `p` with the length of this current line
    r+=x;}                      //   Append the current item
  return r;}                    //  Return the result-String

টিআইও-তে কাজ করে না, উইন্ডোজ কমান্ড প্রম্পটে কাজ করে:

এখানে চিত্র বর্ণনা লিখুন




3

সি (জিসিসি) , 100 94 বাইট

b,c,d;f(char*s){for(b=13;b;b=*s++)b==13?c=d=0:b-10?d=!printf("%*c",++d,b),++c:putchar(b,d=c);}

ধরে নিয়েছে ASCII কোডিং ( '\r'==13, '\n'==10); অন্যান্য সিস্টেমে অনুসারে সামঞ্জস্য করুন।

এটি অনলাইন চেষ্টা করুন! (জাভাস্ক্রিপ্ট প্রয়োজন)

পাঠযোগ্য সংস্করণ

int c = 0;
int d = 0;

f(char*s)
{
    for (;*s;++s) {
        switch (*s) {
        case'\r':
            c = d = 0;
            break;
        case'\n':
            d = c;
            putchar(*s);
            break;
        default:
            printf("%*s%c", d, "", *s);
            d = 0;
            ++c;
        }
    }
}

cবর্তমান কলাম অবস্থান; dমুদ্রণযোগ্য অক্ষরের পূর্বে অবশ্যই শূন্যস্থানের সংখ্যা। ফাংশনে প্রবেশের জন্য উভয়ই শূন্য বলে ধরে নেওয়া হয়।

পরীক্ষা প্রোগ্রাম

int main(int argc, char **argv)
{
    char s[1024];
    if (argc <= 1)
        while (fgets(s, sizeof s, stdin))
               f(s);
    else
        for (int i = 1;  i < argc;  ++i)
            f(argv[i]);
}

chars কেবলমাত্র ছোট ints, সেগুলি বিনিময়যোগ্য (তত্ত্ব অনুসারে) হওয়া উচিত। সম্ভবত gccএকটি অন্তর্নিহিত কাস্ট করবে
স্ট্যান স্ট্রাম


যাইহোক, আমি মনে করি না যে আমাদের sensকমত্যের ভিত্তিতে আপনাকে আপনার বিশ্বব্যাপী পরিবর্তনগুলি পুনরায় সেট করার অনুমতি দেওয়া হবে c,d। আপনার ফাংশনটি - অন্যান্য ক্লিনআপ কোড ছাড়াই - একাধিকবার চালাতে সক্ষম হওয়া উচিত। সুতরাং আপনি সম্ভবত একটি যুক্ত করা প্রয়োজন c=d=0
জোনাথন ফ্রেচ


এটি এখন পুনরায় ব্যবহারযোগ্য ফাংশন।
টবি স্পিড

2

পাইথন 3 , 101 94 বাইট

টিফেল্ডের উত্তরের ভিত্তিতে ।

def f(s):
 i=n=0
 for c in s:k='\r\n'.find(c);a=k&1;print(end=-k*' '*i*n+c*a);n=k>0;i=i*a-k//2

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


Ungolfed

def f(s):
  i=0  # position of the cursor
  n=0  # was the last character LF?
  for c in s:        # iterate over the input
    k='\r\n'.find(c) # k := 0 for CR, 1 for LF and -1 for every other character
    a=k&1            # as (-1)&1 == (1)&1 == 1, this is a := abs(k)
    print(end=-k*' '*i*n+c*a) # If c is a normal character (k == -1) and the last character was LF, 
                              # print leading spaces. If c is not CR, print it
    n=k>0            # n := True if c is LF, False otherwise
    i=i*a-k//2       # If c is either a newline or a printable character (a == 1),
                     # keep the cursor's position and increment it for a printable character ((-1)//2 == -1)

2

পরিষ্কার , 92 91 বাইট

-১ লাইকনিকে ধন্যবাদ!

নোট: \ মধ্যে \rbytecount থেকে বাদ দেওয়া হয় লিনাক্স সি জি আক্ষরিক পরিচালনা যেমন \rএবং \ns।
দ্রষ্টব্য: উইন্ডোজ সিজি প্রয়োজন \nএবং \rপালাতে পারে, তাই যদি উইন্ডোতে চালাতে হয় তবে +3 করুন।

import StdEnv
?n['\r':t]= ?0t
?n['
':t]=['
':spaces n]++ ?n t
?n[h:t]=[h: ?(n+1)t]
?_ e=e

?0

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

? :: Int [Char] -> [Char]প্রাথমিক আর্গুমেন্ট হিসাবে 0 দিয়ে আংশিক প্রয়োগ এটি প্রতিটি চরিত্রের মধ্য দিয়ে নেমে আসে যে কতটি ট্র্যাভারড হয়েছে, গণনাটি পুনরায় সেট করে যখন এটি কোনও ক্যারেজ ফেরার মুখোমুখি হয় এবং যখন এটি একটি নতুন লাইনের মুখোমুখি হয় তখন এটি সেই বিন্দুতে অক্ষরগুলির সংখ্যার সমান স্পেস যোগ করে।


1
আমার মনে হয় ?_[]=[]হতে পারে ?_ e=e
লাইকনি

@ লাইকনি আপনি ঠিক বলেছেন আমি কসম খেয়েছি আমি ঠিক এখন একই জিনিসটি কয়েক ডজন বার মিস করেছি।
ousurous

1

হাস্কেল , 93 87 বাইট

l=0#0
(n#x)(t:r)|t=='\n'=t:(n#1)r|t=='\r'=l$r|m<-n+1=(' '<$[1..n*x])++t:(m#0)r
(_#_)e=e

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


খুব সোজা সমাধান। # হ'ল একটি ইনফিক্স ফাংশন যা পুনরাবৃত্তভাবে একটি অক্ষর অবস্থানের কাউন্টার (এন) রাখার সময় একবারে আউটপুটকে একটি অক্ষর তৈরি করে এবং কখন একটি নিউলাইন (এক্স) এর পরে স্পেস যুক্ত করতে হয় তার জন্য পতাকাটি তৈরি করে।


1
পরিবর্তে আপনি একজন পোতা ফাংশন নির্ধারণ করতে পারবেন c, ব্যবহার l$rপরিবর্তে c 0 0rএবং c _ _ e=e(অথবা বরং (_#_)e=e)।
লাইকনি


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