রিভাডেন্ট জাভা / সি / সি ++ / ইত্যাদি। কোড


10

এমন একটি প্রোগ্রাম লিখুন যা চমত্কারভাবে কোড বিন্যাসে সাদা স্থান যুক্ত করে বা সরিয়ে দেয়। কোডটি শেষ হওয়ার পরে কী হওয়া উচিত তার নিয়ম:

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

প্রথম লাইনের জন্য নেস্টিংয়ের গণনা 0 টি। অন্য যে কোনও লাইনের নেস্টিং গণনাটি পূর্ববর্তী লাইনের নেস্টিং গণনা, পূর্ববর্তী লাইনে যদি {একটি থাকে, বর্তমানের লাইনে একটি থাকে তবে বিয়োগ একটি হবে }

{এবং }ভিতরে স্ট্রিং আক্ষরিক এবং মন্তব্যগুলি উপরের নিয়মগুলিতে গণনা করে না। একটি স্ট্রিং আক্ষরিক হ'ল পাঠ্যটি একক বা দ্বৈত উদ্ধৃতিতে আবদ্ধ থাকে যেখানে একক বা ডাবল উদ্ধৃতিগুলি অবিলম্বে একটি স্ট্রোল ল্যাটারেলের শেষ হিসাবে ব্যাখ্যা না করার আগেই একটি বিজোড় সংখ্যার ব্যাকস্ল্যাশ যুক্ত থাকে। একটি মন্তব্য হ'ল পাঠ্যটি আবদ্ধ এবং /*এবং */পাঠ্যটি //লাইনটির শেষ প্রান্তে চলে যাওয়া। এক লাইনে একাধিক মন্তব্য শুরুর মার্কার, কেবল প্রথম এক গণনা। মন্তব্যগুলি স্ট্রিং লিটারেলের মধ্যে পার্স করা হয় না।

উদাহরণ

    main() {printf("Hello!"); // I don't care about the world...
        }

becomes:

main() {
    printf("Hello!"); // I don't care about the world...
}




int main(){
    puts("a");
        puts("b");
}

becomes:

int main(){
    puts("a");
    puts("b");
}


main()
{ printf("{"); /* }
} */
     printf("}//}"); ///*
    }

becomes:

main()
{
    printf("{"); /* }
} */
    printf("}//}"); ///*
}


int test[] = {1, 2, 3};

becomes:

int test[] = {
    1, 2, 3
}
;

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ডেনিস

উত্তর:


6

জাভাস্ক্রিপ্ট (ES6), 376 373 378 393 বাইট

এটি ছিল ... বেশ চ্যালেঞ্জ ...

আউটপুটটিতে কোনও সমস্যা আছে কিনা তা আমাকে জানান, যদিও আমি কিছুই খুঁজে পাইনি এবং আরও কিছু খুঁজে পাচ্ছি না।

উদার সংস্করণ

কোডটি লিখেছিলাম বলে আমি গল্ফ করেছি, সুতরাং আসুন দেখুন কীভাবে এটি ঘটে ...


আমার কাছে দুর্দান্ত দেখাচ্ছে
tbodt

কোডটি লিখেছিলাম বলে আমি গল্ফ করেছিলাম এর অর্থ আপনি সত্যিকারের গল্ফার ...
এরিক দি আউটগলফার

4

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

অক্ষর অনুসারে ইনপুট চরিত্রটিকে পার্স করে। 4-স্পেস ইন্ডেন্টেশন ব্যবহার করে।

s=>s.replace(/[^]/g,(x,n)=>(p=s[n-1],a=!l&!c&!e,l|x!='/'?a&x=='*'&p=='/'?c=x:!c&!e&x=='"'?(l^=1,x):x==`
`?(i=e=0,x):a&x=='}'?d--&&i?`
`+x:i=x:a&x=='{'?s[i=!++d,n+1]==`
`?x:x+`
`:i?x:x==' '?'':' '.repeat(!c*d*4,i=1)+x:p==x?e=x:!e&p=='*'?(c=0,x):x),d=i=l=c=e=0)

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

পার্সারের স্থিতি নিম্নলিখিত ভেরিয়েবলগুলি দ্বারা সম্পূর্ণরূপে বর্ণিত:

  • d → বর্তমান নেস্টিং গভীরতা
  • i → পতাকাটি বলছে যে আমরা কোডটির 'ভিতরে' রয়েছি (অর্থাত্ লাইনের শীর্ষস্থানগুলির পরে)
  • l → আক্ষরিক পতাকা স্ট্রিং
  • c Comment মন্তব্য পতাকা ব্লক
  • e → লাইন মন্তব্য পতাকা

বাধ্যতামূলক ইন্ডেন্টেড সংস্করণ

s => s.replace(
  /[^]/g,
  (x, n) => (
    p = s[n - 1],
    a = !l & !c & !e,
    l | x != '/' ?
      a & x == '*' & p == '/' ?
        c = x
      :
        !c & !e & x == '"' ?
          (l ^= 1, x)
        :
          x == `\n` ?
            (i = e = 0, x)
          :
            a & x == '}' ?
              d-- && i ? `\n` + x : i = x
            :
              a & x == '{' ?
                s[i = !++d, n + 1] == `\n` ? x : x + `\n`
              :
                i ?
                  x
                :
                  x == ' ' ? '' : ' '.repeat(!c * d * 4, i = 1) + x
    :
      p == x ?
        e = x
      :
        !e & p == '*' ? (c = 0, x) : x
  ),
  d = i = l = c = e = 0
)

পরীক্ষার মামলা

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