ক্ষতি বা ক্ষতিহীন?


18

একটি অডিও ফাইল দেওয়া হয়েছে তা নির্ধারণ করুন এটি এটিকে কোনও ক্ষতিকারক বিন্যাসে বা নিরবিচ্ছিন্ন বিন্যাসে এনকোড করা আছে কিনা। এই চ্যালেঞ্জের উদ্দেশ্যে, কেবলমাত্র নিম্নলিখিত ফর্ম্যাটগুলির শ্রেণিবদ্ধ করা দরকার:

বিধি

  • যদি ইনপুট ফাইলের আকারে নেওয়া হয় তবে ফাইলনাম সম্পর্কে কোনও অনুমান করা উচিত নয় (উদাহরণস্বরূপ, বিন্যাসটির জন্য প্রসারণটি সঠিক হওয়ার গ্যারান্টিযুক্ত নয়, এমনকি উপস্থিত))
  • ইনপুট ফাইলগুলিতে কোনও আইডি 3 বা এপিইভি 2 মেটাডেটা উপস্থিত থাকবে না।
  • যে কোনও দুটি অনন্য এবং স্বতন্ত্র আউটপুট ব্যবহার করা যেতে পারে যেমন 0এবং এবং 1, lossyএবং lossless, fooএবং bar, ইত্যাদি may

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

এই চ্যালেঞ্জের পরীক্ষার ক্ষেত্রে এখানে অবস্থিত একটি জিপ ফাইল রয়েছে যা দুটি ডিরেক্টরি রয়েছে: lossyএবং lossless। প্রতিটি ডিরেক্টরিতে বিভিন্ন ফর্ম্যাটগুলিতে এনকোড থাকা সমস্ত 0.5-সেকেন্ড 440 হার্জ সাইন ওয়েভগুলির কয়েকটি অডিও ফাইল রয়েছে। সমস্ত অডিও ফাইলের উপরের ফর্ম্যাটগুলির সাথে মিলে এক্সটেনশন রয়েছে A440.m4a( ব্যতীত (এমপিইজি স্তর 4 ধারকটিতে যা এএসি অডিও))।


" এমপিইজি স্তর 4 ধারকটিতে থাকা এএসি অডিও " প্রশ্নটি উত্থাপন করে: উত্তরগুলির কী অন্যান্য কনটেইনারগুলি পরিচালনা করতে হবে?
পিটার টেলর

@ পিটারটেলর কেবল এএসি-কে বিশেষ উল্লেখ করা হয়েছিল কারণ আমি এফএফএমপিইগের মাধ্যমে এমপিইজি স্তর 4 ধারকটিতে এম্বেড না করে এএসি অডিও সরবরাহ করার কোনও উপায় খুঁজে পাই না। ভারবিস অডিও একটি ওগ কনটেইনারটিতে এম্বেড করা হয়েছে (যেমন ভারবিস অডিওর আদর্শ)। অন্য সমস্তগুলি স্বতন্ত্র ফর্ম্যাট।
মেগো

আপনি কি টিটিএ ফাইল সম্পর্কে নিশ্চিত? মতে বৈশিষ্ট , TTA ফাইল ম্যাজিক নম্বর TTA1 বা TTA2 সঙ্গে শুরু করা উচিত। FFM2 (আপনার ফাইলের যাদু নম্বর) এফএফএমপিগ স্ট্রিমের সাথে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে। লিনাক্স ফাইল টিটিএ 1 শিরোলেখকে স্বীকৃতি দেয় তবে এফএফএম 2 টি নয়।
ডেনিস

এছাড়াও, আমরা কি ধরে নিতে পারি যে এএসি সর্বদা একটি এমপিইজি স্তর 4 হেডারে থাকবে? তা না হলে আমরা কী ধরে নিতে পারি?
ডেনিস

আমরা কি ফাইলের সামগ্রীগুলি একটি ইনপুট হিসাবে নিতে পারি বা আমাদের কোডগুলি সেগুলি পুনরুদ্ধার করতে হবে?
শেগি

উত্তর:


18

জেলি , 7 5 বাইট

ƈƈeØA

লজি ফরম্যাটের আসতে 0 , অবচয়হীন ফরম্যাটের আসতে 1

এটি অনলাইন চেষ্টা করুন! (টুকরো টুকরো কথা বলা)

পটভূমি

