Cor de um pixel

8

Escreva um programa que imprima a cor RGB de um determinado pixel na tela.

O programa deve ler uma linha de stdin no formato x,y, onde xey são números inteiros não assinados. O pixel (0,0) é o pixel superior esquerdo da tela.

O programa deve emitir uma linha para stdout no formato RRR,GGG,BBB, que representa a cor do pixel em ( x, y).

RRR,, GGGe BBBdevem ser números de ponto flutuante entre 0 e 1, números inteiros OR no intervalo [0, 255]. Os zeros à esquerda não importam, por exemplo: ambos 074e 74são aceitáveis.

Comportamento indefinido

Não há problema em o programa exibir um comportamento indefinido (travamento, saída incorreta etc.) nas seguintes condições:

  • O usuário insere uma sequência de caracteres, número inteiro assinado, número flutuante ou qualquer outro tipo de dados inválido.
  • A entrada do usuário não está no formato x,y
  • O pixel especificado está fora da tela

Notas:

  • O programa não pode modificar o pixel nas coordenadas fornecidas.
  • Se você tiver vários monitores, não importa em que monitor o pixel esteja ativado, desde que o mesmo monitor seja usado sempre que o programa for executado.

A resposta com o menor número de bytes vence.

eeze
fonte
24
Por que deveria RRR, GGGe BBBser pontos flutuantes entre 0 e 1? Geralmente eles são números inteiros no intervalo [0,255]. Eu sugeriria permitir ambos.
21418 Kevin Kurtzssen
4
Podemos limitar nossas soluções à janela em que estão sendo executadas, para o benefício de idiomas que não podem acessar nada na tela fora dessa janela?
Shaggy
7
Se você permitir que apenas o 0 - formato 1 você não deve usar RRR, GGGe BBBna especificação, mas R, G,B
sergiol
6
E se tivermos vários monitores?
tsh
7
Vale a pena especificar que o programa não pode modificar o pixel na coordenada especificada. Caso contrário, pode ser mais eficiente ocultar a tela inteira e retornar 0, 0, 0, derrotando o objetivo do desafio.
Max18

Respostas:

10

Java 10 (função lambda), 105 75 bytes

x->y->(new java.awt.Robot().getPixelColor(x,y)+"").replaceAll("[^\\d,]","")

Uma função que pega dois parâmetros inteiros e retorna uma String RRR,GGG,BBB, onde as cores são números inteiros no intervalo [0, 255].

-30 bytes graças a @LukeStevens usando java.awt.Colora toString()saída padrão da e modificando-a para que apenas os dígitos e vírgulas permaneçam.

Explicação:

x->y->                      // Method with two integer parameters and String return-type
  (new java.awt.Robot()     //  Create a AWT-Robot instance
    .getPixelColor(x,y)     //  Get the pixel AWT-Color at position x,y
    +"")                    //  Call the default toString() of the AWT-Color
                            //   i.e. "java.awt.Color[r=213,g=230,b=245]"
  .replaceAll("[^\\d,]","") //  Remove everything except for digits and commas

NOTA: A toString()implementação padrão do java.awt.Colorsempre foi a mesma nas versões da JVM, tanto quanto eu sei, mas pode potencialmente mudar no futuro. Eu testei em Java 8 e Java 10 e ele retornou "java.awt.Color[r=#,g=#,b=#]".


Mas, como o desafio afirma:

  • Programa completo
  • Recebendo entrada no formato x,yde STDIN
  • Saída no formato R,G,Bpara STDOUT
  • Ter o R, G, Bcomo pontos flutuantes na faixa[0.0, 1.0]

O código se torna MUITO mais detalhado:

Java 10 (programa completo), 266 bytes

interface M{static void main(String[]a)throws Exception{var s=new java.util.Scanner(System.in).next().split(",");var c=new java.awt.Robot().getPixelColor(new Short(s[0]),new Short(s[1]));System.out.print(c.getRed()/255d+","+c.getGreen()/255d+","+c.getBlue()/255d);}}

Explicação:

