Suddivisioni di output di formati carta standard internazionali


11

Formati carta ISO definiti:

I formati di carta serie A sono definiti dai seguenti requisiti:

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.

inserisci qui la descrizione dell'immagine

Compito:

dato un input input f[n]A0 diviso in nsuddivisioni.

Casi test:

f[1]a f[12]:

inserisci qui la descrizione dell'immagine

Qui, A0 è dato da f[1], ma questa indicizzazione non è essenziale.

Criteri vincenti:

Vince il codice più breve in byte.


1
Non dovrebbe f[2]essere un A0con una linea orizzontale che lo divide? cioè, f[2]in realtà non è nel caso di test f[3]?
JungHwan Min

@JungHwanMin aggiustato ora
martin

Risposte:


2

BBC BASIC 49 personaggi ASCII

Dimensione file con token 44 byte

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

Molto più breve di prima! Dimentico sempre gli operatori bit ratei di BBC BASIC per Windows in quanto non erano disponibili sul mio vecchio computer in passato.

Personaggi della BBC BASIC 63 ASCII

Dimensione file con token 58 byte

Scarica l'interprete su 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.

Utilizza l'indicizzazione zero, che preferisco. Quindi 0 genera la carta per A0, 1 produce A0 diviso in una coppia di A1, ecc.

È necessario alternare la metà delle coordinate X e Y, ma farlo in un array sarebbe costato troppi byte. Invece uso il fatto che BBC Basic ha un blocco di variabili intere statiche A%..Z%di 4 byte ciascuna memorizzate nella memoria contigua. Memorizzo i valori X e Y in A%e C%accedo usando il puntatore a %Bmodificato dal valore di d, che si alterna tra 4e -4.

Ungolfed

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

Produzione

inserisci qui la descrizione dell'immagine


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>


2

Mathematica, 87 85 byte

Grazie @martin per 1 byte.

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

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

Utilizza l'indicizzazione basata su 1.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.