Polygonen zijn genoemd naar het aantal zijden dat ze hebben. Een vijfhoek heeft 5 zijden, een achthoek heeft 8 zijden. Maar hoe worden ze genoemd? Wat is de naam van een 248-zijdige polygoon?

Alle polygonen hebben het achtervoegsel -gon. Er zijn specifieke voorvoegsels voor elke polygoon, afhankelijk van het aantal zijden . Hier zijn de voorvoegsels voor de lagere getallen:

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 

Polygonen met 21 tot 99 zijden hebben een ander systeem. Neem het voorvoegsel voor de tientallen (te vinden op de linkerkolom), het enen-cijfer (rechterkolom eronder), en plak een “kai” ertussen om (tens)kai(ones)gon te krijgen.

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 driecijferige polygonen worden op dezelfde manier genoemd. Een 100-zijdige polygoon wordt een hectogon genoemd. Neem het honderdtal, zoek het op de kolom voor eencijferige cijfers en plak een “hecta” rechts ervan. Nummer nu de tientallen en enen zoals hierboven: (hundreds)hecta(tens)kai(ones)gon. Als het cijfer voor de honderden plaatsen een 1 is, plaats het voorvoegsel dan niet achter “hecta”; als die plaats 0 is, laat dan de sectie (en) weg.

Dus, gegeven een geheel getal (3 < = n < = 999), geef de naam van een n-zijdige veelhoek terug. n-gon is geen geldig antwoord: P

Zoals met alle code golf, wint de kortste code.

Reacties

  • 100-zijdig is hectogon of hectagon? Het tiental boven de 100 is ook onduidelijk. Ik vermoed dat 110 en 120 hectahenakaigon en hectadikaigon (of hectaicosikaigon?) Zijn.
  • 101-zijdig is ook " hectakaihenagon " (zoals ik begrijp uit uw regels) of " hectahenagon "?
  • @ beary605 Ik denk niet- is fout. Dat zou van het Latijn zijn en de andere, hepta-, hexa- zijn van het Grieks. Het zou ennea moeten zijn. Ik weet dat de wikipedia zegt dat nonagon oké is!
  • @felipa: ik was aan het twijfelen of het ennea- zou zijn, maar ik ' heb " nonagon " vaker gehoord dan " enneagon ", dus ik ging ermee akkoord.
  • @ugoren: 100 – hectagon, en ik heb ' niet gezien dat ik niet ' t hebben deca, bedankt dat je erop wijst. 110 – hectadecagon, 120 – hectaicosigon. 101 – hectakaihenagon.

Antwoord

C, 401 , 391

Laten we daar iets naar buiten brengen, zodat er tenminste één antwoord is ter referentie 🙂

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 met:

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

Subset van uitvoer:

 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 

Reacties

  • Leuk. U kunt if..else vervangen door ?: (en ; door ,) om enkele karakters op te slaan. Ook t>1&&p(t) en soortgelijke wijzigingen kunnen helpen. En ik ' ben niet zeker, maar misschien zou je s kunnen herschikken zodat de constanten die je gebruikt uit één cijfer zouden bestaan.

Answer

JavaScript – 405 386

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

Versie 2: (386 karakters)

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

Uitvoervoorbeeld:

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 

Antwoord

Cobra – 370 bytes

Dit is momenteel een functie, maar als dat niet “is toegestaan, dan zal ik het veranderen.

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" 

En om de een of andere reden heeft de cobra-markeerstift // ingesteld als commentaar, wat fout is.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *