𝗔𝗹𝘁𝗲𝗿𝗻𝗮𝘁𝗼𝗿 𝗔𝗹𝘁𝗲𝗿𝗻𝗮𝘁𝗼𝗿 𝗔𝗹𝘁𝗲𝗿𝗻𝗮𝘁𝗼𝗿


28

परिचय

शब्दों को दो अलग-अलग यूनिकोड फोंट में बदलने का प्रयास करें।

चुनौती

आपका कार्य अपने इनपुट स्ट्रिंग को is 𝗠𝗮𝘁𝗵 और 𝗦𝗮𝗻𝘀 𝗕𝗼𝗹𝗱 to यूनिकोड वर्णों में बदलना है।

सभी अपरकेस शब्द लोअरकेस pp 𝗕𝗼𝗹𝗱 words शब्द बनने चाहिए।

  • उदाहरण के लिए: WORD->𝘄𝗼𝗿𝗱

सभी लोअरकेस शब्द become become शब्द बनने चाहिए

  • उदाहरण के लिए: other words->𝗈𝗍𝗁𝖾𝗋 𝗐𝗈𝗋𝖽𝗌

सभी मिश्रित मामले शब्द अपरिवर्तित रहना चाहिए

  • उदाहरण के लिए: Mixed Case Words->Mixed Case Words

अवधि और रिक्त स्थान अपरिवर्तित रहना चाहिए।

शब्दों को रिक्त स्थान या अवधियों द्वारा अलग किया जाता है

  • उदाहरण के लिए (हाइलाइट की गई बातें शब्द हैं):

HelloThis is a wordSOare these

  • इनपुट्स: एक स्ट्रिंग जिसमें अक्षर, रिक्त स्थान, और अवधि ( [A-Za-z .]+)
  • आउटपुट: स्वरूपित स्ट्रिंग

जैसा कि यह एक गोल्फ चुनौती है, बाइट्स की सबसे कम संख्या जीतती है

उदाहरण इनपुट और आउटपुट

इनपुट:

यह एक उदाहरण है STRING जो कि सम्मिलित किया जाना चाहिए। यह कई वाक्यों को शामिल कर सकता है।

आउटपुट:

यह 𝖺𝗇 𝖼 𝖺𝗇 𝖺𝗇 𝖺𝗇 𝖺𝗇.𝘂.𝗹.𝖽.𝖺𝗇। 𝖻𝖾 𝖻𝖾। यह 𝗰𝗼𝗻𝘁𝗮𝗶𝗻 𝖼𝖺𝗇 𝗰𝗼𝗻𝘁𝗮𝗶𝗻 𝗰𝗼𝗻𝘁𝗮𝗶𝗻।

संदर्भ

गणित सेंस बोल्ड: 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇 (120327 के माध्यम से 120302 वर्ण)

गणित संस: 𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓 (120275 के माध्यम से वर्ण 120250)


3
PPCG में आपका स्वागत है!
लाकोनी

6
♫ दर्शनशास्त्र का सिर्फ 𝗌𝖺𝗇𝗌 sense कठोरता, समझदारी और व्यावहारिकता ...
Es

13
वाह! आपको साइडबार में बोल्ड में एक शीर्षक मिला? क्या? मैं ... समझ नहीं रहा .... क्या इंटरनेट टूट रहा है? क्या आपने इंटरनेट तोड़ दिया है?
ज़िज़ोज़ २२२

26
i.stack.imgur.com/R4V3C.png मैं यह सोचकर आया था कि यह चुनौती बक्से, बार चार्ट या कुछ और करने के बारे में है ...
मटेओ इटालिया

8
यह करीब से अंकित नहीं होना चाहिए था। यह समस्या एक साधारण चरित्र लिप्यंतरण की तुलना में काफी कठिन है। प्रमुख जवाब में उद्धृत चुनौती में आसानी से और न ही प्रतिस्पर्धात्मक रूप से है कि एक ही विधि का उपयोग कर स्थानांतरित नहीं किया जा सकता है (AFAICT, मेरे रेटिना नहीं महान है)
कोनोर ओ ब्रायन

जवाबों:


10

QuadR , 45 43 बाइट्स

-2 ngn के लिए धन्यवाद।

