Kích cỡ giấy và phong bì


17

Bài tập

Cho một chữ cái (A, B, C) và một số (0-10), xuất kích thước của khổ giấy tiêu chuẩn phù hợp (Sê-ri A và B) hoặc kích thước phong bì tiêu chuẩn phù hợp (sê-ri C) theo định dạng milimet aaaa x bbbbnơi aaaabbbblà chiều rộng và chiều cao đo bằng mm theo ISO216 (series A & B) hoặc ISO296 (series C)

Để làm cho mọi thứ dễ dàng hơn, tôi sẽ trích dẫn từ bảng Kích cỡ giấy của Wikipedia

ISO paper sizes in portrait view
Format  A series    B series    C series
Size     mm × mm      mm × mm    mm × mm
0       841 × 1189  1000 × 1414 917 × 1297
1       594 × 841    707 × 1000 648 × 917
2       420 × 594    500 × 707  458 × 648
3       297 × 420    353 × 500  324 × 458
4       210 × 297    250 × 353  229 × 324
5       148 × 210    176 × 250  162 × 229
6       105 × 148    125 × 176  114 × 162
7        74 × 105     88 × 125   81 × 114
8        52 × 74      62 × 88    57 × 81
9        37 × 52      44 × 62    40 × 57
10       26 × 37      31 × 44    28 × 40

Ví dụ về đầu vào và đầu ra:

**Test case 1**
Input: A4
Output: 210 x 297

**Test Case 2**
Input: B6
Output: 125 x 176

**Test Case 3**
Input: C2
Output: 458 x 648

Những điều cần lưu ý:

  1. Định dạng "210 x 297" hoặc "1000 x 1414", v.v. Mặc dù đây là định dạng thích hợp hơn, Bạn có thể chọn bỏ "x" khỏi đầu ra của mình, tức là ở dạng một mảng hoặc hai số hoặc bất kỳ dấu tích nào bạn thích miễn là đo chiều rộng được xuất ra trước chiều cao.
  2. Tỷ lệ giữa chiều cao và chiều rộng gần tương đương với căn bậc hai của 2, do đó, khi tính toán độ cao, chiều rộng được nhân với sqrt (2), sau đó làm tròn lên hoặc xuống đến milimet gần nhất, do đó dẫn đến các phép đo trong bảng trên. Điều này có thể giúp đánh golf xuống mã của bạn.
  3. Trong các kích thước liên tiếp cho một chuỗi khi bạn đi xuống bàn, chiều rộng cho một kích thước sẽ trở thành chiều cao cho tiếp theo. Điều này cũng có thể giúp bạn đánh golf xuống mã của bạn.

Quy tắc:

  1. Đây là mã golf. Kết quả là các quy tắc tiêu chuẩn được áp dụng. Điểm số sẽ được dựa trên số byte. Số lượng thấp nhất sẽ giành chiến thắng.
  2. Không có sơ hở ngớ ngẩn , chúng tôi đã ở đó trước đây ... Chúng tôi sẽ không trải qua điều này một lần nữa.
  3. Nếu bạn có thể mã hóa nó, thì vui lòng xem xét việc đính kèm một liên kết đến một thể hiện hoạt động của mã của bạn để các lập trình viên và người chơi golf khác có thể tìm hiểu cách mã của bạn hoạt động. Điều này không bắt buộc, nhưng tôi muốn khuyến khích người khác làm điều này để tất cả chúng ta có thể học hỏi lẫn nhau. Tôi chắc chắn rất thích tìm hiểu thêm về các ngôn ngữ của người chơi golf khác nếu có thể.

May mắn nhất.


Bn là trung bình hình học của An và An + 1, và Cn là trung bình hình học của An và Bn.
Adám

Câu trả lời:


9

JavaScript (ES7), 57 byte

Đã lưu 1 byte nhờ @WallyWest

s=>n=>[n,n-1].map(x=>.707**x*{A:841,B:1e3,C:917}[s]+.2|0)

3
Công việc tuyệt vời ... bạn có thể làm cho nó 57 với s=>n=>[n,n-1].map(x=>.707**x*{A:841,B:1e3,C:917}[s]+.2|0)và nó vẫn sẽ có cùng độ chính xác trong đầu ra của bạn.
WallyWest

@WallyWest Cảm ơn vì tiền boa. Tôi đã chơi xung quanh với thay thế khác nhau cho .7071.2trong một thời gian và chỉ kinda đã từ bỏ khi tôi tìm thấy một cái gì đó mà làm việc: P
ETHproductions

Đừng lo lắng, tất cả đều mang tên mã golf ...;) Tôi không nhận ra bản đồ cho phép một người tham chiếu các khóa không được trích dẫn trong một đối tượng như thế ...? Thỉnh thoảng tôi sẽ phải sử dụng nó ...
WallyWest

1
@WallyWest Điều đó không có gì để làm .map, bạn có thể sử dụng {key1:1,key2:2,key3:3}[myKey]bất cứ lúc nào bạn muốn. Bạn chỉ cần trích dẫn các khóa nếu chúng không phải là tên biến hợp lệ.
Sản xuất ETH

Rực rỡ, cảm ơn vì tiền boa ...
WallyWest

6

C (gcc) , 113 111 90 78 70 byte

