सर्वनाम हेक्स


26

सर्वनाम हेक्स

शो सिलिकॉन वैली के साथ आप में से किसी एक के लिए, यह चुनौती एक एक्सचेंज से प्रेरित है जो इस तरह से चलता है ( YouTube ):

Kid -
  Here it is: Bit… soup. It’s like alphabet soup, BUT… it’s ones and zeros 
  instead of letters.
Erlich Bachman -
  {silence}
Kid -
  ‘Cause it’s binary? You know, binary’s just ones and zeroes.
Erlich Bachman -
  Yeah, I know what binary is. Jesus Christ, I memorized the hexadecimal 
  times tables when I was fourteen writing machine code. Okay? Ask me 
  what nine times F is. It’s fleventy-five. I don’t need you to tell me what binary is.

यह ध्यान दिया जाना चाहिए कि तकनीकी रूप से, 0x9 * 0xF = 0x87'फ्लीवेंटी-फाइव' नहीं, लेकिन इससे एक महत्वपूर्ण सवाल सामने आता है - आप बातचीत में वास्तव में हेक्स का उच्चारण कैसे करेंगे? यह oh ex eff effआसानी से जीभ से बहने जैसा नहीं है , इसलिए हमें क्या करना चाहिए? यहाँ एक आसान उच्चारण चार्ट है जिसका हम अनुसरण करेंगे।

A = ay       A0 = atta-       
B = bee      B0 = bibbity-    
C = cee      C0 = city-       
D = dee      D0 = dickety-    
E = ee       E0 = ebbity-     
F = eff      F0 = fleventy-   

हम 4-लंबाई की हेक्स संख्या को दो के दो समूहों में विभाजित कर सकते हैं, और उपरोक्त तालिका से उच्चारण, और साथ ही संख्याओं के लिए सामान्य अंग्रेजी उच्चारण का निर्धारण कर सकते हैं। इसलिए, उदाहरण के लिए 0xFFAB, हमें मिलेगा Fleventy-eff bitey atta-bee

यदि कोई संख्या शामिल है, जैसे कि 0xF5AB, आप प्रिंट करेंगे Fleventy-five bitey atta-bee। इसके अलावा, यदि कोई संख्या किसी एक समूह को शुरू करती है, तो आपको इसे "टेंस" उच्चारण का उपयोग करना चाहिए। उदाहरण के लिए, 0x5FAAबन जाएगा Fifty-eff bitey atta-ay। इस मामले में जहां आपको कुछ पसंद है 0x1FAC, यह होगा Effteen bitey atta-cee। लेकिन, अगर इस नियम का उपयोग किया जाना था 0x1AF4, a-teenके लिए भ्रमित किया जा सकता है eighteen, तो आपको एक Y को रोकना होगा। इसलिए, सही आउटपुट होगाYayteen bitey fleventy-four

के मामले में 0xD0F4, बजाय करने का Dickety-zero bitey fleventy-four, हम शून्य पर ध्यान न दें और मुद्रित होगा Dickety-bitey fleventy-four

हाइफ़न केवल दो के समूहों के भीतर दिखाई देनी चाहिए, अर्थात जब तक पहला समूह केवल एक शब्द न हो तब तक बिट्टी को एक हाइफ़न के साथ किसी भी समूह से नहीं जोड़ा जाना चाहिए! तो 0x04F4होगा four-bitey fleventy-four, लेकिन 0x44F4होगा forty-four bitey fleventy-four। जैसा कि ट्राइकोप्लाक्स ने कहा, एक गोल संख्या का पालन करते समय बिट्टी को केवल हाइफ़न किया जाना चाहिए।

यह कैसे काम करेगा, इस पर एक व्यापक नज़र डालने के लिए, नीचे दिए गए उदाहरण I / O को देखें।

लक्ष्य

एक प्रोग्राम या फ़ंक्शन बनाएँ जो इनपुट या फ़ंक्शन तर्क के रूप में हेक्साडेसिमल स्ट्रिंग लेगा और इसका उच्चारण करेगा। आउटपुट में उचित कैपिटलाइज़ेशन होना चाहिए। आप मान सकते हैं कि इस संख्या की लंबाई हमेशा 4 होगी।

उदाहरण I / O