interface M{          // Class
  static void main(String[]a)
                      //  Mandatory main method
    throws Exception{ //    Mandatory throws clause for `new Robot()`
  var s=new java.util.Scanner(System.in)
                      //   Create a Scanner for STDIN
         .next()      //   Get the String user input
         .split(","); //   Split it on "," and save it as String-array in `s`
  var c=new java.awt.Robot()
                      //   Create a AWT-Robot instance
         .getPixelColor(
                      //   And get the pixel AWT-Color at position:
           new Short( //    Convert String to Short (and implicitly to int):
            s[0]),    //     x-coordinate input by user from String-array `s`
           new Short( //    Convert String to Short (and implicitly to int):
            s[1]));   //     y-coordinate input by user from String-array `s`
  System.out.print(   //   Print to STDOUT:
   c.getRed()         //    The red part of RGB as integer in the range [0,255]
    /255d             //     Converted to a floating point in the range [0.0, 1.0]
   +","               //    Appended with a comma delimiter
   +c.getGreen()      //    Appended with the green part of RGB as integer in the range [0,255]
     /255d            //     Converted to a floating point in the range [0.0, 1.0]
   +","               //    Appended with a comma delimiter
   +c.getBlue()       //    Appended with the blue part of RGB as integer in the range [0,255]
     /255d);}}        //     Converted to a floating point in the range [0.0, 1.0]
