Çokgen önekleri


17

Çokgenler, sahip oldukları kenar sayısından sonra adlandırılır. Bir beşgenin 5 tarafı vardır, bir sekizgenin 8 tarafı vardır. Ama nasıl adlandırılıyorlar? 248 taraflı çokgenin adı nedir?

Tüm çokgenler eklenir -gon. Kenar sayısına bağlı olarak her çokgen için belirli önekler vardır. Daha küçük sayılar için önekler şunlardır:

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

21 ila 99 kenarı olan çokgenler farklı bir sisteme sahiptir. Onlarca basamağın (sol sütunda bulunur), basamağın (sağ sütunda) önekini alın ve aralarına "kai" yapıştırın (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

3 basamaklı çokgenler benzer şekilde adlandırılır. 100 taraflı bir çokgene hektogon denir. Yüzlerce haneyi alın, olanlar için sütunda bulun, sonra sağına bir "hektar" yapıştırın. Şimdi onlarca ve olanları kapalı sayı yukarıda istiyorum: (hundreds)hecta(tens)kai(ones)gon. Yüzlerce basamaklı basamak 1 ise, öneki "hektar" ın arkasına koymayın; eğer olanlar 0 ise, (olanlar) bölümünü atlayın.

Bu nedenle, bir tamsayı (3 <= n <= 999) verildiğinde, n taraflı bir çokgenin adını döndürün. n-gongeçerli bir cevap değil: P

Tüm kod golf gibi, en kısa kod kazanır.


100 taraflı hektogon veya hekgon mu? 100'ün üzerindeki onlarca rakam da net değil. Sanırım 110 ve 120 hektahenakaigon ve hektadikaigon (veya hektaicosikaigon?)
ugoren

Ayrıca, 101 taraflı "hectakaihenagon" (kurallarınızdan anladığım gibi) veya "hectahenagon" mu?
ugoren

@ beary605 Sanırım non- yanlış. Bu latin ve diğerleri, hepta-, hexa- Yunancadır. Ennea- olmalı. Vikipedi'nin nonagon'un iyi olduğunu biliyorum!
felipa

@felipa: Olup bulunmayacağımı tartışıyordum ennea-, ama "nonagon" dan daha sık "nonagon" duydum, bu yüzden bununla gittim.
beary605

@ugoren: 100 - hektar ve bende sahip olmadığımı görmedim, decaişaret ettiğin için teşekkürler. 110 - hektadekgon, 120 hektariksigon. 101 - hektakaihenagon.
beary605

Yanıtlar:


5

C, 401 , 391

Orada bir şey koymak sağlar referans için en az bir cevap var :-)

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

Şununla test et:

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

Çıktı alt kümesi:

  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

1
Güzel. Sen yerini alabilir if..elseile ?:(ve ;ile ,bazı karakterleri kaydetmek için). Ayrıca t>1&&p(t)ve benzer değişiklikler yardımcı olabilir. Ve emin değilim, ama skullandığınız sabitler tek haneli olacak şekilde yeniden düzenleyebilirsiniz .
ugoren

1

JavaScript - 405 386

Sürüm 1: (405 karakter)

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

Sürüm 2: (386 karakter)

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

Çıktı örneği:

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 

0

Kobra - 370 bayt

Bu şu anda bir işlev, ancak buna izin verilmiyorsa değiştireceğim.

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'

Ve nedense kobra vurgulayıcı //bir yorum olarak belirledi, bu yanlış.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.