এটি ফ্লিপ করুন, এটি ফ্লপ করুন, এটি মানে


24

সংক্ষিপ্ত বিবরণ

ইনপুট হিসাবে প্লেইন পিপিএম (পি 3) ফর্ম্যাটে একটি চিত্র দেওয়া pহয়েছে, চিত্রের প্রতিটি পিক্সেলের জন্য , নিম্নলিখিত 4 পিক্সেলের লাল, সবুজ এবং নীল সমস্ত 4 পিক্সেলের সংশ্লিষ্ট চ্যানেলের মেঝেতে গড় মান সহ প্রতিস্থাপন করুন:

  1. p নিজেই

  2. pচিত্রটি উল্লম্বভাবে উল্টানো গেলে পিক্সেলটির অবস্থানের অবস্থান

  3. pচিত্রটি অনুভূমিকভাবে উল্টানো অবস্থায় পিক্সেলটির অবস্থান অবস্থিত

  4. pযখন চিত্রটি উল্লম্ব এবং অনুভূমিকভাবে উল্টানো হয় তখন পিক্সেলের অবস্থান অবস্থিত

প্লেইন পিপিএম (পি 3) ফর্ম্যাটে ফলাফলের চিত্রটি আউটপুট করুন।

আরও ব্যাখ্যার জন্য, এই 8x8 চিত্রটি বিবেচনা করুন, 128x128 এ ম্যাগনিটিভ করা হয়েছে:

পদক্ষেপ 2 উদাহরণ

pলাল পিক্সেল হতে দিন । p(এবং 3 টি নীল পিক্সেল) এর জন্য নতুন মান গণনা করতে , 3 টি নীল পিক্সেলের মান এক সাথে pগড় হবে:

p1 = (255, 0, 0)
p2 = (0, 0, 255)
p3 = (0, 0, 255)
p4 = (0, 0, 255)
p_result = (63, 0, 191)

উদাহরণ

পিপিএম: ইনপুট , আউটপুট


পিপিএম: ইনপুট , আউটপুট


পিপিএম: ইনপুট , আউটপুট


পিপিএম: ইনপুট , আউটপুট


রেফারেন্স বাস্তবায়ন

#!/usr/bin/python

import sys
from itertools import *

def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return list(izip_longest(*args, fillvalue=fillvalue))

def flatten(lst):
    return sum(([x] if not isinstance(x, list) else flatten(x) for x in lst), [])

def pnm_to_bin(p):
    w,h = map(int,p[1].split(' '))
    data = map(int, ' '.join(p[3:]).replace('\n', ' ').split())
    bin = []
    lines = grouper(data, w*3)
    for line in lines:
        data = []
        for rgb in grouper(line, 3):
            data.append(list(rgb))
        bin.append(data)
    return bin

def bin_to_pnm(b):
    pnm = 'P3 {} {} 255 '.format(len(b[0]), len(b))
    b = flatten(b)
    pnm += ' '.join(map(str, b))
    return pnm

def imageblender(img):
    h = len(img)
    w = len(img[0])
    for y in range(w):
        for x in range(h):
            for i in range(3):
                val = (img[x][y][i] + img[x][~y][i] + img[~x][y][i] + img[~x][~y][i])//4
                img[x][y][i],img[x][~y][i],img[~x][y][i],img[~x][~y][i] = (val,)*4
    return img

def main(fname):
    bin = pnm_to_bin(open(fname).read().split('\n'))
    bin = imageblender(bin)
    return bin_to_pnm(bin)

if __name__ == '__main__':
    print main(sys.argv[1])

এই প্রোগ্রামটি ইনপুট হিসাবে একক ফাইলের নাম নেয়, আউটপুট এর মতো ফর্ম্যাট করে pngtopnm <pngfile> -plainএবং ফাঁক দিয়ে পৃথক করা পিপিএম ডেটাগুলির একক লাইন আউটপুট দেয়।


পি 3 ফরমেটের একটি সংক্ষিপ্ত বিবরণ

থেকে উত্পন্ন একটি পিপিএম প্লেইনটেক্সট ফাইলটি এর pngtopnm <pngfile> -plainমতো দেখতে পাবেন:

