### Polygon prefixes

Polygons are named after the number of sides that they have. A pentagon has 5 sides, an octagon has 8 sides. But how are they named? What's the name for a 248-sided polygon?

All polygons are suffixed with

`-gon`

. There are specific prefixes for each polygon depending on the number of sides. Here are the prefixes for the lower numbers:`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 - icosaPolygons with 21 to 99 sides have a different system. Take the prefix for the tens digit (found on the left column), the ones digit (right column below), and then stick a "kai" between them to get

`(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 - nonaThe 3-digit sided polygons are named in a similar fashion. A 100-sided polygon is called a hectogon. Take the hundreds digit, find it on the column for ones digits, then stick a "hecta" to its right. Now number off the tens and ones like above:

`(hundreds)hecta(tens)kai(ones)gon`

. If the hundreds place digit is a 1, don't put the prefix behind "hecta"; if the ones place is 0, then omit the (ones) section.So, given an integer (3 <= n <= 999), return the name of an n-sided polygon.

`n-gon`

is not a valid answer :PAs with all code golf, shortest code wins.

Also, 101-sided is "hectakaihenagon" (as I understand from your rules) or "hectahenagon"?

@beary605 I think nona- is wrong. That would be from latin and the others, hepta-, hexa- are from greek. It should be ennea-. I know the wikipedia says nonagon is OK!

@felipa: I was debating whether to have it be `ennea-`, but I've heard "nonagon" more often than "enneagon", so I went with that.

@ugoren: 100 - hectagon, and I didn't see that I didn't have `deca`, thanks for pointing that out. 110 - hectadecagon, 120 - hectaicosigon. 101 - hectakaihenagon.

so the rules for 3..20 do not apply to 103..120 and instead we use the tens+ones rules?

@baby-rabbit: Yes.

## C,

~~401~~, 391Lets put something out there so there is at least one answer for reference :-)

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

}Test with:

`main(){`

for(int i=3;i<=999;i++){

printf("%3d: ",i);n(i);

}

}Subset of output:

`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: nonahectanonacontakainonagonNice. You can replace `if..else` with `?:` (and `;` with `,`) to save some characters. Also `t>1&&p(t)` and similar changes can help. And I'm not sure, but perhaps you could rearrange `s` so that the constants you use would be single digit.

## JavaScript -

~~405~~386Version 1: (405 chars)

`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')`

Version 2: (386 chars)

`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')`

Output example:

`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# Cobra - 370 bytes

This is currently a function, but if that isn't allowed then I'll change it.

`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'And for some reason the cobra highlighter has

`//`

set as a comment, which is wrong.

License under CC-BY-SA with attribution

Content dated before 7/24/2021 11:53 AM

ugoren 8 years ago

100-sided is hectogon or hectagon? The tens digit above 100 is also unclear. I guess 110 and 120 are hectahenakaigon and hectadikaigon (or hectaicosikaigon?)