Quixels - Quantum Pixels


35

บทนำ

quixel เป็นควอนตัมพิกเซล คล้ายกับพิกเซลแบบคลาสสิคมันมีค่าจำนวนเต็ม 3 ค่า (แดงเขียวน้ำเงิน) อย่างไรก็ตาม Quixels อยู่ในตำแหน่งสุดยอดของทั้ง 3 สถานะแทนที่จะเป็นชุดค่าผสม ตำแหน่งสุดยอดนี้จะคงอยู่จนกว่า quixel จะสังเกตเห็นว่าจุดใดที่มันยุบลงถึงหนึ่งในสามของพิกเซลคลาสสิค RGB(255,0,0), และRGB(0,255,0)RGB(0,0,255)

สเปค

  • การแสดง
    • แต่ละ quixel จะแสดงเป็นอาร์เรย์ของจำนวนเต็ม 3 ระหว่าง 0 และ 255 ซึ่งเป็นr, gและbตามลำดับ
  • ตำแหน่งสุดยอด
    • แต่ละ quixel อยู่ในตำแหน่งที่ซุปเปอร์ระหว่างสีแดง, สีฟ้าและสีเขียวตัวแทนจากรัฐR, GและBตามลำดับ
  • การสังเกต
    • เมื่อสังเกตแต่ละ quixel มันจะยุบตัวเป็นหนึ่งในสามสถานะ น่าจะเป็นของแต่ละรัฐคลาสสิกR = (r + 1) / (r + g + b +3), และG = (g + 1) / (r + g + b + 3) B = (b + 1) / (r + g + b + 3)วิธีนี้แต่ละรัฐคลาสสิกมักจะเป็นความน่าจะเป็นที่ไม่เป็นศูนย์ของการแสดงขึ้น
  • อินพุต
    • ฟังก์ชั่นหรือโปรแกรมควรใช้ภาพของ quixels มันยืดหยุ่นได้อย่างไร ชื่อไฟล์โดยใช้อาเรย์หลายมิติและอื่น ๆ ล้วนเป็นที่ยอมรับ
  • เอาท์พุต
    • ฟังก์ชั่นหรือโปรแกรมควรสร้างภาพของพิกเซลคลาสสิก โครงสร้างข้อมูลสำหรับภาพที่ผลิตนี้ยังมีความยืดหยุ่น โปรดทราบว่าทั้งหมดของพิกเซลควรจะเป็นหนึ่งในสามคนนี้: RGB(255,0,0), RGB(0,255,0)และRGB(0,0,255)
    • เอาต์พุตไม่ควรถูกกำหนดไว้ เหล่านี้คือพิกเซลควอนตัม ! อินพุตเดียวกันควรทำให้ได้ผลลัพธ์ที่ต่างกัน
    • หากภาษาของคุณไม่มีวิธีการสร้างหมายเลขสุ่มคุณสามารถใช้ไบต์สุ่มเป็นอินพุตได้
  • เกณฑ์การให้คะแนน
    • นี่คือดังนั้นไบต์ที่น้อยที่สุดจึงชนะ

ภาพ

Mona LisaโดยLeonardo da Vinci Mona Lisa

Starry NightโดยVincent van Gogh ป้อนคำอธิบายรูปภาพที่นี่

ความคงทนของหน่วยความจำโดยSalvador Dali ป้อนคำอธิบายรูปภาพที่นี่

เท็ดดี้รูสเวลต์ VS BigfootโดยSharpWriter ป้อนคำอธิบายรูปภาพที่นี่


ชื่อไฟล์ภาพ / URL สามารถเป็นอาร์กิวเมนต์สำหรับป้อนเข้าได้หรือไม่?
Luis Mendo

2
ภาพ JPEG นั้นของ Mona Lisa นั้นเป็นสาเหตุของสิ่งประดิษฐ์ภาพที่โดดเด่น 16x16 ในภาพที่ส่งออก
wizzwizz4