P3
<width in pixels> <height in pixels>
<maximum value as defined by the bit depth, always 255 for our purposes>
<leftmost 24 pixels of row 1, in RGB triples, space-separated; like (0 0 0 1 1 1 ...)>
<next 24 pixels of row 1>
<...>
<rightmost (up to) 24 pixels of row 1>

<leftmost 24 pixels of row 2>
<next 24 pixels of row 2>
<...>
<rightmost (up to) 24 pixels of row 2>

<...>

এটি উদাহরণস্বরূপ ইনপুট এবং আউটপুট ফাইলগুলি ব্যবহার করে এমন ফর্ম্যাট। যাইহোক, পিএনএম এর ফর্ম্যাটটি সম্পর্কে খুব আলগা - যে কোনও শ্বেত স্থানটি মান পৃথক করতে পারে। আপনি উপরের ফাইলের সমস্ত নিউলাইনগুলি প্রতি একক স্থানের সাথে প্রতিস্থাপন করতে পারেন এবং এখনও একটি বৈধ ফাইল থাকতে পারেন। উদাহরণস্বরূপ, এই ফাইল এবং এই ফাইল উভয়ই বৈধ এবং একই চিত্র উপস্থাপন করে। কেবলমাত্র অন্যান্য প্রয়োজনীয়তাগুলি হ'ল ফাইলটি অবশ্যই একটি শেষের লাইনের সাথে শেষ হওয়া উচিত এবং width*heightনিম্নলিখিতগুলি অনুসরণ করে অবশ্যই আরজিবি ট্রিপল্ট থাকতে হবে 255


বিধি

  • এটি , তাই সংক্ষিপ্ততম বৈধ সমাধানটি জয়লাভ করে।
  • আপনি যে কোনও সুবিধাজনক এবং ধারাবাহিক উপায়ে পিপিএম ডেটা ফর্ম্যাট করতে পারেন এবং আউটপুট দিতে পারেন, যতক্ষণ না উপরে বর্ণিত পিপিএম ফর্ম্যাট অনুযায়ী বৈধ থাকে is একমাত্র ব্যতিক্রম হ'ল আপনাকে অবশ্যই প্লেইন (পি 3) ফর্ম্যাটটি ব্যবহার করতে হবে, বাইনারি (পি 6) ফর্ম্যাটটি নয়।
  • আপনাকে অবশ্যই যাচাইকরণ সরবরাহ করতে হবে যে উপরের পরীক্ষার চিত্রগুলির জন্য আপনার সমাধানটি সঠিক চিত্রকে আউটপুট করে।
  • সমস্ত চিত্রের 8 বিট বিট গভীরতা হবে।

অতিরিক্ত পাঠ: নেটপবিএম ফর্ম্যাট উইকিপিডিয়া পৃষ্ঠা


স্নিপেট পরীক্ষা করা (এর জন্য ক্যালভিনের শখের জন্য ধন্যবাদ)


ইমেজ লাইব্রেরিগুলি কি পিপিএম ফাইলগুলি খোলার / সংরক্ষণের অনুমতি দেয়?
ক্যালভিনের

@ ক্যালভিনের শখগুলি হ্যাঁ
মেগো

3
" এটিকে ফ্লিপ করুন, এটিকে ফ্লপ করুন, গড় করুন " youtube.com/watch?v=D8K90hX4PrE
লুইস মেন্ডো

3
হতে পারে "এটিকে ফ্লিপ করুন, ফ্লপ করুন, মানে"?
কনর ওব্রায়ান

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ এটিকে কিছু পক্ষের মতো মনে হচ্ছে- ওহ, অপেক্ষা করুন, লুইস কী পোস্ট করেছেন।
অ্যাডিসন ক্রম্প

উত্তর:


4

পাইথ, 30 29 বাইট

