रीइंडेंट जावा / सी / सी ++ / आदि। कोड


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

जावास्क्रिप्ट (ईएस 6), 376 373 378 393 बाइट्स

यह था ... काफी चुनौती ...

अगर आउटपुट में कुछ गड़बड़ है, तो मुझे बताएं, हालांकि मुझे कुछ भी नहीं मिला और कुछ भी नहीं मिल सकता है।

अनप्लग्ड संस्करण

जैसा मैंने लिखा था मैंने कोड को गोल्फ किया, तो आइए देखें कि यह कैसे होता है ...


मुझे अच्छा लग रहा है
tbodt

जैसा कि मैंने लिखा है कि मैंने कोड को गॉल्फ़ किया, इसका मतलब है कि आप एक सच्चे गोल्फ खिलाड़ी हैं ...
एरिक द आउटगॉल्फ

4

जावास्क्रिप्ट (ईएस 6), 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 → ब्लॉक टिप्पणी ध्वज
  • 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
)

परीक्षण के मामलों

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.