একটি ফাইল চেক করাতে কেবল নাল বাইট থাকে


12

আপনার লক্ষ্যটি এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কোনও ফাইলের পাথকে উপস্থাপন করে একটি স্ট্রিং ইনপুট হিসাবে গ্রহণ করে এবং যদি সেই ফাইলটি খালি না থাকে এবং কোনও নাল-বাইট না থাকে - তবে, সমস্ত বিট 0 - - এবং অন্যথায় একটি মিথ্যা মান।

আমি বুঝতে পারি এটি একটি খুব সাধারণ সমস্যা এবং আমি অনুমান করি যে আমি কিছু হ্যাক করতে পারি তবে আমার সন্দেহ হয় এটি করার কিছুটা সংক্ষিপ্ত এবং মার্জিত উপায় থাকতে হবে এবং এটি আমাকে এটিকে চ্যালেঞ্জ থেকে বেরিয়ে আসার ধারণা দিয়েছে।

এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড। (আমার নিজের পছন্দটি দ্রুততম সমাধানে যাবে, তবে এটি বাস্তবায়ন নির্ভরতা ...)

সম্পর্কিত প্রশ্ন : জিরো সহ একটি ফাইল প্যাড করুন

অনুপ্রেরণা : আপনার আগ্রহের ক্ষেত্রে সমস্যাটি কোথা থেকে এসেছে তা কেবল এটিই বলা যায়। আপনার এটি পড়ার দরকার নেই।

"ডিডি" বা অন্যান্য উপায়ে অনুলিপি করা সিডি এবং ডিভিডিগুলির আইএসও চিত্রগুলি প্রায়শই নাল বাইটযুক্ত অকেজো ব্লকগুলির ক্রম দিয়ে শেষ হয়। এই ব্লকগুলি অপসারণের স্ট্যান্ডার্ড কৌশলগুলি জ্ঞাত এবং সাধারণ ( /unix/74827/ দেখুন ) তবে তারা মাঝেমধ্যে নাল কার্যকর তথ্য মুছে ফেলতে পারে কারণ মাঝারিটি তার নিজের আকার সম্পর্কে মিথ্যা বলতে পারে। সুতরাং আমি যাচাই করতে চাই যে সরানো ব্লকগুলিতে কেবল নাল বাইট রয়েছে। আইএসও-চিত্রগুলির একটি সাধারণ সংস্করণ সংজ্ঞায়নের জন্য এই ব্লকগুলি সরিয়ে ফেলা গুরুত্বপূর্ণ।

উত্তর:


5

পাইথ, 6 5 বাইট

!sCM'

এটি অনলাইন চেষ্টা করুন!

এসটিডিএন থেকে একটি ফাইলের নাম নেয়, ফাইলটি খোলে এবং পড়েন, এটিকে int(পাইথন ভাবেন ord) sumএর তালিকায় রূপান্তর করুন ( 0যদি ফাইলটি সমস্ত নাল বাইট থাকে তবে ফিরিয়ে দেবে ), এবং notফলাফলটি মুদ্রণ করে।


আরে,

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

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

যদি আমরা সব ভুল বুঝে ভাবেন আপনি করেছি এবং আপনি হয় একটি সাধারণ সমাধান খুঁজছেন, এখানে পাইথন 3 একটি সমাধান আছে:

def main(string):
    with open(string) as file:
        return not any(map(ord,file.read()))

1
এটি কেবলমাত্র কালো পিক্সেল (জিরো) সমন্বিত গ্রেস্কেল চিত্রের সাথে কাজ করবে না, কারণ এটি কতটা শক্তিশালী '
ব্যবহারকারী 202729

এছাড়াও: কমান্ড-লাইন আর্গুমেন্ট ব্যবহার করে ওপিকে ফাইলের নাম ইনপুট হিসাবে নেওয়া এবং স্থিতি কোড হিসাবে ফিরে আসা দরকার।
ব্যবহারকারী 202729

2

জিএনইউ সেড -zn , 5 বাইট

ইনপুট ফাইলটি কমান্ড-লাইন প্যারামিটার হিসাবে সেটে দেওয়া হয়। স্ট্যান্ডার্ড শেল রিটার্ন কোড হিসাবে আউটপুট - যেমন 0 সত্য, 1 মিথ্যা।

/./q1

