Polygoner är uppkallade efter antalet sidor som de har. En femkant har 5 sidor, en åttkant har 8 sidor. Men hur heter de? Vad heter namnet på en 248-sidig polygon?

Alla polygoner är suffix med -gon. Det finns specifika prefix för varje polygon beroende på antalet sidor Här är prefixen för de lägre siffrorna:

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 

Polygoner med 21 till 99 sidor har ett annat system. Ta prefixet för tiotalet (finns på den vänstra kolumnen), den siffra (höger kolumn nedan), och stick sedan en ”kai” mellan dem för att få (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 

De 3-siffriga polygonerna har samma namn. En 100-sidig polygon kallas en hektogon. Ta hundratals siffran, hitta den i kolumnen för siffror och stick sedan en ”hekta” till höger. Räkna nu ut tiotalet som ovan: (hundreds)hecta(tens)kai(ones)gon. Om siffran hundratals är 1, lägg inte prefixet bakom ”hekta”; om platsen är 0, utelämna sedan sektionen (ones).

Så, med ett heltal (3 < = n < = 999), returnera namnet på en n-sidig polygon. n-gon är inte ett giltigt svar: P

Som med all kodgolf vinner kortaste kod.

Kommentarer

  • 100-sidig är hekton eller hektagon? Tiotalet över 100 är också oklart. Jag antar att 110 och 120 är hectahenakaigon och hectadikaigon (eller hectaicosikaigon?)
  • Dessutom är 101-sidig " hectakaihenagon " (som jag förstår av dina regler) eller " hectahenagon "?
  • @ beary605 Jag tror inte- är fel. Det skulle vara från latin och de andra, hepta-, hexa- är från grekiska. Det borde vara ennea-. Jag vet att wikipedia säger att nonagon är OK!
  • @felipa: Jag diskuterade om det skulle vara ennea-, men jag ' har hört " nonagon " oftare än " enneagon ", så jag gick med det.
  • @ugoren: 100 – hektagon, och jag såg inte ' att jag inte ' t har deca, tack för att du påpekade det. 110 – hektadekagon, 120 – hektaikosigon. 101 – hektakaihenagon.

Svar

C, 401 , 391

Låt oss lägga ut något så att det finns minst ett svar som referens 🙂

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

Testa med:

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

Delmängd av utdata:

 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 

Kommentarer

  • Trevligt. Du kan ersätta if..else med ?: (och ; med ,) för att spara några tecken. Även t>1&&p(t) och liknande ändringar kan hjälpa till. Och jag ' är inte säker, men kanske kan du ordna om s så att konstanterna du använder är ensiffriga.

Svar

JavaScript – 405 386

Version 1: (405 tecken)

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 tecken)

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

Utgångsexempel:

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 

Svar

Cobra – 370 byte

Det här är för närvarande en funktion, men om det inte är tillåtet ändrar jag den.

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" 

Och av någon anledning har cobra highlighter // ange som en kommentar, vilket är fel.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *