ピッチダーク(アースアワー記念)


31

あなたの目標は簡単です。プログラムは、コンピューターの画面を完全に黒にしなければなりません。

プログラムが開始された後、画面はすぐに完全に黒くなり、プログラムが終了するまで(任意のキー、またはalt + F4、マウスの動きなど)、そのままに戻らなければなりません。そのため、コンピューターをシャットダウンしたり、モニターの電源を切ったりすることはできません。この間、単一の非黒ピクセルが表示されることはありません。まばたきカーソルも表示されません。

ユーザーは、プログラムを起動した後、画面の外にマウスを移動したり、ケーブルを外したり、ユーザー入力を行ったりする必要はありません。

コンピューターにはモニターが1つしか接続されていないと安全に想定できます。また、標準のデスクトップまたはノートブックコンピューターを想定しています。これは、通常のモニターなしで特定のデバイスで実行するのは簡単すぎるためです。

外部リソース(黒い画像、GUIファイルなど)を使用する場合、バイト単位のサイズがコードサイズに追加されます。

1つのOSファミリでのみ動作する場合、またはopenglなどを必要とするが、非常に特定のハードウェア構成を必要とする場合は嫌です。

ソースコードは、他のプログラム(スクリーンセーバーなど)が使用する構成ファイルだけでなく、プログラミング言語で作成する必要があります。


9
それは...スタックピクセルと画面上では動作しません
イスマエルミゲルに

21
@IsmaelMiguel:完全に動作する状態のスクリーンを安全に想定できます。それ以外の場合、「ALUのトランジスタが燃え尽きて、コンピューターが浮動小数点演算を実行できない場合」というスタイルで他の質問に反対することができます。:)
vsz

5
楽しい事実:CRTもダイナミックコントラストも使用しない画面では、これはわずかに多くの電力を使用します!
Ry-

2
現実世界のアプリケーション:天文学!list.apple.com/archives/Carbon-dev/2008/May/msg00005.html
チャールズではない

2
すべての回答は自動的に失格になります。モニターの1つに、赤の値が常に255のピクセルがあります!
帽子の男

回答:


22

Bash、28 または12

Ubuntu 12.04 LTSのデフォルトインストールを想定しています。

gnome-screensaver-command -a

スクリーンセーバーを自動的に起動します。これはデフォルトでは黒い画面です。

編集:@Glenn Randers-Pehrsonが提案したように、12バイトの

/*/*/gn*d -a

この名前を満たす別のファイルがシステムにある場合、これは機能しない可能性があることに注意してください/tmp/1/gndしかし、気にするのはコードゴルフです。


チェックアウト私の他のbashの答えをあなたはGnomeのスクリーンセーバーを使用していない場合は!


1
「なぜ一体どうしてそんなことを考えなかったのか?」と思わせる答え。:)
アレックスソーントン

1
それは実際にはbashを使用して画面をクリアするわけではありません。
ダースエグレジャス

3
「ソースコードは、他のプログラム(スクリーンセーバーなど)が使用する構成ファイルだけでなく、プログラミング言語で作成する必要があります。」
ハンネスカルピーラ

2
@hannes karppila他のプログラムが使用する設定ファイルは変更しませんでした。ほとんどのbashスクリプトが行う別のプログラムのみを開始しました(純粋なbashで書かれていない限り)
user12205

5
@ ace、Golfed:gnome-screensaver-commandの代わりに/ * / * / gn * dは約16バイトを節約します(mniipによるアイデア)
グレンランダース-パーソン

31

アセンブリ(ブートローダー)131文字/ 512バイトのコンパイル(実際には小さいですが、ブートセクターは512バイト長でなければなりません。)

シンプルなブートローダーです。コンピューターが起動すると、BIOSはディスクからそれをロードします(フロッピー)。その後、グラフィックモードに入り、ハングします。ユーザーが電源ボタンを押すと、プログラムは終了し、コンピューターはプログラムを実行する前のモードに移行します。

VirtualBoxでテスト済み。

nasmでコンパイルします:

nasm -f bin file.asm -o start.img

