Préfixes de polygone

17

Les polygones sont nommés d'après le nombre de côtés qu'ils ont. Un pentagone a 5 côtés, un octogone a 8 côtés. Mais comment sont-ils nommés? Quel est le nom d'un polygone à 248 côtés?

Tous les polygones sont suffixés avec -gon. Il existe des préfixes spécifiques pour chaque polygone en fonction du nombre de côtés. Voici les préfixes des nombres inférieurs:

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

Les polygones de 21 à 99 côtés ont un système différent. Prenez le préfixe du chiffre des dizaines (qui se trouve dans la colonne de gauche), celui des chiffres (colonne de droite ci-dessous), puis collez un "kai" entre eux pour obtenir (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

Les polygones latéraux à 3 chiffres sont nommés de la même manière. Un polygone à 100 côtés est appelé hectogon. Prenez le chiffre des centaines, trouvez-le sur la colonne des chiffres, puis collez un "hecta" à sa droite. Maintenant nombre de dizaines et ceux comme ci - dessus: (hundreds)hecta(tens)kai(ones)gon. Si le chiffre des centaines est un 1, ne mettez pas le préfixe derrière "hecta"; si la place des uns est 0, omettez la section (uns).

Donc, étant donné un entier (3 <= n <= 999), retournez le nom d'un polygone à n côtés. n-gonn'est pas une réponse valide: P

Comme avec tout golf de code, le code le plus court gagne.

beary605
la source
100 faces est hectogon ou hectagon? Le chiffre des dizaines supérieur à 100 n'est pas clair non plus. Je suppose que 110 et 120 sont hectahenakaigon et hectadikaigon (ou hectaicosikaigon?)
ugoren
En outre, 101 côtés est "hectakaihenagon" (si je comprends bien de vos règles) ou "hectahenagon"?
ugoren
@ beary605 Je pense que nona- a tort. Ce serait du latin et les autres, hepta-, hexa- sont du grec. Ça devrait être ennea-. Je sais que le wikipedia dit que le nonagone est OK!
felipa
@felipa: Je débattais de l'opportunité de l'avoir ennea-, mais j'ai entendu "nonagon" plus souvent que "enneagon", donc je suis allé avec ça.
beary605
@ugoren: 100 - hectagon, et je n'ai pas vu que je n'en avais pas deca, merci de l'avoir signalé. 110 - hectadécagone, 120 - hectaicosigon. 101 - hectakaihenagon.
beary605

Réponses:

5

C, 401 , 391

Permet de mettre quelque chose là-bas donc il y a au moins une réponse pour référence :-)

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

Testez avec:

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

Sous-ensemble de sortie:

  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
bébé-lapin
la source
1
Agréable. Vous pouvez remplacer if..elsepar ?:(et ;par ,) pour enregistrer certains caractères. Des t>1&&p(t)changements similaires peuvent également aider. Et je ne suis pas sûr, mais vous pourriez peut-être réorganiser spour que les constantes que vous utilisez soient à un seul chiffre.
ugoren
1

JavaScript - 405 386

Version 1: (405 caractères)

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 caractères)

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

Exemple de sortie:

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

Cobra - 370 octets

Il s'agit actuellement d'une fonction, mais si cela n'est pas autorisé, je la modifierai.

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'

Et pour une raison quelconque, le surligneur cobra a été //défini comme un commentaire, ce qui est faux.

Οurous
la source