সংক্ষিপ্ত বিবরণ
ইনপুট হিসাবে প্লেইন পিপিএম (পি 3) ফর্ম্যাটে একটি চিত্র দেওয়া p
হয়েছে, চিত্রের প্রতিটি পিক্সেলের জন্য , নিম্নলিখিত 4 পিক্সেলের লাল, সবুজ এবং নীল সমস্ত 4 পিক্সেলের সংশ্লিষ্ট চ্যানেলের মেঝেতে গড় মান সহ প্রতিস্থাপন করুন:
p
নিজেইp
চিত্রটি উল্লম্বভাবে উল্টানো গেলে পিক্সেলটির অবস্থানের অবস্থানp
চিত্রটি অনুভূমিকভাবে উল্টানো অবস্থায় পিক্সেলটির অবস্থান অবস্থিতp
যখন চিত্রটি উল্লম্ব এবং অনুভূমিকভাবে উল্টানো হয় তখন পিক্সেলের অবস্থান অবস্থিত
প্লেইন পিপিএম (পি 3) ফর্ম্যাটে ফলাফলের চিত্রটি আউটপুট করুন।
আরও ব্যাখ্যার জন্য, এই 8x8 চিত্রটি বিবেচনা করুন, 128x128 এ ম্যাগনিটিভ করা হয়েছে:
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 বিট বিট গভীরতা হবে।
অতিরিক্ত পাঠ: নেটপবিএম ফর্ম্যাট উইকিপিডিয়া পৃষ্ঠা