Ausgabeunterteilungen von internationalen Standardpapierformaten

11

Definierte ISO-Papiergrößen:

Die Papierformate der A-Serie werden durch die folgenden Anforderungen definiert:

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.

Geben Sie hier die Bildbeschreibung ein

Aufgabe:

gegeben eine Eingabe f[n]Ausgabe A0 in nUnterteilungen unterteilt.

Testfälle:

f[1]zu f[12]:

Geben Sie hier die Bildbeschreibung ein

Hier ist A0 gegeben durch f[1], aber diese Indizierung ist nicht wesentlich.

Gewinnkriterien:

Der kürzeste Code in Bytes gewinnt.

Martin
quelle
1
Sollte nicht f[2]sein ein A0mit einer horizontalen Linie zwischen dem? dh ist das nicht f[2]im testfall eigentlich f[3]?
JungHwan Min
@ JungHwanMin jetzt angepasst
Martin

Antworten:

2

BBC BASIC 49 ASCII-Zeichen

Tokenisierte Dateigröße 44 Bytes

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

Viel kürzer als zuvor! Ich vergesse immer die Bitshift-Operatoren in BBC BASIC für Windows, da sie früher auf meinem alten Computer nicht verfügbar waren.

BBC BASIC 63 ASCII-Zeichen

Tokenisierte Dateigröße 58 Bytes

Download-Interpreter unter 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.

Verwendet die Nullindizierung, die ich bevorzuge. Somit gibt 0 das Papier für A0 aus, 1 gibt A0 aus, das in ein Paar A1s usw. unterteilt ist.

Es ist notwendig, zwischen der Halbierung der X- und Y-Koordinaten zu wechseln, aber dies in einem Array zu tun, hätte zu viele Bytes gekostet. Stattdessen verwende ich die Tatsache, dass BBC Basic einen Block statischer Ganzzahlvariablen A%..Z%von jeweils 4 Bytes im zusammenhängenden Speicher gespeichert hat. Ich speichere die X- und Y-Werte in A%und C%und greife mit dem Zeiger zu, der %Bdurch den Wert von d geändert wird, der zwischen 4und wechselt -4.

Ungolfed

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

Ausgabe

Geben Sie hier die Bildbeschreibung ein

Level River St.
quelle
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
quelle
2

Mathematica, 87 85 Bytes

Danke @martin für 1 Byte.

Graphics@{EdgeForm@Thin,White,Rectangle[#,0{,}]&/@NestList[Sort[#/a]&,{1,a=√2},#]}&
JungHwan min
quelle
Sehr schön! 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} />`);

Verwendet 1-basierte Indizierung.

Neil
quelle