1
@ wizzwizz4 จริง ๆ แล้วมันไม่ใช่ มันเป็นภาพตัวอย่างขนาดย่อที่มีสิ่งประดิษฐ์ คลิกที่ภาพเพื่อดูขนาดเต็ม ฉันสงสัยว่ามันเป็นความกว้างโดยเฉพาะของภาพนั้นที่ให้เอฟเฟกต์
อดัม

2
คุณจะได้ผลลัพธ์ที่ดีขึ้น (ภาพ) หากพื้นที่ควอนตัมของคุณอยู่RGBKตรงไหนK=255*3-R-G-Bแล้วทำให้พิกเซลควอนตัมของคุณเป็น 1 ใน 4 (ถ้าเลือก K ให้แสดง (0,0,0) ขยายสมการ RGB ของคุณใน วิธีที่ชัดเจนเปลี่ยน 3s เป็น 4s เพิ่ม K เมื่อคุณจะเพิ่ม R + G + B ฯลฯ ) พร่ามัวหลังจากทำเช่นนี้ควรสร้างสำเนาของต้นฉบับดั้งเดิมที่มีเสียงดังดี (K ย่อมาจากสีดำหรือกุญแจในกรณีที่คุณสงสัย)
Yakk

2
@TLW หากภาษาของคุณไม่มีวิธีการสร้างตัวเลขสุ่มคุณสามารถใช้ไบต์สุ่มเป็นอินพุต
NonlinearFruit

คำตอบ:


13

Dyalog APL , 23 21 19 ไบต์

ใช้ตารางของ (R, G, B) triplets

แรงบันดาลใจจากอัลกอริทึมของไมล์

ส่งกลับดัชนีสารบัญเป็น {(255, 0, 0), (0, 255, 0), (0, 0, 255)} สิ้นเปลืองอย่างน่ากลัว

(?∘≢⊃⊢)¨(⊂⍳3)/¨⍨1+⊢