"0xFFFF" -> "Fleventy-eff bitey fleventy-eff"
"0x0000" -> "Zero"
"0x0010" -> "Ten"
"0x0100" -> "One-bitey zero"
"0x1110" -> "Eleven-bitey ten"
"0xBEEF" -> "Bibbity-ee bitey ebbity-eff"
"0x9999" -> "Ninety-nine bitey ninety-nine"
"0xA1B2" -> "Atta-one bitey bibbity-two"
"0x3C4F" -> "Thirty-cee bitey forty-eff"
"0x17AB" -> "Seventeen-bitey atta-bee"
"0x1AFB" -> "Yayteen-bitey fleventy-bee"
"0xAAAA" -> "Atta-ay bitey atta-ay"

यह , इसलिए कम से कम बाइट्स जीतती हैं।


6
यहां हेक्स टाइम टेबल सीखने वाले किसी भी व्यक्ति के लिए एक आसान ट्रिक है: एफ टाइम टेबल की गणना आपकी 16 उंगलियों और पैर की उंगलियों (अंगूठे और बड़े पैर की उंगलियों को छोड़कर) पर की जा सकती है। बस उन्हें एक पंक्ति में पंक्तिबद्ध करें और एफ एक्स एन की गणना करने के लिए एनटीटी को एक गुना करें। मुड़े हुए अंकों के बाईं ओर अंकों की संख्या पहला अंक है, और मुड़े हुए अंकों के दाईं ओर अंकों की संख्या दूसरा अंक है, जिससे आप किसी भी 2 अंकों के एकाधिक की गणना कर सकते हैं। उदाहरण के लिए, C x अंक को F x C = Bibbity चार देने के लिए नीचे की ओर मोड़ें।
ट्राइकोप्लाक्स

2
@trichoplax मेरा बच्चा आश्चर्यचकित था जब मैंने पहली बार उसे दिखाया था कि उसकी उंगलियों पर नाइन के लिए कैसे करें: D
Geobits

@Geobits है कि क्या मैं इसे से extrapolated है - मैं एक बच्चे के रूप में 9s के लिए उस चाल को प्यार करता था।
ट्राइकोप्लाक्स

@trichoplax मुझे लगता है कि bitey उच्चारण के उद्देश्य के लिए अधिक समझ में आता है। मैंने यह स्पष्ट करने की कोशिश की है कि जहाँ हाइफ़न दिखाई देने हैं, और आउटपुट के पहले अक्षर को कैपिटल में और बाकी को लोअरकेस में रखना होगा।
केड

4
आप उदाहरण के अलावा कहीं भी "बाइटी" का उल्लेख नहीं करते हैं
शुक्राणु

जवाबों:


9

पायथ - 312 293 286 251 बाइट्स

डेटा को कम करना शुरू करने का समय, अधिक आना।

पवित्र सबसे बड़ा पायथ कार्यक्रम मैंने कभी लिखा है! डेटा के साथ अभी भी बहुत बड़ा संपीड़न संभव है, दोनों algortihimically और बेस रूपांतरण, लेकिन बस इसे ऊपर रखना चाहते थे।

Kcs@LGjC"qNjÆÉý(7läQ«I?sfçÂØ^Ðûü»   u$ÐÃoó}QÛã´Hf®?Nâ²-YÜZÔ7ÂþæX#\"åØ"26\q=+K>K11J.e?+?bnb\|@K+16k"ty"-kTbc"  twen | for | | | | | atta bibbi ci dicke ebbi fleven"d.srj"bitey "m?++@Kd?k<d18"teen"\-<d32+j\-@V,JKfT.Dd16\ ?Gh=G.DQ256tG4\-

मैं क्यू के माध्यम से हेक्स शाब्दिक के रूप में इनपुट की व्याख्या करता हूं जो इसे स्वचालित रूप से पता लगाता है 0x। तब मैं इसे 256 बाइट्स में विभाजित करता हूं, और पहले बाइट को हटा देता हूं यदि इसका शून्य है, तो इसे दो सरणियों के माध्यम से मैप करें, एक के लिए 0-1Fऔर फिर 20-F0। दूसरे को पहले सरणी के माध्यम से भी एक डिवमोड मिलता है। पहले विकल्प के अंत में एक हाइपेन मिलता है, और दूसरे में मध्य में एक हाइफ़न और अंत में एक स्थान मिलता है। के साथ जुड़ें "bitey ", रेंज के साथ कैपिटल करें, और स्ट्रिप हाइफ़न के साथ .sऔर हम अच्छे हैं।

