不良ピクセルを作成する


40

あなたの仕事は、画面に悪いピクセルがあるように見えるようにするプログラムを書くことです。

画面上のピクセルを1つだけ選択し、赤、緑、青の間のチャンネルを1つだけ選択し、その値を常に0または常に最大(通常255)にする必要があります。他のチャネルの値は、プログラムが実行されなかった場合と同じでなければなりません。

ピクセルとチャネルは、ハードコーディングや実行ごとにランダムに生成するなど、どのような方法でも選択できます。しかし、それはかなり最新のハードウェアで常に表示されている必要があります。

元々そのピクセルに表示されるべき色が変更された場合、システムが十分に高速である場合、プログラムは0.5秒未満で更新されるはずです。

画面に現在表示されているもの(デフォルトのテーマを使用したタスクバーなど)について推測することはできません。

スクリーンセーバー、ログイン画面、ウィンドウマネージャーからの効果などがアクティブな場合、プログラムを動作させる必要はありません。

最短のコードが優先されます。


1
特定のOSを想定できますか?
Loovjo

@Loovjoはい、できます。
jimmy23013

わー...他のチャンネルを保存するための要件は、おそらくすでにとんでもないバイト数を2倍にします。
ボブ

回答:


21

LinuxのBash-25バイトのLatin-1

@wyldstallynsからの+3 / 引用符の削除からの-2 / これがどのように機能するかを忘れたため-1 / @Dennisからの-9

printf ÿ>/dev/fb0;exec $0

/ dev / fb0が存在すると仮定します(私のArch Linuxシステムで動作します。他のLinuxシステムでも動作するはずです)。ルートアクセスも必要です。Xが実行されているとき、これは私には機能しません。私のシステムでは、これにより、左上のピクセルの青チャンネルが常にフル(ÿ255)に設定されます。


echo -nが必要です-そうでない場合、ゴルフは次のようになります:はいff> / dev / fb0
wyldstallyns

@wyldstallynsええ、それに応じて修正しました。私の知る限り、改行を印刷すると複数のピクセルに影響します(チャレンジの説明では許可されていません)
人造

1
ÿ255はどうですか?私はこれがうまくいくとは思わない。255は有効なUnicode文字ではなく、ASCIIでもないため、マシンごとに異なるため、使用すべきではない古代のコードページのいずれかに依存する必要があります。
オリオン

1
printf ÿ>/dev/fb0;exec $0数バイト節約します。
デニス

3
@orionこのyesアプローチは機能しません。/dev/fb01つのピクセルチャネルを書き込んだ後、再度開く必要があります。
デニス

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上で実行されます。「スクリーン」デバイスコンテキストを使用して、ピクセルの赤チャネルを(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たが、aから1つのピクセルを読み込む簡単な方法はありませんGraphic。だから今のところ、これは事実上私のVC ++の試みと同じです。ビットマップへの保存は短くなるかもしれません...


@TuukkaXのおかげで-5バイト


1
のパラメータリストから空白を削除できますSetPixel
Yytsi 16

@TuukkaXありがとう!それらを見逃した。
ボブ

スリープ状態にするの9msではなく99ms
ロブ

2
@Rob C ++の回答で述べたように、それを試しました。残念ながら、私がテストしたとき(Win7)には9ミリ秒では十分ではなかったようです。他のプログラムではペイントするのに十分な時間がなかったため、ピクセルは事実上初期の色にこだわった。
ボブ

また0x1FFFFFFF、スリープの代わりにビジーループで約反復を実行することで短縮することもできますが、これはすべてのマシンが0.5秒の制限内に収まるように調整する必要があります。
ボブ

3

SmileBASIC、20バイト

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

常に更新されます。
セットは、スプライト01のX 1の領域29999(赤色画素)とスプライトシート上。
33は表示属性であり、1(表示オン)+ 32(加算ブレンド)です。


1

Java 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
アプレットウィンドウのピクセルを変更するだけなので、これが有効かどうかは実際にはわかりません。アプレットがフォーカスを失ってもピクセルの色は変わりません...チャレンジの基準を満たさない場合、この回答を削除します。
ポケ

0

Tcl / Tk、61

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

画像では、Vivaldiアイコンの左上隅に黒いピクセルがあります。 badpixel


対話型シェルの場合、使用可能なコマンドの略語があります。

Tcl / Tk、57

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

VivaldiアイコンのVホワイト領域に黒いピクセルがあります。 badpixel

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.