Hex phát âm


26

Hex phát âm

Đối với những người không quen với chương trình Thung lũng Silicon, thử thách này được lấy cảm hứng từ một cuộc trao đổi diễn ra như thế này ( 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.

Cần lưu ý rằng về mặt kỹ thuật, 0x9 * 0xF = 0x87không phải là 'fleventy-five', nhưng điều này mang đến một câu hỏi quan trọng - làm thế nào bạn thực sự phát âm hex trong cuộc trò chuyện? Nó không giống như oh ex eff effchảy ra khỏi lưỡi một cách dễ dàng, vậy chúng ta nên làm gì? Đây là một biểu đồ phát âm tiện dụng, chúng tôi sẽ theo dõi.

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

Chúng ta có thể chia một số hex dài 4 thành hai nhóm và xác định cách phát âm từ bảng trên, cũng như cách phát âm tiếng Anh thông dụng cho các số. Vì vậy, ví dụ 0xFFAB, chúng tôi sẽ nhận được Fleventy-eff bitey atta-bee.

Nếu một số được bao gồm, chẳng hạn như 0xF5AB, bạn sẽ in Fleventy-five bitey atta-bee. Ngoài ra, nếu một số bắt đầu một trong các nhóm, bạn nên sử dụng cách phát âm "hàng chục". Ví dụ, 0x5FAAsẽ trở thành Fifty-eff bitey atta-ay. Trong trường hợp bạn có một cái gì đó như thế 0x1FAC, điều này sẽ được Effteen bitey atta-cee. Nhưng, nếu quy tắc này được sử dụng cho 0x1AF4, a-teencó thể bị nhầm lẫn eighteen, vì vậy bạn phải đăng ký Y. Vì vậy, đầu ra chính xác sẽ làYayteen bitey fleventy-four

Trong trường hợp 0xD0F4, thay vì làm Dickety-zero bitey fleventy-four, chúng tôi sẽ bỏ qua số không và in Dickety-bitey fleventy-four.

Các dấu gạch nối chỉ nên xuất hiện trong các nhóm của hai, tức là không nên kết nối với một nhóm có dấu gạch nối trừ khi nhóm đầu tiên chỉ có một từ! Vì vậy, 0x04F4sẽ được four-bitey fleventy-four, nhưng 0x44F4sẽ được forty-four bitey fleventy-four. Như trichoplax đã nói, cắn chỉ nên được cường điệu khi theo số tròn.

Để có cái nhìn toàn diện về cách thức hoạt động của nó, hãy xem ví dụ I / O bên dưới.

Mục tiêu

Tạo một chương trình hoặc hàm sẽ lấy một chuỗi thập lục phân làm đầu vào hoặc một đối số hàm và tạo ra cách phát âm của nó. Đầu ra phải có viết hoa đúng. Bạn có thể cho rằng độ dài của số này sẽ luôn là 4.

Ví dụ 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"

Đây là , vì vậy số byte ít nhất sẽ thắng.


6
Đây là một mẹo hữu ích cho bất kỳ ai học các bảng hex hex: Bảng F lần có thể được tính trên 16 ngón tay và ngón chân của bạn (không bao gồm ngón tay cái và ngón chân cái). Đơn giản chỉ cần xếp chúng thành một hàng và gấp cái thứ n xuống để tính F x n. Số chữ số ở bên trái của chữ số được gập xuống là chữ số đầu tiên và số chữ số ở bên phải của chữ số được gập xuống là chữ số thứ hai, cho phép bạn tính bất kỳ 2 chữ số nào. Ví dụ, gấp chữ số C xuống để cho F x C = Bibbity bốn.
trichoplax

2
@trichoplax Con tôi đã rất ngạc nhiên khi lần đầu tiên tôi chỉ cho nó cách làm điều đó đối với số ngón tay trên ngón tay: D
Geobits

@Geobits đó là những gì tôi đã ngoại suy nó - Tôi thích trò lừa đó trong 9 giây khi còn bé.
trichoplax

@trichoplax Tôi nghĩ cắn có ý nghĩa hơn cho mục đích phát âm. Tôi đã cố gắng làm cho nó rõ ràng hơn nơi xuất hiện dấu gạch nối và chữ cái đầu tiên của đầu ra phải được viết hoa và phần còn lại bằng chữ thường.
Kade

4
bạn không đề cập đến "cắn" bất cứ nơi nào khác ngoài các ví dụ
Sparr

Câu trả lời:


9

Pyth - 312 293 286 251 byte

Thời gian để bắt đầu giảm dữ liệu, sắp tới.

Chương trình Pyth lớn nhất mà tôi từng viết! Vẫn có khả năng nén rất lớn với dữ liệu, cả chuyển đổi đại số và cơ sở, nhưng chỉ muốn đưa nó lên.

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

Tôi diễn giải đầu vào là hex bằng chữ thông qua Q mà nó tự động phát hiện với 0x. Sau đó, tôi chia nó 256 thành các byte và loại bỏ byte đầu tiên nếu nó bằng 0, sau đó ánh xạ nó qua hai mảng, một cho 0-1Fvà sau đó 20-F0. Cái thứ hai cũng có một divmod thông qua mảng đầu tiên. Tùy chọn đầu tiên có một dấu gạch ngang ở cuối và thứ hai có dấu gạch nối ở giữa và khoảng trắng ở cuối. Tham gia bằng "bitey ", viết hoa với phạm vi, và gạch nối với .svà chúng tôi tốt.

Phần nén cơ sở cũng thú vị vì lần đầu tiên tôi bắt đầu với chuyển đổi cơ bản 128 -> 256. Nhưng bây giờ, những gì tôi đang làm là sử dụng "q"như dải phân cách thay vì không gian. Vì vậy, bây giờ tôi có thể coi chuỗi là một chuỗi 26 cơ sở xLG, cải thiện khả năng nén rất nhiều.

Hãy thử nó ở đây trực tuyến .

Bộ thử nghiệm .


Tôi biết nó không có trong câu hỏi, nhưng tôi nghĩ bạn nên thử ngoại suy với nhiều số hơn, như 0x1122330x93FBAC09
vrwim

2
@ Tôi nghĩ rằng mô hình phát âm này mất nó, uh, khả năng tồn tại vào thời điểm đó, haha. Bạn có thể tưởng tượng thực sự nói Ninety-three bitey fleventy-bee halfy atta-cee bitey nine?
Kade

Tôi nghĩ rằng một cái gì đó đã bị hỏng, ngay bây giờ mã của bạn chỉ tạo ra một lượng lớn Truebiteys và Falsebiteys.
Kade

@ Vioz- Ternaries bị hỏng. Isaacg đã đảo ngược trật tự của họ một vài ngày trước. Tôi có thể đi và thay đổi chúng và thực tế là tiết kiệm được một vài byte, nhưng chúng giống như 14.
Maltysen 21/07/2015

Ah tôi thấy. Vậy phiên bản nào của Pyth bảo tồn chức năng?
Kade

5

Java - 856 byte

Không ngắn nhưng ít nhất là câu trả lời thứ hai;)

Đó là một phương pháp được gọi là String p(String n)sẽ thực hiện công việc:

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 byte

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

Tôi chắc chắn có những cải tiến sẽ được thực hiện. Đã thêm tiền thưởng, nó phân tích các chuỗi hex có độ dài tùy ý.

EDIT: Rất tiếc, nó không hoạt động ngay khi có các số 0 đứng đầu. Hừm.

EDIT 2: Đã sửa, tôi nghĩ vậy. Câu đố

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.