यूनिकोड अंश


21

प्रारूप में एक अंश को देखते हुए m/n(जहाँ m और n कोप्राइम पूर्णांक हैं), संबंधित यूनिकोड अंश का उत्पादन करते हैं। आपके प्रोग्राम / फ़ंक्शन को किसी भी इनपुट में लेने की उम्मीद नहीं होगी जो एक यूनिकोड चरित्र के अनुरूप नहीं है। Arrays, उदाहरण [2, 3]के लिए विरोध के रूप में 2/3स्वीकार किए जाते हैं। m / nविरोध के रूप में m/nभी ठीक है। दो अलग-अलग इनपुट mऔर nमान्य भी हैं।

यूनिकोड अंशों को संभाला जाना चाहिए जो निम्नानुसार हैं:

½, ⅓, ⅔, ¼, ¾, ⅕, ⅖, ⅗, ⅘, ⅙, ⅚, ⅐, ⅛, ⅜, ⅝, ⅞, ⅑, ⅒

इस प्रकार, संभव इनपुट निम्नानुसार हैं:

1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 2/5, 3/5, 4/5, 1/6, 5/6, 1/7, 1/8, 3/8, 5/8, 7/8, 1/9, 1/10

पात्रों के यूनिकोड कोडपॉइंट्स इस प्रकार हैं:

188 ¼
189 ½
190 ¾
8528 ⅐
8529 ⅑
8530 ⅒
8531 ⅓
8532 ⅔
8533 ⅕
8534 ⅖
8535 ⅗
8536 ⅘
8537 ⅙
8538 ⅚
8539 ⅛
8540 ⅜
8541 ⅝
8542 ⅞

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

1/2 -> ½
1/3 -> ⅓
2/3 -> ⅔
1/4 -> ¼
3/4 -> ¾
3/8 -> ⅜
1/10 -> ⅒

अपने कोड को यथासंभव कम करें; यह कोड गोल्फ है।


क्या आप प्रत्येक अंश के लिए यूनिकोड कोड बिंदु जोड़ सकते हैं?
रॉड

4
188 ¼, 189 ½, 190 ¾, 8528 ⅐, 8529 ⅑, 8530 ⅒, 8531 ⅓, 8532 ⅔, 8533 ⅕, 8534 ⅖, 8535 ⅗, 8536 ⅘, 8537 ⅙, 8538 ⅚, 8539 ⅛, 8540 ⅜, 8541 ⅝, 8542 ⅞
लीक नन

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

@ अरनल्ड बाद वाला।
user202729

क्या इनपुट एक ऐसी वस्तु हो सकती है जो एक अंश का प्रतिनिधित्व करती है?
ब्रैड गिल्बर्ट b2gills

जवाबों:


14

जावास्क्रिप्ट (Node.js) , 78 77 बाइट्स

@HermanLauenstein को 1 बाइट धन्यवाद दिया

करी सिंटैक्स में इनपुट लेता है (m)(n)

m=>n=>'¾⅗  ⅜    ⅞⅘½⅓¼⅕⅙⅐⅛⅑⅒⅚⅔⅝⅖'[(m*9+n)%31]

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


@ user202729 मुझे यकीन है कि मैंने एक समान सूत्र का अन्यत्र उपयोग किया है। मुझे याद नहीं है कि किस चुनौती के लिए, हालांकि। अब, यह वर्णों को उत्पन्न करने की कोशिश करने के लायक हो सकता है String.fromCharCode(), लेकिन मैं एक समान बाइट गणना की उम्मीद करूंगा।
अरनौलड


@HermanLauenstein धन्यवाद! (मुझे याद है कि एक क्योंकि मैं शुरू में सिर्फ सबसे छोटे मोडुलो की तलाश कर रहा था। मैंने पहले से ही XOR पद्धति पर स्विच कर लिया था जब मैंने खाली स्लॉट्स को निकालना शुरू कर दिया था।)
अरनॉल्ड

और यदि आप अपना उत्तर बहुत जल्द पोस्ट करते हैं, तो यह लोगों को आपके दृष्टिकोण का उपयोग करने के लिए करेगा ...
user202729

12

पर्ल 6 ,  48  43 बाइट्स

{chr first *.unival==$^m/$^n,(|^191,|(8528..*))}

कोशिश करो

