एकाधिकार संपीड़न


17

एक खिलाड़ी की बारी की शुरुआत में एकाधिकार के खेल की वर्तमान स्थिति का प्रतिनिधित्व करने वाले एक स्ट्रिंग को देखते हुए , सभी आवश्यक डेटा को छोटे से छोटे आउटपुट में संपीड़ित करें। उत्तर आउटपुट आकार और स्रोत आकार द्वारा आंका जाएगा ।

नोट: कई क्षेत्रीय विविधताएं हैं, लेकिन संपत्ति के नाम आदि के लिए इस पोस्ट में सभी संदर्भ इस बोर्ड पर आधारित हैं


इनपुट:

इनपुट एक ;अलग स्ट्रिंग के रूप में दिया जाएगा । इस स्ट्रिंग को प्रोग्राम के लिए दिया जाता है जो भी आपकी चुनी हुई भाषा में प्रथागत है, चाहे वह स्टड, तर्क हो, आदि।

इस तरह दिखने वाला बिना इनपुट वाला इनपुट:

numPlayers                     (1 to 8)
whose turn                     (0 to numPlayers-1)
for each player:
    bankrupt?                  (true/false)
    money                      (0 to 2^16-1)
    get-out-of-jail-free cards (0 to 2)
    position                   (0 to 39) 
    jail turns                 (-1 to 2)
for 28 properties:
    owner                      (-1 to numPlayers-1)
    mortgaged?                 (true/false)
    improvement level          (0 to 5)
for 16 chance cards in deck:
    card index                 (-1 to 15)
for 16 community chest cards in deck:
    card index                 (-1 to 15)

एक उदाहरण स्वरूपित इनपुट यह है:

3;1;false;1546;0;14;-1;false;7692;1;10;1;true;1;false;1;1;false;0;0;true;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;

बिट द्वारा बिट:

3;1;

3 खिलाड़ी हैं, और यह खिलाड़ी 1 की बारी है (शून्य-अनुक्रमित, इसलिए दूसरा खिलाड़ी)

खिलाड़ियों

false;1546;0;14;-1;
false;7692;1;10;1;
true;

पहला खिलाड़ी:

  • दिवालिया नहीं है
  • हाथ पर $ 1546 नकद है
  • ० जेल-आउट-ऑफ़-जेल-फ्री कार्ड्स का मालिक है
  • 14 पर है (वर्जीनिया Ave)
  • जेल में नहीं है

दूसरे खिलाड़ी है जेल में, और एक बारी के लिए किया गया है। मुझे यकीन है कि नहीं कर रहा हूँ क्यों , क्योंकि वह एक GOoJF कार्ड है, लेकिन वह भी नहीं है।

तीसरा खिलाड़ी दिवालिया है, और अधिक जानकारी न तो आवश्यक है और न ही दी गई है।

गुण

1;false;1;
1;false;0;
0;true;0;
-1;false;0;
-1;false;0;
-1;false;0;
...

गुण मंडल के चारों ओर सूचीबद्ध हैं, भूमध्यसागरीय से शुरू होकर बोर्डवॉक पर समाप्त होते हैं। जिन संपत्तियों का स्वामित्व नहीं किया जा सकता है उन्हें इस सूची में शामिल नहीं किया गया है, इसलिए कुल 28 होंगे। सुधार स्तर का 0अर्थ है अकल्पित। स्तर 1एक घर है, 5एक होटल के लिए स्तर तक । एक -1मालिक साधन के लिए यह किसी भी खिलाड़ी के स्वामित्व में नहीं है।

मानक नियमों के अनुसार, एक संपत्ति है कि गिरवी है चाहिए स्वामित्व और नहीं करना चाहिए सुधार किया जा। एक संपत्ति है कि सुधार करना होगा स्वामित्व और नहीं होना चाहिए गिरवी जा।

इसके अलावा, एक संपत्ति में सुधार के लिए, एक खिलाड़ी को पूरे रंग ब्लॉक का मालिक होना चाहिए । इस खेल के उद्देश्यों के लिए, हमें परवाह नहीं है कि क्या गुणों में "समान रूप से" सुधार किया जा रहा है।

