Kertas dan Ukuran Amplop


17

Tugas

Diberi huruf (A, B, C), dan angka (0-10), menampilkan ukuran ukuran kertas standar yang cocok (Seri A dan B) atau ukuran amplop standar yang cocok (seri C) dalam milimeter dalam format aaaa x bbbbdi mana aaaadan bbbbapakah pengukuran lebar dan tinggi dalam milimeter sesuai ISO216 (Seri A & B) atau ISO296 (Seri C)

Untuk mempermudah, saya akan mengutip tabel Ukuran Kertas 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

Jadi contoh input dan output:

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

Hal yang perlu diperhatikan:

  1. Format "210 x 297" atau "1000 x 1414" dll. Meskipun ini adalah format yang lebih disukai, Anda dapat memilih untuk menghilangkan "x" dari output Anda, yaitu dalam bentuk array atau dua angka atau apa pun yang menggelitik keinginan Anda selama pengukuran lebar dikeluarkan sebelum ketinggian.
  2. Rasio antara tinggi dan lebar kira-kira setara dengan akar kuadrat dari 2, sehingga dalam perhitungan ketinggian, lebar dikalikan dengan sqrt (2), dan kemudian dibulatkan ke atas atau ke bawah ke milimeter terdekat, sehingga menghasilkan pengukuran pada tabel di atas. Ini dapat membantu menurunkan kode Anda.
  3. Dalam ukuran berturut-turut untuk seri saat Anda turun tabel, lebar untuk satu ukuran menjadi tinggi untuk yang berikutnya. Ini juga dapat membantu Anda mengurangi kode Anda.

Aturan:

  1. Ini adalah kode-golf. Aturan standar berlaku sebagai hasilnya. Skor akan didasarkan pada jumlah byte. Hitungan terendah akan menang.
  2. Tidak ada celah konyol , kita pernah ke sana sebelumnya ... Kita tidak akan melalui ini lagi.
  3. Jika Anda dapat mengkodekannya, silakan pertimbangkan melampirkan tautan ke instance kode Anda yang berfungsi sehingga programmer dan pegolf lain dapat mempelajari cara kerja kode Anda. Ini tidak wajib, tetapi saya ingin mendorong orang lain untuk melakukan ini sehingga kita semua dapat saling belajar. Saya tentu ingin belajar lebih banyak tentang bahasa pegolf lain jika memungkinkan.

Semoga berhasil.


Bn adalah rata-rata geometrik dari An dan An + 1, dan Cn adalah rata-rata geometrik dari An dan Bn.
Adám

Jawaban:


9

JavaScript (ES7), 57 byte

Disimpan 1 byte berkat @WallyWest

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

3
Kerja bagus ... Anda bisa membuatnya 57 dengan s=>n=>[n,n-1].map(x=>.707**x*{A:841,B:1e3,C:917}[s]+.2|0)dan masih akan memiliki presisi yang sama dalam output Anda.
WallyWest

@WallyWest Terima kasih atas tipnya. Saya telah bermain - main dengan berbagai pengganti untuk .7071dan .2untuk sementara waktu dan hanya sedikit menyerah ketika saya menemukan sesuatu yang berhasil: P
ETHproduksi

Jangan khawatir, semua atas nama kode golf ...;) Saya tidak menyadari peta mengizinkan seseorang untuk referensi kunci yang tidak dikutip dalam suatu objek seperti itu ...? Saya harus segera menggunakannya ...
WallyWest

1
@WallyWest Itu tidak ada hubungannya .map, Anda dapat menggunakan {key1:1,key2:2,key3:3}[myKey]kapan saja Anda inginkan. Anda hanya perlu mengutip kunci jika itu bukan nama variabel yang valid.
ETHproduksi

Cemerlang, terima kasih atas tipnya ...
WallyWest

6

C (gcc) , 113 111 90 78 70 byte

Perlu -lmdijalankan pada TIO, tetapi berfungsi dengan baik di komputer saya tanpa opsi.

Disimpan 20 byte berkat pizzapants184 .

Kembalikan nilai dengan pointer.

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

Penjelasan:

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 dengan mengambil input sebagai chardanint
pizzapants184

1
91 byte + -lm dengan mengubah (a^66?a^67:0.5:0.25:0)keabs(a-66)/(a-63.)
pizzapants184


3

Batch, 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


Apakah desimal tidak dimungkinkan dalam Batch, @Neil? Saya akan berpikir h*.707akan lebih baik daripada h*41/29? Pikirkan Anda, penggunaan perkiraan yang cerdik!
WallyWest

@WallyWest Tidak, bilangan bulat bertanda 32-bit saja.
Neil

Oh begitu! Pelajari sesuatu yang baru setiap hari!
WallyWest

3

JavaScript, 53 byte

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

Simpan banyak byte dengan menggunakan format output alternatif, terima kasih kepada 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
Atau 58 byte jika Anda menggunakan format output alternatif:L=>N=>[N+1,N].map(p=>1000.2/2**(p/2-{A:2,B:4,C:3}[L]/8)|0)
Neil

@Neil diedit. Dan juga dikurangi menjadi 56 byte
tsh



3

APL (Dyalog) , 31 28 byte

-2 Terima kasih kepada ngn.

Badan program penuh. Diasumsikan ⎕IO( I ndex O rigin) 0, yang merupakan default pada banyak sistem. Meminta nomor, lalu surat, keduanya dari STDIN. Mencetak ke STDOUT.

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

Cobalah online!

Versi yang sedikit dimodifikasi memungkinkan kami menguji semua kemungkinan sekaligus: Cobalah secara online!

⍳2 dua ɩ informasi pertama, yaitu 0 dan 1

⎕- kurangi dari input numerik

 kalikan empat dengan itu

(... )+ tambahkan berikut ini

 input karakter ...

'BC'⍳ ... ɩ ndex dalam string ini ("A" akan memberikan 2, karena indeks melampaui yang terakhir)

8÷⍨ bagi dengan 8

2* meningkatkan 2 pangkat itu

1E3÷ 1000 dibagi dengan itu

.2+ tambahkan ⅕ ke sana

 lantai (bulat ke bawah)


@ H.PWiz Ya. Salah ketik. Terima kasih.
Adám

2

Befunge, 69 56 55 byte

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

Cobalah online!

Penjelasan

Kami tidak memiliki kemewahan titik apung atau apa pun seperti fungsi daya di Befunge, jadi kami menghitung ukuran dasar untuk karakter format yang diberikan, f , sebagai berikut:

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

Kami kemudian berulang kali memutar dan membagi dimensi ini untuk mendapatkan subdivisi yang sesuai untuk nomor ukuran yang diberikan.

"}"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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.