আমাদের যে ফর্ম্যাটগুলি সমর্থন করতে হবে সেগুলির নিম্নলিখিত ম্যাজিক সংখ্যা রয়েছে, অর্থাত তারা এই বাইটগুলি দিয়ে শুরু করে।

Format    Header (text)       Header (hex)
-----------------------------------------------------------------------------------
AC3       .w                  0B 77
AMR       #!AMR               23 21 41 4D 52
AAC       ÿñP@..ü             FF F1 50 40 00 1F FC
  M4A     ... ftypM4A         00 00 00 20 66 74 79 70 4D 34 41 20
MP2       ÿû                  FF FB
MP3       ÿû                  FF FB
OGG       OggS                4F 67 67 53
WMA       0&²u.fÏ.¦Ù.ª.bÎl    30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C

AIFF      FORM????AIFF        46 4F 52 4D ?? ?? ?? ?? 41 49 46 46
FLAC      fLaC                66 4C 61 43
TTA       TTA1                54 54 41 31
  FFM2    FFM2                46 46 4D 32
WAV       RIFF????WAVE        52 49 46 46 ?? ?? ?? ?? 57 41 56 45

ইন্ডেন্টেড এন্ট্রিগুলি পূর্ববর্তী বিন্যাসের জন্য ধারক যা পরীক্ষার ক্ষেত্রে উপস্থিত হয়। ?একটি চলক বাইট বোঝায়। .একটি ছাপানো বাইট বোঝায়। অন্যান্য সমস্ত বাইটগুলি তাদের আইএসও 8859-1 অক্ষর হিসাবে প্রদর্শিত হয়।

কেবলমাত্র দ্বিতীয় বাইটটি দেখে আমরা সহজেই ফর্ম্যাটটি নির্ধারণ করতে পারি:

লসলেস ফর্ম্যাটগুলিতে তাদের দ্বিতীয় বাইট হিসাবে বড় হাতের অক্ষর থাকে, তবে ক্ষতিকারক ফর্ম্যাটগুলিতে থাকে না।

কিভাবে এটা কাজ করে

ƈƈeØA  Main link. No arguments.

ƈ      Read a char from STDIN and set the left argument to this character.
 ƈ     Read another char from STDIN and set the return value to this character.
   ØA  Yield the uppercase alphabet, i.e., "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
  e    Exists; return 1 if the return value (second char on STDIN) belongs to the
       uppercase alphabet, 0 if not.

2
এটি একটি খুব চালাক সমাধান।
মেগো

10

সি, 82 80 32 বাইট

@ ডেনিসের উত্তর দ্বারা অনুপ্রাণিত হয়ে এটিকে আরও অনেক কমানো যেতে পারে:

main(){return getchar()&200^64;}

স্টিডিনে ফাইলের ডেটা পাইপ করুন। ক্ষতিহীনদের জন্য 0, বা ক্ষতির জন্য ননজারো প্রদান করে।

অথবা মূল আর চেক করুন:

char v[5];main(){scanf("%4c",v);return*v&&strstr("fLaC FORM RIFF TTA1 FFM2",v);}

স্টিডিনে ফাইলের ডেটা পাইপ করুন। ক্ষতির জন্য ননজারো (1), বা ক্ষতির জন্য 0 প্রদান করে।

আমি যা বলতে পারি তা থেকে, আপনি তালিকাভুক্ত সমস্ত ফর্ম্যাটের আলাদা ম্যাজিক নম্বর রয়েছে (এআইএফএফ / ডাব্লুএইভি বাদে, তবে সেগুলি উভয়ই ক্ষয়ক্ষতিহীন), সুতরাং এটি কেবল পরিচিত লসলেস মানের জন্য সেই ম্যাজিক নম্বরটি পরীক্ষা করে। এটি কেবল *v&&মেলানো ফাইলগুলি থেকে রক্ষা করা যা নাল বাইট (এম 4 এ) দিয়ে শুরু হয়।

আমি সুনির্দিষ্ট শীটগুলিতে যে মানগুলি পেয়েছি সেগুলি অন্তর্ভুক্ত করেছি ( fLaC= FLAC, RIFF= WAV / AIFF, TTA1= টিটিএ), এবং FORM= এআইএফএফ এবং FFM2= টিটিএ প্রদত্ত নমুনা ফাইলগুলি (কেবলমাত্র এগুলি কেবল মোড়কের ফর্ম্যাট বা পরবর্তী সংস্করণগুলি অনুমান করতে পারি)।


