वह कौन सी विशेषता है जो HTML इकाई है?


11

लक्ष्य वास्तव में सरल है। इनपुट के रूप में एक स्ट्रिंग प्राप्त करना, सभी HTML संस्थाओं को पार्स करें जो निम्न वर्णों के अनुरूप हैं (उनके अपरकेस संस्करण सहित):

áàãâäéèêëíìîïóòõôöúùûüýÿ

पार्सिंग नियम:

  • प्रत्येक इकाई के साथ शुरू होता है &और समाप्त होता है;
  • &संशोधित चरित्र (अक्षर मामला महत्वपूर्ण है) के बाद पहला चरित्र होगा! "
  • शेष वर्ण का उपयोग करने के लहजे के नाम का उल्लेख ( acute, grave, circ, tildeऔर uml)। उच्चारण का नाम लोअरकेस में होना चाहिए ! *
  • किसी भी HTML इकाई है कि एक चरित्र है कि उस सूची में नहीं है पैदा करता है, या कि अमान्य है, अछूता छोड़ दिया जाना चाहिए (उदाहरण के लिए: &, &etilde;, &a;)
  • संख्यात्मक संस्थाओं को नजरअंदाज किया जाना चाहिए, क्योंकि वे ऊपर के नियमों में फिट नहीं होते हैं

यह परिवर्तन 18-02-2016 के रूप में पेश किया गया था। सभी मौजूदा उत्तर जो HTML संस्थाओं को अपरकेस उच्चारण नामों के साथ स्वीकार करते हैं, मान्य हैं। किसी भी भविष्य के उत्तर को इस नियम का पालन करना चाहिए।

उदाहरण:

á //á
Téhèh //Téhèh
an & //an &

आउटपुट:

आउटपुट ISO-8859- X (1-15), windows-1252 या UTF-8/16/32 में हो सकता है।
आप मान्य एन्कोडिंग में से किसी एक को चुन सकते हैं और इसे किसी भी आउटपुट के लिए उपयोग कर सकते हैं। आप सुरक्षित रूप से मान सकते हैं कि इनपुट ASCII में होगा।

निम्नलिखित में से कोई एक निम्न आउटपुट है á:

  • á(ISO-8859-1 / 15 या विंडोज़ -1252, समकक्ष \xE1)
  • á(UTF-8, के बराबर \xC3\xA1या \u00E1)
  • (UTF-8, के बराबर a\xCC\x81या a\u0301)
  • HTML संस्थाओं का उपयोग किए बिना, diacritics का कोई भी संयोजन।

सूची में वर्णों को प्रस्तुत / प्रदर्शित करते समय आउटपुट को समान रूप से देखना पड़ता है।


याद रखें, सभी मानक कमियां और बिल्ट-इन * अस्वीकृत हैं । चूंकि यह , सबसे छोटा उत्तर जीतता है।

* यह परिवर्तन बोनस और दंड के महान अस्वीकृति के कारण किया गया था, और छोड़ने के समय, किसी भी जवाब को अमान्य नहीं करता है


4
मैंने वोट नहीं दिया, लेकिन मुझे लगता है कि डाउनवोट हैं क्योंकि लोग वास्तव में बोनस / दंड नहीं पसंद करते हैं - वे कई मिनी-चुनौतियों में एक चुनौती बनाते हैं।
केविन डब्ल्यू।

1
@KevinW। जैसा कि मैंने सैंडबॉक्स में बताया है, मैंने केवल उन दंडों को छोड़ दिया क्योंकि मैं देखना चाहता हूं कि शांत निर्मित सामान लोगों के साथ आ सकते हैं। लेकिन जाहिर है, मैं हर किसी का मजा खराब नहीं करना चाहता। अगर मैंने तपस्या नहीं की, तो एक उदाहरण जैसे जावास्क्रिप्ट मैंने दिया, यह पर्याप्त होगा। और इसके लिए किसी काम की आवश्यकता नहीं थी।
इस्माईल मिगुएल

