X segna il punto: un lavoro di stampa


10

Dati due numeri, stampare una pagina con una "X" nella posizione specificata (± 10%).

I numeri devono essere percentuali o frazioni delle dimensioni dell'area di stampa della pagina, ad esempio [25,75]oppure ["15%","0%"]oppure [0.33,1]. Non devi considerare i margini. Ricorda solo di indicare quale numero è larghezza, quale altezza e quale angolo è l'origine.

Ovviamente si può presumere che una stampante sia connessa e anche qualsiasi stampante virtuale conta. In effetti, potresti voler impostare una stampante PDF come stampante predefinita prima di iniziare questa sfida.

È possibile creare un file stampabile (ad esempio un PDF) e inviarlo a una stampante virtuale, che a sua volta crea il PDF del risultato, ma non è possibile creare direttamente il PDF finale. Questo deve essere un lavoro di stampa corretto.

Se possibile, includere una foto, una scansione o uno screenshot del risultato o un collegamento a un documento online. Si noti che Imgur accetta PDF.

Ovviamente otterrai più voti se in realtà posizioni una X anziché emettere nuove linee e spazi con un carattere e una dimensione di carta presunti.

Esempio

Per altezza di input 75% e larghezza 25%, dall'alto a sinistra, stampare il seguente documento:


[25,75]



Siamo autorizzati a leggere il file immagine da qualsiasi luogo?
Decadimento beta

@BetaDecay Quale file immagine?
Adám,

L'immagine nella tua domanda: i.stack.imgur.com/rfZeO.png
Decadimento beta

@BetaDecay Dovresti generare un documento, non leggere un'immagine.
Adám,

Quale formato di carta dovremmo usare / assumere o è importante?
Stephen,

Risposte:


6

MacOS Bash + OfficeJet Pro 8600, 46

(yes ''|sed $[$2*3/5]q;printf %$[$1*4/5]sX)|lp

L'origine è l'angolo in alto a sinistra.

Ho fatto una stampa di prova per verificare le dimensioni dei caratteri di ciò che viene stampato dalla lpmia stampante - sembra essere 82w x 64h, quindi le percentuali (intere) moltiplicate per 3/5 e 4/5 rientrano rispettivamente nella tolleranza del 10%.

Risultato, con input da riga di comando di 25 75:

inserisci qui la descrizione dell'immagine


6
Whoa, deve essere il primo invio di oggetti fisici su PPCG.
Adám,


1
@ Adám che dire di questo ?
NoOneIsHere

1

APL (Dyalog) su Windows, 36 35 byte

La funzione anonima prende (Y, X) in percentuale dall'angolo in alto a sinistra come argomento

{'X.'WC'Text'(2'X'WC'Printer')⍵}

Iniziamo con un elenco di tre elementi:

{ una funzione anonima (tutte le variabili sono locali)

 l'argomento, ad es 75 25

( alla destra

  'X'⎕WC'Printer'W indows C oggetto Reate una stampante denominata X , di ritorno'#.X'

  2↓ rilasciare due personaggi per ottenere solo 'X'

) alla destra

'Text' cosa aggiungeremo

'X.'⎕WCW indows C reate un (tipo, contenuto, posizione) oggetto nell'oggetto X , tornando'#.X'

} fine della funzione (poiché X è locale, viene distrutta quando termina la funzione, segnalando a Windows che il processo di stampa è terminato, il che provoca la stampa da parte di Windows)


X @ 75 25


0

Java 8, 210 209 byte

-1 byte: modificato nella sintassi del curry

import java.awt.print.*;
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",(int)(p.getWidth()*x),(int)(p.getHeight()*y));return i;});try{j.print();}catch(Exception e){}};

Prende ingresso come versione a virgola mobile cento: 0.25, 0.75.

Se il formato della carta può essere assunto come 8,5x11 pollici (72 dpi), 184 byte

import java.awt.print.*;
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",x*612/100,y*792/100);return i;});try{j.print();}catch(Exception e){}};

Utilizza i valori predefiniti per la stampa in PDF. Ora prende input come la versione intera di cento: 25, 75.

Se si può anche assumere un sistema operativo Windows, 177 byte

import sun.awt.windows.*;
x->y->{WPrinterJob j=new WPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",x*612/100,y*792/100);return i;});try{j.print();}catch(Exception e){}};

Ingressi Come sopra: 25, 75.

uso

import java.awt.print.*;
...
Function<Double, Consumer<Double>> f =
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",(int)(p.getWidth()*x),(int)(p.getHeight()*y));return i;});try{j.print();}catch(Exception e){}};
...
f.apply(.25).accept(.75);

Caso di prova

Per input di 0.25, 0.75:

Java Printing Test Case

(Non ho una stampante fisica, ma dovrebbe funzionare senza problemi)


Molto impressionante. Perché avete bisogno catch(Exception e){}?
Adám,

@ Adám Perché PrinterJob.print()lancia un PrinterExceptione non ho visto alcun modo per aggirarlo .
Justin Mariner,

0

C #, 259 202 201 byte

namespace System.Drawing.Printing{w=>h=>{var p=new PrintDocument();p.PrintPage+=(s,e)=>e.Graphics.DrawString("X",new Font("Onyx",9),Brushes.Red,e.PageBounds.Width*w,e.PageBounds.Height*h);p.Print();};}

Onyx è un font installato sul mio computer Windows 10 per impostazione predefinita, dove 4 sembra essere il nome del font più breve. L'ho verificato eseguendo quanto segue in C # e quindi ispezionando blahil debugger.

var blah = FontFamily.Families.GroupBy(o => o.Name.Length)
                              .OrderBy(g => g.Key);

Versione completa / formattata:

namespace System.Drawing.Printing
{
    class P
    {
        static void Main(string[] args)
        {
            Func<float, Action<float>> f = w => h =>
            {
                var p = new PrintDocument();
                p.PrintPage += (s, e) =>
                    e.Graphics.DrawString("X", new Font("Onyx", 9), Brushes.Red,
                                          e.PageBounds.Width * w, e.PageBounds.Height * h);
                p.Print();
            };

            f(0.25f)(0.75f);
        }
    }
}

Caso di prova (0,25, 0,75):


Documento di esempio

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.