Nó cần -lmchạy trên TIO, nhưng hoạt động tốt trên máy tính của tôi mà không có tùy chọn.

Đã lưu 20 byte nhờ pizzapants184 .

Trả về giá trị bằng con trỏ.

f(a,b,c,d)int*c,*d;{float x=1e3*pow(.707,b+a%3/4.)+.2;*c=x,*d=x/.707;}

Giải trình:

f(a,b,c,d)int*c,*d;{          // calling by char, but receive as int
    float x = 1e3 * pow(.707, // float gives enough precision 
            a % 3 / 4.        // series: a%3/4.=.5,0,.25 when a=65,66,67
            + b) - .2;        // magic number to get correct roundings
    *c = x, *d = x / .707;
}

1
94 byte + -lm bằng cách lấy đầu vào dưới dạng charint
pizzapants184

1
91 byte + -lm bằng cách thay đổi (a^66?a^67:0.5:0.25:0)thànhabs(a-66)/(a-63.)
pizzapants184


3

Mẻ, 105 byte

@set/aA=1189,B=1414,C=1297,h=%1,w=h*29/41
@for /l %%i in (1,1,%2)do @set/at=w,w=h/2,h=t
@echo %w% x %h%

41/29 2


Là số thập phân không thể có trong Batch, @Neil? Tôi đã có thể nghĩh*.707 sẽ tốt hơn h*41/29? Tâm trí bạn, khéo léo sử dụng xấp xỉ!
WallyWest

@WallyWest Không, chỉ các số nguyên có chữ ký 32 bit.
Neil

Ồ, tôi hiểu rồi! Học điều mới mỗi ngày!
WallyWest

3

JavaScript, 53 byte

L=>N=>[N+1,N].map(p=>1091/2**(p/2+~{B:2,C:1}[L]/8)|0)

Lưu nhiều byte bằng cách sử dụng định dạng đầu ra thay thế, nhờ Neil.


1
66 byte:L=>N=>(g=p=>1000.2/2**(N/2+p-{A:2,B:4,C:3}[L]/8)|0)(.5)+' x '+g(0)
Neil

1
Hoặc 58 byte nếu bạn sử dụng định dạng đầu ra thay thế:L=>N=>[N+1,N].map(p=>1000.2/2**(p/2-{A:2,B:4,C:3}[L]/8)|0)
Neil

@Neil đã chỉnh sửa. Và cũng giảm xuống 56 byte
tsh



3

APL (Dyalog) , 31 28 byte

-2 nhờ ngn.

Toàn thân chương trình. Giả sử ⎕IO( I ndex O rigin) 0là mặc định trên nhiều hệ thống. Nhắc cho số, sau đó thư, cả hai từ STDIN. In sang STDOUT.

.2+1E3÷2*8÷⍨('BC'⍳⍞)+4×⎕-⍳2

Hãy thử trực tuyến!

Một phiên bản sửa đổi một chút cho phép chúng tôi kiểm tra tất cả các khả năng cùng một lúc: Hãy thử trực tuyến!

⍳2 hai đầu tiên ɩ ndices, tức là 0 và 1

⎕- trừ đi từ đầu vào số

 nhân bốn với điều đó

(Giáo dục)+  thêm những điều sau đây

 đầu vào nhân vật

'BC'⍳ S 's Ndex trong chuỗi này ( 'A' sẽ cung cấp cho 2 khi chỉ số vượt ra ngoài cuối cùng)

8÷⍨ chia cho 8

2* nâng 2 lên sức mạnh của điều đó

1E3÷ 1000 chia cho đó

.2+ thêm vào đó

 sàn (vòng xuống)


@ H.PWiz Vâng. Typo. Cảm ơn.
Adám

2

Befunge, 69 56 55 byte

"}"8*~3%:"L"*7vv\p00-1_$..@
")"*":":-*!!\+<>2/00g:^:&\/

Hãy thử trực tuyến!

Giải trình

Chúng tôi không có sự sang trọng của điểm nổi hoặc bất cứ thứ gì như hàm năng lượng trong Befunge, vì vậy chúng tôi tính toán kích thước cơ sở cho ký tự định dạng đã cho, f , như sau:

fn = f % 3
width = 1000 - (n * 76 + 7) * !!n
height = width * 58 / 41

Sau đó, chúng tôi liên tục xoay và chia các kích thước này để đến phân khu thích hợp cho số kích thước đã cho.

"}"8*                         Push 1000 for later use in the width calculation.
     ~                        Read the format character from stdin.
      3%                      Convert into a number in the range 0 to 2.
        :"L"*7v               Calculate width = 1000 - (fn * 76 + 7) * !!fn
        -*!!\+<                  where fn is the format number derived above.
")"*":":                  /   Calculate height = width * 58 / 41.
                         \    Swap so the width is above the height on the stack.
                      v:&     Read the numeric size from stdin and duplicate for testing.
                      _       While not zero, go left.
                 p00-1        Decrement the size and move it from the stack into memory.
               v/             Swap the width and height.
               >2/            Divide the new width by 2.
                  00g:        Restore the size from memory and duplicate for testing.
                      _       While not zero, repeat this loop.
                       $      When zero, continue to the right and drop the size.
                        ..@   Output the width and height, then exit.
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.