용지 및 봉투 크기


17

직무

문자 (A, B, C) 및 숫자 (0-10)가 제공되면 일치하는 표준 용지 크기 (A 및 B 시리즈) 또는 일치하는 표준 봉투 크기 (C 시리즈)의 크기를 밀리미터 (mm) 형식으로 출력하십시오. aaaa x bbbb여기서 aaaabbbbISO216 (시리즈 A & B), 또는 당 mm의 폭 및 높이의 측정이다 ISO296 (시리즈 C)

일을 더 쉽게하기 위해 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

입력 및 출력의 예 :

**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

참고 사항 :

  1. "210 x 297"또는 "1000 x 1414"등의 형식입니다.이 형식이 바람직한 형식이지만 출력에서 ​​"x"를 생략 할 수 있습니다 (예 : 배열 또는 두 개의 숫자 또는 공상을 간질이는 것) 폭 측정이 높이 전에 출력되는 한.
  2. 높이와 너비의 비율은 2의 제곱근과 대략 동일하므로 높이를 계산할 때 너비에 sqrt (2)를 곱한 다음 가장 가까운 밀리미터로 반올림하거나 내림합니다. 위 표의 측정 값. 이것은 코드를 내리는 데 도움이 될 수 있습니다.
  3. 표를 내려갈 때 시리즈의 연속 크기에서 한 크기의 너비가 다음 크기의 높이가됩니다. 이것은 또한 코드를 다운 시키는데 도움이 될 수 있습니다.

규칙 :

  1. 이것은 코드 골프입니다. 결과적으로 표준 규칙이 적용됩니다. 점수는 바이트 수를 기준으로합니다. 가장 적은 수가 이길 것입니다.
  2. 바보 같은 허점 이 없습니다. 우리는 전에 가봤습니다 ... 우리는 이것을 다시는 겪지 않습니다.
  3. 코드를 작성할 수 있다면 다른 프로그래머와 골퍼가 코드의 작동 방식을 배울 수 있도록 코드의 실제 인스턴스에 대한 링크를 첨부하십시오. 이것은 필수 사항은 아니지만 다른 사람들이이 작업을하도록 장려하고 싶습니다. 우리 모두 서로 배울 수 있습니다. 가능하다면 다른 골퍼의 언어에 대해 더 많이 배우고 싶습니다.

행운을 빌어 요.


Bn은 An과 An + 1의 기하 평균이고 Cn은 An과 Bn의 기하 평균입니다.
Adám

답변:


9

자바 스크립트 (ES7), 57 바이트

@WallyWest 덕분에 1 바이트 절약

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

3
훌륭합니다 ... 57로 만들 수 있으며 s=>n=>[n,n-1].map(x=>.707**x*{A:841,B:1e3,C:917}[s]+.2|0)여전히 출력에서 ​​동일한 정밀도를 갖습니다.
WallyWest

@WallyWest 팁 주셔서 감사합니다. 나는 다양한 교체와 함께 주변에 연주했던 .7071그리고 .2잠시 동안 나는 일을 뭔가를 발견했을 때 그냥 좀 포기 : P
ETHproductions

코드 골프의 이름으로 걱정할 필요는 없습니다 ...;) 나는 그런 객체 내에서 인용되지 않은 키를 참조 할 수 있는지도를 알지 못했습니다 ...? 나는 곧 언젠가 그것을 사용해야 할 것이다 ...
WallyWest

1
@WallyWest 그것과 아무 관련이 없으므로 언제든지 .map사용할 {key1:1,key2:2,key3:3}[myKey]수 있습니다. 유효한 변수 이름이 아닌 경우 키만 인용하면됩니다.
ETHproductions

훌륭합니다, 팁 주셔서 감사합니다 ...
WallyWest

6

C (GCC) , 113 (111) 90 (78) 70 바이트

필요해 -lmTIO에서 실행 하지만 옵션없이 내 컴퓨터에서 잘 작동합니다.

pizzapants184 덕분에 20 바이트 절약 .

포인터로 값을 반환합니다.

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

설명:

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
다음 char과 같이 입력하여 94 바이트 + -lm andint
pizzapants184

1
91 바이트 + -lm 변경하여 (a^66?a^67:0.5:0.25:0)abs(a-66)/(a-63.)
pizzapants184


3

배치, 105 바이트

@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


@Neil Batch에서는 소수를 사용할 수 없습니까? 나는 것 h*.707보다 낫다고 생각 했을까 h*41/29? 근사하고 근사한 근사치 사용!
WallyWest

@WallyWest 아니요, 32 비트 부호있는 정수만.

아, 알 겠어요! 매일 새로운 것을 배우십시오!
WallyWest

3

자바 스크립트, 53 바이트

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

Neil 덕분에 대체 출력 형식을 사용하여 많은 바이트를 절약 할 수 있습니다.


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

1
또는 대체 출력 형식을 사용하는 경우 58 바이트 :L=>N=>[N+1,N].map(p=>1000.2/2**(p/2-{A:2,B:4,C:3}[L]/8)|0)
Neil

@Neil이 편집되었습니다. 또한 56 바이트로 감소
tsh



3

APL (Dyalog) , 31 28 바이트

ngn 덕분에 -2입니다.

전체 프로그램 본문. ⎕IO( i ndex O rigin)을 0많은 시스템에서 기본값 이라고 가정 합니다. STDIN에서 숫자와 문자를 모두 묻습니다. STDOUT으로 인쇄합니다.

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

온라인으로 사용해보십시오!

약간 수정 된 버전으로 모든 가능성을 한 번에 테스트 할 수 있습니다. 온라인에서 사용해보십시오!

⍳2 처음 두 ndi dioces, 즉 0과 1

⎕- 숫자 입력에서 빼기

 그것에 4를 곱하다

()+ 다음을 추가하십시오

 문자 입력…

'BC'⍳ … 이 문자열에서 dex ndex ( "A"는 마지막을 넘어서 인덱스로 2를 제공함)

8÷⍨ 8로 나눕니다

2* 그 힘으로 2를 올리다

1E3÷ 1000으로 나눈 값

.2+ 그것에 ⅕를 추가하십시오

 바닥 (아래로)


@ H.PWiz 예. 오식. 감사.
Adám

2

Befunge, 69 56 55 바이트

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

온라인으로 사용해보십시오!

설명

우리는 Befunge에 부동 소수점이나 고급 함수와 같은 기능이 없으므로 주어진 형식 문자 f 의 기본 크기를 다음과 같이 계산합니다 .

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

그런 다음 이러한 치수를 반복적으로 회전하고 나누어 주어진 크기 번호에 대한 적절한 세분화를 얻습니다.

"}"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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.