Kevin Cruijssen
fonte
2
Para a primeira resposta de regras simples, você pode usar a conversão de cores e simplesmente ter x->y->(new java.awt.Robot().getPixelColor(x,y)+"").replaceAll("[^\\d,]","")75 bytes
Luke Stevens
@LukeStevens Uso inteligente do padrão toString()de java.awt.Color. Obrigado!
21418 Kevin Kevin Kurtzleren
Bom trabalho pessoal, você me venceu: eu também estava ocupado implementando o toString()caminho ... ;-) Exceto que eu tinha que baixar um IDE para fazer tudo isso: só uso o TIO agora :(
Olivier Grégoire
3
Observe que o Javadoc é muito claro e Color::toStringé discricionário na implementação. Portanto, pode ser bom especificar qual JVM foi usada para os testes (funciona como está com o OpenJDK e o Oracle JDK).
Olivier Grégoire
1
Por fim, você deve substituir " "por ","para cumprir com o RRR,GGG,BBBformato estrito (não RRR GGG BBB).
Olivier Grégoire
9

Código da máquina 6502 (C64), 280 260 bytes

00 C0 A2 00 20 CF FF C9 0D 9D 02 C1 F0 03 E8 D0 F3 20 D2 FF A5 7A 85 FB A5 7B
85 FC A9 01 85 7A A9 C1 85 7B 20 73 00 20 6B A9 A5 14 85 FD A5 15 85 FE 20 73
00 20 6B A9 A5 FB 85 7A A5 FC 85 7B A5 14 4A 4A 4A AA 20 F0 E9 A5 FD 46 FE 6A
4A 4A A8 A5 14 29 07 AA A9 00 38 6A CA 10 FC 85 FE B1 D1 0A 26 FC 0A 26 FC 0A
26 FC 85 FB A5 D2 29 03 09 D8 85 D2 B1 D1 85 02 A9 02 18 2D 18 D0 0A 0A 65 FC
29 0F 09 D0 85 FC A9 33 85 01 A5 FD 29 07 A8 B1 FB A2 37 86 01 25 FE D0 05 AD
21 D0 85 02 A6 D6 20 F0 E9 A5 02 29 0F AA BC D2 C0 20 BC C0 BC E2 C0 20 B7 C0
BC F2 C0 A9 2C 20 D2 FF 98 0A A9 30 90 02 A9 31 20 D2 FF A9 2E 20 D2 FF 98 29
7F 4C D2 FF 30 B0 35 35 36 33 32 39 36 33 38 33 35 37 34 37 30 B0 32 38 32 37
32 39 33 32 34 33 35 B0 34 37 30 B0 32 38 36 33 36 34 32 30 34 33 35 36 39 37

Eu esperava que isso fosse possível em muito menos bytes, mas infelizmente ... bem, desde que eu terminei, publicando agora de qualquer maneira. Pelo menos, o formato restritivo ajudou com uma coisa: algo semelhante a stdin(entrada de um dispositivo atual) só existe no C64 no modo de texto, porque o sistema operacional suporta apenas esse modo - portanto, não é necessário considerar outros modos do chip gráfico .

Nota sobre a saída dos valores das cores: o chip gráfico C64 não usa cores RGB, mas gera diretamente um sinal de vídeo com cores YUV, com uma paleta fixa de 16 cores. Usei valores arredondados da conversão do colodore para RGB com as configurações do monitor "padrão" aqui.

-20 bytes : melhor rotina de saída, codificando a saída de 3 caracteres por canal de cor em um único byte.

Em relação ao comentário: teoricamente é possível usar o modo de caracteres multicoloridos da VIC com o sistema operacional C64, mas requer uma fonte personalizada legível com apenas 4 pixels horizontais de largura duplicada. Não é totalmente impossível, mas muito improvável. Da mesma forma, o modo de cor estendida (ou modo de plano de fundo estendido, que é o mesmo) pode ser usado com o sistema operacional C64, mas requer a reconfiguração direta do chip gráfico. Opto por ignorar todas essas possibilidades no sentido de codificar golfe aqui: não é o ambiente padrão que você encontra em um Commodore 64 com sistema operacional em estoque. O que é possível com o sistema operacional padrão é alternar entre duas fontes integradas (shift + key do comodoro), o programa é responsável por isso.

Demonstração online

Uso: SYS49152para começar.

Desmontagem comentada :

         00 C0       .WORD $C000        ; load address
.C:c000  A2 00       LDX #$00           ; loop index for input
.C:c002   .input:
.C:c002  20 CF FF    JSR $FFCF          ; character from input device
.C:c005  C9 0D       CMP #$0D           ; compare with enter
.C:c007  9D 16 C1    STA .buf,X         ; store to buffer
.C:c00a  F0 03       BEQ .parse         ; was enter -> start parsing
.C:c00c  E8          INX                ; next character
.C:c00d  D0 F3       BNE .input         ; and repeat input loop
.C:c00f   .parse:
.C:c00f  20 D2 FF    JSR $FFD2          ; output the enter character
.C:c012  A5 7A       LDA $7A            ; save pointer of BASIC parser
.C:c014  85 FB       STA $FB
.C:c016  A5 7B       LDA $7B
.C:c018  85 FC       STA $FC
.C:c01a  A9 15       LDA #$15           ; set pointer of BASIC parser to
.C:c01c  85 7A       STA $7A            ; buffer-1
.C:c01e  A9 C1       LDA #$C1
.C:c020  85 7B       STA $7B
.C:c022  20 73 00    JSR $0073          ; get next character
.C:c025  20 6B A9    JSR $A96B          ; BASIC routine to parse number
.C:c028  A5 14       LDA $14            ; lowbyte of parsed number to $fd
.C:c02a  85 FD       STA $FD
.C:c02c  A5 15       LDA $15            ; highbyte to $fe
.C:c02e  85 FE       STA $FE
.C:c030  20 73 00    JSR $0073          ; get next character
.C:c033  20 6B A9    JSR $A96B          ; parse as number ...
.C:c036  A5 FB       LDA $FB            ; restore pointer of BASIC parser
.C:c038  85 7A       STA $7A
.C:c03a  A5 FC       LDA $FC
.C:c03c  85 7B       STA $7B
.C:c03e  A5 14       LDA $14            ; load y coordinate
.C:c040  4A          LSR A              ; divide by 8 for character row
.C:c041  4A          LSR A
.C:c042  4A          LSR A
.C:c043  AA          TAX                ; -> to X
.C:c044  20 F0 E9    JSR $E9F0          ; set pointer to character row
.C:c047  A5 FD       LDA $FD            ; divide x coordinate by 8
.C:c049  46 FE       LSR $FE
.C:c04b  6A          ROR A
.C:c04c  4A          LSR A
.C:c04d  4A          LSR A
.C:c04e  A8          TAY                ; -> to Y
.C:c04f  A5 14       LDA $14            ; load y coordinate
.C:c051  29 07       AND #$07           ; mask pixel position in character
.C:c053  AA          TAX                ; -> to X
.C:c054  A9 00       LDA #$00           ; initialize pixel mask to 0
.C:c056  38          SEC                ; set carry for bit to shift in
.C:c057   .bitnum:
.C:c057  6A          ROR A              ; shift bit in mask
.C:c058  CA          DEX                ; and repeat until
.C:c059  10 FC       BPL .bitnum        ; in correct position
.C:c05b  85 FE       STA $FE            ; store pixel mask to $fe
.C:c05d  B1 D1       LDA ($D1),Y        ; load character code
.C:c05f  0A          ASL A              ; multiply by 8
.C:c060  26 FC       ROL $FC
.C:c062  0A          ASL A
.C:c063  26 FC       ROL $FC
.C:c065  0A          ASL A
.C:c066  26 FC       ROL $FC
.C:c068  85 FB       STA $FB            ; and store to $fb/$fc
.C:c06a  A5 D2       LDA $D2            ; move pointer to position in color RAM
.C:c06c  29 03       AND #$03
.C:c06e  09 D8       ORA #$D8
.C:c070  85 D2       STA $D2
.C:c072  B1 D1       LDA ($D1),Y        ; load color of character
.C:c074  85 02       STA $02            ; and store to $2
.C:c076  A9 02       LDA #$02           ; check which charset is active
.C:c078  18          CLC
.C:c079  2D 18 D0    AND $D018
.C:c07c  0A          ASL A              ; and calculate offset
.C:c07d  0A          ASL A
.C:c07e  65 FC       ADC $FC            ; add to (character code * 8)
.C:c080  29 0F       AND #$0F
.C:c082  09 D0       ORA #$D0           ; and add offset to character ROM
.C:c084  85 FC       STA $FC
.C:c086  A9 33       LDA #$33           ; bank in character ROM
.C:c088  85 01       STA $01
.C:c08a  A5 FD       LDA $FD            ; load y coordinate
.C:c08c  29 07       AND #$07           ; mask pixel-row number
.C:c08e  A8          TAY
.C:c08f  B1 FB       LDA ($FB),Y        ; load pixel row from character ROM
.C:c091  A2 37       LDX #$37           ; bank out character ROM
.C:c093  86 01       STX $01
.C:c095  25 FE       AND $FE            ; apply pixel mask
.C:c097  D0 05       BNE .pixelcol      ; not 0 -> pixel is set
.C:c099  AD 21 D0    LDA $D021          ; otherwise load background color
.C:c09c  85 02       STA $02            ; and store to $2
.C:c09e   .pixelcol:
.C:c09e  A6 D6       LDX $D6            ; restore screen row pointer for
.C:c0a0  20 F0 E9    JSR $E9F0          ; current cursor position
.C:c0a3  A5 02       LDA $02            ; load color
.C:c0a5  29 0F       AND #$0F           ; mask low nibble (only 16 colors)
.C:c0a7  AA          TAX                ; -> to X
.C:c0a8  BC D2 C0    LDY .red,X         ; load encoded output for red
.C:c0ab  20 BC C0    JSR .out2          ; call output without comma
.C:c0ae  BC E2 C0    LDY .green,X       ; load encoded output for green
.C:c0b1  20 B7 C0    JSR .out1          ; call output with comma
.C:c0b4  BC F2 C0    LDY .blue,X        ; load encoded output for blue
.C:c0b7   .out1:
.C:c0b7  A9 2C       LDA #$2C           ; load ","
.C:c0b9  20 D2 FF    JSR $FFD2          ; and output
.C:c0bc   .out2:
.C:c0bc  98          TYA                ; encoded output to A
.C:c0bd  0A          ASL A              ; shift top bit to carry
.C:c0be  A9 30       LDA #$30           ; load "0"
.C:c0c0  90 02       BCC .firstdig      ; carry clear -> to output
.C:c0c2  A9 31       LDA #$31           ; load "1"
.C:c0c4   .firstdig:
.C:c0c4  20 D2 FF    JSR $FFD2          ; and output
.C:c0c7  A9 2E       LDA #$2E           ; load "."
.C:c0c9  20 D2 FF    JSR $FFD2          ; and output
.C:c0cc  98          TYA                ; encoded output to A
.C:c0cd  29 7F       AND #$7F           ; mask out top bit
.C:c0cf  4C D2 FF    JMP $FFD2          ; to output and exit
.C:c0d2   .red:                                 ; encoded values for red
.C:c0d2  30 B0 35 35 .BYTE $30,$B0,$35,$35      ; ASCII digit ($30-$39) after
.C:c0d6  36 33 32 39 .BYTE $36,$33,$32,$39      ; decimal point, with bit 7
.C:c0da  36 33 38 33 .BYTE $36,$33,$38,$33      ; indicating 0 or 1 before
.C:c0de  35 37 34 37 .BYTE $35,$37,$34,$37      ; decimal point
.C:c0e2   .green:                               ; encoded values for green
.C:c0e2  30 B0 32 38 .BYTE $30,$B0,$32,$38      ; ...
.C:c0e6  32 37 32 39 .BYTE $32,$37,$32,$39
.C:c0ea  33 32 34 33 .BYTE $33,$32,$34,$33
.C:c0ee  35 B0 34 37 .BYTE $35,$B0,$34,$37
.C:c0f2   .blue:                                ; encoded values for blue
.C:c0f2  30 B0 32 38 .BYTE $30,$B0,$32,$38      ; ...
.C:c0f6  36 33 36 34 .BYTE $36,$33,$36,$34
.C:c0fa  32 30 34 33 .BYTE $32,$30,$34,$33
.C:c0fe  35 36 39 37 .BYTE $35,$36,$39,$37
.C:c102   .buf:                                 ; buffer for input ("stdin")
Felix Palmen
fonte
Isso não parece suportar o modo multicolorido .
Nwellnhof 5/12
Claro que não, ele funciona com o sistema operacional original. Tecnicamente, este sistema operacional funciona em qualquer modo VIC, mas haverá apenas lixo na tela, portanto não é utilizável. Mas o seu comentário me fez lembrar "modo estendido cor", que funciona muito bem com o estoque OS ... caramba
Felix Palmen
@nwellnhof acrescentou alguns argumentos sobre isso, espero que isso seja agradável.
Felix Palmen
Faz uma maravilha se escrever isso em C seria mais curto?
@Rogem poderia tentar isso com cc65.. bem possível :) mas, pelo menos, o código compilado vai ser maior :)
Felix Palmen
6

