Poligoanele sunt numite după numărul de laturi pe care le au. Un pentagon are 5 laturi, un octagon are 8 laturi. Dar cum se numesc? Care este numele unui poligon cu 248 de fețe?

Toate poligoanele au sufixul cu -gon. Există prefixe specifice pentru fiecare poligon în funcție de numărul de laturi . Iată prefixele pentru numerele inferioare:

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 

Poligoanele cu 21 până la 99 de laturi au un sistem diferit. Luați prefixul pentru cifra zecilor (găsit pe coloana din stânga), cifrele celor (coloana din dreapta mai jos) și apoi lipiți un „kai” între ele pentru a obține (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 

Poligoanele cu 3 cifre sunt denumite într-un mod similar. Un poligon cu 100 de laturi se numește hectogon. Luați cifrele sutelor, găsiți-le pe coloană pentru câteva cifre, apoi lipiți un „hectar” la dreapta sa. Acum numerați zecile și cele de mai sus: (hundreds)hecta(tens)kai(ones)gon. Dacă cifra plasată a sutelor este 1, nu puneți prefixul în spatele „hectar”; dacă locul celor este 0, atunci omiteți secțiunea (ones).

Deci, dat un număr întreg (3 < = n < = 999), returnează numele unui poligon cu față n. n-gon nu este un răspuns valid: P

La fel ca în cazul tuturor codurilor de golf, cel mai scurt cod câștigă.

Comentarii

  • 100-laturi este hectogon sau hectagon? De asemenea, cifrele zecilor peste 100 sunt neclare. Presupun că 110 și 120 sunt hectahenakaigon și hectadikaigon (sau hectaicosikaigon?)
  • De asemenea, 101-laturi este " hectakaihenagon " (după cum înțeleg din regulile tale) sau " hectahenagon "?
  • @ beary605 cred că nona- este greșit. Asta ar fi din latină, iar celelalte, hepta-, hexa- sunt din greacă. Ar trebui să fie ennea-. Știu că Wikipedia spune că nonagon este OK!
  • @felipa: dezbăteam dacă să fie ennea-, dar eu ' am auzit " nonagon " mai des decât " eneagonul ", așa că am mers cu asta.
  • @ugoren: 100 – hectagon și nu ' nu am văzut că nu ' nu au deca, vă mulțumim că ați subliniat acest lucru. 110 – hectadecagon, 120 – hectaicosigon. 101 – hectakaihenagon.

Răspuns

C, 401 , 391

Să punem ceva acolo, astfel încât să existe cel puțin un răspuns pentru referință 🙂

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

Testează cu:

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

Subset de ieșire:

 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 

Comentarii

  • Frumos. Puteți înlocui if..else cu ?: (și ; cu ,) pentru a salva unele caractere. De asemenea, t>1&&p(t) și modificări similare vă pot ajuta. Și ' nu sunt sigur, dar poate ați putea rearanja s astfel încât constantele pe care le utilizați să fie dintr-o singură cifră.

Răspuns

JavaScript – 405 386

Versiunea 1: (405 caractere)

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

Versiunea 2: (386 caractere)

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

Exemplu de ieșire:

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 

Răspuns

Cobra – 370 octeți

Aceasta este în prezent o funcție, dar dacă nu este permisă, o voi schimba.

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" 

Și, dintr-un anumit motiv, evidențiatorul cobra are // setat ca un comentariu, ceea ce este greșit.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *