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.