{chr first *.unival==$_,(|^191,|(8528..*))}

कोशिश करो

विस्तारित:

{  # bare block lambda with implicit parameter 「$_」
  chr

    first               # find the first value

      *.unival ==       # which has a unicode value that matches
          $_,           # the input fraction (as a Rational)

      (
        |^191,     # ¼(189) ½(188) ¾(190)
        |(8528..*) # all of the rest
      )
}

ध्यान दें कि खोज को अलग करना है ताकि यह अन्य यूनिकोड वर्णों को वापस न करे जो एक ही समान हैं। (अन्यथा यह होगा (1..*))


3
रुको, पर्ल 6 में इस सटीक चीज़ के लिए अंतर्निहित है?
एरिक आउटफोलर

2
@EriktheOutgolfer मुझे यकीन नहीं है कि यह देखने के लिए काफी है, लेकिन हाँ, आप फ़ाइल में यूनिकोड कैरेक्टर डेटाबेस से 9 वें कॉलम में परिलक्षित कोड बिंदु के संख्यात्मक मान तक पहुंच सकते हैं UnicodeData.txt। उदाहरण के लिए, U + 109BC के MEROITIC CURSIVE FRACTION ELEVEN TWELFTHSपास चरित्र की संपत्ति है nv=11/12। गैर-खाली संख्यात्मक मानों के साथ कुछ 1500 कोड बिंदु हैं - बल्कि इस छोटी सी चुनौती से अधिक को हल करने के लिए कहता है। ये पूरी संख्याएँ या परिमेय हैं।
tchrist

7

जावास्क्रिप्ट (ईएस 6), 88 86 84 81 79 बाइट्स

सहेजे गए 2 बाइट @Arnauld की बदौलत

m=>n=>String.fromCharCode((4%n?8528:188)|"  130470912"[n]*1.3+~-m/-~"3 1"[n-6])

अन्य जेएस उत्तर के रूप में काफी छोटा नहीं है, लेकिन गणितीय रूप से प्रत्येक अंश के कोड-पॉइंट की गणना करना मजेदार था।

टेस्ट स्निपेट

पुरानी विधि (82 बाइट्स):

m=>n=>String.fromCharCode((4%n?8539:189)-("0x"+"  08162b0a9"[n])+~-m/-~"3 1"[n-6])

@Arnauld की बदौलत इस पर 4 बाइट्स बचाए।


1
-~'3 1'[n-6]
अरनॉल्ड

7

APL (Dyalog) , 88 64 बाइट्स

{⎕UCS(⌊(⍺-1)÷(1+⍵≡8)⌈4×⍵≡6)-(291194049⊤⍨1012)[⍵]-1898539××⍵|4}

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

-3 dzaima के लिए धन्यवाद ।

ETHproductions के 84-बाइट दृष्टिकोण का उपयोग करना।

f←TIO पर शामिल नहीं गिना जाता है, क्योंकि यह वहाँ रखा है सिर्फ समारोह का परीक्षण करने में सक्षम हो।


2

SOGL V0.12 , 51 बाइट्स

5*+'æ%'⁵%"∫}ΣS“LI─{"#!“+ζ}¹"¾ŗŗŗŗŗŗ⅛ŗ⅜½⅝ŗ⅞ ⅓⅔ŗ  ¼”W

यह कोशिश करो!

मैपिंग का उपयोग करता है (m + n*5)%33%22

स्पष्टीकरण:

5*                        multiply the 1st input by 5
  +                       add to the 2nd input
   'æ%                    modulo 33
      '⁵%                 module 22

"∫}ΣS“                    push 2153527158
      LI─                 base 11 decode that - [10 0 5 6 7 8 9 1 2]
         {     }          for each of that
          "#!“+             add 8528
               ζ            and convert to a character
                "...”     push "¾ŗŗŗŗŗŗ⅛ŗ⅜½⅝ŗ⅞ ⅓⅔ŗ  ¼", replacing ŗ with each character of the above array
                     W    and get the (m + n*5)%33%22th item from that

2

क्लोजर, 127 बाइट्स

(comp{2/3\⅔ 4/5\⅘ 1/3\⅓ 1/2\½ 5/6\⅚ 1/5\⅕ 1/4\¼ 3/5\⅗ 1/7\⅐ 3/4\¾ 2/5\⅖ 1/6\⅙ 1/9\⅑ 1/8\⅛ 3/8\⅜ 1/10\⅒ 5/8\⅝ 7/8\⅞}read-string)