ध्यान दें कि ये स्थिति ऊपर दिए गए खिलाड़ी के पदों के समान नहीं हैं । उदाहरण के लिए, 5पोजीशन पर एक खिलाड़ी रीडिंग रेलरोड पर होगा, जो सूची में तीसरी संपत्ति है (चूंकि गो, कम्युनिटी चेस्ट और इनकम टैक्स का स्वामित्व नहीं हो सकता है)। खिलाड़ी की स्थिति 0(गो) दक्षिणावर्त 39(बोर्डवॉक) से चलती है ।

पत्ते

0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;
3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;

संभावना और सामुदायिक चेस्ट डेक में से प्रत्येक में 16कुल कार्ड होते हैं। संख्याएँ प्रस्तुत की जाती हैं क्योंकि वे वर्तमान में फेरबदल वाले डेक में दिखाई देते हैं। इस उदाहरण के लिए, चांस डेक को खींचा जाने वाला पहला कार्ड होगा 0, उसके बाद कार्ड 1(जो भी उस डेक को चूसता है)। कम्युनिटी चेस्ट से खींचा गया पहला कार्ड कार्ड है 3, फिर 12

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


आउटपुट:

आपको खेल स्थिति का प्रतिनिधित्व करने के लिए आउटपुट (कंसोल, स्टडआउट या फ़ाइल) करना होगा। इसमें खेल का प्रतिनिधित्व करने के लिए आवश्यक सभी जानकारी शामिल होनी चाहिए । उदाहरण के लिए, आप अज्ञात गुणों को छोड़ सकते हैं (या संक्षिप्त कर सकते हैं, क्योंकि वे न तो सुधारी जा सकती हैं और न ही गिरवी रखी जा सकती हैं। यह इनपुट उन्हें छोड़ नहीं सकता क्योंकि यह एक अनइंस्टॉल की गई सूची है।

संपीड़न इस तरह से किया जाना चाहिए कि आप सबसे खराब स्थिति वाले आउटपुट आकार की गणना कर सकते हैं। यह कुछ संपीड़न एल्गोरिदम को अयोग्य घोषित कर सकता है (जब तक कि आप सबसे खराब स्थिति साबित नहीं कर सकते, और सबसे खराब स्थिति वाले इनपुट का उदाहरण दे सकते हैं)।

जब तक आपका स्रोत कोड अनुचित रूप से क्रिया नहीं है, तब तक इस बात का स्पष्टीकरण दें कि खेल का प्रतिनिधित्व कैसे किया जाता है। एक घिसे-पिटे कार्यक्रम और संपीड़ित उत्पादन के अलावा कुछ नहीं के जवाब हतोत्साहित करते हैं। उदाहरण के लिए, यदि आप कुछ मानों को छोड़ रहे हैं, तो बताएं कि उन्हें आउटपुट से प्राप्त करना कैसे संभव है।


स्कोरिंग / नियम:

स्कोरिंग बिट्स में सबसे खराब-स्थिति संपीड़न आकार और बाइट्स में स्रोत कोड आकार दोनों पर आधारित है :

score = (outputBits * 2) + encoderSourceBytes

एक पूर्ण उत्तर में शामिल होना चाहिए:

  • आउटपुट उदाहरण
  • एनकोडर स्रोत
  • विकोडक स्रोत (स्कोर के विरुद्ध नहीं)

सभी एन्कोडर को पूरा कार्यक्रम होना चाहिए, और मानक खामियों को मना किया जाता है। अंतर्निहित या बाहरी संपीड़न पुस्तकालयों का उपयोग करना भी निषिद्ध है।

विजेता सबसे कम स्कोर के साथ उत्तर है , जैसा कि ऊपर परिभाषित किया गया है।


हम्म, क्यों एक डिकोडर के साथ-साथ एक सबूत की आवश्यकता नहीं है कि एन्कोडिंग वास्तव में काम करता है (और वापस करने योग्य है)? भी निर्मित gzip संपीड़न की तरह सामान के बारे में क्या? यह सबसे खराब स्थिति संपीड़न आकार का पता लगाने के लिए वास्तव में कठिन बना देगा।
मार्टिन एंडर

@ m.buettner संपादित मैंने संपीड़न पुस्तकालयों के बारे में थोड़ा सा जोड़ा, और सबसे खराब स्थिति के प्रमाण के बारे में थोड़ा सा। मैं वास्तव में एक डिकोडर लागू नहीं करना चाहता। यदि वे अपने समाधान को साबित करना चाहते हैं तो पोस्टर उन्हें शामिल कर सकते हैं, लेकिन इसे स्कोर के खिलाफ नहीं गिना जाएगा।
जियोबिट्स

अरे हाँ, मैं उन्हें स्कोर में जोड़ने का सुझाव नहीं दे रहा था। आपको अभी भी सबूत के रूप में एक (अनगुल्ड) डिकोडर की आवश्यकता हो सकती है। यह परीक्षण करना आसान बनाता है कि क्या प्रस्तुतियाँ विशेष मामलों को संभाल सकती हैं।
मार्टिन एंडर

@ m.buettner आप एक उत्कृष्ट बिंदु बनाते हैं। डिकोडर्स यह है
जियोबिट्स

2
The second player is in jail, and has been for one turn. I'm not sure why, since he has a GOoJF card, but he's there.जेल में होने के कारण अच्छा श्रेणी है क्योंकि आप किराया नहीं दे रहे हैं। :)
भूमिगत

