Braincopterify một hình ảnh


10

Giới thiệu

Braincopter là một dẫn xuất Brainf *** bí truyền mã hóa chương trình Brainf *** dưới dạng hình ảnh. Là ngôn ngữ 2D, nó sử dụng hai lệnh bổ sung; chúng xoay con trỏ lệnh (ban đầu chỉ sang phải) theo chiều kim đồng hồ và ngược chiều kim đồng hồ. Braincopter rất giống với Brainloller , ngoại trừ việc thay vì sử dụng màu sắc riêng biệt như các lệnh khác nhau, thay vào đó, nó sẽ tính toán lệnh dựa trên giá trị RGB của từng pixel.

Braincopter tính toán lệnh cho từng pixel dựa trên công thức N = (65536 * R + 256 * G + B) % 11, trong đó Nlà số lệnh. Ánh xạ từ số lệnh đến lệnh Brainf *** như sau:

0  >
1  <
2  +
3  -
4  .
5  ,
6  [
7  ]
8  rotate instruction pointer to the right (clockwise)
9  rotate instruction pointer to the left (counterclockwise)
10 NOP

Braincopter rất hữu ích cho việc chụp ảnh bản đồ hoặc ẩn các thông điệp bí mật trong một thứ khác, vì màu sắc của từng pixel trong bất kỳ ảnh nào có thể được thay đổi chỉ một chút để đưa ra thao tác mong muốn. Hình ảnh thay đổi như vậy thường không thể phân biệt với bản gốc.

Thử thách

Viết chương trình hoặc hàm lấy một hình ảnh và một chuỗi mã brainf *** làm đầu vào và tạo ra hình ảnh gốc với mã brainf *** được mã hóa trong đó.

Để thực hiện việc này, lấy từng pixel trong ảnh gốc và thay thế nó bằng giá trị RGB gần nhất với màu của pixel gốc đánh giá theo hướng dẫn Braincopter chính xác. Sự khác biệt màu sắc cho các mục đích của thách thức này được xác định là abs(R1 - R2) + abs(G1 - G2) + abs(B1 - B2). Trong trường hợp hòa, trong đó hai màu phân giải theo cùng một lệnh Braincopter gần giống với màu gốc, có thể được chọn.

Ví dụ: nếu màu gốc #FF8040và cần được sửa đổi để tạo hướng dẫn '1' trong Braincopter, #FF7F40nên được chọn.

Braincopter sẽ thoát khi con trỏ lệnh chạy ra khỏi cạnh của hình ảnh, vì vậy chúng tôi sẽ giữ nó trên hình ảnh bằng cách sử dụng các lệnh 8 và 9 (xoay con trỏ lệnh theo chiều kim đồng hồ và ngược chiều kim đồng hồ). Thật dễ dàng để giải thích định dạng của mã hóa bằng một ví dụ.

Đối với +[[->]-[-<]>-]>.>>>>.<<<<-.>>-.>.<<.>>>>-.<<<<<++.>>++.hình ảnh đầu vào và hình ảnh 8x9, các hướng dẫn sẽ được trình bày như thế này (sử dụng các lệnh Brainf *** thay vì tương đương Braincopter và biểu diễn unicode của các lượt):

+ [ [ - > ] - ↲
↳ - > ] < - [ ↲
↳ ] > . > > > ↲
↳ < < < < . > ↲
↳ - . > > - . ↲
↳ > . < < . > ↲
↳ > > > - . < ↲
↳ + + < < < < ↲
↳ . > > + + . N

(Trong đó N là NOP.) Như bạn có thể thấy, điều khiển luồng di chuyển từ trái sang phải cho đến khi chạm vào tập đầu tiên theo chiều kim đồng hồ, sau đó di chuyển từ phải sang trái qua hàng thứ hai, et cetera. Chương trình của bạn phải sử dụng luồng điều khiển này. Đầu vào brainf *** sẽ luôn có thể vừa với hình ảnh; tuy nhiên, bạn có thể không cho rằng nó sẽ luôn phù hợp với hình ảnh chính xác. Nếu nó quá nhỏ, hãy đệm nó bằng NOP; Mặc dù vậy, mã Braincopter vẫn phải quay theo chiều kim đồng hồ / ngược chiều kim đồng hồ ở hai bên.

Bạn có thể cho rằng đầu vào Brainf *** sẽ chỉ chứa tám ký tự ><+-,.[].

Sử dụng trình thông dịch Braincopter chính thức để kiểm tra kết quả đầu ra của chương trình hoặc chức năng của bạn.

Các trường hợp thử nghiệm