ソースコード:

[BITS 16]
[ORG 0x7C00]
cli
mov AX,0x0
mov SS,AX
mov SP,0x9000
sti
mov AH,0x0
mov AL,0x13
int 0x10
times 510 - ($-$$) db 0
dw 0xAA55

1
VirtualBoxでの実行方法:(nasmを使用してコンパイル)、新しいVM、タイプ:その他、バージョン:その他/不明、ハードドライブなし。次に、VMの設定に移動し、[ストレージ]を選択し、リスト内で右クリックして、[フロッピーコントローラの追加]を選択します。コンパイルされたimgファイルをフロッピードライブにマウントします。保存して、実行できます。楽しい!
ザックメルテス

私はDOSプログラムと同じことをしたかったが、あなたはより速かった。基本的に私が覚えている唯一の事は、ワァイバックからアセンブラー:)
Fels 14

仕組みを説明してください。
メガマン

なぜcliand stiSS次の命令の間、割り込みを自動的に無効にし、AX前に割り込みが発生しても変更されませんMOV SS,AX。また、なぜMOV AX, 0x132 MOVの代わりにしないのですか?
ルスラン

若い私は、コードを適切に書く方法を知りませんでした。現在の私もおそらく知りません。
ハンネスカルピーラ


14

Java:165

シンプルなJavaは、フルスクリーンの黒いフレームを作成するだけです。終了するには、Alt + Tabでコンソールに戻り、Ctrl-Cを押す必要がありますが、これは十分に単純なようです。

import java.awt.*;class B{public static void main(String[]a){Frame f=new Frame();f.setExtendedState(6);f.setUndecorated(1>0);f.setBackground(Color.BLACK);f.show();}}

// line breaks below

import java.awt.*;
class B{
    public static void main(String[]a){
        Frame f=new Frame();
        f.setExtendedState(6);
        f.setUndecorated(1>0);
        f.setBackground(Color.BLACK);
        f.show();
    }
}

11