zjms.OdC.nM[JrR7.zKm_cd3J_J_K

আমার প্রোগ্রামটি প্রথম লাইনে সমস্ত মেটাডেটা এবং স্টিডিনের পরে লাইনে একের পর এক ইমেজ ডেটা সারি আশা করে। সহায়তা করার জন্য, কোনও কার্যকর পিপিএম ফাইলকে একটি পিপিএম ফাইলে রূপান্তর করার জন্য এটি একটি ছোট পাইথন প্রোগ্রাম যা আমার প্রোগ্রামটি বুঝতে পারে:

import sys
p3, w, h, d, *data = sys.stdin.read().split()
print(p3, w, h, d)
for i in range(0, int(w) * int(h), int(w)):
    print(" ".join(data[i:i+int(w)]))

একসময় আপনার কাছে একের পর এক ইমেজ ডেটা সীমাবদ্ধ থাকলে ক্রিয়াকলাপগুলি সত্যই সহজ। প্রথমে আমি চিত্রের ডেটাটি পূর্ণসংখ্যার ( JrR7.z) এর তালিকার তালিকায় পড়ি , তারপরে আমি প্রতি 3 টি পূর্ণসংখ্যার গোষ্ঠীভুক্ত করে এবং প্রতিটি সারিতে ( Km_cd3J) এগুলি বিপরীত করে অনুভূমিকভাবে মিরর সংস্করণটি তৈরি করি । তারপরে উল্লম্বভাবে মিরর করা সংস্করণগুলি কেবল সহজ _J_K, যেহেতু আমরা কেবল সারিগুলি বিপরীত করতে পারি।

আমি এই সমস্ত ম্যাট্রিক নিয়েছি, তাদের প্রত্যেককে 1 ডি অ্যারে দিয়ে .nMফ্ল্যাট করব C, প্রতিটি পিক্সেল উপাদানগুলির তালিকার একটি তালিকা পেতে প্রতিস্থাপন করব , lists তালিকাগুলির প্রত্যেকের গড় এবং সংক্ষিপ্ত আকারে কাটা হবে ( ms.Od), এবং শেষ পর্যন্ত মুদ্রণটি নিউলাইনলাইনে যোগ হয়েছে j

নোট করুন যে আমার প্রোগ্রামটি আলাদা ফর্ম্যাটে আউটপুট উত্পন্ন করে (তবে এখনও বৈধ পিপিএম)। এই ইমগুর অ্যালবামে ডেমো চিত্রগুলি দেখা যায়


13

বাশ (+ চিত্রম্যাগিক), 64 + 1 = 65 বাইট

C=convert;$C a -flip b;$C a -flop c;$C c -flip d;$C * -average e

কাজের জন্য সঠিক সরঞ্জাম।

aরূপান্তর করতে পিপিএম ডেটা ধারণ করে এমন একটি ফাইল রয়েছে এমন একটি ডিরেক্টরিতে চালিত হতে হবে । এই ফাইলের নামটি গুরুত্বপূর্ণ, তাই আমি বাইট গণনায় একটি বাইট যুক্ত করেছি।

পিএনজি থাম্বনেইল আউটপুট (এটি কেন প্রয়োজনীয় তা নিশ্চিত নয় কারণ তারা যেভাবেই হোক সব একই, তবে প্রশ্নটি তাই বলে, তাই ...):

পেংগুইন quintopia পিটার minibits

নিউটিনিওকে 2 বাইট বাঁচানোর জন্য ধন্যবাদ !


3
আমার ফলাফলগুলি প্রয়োজন কারণ লোকেদের পরীক্ষা না করে সমাধান পোস্ট করার খারাপ অভ্যাস রয়েছে। +1 এর জন্য -flop, আমি সত্যিই অবাক হতে চাই যে এটি একটি পতাকা।
মেগো

1
ব্যবহার করে 2 বাইট কামিয়ে ফেলো C=convertএবং $Cপরিবর্তে alias
nneonneo

12

মতলব, 106 82 80 বাইট

i=imread(input(''))/4;for k=1:2;i=i+flipdim(i,k);end;imwrite(i,'p3.pnm','e','A')

চিত্রটি n*m*3ম্যাট্রিক্স হিসাবে লোড হয়েছে । তারপরে আমরা ম্যাট্রিক্সটি ফ্লিপ করেছি এবং উভয় অক্ষের জন্য নিজের মধ্যে যুক্ত করেছি এবং এটি আবার একটি ফাইলে লিখি।


পাঠ্য ফাইলগুলি এত বড় আপলোড করার জন্য আমি কোনও জায়গা খুঁজে পাইনি, সুতরাং এখানে পিএনজি সংস্করণ রয়েছে:


ওম, আমি জানি না আপনি <imgট্যাগ ব্যবহার করতে পারেন !
flawr

1
ম্যাটল্যাব আর ২০১৩ বি এবং আরও নতুন ক্ষেত্রে ফ্লিপডিমের পরিবর্তে ফ্লিপ ব্যবহার করা সম্ভব । এটি আপনাকে আরও 3 বাইট সঞ্চয় করতে হবে। ফ্লিপডিমের সহায়তা আসলে বলেছে: "ভবিষ্যতে প্রকাশে ফ্লিপডিম সরানো হবে instead পরিবর্তে এফএলআইপি ব্যবহার করুন।"
slvrbld

10

গণিত, 86 84 বাইট

পরামর্শের জন্য ডেভিডসকে ধন্যবাদ। (2 বাইট সংরক্ষণ করে)

Export[#2,⌊Mean@Join[#,(r=Reverse)/@#]&@{#,r/@#}&@Import[#,"Data"]⌋~Image~"Byte"]&

প্রথম এবং দ্বিতীয় প্যারামিটারগুলি যথাক্রমে ইনপুট এবং আউটপুট চিত্রগুলির পাথ।


পরীক্ষার মামলা

f=%; (assign the function to symbol f)
f["penguin.pnm","penguin2.pnm"]
f["quintopia.pnm","quintopia2.pnm"]
f["peter.pnm","peter2.pnm"]

ফল

(চিত্রগুলির পিএনজি সংস্করণগুলি নীচে আপলোড করা হয়েছে)

Import["penguin2.pnm"]

Import["quintopia2.pnm"]

Import["peter2.pnm"]


Join[#,(r=Reverse)/@#]
ডেভিডসি

4

জুলিয়া, 157 বাইট

using FileIO
s->(a=load(s);b=deepcopy(a);d=a.data;(n,m)=size(d);for i=1:n,j=1:m b.data[i,j]=mean([d[i,j];d[n-i+1,j];d[i,m-j+1];d[n-i+1,m-j+1]])end;save(s,b))

এটি একটি ল্যাম্বডা ফাংশন যা একটি পিপিএম ফাইলের পুরো পথ সহ একটি স্ট্রিং গ্রহণ করে এবং রূপান্তরিত চিত্রের সাথে ওভাররাইট করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

Ungolfed:

using FileIO

function f(s::AbstractString)
    # Load the input image
    a = load(s)

    # Create a copy (overwriting does bad things)
    b = deepcopy(a)

    # Extract the matrix of RGB triples from the input
    d = a.data

    # Store the size of the matrix
    n, m = size(d)

    # Apply the transformation
    # Note that we don't floor the mean; this is because the RGB values
    # aren't stored as integers, they're fixed point values in [0,1].
    # Simply taking the mean produces the desired output.
    for i = 1:n, j = 1:m
        b.data[i,j] = mean([d[i,j]; d[n-i+1,j]; d[i,m-j+1]; d[n-i+1,m-j+1]])
    end

    # Overwrite the input
    save(s, b)
end

উদাহরণ ফলাফল:

পেংগুইন quintopia পিটার minibits


4

পাইথন 2 + পিআইএল, 268

এখন আমি ফিল্ম ফিলিপিং এবং আলফা মিশ্রণ ব্যবহার করে ব্যাপকভাবে পিআইএল ব্যবহার করি

from PIL import Image
I=Image
B,T=I.blend,I.FLIP_TOP_BOTTOM
a=I.open(raw_input()).convert('RGB')
exec'b=a@I.FLIP_LEFT_RIGHT);c=a@T);d=b@T)'.replace('@','.transpose(')
x,y=a.size
print'P3',x,y,255
for r,g,b in list(B(B(B(a,b,0.5),c,0.25),d,0.25).getdata()):print r,g,b

ফলাফল চিত্র এখানে পাওয়া যায়


1
বিধি দ্বারা প্রয়োজনীয় হিসাবে দয়া করে পরীক্ষার ক্ষেত্রে আউটপুটগুলি অন্তর্ভুক্ত করুন।
মেগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.