कन्वर्ट ASCII बॉक्स यूनिकोड में ड्राइंग


16

मैं बेशर्मी से कुछ के लिए एक अनुरोध पोस्ट कर रहा हूं जो मुझे वास्तव में उपयोगी लगेगा। कार्य इस तरह से एक मनमाने ढंग से एएससीआई बॉक्स ड्राइंग लेना है

     |
+----+----+
| state A +---+
+---------+   |
              |
         +----v----+
         | state B |
         +---------+

... और यूनिकोड बॉक्स ड्रॉइंग कैरेक्टर्स, जैसे, का उपयोग करके इसे और अधिक सुंदर में बदल दें

     │
╭────┴────╮
│ state A ├───╮
╰─────────╯   │
              │
         ╭────v────╮
         │ state B │
         ╰─────────╯

विस्तृत रूप में:

  • केवल रूपांतरित करें + - | वर्ण - अन्य वर्ण अपरिवर्तित होने चाहिए
  • उपयोग

    • बॉक्स ड्रॉइंग लाइट वेटिकल (U + 2502) L
    • बॉक्स ड्रॉइंग लाइट हॉरिजॉन्टल (U + 2500) L
    • बॉक्स ड्रॉइंग एआरसी नीचे और राइट (यू + 256 डी) L
    • बॉक्स ड्रॉइंग ARC नीचे और बाएँ (U + 256E) L
    • बॉक्स ड्रॉइंग ARC UP और LEFT (U + 256F) L
    • बॉक्स ड्रॉइंग ARC UP और RIGHT (U + 2570) L
    • बॉक्स ड्रॉइंग लाइट वेटिकल और लेफ्ट (U + 2524) L
    • बॉक्स ड्रॉइंग लाइट वेटिकल एंड राइट (U + 251C) L
    • बॉक्स ड्रॉइंग लाइट डाउन और हॉरिज़ॉन्टल (U + 252C) L
    • बॉक्स ड्रॉइंग लाइट यूपी और हॉरिज़ॉन्टल (यू + 2534) L
    • बॉक्स ड्रॉइंग लाइट वेटिकल और हॉरिजॉन्टल (U + 253C) L

    • - हमेशा यू + 2500 के साथ प्रतिस्थापित

    • | हमेशा U + 2502 से प्रतिस्थापित किया जाता है
    • + को एक यूनिकोड वर्ण से बदल दिया गया है जो 4 वर्ण उत्तर, दक्षिण, पूर्व और पश्चिम पर निर्भर करता है (यदि वे मौजूद हैं)
    • <और> को वर्टिकल वॉल सेगमेंट के रूप में माना जाता है अगर उत्तर या दक्षिण की ओर + (ताकि आप बॉक्स की ऊर्ध्वाधर दीवारों में तीर समाप्त कर सकें)
    • v और ^ को क्षैतिज दीवार खंडों के रूप में माना जाता है यदि पूर्व और पश्चिम में + (ताकि आप एक बॉक्स की क्षैतिज दीवारों में तीर समाप्त कर सकें)
    • + को एक दीवार खंड के रूप में माना जाता है यदि उत्तर +, दक्षिण, पूर्व या पश्चिम का + (ताकि लाइनें एक बॉक्स कोने के आगे जुड़ सकें)

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

+-+     +---+   +---+   |
| +--   |ABC|  -+   |  +++
+-+     ++--+   +---+  +-+
         |
         +--->
  |           +--+
+-v+   +---+  |  |  +-----+
|Hi|  ->   |  +^-+  |world<-----+
+--+   +---+   |    +-----+     |
               |                +--
   |
---+---
   |

हो जाता है

╭─╮     ╭───╮   ╭───╮   │
│ ├──   │ABC│  ─┤   │  ╭┴╮
╰─╯     ╰┬──╯   ╰───╯  ╰─╯
         │
         ╰───>
  │           ╭──╮
╭─v╮   ╭───╮  │  │  ╭─────╮
│Hi│  ─>   │  ╰^─╯  │world<─────╮
╰──╯   ╰───╯   │    ╰─────╯     │
               │                ╰──
   │
───┼───
   │

सबसे छोटा कोड जीतता है!


1
जहां "चौराहा" है, अगर +हर जगह इसके चारों ओर रेखाएं हैं?
लीक नून

1
आप शायद
यूएनएफ

1
क्या हमारे पास कुछ परीक्षण मामले हो सकते हैं? विशेष रूप से किनारे के मामलों के लिए, जहां दो बक्से एक किनारे या कोने पर स्पर्श करते हैं (या स्पष्टीकरण कि ऐसा कभी नहीं होगा)।
ट्राइकोप्लेक्स

2
उन परीक्षण मामलों के लिए आवश्यक आउटपुट पोस्ट करना अच्छा होगा।
मैनेटवर्क

2
उघ, मैं सिर्फ एक जवाब लिख रहा था :-(
नील

जवाबों:


2

जावास्क्रिप्ट (ईएस 6), 236 बाइट्स

s=>`
${s}
`.split`
`.map((l,i,a)=>l.replace(/[+-|]/g,(c,j)=>c>`-`?`│`:c>`+`?`─`:`┼┬├╭┤╮??┴?╰?╯`[g(a[i-1][j])+g(l[j-1],1)*2+g(l[j+1],1)*4+g(a[i+1][j])*8]),g=(c,f)=>(f?`+-^v`:`+<>|`).indexOf(c)<0).slice(1,-1).join`
`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.