Subdivisões de saída de tamanhos de papel padrão internacional

11

Tamanhos de papel ISO definidos:

Os tamanhos de papel da série A são definidos pelos seguintes requisitos:

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.

insira a descrição da imagem aqui

Tarefa:

dada uma f[n]saída de entrada A0 dividida em nsubdivisões.

Casos de teste:

f[1]para f[12]:

insira a descrição da imagem aqui

Aqui, A0 é dado por f[1], mas essa indexação não é essencial.

Critérios de vitória:

O código mais curto em bytes vence.

Martin
fonte
1
Não deve f[2]ser um A0com uma linha horizontal dividindo-o? ou seja, não está f[2]realmente no caso de teste f[3]?
JungHwan Min 18/12/16
@JungHwanMin ajustado agora
martin

Respostas:

2

BBC BASIC 49 caracteres ASCII

Tamanho do arquivo tokenizado 44 bytes

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

Muito mais curto do que antes! Eu sempre esqueço os operadores de deslocamento de bits do BBC BASIC para Windows, pois eles não estavam disponíveis no meu computador antigo naquela época.

BBC BASIC 63 caracteres ASCII

Tamanho do arquivo tokenizado 58 bytes

Intérprete Dowload em 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.

Usa indexação zero, o que eu prefiro. Assim, 0 gera o papel para A0, 1 gera A0 dividido em um par de A1s, etc.

É necessário alternar entre as coordenadas X e Y pela metade, mas fazer isso em uma matriz custaria muitos bytes. Em vez disso, uso o fato de que o BBC basic possui um bloco de variáveis ​​inteiras estáticas A%..Z%de 4 bytes, cada um armazenado na memória contígua. I armazenar os valores de X e Y em A%e C%e de acesso utilizando o ponteiro para %Bmodificado pelo valor de d, o qual alterna entre 4e -4.

Ungolfed

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

Resultado

insira a descrição da imagem aqui

Level River St
fonte
4

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

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
fonte
2

Mathematica, 87 85 bytes

Obrigado @martin por 1 byte.

Graphics@{EdgeForm@Thin,White,Rectangle[#,0{,}]&/@NestList[Sort[#/a]&,{1,a=√2},#]}&
JungHwan Min
fonte
Muito agradável! EdgeForm@Thin: -1 byte
martin
2

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

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

Usa indexação baseada em 1.

Neil
fonte