Applesoft] [ベーシック(17)

1 HGR2:GET X:TEXT

私はこれが実際に17バイトだとは思わない...私はそれが少ないかもしれないと思う。私の記憶が正しければ、Applesoftはそのキーワードをトークン化したので、各キーワードは実際には1バイトでした。どちらの場合も+1です。
ベスカ

11

バッシュ-57 26

C=/s*/*/*/*/b*ess;(A=$(cat $C);echo 0;cat;echo $A)|tee $C

ラップトップでは、これにより画面のバックライトの明るさが0に設定されます。/sys/class/backlightタブレットまたは携帯電話では、これにより画面の明るさが0に設定されます/sys/class/leds


2
「と、プログラムが終了するまで、その(任意のキー、またはALT + F4、マウスの動きなど)のまま、その後の事は通常の状態に戻す必要があります」
Ry-

1
Fn+F6Fn+<up arrow>および他の多くのキーの組み合わせは「任意のキー」と「など」に分類され、それらは光を元に戻す多くの1つです。
イスマエルミゲル

1
@minitechああ。固定まあ、...
mniip

これは私にはまったく機能しません。bashプロンプトから「C = / s * / * / * / * / b ess;(A = $(cat $ C); echo 0; cat; echo $ A)| tee $ C」を実行すると、catになります:/ s * / * / * / * / b ess:そのようなファイルまたはディレクトリのティーなし:/ s * / * / * / * / b * ess:そのようなファイルまたはディレクトリのない

@Lembik輝度コントローラーがないか、存在するものにドライバーが欠けていると思います。マインドペーストビニングfind /sys/class/{backlight,leds}/*/
mniip

8

私はこれがことを知っていが、私は抵抗できませんでした。

ブラウザウィンドウ(この場合はChrome)が開いていないことを確認してください。

このPitchBlack.bat(31 24バイト)を実行します

chrome --kiosk file:///1

Chrome.exeファイルと同じディレクトリに配置すると、このバッチはChromeをキオスクモードで実行し、フルスクリーンで/ 1(49 41 34バイト)というファイルを開きます。

<body bgcolor=0 style=cursor:none>

ほら!

合計バイト数:80 72 58
@aceに感謝:)

プログラムを終了するには、従来のALT + F4を使用する必要があります。実際には、プログラムの開始に準備を行う必要はありません(前にも/1、バッチファイルを配置する必要もありません)ので、ルールには問題ありません。

画面の境界線にカーソルを合わせると、カーソルが表示される可能性があることに注意してください。OPは、これが許可されていないとは言いませんでした。

プログラムが開始された後、画面はすぐに完全に黒くなり、プログラムが終了するまで(任意のキー、またはalt + F4、マウスの動きなど)、そのままに戻らなければなりません。

だから、これはまったく問題ないはずです!:P


1
たぶん、chrome --kiosk 'data:text/html,<style>body{background:#000;cursor:none;}</style>'追加のファイルなしで動作するようなものですか?
Vi。

file:shcemeを使用する場合、URLバーは表示されませんが、data:スキームにはURLバーがありますか?
Vi。

私のシステムでchromium-browser --kiosk 'data:text/html,<style>body{background:#000;cursor:none;}</style>は、バーのない黒いページでほぼ全画面のChromiumが起動します。
Vi。

UbuntuとChromium 34.0でテストされfile:///1、htmlがとして保存されていれば動作し/1、htmlファイルは次のように短縮できます<body bgcolor=0 style=cursor:none>
user12205

1
chrome答えではなくchromium
user12205

7

C#-211 202 200 196 179バイト

using System.Windows.Forms;class A{static void Main(){Cursor.Hide();new Form{BackColor=System.Drawing.Color.Black,WindowState=(FormWindowState)2,FormBorderStyle=0}.ShowDialog();}}

カーソルを非表示にし、フルスクリーンの黒いウィンドウを表示します。Alt+ で閉じることができますF4

ゴルフされていないコード

using System.Windows.Forms;
class A
{
    static void Main()
    {
        Cursor.Hide();
        new Form
        {
            BackColor = System.Drawing.Color.Black,
            WindowState = (FormWindowState)2, // FormWindowState.Maximized
            FormBorderStyle = 0 // FormBorderStyle.None
        }.ShowDialog();
    }
}

にキャストする必要はありません。FormBorderStyle整数がの場合、それは必要ないからです0


2
あなたは置き換えることができSystem.Drawing.Color.BlackFormWindowState.MaximizedFormWindowState.MaximizedおよびFormBorderStyle.Noneそれらに対応する値を持ちます。
イスマエルミゲル

@IsmaelMiguel:ありがとう、FormWindowStateとFormBorderStyleを更新しました!Colorは列挙型ではないため、更新できませんでした。
ProgramFOX

試してみてくださいColor.Black。すぐに動作するはずです。またはBackColor=This.ForeColor、どのMIGHTも機能します。
イスマエルミゲル

@IsmaelMiguel:を追加using System.Drawing;しなかったため、1つ目は機能しません。2つ目は、括弧内に変数値を設定したため機能しません。
ProgramFOX

using System;それnew Windows.Forms.Formから試してみてくださいBackColor=Drawing.Color.Black。それはMIGHT仕事します!そして、数バイトを節約します。
イスマエルミゲル

5

C#175 171 167

class P{static void Main(){SendMessage(65535,274,61808,2);}[System.Runtime.InteropServices.DllImport("user32")]static extern int SendMessage(int a,int b,int c,int d);}

ここでの答えの多くは、実際には画面を作成しません 黒く。LCD画面では、バックライトが点灯したままになり、暗い灰色が残ります。

この小さなスニペットは、非アクティブタイマーの動作と同じように、実際にWindowsに画面をオフにするように指示します(注:これは、モニターをスタンバイ状態にするだけなので、「電源オフなし」ルールに違反しません。 ほとんどのモニターは、入力が再開されたときに再びオンにします。また、そのルールの意図は、プログラムがそれを再びオンにできることを確認することであるようです-以下を参照してください。

画面をオンに戻すには、マウスを動かすかキーを押します。

https://stackoverflow.com/a/713519/1030702から適応した電源オフの監視


「そのため、コンピューターをシャットダウンしたり、モニターの電源を切ったりすることは許可されていません。」
イスマエルミゲル

1
@IsmaelMiguel私は正当化を提供しました。「プログラムが終了するまで(任意のキー、またはalt + F4、マウスの移動など)、その後は正常に戻るはずです。シャットダウンします...」-ルールの意図が満たされました。これにより、「オンに戻ります」。意図を無視して、文字通りの意味も飽和させます。Microsoftの用語にもかかわらず、これは実際にそれをオフにせず(プロジェクターのタイムアウトなどは別として)、スタンバイにします。
ボブ

4

Amigaアセンブリ

ASM-One- 228 219文字、172バイトのコンパイル(168バイト最適化)

Amigaアセンブリで単一の行を最後にコーディングしてから20年が経ちました。:-)

Amigaは、空白の画面をセットアップするという点でPCよりも少し複雑であったため、できるだけ多くのセットアップと分解を取り除こうとしました。割り込みやマルチタスクを無効にすることはありません。二重のWaitTOFはありません。ビューの置換なし。など。私はこれを最速で最も汚いデモ用に書いたことすらなかったでしょう。これはこれを意味します:

  • 悪い習慣です
  • 完全に安全ではないかもしれません
  • 常に機能するとは限りません
  • それらの免責事項があったとしても、おそらく20年間の怠慢されたアセンブリのために愚かな間違いがあります。

...エミュレートされたA500およびA1200でテストされていますが、高速メモリの有無は問いません。標準の実行可能ファイルにコンパイルします。マウスクリックが終了します。

l=$dff080
 move.l 4,a6
 lea g,a1
 jsr -408(a6)
 move.l d0,a1
 move.l 38(a1),d4
 jsr -412(a6)
 move.l #c,l
w:btst #6,$bfe001
 bne w
 move.l d4,l
 rts
g:dc.b "graphics.library",0
 SECTION d,DATA_C
c:dc 256,512,384,0,-1,-2

少ないゴルフ:

COP1LC equ $dff080

    move.l  $4, a6          ; ExecBase
    lea     gfxname, a1
    jsr     -408(a6)        ; OpenLibrary (old, hence no need for clearing d0)
    move.l  d0, a1
    move.l  38(a1), d4      ; store copper list
    jsr     -414(a6)        ; CloseLibrary
                            ; Yeah, if I had a penny for the times I saw that left out
                            ; but I just... can't...

    move.l  #copper,COP1LC  ; write copper list

wait:
    btst    #6, $bfe001     ; Check mouse click
    bne     wait

    move.l  d4, COP1LC      ; restore copper list
    rts

gfxname:
    dc.b    "graphics.library", 0

    SECTION data, DATA_C
copper:
    dc.w $0100, $0200       ; disable bitplanes
    dc.w $0180, $0000       ; color 0 = black
    dc.w $ffff, $fffe       ; end

1
ああ、思い出!大好きです!
RobIII

ええ、これはコードゴルフでの実際の試みというよりも、懐かしい旅行の言い訳に過ぎませんでした。Amigaアセンブリは、文字数に関してPerlやPythonと競合することはめったにありません。私は少し驚いたが、C#やJavaに勝てなかった。:)
JimmiTh

4

Pythonの/ pygameの199 127 125 92

from pygame import*;display.set_mode((9,9),-1<<31);mouse.set_visible(0)
while 1:event.pump()

エースからのいくつかのヒントに感謝します。


ALT + F4カウントなので、^ Cカウントも取得するため、最後に多くのバイトをスキップできます。
o0 '。

1
^ Cが機能するためには、ターミナルに集中する必要があります。プログラムでは、pygame.FULLSCREENの編集により、pygameウィンドウは常にフォーカスされます。1つの代替方法は、終了せずにプログラムを終了することです。 OSは何かがおかしいことに気づきます。
ハリービーズル

from pygame import*代わりに使用して、いくつかのバイトを保存できます。また、fill((0,0,0))デフォルトの色は黒なので、必要ないと思います。その後、s完全に削除できます。私もdisplay.flip()必要だとは思わない。また、インデントには4つではなく1つのスペースを使用すると、スペースを節約できます。最後に、FULLSCREENおよびの代わりに、KEYDOWNそれぞれの数値-1<<31(-2147483648)およびを使用できます2
user12205

4

TI-BASIC、7 6

Shade(Ymin,Ymax

端末(ホーム画面)またはプログラムとして機能します。押すONか、他のほとんどのボタンを押すと、ターミナル/ホーム画面に戻ります。


として1バイト小さくすることができます(そして、グラフ画面ウィンドウが変更されても動作します)Shade(Ymin,Ymax
リルトシアスト

@ThomasKwaそうですね、チップをありがとう!
ティムテック

3

コモドール64(16バイト)

ROL $A903
BRK
STA $D020
STA $D011
JSR $FF8A
JMP ($032C)

Turbo Assemblerを使用してから20年以上が経過しているため、VICEのモニターで使用するソースのみを提供できます。これを$ 032Cとsave[1]から$ 033Bで組み立てます。ResetおよびLOAD"PITCHDARK",8,1。古き良きヒットRunstop+Restore正常に戻って取得するには、[2]。

どのように機能しますか?

真のソースは次のとおりです。

032C 2E 03      .BY 2E 03
032E A9 00      LDA #$00
0330 8D 20 D0   STA $D020   ; set border color  
0333 8D 11 D0   STA $D011   ; set VIC blanking mode
0336 20 15 FD   JSR $FF8A   ; reset the vectors we trampled
0339 6C 2C 03   JMP ($032C) ; call the real CLALL

$ 032Cは、カーネル CLALLまたは「すべてのチャンネルとファイルを閉じる」ベクトルです。クリーンアップの一環として、BASIC LOADコマンドはCLRを呼び出し、これによりが呼び出されますCLALLCLALLベクターを、ベクターの直後の独自のルーチンへのポインターに置き換えます。境界線を黒に設定し、境界線で画面を覆い、RESTOR$ FF8Aで呼び出します。置換される最後のベクトルRESTORSAVE$ 0332-0333です。これは、最後の8バイトが影響を受けないことを意味します。次に、復元されたCLALLベクターを介して終了し、LOADの実行を継続します。

このおかげで、メモリレーンを下る楽しい旅行でした。自動実行プログラムの実行方法を再学習しました:)

[1] bsaveではなくsaveを使用して、1でのロードが正しく機能するようにします
[2]おそらくx64でのエスケープ+ PageUp。


3

sh/X11 on Arch Linux, 26

b=/b*/*ht;$b =0;read;$b =7

you can probably shave a few chars with an alias and maybe using -set for both
ardnew

1
Use xbacklight = 0 and xbacklight + 7.
bb010g

1
29 bytes: x=xbacklight;$x +0;read;$x +7
nyuszika7h

@nyuszika7h: Thanks! (Got it to 28, too!)
Ry-

3

Bash, 37

Uses unclutter to hide the mouse pointer and a fullscreen session of xterm to black the screen. The cursor will reappear for a moment if you move it, but if you leave it alone the screen will be black until you press Ctrl+C.

It will take a few seconds for the mouse cursor to disappear (as long as you don't move it). If this isn't fast enough, add the -grab option to unclutter for an additional 6 chars.

unclutter&xterm -fu -bg black -e yes ''

WARNING: this will leave a process of unclutter running even after you press Ctrl+C, use killall unclutter to stop it.

Explanation

unclutter & launches unclutter. The & is there so we can get on with the next command instead of waiting for this one to terminate.

xterm -fullscreen launches XTerm, whose background is black by default.

The -e yes '' option causes XTerm to run yes '', thereby printing the empty string forever. This serves to hide the terminal cursor, and also provides the Ctrl+C functionality.


Screen gets completely white in my system.
Vi.

@Vi. that means your XTerm background colour is white.

You can abbreviate "-fullscreen" to "-fu", and use "-bg black" to force black background color regardless of user preferences.
semi-extrinsic

You can remove the spaces around & to save 2 bytes.
nyuszika7h

3

Bash, 31 (or 52)

On a TTY, use the following script (assuming your default TTY background is black, which is true at least for Ubuntu 12.04 LTS):

setterm -foreground black
clear

Your TTY would still be fully functional even after using this script :)

If this isn't allowed, use the following (52 bytes):

x='setterm -foreground'
$x black
clear
read
$x white

And press Enter to terminate the script.

Special thanks to @nyuszika7h.


1
For the second case: x='setterm -foreground';$x black;clear;read;$x white (52 bytes).
nyuszika7h

2

Processing, 113

void setup(){noCursor();size(displayWidth, displayHeight);background(0);}boolean sketchFullScreen(){return true;}

I tried putting the code above onto draw() to save some bytes, but it didn't work. Press Alt-F4 to quit.


2

ZX Spectrum Basic (29 bytes)

1 FOR x=0 TO 255
2 FOR y=0 TO 175
3 PLOT x,y
4 NEXT y
5 NEXT x

Iterates over the screen, plotting black pixels which are automatically cleared when the program finishes.

The ZX Spectrum's edition of basic uses single bytes as commands and no newlines, if counting displayed characters you get 61 chars.


2

Lua + LÖVE (50)

love.mouse.setVisible()love.window.setFullscreen""

Both functions are supposed to take a boolean argument, yet this works.


2

QBasic, 9 bytes

CLS:SLEEP

CLS clears the screen, SLEEP without any arguments holds execution until a key is pressed.


2

SmileBASIC, 15 bytes

XSCREEN 4
EXEC.

Pressing START or SELECT will end the program.

XSCREEN 4 sets the display mode to show a 320*480 image spanning both screens. This should clear everything, so an ACLS is not required. EXEC. makes the code repeat by constantly running the program in slot 0. I wasn't able to do XSCREEN 4EXEC. because you can't have a number directly before E


1

Sinclair BASIC - 28 chars

BORDER 0:PAPER 0:CLS:PAUSE 0

The thing about Sinclair BASIC was each keyword had it's own character code (taking up one byte), so this would actually take up 13 bytes including spaces.


Does this return the screen to normal after finishing?
kitcar2000

@kitcar2000 - Thinking about it, no. I'd probably add ":NEW" at the end as a quick and dirty reset, taking it up to 32 chars/15 bytes
Brian

I think that it is only 10 bytes (12 with :NEW) as the commands are single bytes rather than a collection of characters.
kitcar2000

1

SmileBASIC, 23 bytes

Runs forever until the program is force-killed with START or SELECT. This makes both screens completely black, going so far to disable 3D (thus turning off the 3D LED on o3DS.)

ACLS:XSCREEN 3@L GOTO@L

1

Most POSIX compatible shells (at least bash and zsh), 21

Needs to be run on a tty

tput civis;clear;read

First command hides the cursor, second command clears the screen (duh) and third command reads a line of text


0

BASH - 14 chars

pmset sleepnow does the job!

(typed into my Mac's Terminal)


You should specify the OS and/or other prerequisites in your answer.
user12205

@ace answer edited :)
Max Chuquimia

Doesn't sleep shut the monitor down?
o0'.

0

Bash: 48 characters

eval xrandr\ --output\ DP1\ --{off,auto}\;read\;

CW because not clear whether it qualifies due to the way it works:

  • The produced black screen is real power saving: it cuts off information sending to display 1.
  • Many computer displays when detect signal loss, will temporarily or periodically show their own notice.

(Note that DP1 is the first connected display. If you have a laptop, its embedded display is eDP1.)




0

Chip-8, 0 bytes

[T]he original Chip-8 interpreter began execution from 0x01FC. The interpreter includes two permanent Chip-8 instructions at this location that are always executed at the start of every programme. The first of these, 0x00E0, clears the display RAM by setting all the bits to zero. The second, 0x004B, calls a machine language routine within the interpreter that switches the VIP’s display on.

Source: http://laurencescotford.co.uk/?p=75

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