다각형 접두사


17

다각형의 변 수에 따라 이름이 지정됩니다. 오각형은 5면, 팔각형은 8면입니다. 그러나 그들은 어떻게 지명됩니까? 248면 다각형의 이름은 무엇입니까?

모든 다각형에는 접미사가 붙습니다 -gon. 변의 수에 따라 각 다각형마다 특정 접두사가 있습니다. 낮은 숫자의 접두어는 다음과 같습니다.

3 - tri
4 - tetra
5 - penta
6 - hexa
7 - hepta
8 - octa
9 - nona
10 - deca
11 - undeca
12 - dodeca
13 - triskaideca
14 - tetradeca
15 - pentadeca
16 - hexadeca
17 - heptadeca
18 - octadeca
19 - nonadeca
20 - icosa

면이 21 ~ 99 개인 다각형은 시스템이 다릅니다. 10 자리 숫자 (왼쪽 열에 있음), 1 자리 숫자 (아래 오른쪽 열)의 접두사를 가져 와서 그들 사이에 "kai"를 붙이십시오 (tens)kai(ones)gon.

10 - deca        | 1 - hena
20 - icosi       | 2 - di
30 - triaconta   | 3 - tri
40 - tetraconta  | 4 - tetra
50 - pentaconta  | 5 - penta
60 - hexaconta   | 6 - hexa
70 - heptaconta  | 7 - hepta
80 - octaconta   | 8 - octa
90 - nonaconta   | 9 - nona

3 자리면 다각형은 비슷한 방식으로 명명됩니다. 100면 다각형은 hectogon이라고합니다. 수백 자리를 가져 와서 1 자리 숫자 열에서 찾은 다음 오른쪽에 "헥타르"를 붙입니다. 이제 위와 같이 수십 개를 번호로 지정하십시오 (hundreds)hecta(tens)kai(ones)gon. 백 자리 숫자가 1이면 접두사를 "헥타"뒤에 두지 마십시오. ones place가 0이면 (ones) 섹션을 생략하십시오.

따라서 정수 (3 <= n <= 999)가 주어지면 n면 다각형의 이름을 반환하십시오. n-gon정답이 아닙니다 : P

모든 코드 골프와 마찬가지로 가장 짧은 코드가 승리합니다.


100면은 hectogon 또는 hectagon입니까? 100 이상의 10 자리 숫자도 불분명합니다. 나는 110과 120이 hectahenakaigon과 hectadikaigon (또는 hectaicosikaigon?)이라고 생각합니다
ugoren

또한, 101면은 "헥타 카이 헤나 곤"(내 규칙에서 알 수 있듯이) 또는 "헥타 헤나 곤"입니까?
ugoren

@ beary605 나는 nona- 잘못 생각합니다. 그것은 라틴어에서 왔고 다른 것들은 hepta-, hexa-는 그리스에서 왔습니다. ennea-이어야합니다. 나는 Wikipedia가 nonagon이 좋다고 말합니다.
felipa

@felipa : 나는 그것이 있어야하는지에 관해 토론 ennea-하고 있었지만, "neagon"보다 "nonagon"을 더 자주 들었으므로 그와 함께 갔다.
beary605

@ugoren : 100-hectagon, 나는 그것을 가지고 있지 않아서 내가없는 것을 보지 못했습니다 deca. 110-헥타 데카 곤, 120-헥타 이코 시곤. 101-헥타 카이 헤나 곤.
beary605

답변:


5

C, 401 , 391

참조를 위해 적어도 하나의 답변이 있도록 거기에 무언가를 넣으십시오 :-)

char*s[]={"","hena","di","tri","tetra","penta","hexa","hepta","octa","nona","un","do","triskai","deca","icosi","tria","conta","kai","icosa","hecto","hecta","gon\n"};
p(i){printf(s[i]);}
t;n(i){
    if(i<10)
        p(i);   // ones
    else if(i<20){
        i-=10; 
        p(i+(i&&i<4)*9); // teens
        p(13); // "deca"
    }else if(i==20)
        p(18); // "icosa"
    else if(i==100)
        p(19); // "hecto"
    else{
        t=i/100;
        p(t>1?t:0); // hundreds
        p(t?20:0);  // "hecta"
        i%=100;
        t=i/10;
        p(t+(t&&t<4)*12); // tens
        p(t>2?16:0);      // "conta"
        i%=10;
        p(i?17:0); // "kai"
        p(i);      // ones
    }
    p(21); // "gon\n"
}

다음을 사용하여 테스트하십시오.

