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
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 rearanjas
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.
ennea-
, dar eu ' am auzit " nonagon " mai des decât " eneagonul ", așa că am mers cu asta.deca
, vă mulțumim că ați subliniat acest lucru. 110 – hectadecagon, 120 – hectaicosigon. 101 – hectakaihenagon.