জিরো দিয়ে একটি ফাইল প্যাড করুন


12

আপনার কাজটি আজ একটি বিদ্যমান ফাইল নেওয়া এবং এটি নির্দিষ্ট আকারে না পৌঁছা পর্যন্ত এটিতে জিরো যুক্ত করা হবে।

আপনার অবশ্যই একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা বর্তমান ডিরেক্টরিতে একটি ফাইলের নাম fএবং কয়েকটি বাইট নিয়ে থাকে b। এর মূল বিষয়বস্তু বজায় রাখার সময় fআপনাকে অবশ্যই জিরো (নাল বাইটস, এসিআই 0 এস নয়) লিখতে হবে যাতে এর নতুন আকারটি bবাইট হয়।

আপনি ধরে নিতে পারেন যে fকেবলমাত্র নাম অনুসারে আলফানিউমেরিক আসকি রয়েছে, এটির উপরে আপনার সম্পূর্ণ অনুমতি রয়েছে, এটি প্রাথমিকভাবে এটির চেয়ে বড় নয় b, তবে এর চেয়ে বড় হতে পারে bএবং অসীম ফ্রি ডিস্কের স্থান রয়েছে is

আপনি ধরে fনিবেন না যে এটি অযৌক্তিক, বা এটিতে ইতিমধ্যে নাল বাইট নেই।

অন্যান্য বিদ্যমান ফাইলগুলিকে সংশোধন করা উচিত নয় এবং এক্সিকিউশন শেষ হওয়ার পরে নতুন ফাইলের অস্তিত্ব থাকা উচিত নয়।

পরীক্ষার কেস

চ এর উপাদানসমূহ | খ | চ এর ফলাফল সামগ্রী
12345 | 10 | 1234500000
0 | 3 | 000
[খালি] | 2 | 00
[খালি] | 0 | [খালি]
123 | 3 | 123

@ টোটালিহুমান এটি প্রাথমিকভাবে লার্জ নয়b
অ্যাডাম

আমরা কি ইনপুট হিসাবে ফাইলের বিষয়বস্তু নিতে পারি এবং পরিবর্তিত সামগ্রীগুলি আউটপুট পেতে পারি?
শেগি

আমরা কি গ্রন্থাগার ব্যবহার করতে পারি?
অ্যাডম

1
@ ফিনিক্স সমস্যাটি হ'ল ডেনিস লাইব্রেরিটি অনেক দূরের ফোল্ডারে রেখেছিলেন (আমার পছন্দ নয়)। আমি কি এটি গণনা করতে পারি যে এটি অনুসন্ধানের পথে পাওয়া যায়?
অ্যাডম

আমরা কি ধরে নিতে পারি যে ফাইলটিতে ইতিমধ্যে নাল বাইট থাকবে না?
ডম হেস্টিংস

উত্তর:


20

বাশ + কোর্টিলস, 13

truncate -s$@

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

থেকে man truncate:

যদি কোনও ফাইল সংক্ষিপ্ত হয় তবে এটি প্রসারিত হয় এবং বর্ধিত অংশ (গর্ত) শূন্য বাইট হিসাবে পড়ে।

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


1
খুব বাড়াতে পারেন?
অ্যাডম

11
একজন মানুষ যিনি তার ম্যানসকে সত্যই একজন পুরুষে জানেন।
ম্যাজিক অক্টোপাস উরন

আমি অবাক হই যদি এটি কোনও FAT বিভাজনে কাজ করে, যেখানে truncateসিস্কেল ব্যর্থ হয়।
মাত্তেও ইটালিয়া

1
আমার একই ধারণার বাস্তবায়ন dd bs=1 of=$1 seek=$2<&-হ'ল (যা ত্রুটি বার্তা প্রিন্ট করে যা উপেক্ষা করা যায়)। আপনার বয়স অনেক কম। খুশী হলাম।
এইচডিভি

@hvd হ্যাঁ আমি অনুভব করেছি যে ডিডি সম্ভবত এটি করতে পারে
ডিজিটাল ট্রমা

4

গ্রোভী, 54 47 43 41 বাইট

{a,b->(c=new File(a))<<'\0'*(b-c.size())}

-6 লুপ অপসারণ সম্পর্কে manatwork এর ধারণা ধন্যবাদ; এটি আমার আসল ধারণা ছিল, কেন আমি ভেবেছিলাম কেন এটি কাজ করবে না এবং লুপের জন্য বেছে নিল ... এটি অবশ্যই কাজ করে, কেবল এটি পরীক্ষা করে।

Ungolfed:

{
    a,b->                    // Two inputs: a is the File name, b is the desired size.
    File c = new File(a)     // Make and store the file.
    c << '\0'*(b-c.size())   // Append the difference between b and c.size() in nullbytes.
}
                             // Usually a close would be required, but, in Groovy,
                             // because private data isn't so protected, if a File
                             // Object goes out of scope, the attached Stream is 
                             // automatically flushed to disk.