সাধারণত sedনিউলাইন-সীমাবদ্ধ ইনপুট রেকর্ডগুলিতে (একে "" লাইন ") কাজ করে। -zএটিকে নূন-সীমাবদ্ধ ইনপুট রেকর্ডে পরিবর্তন করে। যদি কোনও ইনপুট রেকর্ডগুলি রেজেসের সাথে মেলে ., তবে qপ্রস্থান কোড 1 সহ uit করুন।

এটি অনলাইন চেষ্টা করুন!


2

ডস, 37 বাইট


100:BE 80 00 MOV SI, 0080
103:AD       LODSW ;get command-line length
104:98       CBW ;only a byte
105:93       XCHG BX,AX
106:88 40 FF MOV [BX+SI-01], AL ;zero end of name
109:B4 3D    MOV AH, 3D
10B:89 F2    MOV DX, SI
10D:CD 21    INT 21 ;open file
10F:93       XCHG BX, AX ;handle into BX
110:AF       SCASW ;DI=0
111:B4 3F    MOV AH, 3F
113:B1 01    MOV CH, 01
115:CD 21    INT 21 ;read 1 byte
117:91       XCHG CX, AX
118:E3 06    JCXZ 0120 ;quit on EOF
11A:97       XCHG DI, AX ;set true for later
11B:38 2C    CMP [SI], CH
11D:74 F2    JZ 0111 ;loop while zero
11F:4F       DEC DI ;set false
120:97       XCHG DI, AX
121:B4 4C    MOV AH, 4C ;return
123:CD 21    INT 21

এটি কমান্ড-লাইনে নামক ফাইলটি খোলায়, শূন্য থাকলে 0 প্রদান করে বা শূন্যহীন রয়েছে, অন্যথায় 1 প্রদান করে।


1

সংযুক্তি , 24 বাইট

Zero@Max&0@Ords@FileRead

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

এটি 4 টি ফাংশনগুলির একটি রচনা যা একের পর এক সম্পাদিত হয়:

  • FileRead - ইনপুট হিসাবে একটি ফাইলের নাম নেয়, সেই ফাইলের বিষয়বস্তু ফেরত দেয়
  • Ords - একটি তালিকার প্রতিটি অক্ষরের ASCII কোড পয়েন্ট প্রদান করে
  • Max&0- এই সমতূল্য যাও, যুক্তি জন্য x, Max[x, 0]; এটি পরিবর্তে সমস্ত এন্ট্রি সর্বাধিক গণনা করে xএবং 0( 0খালি তালিকার জন্য ফলন )
  • Zero - এটি একটি প্রাকটিক যা এই সংখ্যাটি আসলে 0 হয় কিনা তা যাচাই করে এবং সেই বুলিয়ান দেয়।

ওপির সম্পূর্ণ প্রোগ্রাম প্রয়োজন, কমান্ড লাইন থেকে কল করা, আর্গুমেন্ট ব্যবহার করে ফাইলের নাম ইনপুট হিসাবে নেওয়া এবং স্থিতি কোড হিসাবে ফিরে আসা। ( @_@)
ব্যবহারকারী 202729

এটি কি খালি ফাইলের জন্য একটি মিথ্যা ইতিবাচক দেয় না?
নেজেনিসিস

1
@ এনজেনিসিসটি মূল সমস্যাটি নিম্নরূপ বলেছিল: "এর অর্থ খালি ফাইলটি ঠিক আছে বলে মনে করা হয়" - পুনর্বিবেচনার ইতিহাসটি পরীক্ষা করে দেখুন, মনে হয় কোনও নির্দিষ্ট ব্যবহারকারী প্রশ্নটির বাইরে সেই বিন্দুটি সম্পাদনা করেছেন।
কনর ও'ব্রায়েন

1

সি (32 বিট প্ল্যাটফর্ম), 65 বাইট

main(x,v)int*v;{for(v=fopen(v[1],"r");!(x=fgetc(v)););return++x;}

পয়েন্টার আকার মাপসই সব একই, যা প্রায় সর্বদা সত্য। 0সাফল্যে একটি প্রস্থান কোড নিয়ে আসে (ফাইলে কেবল NULঅক্ষর রয়েছে ), অন্য কোনও মান value

কমান্ড লাইন যুক্তি যদি পঠনযোগ্য ফাইলের পথ না হয় তবে আচরণটি অপরিজ্ঞাত।


আমার মনে হয় আপনার লেখার দরকার আছে int**v? আমি এমন একটি সংকলক খুঁজে পাই না যেখানে এটি না করে সেগফল্ট হয় না। এছাড়াও, আপনি ইচ্ছাকৃতভাবে ত্রুটিযুক্ত করে কিছুটা সঞ্চয় করতে পারেন , তবে আমি জানি না এটি সর্বোত্তম পন্থা কিনা।
FryAmTheEggman

তাই না? আমি জিগিসিটিটি মিংডব্লিউ 32 এ চেষ্টা করেছি, নির্দ্বিধায় কাজ করি। আমার সম্ভবত বাধা যুক্ত করা উচিত sizeof(void*) == sizeof(int)(বা আরও সাধারণভাবে "32-বিট প্ল্যাটফর্ম") তারপরে ... amd64প্ল্যাটফর্মে, এর সাথে সংকলন করার চেষ্টা করুন -m32;)
ফেলিক্স প্যালম্যান

@ ফ্রাইআমএইজিগম্যান টিআইওতেও কাজ করে যখন 32 বিট কোড ( -m32) সংকলন করা হয় : অনলাইনে চেষ্টা করে দেখুন!
ফেলিক্স পেলমেন

আহ, অবশ্যই নিস কাজ, তাহলে! দম্পতি বাইটগুলি সংরক্ষণ করতে আমার পরামর্শটি নির্দ্বিধায় মনে করুন :)
FryAmTheEggman

0

বাশ + জিএনইউ ইউটিলিটিস, 26 বাইট

od -An $1|grep -qv [^0\ *]