TI-BASIC (TI-83/84 +), 22 bytes

Como a tela é em preto e branco, precisamos apenas testar se o pixel especificado está ativado ou desativado e mapeá-lo para RGB preto ou branco. Além disso, os pixels são acessíveis apenas por linha e coluna nessa ordem, por isso as coordenadas são invertidas.

Prompt X,Y
255
Ans-{Ans,Ans,Ans}pxl-Test(Y,X
kamoroso94
fonte
1
Observe que isso não funciona em calculadoras de TI em cores (como a TI-84 Plus CE).
Pizzapants184
Você tem certeza da contagem de bytes? Conto 22.
lirtosiast
2

bash, 103/86 bytes

Com uma interpretação estrita da especificação (a entrada de STDIN e a saída em STDOUT são separadas por vírgula):

read x
import -window root -crop 1x1+${x/,/+} ppm:-|od -dj13|awk 'NR<2{n=2^16;print$2/n","$3/n","$4/n}'

Com um formato de entrada mais flexível (entrada mais separada como argumento de linha de comando, saída separada por espaço:

import -window root -crop 1x1+$1 ppm:-|od -dj13|awk 'NR<2{n=2^16;print$2/n,$3/n,$4/n}'

Depende de imagemagick, awk e coreutils.

Maçaneta da porta
fonte
2

Conjunto TI-Nspire - 112 bytes

50 52 47 00 30 40 2D E9 FF FF FF FA 00 F0 17 F8
04 1C 00 F0 14 F8 85 00 2D 18 AD 01 2D 19 6C 00
C0 21 09 06 09 69 08 5B 3F 25 42 09 2A 40 1F 25
03 1C 2B 40 C1 0A 29 40 0A A0 0A DF 30 BD 00 20
0A 23 07 49 10 25 8A 69 2A 42 FC D1 0A 68 FF 25
2A 40 30 3A 0B DB 85 00 2D 18 6D 00 A8 18 F1 E7
00 00 02 90 25 64 2C 25 64 2C 25 64 0A 00 70 47

Este programa gera números inteiros no intervalo de 0 a 31 para R e B e de 0 a 63 para G, porque o dispositivo usa nativamente um buffer de quadro RGB565. Ele usa serial para entrada e saída.

Fonte:

.string "PRG"
push {r4, r5, lr}
blx main
.thumb
main:
@ read x and y from serial into r4 and r0
bl read_int
mov r4, r0
bl read_int

@ turn x and y into framebuffer offset
@ r4 = ((r0 * 320) + r4) * 2
lsl r5, r0, #2
add r5, r0
lsl r5, #6
add r5, r4
lsl r4, r5, #1

@ load pixel from framebuffer
@ r0 = ((uint16_t **)0xc0000000)[0x10][r4 / 2]
mov r1, #0xC0
lsl r1, #24
ldr r1, [r1, #0x10]
ldrh r0, [r1, r4]

@ unpack RGB565 value into r1, r2, r3
mov r5, #0x3f
lsr r2, r0, #5
and r2, r5
mov r5, #0x1f
mov r3, r0
and r3, r5
lsr r1, r0, #11
and r1, r5

@ call printf
adr r0, fmt
swi #10

@ return
pop {r4, r5, pc}

@ subroutine to read an integer from serial
read_int:
mov r0, #0
mov r3, #10
ldr r1, serial_base
@ loop until characters come in on serial
2:
mov r5, #(1<<4) 
1:
ldr r2, [r1, #0x18]
tst r2, r5
bne 1b
@ read character from serial and mask out status bits
ldr r2, [r1]
mov r5, #0xff
and r2, r5
@ subtract 48 ('0') from byte; if result is negative, return
sub r2, #48
blt 1f
@ multiply existing numbers by 10 and add new number to them
lsl r5, r0, #2
add r5, r0
lsl r5, #1
add r0, r5, r2
b 2b

serial_base:.word 0x90020000
fmt:.string "%d,%d,%d\n"
@ this instruction is over here because serial_base and fmt need to be word-aligned
1:bx lr
pbfy0
fonte
2

Bash no Linux com xserver, 30 bytes

xset dpms force off;echo 0,0,0

Usando a idéia apresentada no meu comentário sobre a pergunta, esta solução deve desligar completamente a saída da tela e depois ecoar que a tela é realmente preta.

Eu também estava pensando em usar xbacklight =0, mas isso não muda as cores dos pixels.

maxb
fonte
+1 para encontrar a brecha, mas atualizei as restrições.
eeze
1

Biblioteca Python 2 + PIL, 96 91 bytes

import PIL.ImageGrab as i
print','.join('%.1f'%(x/255.)for x in i.grab().getpixel(input()))

Implementa a especificação literalmente conforme solicitado. Porém, apenas no Windows - não funciona no Linux e produz saída extra (valor alfa) no Mac.

Kirill L.
fonte
from PIL import ImageGrab as ifrom PIL import*, i.grabImageGrab.grab.
Erik the Outgolfer
@ Erik isso não acontece para o PIL. O PIL importa apenas os nomes listados explicitamente.
ovs
@ovs, Ah, esse provavelmente é o problema porque eu também não poderia fazer o __import__('...')caminho funcionar.
Kirill L.
Observe que isso gera um valor alfa no macOS, portanto, ele adere apenas às especificações no Windows.
ovs 5/12
@ovs, OK, bom saber, obrigado.
precisa
1

Mathematica, 69 bytes

Apenas a função é 34 bytes.

CurrentScreenImage[]~PixelValue~#&

Recebe entrada no formato {x, y}.

A imagem é a fusão de imagens em todos os monitores. Se você deseja uma tela específica, use o índice inteiro - por exemplo CurrentScreenImage[1]

O programa completo exatamente como especificado é 69 bytes CurrentScreenImage[]~PixelValue~ToExpression["{"<>InputString[]<>"}"]

Kelly Lowder
fonte
1

AutoHotKey, 113 bytes

CoordMode,Pixel
InputBox,x
InputBox,y
PixelGetColor,c,x,y
MsgBox % c&255 . "," . c>>8&255 . "," . c>>16&255

Use caixas de diálogo em vez de stdin / stdout.

tsh
fonte
0

Bash + coreutils + scrot + netpbm, 90 bytes

scrot -e'pngtopnm $f'|(read a;read w h;read m;head -c$((3*(w*$2+$1)))>f;od -t u1 -N3 -An;)

Versão de E / S frouxa

Toma xey como argumentos separados da linha de comando.

Gravuras r, g, bcomo ints de 0-255 em linhas separadas


Bash + coreutils + scrot + netpbm + bc + sed, 172 bytes

IFS=, read x y
scrot -e'pngtopnm $f'|(read a;read w h;read m;head -c$((3*(w*$y+$x)))>f;od -vw1 -tu1 -N3 -An|while read p;do bc<<<"scale=2;$p/$m"|tr '\n' ,;done;)|sed s/,$//

Versão estrita de E / S

Entrada no stdin como x,y

Saída em stdout como r.rr,g.gg,b.bb(sem nova linha).

pizzapants184
fonte
@Shaggy não mais - veja as atualizações
eeze
0

TI-BASIC (TI-83/84 +), 15 bytes

Input Y
255not(rand(3)pxl-Test(Y,Ans

Retira um número inteiro Anse um do prompt. rand(3)cria uma lista de três números aleatórios diferentes de zero, para que o produto seja zero se o pixel estiver escuro.

lirtosiast
fonte