(
?∘≢ดัชนีสุ่ม
เลือก
จาก
แต่ละ

(
ทั้ง
⍳3สามดัชนีแรกที่
)/¨⍨จำลองแบบโดยแต่ละ

1+⊢ แฝดสามที่เพิ่มขึ้น

TryAPL!


เวอร์ชั่นเก่า

ส่งคืนตารางดัชนีที่อิง 0 เป็น {(255, 0, 0), (0, 255, 0), (0, 0, 255)}

{+/(?0)≥+\(1+⍵)÷3++/⍵}¨

{... }¨สำหรับแต่ละ quixel ในตารางค้นหา:

+/ ผลรวมของ (เช่นการนับความจริงของ)

(?0)≥ สุ่ม 0 <number <1 มากกว่าหรือเท่ากับ

+\ ผลรวมสะสมของ

(1+⍵)÷ ค่า RGB ที่เพิ่มขึ้นหารด้วย

3+ สามบวก

+/⍵ ผลรวมของ quixel

หมายเหตุ: Dyalog APL ช่วยให้คุณเลือกระหว่างLehmer เชิงเส้นกำเนิด congruentialที่Mersenne Twisterและระบบปฏิบัติการของ RNG ¹ ²

ตัวอย่างเช่นภาพ:

┌──────────┬──────────┬───────────┬───────────┬─────────┐
52 241 198148 111 45197 165 1809 137 120  46 62 75 
├──────────┼──────────┼───────────┼───────────┼─────────┤
81 218 1040 0 255   0 255 0    181 202 116122 89 76
├──────────┼──────────┼───────────┼───────────┼─────────┤
181 61 34 84 7 27   233 220 24939 184 160 255 0 0  
└──────────┴──────────┴───────────┴───────────┴─────────┘

สามารถให้

┌─┬─┬─┬─┬─┐
10221
├─┼─┼─┼─┼─┤
22112
├─┼─┼─┼─┼─┤
02120
└─┴─┴─┴─┴─┘

ขอให้สังเกตว่า quixels ที่ "บริสุทธิ์" สามตัวนั้นมีสีอย่างไร?

ลองใช้ออนไลน์!

Mona Lisa ที่ถล่ม


8

Mathematica, 53 ไบต์

RandomChoice[255#+1->IdentityMatrix@3]&~ImageApply~#&

ฟังก์ชั่นไม่ระบุชื่อ ใช้ Mathematica Imageเป็นอินพุตและส่งคืนImageเอาต์พุตเป็น โปรดทราบว่าภาพอินพุตจะต้องมีพื้นที่สี RGB


มันทำงานยังไง?
GreenAsJade

2
@GreenAsJade <...>~ImageApply~#ใช้ฟังก์ชั่นมากกว่าทุกพิกเซลในภาพและRandomChoice[255#+1->IdentityMatrix@3]ใช้บางส่วน RNG ถ่วงน้ำหนักในการผลิตแถวของ 3 × 3 เมทริกซ์เอกลักษณ์ (เช่น{1, 0, 0}, {0, 1, 0}หรือ{0, 0, 1}) ซึ่งสอดคล้องกับสีแดงสีเขียวหรือสีฟ้า
LegionMammal978

5

C #, 366 243 ไบต์

ต้องขอบคุณ @TheLethalCoder อย่างมากสำหรับการตีกอล์ฟนี้!

var r=new Random();c=>{double t=c.R+c.G+c.B+3,x=(c.R+1)/t,d=r.NextDouble();return d<=x?Color.Red:d<=x+(c.G+1)/t?Color.Lime:Color.Blue;};b=>{fo‌​r(int x=0,y;x<b.Width;x++)for(y=0;y<b.Height;y++)b.SetPixel(x,y,g(‌​b.GetPixel(x,y)));re‌​turn b;};

แนวคิดพื้นฐาน:

using System;
using System.Drawing;
static Random r = new Random();

static Image f(Bitmap a) {
    for (int x = 0; x < a.Width; x++) {
        for (int y = 0; y < a.Height; y++) {
            a.SetPixel(x, y, g(a.GetPixel(x, y)));
        }
    }
    return a;
}

static Color g(Color c) {
    int a = c.R;
    int g = c.G;
    double t = a + g + c.B + 3;
    var x = (a + 1) / t;
    var y = x + (g + 1) / t;
    var d = r.NextDouble();
    return d <= x ? Color.Red : d <= y ? Color.Lime : Color.Blue;
}

ตัวอย่าง:

Mona Lisa

ป้อนคำอธิบายรูปภาพที่นี่

สตาร์รี่ไนท์

ป้อนคำอธิบายรูปภาพที่นี่

ความคงทนของหน่วยความจำ

ป้อนคำอธิบายรูปภาพที่นี่

เท็ดดี้รูสเวลต์ VS เท้าใหญ่

ป้อนคำอธิบายรูปภาพที่นี่

นี่คืออัลบั้ม imgur ที่อัปเดตพร้อมตัวอย่างอีกสองสามตัวอย่างเพื่อแสดงให้เห็นว่านี่เป็นแบบไม่ จำกัด เวลา


6
สีมะนาวเป็นสีเขียวบริสุทธิ์ สำหรับการอ้างอิงในอนาคตนี่คือตารางสีที่รู้จักกัน
นม

1
นี่เป็นรุ่น golfed สำหรับ 237 ไบต์: var r=new Random();c=>{double t=c.R+c.G+c.B+3,x=(c.R+1)/t,d=r.NextDouble();return d<=x?Color.Red:d<=x+(c.G+1)/t?Color.Lime:Color.Blue;};b=>{for(int x=0,y;x<b.Width;x++)for(y=0;y<b.Height;y++)b.SetPixel(x,y,g(b.GetPixel(x,y)));return b;};และยังคงมีการปรับปรุงที่สามารถทำได้
TheLethalCoder

จริง ๆ แล้วมันเป็น 237 ไบต์ไบต์พิเศษเป็นตัวอักษรที่มองไม่เห็นที่เพิ่มเข้าไปในรหัสความคิดเห็นที่ฉันเชื่อ
TheLethalCoder

4

Python 2, 172 166 162 ไบต์

ระดับเยื้องที่สองและสามคือแท็บ raw และแท็บ raw พร้อมช่องว่างตามลำดับ นี้เล่นจริงๆไม่ดีกับ Markdown เพื่อให้แท็บได้ถูกแทนที่ด้วยสองช่องว่าง

from random import*
i=input()
E=enumerate
for a,y in E(i):
 for b,x in E(y):
  t=sum(x)+3.;n=random()
  for j,u in E(x):
   n-=-~u/t
   if n<0:i[a][b]=j;break
print i

ใช้การป้อนข้อมูลที่คล้ายกันรูปแบบ / ส่งออกไปยังคำตอบ APL ของอดัม อินพุตเป็นอาร์เรย์ RGB แบบทูเปิล เอาต์พุตเป็นอาร์เรย์ 2 มิติของ0, 1หรือ2, ซึ่งแทนสีแดง, เขียวและน้ำเงินตามลำดับ ตัวอย่างเช่น:

$ echo "[[(181,61,34),(39,184,160),(255,0,0)],[(84,7,27),(123,97,5),(12,24,88)]]" | python quixel.py
[[2, 2, 0], [0, 0, 0]]

ด้านล่างเป็นคำตอบ Python 3 ที่เก่ากว่าของฉันโดยใช้ PIL

Python 3 + PIL, 271 250 245 243 ไบต์

import random as a,PIL.Image as q
i=q.open(input())
w,h=i.size
for k in range(w*h):
 m=k//h,k%h;c=i.getpixel(m);t=sum(c)+3;n=a.random()
 for j,u in enumerate(c):
  n-=-~u/t
  if n<0:z=[0]*3;z[j]=255;i.putpixel(m,tuple(z));break
i.save('o.png')

วนซ้ำทุกพิกเซลและใช้ฟังก์ชัน quixel กับมัน นำชื่อไฟล์เป็น input o.pngและบันทึกการส่งออกใน

นี่คือผลลัพธ์บางส่วน:

$ echo mona-lisa.jpg | python quixel.py

โมนาลิซ่า quixelized

$ echo starry-night.jpg | python quixel.py

สตาร์รี่ไนท์

$ echo persistence-of-memory.jpg | python quixel.py

ความคงทนของหน่วยความจำ

$ echo roosevelt-vs-bigfoot.jpg | python quixel.py

เท็ดดี้รูสเวลต์ vs บิ๊กฟุต quixelized


@Doddy อาจเป็นเพราะเป็น PRNG และไม่ใช่ RNG ที่เข้ารหัสลับ
บางคนที่มี

@someonewithpc โอ้ที่จริงฉันเขียนคำถามนั้นเมื่อดูบนโทรศัพท์ของฉันที่ภาพสุดท้ายมีรูปแบบกริดเหมือนปกติ แต่ตอนนี้การดูบนคอมพิวเตอร์มันเป็นภาพแรกที่มีผลกระทบนี้
Doddy

@Doddy โอ้ใช่! ลองกดที่ภาพในโทรศัพท์ของคุณ: เอฟเฟกต์จะเปลี่ยนไป! ผมคิดว่ามันเป็นเรื่องเกี่ยวกับการสุ่มตัวอย่างภาพ ...
someonewithpc

@Doddy อาจจะลบคำถามแรกของคุณดังนั้นเราไม่คิดว่าคุณจะถามเกี่ยวกับแถบสีแดงที่มีธงหนาแน่น ...
GreenAsJade

4

R, 58 ไบต์

mapply(function(r,g,b)rmultinom(1,1,c(r+1,g+1,b+1)),r,g,b)

การป้อนข้อมูลประกอบด้วยสามเวกเตอร์ที่เป็นตัวเลขที่จัดขึ้นในr, gและbตามลำดับ

rmultinomเราไม่จำเป็นที่จะปรับความน่าจะเป็นผลรวมให้เป็นหนึ่งที่เกิดขึ้นโดยอัตโนมัติใน

เอาต์พุตเป็นของฟอร์ม

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    0    0    0    0    0    0    0    0     0
[2,]    0    0    0    1    0    0    1    1    1     0
[3,]    1    1    1    0    1    1    0    0    0     1

โดยที่มีเพียงรายการเดียว1ในแต่ละคอลัมน์ 1อยู่ในแถวแรกสำหรับ "R" พิกเซล, แถวที่สองสำหรับ "G" และแถวที่สามสำหรับ "B"


4

Pyth - 11 10 ไบต์

ใช้บิตแมป RGB 2d และบิตแมปเอาท์พุทด้วยสีแบบ 3 บิตที่จัดทำดัชนี

mLOs.emkbk

การทำรังในระดับนั้นทำให้ฉันเจ็บ

ลองมันออนไลน์ได้ที่นี่


4

J, 20 18 17 ไบต์

(>:({~?@#)@##\)"1

รูปภาพเป็นอินพุตเป็นอาร์เรย์ที่มีขนาดh x w x 3 ซึ่งแสดงถึงค่า RGB เป็นจำนวนเต็มในช่วง 0 - 255 เอาต์พุตเป็นตารางที่มีขนาดh x wโดยที่ 1 คือค่า rgb ของ (255, 0, 0 ), 2 คือ (0, 255, 0) และ 3 คือ (0, 0, 255)

คำอธิบาย

()"1แสดงให้เห็นว่าคำกริยานี้คือการถูกนำไปใช้กับอาร์เรย์ของการจัดอันดับ 1 ในการป้อนข้อมูลแต่ละหมายความว่ามันจะนำไปใช้ในแต่ละพิกเซล

>:({~?@#)@##\  Input: array [R G B]
>:             Increment each, gets [R+1, G+1, B+1]
           #\  Gets the length of each prefix of [R G B], forms [1 2 3]
          #    Make a new array with R+1 copies of 1, G+1 copies of 2,
               and B+1 copies of 3
  (     )@     Operate on that array
       #         Get the length of the array of copies, will be R+G+B+3
     ?@          Generate a random integer in the range [0, R+G+B+3)
   {~            Select the value at that index from the array of copies and return

ตัวอย่าง


1
Mona Lisa ของคุณมีโทนสีที่แตกต่างจากคนอื่น ๆ คุณแน่ใจเหรอ
wizzwizz4

@ wizzwizz4 ขอบคุณเมื่อแสดงภาพฉันมีพิกเซล rgb ตามลำดับย้อนกลับ
ไมล์

4

เยลลี่ , 8 7 ไบต์

Jx‘Xµ€€

อินพุตเป็นรายการ 3 มิติที่มีขนาดh x w x 3 เอาต์พุตเป็นรายการ 2d ที่มีขนาดh x wโดยที่ 1 แทนค่า rgb (255, 0, 0), 2 คือ (0, 255, 0) และ 3 คือ (0, 0, 255)

ตัวอย่างอินพุตด้านล่างเป็นพื้นที่ 4 x 4 ด้านบนซ้ายของภาพ Mona Lisa

ลองออนไลน์!

คำอธิบาย

Jx‘Xµ€€  Input: The 3d list of rgb pixels
    µ    Begin a monadic chain (Will operate on each pixel, input: [R, G, B])
J          Enumerate indices to get [1, 2, 3]
  ‘        Increment each to get [R+1, G+1, B+1]
 x         Make R+1 copies of 1, G+1 copies of 2, B+1 copies of 3
   X       Select a random value from that list of copies and return
     €€  Apply that monadic chain for each list inside each list

3

Python 3, 119 ไบต์

ในกรณีที่mมีการป้อนข้อมูลที่นำมาเป็นอาร์เรย์ 2 d [r,g,b]พิกเซลซึ่งแต่ละพิกเซลคือรายการของรูปแบบ ที่ตำแหน่งของแต่ละพิกเซลให้ส่งคืน0,1,2เพื่อแสดง(250,0,0), (0,250,0), and (0,0,250)ตามลำดับ

import random
lambda m:[map(lambda x:x.index(sum((((i+1)*[i])for i in x),[])[random.randint(0,sum(x)+2)]),i)for i in m]

ฉันไม่เชื่อว่าคุณได้รับอนุญาตให้รับอินพุตเป็นตัวแปร (เมื่อเขียนโปรแกรมแบบเต็มในภาษาที่รองรับ IO ปกติ) ฉันคิดว่าคุณต้องใช้inputหรือทำให้ฟังก์ชั่นนี้และใช้mเป็นพารามิเตอร์
NonlinearFruit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.