কিউবিক্স, 16 বাইট
$-!u'HIa'@/1@O<
নেট ফর্ম:
$ -
! u
' H I a ' @ / 1
@ O < . . . . .
. .
. .
এটি নিজে চেষ্টা করো
আপনার পৃথক তালিকায় ফাইলের দশমিক বাইট মানগুলি ইনপুট করা উচিত। বিভাজকটির কোনও ব্যাপার নেই, এমন কোনও কিছু যা অঙ্ক বা বিয়োগ চিহ্ন নয়। কোডটি কেবলমাত্র প্রথম বাইট সম্পর্কেই যত্নশীল তাই আপনি চাইলে বাকী ফাইলটি ছেড়ে দিতে পারেন। প্রোগ্রামটি ক্ষতিহীন 0
এবং 1
ক্ষতির জন্য ফলাফল। চেষ্টা করে দেখুনএখানে করুন ! ডিফল্ট ইনপুটটিতে একটি এফএলএসি শিরোলেখ ব্যবহার করা হয়।
ব্যাখ্যা
ফাইলগুলি সম্পর্কে দুর্দান্ত জিনিসটি হল (প্রায়) তাদের সকলের কাছে একটি তথাকথিত যাদু রয়েছে। এগুলি ফাইলের প্রথম কয়েকটি বাইট। ভাল সফ্টওয়্যার ফাইল এক্সটেনশন পরীক্ষা করে না, বরং ফাইলটি যাদু করে এটি কোনও নির্দিষ্ট ফাইল পরিচালনা করতে পারে কিনা তা দেখার জন্য।
ডেনিস এই যাদুটি সংক্ষেপণের ধরণটি আবিষ্কার করার জন্য একটি উপায় খুঁজে পেয়েছে, তবে তিনি প্রথম বাইটটি ফেলে দেওয়ার বিষয়টি আমাকে দ্বিতীয়বারের চেয়ে প্রথম পদ্ধতিতে বাইট ব্যবহার করার পদ্ধতিতে আসতে চাইলো। সর্বোপরি, এই সম্প্রদায়টি বাইট সংরক্ষণের বিষয়ে।
বিভিন্ন ফাইল ধরণের প্রথম বাইটের একটি তালিকা এখানে। আমি তাদের দুটি গ্রুপে অর্ডার করেছিলাম: ক্ষয়ক্ষতিহীন ও ক্ষতিহীন। দশমিক, হেক্সাডেসিমাল এবং বাইনারি তাদের প্রথম বাইট মান আছে। আপনি ইতিমধ্যে একটি প্যাটার্ন দেখতে পাবেন ...
Lossy: Lossless:
255:0xFF:0b11111111 102:0x66:0b01100110
79:0x4F:0b01001111 84:0x54:0b01010100
35:0x23:0b00100011 82:0x52:0b01010010
11:0x0B:0b00001011 70:0x46:0b01000110
0:0x00:0b00000000
আমি যে প্যাটার্নটি দেখেছি তা হ'ল দ্বিতীয় বিট (বাম থেকে ডানে গণনা করা) সর্বদা "লসলেস" বাইটে ছিল এবং পঞ্চম বিটটি সর্বদা বন্ধ ছিল। এই সংমিশ্রণটি কোনও ক্ষতিকারক বিন্যাসে উপস্থিত হয় না। এটি "এক্সট্রাক্ট" করার জন্য, আমরা কেবল একটি বাইনারি AND (বাই দ্বারা 0b01001000 (=72)
) করব এবং তারপরে তুলনা করব 0b01000000 (=64)
। যদি উভয়ই সমান হয় তবে ইনপুট ফর্ম্যাটটি ক্ষতিহীন, অন্যথায় এটি ক্ষতির।
দুঃখজনকভাবে, কিউবিক্সের কাছে এইরকম তুলনা অপারেটর নেই, তাই আমি বিয়োগ ব্যবহার করেছি (ফলাফল যদি 64৪ হয়, এটি 0 দেয়, এবং এর ফলস্বরূপ অন্যথায় 8, -56 বা -64 হয় I'll আমি এটি পরে ফিরে আসব।
প্রথমে প্রোগ্রামটির শুরুতে শুরু করা যাক। বাইনারি এবং a
কমান্ডটি ব্যবহার করে করা হয়:
'HIa
'H # Push 0b01001000 (72)
I # Push input
a # Push input&72
তারপরে, বিয়োগফলটি ব্যবহার করে আমরা 64 এর সাথে তুলনা করি (দ্রষ্টব্য আমরা একটি আয়নাতে আঘাত করি যা এই অংশের মাঝখানে আইপিটি প্রতিবিম্বিত করে [প্রথম লাইন, দ্বিতীয় অক্ষর, দক্ষিণ দিকে ইঙ্গিত করে])।
'@-
'@ # Push 0b01000000 (64)
- # Subtract from (input&72)
# Yields 0 for lossy, non-zero otherwise
আইপিটি ঘুরিয়ে দেওয়ার পরে u
, আমরা 1
স্ট্যাকের উপর চাপ দেওয়ার জন্য কিছু নিয়ন্ত্রণ প্রবাহ ব্যবহার করি যদি (এবং কেবলমাত্র) স্ট্যাকের শীর্ষটি শূন্য হয় না:
!$1
! # if top = 0:
$1 # do nothing
# else:
1 # push 1
আমরা ঘনক্ষেতের চারপাশে মোড়ানোর পরে, আমরা <
নির্দেশটি আঘাত করি , যা চতুর্থ লাইনের আইপি পশ্চিমে নির্দেশ করে। যা করার বাকি তা হ'ল আউটপুট এবং সমাপ্তি।
O@
O # Output top of the stack as number
@ # End program
সুতরাং, প্রোগ্রামটি ক্ষতিহীন 0
এবং 1
ক্ষতির জন্য ফলাফল out