शून्य के साथ एक फ़ाइल पैड


12

आपका कार्य आज एक मौजूदा फ़ाइल लेना होगा और एक निश्चित आकार तक पहुंचने तक शून्य को उसमें जोड़ना होगा।

आपको एक प्रोग्राम या फ़ंक्शन लिखना होगा जो वर्तमान निर्देशिका में एक फ़ाइल का नाम लेता है fऔर कई बाइट्स b। की मूल सामग्री को बनाए रखते हुए f, आपको अंत तक शून्य (शून्य बाइट्स, एससीआई 0 एस) नहीं लिखना चाहिए ताकि इसका नया आकार bबाइट्स हो।

आप यह मान सकते हैं कि fइसके नाम में केवल अल्फ़ान्यूमेरिक एससीआई है, जिसे आपने इस पर पूर्ण अनुमति दी है, कि यह शुरू में इससे बड़ा नहीं है b, लेकिन जितना बड़ा हो सकता है b, और अनंत मुक्त डिस्क स्थान है।

आप यह नहीं मान सकते हैं कि fयह गैर-रिक्त है, या इसमें पहले से ही अशक्त बाइट्स नहीं हैं।

अन्य मौजूदा फ़ाइलों को संशोधित नहीं किया जाना चाहिए और निष्पादन समाप्त होने के बाद नई फाइलें मौजूद नहीं होनी चाहिए।

परीक्षण के मामलों

एफ की सामग्री | बी | परिणाम की सामग्री च
12345 | 10 | 1234500000
0 | 3 | 000
[खाली] | 2 | 00
[खाली] | 0 | [खाली]
123 | 3 | 123

@totallyhuman यह शुरू में लार्जेस्ट नहीं हैb
Adám

क्या हम फ़ाइल की सामग्री को इनपुट के रूप में ले सकते हैं और संशोधित सामग्री को आउटपुट कर सकते हैं?
झबरा

क्या हम पुस्तकालयों का उपयोग कर सकते हैं?
एडम

1
@Phoenix समस्या यह है कि डेनिस ने पुस्तकालय को दूर के फ़ोल्डर में रखा (मेरी पसंद का नहीं)। क्या मैं गिन सकता हूं जैसे कि यह खोज पथ में उपलब्ध था?
आदम

क्या हम मान सकते हैं कि फ़ाइल में पहले से ही अशक्त बाइट्स नहीं होंगे?
डोम हेस्टिंग्स

जवाबों:


20

बैश + कोरुटिल्स, 13

truncate -s$@

कमांड-लाइन से इनपुट - पहला पैरामीटर फ़ाइल का आकार है और दूसरा फ़ाइल नाम है।

से man truncate:

यदि कोई फ़ाइल छोटा है, तो इसे विस्तारित किया जाता है और विस्तारित भाग (छेद) शून्य बाइट्स के रूप में पढ़ता है।

इसे ऑनलाइन आज़माएं


1
क्या ट्रंकट का विस्तार भी हो सकता है?
एडम

11
एक आदमी जो वास्तव में एक मर्दाना आदमी में अपने आदमी को जानता है।
मैजिक ऑक्टोपस Urn

मुझे आश्चर्य है कि अगर यह एक FAT विभाजन पर काम करता है, जहां truncatesyscall विफल रहता है।
मैटियो इटालिया

1
उसी विचार का मेरा क्रियान्वयन होता dd bs=1 of=$1 seek=$2<&-(जो एक त्रुटि संदेश को अनदेखा करता है)। तुम्हारा बहुत छोटा है। अच्छा लगा।
hvd

@hvd हां मुझे लगा कि dd शायद ऐसा कर सकता है
Digital Trauma

4

ग्रूवी, 54 47 43 41 बाइट्स

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

-6 लूप को हटाने के मैनटवर्क के विचार के लिए धन्यवाद; यह मेरा मूल विचार था, पता नहीं क्यों मुझे लगा कि यह काम नहीं करेगा और एक पाश के लिए चुना गया ... यह निश्चित रूप से काम करता है, बस इसका परीक्षण किया।

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()))}
मैनटवर्क