বা একটি সংক্ষিপ্ত মনে হচ্ছে প্রতারণার বিকল্প:

বাশ + ফাইল, 61 বাইট

N="$(file "$1")";[[ $N = *": d"* || $N = *IF* || $N = *FL* ]]

ফাইলের নামটি আর্গুমেন্ট হিসাবে গ্রহণ করে। ক্ষতিহীনদের জন্য 0, বা ক্ষতির জন্য ননজারো প্রদান করে।

আপনি যা প্রত্যাশা করতেন ঠিক তেমন করে; fileফাইল টাইপ কী তা জিজ্ঞাসা করে , তারপরে জ্ঞাত নিদর্শনগুলির জন্য পরীক্ষা করে। টিটিএ ম্যাচগুলি : d( : data), এআইএফএফ / ডাব্লুএইভি ম্যাচ IFএবং এফএলএসি ম্যাচগুলি FL। ক্ষতিহীন ফলাফলগুলির মধ্যে কোনওটির সাথে কোনও মিলছে না এবং আমি পরীক্ষা করেছি যে ফাইলের নামগুলি সরানো থাকলে এটি এখনও কার্যকর হয়।


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

for f in "$@"; do
    echo "Checking $f:";
    ./identify2 "$f" && echo "shorter C says LOSSLESS" || echo "shorter C says LOSSY";
    ./identify < "$f" && echo "longer C says LOSSY" || echo "longer C says LOSSLESS";
    ./identify.sh "$f" && echo "file says LOSSLESS" || echo "file says LOSSY";
done;

