다각형 접두사


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.