Đầu vào:

Hình vuông 20x20 của # EE2056

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

Ví dụ đầu ra:

20x20 vuông sửa đổi

Đầu ra Braincopter:

Hello World!

Đầu vào:

Đêm đầy sao 50x40

>++++++++++[<++++++++++>-]>>>>>>>>>>>>>>>>++++[>++++<-]>[<<<<<<<++>+++>++++>++++++>+++++++>+++++++>++++>-]<++<+++++<++++++++++<+++++++++<++++++<<<<<<<<<<<<<[>+>+>[-]>>>>[-]>[-]<<<<<<<[>>>>>>+>+<<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]+>---[<->[-]]<[>>>>>>.>.>..<<<<<<<<<<<<+<<[-]>>>>>>-]<<<<<[>>>>>+>+<<<<<<-]>>>>>[<<<<<+>>>>>-]+>-----[<->[-]]<[>>>>>>>>>>.<.<..<<<<<<<<<<<<+<[-]>>>>>-]<+>[-]>[-]>[-]<<<[>+>+>+<<<-]>[<+>-]+>----------[<->[-]]<[<<+>[-]>-]>[-]>[-]<<<<[>>+>+>+<<<<-]>>[<<+>>-]+>----------[<->[-]]<[<<<+>[-]>>-][-]>[-]<<<<<[>>>>+>+<<<<<-]>>>>[<<<<+>>>>-]+>[<->[-]]<[[-]>[-]<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<[>++++++++[<++++++>-]<.-.[-]][-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]<[>++++++++[<++++++>-]<.[-]][-]>[-]<<[>+>+<<-]>>[<<+>>-]++++++++[<++++++>-]<.[-]]>>>>.<<<<<<<<<<<-]

Đầu ra:

Đêm đầy sao sửa đổi

Đầu ra Braincopter:

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17...

Đầu vào:

Mona Lisa nhỏ

