[Question]
  [
# [Pronouncing Hex](http://www.bzarg.com/p/how-to-pronounce-hexadecimal/)
For those of you uninitiated with the show Silicon Valley, this challenge is inspired by an exchange that goes like this ([YouTube](https://www.youtube.com/watch?v=_zTpwNR5Bf4)):
```
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.
```
It should be noted that technically, `0x9 * 0xF = 0x87`, not 'fleventy-five', but this brings up an important question - how would you actually pronounce hex in conversation? It's not like `oh ex eff eff` flows off the tongue easily, so what should we do? Here's a handy pronunciation chart we will follow.
```
A = ay       A0 = atta-       
B = bee      B0 = bibbity-    
C = cee      C0 = city-       
D = dee      D0 = dickety-    
E = ee       E0 = ebbity-     
F = eff      F0 = fleventy-   
```
We can split a 4-length hex number into two groups of two, and determine the pronunciation from the table above, as well as common English pronunciation for numbers. So, for the example `0xFFAB`, we would get `Fleventy-eff bitey atta-bee`.
If a number is included, such as `0xF5AB`, you would print `Fleventy-five bitey atta-bee`. Also, if a number starts one of the groups, you should use it's "tens" pronunciation. For example, `0x5FAA` would become `Fifty-eff bitey atta-ay`. In the case where you have something like `0x1FAC`, this would be `Effteen bitey atta-cee`. But, if this rule were to be used for `0x1AF4`, `a-teen` could be confused for `eighteen`, so you must prepend a Y. So, the correct output would be `Yayteen bitey fleventy-four`
In the case of `0xD0F4`, instead of doing `Dickety-zero bitey fleventy-four`, we would ignore the zero and print `Dickety-bitey fleventy-four`.
Hyphens should only appear within the groups of two, i.e. bitey should not be connected to either group with a hyphen unless the first group is only one word! So `0x04F4` would be `four-bitey fleventy-four`, but `0x44F4` would be `forty-four bitey fleventy-four`. As *trichoplax* said, bitey should only be hyphened when following a round number.
For a comprehensive look at how this will work, check out the example I/O below.
# Objective
Create a *program or function* that will take a hexadecimal string as **input or a function argument** and produce it's pronunciation. The output must have proper capitalization. You may assume that the length of this number will always be 4.
# Example 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"
```
---
This is [code-golf](/questions/tagged/code-golf "show questions tagged 'code-golf'"), so least number of bytes wins.
  
[Answer]
# Pyth - 312 293 286 251 bytes
Time to start reducing the data, more coming.
Holy biggest Pyth program I've ever written! There is still huge compression possible with the data, both algortihimically and base conversion, but just wanted to put this up.
```
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\-
```
I interpret input as hex literal through Q which it automatically detect with the `0x`. Then I divmod it 256 into the bytes, and remove the first byte if its zero, then map it through two arrays, one for `0-1F` and then `20-F0`. The second one gets a divmod through the first array also. The first option gets a hypen at the end, and the second get a hyphen at the middle and a space at the end. Join by `"bitey "`, capitalize with range, and strip hyphens with `.s` and we're good.
The base compression part is also interesting because I first started out with basic 128 -> 256 conversion. But now, what I am doing is using `"q"` as the separator instead of space. Thus I can now consider the string as a base 26 string with `xLG`, improving compression tremendously.
[Try it here online](http://pyth.herokuapp.com/?code=Kcs%40LGjC%22%1E%0Eq%16Nj%C3%86%0B%C3%89%C3%BD(7l%C3%A4Q%C2%ABI%3Fsf%10%C2%8F%03%C3%A7%C3%82%C3%98%5E%C3%90%C3%BB%C3%BC%08%C2%BB%C2%98%09%C2%83%08u%24%C3%90%C3%83o%C3%B3%7D%0EQ%C3%9B%01%C3%A3%C2%B4Hf%C2%AE%C2%8A%C2%94%3FN%C3%A2%C2%B2-%C2%9AY%C3%9C%C2%9EZ%C3%947%C3%82%C3%BE%C3%A6X%23%1D%5C%22%C3%A5%C3%98%2226%5Cq%3D%2BK%3EK11J.e%3F%2B%3Fbnb%5C%7C%40K%2B16k%22ty%22-kTbc%22++twen+%7C+for+%7C+%7C+%7C+%7C+%7C+atta+bibbi+ci+dicke+ebbi+fleven%22d.srj%22bitey+%22m%3F%2B%2B%40Kd%3Fk%3Cd18%22teen%22%5C-%3Cd32%2Bj%5C-%40V%2CJKfT.Dd16%5C+%3FGh%3DG.DQ256tG4%5C-&input=0x1AFB&debug=1).
[Test suite](http://pyth.herokuapp.com/?code=Kcs%40LGjC%22%1E%0Eq%16Nj%C3%86%0B%C3%89%C3%BD(7l%C3%A4Q%C2%ABI%3Fsf%10%C2%8F%03%C3%A7%C3%82%C3%98%5E%C3%90%C3%BB%C3%BC%08%C2%BB%C2%98%09%C2%83%08u%24%C3%90%C3%83o%C3%B3%7D%0EQ%C3%9B%01%C3%A3%C2%B4Hf%C2%AE%C2%8A%C2%94%3FN%C3%A2%C2%B2-%C2%9AY%C3%9C%C2%9EZ%C3%947%C3%82%C3%BE%C3%A6X%23%1D%5C%22%C3%A5%C3%98%2226%5Cq%3D%2BK%3EK11J.e%3F%2B%3Fbnb%5C%7C%40K%2B16k%22ty%22-kTbc%22++twen+%7C+for+%7C+%7C+%7C+%7C+%7C+atta+bibbi+ci+dicke+ebbi+fleven%22dV.Q.srj%22bitey+%22m%3F%2B%2B%40Kd%3Fk%3Cd18%22teen%22%5C-%3Cd32%2Bj%5C-%40V%2CJKfT.Dd16%5C+%3FGh%3DG.DN256tG4%5C-&input=0xFFFF%0A0x0000%0A0x0010%0A0x0100%0A0x1110%0A0xBEEF%0A0x9999%0A0xA1B2%0A0x3C4F%0A0x17AB%0A0x1AFB%0A0xAAAA&debug=0).
[Answer]
## Java - 856 bytes
Not short but at least the second answer ;)
It's a method called `String p(String n)` which will do the job: 
```
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);}
```
[Answer]
## Javascript - 577 719 bytes
```
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-"}
```
I'm sure there are improvements to be made. Added bonus, it parses arbitrary length hex strings.
EDIT: Whoops, it doesn't work right when there are leading zeros. Hm.
EDIT 2: Fixed, I think. [JSFiddle](https://jsfiddle.net/82zyc8ne/)
]