Subdivisi keluaran ukuran kertas standar internasional

11

Ukuran Kertas ISO Ditentukan:

Ukuran kertas seri A ditentukan oleh persyaratan berikut:

The length divided by the width is the square root of 2.
The A0 size has an area of 1 unit.
Each subsequent size A(n) is defined as A(n-1) cut in half parallel to its shorter sides.

masukkan deskripsi gambar di sini

Tugas:

diberi input f[n]output A0 dibagi menjadi beberapa nsubdivisi.

Kasus uji:

f[1]untuk f[12]:

masukkan deskripsi gambar di sini

Di sini, A0 diberikan oleh f[1], tetapi pengindeksan ini tidak penting.

Kriteria pemenang:

Kode terpendek dalam byte menang.

martin
sumber
1
Bukankah f[2]seharusnya A0dengan garis horizontal membaginya? yaitu, bukankah f[2]dalam kasus uji sebenarnya f[3]?
JungHwan Min
@JungHwanMin disesuaikan sekarang
martin

Jawaban:

2

BBC BASIC 49 karakter ASCII

Filesize Tokenised 44 byte

I.n:F.i=0TOn:RECTANGLE0,0,1189>>i/2+.5,841>>i/2N.

Jauh lebih pendek dari sebelumnya! Saya selalu lupa tentang operator bitshift di BBC BASIC untuk windows karena mereka tidak tersedia di komputer lama saya saat itu.

BBC BASIC 63 karakter ASCII

File Tokenised berukuran 58 byte

Juru bahasa Dowload di http://www.bbcbasic.co.uk/bbcwin/download.html

A%=841C%=1189d=4I.n:F.i=0TOn:RECTANGLE0,0,C%,A%:d!^B%/=2d=-d:N.

Menggunakan pengindeksan nol, yang saya sukai. Jadi 0 menghasilkan kertas untuk A0, 1 menghasilkan A0 dibagi menjadi sepasang A1s, dll.

Kita perlu bergantian antara membagi dua koordinat X dan Y, tetapi melakukan hal itu dalam sebuah array akan membutuhkan biaya terlalu banyak byte. Sebagai gantinya saya menggunakan fakta bahwa BBC basic memiliki blok variabel integer statis A%..Z%masing-masing 4 byte yang disimpan dalam memori yang berdekatan. Saya menyimpan nilai X dan Y di A%dan C%dan mengakses menggunakan pointer untuk %Bdimodifikasi oleh nilai d, yang bergantian antara 4dan -4.

Tidak disatukan

  A%=841
  C%=1189
  d=4
  INPUTn
  FORi=0TOn
    RECTANGLE0,0,C%,A%
    d!^B%/=2
    d=-d
  NEXT

Keluaran

masukkan deskripsi gambar di sini

Level River St
sumber
4

JavaScript (ES6) + HTML, 96 94 + 34 = 130 128 byte

f=(n,w=297,h=210)=>n--&&f(n,h<w?w/2:w,h<w?h:h/2,(C=c.getContext`2d`).rect(0,0,w,h),C.stroke())

f(8)
<canvas id=c width=300 height=300>

Arnauld
sumber
2

Mathematica, 87 85 byte

Terima kasih @martin untuk 1 byte.

Graphics@{EdgeForm@Thin,White,Rectangle[#,0{,}]&/@NestList[Sort[#/a]&,{1,a=√2},#]}&
JungHwan Min
sumber
Sangat bagus! EdgeForm@Thin: -1 byte
martin
2

JavaScript (ES6) / SVG (HTML5), 170 byte

a=prompt();document.write('<svg width=297 height=210>');for(w=297,h=210;a--;h>w?h/=2:w/=2)document.write(`<rect fill=none stroke=#000 x=0 y=0 width=${w} height=${h} />`);

Menggunakan pengindeksan berbasis 1.

Neil
sumber