main(){
    for(int i=3;i<=999;i++){
        printf("%3d: ",i);n(i);
    }
}

출력의 서브 세트 :

  3: trigon
  4: tetragon
  5: pentagon
  6: hexagon
  7: heptagon
  8: octagon
  9: nonagon
 10: decagon
 11: undecagon
 12: dodecagon
 13: triskaidecagon
 14: tetradecagon
 15: pentadecagon
 16: hexadecagon
 17: heptadecagon
 18: octadecagon
 19: nonadecagon
 20: icosagon
 21: icosikaihenagon
 22: icosikaidigon
 23: icosikaitrigon
...
 99: nonacontakainonagon
100: hectogon
101: hectakaihenagon
102: hectakaidigon
103: hectakaitrigon
104: hectakaitetragon
105: hectakaipentagon
106: hectakaihexagon
107: hectakaiheptagon
108: hectakaioctagon
109: hectakainonagon
110: hectadecagon
111: hectadecakaihenagon
...
997: nonahectanonacontakaiheptagon
998: nonahectanonacontakaioctagon
999: nonahectanonacontakainonagon

1
좋은. 당신은 대체 할 수 if..else?:(과 ;,일부 문자를 저장). 또한 t>1&&p(t)비슷한 변화가 도움이 될 수 있습니다. 그리고 확실하지 않지만 아마도 s사용하는 상수가 한 자리가되도록 재 배열 할 수 있습니다.
ugoren

1

자바 스크립트 - 405 386

버전 1 : (405 자)

i=prompt(),o='0hena0di0tri0tetra0penta0hexa0hepta0octa0nona'.split(0),d='0W0icosi0triaQ0tetraQ0pentaQ0hexaQ0heptaQ0octaQ0nonaQ'.split(0),t='W0unW0doW0triskaiW0tetraW0pentaW0hexaW0heptaW0octaW0nonaW0icosa'.split(0),x=('000'+i).substr(-3).split('');alert((i<10?o[i]:i<21?t[i-10]:i==100?'hecto':(i<100?'':i<200?'hecta':o[x[0]]+'hecta')+d[x[1]]+'kai'+o[x[2]]).replace(/Q/g,'conta').replace(/W/g,'deca')+'gon')

버전 2 : (386 자)

i=prompt(),p='0tetra0penta0hexa0hepta0octa0nona',o='0hena0di0tri'+p,t=('W0unW0doW0triskai'+p.replace(/0/g,'W0')+'W0icosa').split(0),x=('000'+i).substr(-3).split(''),o=o.split(0);alert((i<10?o[i]:i<21?t[i-10]:i==100?'hecto':(i<100?'':i<200?'hecta':o[x[0]]+'hecta')+('0W0icosi0tria'+p.replace(/0/g,'Q0')+'Q').split(0)[x[1]]+'kai'+o[x[2]]).replace(/Q/g,'conta').replace(/W/g,'deca')+'gon')

출력 예 :

3: trigon
4: tetragon
5: pentagon
6: hexagon
7: heptagon
8: octagon
9: nonagon
10: decagon
11: undecagon
12: dodecagon
13: triskaidecagon
14: tetradecagon
15: pentadecagon
16: hexadecagon
17: heptadecagon
18: octadecagon
19: nonadecagon
20: icosagon
21: icosikaihenagon
22: icosikaidigon
23: icosikaitrigon
99: nonacontakainonagon
...
100: hectogon
101: hectakaihenagon
102: hectakaidigon
103: hectakaitrigon
104: hectakaitetragon
105: hectakaipentagon
106: hectakaihexagon
107: hectakaiheptagon
108: hectakaioctagon
109: hectakainonagon
110: hectadecakaigon
111: hectadecakaihenagon
...
997: nonahectanonacontakaiheptagon
998: nonahectanonacontakaioctagon
999: nonahectanonacontakainonagon 

0

코브라-370 바이트

이것은 현재 기능이지만 허용되지 않으면 변경하겠습니다.

def f(x) as String
    o='. hena di tri tetra penta hexa hepta octa nona'.split
    o[0],t,h,d='',['','deca','icosci','triconta'],['','hecta','dihecta','trihecta'],['undeca','dodeca','triskaideca']
    for z in 4:10,t,h,d=t+[o[z]+'conta'],h+[o[z]+'hecta'],d+[o[z]+'deca']
    for z in 10,t[z]+='kai'
    return if(x-100,h[x//100]+if(10<x<20,d[x-11],t[x%100//10]+o[x%10]),'hecto')+'gon'

그리고 어떤 이유로 코브라 형광펜은 //주석으로 설정했습니다.

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