Polygone werden nach der Anzahl ihrer Seiten benannt. Ein Fünfeck hat 5 Seiten, ein Achteck hat 8 Seiten. Aber wie heißen sie? Wie heißt ein Polygon mit 248 Seiten?

Alle Polygone werden mit dem Suffix -gon versehen. Für jedes Polygon gibt es je nach Anzahl der Seiten spezifische Präfixe Hier sind die Präfixe für die unteren Zahlen:

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 

Polygone mit 21 bis 99 Seiten haben ein anderes System. Nehmen Sie das Präfix für die Zehnerstelle (auf die linke Spalte), die Einerstelle (rechte Spalte unten), und kleben Sie dann ein „kai“ zwischen sie, um (tens)kai(ones)gon zu erhalten.

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 

Die dreistelligen Polygone werden auf ähnliche Weise benannt. Ein 100-seitiges Polygon wird als Hektogon bezeichnet. Nehmen Sie die Hunderterstelle, suchen Sie sie in der Spalte für eine Stelle und kleben Sie dann ein „Hekta“. rechts davon. Zählen Sie nun die Zehner und Einsen wie oben ab: (hundreds)hecta(tens)kai(ones)gon. Wenn die Hunderterstelle eine 1 ist, setzen Sie das Präfix nicht hinter „hecta“; Wenn die Eins-Stelle 0 ist, lassen Sie den Abschnitt (Einsen) weg.

Geben Sie also eine Ganzzahl an (3 < = n = 999), geben Sie den Namen eines n-seitigen Polygons zurück. n-gon ist keine gültige Antwort: P

Wie bei jedem Code Golf gewinnt der kürzeste Code.

Kommentare

  • 100-seitig ist Hektogon oder Hektagon? Die Zehnerstelle über 100 ist ebenfalls unklar. Ich denke, 110 und 120 sind Hektahenakaigon und Hektadikaigon (oder Hektaicosikaigon?)
  • Außerdem ist 101-seitig “ Hektakaihenagon “ (wie ich aus Ihren Regeln verstehe) oder “ Hektahenagon „?
  • @ beary605 Ich denke nona- ist falsch. Das wäre aus dem Lateinischen und die anderen, Hepta-, Hexa- sind aus dem Griechischen. Es sollte ennea- sein. Ich weiß, dass die Wikipedia sagt, dass Nonagon in Ordnung ist!
  • @felipa: Ich habe überlegt, ob es ennea- sein soll, aber ich ‚ habe “ nonagon “ öfter gehört als “ enneagon „, also habe ich mich dafür entschieden.
  • @ugoren: 100 – Hektagon, und ich habe ‚ nicht gesehen, dass ich es nicht getan habe ‚ deca, danke, dass Sie darauf hingewiesen haben. 110 – Hektadecagon, 120 – Hektaicosigon. 101 – Hektakaihenagon.

Antwort

C, 401 , 391

Lassen Sie uns etwas veröffentlichen, damit es mindestens eine Antwort als Referenz gibt 🙂

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

Testen mit:

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

Teilmenge der Ausgabe:

 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 

Kommentare

  • Schön. Sie können if..else durch ?: (und ; durch ), um einige Zeichen zu speichern. Auch t>1&&p(t) und ähnliche Änderungen können helfen. Und ich ‚ bin mir nicht sicher, aber vielleicht könnten Sie s neu anordnen, sodass die von Ihnen verwendeten Konstanten einstellig sind.

Antwort

JavaScript – 405 386

Version 1: (405 Zeichen)

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

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

Ausgabebeispiel:

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 

Antwort

Cobra – 370 Bytes

Dies ist derzeit eine Funktion, aber wenn dies nicht zulässig ist, werde ich sie ändern.

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" 

Und aus irgendeinem Grund hat der Cobra-Textmarker // als Kommentar festgelegt, was falsch ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.