1
খাটো লম্বা হবে না? {a,b->c=new File(a);c<<('\0'*(b-c.size()))}
18-18 এ

@ মান্যাটওয়ার্ক হ্যাঁ! এবং এটি আসলে এর চেয়ে আরও ভাল হতে পারে।
ম্যাজিক অক্টোপাস উরন

@ মানাটওয়ার্ক কিছুই নয়, (c=new File(a))প্রয়োজনীয় প্রথম বন্ধনের কারণে একই বাইকাউন্ট ।
ম্যাজিক অক্টোপাস উরন

1
কেন আমি যুক্ত করতে পুরো মানটির চারপাশে প্রথম বন্ধনী রেখেছি তা ধারণা নেই। কোন দরকার নেই.
manatwork

@ মানাটওয়ার্ক গ্রোভী প্রথম বন্ধনী সম্পর্কে খুব স্বভাবসুলভ, আপনাকে দোষ দিতে পারে না হাহাহা।
ম্যাজিক অক্টোপাস উরন

3

কি ∇Extend?
পাভেল

@ ফিনিক্স ঠিক এই প্রোগ্রামটির নাম যাতে এটি বলা যেতে পারে। প্রোগ্রামটির নামকরণ না করে একটি সংস্করণ এখানে।
অ্যাডম

3

পাইথন 2 , 59 57 54 বাইট

-5 বাইট চেইনারকে ধন্যবাদ

def g(n,b):f=open(n,'a');f.write('\0'*b);f.truncate(b)

1
@ টোটালিহুমান \x00একটি নাল বাইট।
পাভেল

1
@ টোটালিহুমান না, এটি আরও বেশি পতাকাের মতো (বন্ধ ফাইলগুলির সাথে ইন্টারেক্টিনো নিষিদ্ধ করার জন্য)
রড

1
@ রড আমি ইন্টারেক্টিনো পছন্দ করি! সর্বকালের সেরা শিশু-বান্ধব ইন্টারেক্টিভ গেম
কায়ারড কোইনরিঙ্গিংহ

আপনি \0জায়গায় ব্যবহার করতে পারেন \x00
চিপনার

আপনি overextending, তারপর ছিন্ন দ্বারা অন্য তিন বাইট সংরক্ষণ করতে পারেন: def g(n,b):f=open(n,'a');f.write('\0'*b);f.truncate(b)
চিপনার

3

পিএইচপি, 66 বাইট

for($p=fopen($f=$argv[1],a);filesize($f)<$argv[2];)fputs($p,"\0");

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; সাথে চালানো -nr


এই 55 বাইট হতে পারে, তবে সম্ভবত কাজ করবে না:

fseek($p=fopen($argv[1],"w+"),$argv[2]);fputs($p,"\0");

2

জাভা (ওরাকল জেআরই), 55 বাইট

f->b->new java.io.RandomAccessFile(f,"rw").setLength(b)

এর অনুমান অনুসারে setLength(int)যুক্ত করা বাইটগুলি অপরিজ্ঞাত, তবে কার্যত ওরাকল জেআরই কেবলমাত্র বাইটকে সংযোজন করে 0তোলে (এজন্যই আমি এটি নির্দিষ্ট করেছি)।

JVM দ্বারা রিসোর্সটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে গেছে সুতরাং আমাদের এটি করার দরকার নেই।

পরীক্ষা

public class Pcg125661 {
  interface F {
    B f(String f);
  }
  interface B {
    void b(int b) throws java.io.IOException;
  }
  public static void main(String[] args) throws java.io.IOException {
    F a = f->b->new java.io.RandomAccessFile(f,"rw").setLength(b);
    a.f("a").b(100);
  }
}

1

এএইচকে, 48 বাইট

FileGetSize,s,%1%
2-=s
Loop,%2%
FileAppend,0,%1%

1এবং 2এটিএইচকে স্ক্রিপ্টের প্রথম দুটি পরামিতি।
FileGetSizeডিফল্টরূপে বাইটে কাজ করে।
এটি আকর্ষণীয় নয়, তবে এটি সহজ: আকারটি পান, পছন্দসই আকার থেকে বিয়োগ করুন এবং আরও অনেক শূন্য যোগ করুন।


1

পার্ল 6 , 40 বাইট

{$_=$^a.IO;.open(:a).put("\0"x($^b-.s))}

$^aএবং $^bফাংশনটির পরামিতি - যথাক্রমে ফাইলের নাম এবং দৈর্ঘ্য।


1

পাইথন 2 , 68 বাইট

def g(f,b):
 with open(f,'r+')as c:c.write('\x00'*(b-len(c.read())))

