Wyjściowe poddziały międzynarodowych standardowych rozmiarów papieru

11

Zdefiniowane rozmiary papieru ISO:

Rozmiary papieru w serii A są określone przez następujące wymagania:

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.

wprowadź opis zdjęcia tutaj

Zadanie:

podany sygnał f[n]wyjściowy A0 podzielony na npodrejony.

Przypadki testowe:

f[1]do f[12]:

wprowadź opis zdjęcia tutaj

Tutaj podaje się A0 f[1], ale indeksowanie nie jest konieczne.

Kryteria wygranej:

Najkrótszy kod w bajtach wygrywa.

jaskółka oknówka
źródło
1
Czy nie powinna f[2]być A0linia pozioma, która ją dzieli? tzn. f[2]czy tak naprawdę nie jest w przypadku testowym f[3]?
JungHwan Min.
@JungHwanMin dostosowany teraz
martin

Odpowiedzi:

2

BBC BASIC 49 znaków ASCII

Tokenizowany rozmiar pliku 44 bajty

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

Znacznie krótszy niż wcześniej! Zawsze zapominam o operacjach bitshift w BBC BASIC dla Windows, ponieważ nie były one dostępne na moim starym komputerze w tamtych czasach.

BBC BASIC 63 znaki ASCII

Tokenizowany rozmiar pliku 58 bajtów

Pobierz tłumacza na 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.

Korzysta z indeksowania zerowego, co wolę. Zatem 0 wysyła papier dla A0, 1 wyjścia A0 podzielone na parę A1s itp.

Konieczne jest przełączanie między połówkami współrzędnych X i Y, ale zrobienie tego w tablicy kosztowałoby zbyt wiele bajtów. Zamiast tego wykorzystuję fakt, że BBC basic ma blok statycznych zmiennych całkowitych o A%..Z%wielkości 4 bajtów, każdy przechowywany w ciągłej pamięci. Przechowuję wartości X i Y w A%i C%uzyskuję dostęp za pomocą wskaźnika do %Bmodyfikacji wartością d, która zmienia się na przemian między 4i -4.

Nie golfił

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

Wynik

wprowadź opis zdjęcia tutaj

Level River St
źródło
4

JavaScript (ES6) + HTML, 96 94 + 34 = 130 128 bajtów

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
źródło
2

Mathematica, 87 85 bajtów

Dzięki @martin za 1 bajt.

Graphics@{EdgeForm@Thin,White,Rectangle[#,0{,}]&/@NestList[Sort[#/a]&,{1,a=√2},#]}&
JungHwan Min
źródło
Bardzo dobrze! EdgeForm@Thin: -1 bajt
martin
2

JavaScript (ES6) / SVG (HTML5), 170 bajtów

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

Wykorzystuje indeksowanie 1.

Neil
źródło