Polygon-Präfixe

17

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

Alle Polygone sind mit einem Suffix versehen -gon. Abhängig von der Anzahl der Seiten gibt es für jedes Polygon spezifische Präfixe. Hier sind die Präfixe für die niedrigeren 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 (in der linken Spalte) und die Einerstelle (in der rechten Spalte unten) und kleben Sie dann ein "kai" dazwischen, um zu erhalten (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

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 mit den Einerstellen und kleben Sie ein "Hekta" rechts daneben. Jetzt Anzahl von den Zehner und wie oben: (hundreds)hecta(tens)kai(ones)gon. Wenn die Hunderterstelle eine 1 ist, setzen Sie das Präfix nicht hinter "Hekta". Wenn die Einerstelle 0 ist, lassen Sie den Abschnitt (Einsen) weg.

Geben Sie bei einer Ganzzahl (3 <= n <= 999) den Namen eines n-seitigen Polygons zurück. n-gonist keine gültige Antwort: P

Wie bei jedem Codegolf gewinnt der kürzeste Code.

beary605
quelle
100-seitig ist Hektogon oder Hektagon? Die Zehnerstelle über 100 ist ebenfalls unklar. Ich denke, 110 und 120 sind Hektahenakaigon und Hektadikaigon (oder Hektaicosikaigon?)
Ugoren
Auch 101-seitig ist "Hektakaihenagon" (wie ich aus Ihren Regeln verstehe) oder "Hektahenagon"?
Ugoren
@ 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
@felipa: Ich habe überlegt, ob ich es haben soll ennea-, aber ich habe öfter "nonagon" als "enneagon" gehört, also bin ich damit umgegangen.
beary605
@ugoren: 100 - Hektagon, und ich habe nicht gesehen, dass ich nicht hatte deca, danke, dass Sie darauf hingewiesen haben. 110 Hektadekagon, 120 Hektaicosigon. 101 - Hektakaihenagon.
Beary605

Antworten:

5

C 401 , 391

Lasst uns etwas da draußen platzieren, 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 Sie 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
Baby-Kaninchen
quelle
1
Nett. Sie können ersetzen if..elsemit ?:(und ;mit ,) um ein paar 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 es neu anordnen, ssodass die von Ihnen verwendeten Konstanten einstellig sind.
Ugoren
1

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 
Дамян Станчев
quelle
0

Cobra - 370 Bytes

Dies ist momentan eine Funktion, aber wenn das nicht erlaubt ist, ändere ich es.

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 //einen Kommentar gesetzt, was falsch ist.

Οurous
quelle