Hexの発音


26

Hexの発音

ショーシリコンバレーを始めていない人にとって、この課題は次のようなやり取りに触発されます(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、「15」ではなく、これは重要な質問を提起することに注意する必要があります-あなたは実際に会話でhexをどのように発音しますか?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つの長さの16進数を2つの2つのグループに分割し、上記の表から発音と、数字の一般的な英語の発音を決定できます。したがって、例0xFFABでは、を取得しFleventy-eff bitey atta-beeます。

などの数字が含まれている場合は、0xF5AB印刷しますFleventy-five bitey atta-bee。また、番号がグループの1つを開始する場合、「10」の発音を使用する必要があります。たとえば、0x5FAAになりFifty-eff bitey atta-ayます。あなたがのようなものを持っている場合0x1FAC、これはそうでしょうEffteen bitey atta-cee。ただし、このルールをに使用する場合0x1AF4a-teenを混乱させる可能性があるためeighteen、Yを付加する必要があります。したがって、正しい出力は次のようになります。Yayteen bitey fleventy-four

の場合0xD0F4、実行する代わりにDickety-zero bitey fleventy-four、ゼロを無視して印刷しますDickety-bitey fleventy-four

ハイフンは2つのグループ内にのみ表示する必要があります。つまり、最初のグループが1語のみである場合を除き、biteyをハイフンでどちらのグループにも接続しないでください。そう0x04F4だろうfour-bitey fleventy-four、しかし0x44F4でしょうforty-four bitey fleventy-four。以下のようセンモウヒラムシが言ったラウンド数を以下のとき、biteyにのみhyphenedする必要があります。

これがどのように機能するかを包括的に見るには、以下のI / Oの例をご覧ください。

目的

入力または関数の引数として16進文字列を取り、その発音を生成するプログラムまたは関数を作成します。出力には適切な大文字が必要です。この数値の長さは常に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進数の時間テーブルを学んでいる人にとって便利なトリックは次のとおりです。Fの時間テーブルは、16本の指とつま先(親指と足の親指を除く)で計算できます。単純にそれらを一列に並べ、n番目を折り畳んでF x nを計算します。折りたたまれた数字の左側の桁数が1桁目であり、折り畳まれた数字の右側の桁数が2桁目であり、2桁の倍数を計算できます。たとえば、C番目の数字を下に折り、F x C = Bibbity 4にします。
trichoplax

2
@trichoplax私の子供に最初に指でナインのためにそれを行う方法を示したとき、私の子供は驚きました:D
Geobits

@Geobitsそれは私がそれを外挿したものです-私は子供の頃9代のためにそのトリックが大好きでした。
-trichoplax

@trichoplax biteyは発音の目的にはもっと意味があると思います。ハイフンが表示される場所を明確にし、出力の最初の文字を大文字にし、残りを小文字にする必要があります。
ケード

4
例以外の場所で「bitey」に言及しない
-Sparr

回答:


9

Pyth - 312の 293 286 251バイト

データの削減を開始する時が来ています。

私が今まで書いた聖なる最大のPythプログラム!アルゴリズムとベース変換の両方で、データを使用してまだ大きな圧縮が可能ですが、これを配置したかっただけです。

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

入力をQを介して16進リテラルとして解釈します0x。私はバイトにそれ256 divmod、そして2つのアレイのための1つを介してマッピング、そのゼロ場合は、最初のバイトを削除0-1Fした後20-F0。2番目のものも、最初の配列を通してdivmodを取得します。最初のオプションは最後にハイペンを取得し、2番目のオプションは中央にハイフンを、最後にスペースを取得します。参加し"bitey "、範囲を大文字にし、ハイフンを削除し.sてください。

最初に基本的な128-> 256変換から始めたので、ベース圧縮部分も興味深いです。しかし今、私がやっていることは"q"、スペースの代わりにセパレータとして使用しています。したがって、文字列をでベース26文字列と見なすことができxLG、圧縮率が大幅に向上します。

こちらからオンラインでお試しください

テストスイート


私はそれが問題ではないことを知っていますが、次のように0x112233、より多くの数値に外挿してみるべきだと思います0x93FBAC09
-vrwim

2
@この発音モデルは、その時点での実行可能性を失うと思います、ハハ。実際に言っていることを想像できますNinety-three bitey fleventy-bee halfy atta-cee bitey nineか?
カデ

何かが壊れていると思いますが、今のコードは大量のTruebiteysとFalsebiteys しか生成しません。
カデ

@ Vioz- Ternariesが壊れています。Isaacgは数日前に順序を逆にしました。私はそれらを変更し、実際に数バイト節約できましたが、それらは14のようなもの
です。-マルティセン

ああ、なるほど。それでは、どのバージョンのPythが機能を保持していますか?
カデ

5

Java-856バイト

短くはないが、少なくとも2番目の回答;)

これ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

Javascript- 577719バイト

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

改善すべき点があると確信しています。ボーナスが追加され、任意の長さの16進文字列を解析します。

編集:おっと、先行ゼロがある場合は正しく動作しません。ふむ

編集2:修正、私は思う。JSFiddle

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.