जवाबों:


4

(हाल ही में एक जवाब संपादित किया गया था, जिसने इस सवाल को मेरे ध्यान में लाया, और मैंने इसे एक कोशिश देने का फैसला किया, हालांकि यह एक पुराना सवाल है।)

स्विफ्ट 1.2 - 1016 अंक (2 * 81 + 854)

आउटपुट सबसे खराब 81 बाइट्स पर है, और खिलाड़ियों की मात्रा के साथ बदलता है।

या तो दो तरीकों से काम होता है। खेल का मैदान संस्करण थोड़ा लंबा है।

खेल का मैदान कंप्रेस करें

(मान लिया Input.txtगया है Playground Documents Directory)

// Compressor e(inputFileName, outputFileName)
import Cocoa;typealias S=String;typealias U=UInt8;func e(a:S,b:S){var d=NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)as![S],g=d[0],r=S(contentsOfFile:"\(g)/\(a)",encoding:4,error:nil)!.componentsSeparatedByString(";"),z=[U](count:4,repeatedValue:0),c=[U](),p:()->Int={r.removeAtIndex(0).toInt()!},f:()->Bool={r.removeAtIndex(0)=="true" ?true:false},j=U(p());c+=[(j<<4)|(U(p()))];for _ in 0..<j{if f(){c+=[255]}else{let(t,g,v)=(UInt16(p()),U(p()),U(p()));c+=[(U(p()))|(g<<2),v,U(t>>8),U(t&255)]}};for _ in 0..<28{c+=[(U(bitPattern:Int8(p()))<<4)|((f() ?1:0)<<3)|(U(p()))]};for h in 0..<16{let y=h>7 ?1:0,x=Int8(p()),w=Int8(p());c+=[(U(bitPattern:x)<<4)|(U(bitPattern:w)&15)];z[y]=z[y]<<1;if x == -1{z[y]|=1};z[y+1]=z[y+1]<<1;if w == -1{z[y+1]|=1}};NSData(bytes:c+z,length:c.count+4).writeToFile("\(g)/\(b)",atomically:true)}