ইনপুট ফাইলের নাম কমান্ড-লাইন প্যারামিটার হিসাবে দেওয়া হয়। স্ট্যান্ডার্ড শেল রিটার্ন কোড হিসাবে আউটপুট - যেমন 0 সত্য, 1 মিথ্যা।

এটি অনলাইন চেষ্টা করুন!


0

ওল্ফ্রাম ভাষা (ম্যাথমেটিকা) , 30 বাইট

BinaryReadList@#~MatchQ~{0..}&

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

                             & (* Function which returns whether *)
BinaryReadList                 (* the list of bytes *)
              @                (* of *)
               #               (* the input *)
                ~MatchQ~       (* matches *)
                        {0..}  (* a list of a one or more zeros *)

বিকল্প সমাধান, 22 বাইট

যদি খালি ফাইলগুলি পাস করার কথা হয়, তবে এটি এখানে সংক্ষিপ্ত করা যেতে পারে:

Tr@BinaryReadList@#<1&

এটি অনলাইন চেষ্টা করুন!


0

জাভা, 149 বাইট

boolean b(String f)throws Exception{java.io.InputStream s=new java.io.FileInputStream(f);int i=Math.abs(s.read());while(i==0)i+=s.read();return i<0;}

0

পার্ল 5, 20 বাইট

$\=0;exit<>=~/^\0+$/

কমান্ড লাইন আরগগুলিতে একটি ফাইলের নাম নেয় এবং প্রোগ্রামটির প্রস্থান কোডে প্রতিক্রিয়া প্রদান করে


0

পাইথন 3, 59 বাইট

f=lambda s:any(open(s,'rb').read())+not len(open(s).read())

সাফল্যের জন্য 0 প্রদান করে (সমস্ত বাইট শূন্য)।

ব্যর্থতার জন্য 1 প্রদান করে (কমপক্ষে একটি ননজারো বাইট বা শূন্য দৈর্ঘ্যের ফাইল)।


ফাইলটি খালি থাকলে আপনাকে অবশ্যই ব্যর্থতা ফিরে আসতে হবে।
অ্যাডম

0

এপিএল (ডায়ালগ ইউনিকোড) , 14 বাইট

পুরো প্রোগ্রাম। স্টিডিন থেকে ফাইলের নামের জন্য অনুরোধ জানানো হয়।

0=⌈/11 ¯1MAP

এটি অনলাইন চেষ্টা করুন!

 ফাইল নাম জন্য প্রম্পট

11 ¯1⎕MAP একটি ফাইল প্যাক বিট অ্যারে মানচিত্র

⌈/ সর্বাধিক (হ্রাস); সবচেয়ে ছোট ভাসা খালি থাকলে অন্যথায় 0 বা 1

0= শূন্য কি এর সমান?


0

হাস্কেল, 49 বাইট

import Data.ByteString
f=(all(<1)<$>).getContents

স্পষ্টতই যদি আমদানিটি অন্তর্ভুক্ত না করা হয় তবে তা 26 বাইট।


আমি অনুমান আপনি বোঝানো readFileপরিবর্তে getContets। আমি মনে করি আপনি ফাইলটি একটি সাধারণ স্ট্রিং হিসাবে পড়তে পারেন, এর সাথে তুলনা করুন =='\0'(বা আরও ভাল <'\1') এবং এর থেকে মুক্তি পেতে পারেন import। আপনি একটি বেনামী ফাংশন ব্যবহার করতে পারেন হিসাবে, আপনি ড্রপ করতে পারেন f x=এবং pointfree যান: (all(<'\1')<$>).readFile
নিমি

যদি এটি বাইনারি ফাইল হয় তবে আপনি ব্যবহার করতে পারবেন না readFile, যা কোনও অবৈধ ইউনিকোড সিকোয়েন্সের মুখোমুখি হওয়ার পরে একটি ব্যতিক্রম ছুঁড়ে ফেলবে। পয়েন্টফ্রি সম্পর্কে ভাল পয়েন্ট।
ইজাক ওয়েইস

0

জাভাস্ক্রিপ্ট (ES8), 52 বাইট

যুক্তি হিসাবে একটি url নেয় এবং এমন প্রতিশ্রুতি দেয় যা trueফাইলটি খালি না থাকলে এবং কোনও নাল বাইট না থাকলে সমাধান করে।

async p=>!/\0|^$/.test(await(await fetch(p)).text())

0

Zsh , 35 বাইট

! for c (${(s::)"$(<$1)"})((i|=#c))

এটি অনলাইন চেষ্টা করুন! প্রস্থান কোড মাধ্যমে আউটপুট।

পড়ুন, অক্ষরগুলিতে বিভক্ত করুন এবং বিটওয়াইস-বা প্রতিটি কোডপয়েন্ট একসাথে করুন।

যদি ফাইলটি খালি থাকে তবে লুপটির বডিটি কখনও চালিত হয় না এবং লুপটি সত্যতায় ফিরে আসে। যদি সত্যবাদী-মিথ্যা মানগুলি অদলবদল করা যায় তবে !2-বাইট সংরক্ষণের জন্য নেতৃস্থানীয় সরানো যেতে পারে।

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