@manatwork हाँ! और यह वास्तव में उससे भी बेहतर हो सकता है।
मैजिक ऑक्टोपस Urn

(c=new File(a))कोष्ठक आवश्यक होने के कारण @manatwork nevermind, समान बायटेकाउंट ।
मैजिक ऑक्टोपस Urn

1
कोई विचार नहीं है कि मैं पूरे मूल्य के आसपास कोष्ठक को जोड़ने के लिए क्यों डालता हूं। जरूरत नहीं।
मैनटवर्क जुआन

@manatwork ग्रूवी कोष्ठक के बारे में बहुत मनमौजी है, आपको दोष नहीं दे सकता है।
मैजिक ऑक्टोपस Urn


3

पायथन 2 , 59 57 54 बाइट्स

-5 बाइट्स चेपनर के लिए धन्यवाद

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

1
@totallyhuman \x00एक अशक्त बाइट है।
पावेल

1
@totallyhuman नहीं, यह एक झंडे वाली चीज़ की तरह है (बंद फाइलों के साथ इंटरकॉइनिनो को हटाने के लिए)
रॉड

1
@Rod मैं इंटरैक्टिनो प्यार करता हूँ! बेस्ट चाइल्ड-फ्रेंडली इंटरएक्टिव गेम कभी
caird coinheringaahing

के \0स्थान पर उपयोग कर सकते हैं \x00
चेपनर

आप एक और तीन बाइट्स को overextending द्वारा बचा सकते हैं, फिर ट्रंकटिंग def g(n,b):f=open(n,'a');f.write('\0'*b);f.truncate(b):।
चेपनर

3

PHP, 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

जावा (Oracle JRE), 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और 2AHK स्क्रिप्ट में पहले दो पैरामीटर हैं।
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 बाइट जोड़ना वास्तव में एक छोटा लूप होना चाहिए ? ठीक है, नहीं, क्योंकि >>केवल UCS2-LE मल्टीबाइट एन्कोडिंग का उत्पादन करता है, इसलिए इसके साथ एक फ़ाइल में एक भी बाइट जोड़ने का कोई तरीका नहीं है .. जब तक कि आप PSv5.1 का उपयोग नहीं कर रहे हैं और आप इसे बदल सकते हैं, लेकिन यह प्रतिस्पर्धी होने के लिए बहुत लंबा है। :

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

शायद एक .Net फ्रेमवर्क दृष्टिकोण है? वहाँ होना चाहिए, लेकिन मैं यह वास्तव में किसी भी बाइट, या त्रुटि लिखने के लिए नहीं कर सकता। लेकिन यह अब भी है:

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

1

गणितज्ञ 50 बाइट्स

आयात निर्यात

Export[#,Import[#,c="Byte"]~Join~Table[0,{#2}],c]&

प्रयोग

%["test1", 5]

1

क्यू, 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
PPCG के लिए वेलकम! यह एक कोड-गोल्फ चुनौती है, इसलिए आपका उद्देश्य आपके कार्यक्रम को यथासंभव छोटा बनाना है। आपको अनावश्यक व्हाट्सएप को हटाकर शुरू करना चाहिए।
पावेल

4
इसके अलावा, आपका प्रोग्राम यह मान लेता है कि इनपुट पहले से ही मानों में संग्रहीत हैं fऔर b, जिसकी अनुमति नहीं है। आपको अपने कार्यक्रम में i / o को शामिल करना चाहिए , जो ARGVकिसी फ़ंक्शन के कंसोल इनपुट, या तर्कों से हो सकता है ।
पावेल

धन्यवाद, मैंने सोचा कि चर पहले से ही निर्धारित किए गए थे। मेरी गलती।
गढ़ोगिन

1

सी #, 90 बाइट्स

using System.IO;s=>n=>File.AppendAllText(s,new string('\0',(int)new FileInfo(s).Length-n))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.