สร้างพิกเซลที่ไม่ดี


40

งานของคุณคือการเขียนโปรแกรมที่ทำให้หน้าจอของคุณมีพิกเซลที่ไม่ดี

คุณควรเลือกหนึ่งพิกเซลอย่างแน่นอนบนหน้าจอและช่องเดียวระหว่างสีแดงสีเขียวและสีน้ำเงินและทำให้ค่าของมันเป็น 0 เสมอหรือสูงสุดเสมอ (ปกติคือ 255) ค่าของช่องอื่น ๆ ควรเหมือนกันกับว่าโปรแกรมของคุณไม่ทำงาน

คุณสามารถเลือกพิกเซลและช่องในรูปแบบใดก็ได้เช่นฮาร์ดโค้ดหรือสร้างแบบสุ่มในแต่ละการรัน แต่จะต้องสามารถมองเห็นได้บนฮาร์ดไดรฟ์ที่ทันสมัยพอสมควร

หากสีที่ควรปรากฏบนพิกเซลนั้นมีการเปลี่ยนแปลงในตอนแรกโปรแกรมของคุณควรอัปเดตในเวลาน้อยกว่า 0.5 วินาทีเมื่อระบบเร็วพอ

คุณไม่สามารถตั้งสมมติฐานเกี่ยวกับสิ่งที่ปรากฏบนหน้าจอในปัจจุบัน (เช่นแถบงานโดยใช้ชุดรูปแบบเริ่มต้น)

โปรแกรมของคุณไม่จำเป็นต้องทำงานเมื่อโปรแกรมรักษาหน้าจอหน้าจอเข้าสู่ระบบผลจากโปรแกรมจัดการหน้าต่าง ฯลฯ ทำงานอยู่

รหัสที่สั้นที่สุดชนะ


1
เราสามารถสมมติระบบปฏิบัติการเฉพาะได้หรือไม่?
Loovjo

@ Loovjo ใช่คุณสามารถ
jimmy23013

เป็น ... ความต้องการในการรักษาช่องทางอื่น ๆ อาจเพิ่มจำนวนไบต์ที่ไร้สาระของฉันไปแล้วสองเท่า
บ๊อบ

คำตอบ:


21

Bash บน Linux - ละตินขนาด 25 ไบต์

+3 จาก @wyldstallyns / -2 จากการลบเครื่องหมายคำพูด / -1 เพราะฉันลืมวิธีการทำงาน / -9 จาก @Dennis

printf ÿ>/dev/fb0;exec $0

สมมติว่ามี / dev / fb0 อยู่ (มันทำบนระบบ Arch Linux ของฉันและฉันคิดว่ามันควรอยู่บนระบบ Linux อื่น ๆ ) ต้องการการเข้าถึงรูทเช่นกัน สิ่งนี้ไม่ทำงานสำหรับฉันเมื่อ X กำลังทำงาน ในระบบของฉันนี่แค่ตั้งค่าช่องสีฟ้าของพิกเซลด้านซ้ายบนให้เต็ม ( ÿ255 คือ)


คุณต้องการ echo -n - มิฉะนั้นสิ่งนี้สามารถเล่นกอล์ฟไปที่: ใช่ ff> / dev / fb0
wyldstallyns

@ wyldstallyns ใช่ฉันได้แก้ไขแล้ว AFAIK การพิมพ์บรรทัดใหม่จะมีผลมากกว่าหนึ่งพิกเซล (ไม่ได้รับอนุญาตจากคำอธิบายการท้าทาย)
artificialnull

1
255 เป็นอย่างไร ฉันไม่คิดว่ามันจะใช้งานได้ 255 ไม่ใช่อักขระยูนิโค้ดที่ถูกต้อง แต่ไม่ใช่ ascii เช่นกันดังนั้นจึงต้องพึ่งพาหนึ่งในเพจรหัสโบราณที่ไม่ควรใช้เนื่องจากมันแตกต่างจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง
orion

1
printf ÿ>/dev/fb0;exec $0บันทึกไม่กี่ไบต์
Dennis

3
@orion yesวิธีการไม่ทำงาน /dev/fb0จะต้องเปิดใหม่หลังจากเขียนหนึ่งช่องทางพิกเซล
Dennis

11

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

ทำงานบน Windows โดยตรงโดยใช้ Win32 API กับคอมไพเลอร์ Visual C ++ ที่กำหนดเป้าหมายไปที่ระบบย่อยคอนโซล ใช้ "หน้าจอ" บริบทอุปกรณ์ในการตั้งช่องสีแดงของพิกเซลที่ (9,9) 0xFFเพื่อ

การนอนหลับเป็นสิ่งจำเป็นเพื่อให้โปรแกรมอื่น ๆ วาดระหว่างการรับ / การตั้งค่า - และ 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แต่ไม่มีทางที่ง่ายโดยเฉพาะอย่างยิ่งในการอ่าน pixel Graphicเดียวปิด ดังนั้นตอนนี้นี้ได้อย่างมีประสิทธิภาพเช่นเดียวกับความพยายาม VC ++ ของฉัน บางทีการบันทึกลงในบิตแมปจะสั้นลง ...


-5 ไบต์ขอบคุณ @TuukkaX


1
SetPixelคุณสามารถลบช่องว่างจากรายการพารามิเตอร์ของ
Yytsi

@ TuukkaX ขอบคุณ! พลาดเหล่านั้น
Bob

คุณสามารถทำให้มันหลับได้นาน9msกว่า99ms
Rob

2
@Rob ฉันลองมันตามที่ระบุไว้ในคำตอบ C ++ น่าเสียดายที่ 9ms ดูเหมือนจะไม่เพียงพอเมื่อฉันทดสอบ (Win7) โปรแกรมอื่นไม่มีเวลาเพียงพอในการทาสีดังนั้นพิกเซลจึงติดอยู่กับสีเริ่มต้นได้อย่างมีประสิทธิภาพ
Bob

ยังสามารถย่อให้สั้นลงได้ด้วย0x1FFFFFFFการทำซ้ำเกี่ยวกับการวนซ้ำในการวนรอบไม่ว่างแทนการสลีป แต่จะต้องมีการปรับให้เครื่องทุกเครื่องอยู่ในช่วง 0.5 วินาที
Bob

3

SmileBASIC ขนาด 20 ไบต์

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

อัพเดทอย่างต่อเนื่อง
ชุดผีสาง0ไป1x 1พื้นที่ที่299, 99บนแผ่นผีสาง (ซึ่งเป็นพิกเซลสีแดง)
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 Applet ซึ่งมีพื้นหลังสีขาวเป็นค่าเริ่มต้น เพิ่มป้ายกำกับที่มีจุดแล้วเปลี่ยนสีของอาการคลื่นไส้ป้ายกำกับโฆษณา


2
ไม่แน่ใจว่าสิ่งนี้ถูกต้องหรือไม่เพราะมันจะเปลี่ยนพิกเซลในหน้าต่างแอปเพล็ตเท่านั้น จะไม่เปลี่ยนสีพิกเซลถ้าแอปเพล็ตโฟกัส ... ฉันจะลบคำตอบนี้ถ้ามันไม่ตรงกับเกณฑ์ของความท้าทาย
Poke

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

มีพิกเซลสีดำเหนือพื้นที่สีขาว V ของไอคอน Vivaldi: badpixel

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.