// Decompressor d(inputFileName, outputFileName)
func d(a:S,b:S){var d = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)as![String],e=d[0],i=NSData(contentsOfFile:"\(e)/\(a)")!,n=[UInt8](count:i.length,repeatedValue:0),o="";i.getBytes(&n,length:i.length);let k=n.removeAtIndex(0),j=k>>4;o+="\(j);\(k&15);";for _ in 0..<j{let h=n.removeAtIndex(0);if h>>7 == 1{o+="true;";continue};let p=n.removeAtIndex(0),b=n.removeAtIndex(0),c=n.removeAtIndex(0);o+="false;\(UInt16(b)<<8|UInt16(c));\(h>>2);\(p);\(h&0b11);"};for _ in 0..<28{let p=Int8(bitPattern:n.removeAtIndex(0)),mortgage=((p>>3)&1)==1 ?"true":"false";o+="\(p>>4);\(mortgage);\(p&7);"};var m=[U](count:4,repeatedValue:0);for i in reverse(0..<4){m[i]=n.removeLast()};for h in 0..<16{var i=h>7 ?1:0,z=n.removeAtIndex(0),x=Int8(z>>4),y=Int8(z&15),isUnowned1=m[i]&128;m[i]=m[i]<<1;let isUnowned2=m[i+1]&128;m[i+1]=m[i+1]<<1;if isUnowned1 != 0 {x=(-1)};if isUnowned2 != 0 {y=(-1)};o+="\(x);\(y);"};o.writeToFile("\(e)/\(b)",atomically:true,encoding:4,error:nil)}

// Test function to compare the files
func t(a:S,b:S)->Bool{let d=NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)as![String],c=d[0],i=S(contentsOfFile:"\(c)/\(a)",encoding:4,error:nil)!,j=S(contentsOfFile:"\(c)/\(b)",encoding:4,error:nil)!;return i==j}
// Usage
e("Input.txt", "Output.bin")  // Encode
d("Output.bin", "Output.txt") // Decode
t("Input.txt", "Output.txt")  // Test -> Should output 'true'

Comp.swift - टर्मिनल का उपयोग करके चलाते हैंswift Compress.swift

(मान लिया Input.txtगया है Desktop)

// Compressor - 854 Bytes
import Cocoa;typealias S=String;typealias U=UInt8;func e(a:S,b:S){var d=NSSearchPathForDirectoriesInDomains(.DesktopDirectory,.UserDomainMask, true)as![S],g=d[0],r=S(contentsOfFile:"\(g)/\(a)",encoding:4,error:nil)!.componentsSeparatedByString(";"),z=[U](count:4,repeatedValue:0),c=[U](),p:()->Int={r.removeAtIndex(0).toInt()!},f:()->Bool={r.removeAtIndex(0)=="true" ?true:false},j=U(p());c+=[(j<<4)|(U(p()))];for _ in 0..<j{if f(){c+=[255]}else{let(t,g,v)=(UInt16(p()),U(p()),U(p()));c+=[(U(p()))|(g<<2),v,U(t>>8),U(t&255)]}};for _ in 0..<28{c+=[(U(bitPattern:Int8(p()))<<4)|((f() ?1:0)<<3)|(U(p()))]};for h in 0..<16{let y=h>7 ?1:0,x=Int8(p()),w=Int8(p());c+=[(U(bitPattern:x)<<4)|(U(bitPattern:w)&15)];z[y]=z[y]<<1;if x == -1{z[y]|=1};z[y+1]=z[y+1]<<1;if w == -1{z[y+1]|=1}};NSData(bytes:c+z,length:c.count+4).writeToFile("\(g)/\(b)",atomically:true)}
// Decompressor
func d(a:S,b:S){var d = NSSearchPathForDirectoriesInDomains(.DesktopDirectory,.UserDomainMask,true)as![String],e=d[0],i=NSData(contentsOfFile:"\(e)/\(a)")!,n=[UInt8](count:i.length,repeatedValue:0),o="";i.getBytes(&n,length:i.length);let k=n.removeAtIndex(0),j=k>>4;o+="\(j);\(k&15);";for _ in 0..<j{let h=n.removeAtIndex(0);if h>>7 == 1{o+="true;";continue};let p=n.removeAtIndex(0),b=n.removeAtIndex(0),c=n.removeAtIndex(0);o+="false;\(UInt16(b)<<8|UInt16(c));\(h>>2);\(p);\(h&0b11);"};for _ in 0..<28{let p=Int8(bitPattern:n.removeAtIndex(0)),mortgage=((p>>3)&1)==1 ?"true":"false";o+="\(p>>4);\(mortgage);\(p&7);"};var m=[U](count:4,repeatedValue:0);for i in reverse(0..<4){m[i]=n.removeLast()};for h in 0..<16{var i=h>7 ?1:0,z=n.removeAtIndex(0),x=Int8(z>>4),y=Int8(z&15),isUnowned1=m[i]&128;m[i]=m[i]<<1;let isUnowned2=m[i+1]&128;m[i+1]=m[i+1]<<1;if isUnowned1 != 0 {x=(-1)};if isUnowned2 != 0 {y=(-1)};o+="\(x);\(y);"};o.writeToFile("\(e)/\(b)",atomically:true,encoding:4,error:nil)}
func t(a:S,b:S)->Bool{let d=NSSearchPathForDirectoriesInDomains(.DesktopDirectory,.UserDomainMask,true)as![String],c=d[0],i=S(contentsOfFile:"\(c)/\(a)",encoding:4,error:nil)!,j=S(contentsOfFile:"\(c)/\(b)",encoding:4,error:nil)!;return i==j}
e("Input.txt", "Output.bin")
d("Output.bin", "Output.txt")
println(t("Input.txt", "Output.txt"))

