Вихідні підрозділи міжнародних стандартних розмірів паперу


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 Min

@JungHwanMin регулюється в даний час
MARTIN

Відповіді:


2

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

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

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

Набагато коротше, ніж раніше! Я завжди забуваю про операторів бітшіфті в BBC BASIC для Windows, оскільки вони не були доступні на моєму старому комп’ютері ще в той день.

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 виводить папір для A0, 1 вихід A0 розділений на пару А1 і т.д.

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

Безумовно

  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

Математика, 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.