Hex telaffuz


26

Hex telaffuz

Silikon Vadisi şovuyla başa çıkamayanlar için, bu zorluk şöyle bir değişimden ilham alıyor ( 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.

Teknik olarak, 0x9 * 0xF = 0x87'elli beş' değil, ama bunun önemli bir soruyu gündeme getirdiğine dikkat edilmelidir - onaltılı konuşmayı nasıl telaffuz edersiniz? oh ex eff effKolayca dilden akıyor gibi değil , ne yapmalıyız? İşte takip edeceğimiz kullanışlı bir telaffuz çizelgesi.

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 uzunluklu bir altıgen sayıyı iki gruba ayırabiliriz ve sayılar için ortak İngilizce telaffuzun yanı sıra yukarıdaki tablodaki telaffuzu belirleyebiliriz. Yani, örneğin 0xFFAB, alacağız Fleventy-eff bitey atta-bee.

Bir sayı eklenmişse, örneğin 0xF5AByazdırırsınız Fleventy-five bitey atta-bee. Ayrıca, bir sayı gruplardan birini başlatırsa, "onlarca" telaffuz kullanmanız gerekir. Örneğin, 0x5FAAolur Fifty-eff bitey atta-ay. Böyle bir şeyin olduğu durumda 0x1FAC, bu olur Effteen bitey atta-cee. Fakat eğer bu kural kullanılacaksa 0x1AF4, a-teenkafası karışmış olabilir eighteen, bu yüzden bir Y hazırlamalısınız. Yani doğru çıktıYayteen bitey fleventy-four

Durumunda 0xD0F4, yerine yapmanın Dickety-zero bitey fleventy-four, biz sıfır görmezden ve basacaktır Dickety-bitey fleventy-four.

Kısa çizgiler yalnızca iki kişilik gruplar arasında görünmelidir, yani ilk grup yalnızca bir sözcük olmadıkça bitey, hiçbir tireyle bir gruba bağlanmamalıdır! Öyle 0x04F4olurdu four-bitey fleventy-four, ama 0x44F4olurdu forty-four bitey fleventy-four. Trishoplax'ın dediği gibi, bit yalnızca yuvarlak bir sayı takip ederken tirelenmelidir.

Bunun nasıl çalışacağına dair kapsamlı bir bakış için aşağıdaki örnek I / O’ya bakın.

Amaç

Onaltılık bir dizeyi giriş olarak alacak bir program veya işlev veya işlev bağımsız değişkeni oluşturacak ve telaffuzunu oluşturacak bir işlev oluşturun . Çıktının uygun büyük harflere sahip olması gerekir. Bu sayının uzunluğunun her zaman 4 olacağını varsayabilirsiniz.

Örnek G / Ç

"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"

Bu , yani en az bayt sayısı kazanır.


6
Onaltılık kez tabloları öğrenen herkes için kullanışlı bir numara: F zaman tablosu, 16 parmak ve ayak parmaklarınızda (başparmaklar ve büyük ayak parmakları hariç) hesaplanabilir. Bunları üst üste sıralayın ve F x n değerini hesaplamak için nt tane aşağı doğru katlayın. Aşağı katlanan basamağın solundaki hane sayısı ilk hanedir ve aşağı katlanan basamağın sağındaki hane sayısı ikinci hanedir ve herhangi bir 2 hatayı birden hesaplamanıza olanak verir. Örneğin, F x C = Bibbity dördüncü vermek için Cth basamağını aşağıya katlayın.
trichoplax

2
@trichoplax Çocuğum ona parmaklarında
dokular

@Geobitler, onu tahmin ettiğim şey buydu - 9 numarayı bu çocuk olarak sevmiştim.
trichoplax

@trichoplax Ben bitey telaffuz amacı için daha anlamlı olduğunu düşünüyorum. Tirelerin nerede göründüğünü daha net hale getirmeye çalıştım ve çıktının ilk harfinin büyük ve küçük harflerle yazılması gerekiyor.
Kade

4
örneklerin dışında hiçbir yerde "bitey" den söz etmiyorsun
Sparr

Yanıtlar:


9

Pyth - 312 293 286 251 bayt

Veriyi azaltmaya başlamanın zamanı geldi, daha geliyor.

Şimdiye kadar yazdığım kutsal en büyük Pyth programı! Verilerde hem cebirsel hem de taban dönüşümle mümkün olan hala büyük bir sıkıştırma var, ancak bunu koymak istedi.

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\-

Girdiyi, Q ile otomatik olarak algıladığı hex değişmezi olarak yorumlarım 0x. Sonra 256 bayt içine divmod ve sıfır, ilk bayt çıkarın, sonra iki dizi, biri için 0-1Fsonra eşleyin 20-F0. İkincisi de ilk diziden bir divmod alır. İlk seçenek sonunda bir tireye, ikincisi ise ortada bir tireye, sonunda bir boşluğa sahip olur. Katıl "bitey ", büyük harfle büyük harf kullan ve tire koy .sve iyiyiz.

Temel sıkıştırma kısmı da ilginç çünkü ilk önce temel 128 -> 256 dönüşümle başladım. Ama şimdi, yaptığım şey "q"boşluk yerine ayırıcı olarak kullanmak. Bu yüzden şimdi, dizeyi bir taban 26 dizisi olarak düşünebilirim, bu da xLGsıkıştırmayı büyük ölçüde geliştirir.

Burada çevrimiçi deneyin .

Test paketi .


Ben söz konusu değil biliyorum ama sen gibi daha numaralara extrapolating denemek gerektiğini düşünüyorum 0x112233ve0x93FBAC09
vrwim

2
@ Bence bu telaffuz modeli bu noktada, haha, yaşayabilirliğini kaybediyor. Gerçekten söylediğini hayal edebiliyor Ninety-three bitey fleventy-bee halfy atta-cee bitey ninemusun?
Kade

Bence bir şey bozuldu, şu anda kodunuz sadece büyük miktarda Truebiteys ve Falsebiteys üretiyor .
Kade

@ Vioz- Üçlüler bozuldu. Isaacg birkaç gün önce siparişlerini geri aldı. Onları değiştirip değiştirebilirim ve aslında bir kaç bayt kurtarabilirim, ama 14
yaşındalar

Ah, anlıyorum. Peki Pyth'in hangi sürümü işlevselliği koruyor?
Kade

5

Java - 856 bayt

Kısa değil, en azından ikinci cevap;)

String p(String n)İşi yapacak denilen bir yöntem :

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

Javascript - 577 719 bayt

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-"}

Yapılması gereken iyileştirmeler olduğuna eminim. Eklenen bonus, isteğe bağlı altıgen dizgileri ayrıştırır.

EDIT: Boğmaca, önde gelen sıfır olduğunda doğru çalışmıyor. Hm.

EDIT 2: Sabit sanırım. JSFiddle

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.