1
IMHO, बोनस मनमाना लगता है - या तो अनुमति दें या अनुमति न दें, बीच में मत जाओ।
एडिसन क्रम्प

1
@IsmaelMiguel मैं सुझाव देता हूं कि कोई बोनस / दंड न हो - जो भी प्रोग्रामिंग तरीके वे उपयोग करना चाहते हैं (मानक Loopholes के बाहर, निश्चित रूप से) और बोनस / दंड को हटा दें।
एडिसन क्रम्प

2
@IsmaelMiguel नाह - वह सब मेरे सेंट का था। c:
Addison Crump

जवाबों:


4

जाप, 81 75 बाइट्स

Ur`&([%vYy](ac©e|uml)|%v(g?ve|circ)|[AaOo]Èìe);`@Yg +'Ì+"?????"g"gutca"bYgJ

छः ?एस अप्रतिबंधित वर्णों का प्रतिनिधित्व करते हैं। इसे ऑनलाइन टेस्ट करें!

नोट: यह तीसरा एन्कोडिंग विकल्प आउटपुट करता है; यही है, पत्र इसी dicritical निशान के संयोजन के कच्चे UTF-8 एन्कोडिंग के बाद।

यह काम किस प्रकार करता है

Ur"&(    );"       // Replace each ampersand and semicolon that have one of these between them:
([%vYy](acute|uml) //  A vowel or Yy followed by "acute" or "uml",
|%v(grave|circ)    //  or a vowel followed by "grave" or "circ",
|[AaOo]tilde       //  or "a" or "o" followed by "tilde";
@                  // replace each match X and its middle Y with this function:
""g"gutca"bYgJ     //  Take the unprintable at index (index of the second char in Y in "gutca") in this string.
Yg +'Ì+            //  Concatenate the first char in Y and "Ì" to the beginning.
                   // Implicit output

कोड के Hexdump:

00000000: 55 72 60 26 28 5b 25 76 59 79 5d 28 61 63 a9 65  Ur`&([%vYy](ac©e
00000010: 7c 75 6d 6c 29 7c 25 76 28 67 9f 76 65 7c 63 69  |uml)|%v(g.ve|ci
00000020: 72 63 29 7c 5b 41 61 4f 6f 5d c8 ec 65 29 3b 60  rc)|[AaOo]Èìe);`
00000030: 40 59 67 20 2b 27 cc 2b 22 80 81 82 83 88 22 67  @Yg +'Ì+"....."g
00000040: 22 67 75 74 63 61 22 62 59 67 4a                 "gutca"bYgJ

यह अच्छी तरह से काम करने लगता है। क्या आप हेक्सडंप प्रदान कर सकते हैं? आपको लगता है कि कुछ "अजीब" अक्षर हैं जो हर एन्कोडिंग में काम नहीं कर सकते हैं।
इस्माइल मिगुएल

@IsmaelMiguel मैंने अभी महसूस किया है कि लहजे ISO-8859-1 एन्कोडिंग का हिस्सा नहीं हैं; इस प्रकार, मैंने स्ट्रिंग को असंपीड़ित किया है और UTF-8 बाइट्स पर स्विच कर दिया है। क्या आप अभी भी एक हेक्सडम्प पसंद करेंगे?
ETHproductions

आपके ऊपर, लेकिन आपका पिछला समाधान बिल्कुल ठीक था।
इस्माइल मिगुएल

मुझे लगता है कि आपके पास एक छोटा सा बग हो सकता है, आपका कोड Ýअकेला छोड़ देता है, लेकिन इसे Ý में बदल देना चाहिए ...
daavko

@daavko कौन है, तुम सही हो! अभी तय किया है।
ETHproductions

12

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

a=>a.replace(/&([aeiouyAEIOUY](acute|uml)|[aeiouAEIOU](grave|circ)|[aoAO]tilde);/g,b=>b[1]+{g:"̀",a:"́",c:"̂",t:"̃",u:"̈"}[b[2]])

डियाक्रिटिकल चिह्नों का उपयोग करके डेवको के उदाहरण का अनुसरण किया, और मैं इसे जल्द ही उपयोग करने के बारे में नहीं सोचने के लिए एक बेवकूफ की तरह महसूस करता हूं। वास्तव में जावास्क्रिप्ट के लिए आश्चर्यजनक रूप से छोटा है।

EDIT: नील ने अपरिभाषित के कुछ बुरे मामलों को पकड़ा, जो अब तय हो गए हैं।


देख? मैंने तुमसे कहा था कि तुम कुछ वसा काट सकते हैं! यह वास्तव में आश्चर्यजनक उत्तर है! मुझे पूरी उम्मीद है कि आपको अधिक + 1 का
Ismael Miguel

1
यह सिर्फ चालाक है। +1
यति

मुझे यह पसंद है..! String.prototype.replaceस्ट्रिंग ट्रैवर्सल के लिए बहुत हास्यास्पद गोल्फ है।
आर्कनॉथ

मुझे यकीन नहीं है कि यह सही काम करता है É(जो भी सही चीज है)।
नील

अफसोस की बात है, @ नील सही है। Uppercase HTML संस्थाओं को ब्राउज़रों द्वारा अमान्य माना जाता है। लेकिन, मैंने यह निर्दिष्ट नहीं किया कि उच्चारण नाम सभी लोअरकेस में होना चाहिए। यह पूरी तरह से मेरी गलती है। मैं इस उत्तर को मान्य मानूंगा और उन सभी को जो पहले से ही पोस्ट किए गए थे। लेकिन किसी भी नए उत्तर में लोअरकेस में उच्चारण नाम होना चाहिए।
इस्माइल मिगुएल

10

रेटिना , 115 बाइट्स

मैं कोड-गोल्फ के लिए नया हूं, लेकिन मुझे लगता है कि यह काम कर सकता है।
यह संस्करण नियम से पहले बनाया गया था, जो अपरकेस HTML संस्थाओं को बदलने की अनुमति नहीं देता (उदाहरण के लिए Á) पेश किया गया था।

i`&([aeiouy])acute;
$1́
i`&([aeiou])grave;
$1̀
i`&([ao])tilde;
$1̃
i`&([aeiou])circ;
$1̂
i`&([aeiouy])uml;
$1̈

काफी सरल खोज और प्रतिस्थापित करें। UTF-8 का उपयोग करता है।

[पत्र] \ xCC \ x [diacritical mark hex code] दृष्टिकोण का उपयोग करता है। हर प्रासंगिक पत्र के बाद विशेषांक जोड़ा जाता है।

किसी कारण के लिए, दुभाषिया में डिफ़ॉल्ट Droid Sans मोनो फ़ॉन्ट "सर्क" और "uml" अक्षरों को ठीक से प्रस्तुत नहीं कर सकता है। यदि आप इसे डेवलपर टूल के माध्यम से बदलकर कुछ DejaVu Sans की तरह करते हैं, तो यह ठीक है। मुझे लगता है कि यह फ़ॉन्ट की एक सीमा है, कार्यक्रम नहीं। लेकिन अगर यह प्रोग्राम की गलती है, तो मैं इसे ठीक करने की कोशिश करूंगा।

यहाँ एक 129 बाइट संस्करण है, जो HTML के बड़े अक्षरों को प्रतिस्थापित नहीं करता है (उदाहरण के लिए Á)

&([aeiouyAEIOUY])acute;
$1́
&([aeiouAEIOU])grave;
$1̀
&([aoAO])tilde;
$1̃
&([aeiouAEIOU])circ;
$1̂
&([aeiouyAEIOUY])uml;
$1̈

इसे ऑनलाइन आज़माएं!
इसे ऑनलाइन आज़माएं! 129-बाइट संस्करण


वहाँ के निशान का महान उपयोग। विश्वास नहीं कर सकता कि मैं पहले> _ <
Mwr247

@ Mwr247 धन्यवाद! मैं ऐसा करने के लिए एक रास्ता खोज रहा था, क्योंकि मैं इसे करने की कोशिश करना चाहता था और निशान बस कहीं दिखाई दिए ... मुझे ईमानदारी से आश्चर्य है कि यह बहुत कम है।
दावको १ko

1
अच्छा निष्पक्ष-खेल और नियमों का उपयोग! मुझे यह भाषा कभी पसंद नहीं आई, लेकिन मैं वास्तव में इस जवाब को पसंद कर रहा हूं। इंस्टेंट +1
इस्माइल मिगुएल

मैंने 115 बाइट्स (110 वर्ण + 5 अतिरिक्त बाइट्स अंक के लिए) गिना।
1924 में Mwr247

@ Mwr247 ओह, आप सही कह रहे हैं। मैंने अभी इसे एक टेक्स्ट डॉक्यूमेंट में चिपकाया और ls -l चलाया और यह ११६ दिखा ... लगता है कि संपादक ने अंत में एक अतिरिक्त नई पंक्ति जोड़ी। मैं इसे ठीक कर दूंगा।
डेवको

3

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

a=>(z=(b,c=1,d=2,e=3,f=0,g=4)=>({b:b+191,grave:c,acute:d,circ:e,tilde:f,uml:g}),y={a:z(0,1,2,3,4,5),e:z(8),i:z(12),o:z(18,1,2,3,4,5),u:z(25),y:z(28,0,2,0)},a.replace(/&\w+;/gi,b=>(x=y[b[1].toLowerCase()])&&(w=x[b.slice(2,-1)])?String.fromCharCode(x.b+w+32*(b[1]>'_')+153*/Yu/.test(b)):b))

एक चरित्र मानचित्र ऑब्जेक्ट (प्रत्येक वर्ण के लिए आधार संख्यात्मक कोड के साथ) बनाता है, और किसी इकाई को परिवर्तित किया जाना चाहिए और यह वर्ण कोड क्या है यह निर्धारित करने के लिए ऑफ़सेट (या 0 यदि गैर-मौजूद है) का उपयोग करता है। मामलों में समरूपता का मतलब है 32 को जोड़ना अगर लोअरकेस, इसके अलावा &Yuml;, जहां यह यूटीएफ 8 के लिए एक अलग ऑफसेट का उपयोग करता है।


अच्छा! मैं वास्तव में आपके aproach को पसंद करता हूं, लेकिन 286 बाइट्स थोड़ी लंबी है। शायद कुछ चीजें हैं जो काट दी जा सकती हैं? कुछ वसा को
ट्रिम

@IsmaelMiguel 288 वास्तव में; मुझे बस एहसास हुआ कि वास्तव &Yuml;में UTF8 में है: यह सिर्फ एक अजीब जगह है। सभी समान, मैंने सोचा कि मैंने संक्षेप में इसे अच्छी तरह से संघनित और अनुकूलित किया है, एक शाब्दिक प्रतिस्थापित सूची को देखते हुए दो बार लंबे समय तक खत्म हो जाएगा। क्या आप कुछ देख रहे हैं मैं नहीं हूँ?
Mwr247

वास्तव में नहीं ... उपयोग करने से कम अक्षर बनाने का एक बेहतर तरीका होना चाहिए .toLowerCase()। वह नाम बड़ा है !!! इसके अलावा, String.fromCharCodeकई मापदंडों को स्वीकार कर सकते हैं, या के रूप में कहा जा सकता हैString.fromCharCode.call([...])
Ismael मिगुएल

1
@IsmaelMiguel मुझे लगता है कि इसके बारे में सही था कि इसे फिर से लिखने की जरूरत है, लेकिन इसके बारे में गलत किसी और को होने की जरूरत है। मुझे लगता है कि यह उत्तर अधिक दिलचस्प है, लेकिन दूसरा तकनीकी रूप से अधिक संक्षिप्त है, इसलिए मैंने उन दोनों को अलग से शामिल किया है।
1824 में Mwr247

1
जीवन-परिवर्तन नहीं लेकिन आपके regexp में कोई शाब्दिक अक्षर नहीं हैं, इसलिए इसे iध्वज की आवश्यकता नहीं है ।
नील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.