Crea un pixel cattivo


40

Il tuo compito è quello di scrivere un programma che fa apparire il tuo schermo con un pixel difettoso.

Dovresti scegliere esattamente un pixel sullo schermo e esattamente un canale tra rosso, verde e blu e rendere il suo valore sempre 0 o sempre massimo (di solito 255). I valori di altri canali dovrebbero essere gli stessi del programma non eseguito.

Puoi scegliere il pixel e il canale in qualsiasi modo, ad esempio codificandolo o generandolo casualmente ad ogni corsa. Ma deve essere sempre visibile su hardware abbastanza moderni.

Se il colore che originariamente dovrebbe essere visualizzato su quel pixel è cambiato, il tuo programma dovrebbe aggiornarsi in meno di 0,5 secondi quando il sistema è abbastanza veloce.

Non è possibile fare ipotesi su ciò che è attualmente visualizzato sullo schermo (come una barra delle applicazioni che utilizza il tema predefinito).

Non è necessario che il programma funzioni quando sono attivi uno screensaver, una schermata di accesso, un effetto da un gestore di finestre, ecc.

Il codice più corto vince.


1
Possiamo assumere un sistema operativo specifico?
Loovjo,

@Loovjo Sì, puoi.
jimmy23013,

Ow ... il requisito di preservare gli altri canali probabilmente raddoppia il mio conteggio dei byte già ridicolo.
Bob,

Risposte:


21

Bash su Linux - 25 byte di Latin-1

+3 da @wyldstallyns / -2 dalla rimozione delle virgolette / -1 perché ho dimenticato come funziona / -9 da @Dennis

printf ÿ>/dev/fb0;exec $0

Suppone che / dev / fb0 esista (lo fa sul mio sistema Arch Linux e penso che dovrebbe essere su qualsiasi altro sistema Linux). Richiede anche l'accesso root. Questo non funziona per me quando X è in esecuzione. Sul mio sistema, questo imposta costantemente il canale blu del pixel in alto a sinistra al massimo ( ÿè 255).


È necessario l'eco -n - altrimenti questo potrebbe golf per: sì ff> / dev / fb0
wyldstallyns

@wyldstallyns Sì, l'ho corretto di conseguenza. AFAIK, la stampa della nuova riga influenzerebbe più di un pixel (non consentito dalla descrizione della sfida)
artificialnull

1
Come è ÿ 255? Non penso che funzioni. 255 non è un carattere unicode valido, non è nemmeno ascii, quindi deve fare affidamento su uno di quegli antichi codici che non dovrebbero mai essere usati, poiché differiscono da macchina a macchina.
Orione,

1
printf ÿ>/dev/fb0;exec $0salva qualche byte.
Dennis,

3
@orion L' yesapproccio non funziona. /dev/fb0deve essere riaperto dopo aver scritto un canale pixel.
Dennis,

11

Visual C ++, 102 100 99 98 byte

#include<Windows.h>
int main(){for(HDC d=GetDC(0);;Sleep(99))SetPixel(d,9,9,GetPixel(d,9,9)|255);}

Funziona su Windows, utilizzando direttamente l'API Win32 con il compilatore Visual C ++ destinato al sottosistema console. Utilizza il contesto del dispositivo "schermo" per impostare il canale rosso del pixel su (9,9) su 0xFF.

Il sonno è necessario per consentire ad altri programmi di passare tra get / set - e 9ms era troppo breve, portando il pixel a rimanere bloccato 1 sul suo colore iniziale.


1 Sfortunatamente, non esattamente lo stesso tipo di pixel bloccati che questa domanda sta cercando ...


8

HolyC, 13 byte

GrPlot(,9,9);

Inserisce direttamente un punto nero sul livello persistente.

Livelli

Cosa sembra.

Immagine dello schermo


6

C #, 247 244 371 366 354 352 byte

Funziona su Windows. Ottiene un contesto di dispositivo per l'intero schermo e massimizza ripetutamente il canale rosso su (9,9).

namespace System.Runtime.InteropServices{using I=IntPtr;class P{[DllImport("User32")]static extern I GetDC(I h);[DllImport("Gdi32")]static extern int GetPixel(I h,int x,int y);[DllImport("Gdi32")]static extern int SetPixel(I h,int x,int y,int c);static void Main(){for(I d=GetDC((I)0);;Threading.Thread.Sleep(99))SetPixel(d,9,9,GetPixel(d,9,9)|255);}}}

Inizialmente non volevo importare GetPixel/ SetPixel, ma non esiste un modo particolarmente semplice per leggere un singolo pixel da a Graphic. Quindi in questo momento questo è effettivamente lo stesso del mio tentativo di VC ++ . Forse il salvataggio su bitmap sarà più breve ...


-5 byte grazie a @TuukkaX


1
È possibile rimuovere gli spazi bianchi dall'elenco dei parametri di SetPixel.
Yytsi,

@TuukkaX Grazie! Ho perso quelli.
Bob,

Puoi farlo dormire 9mspiuttosto che99ms
Rob

2
@Rob L'ho provato, come menzionato nella risposta C ++. Sfortunatamente, 9ms non sembravano sufficienti quando ho provato (Win7). Altri programmi non hanno avuto abbastanza tempo per dipingere, quindi il pixel si è effettivamente bloccato sul suo colore iniziale.
Bob,

Potrebbe anche accorciarlo scorrendo le 0x1FFFFFFFiterazioni in un ciclo occupato anziché lo sleep, ma questo dovrebbe essere regolato affinché ogni macchina rimanga entro il limite di 0,5 secondi.
Bob,

3

SmileBASIC, 20 byte

SPSET.,299,99,1,1,33

Aggiornamenti costantemente.
Imposta lo sprite 0su un'area 1x 1in 299, 99sul foglio sprite (che è un pixel rosso).
33è l'attributo display, che è 1(display on) + 32(fusione additiva).


1

Java 7, 266 byte

import java.awt.*;public class K extends java.applet.Applet{public static void main(String[]a){new K();}Label l=new Label(".");public K(){add(l);}public void paint(Graphics g){s(Color.red);s(Color.green);s(Color.blue);repaint();}void s(Color c){l.setForeground(c);}}

Ho eseguito questo su Windows 7. Apre un'applet Java che ha uno sfondo bianco per impostazione predefinita. Aggiunge un'etichetta con un punto e quindi cambia il colore dell'etichetta fino alla nausea.


2
In realtà non sono sicuro se questo è valido poiché cambia solo il pixel nella finestra dell'applet. Non cambierà il colore dei pixel se l'applet perde lo stato attivo ... Eliminerò questa risposta se non soddisfa i criteri della sfida.
Poke

0

Tcl / Tk, 61

wm at . -tr #F0F0F0
wm o . 1
grid [canvas .c]
.c cr o 9 9 9 9

Nell'immagine c'è un pixel nero vicino all'angolo in alto a sinistra dell'icona Vivaldi: badpixel


Se su una shell interattiva, ci sono abbreviazioni di comandi disponibili:

Tcl / Tk, 57

wm at . -tr #F0F0F0
wm o . 1
gri [can .c]
.c cr o 9 9 9 9

C'è un pixel nero sopra l'area V bianca dell'icona Vivaldi: badpixel

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.