>>+[>>[>]>+>,[>>++++[>++++++++<-]>[<<<[>+>+<<-]>[<+>-]>[<<->>[-]]>-]<<<<->[<+>-[<->-[-[-[-[-[-[-[-[-[<+>-[-[-[-[<->-[-[-[-[-[-[-[-[-[-[-[-[-[<+>-[<->-[<+>-[<->>>+++[>+++++++++<-]>+[<<<[>+>+<<-]>[<+>-]>[<<->>[-]]>-]<<<[<+>-[<->-[<+>-[<->[-]]<[-<++>]>]]<[-<+>]>]]<[-<++++++>]>]]]]]]]]]]]]]]]<[-<+++++>]>]<[-<++++++++>]>]<[-<++++>]>]<[-<+++++++>]>]]]]]]]]]]<[-<+++>]>]]<[-<<[<]<->>[>]>]>]<[-<<[<]<->>[>]>]<<[<]<]>>[>]>>>>>>+<<<<<<<[<]>[[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[-[-[-[-[-[->->>[>]>[>]>>>>>[>[>>]>>>]>>[<<<<+>>+>>-]<<[>>+<<-]>>>[<<<<+>+>>>-]<<<[>>>+<<<-]<[->>>>>[<<<<<+>+>>>>-]<<<<[>>>>+<<<<-]<[<++++++++++>-]]>>>>>>[<<<<<<+>+>>>>>-]<<<<<[>>>>>+<<<<<-]<[->>>>>>>[<<<<<<<+>+>>>>>>-]<<<<<<[>>>>>>+<<<<<<-]<[<<++++++++++[>++++++++++<-]>>-]]<.[-]<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]<<[->[-]>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]>[>>]<<]>>>>>[>[>>]>>>]<<<<<[<<]>[>[>>]<<[->>+<[>>+<<-]<<<]>->>+<<<<<<<[<<]>]>+>>>>>[>[>>]>>>]>,[>+>+<<-]>[<+>-]>[[>+>+<<-]>>[<<+>>-]<[-<->[-<->[-<->[-<->[-<->[-<->[-<->[-<->[-<->[[-]<-><<<---------->+>>]]]]]]]]]]<]<[>+>+<<-]>[<+>-]>[-[-[-[-[-[-[-[-[-[-<<---------->+>[-[-[-[-[-[-[-[-[-[[-]<<---------->+>]]]]]]]]]]]]]]]]]]]]<<[>>+>+<<<-]>>[<<+>>-]+>[<<<+>>->[-]]<[-<[>+>+<<-]>[<+>-]>[<<<+>>>[-]]<]<[>+>+<<-]>[<+>-]>[<<+>>[-]]<<<<+[-[<<<<<<[<<]>[<<<<<[<<]>]>[>>]<+>>>>[>[>>]>>>]>-]>[>]<[[>+<-]<]<<<<<<[<<]>[>[>>]<<[>[>>+<<-]>+<<-<<]>->>+<<<<<<<[<<]>]>[>>]+>>>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]>[>>]<<->>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]+>[>>]>>>[-]>[-]+<<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]+<<<<<[<<]>-<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[->[<<<[<<]<<+>+>>>[>>]>-]<<<[<<]<[>>>[>>]>+<<<[<<]<-]+<[[-]>->>>[>>]>-<+[<<]<<]>[->>>[>>]>+++++++++<<<[<<]<]>>>[>>]+>>]<<-<<<<[>>>>+>+<<<<<-]>>>>[<<<<+>>>>-]>[-<<[>+>+<<-]>[<+>-]>>+<[[-]>-<]>[-<<<<->[-]>>>>[<<+>>->[<<+>>->[<<+>>-]>]>>>]<<<<<<<[<<]>[<<<<<[<<]>]>[>>]>>]<]<<<[<<]<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>>+<[->[<<<[<<]<<+>+>>>[>>]>-]<<<[<<]<[>>>[>>]>+<<<[<<]<-]<[-[-[-[-[-[-[-[-[-[->>>>[>>]>[-]>[-]+>+<<<<<[<<]<<]]]]]]]]]]>>>>[>>]+>>]>[-<<<[<<]<<+>+>>>[>>]>]<<<[<<]<[>>>[>>]>+<<<[<<]<-]<[->>>>[>>]>[>[>>]<<[>[>>+<<-]>+<<-<<]>->>+>[>>]>]<<<[<<]>[<<<<<[<<]>]<<<]<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>+[<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[>+<-]>[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[>-<[-]]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]+[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]<-<[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>>[<<<+>+>>-]<<[>>+<<-]>>>[<<<<+>+>>>-]<<<[>>>+<<<-]<<+>[[-]<-<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[>]>>>>>[>[>>]>>>]<]<[->>>[>>]>>>[>[>>]>>>]>+[<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[<<[<]<<+>+>>[>]>-]<<[<]<[>>[>]>+<<[<]<-]+<-[-[>-<[-]]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]<-<[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]<]>[->>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>[>]+[<]<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>[>]>>>>>[>[>>]>>>]>[>>]>>>[>[>>]>>>]>]<<<<<<[<<]>[<<<<<[<<]>]<<<<<[<<]>[<<<<<[<<]>]<<[<]>[<+>-]>[>]>>>>>[>[>>]>>>]<<]<<<[<<]>[<<<<<[<<]>]<<[<]<[<]<]>>[>]>]

Đầu ra:

Mona Lisa đã sửa đổi

Đầu ra Braincopter:

Đây là một trình thông dịch tự Brainf *** . Nó tách mã từ đầu vào bằng !; ví dụ, đầu vào ,[.,]!Hello, World!\0sẽ xuất ra Hello, World!, giả sử \0đã được thay thế bằng một byte null.

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất sẽ thắng. Chúc bạn chơi golf vui vẻ!


Có vẻ như Braincopter làm nghệ thuật. Nghệ thuật thực sự.
Erik the Outgolfer

Câu trả lời:


1

Con trăn, 664 656

sử dụng : python snippet.py image.png <bf script>

R=range;_=R(256);a=abs
def C(c):R,G,B=c;return'><+-.,[]RLN'[(65536*R+256*G+B)%11]
def D(c,d):R,G,B=c;F,V,H=d;return a(R-F)+a(G-V)+a(B-H)
def E(c1,i):return min([(c,D(c1,c))for c in[(r,g,b)for r in _ for g in _ for b in _]if C(c)==i],key=lambda x:x[1])[0]
def B(b,w,h):
 x,y,d=0,0,1
 for c in(b[0]+'R'.join(['L'+s for s in[s[::-1]if i%2 else s for i,s in enumerate([(b[1:]+'N'*w*h)[q:q+w-2]for q in R(0,w*h,w-2)])]])[1:])[:w*h][:-1]+'N':
  yield c,(a(x),y)
  x+=d
  if c=='R':x=0;y+=1;d*=-1
import sys
from PIL import Image
I=Image.open(sys.argv[1]).convert('RGB')
W,H=I.size
P=I.load()
for i,p in B(sys.argv[2],W,H):P[p]=E(P[p],i)
I.save(sys.stdout,"PNG")

giải thích sắp tới ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.