\w+
UCS a+(2>≢b120153+84×⊃b←∪96>a←⎕UCSM

चूंकि TIO QuadR से यूनिकोड आउटपुट को स्क्रैम्बल करता है, यहाँ एक इंटरैक्टिव इंटरेक्शन में APL लाइब्रेरी के रूप में QuadR का उपयोग करने का एक स्क्रीनशॉट है: इंटरैक्टिव सत्र प्रतिलेख


\w+ निम्नलिखित कोड को लागू करने के परिणाम के साथ शब्दों को बदलें:

⍵M उस शब्द
⎕UCS का यू शब्द विविध सी हैचर एस एट कोड उस
a← स्टोर का संकेत है, जिसमें a
96> 0 या 1 के लिए 96 क्या उन में से प्रत्येक से अधिक
 अद्वितीय है; [0]या [1]या [0,1]या [1,0]
b← दुकान में b
 से पहले लेने
84× के साथ गुणा 84
120153+ ऐड 120,153 कि करने के लिए
(...  गुणा उस के साथ निम्नलिखित:
≢b के मिलान (लम्बाई) b( 1यदि एकल मामला है, 2अगर मिश्रित-केस)
2> 0 या दो के लिए 1 है इससे अधिक ( 1यदि एकल-मामला, 0यदि मिश्रित-मामला है)
a+ तो मूल कोड बिंदु उसमें जोड़े गए हैं
⎕UCS परिणामी कोड बिंदुओं को वापस वर्णों में बदलें


9

एपीएल (डायलॉग यूनिकोड) , 63 57 53 बाइट्स

-6 धन्यवाद एरिक आउटग्लोफर के लिए। -4 ngn के लिए धन्यवाद।

बेनामी tacit उपसर्ग समारोह।

'\w+'R{⎕UCS a+(2>≢b120153+84×⊃b←∪96>a←⎕UCS⍵.Match}

चूंकि TIO ने Dyalog APL से यूनिकोड आउटपुट को स्क्रैम्बल किया है, इसलिए यह एक्शन में कोड का स्क्रीनशॉट है:

कार्रवाई में कोड


'\w+'⎕Rनिम्नलिखित को लागू करने के परिणाम के साथ  PCRE R eplace शब्द ...

{... } अनाम लंबोदर:

⍵.Match पाया गया शब्द

⎕UCS उस के यू niversal सी हैचर एस एट कोड अंक

a← इसमें स्टोर करें a

96> 0 या 1 के लिए कि क्या उनमें से प्रत्येक से 96 अधिक है

 सिर्फ अद्वितीय ले लो; [0]या [1]या [0,1]या[1,0]

b← इसमें स्टोर करें b

 उसमें से पहला चुनें

84× उस के साथ 84 को गुणा करें

120153+ उसमें 120153 जोड़ें

( उस के साथ निम्नलिखित गुणा करें:

  ≢b की टैली (लंबाई) b( 1यदि एकल-मामला, 2यदि मिश्रित-मामला)

  2> 0 या 1 के लिए कि क्या दो से अधिक है ( 1यदि एकल-मामला, 0यदि मिश्रित मामला है)

a+ मूल कोड बिंदु उसमें जोड़े गए

⎕UCS परिणामी कोड बिंदुओं को वापस वर्णों में बदलें


'\b([A-Z]+|[a-z]+)\b'⎕R{⎕UCS(⎕UCS+120153+84×∊∘⎕A)⍵.Match}
५rik

@EriktheOutgolfer धन्यवाद मैंने टैटिटो के बारे में क्यों नहीं सोचा
Adám

मुझे नहीं पता, लेकिन जब मैं थक जाता हूं तो मेरे साथ ऐसा होता है। :)
आउटगोल्फ़र एरिक

@EriktheOutgolfer वास्तव में, मुझे लगता है कि मैं एपीएल कीबोर्ड लेआउट के बिना मेरी पत्नी के कंप्यूटर का उपयोग ... घर से इस एक ने लिखा है
एडम

@ पता है कि रेगेक्स बहुत लंबा है; \w+dfn में कोडपॉइंट्स में जोड़ने के लिए राशि का उपयोग करना और उसकी गणना करना बेहतर है :'\w+'⎕R{⎕UCS a+(2>≢b)×120153+84×⊃b←∪96>a←⎕UCS⍵.Match}
ngn

8

क्लीन , 268 265 232 224 बाइट्स

एक साफ-सुथरे बोनस के रूप में, यह किसी भी वर्ण वाले तार के साथ काम करता है । जिसमें नल भी शामिल हैं।

import StdLib,StdInt,StdBool,Text.Unicode,Text.Unicode.UChar
u=isUpper
l=isAlpha
$c|l c=fromInt(toInt c+120153+if(u c)84 0)=c
?[h,s:t]=[if(u h<>isLower s)($c)c\\c<-[h,s:t]]
?[h]=[$h]
@s=[y\\x<-groupBy(\a b=l a&&l b)s,y<- ?x]

इसे ऑनलाइन आज़माएं!

फ़ंक्शन को परिभाषित करता है @, एक ले रहा है UStringऔर वापस लौट रहा हैUString


3
क्या यह एक स्वच्छ बोनस भी है? : डी
कॉनर ओ'ब्रायन

6

सी, 292 अक्षर, 448 बाइट्स (UTF-8 में)

char*t;s,i,k;p(l){for(l=s=*t/96,i=k=strlen(t);i--;)t[i]/96-s&&++l;for(l=l-s&&write(1,t,k);!l&++i<k;)write(1,s?"𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓"+t[i]*4-388:"𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇"+t[i]*4-260,4);}f(char*s){char b[strlen(s)];for(t=b;*s;++s)*s<47?(*t=0),p(t=b),putchar(*s):(*t++=*s);*t=0;p(t=b);}

इसे ऑनलाइन आज़माएं!

unrolled:

char*t;
s,i,k;

p(l)
{
    for (l=s=*t/96, i=k=strlen(t); i--;)
        t[i]/96-s && ++l;

    for (l=l-s&&write(1, t, k); !l&++i<k;)
        write(1, s ? "𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓"+t[i]*4-388
                   : "𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇"+t[i]*4-260, 4);
}

f(char*s)
{
    char b[strlen(s)];

    for (t=b; *s; ++s)
        *s<47 ? (*t=0), p(t=b), putchar(*s) : (*t++=*s);

    *t = 0;
    p(t=b);
}

5

जावा 8, 221 219 203 201 बाइट्स

s->{StringBuffer r=new StringBuffer();for(String x:s.split("(?<=[\\. ])|(?=[\\. ])"))x.codePoints().forEach(c->r.appendCodePoint(c+(x.matches("[A-Z]+")?120237:x.matches("[a-z]+")?120153:0)));return r;}

मुझे StringBufferनियमित रूप Stringसे उपयोग करने के बजाय .appendCodePoint, दुर्भाग्य से उपयोग करना होगा ..

स्पष्टीकरण:

इसे ऑनलाइन आज़माएं।

s->{                           // Method with String parameter and StringBuffer return-type
  StringBuffer r=new StringBuffer();
                               //  Resulting StringBuffer
  for(String x:s.split("(?<=[\\. ])|(?=[\\. ])"))
                               //  Split by space or dot, and keep them as separate items,
                               //  and loop over all those substrings
   x.codePoints().forEach(c->  //   Inner loop over the codepoints of that substring
      r.appendCodePoint(       //    Convert int to char, and append it to the result:
        c                      //     The next codepoint of the substring
        +(x.matches("[A-Z]+")? //     If the word is fully uppercase:
           120237              //      Add 120237 to convert it to Math Sans Bold
          :x.matches("[a-z]+")?//     Else-if the word is fully lowercase:
           120153              //      Add 120153 to convert it to Math Sans
          :                    //     Else (mixed case, or a dot/space)
           0)));               //      Leave the codepoint (and thus the character) as is
  return r;}                   //  Return the resulting StringBuffer

4

हास्केल , 172 170 बाइट्स

(s#w)r=[x|all(`elem`s)w,c<-w,(x,k)<-zip r s,c==k]
t[]=[]
t w=filter(>[])[['A'..'Z']#w$['𝗮'..],['a'..'z']#w$['𝖺'..],w]!!0
f s|(a,b:c)<-span(>'.')s=t a++b:f c|1>0=t s

इसे ऑनलाइन आज़माएं!

काफी सरल। #ऑपरेटर सेट लेता sवर्णों (अपर या लोअर केस) शब्द के w, और गणित बिना सेट r। यदि शब्द के सभी वर्ण sया रिक्त सूची में हैं, तो यह गणित के sans फ़ॉन्ट में शब्द देता है । tसमारोह में एक शब्द भी ले जाता है और सभी तीन possiblities की कोशिश करता है (सभी ऊपरी, सभी कम, या मिश्रित), पहले एक है कि खाली नहीं लौटने। fफ़ंक्शन का उपयोग करके पहला शब्द पाता है span, के साथ इसे बदलने tऔर विभाजक (या तो साथ यह श्रृंखलाबद्ध .या अंतरिक्ष) और स्ट्रिंग के बाकी पर आवर्ती। वैकल्पिक मामला यह है कि अगर स्पैन को विभाजक नहीं मिल रहा है; हम सिर्फ स्ट्रिंग बदल देते हैं।

संपादित करें: 2 बाइट्स उतारने के लिए @ लिकोनी का धन्यवाद! मैं पूरे "ऑपरेटर के लिए उपयोग नहीं किया जाता हूं जो तीन तर्क लेता है" बात


1
(['A'..'Z']#w)['𝗮'..]हो सकता है ['A'..'Z']#w$['𝗮'..]
लकोनी

3

जेली , 34 बाइट्स

e€ØBŒg
ṁǵŒl,Œuiị“¡ẓƬ“¡ẓġ“’×Ç+OỌµ€

इसे ऑनलाइन आज़माएं!

पूरा कार्यक्रम।


2
यह शायद पेशेवर जेलीवादियों के लिए स्पष्ट है, लेकिन क्या आप यहां show चल रहा है दिखाने के लिए एक संक्षिप्त स्पष्टीकरण जोड़ सकते हैं?
मिक मेमेनिक

@MickMememonic क्षमा करें, अभी मेरे पास समय नहीं है
एरिक आउटगोल्फर

3

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

/\b[A-Z]+\b/_(`.
ĵ$&
)T`L`ۮ-܇
/\b[a-z]+\b/_(`.
ĵ$&
)T`l`ں-ۓ
T`ÿ-߿`퟿-

इसे ऑनलाइन आज़माएं! स्पष्टीकरण: रेटिना एक .NET अनुप्रयोग है और इसलिए आंतरिक रूप से UTF-16 में काम करता है। दुर्भाग्य से मैथ सेन्स के पात्र बीएमपी में नहीं हैं क्योंकि मैं उन्हें सीधे ट्रांसलेट नहीं कर सकता क्योंकि कोड बिंदुओं की संख्या भिन्न होती है। इससे भी बदतर, मैं बिल्कुल भी सरोगेट का उपयोग नहीं कर सकता। इसके बजाय, मैं उपयुक्त शब्दों को उस श्रेणी में वर्णों में स्थानांतरित करता हूं 0xFF-0x7FFजो आसानी से केवल दो बाइट्स को सांकेतिक शब्दों में बदलना चाहते हैं, साथ ही मैं उन्हें 0x135चरित्र के साथ भी उपसर्ग करता हूं । अंत में मैं उस सीमा पर मैप करता हूं जो एक सीमा पर है जो अप्रमाणित सरोगेट्स को ओवरलैप करता है, जिससे वैध बीएमपी जोड़े बनते हैं।


3

पायथन 3, 173 122 120 बाइट्स

lambda s:''.join(chr(ord(c)+120153*t.islower()+120237*t.isupper())for t in re.split(r'\b(\w+)\b',s)for c in t)
import re

-श्रीवत्सर से -51 बाइट्स

एबीसी से -2 बाइट्स

इसे ऑनलाइन आज़माएं!

शब्द सीमाओं ( re.split(r'\b(\w+)\b',s)) पर विभाजन , फिर शब्दों को 𝗅𝗈𝗐𝖾𝗋𝖼𝖺𝗌𝖾 𝗆𝖺𝗍𝗁 +120153*t.islower()) ( ), और अपरकेस शब्दों को 𝗯𝗼𝗹𝗱 to 𝘀𝗮𝗻𝘀 ( +120237*t.isupper()) तक ले जाता है, और मिश्रित-केस शब्दों को अकेला छोड़ देता है, फिर joinशब्दों को वापस ऊपर ले जाता है।

अनगुल्ड एंड अन-लंब्ब-एड:

def f(s):
    words = re.split(r'\b(\w+)\b', s)
    ret = ''
    for word in words:
        for char in word:
            if word.isupper():
                ret += chr(ord(c) + 120237)
            elif word.islower():
                ret += chr(ord(c) + 120153)
            else:
                ret += c
    return ret

क्या यह कम बाइट्स हो सकता है यदि आप एक चर को 120237 या 120153 पर सेट करते हैं, तो यह निर्भर करता है कि यह ऊपरी या निचला था? ऐसा लग रहा है कि यह हो सकता है
pfg

1
@ पीएफजी वास्तव में, आसानी से 13 बाइट्स (नीचे 160 ) तक दाढ़ी कर सकते हैं ।
श्रीवत्सआर

@pfg वास्तव में, नक्शे-लंबो को (पढ़ने में आसान) समझ के स्थान पर इसे 149 बाइट्स तक लाया जाता है ।
श्रीवत्सआर

5
122 :-) मैं यहाँ रुकूँगा; इस बात पर बहुत गर्व है कि इसे आगे कैसे बढ़ाया जाए, इसे पढ़ना आसान हो गया है। केवल पायथन में!
श्रीवत्सआर

2
-2 पहले रिक्त स्थान से छुटकारा for
पाकर

3

जाप , 34 33 32 31 बाइट्स

अंतिम के बाद एक अनपेक्षित (चारकोड 153) शामिल है #

rV="%b%A+%b"Èc+#x#í
rVv Èc+#x#

कोशिश करो


व्याख्या

                        :Implicit input of string U
r                       :Replace
   "%b%A+%b"            :/\b[A-Z]+\b/g
 V=                     :Assign ^that to variable V
            È           :Run each match through a function
             c          :Map over the codepoints of the current match
              +#x#í     :  Add 120237
\n                      :Assign the result of that replacement to variable U
rVv                     :Another replacement, this time with V lowercased to give us the RegEx /\b[a-z]+\b/g
    Èc+#x#              :And, again, map over the codepoints of each match, this time adding 120153 to each

मूल 32 बाइट जप v2 समाधान

r/\b(\A+|\a+)\b/Èc_+#x#+#T*(X¶u

कोशिश करो

r                                     :Replace
 /\b(\A+|\a+)\b/                      :...all matches of this RegEx (\A=[A-Z], \a=[a-z])
                È                     :Pass each match through a function, with X being the current match
                 c_                   :Pass the codepoints of X through a function
                   +                  :Add to the current codepoint
                    #x#               :120153 (there's an unprintable after the second #)
                        +#T           :Plus 84
                           *          :  Multiplied by
                            (X¶u      :  Is X equal to its uppercase self

1
एक XXD डंप जोड़ने का मन?
स्टेन स्ट्रोम

एक प्रतिवर्ती हेक्सडम्प? अनहोनी के लिए।
स्टेन स्ट्रोम


1

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

s=>s.replace(/\b([A-Z]+|[a-z]+)\b/g,e=>e.replace(/./g,f=>String.fromCodePoint(f.charCodeAt()+120153+(f<'a')*84)))

(मेरे पहले समाधान में एक महत्वपूर्ण दोष को इंगित करने के लिए @pfg के लिए धन्यवाद।)

-1 बाइट्स @ @ नील को धन्यवाद।

स्निपेट:


यह केवल HTML के साथ & # के कारण काम करता है, इसे शुद्ध जेएस के साथ करने के लिए आपको उपयोग करने की आवश्यकता String.fromCodePoint(120237)होगी जो आकार में वृद्धि करेगा
pfg

अभी तक ऐसा मत करो, लेकिन मैं इसे बाद में वापस आऊंगा, धन्यवाद।
रिक हिचकॉक

let a = s=>s.replace(/\b([A-Z]+|[a-z]+)\b/g,e=>e.replace(/./g,f=>String.fromCodePoint(f.charCodeAt(0)+120153+(f<'a')*84)))शुद्ध जेएस काम करता है, लेकिन
पीएफजी

आह! मुझे समझ आ गया! Daggum।
रिक हिचकॉक

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