불량 픽셀 만들기


40

당신의 임무는 화면에 불량 픽셀이있는 것처럼 보이게하는 프로그램을 작성하는 것입니다.

화면에서 정확히 하나의 픽셀과 빨강, 녹색 및 파랑 사이에서 정확히 하나의 채널을 선택하고 값을 항상 0 또는 항상 최대 (보통 255)로 만들어야합니다. 다른 채널의 값은 프로그램이 실행되지 않은 것과 같아야합니다.

하드 코딩 또는 각 실행에서 무작위로 생성하는 등의 방법으로 픽셀과 채널을 선택할 수 있습니다. 그러나 항상 최신 하드웨어에서 볼 수 있어야합니다.

해당 픽셀에 원래 표시되어야하는 색상이 변경된 경우 시스템이 충분히 빠를 때 프로그램이 0.5 초 이내에 업데이트되어야합니다.

현재 화면에 표시되는 내용 (예 : 기본 테마를 사용하는 작업 표시 줄)에 대해 가정 할 수 없습니다.

화면 보호기, 로그인 화면, 창 관리자 효과 등이 활성화되어 있으면 프로그램이 작동하지 않아도됩니다.

가장 짧은 코드가 승리합니다.


1
특정 OS를 가정 할 수 있습니까?
Loovjo

@Loovjo 네, 가능합니다.
jimmy23013

오우 ... 다른 채널을 보존하기위한 요구 사항은 이미 이미 우스운 바이트 수를 두 배로 늘릴 것입니다.
Bob

답변:


21

리눅스에서의 배쉬-25 바이트의 Latin-1

@wyldstallyns에서 3 / -2 제거 따옴표에서 / -1 깜빡 때문에 어떻게 작품 / -9에서 @Dennis

printf ÿ>/dev/fb0;exec $0

/ dev / fb0이 존재한다고 가정합니다 (아키 Linux 시스템에서 작동하며 다른 Linux 시스템에서도 작동한다고 생각합니다). 루트 액세스 권한도 필요합니다. X가 실행 중일 때는 작동하지 않습니다. 내 시스템에서 이것은 왼쪽 상단 픽셀의 파란색 채널을 항상 ÿ255로 설정합니다.


echo
-n-

@ wyldstallyns 그래, 나는 그에 따라 수정했습니다. AFAIK 하나 이상의 픽셀에 영향을 미칠 것이다 개행 인쇄 (과제 설명에 의해 허용되지 않는)
artificialnull

1
ÿ 255는 어떻습니까? 나는 이것이 효과가 있다고 생각하지 않습니다. 255는 유효한 유니 코드 문자가 아니며 ASCII도 아니므로 기계마다 다르므로 절대 사용해서는 안되는 고대 코드 페이지 중 하나에 의존해야합니다.
오리온

1
printf ÿ>/dev/fb0;exec $0몇 바이트를 절약합니다.
Dennis

3
@orion yes접근 방식이 작동하지 않습니다. /dev/fb0하나의 픽셀 채널을 쓴 후 다시 열어야합니다.
Dennis

11

비쥬얼 C ++, 102 100 99 98 바이트

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

콘솔 하위 시스템을 대상으로하는 Visual C ++ 컴파일러와 함께 Win32 API를 직접 사용하여 Windows에서 실행됩니다. "screen" 장치 컨텍스트 를 사용하여 픽셀의 빨간색 채널을 (9,9)에서로 설정합니다 0xFF.

휴면은 다른 프로그램이 get / set 사이에 그릴 수 있도록하는 데 필요합니다. 9ms가 너무 짧아서 초기 색상에서 픽셀이 1 로 고정 됩니다.


1 불행히도,이 질문에서 찾고있는 것과 같은 유형의 붙어있는 픽셀은 아닙니다 ...


8

HolyC, 13 바이트

GrPlot(,9,9);

지속 레이어에 검은 점을 직접 넣습니다.

레이어

어떻게 생겼는지

스크린 샷


6

C #을 247 244 371 366 354 352 바이트

Windows에서 실행됩니다. 전체 화면에 대한 장치 컨텍스트 를 가져 오고 (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);}}}

원래 GetPixel/ 를 가져오고 싶지 SetPixel않았지만에서 단일 픽셀을 읽는 쉬운 방법은 없습니다 Graphic. 그래서 지금 이것은 실제로 내 VC ++ 시도 와 동일 합니다. 아마도 비트 맵으로 저장하는 것이 더 짧을 것입니다 ...


@TuukkaX 덕분에 -5 바이트


1
의 매개 변수 목록에서 공백을 제거 할 수 있습니다 SetPixel.
Yytsi

트윗 담아 가기 그것들을 놓쳤다.
Bob

당신은 잠을 만들 수 있습니다 9ms보다는99ms

2
@Rob C ++ 답변에서 언급했듯이 시도했습니다. 불행히도, 테스트 할 때 (Win7) 9ms로는 충분하지 않은 것 같습니다. 다른 프로그램은 페인트 할 시간이 충분하지 않아서 픽셀이 초기 색상에 효과적으로 고정되었습니다.
Bob

또한 0x1FFFFFFF수면 대신에 사용중인 루프에서 반복에 대해 실행하여 단축 할 수 있지만 모든 시스템이 0.5 초 이내로 유지되도록 조정해야합니다.
Bob

3

SmileBASIC, 20 바이트

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

지속적으로 업데이트됩니다.
스프라이트 세트 0(A)에 1X에서 1의 지역 299, 99(a 적색 화소이다) 스프라이트 시트. (디스플레이 켜짐) + (가산 혼합)
33표시 속성 입니다.132


1

자바 7, 266 바이트

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);}}

Windows 7에서 이것을 실행했습니다. 기본적으로 흰색 배경의 Java 애플릿을 엽니 다. 마침표가있는 레이블을 추가 한 다음 레이블 광고 구역의 색상을 변경합니다.


2
애플릿 윈도우의 픽셀 만 변경하기 때문에 이것이 유효한지 확실하지 않습니다. 애플릿이 포커스를 잃으면 픽셀 색상을 변경하지 않습니다.이 기준이 충족되지 않으면이 답변을 삭제하겠습니다.
Poke

0

Tcl / Tk, 61

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

이미지에는 Vivaldi 아이콘의 왼쪽 상단 근처에 검은 색 픽셀이 있습니다. 불량 화소


대화식 쉘에있는 경우 사용할 수있는 명령의 약어가 있습니다.

Tcl / Tk, 57

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

Vivaldi 아이콘의 V 흰색 영역 위에 검은 색 픽셀이 있습니다. 불량 화소

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.