नमूना इनपुट / आउटपुट

3;1;false;1534;0;14;0;false;34;1;10;1;true;1;false;1;1;false;0;0;true;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;3;12;6;9;4;-1;4;8;4;2;9;5;11;10;14;7;

31 00 0E 05 FE 05 0A 00 22 FF 11 10 08 F0 F0 F0
F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 
F0 F0 F0 F0 F0 F0 01 23 45 67 89 AB CD EF 3C 69 
4F 48 42 95 BA E7 00 00 20 00

4

शुद्ध C (3592 अंक)

आउटपुट 182 बाइट्स है। आकार O (1) है, इसलिए यह सबसे खराब स्थिति है।

यह फ़ाइलों को पढ़ने के लिए बड़े पैमाने पर sscanf का उपयोग करता है, और बस डिस्क को संरचित करता है।

मुझे इनपुट को थोड़ा संशोधित करना पड़ा, क्योंकि आपके उदाहरण में 28 गुण शामिल नहीं थे।

चरों के लिए, मैंने उन्हें पहले अक्षर से नाम दिया कि यह क्या है, या यदि वह संघर्ष करेगा, तो दूसरा (या बाद में) पत्र। उदाहरण के लिए, Game, pLayer, pRoperty, आदि।

compress.c (680 बाइट्स):

#import <stdio.h>
#import <stdint.h>
#define T(X) for(int i=0;i<(X);i++)
typedef uint8_t U;typedef struct{U p;U t;U a[16];U e[16];}G;typedef struct{U b;uint16_t m;U c;U p;U t;}L;typedef struct{int8_t o;U m;U i;}R;G g;L l[8];R r[28];main(){FILE *f=fopen("input.txt","r");fscanf(f,"%d;%d;",&g.p,&g.t);T(g.p){l[i].b=(fgetc(f)=='t');while(fgetc(f)!=';');if(!l[i].b){fscanf(f,"%d;%d;%d;%d;",&l[i].m,&l[i].c,&l[i].p,&l[i].t);}}T(28){fscanf(f,"%d;",&r[i].o);r[i].m=(fgetc(f)=='t');while(fgetc(f)!=';');fscanf(f,"%d;",&r[i].i);}T(16){fscanf(f,"%d;",&g.a[i]);}T(16){fscanf(f,"%d;",&g.e[i]);}f=fopen("c.dat","w");fwrite(&g,sizeof(G),1,f);fwrite(&l,sizeof(L),8,f);fwrite(&r,sizeof(R),28,f);}

compress.c (पूर्व-गोल्फ)

#include "m.h"

#define NEXT_FIELD b=strchr(b,';')+1;

G g;
L l[8];
R r[28];

char a[1024];
char *b = a;