आधार संपीड़न भाग भी दिलचस्प है क्योंकि मैंने पहली बार बुनियादी 128 -> 256 रूपांतरण के साथ शुरुआत की थी। लेकिन अब, मैं जो कर रहा हूं वह "q"अंतरिक्ष के बजाय विभाजक के रूप में उपयोग कर रहा है । इस प्रकार मैं अब स्ट्रिंग को बेस 26 स्ट्रिंग मान सकता हूं xLG, जिससे संपीड़न में जबरदस्त सुधार होगा।

इसे यहाँ ऑनलाइन प्रयास करें

टेस्ट सूट


मुझे पता है कि यह सवाल में नहीं है, लेकिन मुझे लगता है कि आपको अधिक संख्याओं के लिए एक्सट्रपलेशन करने की कोशिश करनी चाहिए, जैसे 0x112233और0x93FBAC09
vrwim

2
@ मुझे लगता है कि यह उच्चारण मॉडल इसे खो देता है, उह, उस बिंदु पर व्यवहार्यता, हाहा। क्या आप वास्तव में कह सकते हैं Ninety-three bitey fleventy-bee halfy atta-cee bitey nine?
केड

मुझे लगता है कि कुछ टूट गया है, अभी आपका कोड केवल बड़े पैमाने पर Truebiteyएस और Falsebiteyएस का उत्पादन करता है ।
काडे

@ Vioz- टर्नरीज़ टूट गए हैं। इसहाक ने कुछ दिन पहले उनके आदेश को उलट दिया। मैं जा सकता था और उन्हें बदल सकता था और वास्तव में एक युगल बाइट्स बचा सकता था, लेकिन उनके 14. जैसे हैं।
माल्टीसेन

ओह समझा। तो पायथ का कौन सा संस्करण कार्यक्षमता को संरक्षित करता है?
काडे

5

जावा - 856 बाइट्स

कम नहीं, लेकिन कम से कम दूसरा जवाब;)

यह एक विधि है, String p(String n)जो काम करेगी:

String p(String n){String[]b={"","ten","twen","thir","for","fif","six","seven","eigh","nine",
"atta","bibbi","ci","dicke","ebbi","fleven"};String[]s={"zero","one","two","three","four",
"five","six","seven","eight","nine","ay","bee","cee","dee","ee","eff"};String[]t={"ten",
"eleven","twelve","thir","four","fif","six","seven","eigh","nine","yay","bee","cee","dee",
"ee","eff"};int w=Byte.valueOf(n.substring(2,3),16);int x=Byte.valueOf(n.substring(3,4),16);
int y=Byte.valueOf(n.substring(4,5),16);int z=Byte.valueOf(n.substring(5,6),16);String r=(w==
1?t[x]+(x>2?"teen":""):((w==0?"":b[w]+(w>1&&w!=10?"ty":"")+"-")+(w==0&&x==0?"":s[x])))+((w==0
&&x>0||w==1&&x<3||w>0&&x==0)?"-":w==0&&x==0?"":" ")+(w>0||x>0?"bitey ":"")+(y==1?t[z]+(z>2?
"teen":""):((y==0?"":b[y]+(y>1&&y!=10?"ty":"")+"-")+(y>1&&z!=0||y==0?s[z]:"")));return (char)
(r.charAt(0)-32)+r.substring(1);}

4

जावास्क्रिप्ट - 577 719 बाइट्स

function h(e){for(e=e.match(/.{1,2}/g),r="",i=1;i<e.length;i++)j=parseInt("0x"+e[i]),0!=j?r+=c(parseInt("0x"+e[i]))+"bitey ":i>1?r+="zero-bitey":0;return r=""==r?"Zero":r[0].toUpperCase()+r.substr(1,r.length-7),null!==r[r.length-1].match(/[-\s]$/g)?r=r.substr(0,r.length-1):0,r}function c(e){return d=["zero","one","two","three","four","five","six","seven","eight","nine","ay","bee","cee","dee","ee","eff","ten","eleven","twelve","thir","four","fif","six","seven","eigh","nine","yay","bee","cee","dee","ee","eff"],p=["twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety","atta","bibbity","city","dickety","ebbity","fleventy"],1>e?"":e>31?p[Math.floor(e/16)-2]+"-"+d[e%16]+" ":17>e?d[e]+"-":d[e]+"teen-"}

मुझे यकीन है कि सुधार किए जाने हैं। जोड़ा गया बोनस, यह मनमानी लंबाई हेक्स स्ट्रिंग्स को पार्स करता है।

संपादित करें: वूप्स, यह सही काम नहीं करता है जब अग्रणी शून्य होते हैं। हम्म।

संपादित करें 2: निश्चित, मुझे लगता है। JSFiddle

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