Выходные подразделения форматов бумаги международного стандарта


11

Размеры бумаги ISO определены:

Размеры бумаги серии A определяются следующими требованиями:

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.

введите описание изображения здесь

Задача:

с учетом входного f[n]выхода A0 разделены на nподразделения.

Тестовые случаи:

f[1]чтобы f[12]:

введите описание изображения здесь

Здесь A0 определяется как f[1], но это индексирование не является обязательным.

Критерии победы:

Самый короткий код в байтах побеждает.


1
Не должно f[2]быть A0с горизонтальной линией, разделяющей его? то есть, не f[2]в тестовом случае на самом деле f[3]?
JungHwan Мин

@JungHwanMin регулируется в настоящее время
MARTIN

Ответы:


2

BBC BASIC 49 символов ASCII

Токенизированный размер файла 44 байта

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

Гораздо короче чем раньше! Я всегда забываю об операциях битового сдвига в BBC BASIC для окон, поскольку они не были доступны на моем старом компьютере в те времена.

BBC BASIC 63 символов ASCII

Токенизированный размер файла 58 байт

Скачать переводчик на 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.

Использует нулевую индексацию, которую я предпочитаю. Таким образом, 0 выводит бумагу для А0, 1 выводит А0, разделенную на пару А1 и т. Д.

Необходимо чередовать деление пополам координат X и Y, но выполнение этого в массиве будет стоить слишком много байтов. Вместо этого я использую тот факт, что BBC basic имеет блок статических целочисленных переменных A%..Z%по 4 байта, каждая из которых хранится в непрерывной памяти. Я сохраняю значения X и Y в A%и C%и получаю доступ, используя указатель на %Bизмененное значение d, которое чередуется между 4и -4.

Ungolfed

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

Выход

введите описание изображения здесь


4

JavaScript (ES6) + HTML, 96 94 + 34 = 130 128 байт

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>


2

Mathematica, 87 85 байт

Спасибо @martin за 1 байт.

Graphics@{EdgeForm@Thin,White,Rectangle[#,0{,}]&/@NestList[Sort[#/a]&,{1,a=√2},#]}&

Очень хорошо! EdgeForm@Thin: -1 байт
мартин

2

JavaScript (ES6) / SVG (HTML5), 170 байт

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} />`);

Использует индексирование на основе 1.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.