main() {
    FILE *i = fopen("input.txt", "r");
    fgets(a, 1024, i);
    fclose(i);

    sscanf(b, "%d;%d;", &g.p, &g.t);
    NEXT_FIELD NEXT_FIELD

    TIMES(g.p) {
        l[i].b = (*b == 't'); NEXT_FIELD
        if(!l[i].b) {
            sscanf(b, "%d;%d;%d;%d;", &l[i].m, &l[i].c, &l[i].p, &l[i].t);
            NEXT_FIELD NEXT_FIELD NEXT_FIELD NEXT_FIELD
        }
    }

    TIMES(28) {
        sscanf(b, "%d;", &r[i].o); NEXT_FIELD
        r[i].m = (*b == 't'); NEXT_FIELD
        sscanf(b, "%d;", &r[i].i); NEXT_FIELD
    }

    TIMES(16) {
        sscanf(b, "%d", &g.a[i]);
        NEXT_FIELD
    }

    TIMES(16) {
        sscanf(b, "%d", &g.e[i]);
        NEXT_FIELD
    }

    FILE *c = fopen("c.dat", "w");
    fwrite(&g, sizeof(G), 1, c);
    fwrite(&l, sizeof(L), 8, c);
    fwrite(&r, sizeof(R), 28, c);
    fclose(c);
}

decompress.c :

#import <stdio.h>
#import <stdint.h>

#define T(X) for(int i = 0; i < (X); i++)
typedef uint8_t U;

typedef struct {
    U p;
    U t;
    U a[16];
    U e[16];
} G;
typedef struct {
    U b;
    uint16_t m;
    U c;
    U p;
    U t;
} L;
typedef struct {
    int8_t o;
    U m;
    U i;
} R;

G g;
L l[8];
R r[28];

main() {
    FILE *c = fopen("c.dat", "r");
    fread(&g, sizeof(G), 1, c);
    fread(&l, sizeof(L), 8, c);
    fread(&r, sizeof(R), 28, c);
    fclose(c);

    FILE *d = fopen("output.txt", "w");

    fprintf(d, "%d;%d;", g.p, g.t);
    T(g.p) {
        fprintf(d, "%s;", l[i].b ? "true" : "false");
        if(!l[i].b){
            fprintf(d, "%d;%d;%d;%d;", l[i].m, l[i].c, l[i].p, l[i].t);
        }
    }
    T(28) {
        fprintf(d, "%d;%s;%d;", r[i].o, r[i].m ? "true" : "false", r[i].i);
    }
    T(16) { fprintf(d, "%d;", g.a[i] != 255 ? g.a[i] : -1); }
    T(16) { fprintf(d, "%d;", g.e[i] != 255 ? g.e[i] : -1); }

    fclose(d);
}

इनपुट / आउटपुट :

3;1;false;1546;0;14;0;false;7692;1;10;1;true;1;false;1;1;false;0;0;true;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;

संपीड़ित (182 बाइट्स):

0301 0001 0203 0405 0607 0809 0a0b 0c0d
0e0f 030c 0704 0502 0d0b 0f06 0809 0a01
0eff 0000 0a06 000e 0000 0000 0c1e 010a
0100 0100 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0100 0101 0000 0001 00ff 0000 ff00
00ff 0000 ff00 00ff 0000 ff00 00ff 0000
ff00 00ff 0000 ff00 00ff 0000 ff00 00ff
0000 ff00 00ff 0000 ff00 00ff 0000 ff00
00ff 0000 ff00 00ff 0000 ff00 00ff 0000
ff00 00ff 0000 

चलाओ!

$ make compress decompress && ./compress && ./decompress && md5 input.txt output.txt
MD5 (input.txt) = fa655a5a17d67b188424ab0dcfdfb825
MD5 (output.txt) = fa655a5a17d67b188424ab0dcfdfb825

धन्यवाद, मैंने हेडर को थोड़ा सा सहेजने के लिए रोल किया, और बाइट्स गिनने के लिए अपना स्कोर तय किया।
wjl

लगता है कि आप रन-लंबाई एन्कोडिंग के बाद कुछ बाइट्स बचा सकते हैं। यह सुनिश्चित नहीं है कि यह कितना संभव है, लेकिन यदि आप इसे एक एस्केप बाइट के माध्यम से करते हैं, तो इसे गैर-दोहराए जाने वाले डेटा के साथ भी अच्छा करना चाहिए। हे।
cjfaure
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.