एक अनाम फ़ंक्शन जो इनपुट लेता है "1/2", और संबंधित वर्ण देता है।

क्लोजर Ratioसे अंश वर्ण तक एक सीधी मैपिंग । comp, और तथ्य यह है कि क्लीजुर नक्शे वास्तव में यहां मदद कर रहे हैं। मुझे स्ट्रिंग इनपुट read-stringको एक अनुपात प्रकार के रूप में मूल्यांकन करने के लिए पारित करने की आवश्यकता थी , क्योंकि यह मुझे मानचित्र में सभी ब्लोटिंग उद्धरणों को छोड़ने की अनुमति देता है। compमुझे वह बिंदु-मुक्त करने दो, जो अच्छा था। "पूर्ण" कोड होगा:

(defn to-unicode-fraction [frac]
  (get {2/3\⅔ 4/5\⅘ 1/3\⅓ 1/2\½ 5/6\⅚ 1/5\⅕ 1/4\¼ 3/5\⅗ 1/7\⅐,
        3/4\¾ 2/5\⅖ 1/6\⅙ 1/9\⅑ 1/8\⅛ 3/8\⅜ 1/10\⅒ 5/8\⅝ 7/8\⅞}
       (read-string frac)))

अन्य उत्तरों को देखने के बाद, मैंने महसूस किया कि यह दृष्टिकोण बहुत ही भोला है। मैं इसे सुधारने के तरीकों की तलाश कर रहा हूं।


1

स्विफ्ट , 106 82 बाइट्स

पोर्ट ऑफ @Arnaulds जावास्क्रिप्ट उत्तर

@ Mr.Xcoder के लिए 24 बाइट्स का धन्यवाद सहेजा गया

{Array("¾⅗  ⅜    ⅞⅘½⅓¼⅕⅙⅐⅛⅑⅒⅚⅔⅝⅖")[($0*9+$1)%31]}

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


82 बाइट्स के लिए क्लोजर का उपयोग करें (आपको var f=बाइट काउंट में शामिल नहीं होना है )
मिस्टर एक्सकोडर

1

चारकोल , 77 48 46 बाइट्स

F§§⪪“YW³⦄Eν~vγ@⊖Xμ~?Iw⸿M➙b℅¦⦃”,NN℅⁺℅ι×⁹⁰∨№βι⁹⁴

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। संपादित करें: ASCII चार्ट से मल्टीबाइट चार्ट में मैपिंग करके 29 31 बाइट्स सहेजे गए। स्पष्टीकरण:

    “....”                  Compressed string `R,EFcGbIMDO,H J,K  Pd,L,N Q,`
   ⪪      ,                 Split on commas
           N                First input
  §                         Circularly index
            N               Second input
 §                          Circularly index
F                           "Loop over" character (loop variable `i`)
                     №βι    Count of `i`s in lowercase letters
                    ∨   ⁹⁴  Replace zero result with 94
                 ×⁹⁰        Multiply by 90
               ℅ι           Take ordinal of `i`
              ⁺             Sum
             ℅              Convert back to character
                            Implicitly print


0

पायथन 3, 97 बाइट्स

lambda m,n:'½ ⅓⅔ ¼_¾ ⅕⅖⅗⅘ ⅙___⅚ ⅐ ⅛_⅜_⅝_⅞ ⅑ ⅒'.split()[n-2][m-1]

2
यह काम करने के लिए प्रतीत नहीं होता है, आपको [n-2][m-1]इसके बजाय की आवश्यकता है ।
आउटगॉल्फ

ठीक है, मुझे लगता है कि मैंने पहले इसका परीक्षण नहीं किया था ...
रयान मैककंपबेल

0

विम स्क्रिप्ट, 67 बाइट्स

fu!F(m,n)
if a:n==10|norm a⅒ 
else|exe'norm a'.a:m.a:n
endif
endfu

फ़ंक्शन विम के डिग्राफ के साथ काम करता है जो उन्हें iwth शुरू करने के बाद दर्ज किया जाता है ctrl-k., स्पष्ट रूप से, इसके ctrl-kबाद exe'normके कोड ब्लॉक में प्रस्तुत नहीं किया गया है।

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