Tiền tố đa giác


17

Đa giác được đặt tên theo số cạnh mà chúng có. Một hình ngũ giác có 5 cạnh, một hình bát giác có 8 cạnh. Nhưng chúng được đặt tên như thế nào? Tên của một đa giác 248 mặt là gì?

Tất cả các đa giác đều có hậu tố -gon. Có các tiền tố cụ thể cho mỗi đa giác tùy thuộc vào số lượng các cạnh. Dưới đây là các tiền tố cho các số thấp hơn:

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

Đa giác có 21 đến 99 mặt có một hệ thống khác nhau. Lấy tiền tố cho chữ số hàng chục (được tìm thấy trên cột bên trái), chữ số một (cột bên phải bên dưới), sau đó dán "kai" giữa chúng để lấy (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

Các đa giác 3 chữ số được đặt tên theo cách tương tự. Một đa giác 100 mặt được gọi là một ha. Lấy hàng trăm chữ số, tìm nó trên cột cho các chữ số, sau đó dán một "hécta" ở bên phải. Bây giờ đánh số hàng chục và những cái như trên : (hundreds)hecta(tens)kai(ones)gon. Nếu chữ số hàng trăm là 1, đừng đặt tiền tố phía sau "ha"; nếu các vị trí là 0, thì bỏ qua phần (những).

Vì vậy, với một số nguyên (3 <= n <= 999), trả về tên của đa giác n cạnh. n-gonkhông phải là một câu trả lời hợp lệ: P

Như với tất cả các mã golf, mã ngắn nhất sẽ thắng.


100 mặt là haogon hay haagon? Các chữ số hàng chục trên 100 cũng không rõ ràng. Tôi đoán 110 và 120 là haahenakaigon và haadikaigon (hoặc ha cổosikaigon?)
ugoren

Ngoài ra, 101 mặt là "haakaihenagon" (theo tôi hiểu từ quy tắc của bạn) hoặc "haahenagon"?
ugoren

@ beary605 Tôi nghĩ nona- là sai. Đó là từ tiếng Latin và những người khác, hepta-, hexa- là từ Hy Lạp. Nó nên được ennea-. Tôi biết wikipedia nói nonagon là OK!
felipa

@felipa: Tôi đang tranh luận liệu có nên không ennea-, nhưng tôi đã nghe "nonagon" thường xuyên hơn "enneagon", vì vậy tôi đã đi với nó.
beary605

@ugoren: 100 ha, và tôi đã không thấy rằng mình không có deca, cảm ơn vì đã chỉ ra điều đó. 110 - hectadecagon, 120 - hectomsosigon. 101 - haakaihenagon.
beary605

Câu trả lời:


5

C, 401 , 391

Hãy đặt một cái gì đó ra để có ít nhất một câu trả lời để tham khảo :-)

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

Kiểm tra với:

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

Tập hợp con của đầu ra:

  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
Đẹp. Bạn có thể thay thế if..elsebằng ?:(và ;bằng ,) để lưu một số ký tự. Ngoài ra t>1&&p(t)và những thay đổi tương tự có thể giúp đỡ. Và tôi không chắc, nhưng có lẽ bạn có thể sắp xếp lại sđể các hằng số bạn sử dụng sẽ là một chữ số.
ugoren

1

JavaScript - 405 386

Phiên bản 1: (405 ký tự)

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

Phiên bản 2: (386 ký tự)

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

Ví dụ đầu ra:

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

Rắn hổ mang - 370 byte

Đây hiện là một chức năng, nhưng nếu điều đó không được phép thì tôi sẽ thay đổi nó.

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'

Và vì một số lý do, highllight rắn hổ mang đã //được đặt làm nhận xét, đó là sai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.