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
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. Ookt>1&&p(t)
en soortgelijke wijzigingen kunnen helpen. En ik ' ben niet zeker, maar misschien zou jes
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.
ennea-
zou zijn, maar ik ' heb " nonagon " vaker gehoord dan " enneagon ", dus ik ging ermee akkoord.deca
, bedankt dat je erop wijst. 110 – hectadecagon, 120 – hectaicosigon. 101 – hectakaihenagon.