# This can be invoked to test all files at once with:
./identify_all.sh */*

ফাইল এক্সটেনশানটি ভুল হলে আপনার বাশ সমাধানটিও কাজ করে? "ফর্ম্যাটটির জন্য এক্সটেনশনটি সঠিক হওয়ার গ্যারান্টিযুক্ত নয়", সুতরাং আপনার কোনও ফাইলকে একটি ভুল এক্সটেনশান দিতে সক্ষম হওয়া উচিত এবং এখনও এটি কার্যকর রয়েছে।
mbomb007

@ mbomb007 আমি সবেমাত্র মিশ্রিত এক্সটেনশনগুলির সাথে পরীক্ষা করেছি এবং এটি এখনও তাদের সূক্ষ্মরূপে সনাক্ত করে। আমি মনে করি fileযে কোনওভাবেই এক্সটেনশানগুলিতে বিশ্বাস করে না (অনেকগুলি ব্যবহারকারী জিনিস পিএনজি নামকরণ করে একটি জেপিগের রূপান্তরিত করার মতো!)
ডেভ

7

জিএস 2, 3 বাইট

◄5ì

লজি ফরম্যাটের আসতে 0 , অবচয়হীন ফরম্যাটের আসতে 1

এটি অনলাইন চেষ্টা করুন! (টুকরো টুকরো কথা বলা)

পটভূমি

আমাদের যে ফর্ম্যাটগুলি সমর্থন করতে হবে সেগুলির নিম্নলিখিত ম্যাজিক সংখ্যা রয়েছে, অর্থাত তারা এই বাইটগুলি দিয়ে শুরু করে।

Format    Header (text)       Header (hex)
-----------------------------------------------------------------------------------
AC3       .w                  0B 77
AMR       #!AMR               23 21 41 4D 52
AAC       ÿñP@..ü             FF F1 50 40 00 1F FC
  M4A     ... ftypM4A         00 00 00 20 66 74 79 70 4D 34 41 20
MP2       ÿû                  FF FB
MP3       ÿû                  FF FB
OGG       OggS                4F 67 67 53
WMA       0&²u.fÏ.¦Ù.ª.bÎl    30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C

AIFF      FORM????AIFF        46 4F 52 4D ?? ?? ?? ?? 41 49 46 46
FLAC      fLaC                66 4C 61 43
TTA       TTA1                54 54 41 31
  FFM2    FFM2                46 46 4D 32
WAV       RIFF????WAVE        52 49 46 46 ?? ?? ?? ?? 57 41 56 45

ইন্ডেন্টেড এন্ট্রিগুলি পূর্ববর্তী বিন্যাসের জন্য ধারক যা পরীক্ষার ক্ষেত্রে উপস্থিত হয়। ?একটি চলক বাইট বোঝায়। .একটি ছাপানো বাইট বোঝায়। অন্যান্য সমস্ত বাইটগুলি তাদের আইএসও 8859-1 অক্ষর হিসাবে প্রদর্শিত হয়।

কেবলমাত্র দ্বিতীয় বাইটটি দেখে আমরা সহজেই ফর্ম্যাটটি নির্ধারণ করতে পারি:

লসলেস ফর্ম্যাটগুলিতে তাদের দ্বিতীয় বাইট হিসাবে বড় হাতের অক্ষর থাকে, তবে ক্ষতিকারক ফর্ম্যাটগুলিতে থাকে না।

কিভাবে এটা কাজ করে

     (implcit) Push the entire input from STDIN as a string on the stack.
◄    Push 1.
 5   Get the strings character at index 1, i.e., its second character.
  ì  Test if the character is an uppercase letter.

2

জাভাস্ক্রিপ্ট (ES6), 20 বাইট

c=>/^[fFRT]/.test(c)

ব্যাখ্যা

একটি ইনপুট হিসাবে ফাইলের বিষয়বস্তু লাগে এবং আয় trueবা ফাইলটি অবচয়হীন হয় falseযদি এটা যে ইনপুট প্রথম অক্ষরটি পরীক্ষা যদি তা না হয় একটি দেখতে দ্বারা লজি হয় f, F, Rবা T


এটি চেষ্টা করুন

মধ্যে একটি ফাইলের বিষয়বস্তু আটকান textarea

f=
c=>/^[fFRT]/.test(c)
i.addEventListener("input",_=>console.log(f(i.value)))
<textarea id=i></textarea>


দ্বিতীয় প্রচেষ্টা, 81 63 বাইট

সরবরাহকৃত ইউআরএল থেকে কোনও ফাইলের বিষয়বস্তু নিয়ে আসে, যা ওভারকিল হিসাবে পরিণত হয়েছিল।

u=>fetch(u).then(r=>r.text()).then(t=>alert(/^[fFRT]/.test(t)))

প্রথম প্রচেষ্টা, 146 116 89 বাইট

মাইম প্রকার হিসাবে অবৈধ এক্সটেনশনের সাথে আবদ্ধ এবং স্পষ্টতই, প্রতিক্রিয়া শিরোনাম অতিরিক্ত ইনপুট হিসাবে যোগ্যতা অর্জন করে।

u=>fetch(u).then(r=>alert(/aiff|flac|tta|wave|wav$/.test(r.headers.get("Content-Type"))))

ওয়েব সার্ভারগুলি সাধারণত ফাইল এক্সটেনশনের ভিত্তিতে মাইম উত্পন্ন করে, যা এখানে বিধিগুলির বিপরীতে। আপনি কি পরীক্ষা করেছেন যে এটি কোনও এক্সটেনশন ছাড়াই পরিবেশন করা ফাইলগুলিতে কাজ করে? (যদি এটি হয় তবে আপনার সম্ভবত "ভাষা" অংশ হিসাবে আপনি যে সার্ভারটি ব্যবহার করছেন সেটি অন্তর্ভুক্ত করা উচিত)
ডেভ

1
@ ডেভ প্রিটি নিশ্চিত যে তারা তা করে না। MIME এবং এক্সটেনশন একে অপরের উপর নির্ভর করে না। আপনি যদি কোনও ফাইলের এক্সটেনশান পরিবর্তন করেন এবং এটি আপলোড করেন তবে মাইম টাইপটি ফাইলের আসল সামগ্রীর মাইমাইম হয়, এক্সটেনশন নয়। যদিও এটি হ'ল, ইউআরএল হিসাবে ইনপুট নেওয়ার অনুমতি সম্ভবত নেই। আমি নিশ্চিত নই.
mbomb007

@ mbomb007 আমি নিশ্চিত নই আপনি কেন এটি বলছেন; মাইম প্রকারগুলি একটি ইন্টারনেট জিনিস, কোনও ফাইল সিস্টেম / ফাইল জিনিস নয় এবং যে সার্ভারগুলি সম্পর্কে আমি সচেতন সেগুলি এটি কনফিগার করা লুকআপ ব্যবহার করে এক্সটেনশনের ভিত্তিতে নির্ধারণ করবে (শিরোনাম সরবরাহের গতির জন্য; তারা পরিবেশন করার আগে প্রতিটি ফাইল পরীক্ষা করতে চায় না) এটা)। উদাহরণস্বরূপ অ্যাপাচি AddType <mime> <extension>বা আইআইএস এর উদাহরণস্বরূপ নিন <MimeMap>। অবশ্যই একটি নির্দিষ্ট সেটআপ বা ফাইল হোস্টিংয়ের সরঞ্জাম একটি যথাযথ পরিদর্শন করতে পারে, এবং এটি সার্ভার পছন্দকে উত্তরের অংশ হিসাবে যোগ্যতা তৈরি করবে (যেহেতু এটি সার্ভার যা ফাইল টাইপ নির্ধারণ করে!)
ডেভ

1
আমি .NET দিয়ে ফাইল যাচাই করেছি এবং MIME টাইপটি আপলোডের আগে এক্সটেনশান পরিবর্তন করা হলেও সামগ্রীর সাথে মেলে।
mbomb007

@ mbomb007 তারপরে যে কোনও। নেট উপাদান আপনি ব্যবহার করেছেন অবশ্যই আপলোডকালে বা ফাইলগুলি পরিবেশন করার সময় ফাইল পরিদর্শন করতে হবে (পারফরম্যান্সের জন্য আমি আপলোড করার সময় অনুমান করছিলাম তবে আপনি কখনই জানেন না)। সুতরাং আমার মূল মন্তব্যে ফিরে যাওয়া, এই উত্তরটি "জাভাস্ক্রিপ্ট +। নেট সেভারলিবারিয়ানএক্সজেড" এর মতো করে তোলে। কোনও ইউআরএল থেকে ইনপুট নেওয়ার ক্ষেত্রে, আমি দেখতে পাচ্ছি আপনি কেন দ্বিধা বোধ করছেন তবে ব্যক্তিগতভাবে আমি যতক্ষণ না সার্ভারের পছন্দ উল্লেখ করা হয় ততক্ষণ পর্যন্ত আমি এটিকে বৈধ মনে করব। সম্ভবত এটিতে একটি বিদ্যমান মেটা রয়েছে, তবে শেষ পর্যন্ত অবশ্যই এটি মেগোর উপর নির্ভর করে।
ডেভ

1

চিপ , 11 বাইট

~Z~S
t'G~aF

লজ্জাজনকভাবে চিপে ডেনিসের জেলি উত্তরটি প্রতিলিপি করে।

ক্ষয়ক্ষতিহীন রিটার্ন 0x0, ক্ষয়ক্ষতি রিটার্ন 0x1

অনলাইনে চেষ্টা করে দেখুন , লিস্টগুলিতে লিঙ্কগুলি (এখানে টিআইও কৌশলটির জন্য ডেনিসকে ধন্যবাদ জানুন)

ব্যাখ্যা করা!

~Z~S
t'

এই অংশটি গৃহস্থালি Sরক্ষাকারীকরণ : এটি প্রথম বাইটকে ক্যাপ করে এবং tদ্বিতীয়টির পরে বের হয়।

G~aF

এটাই সিদ্ধান্তের মাংস। প্রতিটি ইনপুট বাইট বিট দ্বারা অ্যাক্সেস করা হয় HGFEDCBA। যদি Gসেট করা থাকে, এবং Fনা হয়, তার অর্থ বাইটটি সীমার মধ্যে 0x40থাকে 0x5f(যা মোটামুটি 'বড় হাতের' সমতুল্য এবং হাতের কার্যের পক্ষে যথেষ্ট ভাল)।

যাইহোক, বাইট সঞ্চয় জন্য, আমি এই সিদ্ধান্ত বিপরীতমুখী থেকে G and (not F)থেকে (not G) or F, যেহেতু বা এর চিপে অন্তর্নিহিত হতে পারে।

এই ফলস্বরূপ সত্য / মিথ্যা মানটি পরে স্থাপন করা হয় aযা আউটপুটটির সর্বনিম্ন বিট। (অন্যান্য সমস্ত বিট শূন্য হবে)। টিআইওতে, আমি হেক্সডাম্পের মাধ্যমে আউটপুটটি চালিত করি যাতে মানগুলি দৃশ্যমান হয়।

সমানভাবে, সি-ইশ-তে, কেউ এমন কিছু বলবে:

out_byte = !(in_byte & 0x40) && (in_byte & 0x20)

1

কিউবিক্স, 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

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