16 진수 발음


26

16 진수 발음

쇼 실리콘 밸리를 시작하지 않은 분들에게이 도전은 다음과 같은 교류 ( 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'fleventy-five'가 아니라 중요한 질문을 제기합니다. 실제로 대화에서 16 진법을 어떻게 발음하겠습니까? 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 진수를 두 그룹으로 나눌 수 있으며 위의 표에서 발음과 숫자에 대한 일반적인 영어 발음을 결정할 수 있습니다. 예를 들어 0xFFAB, 우리는 얻을 것 Fleventy-eff bitey atta-bee입니다.

와 같은 숫자가 포함되어 있으면 0xF5AB인쇄 Fleventy-five bitey atta-bee합니다. 또한 숫자가 그룹 중 하나를 시작하면 "tens"발음을 사용해야합니다. 예를 들어, 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-four0을 무시하고 인쇄 Dickety-bitey fleventy-four합니다.

하이픈은 두 그룹으로 만 나타나야합니다. 즉, 첫 번째 그룹이 한 단어 만 아니라면 bitey가 하이픈으로 그룹에 연결되어서는 안됩니다! 그래서 0x04F4이 될 것입니다 four-bitey fleventy-four,하지만 0x44F4것입니다 forty-four bitey fleventy-four. 으로 trichoplax는 말했다 라운드 수를 다음과 같은 경우, 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을 계산하십시오. 접힌 자릿수 왼쪽의 자릿수는 첫 번째 숫자이며, 접힌 자릿수 오른쪽의 자릿수는 두 번째 숫자이며, 두 자릿수를 계산할 수 있습니다. 예를 들어, C 번째 숫자를 접어 F x C = Bibbity 4를 제공하십시오.
trichoplax

2
@trichoplax 처음으로 그에게 손가락으로
구십 인

@Geobits 그것이 내가 추정 한 것입니다. 저는 9s의 어린 시절 트릭을 좋아했습니다.
trichoplax

@ trichoplax 나는 bitey가 발음의 목적에 더 의미가 있다고 생각합니다. 하이픈이 나타나는 위치를 더 명확하게하려고 노력했으며 출력의 첫 글자는 대문자를 사용해야하며 나머지는 소문자로 표시해야합니다.
Kade

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하고 0이면 첫 번째 바이트를 제거한 다음 for 0-1F와 then의 두 배열을 통해 매핑합니다 20-F0. 두 번째 것은 첫 번째 배열을 통해서도 divmod를 얻습니다. 첫 번째 옵션은 끝에 하이픈을, 두 번째 옵션은 중간에 하이픈을, 끝에 공백을 가져옵니다. 에 가입하고 "bitey "범위를 대문자로 사용 .s하고 하이픈을 제거하면 좋습니다.

기본 압축 부분은 또한 기본 128-> 256 변환으로 시작했기 때문에 흥미 롭습니다. 그러나 지금 내가하고있는 일은 "q"공간 대신 ​​구분 기호로 사용하는 것입니다. 따라서 이제 문자열을을 사용하여 기본 26 문자열로 간주하여 xLG압축을 엄청나게 향상 시킬 수 있습니다 .

온라인으로 사용해보십시오 .

테스트 스위트 .


나는이 문제에없는 것을 알고,하지만 난 당신이 같은 더 많은 숫자로 외삽 시도해야한다고 생각 0x112233하고0x93FBAC09
vrwim

2
@이 발음 모델은 그 시점에서 생존력을 잃는 것 같습니다. 실제로 말하는 것을 상상할 수 Ninety-three bitey fleventy-bee halfy atta-cee bitey nine있습니까?
Kade

나는 무언가가 깨 졌다고 생각한다. 지금 당신의 코드는 엄청난 양의 Truebiteys와 Falsebiteys를 생성한다 .
Kade

@ Vioz- Ternaries가 고장났습니다. Isaacg는 며칠 전에 주문을 취소했습니다. 나는 가서 그들을 바꿀 수 있고 실제로 몇 바이트를 절약 할 수 있지만, 그것들은 14와 같습니다.
Maltysen

아, 알겠습니다 그렇다면 Pyth의 어떤 버전이 기능을 유지합니까?
Kade

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

개선이 필요하다고 확신합니다. 보너스가 추가되어 임의 길이의 16 진 문자열을 구문 분석합니다.

편집 : 으아 아, 선행 0이있을 때 제대로 작동하지 않습니다. 흠.

편집 2 : 고쳤다 고 생각합니다. JSFiddle

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.