এটি অনলাইন চেষ্টা করুন! (ফাইলের বিষয়বস্তু প্রিন্ট করার সময়, কোডটি দৃশ্যমানতার জন্য নਾਲ বাইটগুলি ASCII 0 এর সাথে প্রতিস্থাপন করে))


1
আমি মনে করি এটি ASCII শূন্যগুলি লিখেছে এবং নাল বাইটগুলি নয়
পাভেল

আহ ... শূন্য শব্দটি বিভ্রান্তিমূলক ছিল ...
সম্পূর্ণরূপে

ভাল, এটি চ্যালেঞ্জ নিজেই বড় অক্ষরে বলে না।
পাভেল

আপনি কি স্ট্রিংতে আক্ষরিক \ x00 ব্যবহার করতে পারেন (একটি পালানোর অনুক্রম নয়)?
ক্যালকুলেটরফলাইন

2
আপনি আক্ষরিক নাল বাইট ব্যবহার করতে পারবেন না, তবে \0এটি আরও খাটো।
xnor

1

পাওয়ারশেল, 69 বাইট

param($f,$s)@(gc $f -en by)+,[byte]0*($s-(gi $f).length)|sc $f -en by
#     ^ filename
#        ^desired size
#                 ^ get content as byte stream
#           ^force it to an array even if there's 0 or 1 byte
#                          ^append a byte array of nulls..
#                                       ^..desired size - file size
#                            write to file with -encoding byte ^

$fফাইলের $sজন্য, গন্তব্যের আকারের জন্য, .ps1 হিসাবে সংরক্ষণ করুন এবং রান করুন

.\Add-NullBytesToFile.ps1 .\test.txt 10

এটি একটি শেল, সুতরাং >>আউটপুট পুনঃনির্দেশ এবং সংযোজন সহ 1 বাইট যুক্ত করে একটি খুব ছোট লুপ থাকা উচিত ? ঠিক আছে, না, কারণ >>কেবল ইউসিএস 2-এলই মাল্টিবাইট এনকোডিং আউটপুট করে তাই এটির সাথে কোনও ফাইলে একটি বাইট যুক্ত করার কোনও উপায় নেই .. যদি না আপনি PSv5.1 ব্যবহার করেন এবং আপনি এটি পরিবর্তন করতে পারেন তবে এটি প্রতিযোগিতামূলক হতে খুব দীর্ঘ করে তোলে :

$PSDefaultParameterValues['Out-File:Encoding']='utf8';while((gi $f).length-lt$c){[byte]0>>$f}

সম্ভবত একটি নেট ফ্রেমওয়ার্ক অ্যাপ্রোচ আছে? সেখানে থাকা উচিত, তবে আমি এটি আসলে কোনও বাইট, বা ত্রুটি লিখতে পারি না। তবে এটি আর দীর্ঘায়িত:

param($f,$s)[io.file]::WriteAllBytes($f,[byte[]](,0)*($c-(gi $f).length), $True)


1

q, 29 বাইট

ফাংশন যা :/foo/bar.bazপূর্ণসংখ্যা হিসাবে ফর্ম্যাট এবং দৈর্ঘ্যে ফাইলের নাম নেয় ।

{hopen[x](0|y-hcount x)#0x00}

উদাহরণ:

{hopen[x](0|y-hcount x)#0x00}[`:test.txt;100]

1

সি, 56 বাইট

fseek(f,0,2);int i;for(;ftell(f)<b;)putc(0,f);fclose(f);

প্রোগ্রামটি ফাইলটির আকার এবং কতগুলি বাইট সংযোজন করতে পারে তা সন্ধান করে। ফাইলটি fs - bশেষে অতিরিক্ত বাইট যুক্ত করে।


1
ওয়েলকমকে পিপিসি! এটি একটি কোড-গল্ফ চ্যালেঞ্জ, সুতরাং আপনার উদ্দেশ্য আপনার প্রোগ্রামটিকে যতটা সম্ভব ছোট করা। আপনার অপ্রয়োজনীয় সাদা স্থান সরিয়ে শুরু করা উচিত।
পাভেল

4
তদতিরিক্ত, আপনার প্রোগ্রামটি ধরেই নিয়েছে যে ইনপুটগুলি ইতিমধ্যে মানগুলিতে সঞ্চিত আছে fএবং bযা অনুমোদিত নয়। আপনাকে অবশ্যই আপনার প্রোগ্রামে আই / ও অন্তর্ভুক্ত করতে হবে, যা ARGVকোনও ফাংশনে কনসোল ইনপুট, বা তর্ক হতে পারে।
পাভেল

ধন্যবাদ, আমি ভেবেছিলাম যে ভেরিয়েবলগুলি ইতিমধ্যে সেট হয়ে গেছে বলে ধরে নেওয়া হয়েছিল। আমার খারাপ।
গড়গগিন

1

সি #, 90 বাইট

using System.IO;s=>n=>File.AppendAllText(s,new string('\0',(int)new FileInfo(s).Length-n))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.