উত্সের ভিতরে একটি চিত্র এনকোড করুন


10

গল্ফ চ্যালেঞ্জটি হ'ল উত্স ফাইলের মধ্যে নিম্নলিখিত চিত্রটি এনকোড করা এবং সংকোচিত করা।

ভাবমূর্তি

এই কাজের জন্য আপনি 3 ফাংশন লিখতে প্রয়োজন: red, green, এবং blueযা ইমেজ এক্স / y পর্যন্ত স্থানাঙ্ক গ্রহণ এবং 0-255 মধ্যে সংশ্লিষ্ট আর / g / বো পিক্সেল মান ফিরে।

এখানে সি / সি ++ পরীক্ষার কোডটি রয়েছে:

#include <stdio.h>
#include "your_file"
int main() {
  int x, y;
  for(y = 0; y < 32; ++y)
  for(x = 0; x < 32; ++x)
    printf("%i %i %i\n", red(x, y), blue(x, y), green(x, y));
}

এবং আউটপুট: http://pastebin.com/A770ckxL (আপনি আপনার চিত্রের ডেটা উত্পন্ন করতে এটি ব্যবহার করতে পারেন)

বিধি ও বিশদ:

  • এটি একটি গল্ফ
  • কেবলমাত্র আপনার কোড / ফাইলটি গল্ফড - পরীক্ষার কোডটি পৃথক
  • ব্যবহৃত অক্ষর সেটটি ASCII, তবে স্ট্রিংগুলিতে নিয়ন্ত্রণের অক্ষরগুলি কেবল পালানো অবস্থায় ব্যবহার করা যেতে পারে (যেমন '\ n' এবং '\ r' ইত্যাদি)
  • উত্সের ভিতরে সমস্ত কিছুই থাকা আবশ্যক - কোনও ফাইল লোড হচ্ছে না
  • আপনার আউটপুট অবশ্যই উদাহরণ আউটপুট মেলে। এর অর্থ হ্রাসহীন সংক্ষেপণ।

ভাষাসমূহ:

সমস্যাটি সি / সি ++ কে মাথায় রেখেই লেখা হয়েছিল তবে আমি এই বিধিনিষেধগুলি সরিয়ে দিচ্ছি। এই বলে যে, আমি এখনও তাদের ব্যবহারের পরামর্শ দেব।


4
যদি এটি করার কোনও সুনির্দিষ্ট কারণ না থাকে তবে একটি নির্দিষ্ট ভাষায় কোনও প্রশ্ন ফিক্স করা অত্যন্ত নিরুৎসাহিত। একজনকে অন্য ভাষা ব্যবহার না করার কারণ কী?
FUZxxl

3
যদি কোনও সমাধান কম আকর্ষণীয় হয় তবে এটিকে ভোট দেবেন না। ভাষাগুলি বাদ দিয়ে "খোঁড়া" সমাধান নিষিদ্ধ করা ওভারকিল।
FUZxxl

2
আপনি যদি ইতিমধ্যে ASCII- তে অক্ষর সেটটি সীমাবদ্ধ করে রেখেছেন (যা আমি একেবারে ঠিক মনে করি), আমরা কীভাবে ইউনিকোড হ্যাক ব্যবহার করতে পারি? বেস 64৪ হিসাবে, আপনি স্ট্যান্ডার্ড সি এর পাশাপাশি অন্য যে কোনও ভাষার অভ্যন্তরে এটি করতে পারেন, এটি কেবলমাত্র বিভিন্ন পরিমাণের র‌্যাপার কোড। - তবে আমি কাজটি পছন্দ করি।
পাল্টা ঘড়ির

1
হুঁ, এএসসিআইআই নিয়ন্ত্রণের অক্ষরগুলি 0-31 (এবং 127) সম্পর্কে কী? প্রযুক্তিগতভাবে, তারা ASCII এর অংশ, তবে তাদের কি অনুমোদিত? এবং যদি না হয় তবে আমি আশা করি এলএফ চরিত্রের জন্য একটি ব্যতিক্রম অন্তত তৈরি হয়েছে (10), এবং সম্ভবত সিআর (13) এবং টিএবি (9)?
ইলমারি করোনেন

1
উম ... সুতরাং, আপনার নতুন সংস্করণটি আক্ষরিকভাবে পড়া, সমস্ত সমাধান এক লাইনে থাকতে হবে, কারণ অনাকাঙ্ক্ষিত লাইন ফিডগুলির অনুমতি নেই। আপনি কি চান তা কি আসলেই?
ইলমারি করোনেন

উত্তর:


6

সি, 796 754 712 703 692 685 682 670 666 662 656 648 অক্ষর

পরিবর্তণের:

  • 754-> 712: যোগ করা হয়েছে returnথেকে #defineপ্রতিস্থাপন, ifসঙ্গে ?সরানোর, বিবৃতি (ধন্যবাদ @FUZxxl) intতালিকা প্যারামিটার ফাংশন থেকে।
  • 712-> 703: আবার বান্নিট থেকে নির্লজ্জ অনুলিপি :) সম্পূর্ণ চিত্র তৈরিতে #define
  • 703-> 692: একত্রীকরণ p[]এবং h[]আরও কিছু ?:উন্নতি
  • 692-> 685: bএত বাড়ানোর iদরকার নেই। m=bপরিবর্তে m=11এবং n<2e3পরিবর্তে i<356- এগুলি সংজ্ঞায়িত আচরণ / স্মৃতি দুর্নীতির নিকটে, তবে মনে হয় আমি ভাগ্যবান :)
  • 685-> 682: kএখন (5,4,3,2,1,0) এর পরিবর্তে (32,16,8,4,2,1,0)। গোছা, ডিসি;)
  • 682-> 670: বিভক্ত p[]এবং h[], h[]একটি char*- awww এ রূপান্তরিত , এতে একটি ঘুমের কিটি আছে^<+_=>-
  • 670-> 666: while=> for, l=l*2+...=>l+=l+...
  • 666-> 662: m=m>9?...=>c[n++]=m>9?...
  • 662-> 656: বিট অর্ডারটি বিপরীতে পরিণত হয়েছে b[], তাই আমরা 0-63 এর পরিবর্তে -12৪-১২7 এ ম্যাপ করতে পারি এবং kআর বিট সূচকের প্রয়োজন নেই। ধন্যবাদ @ পাইওটর তারসা । এর সাথে প্রতিস্থাপন ?:(জিসিসি এক্সটেনশন) ||। ধন্যবাদ @ জামেসবি
  • 656-> 648: শেলভিয়েনের নির্লজ্জ অনুলিপি :) (এর জন্য বহু-চরিত্রের ধ্রুবক p[])

চিত্রটি একটি বেস 64-এর মতো স্ট্রিং (ASCII 37-100) তে রূপান্তরিত হয়, হাফম্যান কোডিং 0-9 3-6 বিট ব্যবহার করে রঙগুলি এনকোড করতে ব্যবহার করে এবং একটি বিশেষ রঙ 10 (পিক্সেল আগেরটির মতোই) কেবল 1 বিট ব্যবহার করে।

#define P (x,y){for(;n<2e3;j/=2){j>1||(j=*b+++27);l+=l+(j&1);for(m=0;m<11;m++)l-h[m]+32||(c[n++]=m>9?c[n-1]:m,l=0,m=b);}return 255&p[c[x+y*32]]
char*h="$^<+_=>-,* ",*b="F0(%A=A=%SE&?AEVF1E01IN8X&WA=%S+E+A-(,+IZZM&=%]U5;SK;cM84%WE*cAZ7dJT3R.H1I2@;a^/2DIK&=&>^X/2U*0%'0E+;VC<-0c>&YU'%],;]70R=.[1U4EZ:Y=6[0WU4%SQARE0=-XDcXd_WW*UAF&cFZJJ0EV*(a(P05S3IXA>51cH:S5SAE6+W%/[]7SF(153UM]4U()(53DA+J:]&5+5KX,L6>*4I,/UMBcML9WKLa9%UYIHKWW(9-*):(-ZW(9%T'N&9;C,C/Ea/Y7(JJ\\6CD9E,2%J*,ac]NIW8(M=VFac)/^)?IS-;W&45^%*N7>V,,C-4N35FMQaF,EaWX&*EJ4'";p[]={0,'R@+','aXL',7783255,'4k`',16354410,'NNv',5295994,4671418,9975021},c[1024],j,l,m,n;red P;}blue P>>16;}green P>>8;}

বুনিতের উত্তর থেকে দুটি জিনিস অনুলিপি করা হয়েছে #defineএবং প্রতিবার red/ green/ blueবলা হয়ে পুরো চিত্রটি সম্পূর্ণ ডিকোড করা হচ্ছে । অতিরিক্ত উন্নতির জন্য কিছু জায়গা রয়েছে, সুতরাং কিছু আপডেটের প্রত্যাশা করুন :) আমি কোড কমপ্লায়েন্স সম্পর্কে নিশ্চিত নই, সংকলন ও পরীক্ষার জন্য জিসিসি 4.6.1 ব্যবহার করেছি।

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

কিছু মন্তব্য সহ আরও পঠনযোগ্য 754 অক্ষর সংস্করণ:

#define P 255&p[c[x+y*32]]
// Base64 coded image bitstream, ASCII 37-100
// Huffman codes: 100, 111110, 11100, 1011, 111111, 11101, 11110, 1101, 1100, 1010, 0
char b[]="FYU%3+3+%B&E;3&HF1&Y1.JWXE83+%B=&=3)U]=.PP*E+%,('?B>?D*Wa%8&MD3P7dNbARIV1.Q[?4L9Qc.>E+EKLX9Q(MY%5Y&=?HC_)YDKE0(5%,]?,7YR+I@1(a&PO0+G@Y8(a%B23R&Y+)XcDXd<88M(3FEDFPNNY&HMU4UZY'BA.X3K'1DVOB'B3&G=8%9@,7BFU1'A(*,a(U-U'Ac3=NO,E'='>X]^GKMa.]9(*SD*^/8>^4/%(0.V>88U/)M-OU)P8U/%b5JE/?C]C9&4907UNN`GCc/&]Q%NM]4D,J.8WU*+HF4D-9L-;.B)?8Ea'L%MJ7KH]]C)aJA'F*24F]&48XEM&Na5";
// Colors, order GBR (one char shorter than all the others)
p[]={0,5390379,6379596,7783255,3435360,16354410,5131894,5295994,4671418,9975021};
// Huffman codes for colors 0-10
h[]={4,62,28,11,63,29,30,13,12,10,0};
// Array for image data
c[1024];
i,j,k,l,m,n;
red(int x,int y){
  while(i<356){
    k--;
    if (k<0) {
      j=b[i++]-37;
      k=5;
    }
    l*=2;
    if (j&(1<<k)) l++;
    for(m=0;m<11;m++){
      if(l==h[m]){
        if (m>9) m=c[n-1];
        c[n++]=m;
        l=0;
        m=12;
      }
    }
  }
  return P;
}
blue(int x,int y){return P>>16;}
green(int x,int y){return P>>8;}

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

আমি মনে করি আপনি intআরও কিছু বাইট অপসারণ করতে প্যারামিটার তালিকা থেকে সেগুলি সরাতে পারেন।
FUZxxl

কেমন m=m>9?c[n-1]:m;জন্য if(m>9)m=c[n-1];?
FUZxxl

এবং এছাড়াও: if(k<0){j=b[i++]-37;k=5;}কেন না k>=0?:(j=b[i++]-37,k=5);? (এই কোডটি x=a?:bx=a?a:b
জিসিসি-র

red(x,y){while(i<356){--k>=0?:(j=b[i++]-37,k=5);l*=2;if(j&(1<<k))l++;for(m=0;m<11;m++)l!=h[m]?:(m=m<=9?:c[n-1],c[n++]=m,l=0,m=12);}return P;}
FUZxxl

4

পাইথন ( 684 592 টি অক্ষর)

red,blue,green=[lambda x,y,i=i:[15570996,2839104,7010700,5732035,6304875,0,12207943,8016079,7753294,5005656][int('eJxtkgGSxSAIQ6+kaLTe/2JLImj7Z9MZ6/gMIgjAzMbVWisGySRNm2ut5Hhx/2M0JMfHH5PWwo9x4mNO8pb6JkFM3hpqrR4+qY6eVK1mjlsFeSOBjPyCMy3348aXVRtq9X8czovMIwA5FeXKtGOcvfcf/lbvyW0n2BTOh122HiIH0g/uNrx47zupzMxuuTv808pZd3K7deJ/+PiH61AztmaNwPAsOnNGYovWIxswRill6vnAL4HgxDF17jFcjwRk/5b3Q1x1flLI9n64CIci8bmQe7NL8XoKliu+Jk/AR9rnjkwAYaDka8OXu/a+5NvvNzkcmqifL47H04kAz9M+9slKkDMGuOHi5PR7GZwv7MeApkz5JOSPHFVW3QTbzDJtzDIczkuWjeupLbckLyU5/gByftMg'.decode('base64').decode('zip')[32*y+x])]>>i&255 for i in 16,8,0]

যেহেতু এখন এই চ্যালেঞ্জ সবার জন্য উন্মুক্ত, তাই না কেন! এটি পরিচিত zlib -> বেস 64 এনকোডিং রুট, তাই আমি তার জন্য ক্ষমা চাই। আশা করি দক্ষতার কিছুটা লক্ষণ সহ একটি এন্ট্রি কম হবে!

মূলটির সাথে একত্রে পরীক্ষার স্নিপেট রয়েছে:

for y in range(32):
    for x in range(32):
        print red(x,y), blue(x,y), green(x,y)

পূর্ববর্তী পিক্সেল মানটিও পুনরাবৃত্তি করতে আপনার একটি বিশেষ রঙ যুক্ত করার চেষ্টা করা উচিত। 588 অক্ষর বেস 64 আমার উত্তর (365 অক্ষর) এর স্ট্রিংয়ের চেয়ে অনেক বড় এবং যদিও zLib এখানে ওভারকিল, এটি একটি অনুরূপ ফলাফল দেওয়া উচিত, সুতরাং প্রায় 500 চরগুলি এইভাবে সম্ভব হওয়া উচিত।
schnaader

4

সি ++, 631 চর; সি - 613

একটি বেস -২৯ ইউনারি এমটিএফ কোডার, সি ++, 1৩১ টি অক্ষর:

#define A(Z)int Z(int X,int Y){char*s="xdGe*V+KHSBBGM`'WcN^NAw[,;ZQ@bbZVjCyMww=71xK1)zn>]8b#3&PX>cyqy@6iL?68nF]k?bv/,Q`{i)n[2Df1zR}w0yIez+%^M)Diye{TC]dEY\\0,dU]s'0Z?+bo;7;$c~W;tvFl%2ruqWk$Rj0N[uP)fSjk?Tnpn_:7?`VbJ%r@7*MQDFCDo3)l#ln<kuRzzHTwCg&gYgSXtv\\m_Eb}zRK7JK<AZzOe}UX{Crk)SyBn;;gdDv=.j*O{^/q6)`lHm*YYrdM/O8dg{sKW#B3BLMiI8@-Zo-EsgE.R#viYL$-<EU*~u5pe$r:`b)^dgXOJtf4";int*v,B=92,R=1,C=0,w[]={0,16354410,4671418,'aXL',7783255,5295994,'R@+','4k`',9975021,'NNv'};for(X+=Y*32+1;X--;)for(v=w;;){for(Y=*v++;R<B*B*B;C=C%R*B+*s++-35)R*=B;if(R/=2,C>=R){for(C-=R;--v>w;*v=v[-1]);*v=Y;break;}}return 255&Y
A(red);}A(blue)>>16;}A(green)>>8;}

এবং উপরের সি সংস্করণ (613 অক্ষর):

#define A (X,Y){char*s="xdGe*V+KHSBBGM`'WcN^NAw[,;ZQ@bbZVjCyMww=71xK1)zn>]8b#3&PX>cyqy@6iL?68nF]k?bv/,Q`{i)n[2Df1zR}w0yIez+%^M)Diye{TC]dEY\\0,dU]s'0Z?+bo;7;$c~W;tvFl%2ruqWk$Rj0N[uP)fSjk?Tnpn_:7?`VbJ%r@7*MQDFCDo3)l#ln<kuRzzHTwCg&gYgSXtv\\m_Eb}zRK7JK<AZzOe}UX{Crk)SyBn;;gdDv=.j*O{^/q6)`lHm*YYrdM/O8dg{sKW#B3BLMiI8@-Zo-EsgE.R#viYL$-<EU*~u5pe$r:`b)^dgXOJtf4";int*v,B=92,R=1,C=0,w[]={0,16354410,4671418,'aXL',7783255,5295994,'R@+','4k`',9975021,'NNv'};for(X+=Y*32+1;X--;)for(v=w;;){for(Y=*v++;R<B*B*B;C=C%R*B+*s++-35)R*=B;if(R/=2,C>=R){for(C-=R;--v>w;*v=v[-1]);*v=Y;break;}}return 255&Y
red A;}blue A>>16;}green A>>8;}

কেবলমাত্র বেস -৯৫ ডেটা এবং পাটিগণিত কোডিং + অভিযোজিত পরিসংখ্যানের মডেল সহ একটি এন্ট্রি অন্তর্ভুক্ত করতে।
স্ক্যানাডারের কোড ডেটার জন্য 438 ডলার অক্ষর ব্যবহার করে এবং আমার কেবল 318 (311 ডাব্লু / ও মাস্কিং)।
তবে যেমনটি প্রত্যাশা করা হয়েছে, গাণিতিক কোডিং এর মতো ছোট্ট নমুনার জন্য খুব জটিল।

(এটি ৮৪৪ টি চর)

char* q="q^<A\">7T~pUN1 adz824K$5a>C@kC8<;3DlnF!z8@nD|9D(OpBdE#C7{yDaz9s;{gF[Dxad'[oyg\\,j69MGuFcka?LClkYFh=:q\\\\W(*zhf:x)`O7ZWKLPJsP&wd?cEu9hj 6(lg0wt\\g[Wn:5l]}_NUmgs]-&Hs'IT[ Z2+oS^=lwO(FEYWgtx),)>kjJSIP#Y?&.tx-3xxuqgrI2/m~fw \\?~SV={EL2FVrDD=1/^<r*2{{mIukR:]Fy=Bl.'pLz?*2a? #=b>n]F~99Rt?6&*;%d7Uh3SpLjI)_abGG$t~m{N=ino@N:";
#define I int
#define F(N) for(i=0;i<N;i++)
#define Z C=(C%T)*B+(*q++)-32
enum{B=95,H=1024,T=B*B*B};I p[B],v[B+H],n=3,*m=&v[B],R=T*B,C,i,j,y,c,x,w;void D(I P){w=(R>>11)*P;(y=C>=w)?R-=w,C-=w:R=w;while(R<T)R*=B,Z;}struct u{u(){F(4)Z;F(B)p[i]=H,v[i]=0;F(H){v[0]=m[i-1];v[1]=m[i-32];j=i;F(n){I&P=p[i];D(P);if(y){P-=P>>4;c=v[i];goto t;}else P+=H+H-P>>4;}c<<=7;for(x=-255;x<0;x+=x+y)D(H);v[n++]=c=x;t:m[i=j]=c;}}}d;I red(I x,I y,I z=0){return m[y*32+x]>>z&255;}
#define blue(x,y) red(x,y,8)
#define green(x,y) red(x,y,16)

পরীক্ষাগুলি (পূর্ববর্তী বেস -99 সংস্করণ থেকে):
http://codepad.org/qrwuV3Oy
http://ideone.com/ATngC

কোনওভাবে SO 7F কোড খায়, সুতরাং আমি এটি বেস = 95 এ আপডেট করতে হয়েছিল


3

সি ++ - 1525 1004 964 অক্ষর

#define e (int x,int y){for(i=g=0;i<702;i=i+2)for(j=48;j<d[i];++j)c[g++]=d[i+1]-48;return 255&z[c[x+y*32]]
int i,g,j,z[]={0,7010700,12207943,5005656,5732035,8016079,2839104,6304875,15570996,7753294},c[1024];
char*d="3031;23322337261524453223310625132101214103453101233722172643310323342102521229492333210352112241036141014821042552621241014161016141024121022103210151015104526211034361034726510352625107441:530855425201511551045378554>55755312410242035201510528725212044451015411032:73135216561321012171017101725313581125152572531358122415257257110213310131231422022172025105110315322103210623815203110113053521053223817506920721013361322282530991062101213361322282520491049682224133614121028101510291029;812341023342835694810582018841018356978194810842835193329781019482410542835192310193668399428454319362928102829843845331019263028101330441014382035104369285338101810284536334910291018534820283546891019102943883536";
int red e>>16;}
int blue e>>8;}
int green e;}

একটি অ্যারে জেড তৈরি করেছেন যা সম্ভাব্য রঙগুলির একক পূর্ণসংখ্যার হিসাবে সঞ্চয় করে। (আর << 16 | জি << 8 | খ)। একটি অ্যারে ডি তৈরি করা হয়েছে যা {পরিমাণ, মান stores সঞ্চয় করে, মানটি অ্যারে জেডে অবস্থিত, পরিমাণটি সেই মানটির সাথে একটানা পিক্সেলের সংখ্যা ie পিক্সেল। পিক্সেলগুলির প্রকৃত অ্যারে (সি) তখন প্রতিবার লাল বলা হয় গণনা করা হয় অ্যারের মধ্যে মানটি ডান স্থানান্তরিত হয় এবং সঠিক উপাদানটি পেতে প্রয়োজনীয়ভাবে অ্যান্ডেড হয়।

সংজ্ঞায়িত হিসাবে অ্যারে থেকে আরও নিদর্শনগুলি গ্রহণ করে আমি সম্ভবত আরও কয়েকটি অক্ষর (~ 50) সঞ্চয় করতে পারি।

সম্পাদনা 1 - 48 টি দিয়ে অফসেটের প্রতিটি মানের সাথে একটি চর অ্যারের জন্য ডি অ্যারে পরিবর্তন করে, যার অর্থ আমি এটিকে কমা দিয়ে একটি লোড সঞ্চয় করে স্ট্রিং হিসাবে উপস্থাপন করতে পারি।

সম্পাদনা 2 - সংজ্ঞায়িত বিবৃতিতে ফাংশনগুলির একটি বড় অংশ নিয়েছিল।


আপনি সি ব্যবহার করবেন না কেন? সি, এটা একটা declaratrion থেকে টাইপ-নাম মুছে ফেলার জন্য যদি তা না হয় সম্ভব int(তাই int f(int x,int y)হয়ে f(x,y)
FUZxxl

@ ফুজেজএক্সএল, হ্যাঁ সি প্রায় সবসময় সি ++ এর চেয়ে কম হবে তবে আমি সত্যই প্রতিদিন ভিত্তিতে সি ব্যবহার করি না এবং দৈর্ঘ্য হ্রাস করতে ব্যবহার করা যেতে পারে এমন সমস্ত সূক্ষ্মতাগুলি সত্যই জানি না। আমি যেভাবেই হোক জয়ের চেষ্টা করে বিরক্ত করছি না, আমি কেবল অন্য কোনও সি ++ উত্তরগুলি পরাস্ত করার চেষ্টা করি।
স্কট লোগান

3

জাভাস্ক্রিপ্ট, 696 694 অক্ষর

696 -> 694 এর জন্য স্ক্যানাডারকে ধন্যবাদ।

আমি একটি আলাদা এনকোডিং ফর্ম্যাটটি পেয়েছি, যা মূলত রঙ বর্ণন টেবিলের সাথে রান-লেংথ এনকোডিং । এটি বেশ সুন্দর কাজ করে, কারণ এখানে 16 টিরও কম রঙ রয়েছে এবং তারা একটানা 16 বার কম পরিবেশন করে; সুতরাং দৈর্ঘ্য সহ প্রতিটি পিক্সেল সংজ্ঞা একটি বাইটে ফিট করে। আমি রঙটি বাইটের উচ্চ অংশে এবং কাউন্টটি নীচের অংশে রেখেছি।

শেষ অবধি, বেস 64 স্ট্রিংটি আমার প্রত্যাশার চেয়ে বেশি দীর্ঘ হয়েছিল (472 অক্ষর), তবে ডিকোডিং প্রোগ্রামটি খুব ছোট।

for(b=i=a=[];a&15||(a=atob("AxMrMyIzJxYlRDUiMwEmFSMBIUEBQzUBITMnEidGMwEjMyQBUhIi
SSkzIwFTEiFCAWNBAUEoASRVYhJCAUFhAWFBAUIhASIBIwFRAVEBVGISAUNjAUMnVgFTYlIBRxRaA1hF
UgJREVUBVHNYRV51VRNCAUICUwJRASV4UhICRFQBURQBI3oTUxJWFiMBIXEBcQFxUhNTGCEVJXVSE1MY
IhQldVIXARIzATEhEyQCInECUgEVARM1IgEjASaDUQITAREDNSUBNSKDcQWWAicBMWMxIoJSA5kBJgEh
MWMxIoJSApQBlIYiQjFjQSEBggFRAZIBkoshQwEyQ4JTloQBhQKBSAGBU5aHkYQBSIJTkTOShwGRhEIB
RYJTkTIBkWOGk0mCVDSRY5KCAYKSSINUMwGRYgOCATEDRAFBgwJTATSWgjWDAYEBglRjM5QBkgGBNYQC
glNkmAGRAZI0iFNjAQ==").charCodeAt(i++));b.push([0,16354410,4671418,6379596,77832
55,5295994,5390379,3435360,9975021,5131894][a-- >>4]));green=(red=function(c,d){
return b[32*d+c]>>this&255}).bind(16);blue=red.bind(8)

দ্রষ্টব্য: আমি সামান্য পাঠযোগ্যতার জন্য কোডটি বিভক্ত করেছি। এটি চালানোর জন্য এক লাইনে থাকা দরকার।

পরীক্ষার কোড:

for(var y = 0; y < 32; ++y) {
    for(var x = 0; x < 32; ++x) {
        console.log(red(x, y), green(x, y), blue(x, y));
    }
}

আমি মনে করি উদাহরণের ফলাফলটি আসলে লাল, সবুজ, নীল (লাল নয়, নীল নয়, মূল পরীক্ষার কোডের মতো সবুজ) এর আউটপুট; এটি যাইহোক আমার মতো কাজ করে।


প্যালেট অ্যারে এ পরিবর্তন করার চেষ্টা করুন [0,16354410,4671418,6379596,7783255,5295994,5390379,3435360,9975021,5131894]- এটি 1 টি অক্ষর সংরক্ষণ করে এবং এটি আরজিবি এর পরিবর্তে জিবিআর ক্রম।
schnaader

ধন্যবাদ আমি সেই মাইক্রো-অপ্টিমাইজেশানগুলি পছন্দ করি :-) সম্পাদনা করুন: এটি এমনকি দুটি অক্ষর বাঁচিয়েছে কারণ আমি আমার অরিয়েন্টাল উত্সে নীল দুইবার ব্যবহার করেছি
অনুলিপি করুন

2

সি ++, 1357 অক্ষর

int i,j,C[]={0,0,0,106,249,140,186,71,71,76,97,88,87,118,195,122,80,207,43,82,64,96,52,107,237,152,52,118,78,78},E[]={30,31,112,33,22,33,72,61,52,44,53,22,33,10,62,51,32,10,12,14,10,34,53,10,12,33,72,21,72,64,33,10,32,33,42,10,25,21,22,94,92,33,32,10,35,21,12,24,10,36,14,10,14,82,10,42,55,26,21,24,10,14,16,10,16,14,10,24,12,10,22,10,32,10,15,10,15,10,45,26,21,10,34,36,10,34,72,65,10,35,26,25,10,74,41,105,30,85,54,25,20,15,11,55,10,45,37,85,54,145,57,55,31,24,10,24,20,35,20,15,10,52,87,25,21,20,44,45,10,15,41,10,32,107,31,35,21,65,61,32,10,12,17,10,17,10,17,25,31,35,81,12,51,52,57,25,31,35,81,22,41,52,57,25,71,10,21,33,10,13,12,31,42,20,22,17,20,25,10,51,10,31,53,22,10,32,10,62,38,15,20,31,10,11,30,53,52,10,53,22,38,17,50,69,20,72,10,13,36,13,22,28,25,30,99,10,62,10,12,13,36,13,22,28,25,20,49,10,49,68,22,24,13,36,14,12,10,28,10,15,10,29,10,29,118,12,34,10,23,34,28,35,69,48,10,58,20,18,84,10,18,35,69,78,19,48,10,84,28,35,19,33,29,78,10,19,48,24,10,54,28,35,19,23,10,19,36,68,39,94,28,45,43,19,36,29,28,10,28,29,84,38,45,33,10,19,26,30,28,10,13,30,44,10,14,38,20,35,10,43,69,28,53,38,10,18,10,28,45,36,33,49,10,29,10,18,53,48,20,28,35,46,89,10,19,10,29,43,88,35,36,10};int*Q(int n){for(i=0;1;i++){for(j=0;j<E[i]/10;j++){if(!n)return&C[E[i]%10*3];n--;}}}
#define red(x,y) Q(x+32*y)[0]
#define blue(x,y) Q(x+32*y)[1]
#define green(x,y) Q(x+32*y)[2]

কিছুটা ডিওফাসকেটেড:

int C[]={0,0,0,106,249,140,186,71,71,76,97,88,87,118,195,122,80,207,43,82,64,96,52,107,237,152,52,118,78,78},
int E[]={30,31,112,33,22,33,72,61,52,44,53,22,33,10,62,51,32,10,12,14,10,34,53,10,12,33,72,21,72,64,33,10,32,33,42,10,25,21,22,94,92,33,32,10,35,21,12,24,10,36,14,10,14,82,10,42,55,26,21,24,10,14,16,10,16,14,10,24,12,10,22,10,32,10,15,10,15,10,45,26,21,10,34,36,10,34,72,65,10,35,26,25,10,74,41,105,30,85,54,25,20,15,11,55,10,45,37,85,54,145,57,55,31,24,10,24,20,35,20,15,10,52,87,25,21,20,44,45,10,15,41,10,32,107,31,35,21,65,61,32,10,12,17,10,17,10,17,25,31,35,81,12,51,52,57,25,31,35,81,22,41,52,57,25,71,10,21,33,10,13,12,31,42,20,22,17,20,25,10,51,10,31,53,22,10,32,10,62,38,15,20,31,10,11,30,53,52,10,53,22,38,17,50,69,20,72,10,13,36,13,22,28,25,30,99,10,62,10,12,13,36,13,22,28,25,20,49,10,49,68,22,24,13,36,14,12,10,28,10,15,10,29,10,29,118,12,34,10,23,34,28,35,69,48,10,58,20,18,84,10,18,35,69,78,19,48,10,84,28,35,19,33,29,78,10,19,48,24,10,54,28,35,19,23,10,19,36,68,39,94,28,45,43,19,36,29,28,10,28,29,84,38,45,33,10,19,26,30,28,10,13,30,44,10,14,38,20,35,10,43,69,28,53,38,10,18,10,28,45,36,33,49,10,29,10,18,53,48,20,28,35,46,89,10,19,10,29,43,88,35,36,10};
int*Q(int n){
  for(int i=0;1;i++){
    for(int j=0;j<E[i]/10;j++){
      if(!n)return&C[E[i]%10*3];
      n--;
    }
  }
}
#define red(x,y) Q(x+32*y)[0]
#define blue(x,y) Q(x+32*y)[1]
#define green(x,y) Q(x+32*y)[2]

Cচিত্রের দশটি স্বতন্ত্র রঙের জন্য আরজিবি মান রয়েছে। Eছবির জন্য ডেটা রয়েছে, যেখানে প্রতিটি উপাদান E[i]পুনরাবৃত্তি গণনা E[i]/10এবং রঙ সূচক উভয়ই এনকোড করে E[i]%10


+1 আপনি কয়েকটি অক্ষর লুপে শেভ করতে পারেন: পেস্টবিন.
com

1
আপনি যদি নিজের সমাধানটিকে সি হিসাবে পুনরায় ব্র্যান্ড করেন (কোনও কোড পরিবর্তনের প্রয়োজন নেই) এবং সংজ্ঞায়িতকরণগুলিকে int red(x,y){R Q(x+32*y)[0]}(only # Define` এর মতো প্রকারের নাম হিসাবে ফাংশনে পরিণত করেন returnতবে আপনি আরও অক্ষর শেভ করতে সক্ষম হতে পারেন।
FUZxxl

1
যেহেতু, এটি প্রতারণা করছে, যেহেতু লাল, নীল এবং সবুজ ফাংশন নয় তবে ম্যাক্রো।
FUZxxl

1
এটি একটি ফাংশন প্রয়োগ করে এবং আরও ছোট (1339 বাইট)। দয়া করে লক্ষ্য করুন, এই প্রোগ্রামটি সম্ভবত কেবলমাত্র পুরানো সি: hpaste.org/65584
ফুউজএক্সএক্সএল

আমি উত্স থেকে সমস্ত ধরণের তথ্য সরিয়েছি। এটি এখনও বৈধ সি
FUZxxl

1

পাইথন 3 (589 টি অক্ষর)

import base64,zlib
red,blue,green=(lambda x,y,i=i:b'\xed\x984+R@j\xf9\x8cWv\xc3`4k\0\0\0\xbaGGzP\xcfvNNLaX'[zlib.decompress(base64.decodebytes(b'eJxtkgGSxSAIQxWN1vtfeEkEbf9sOmMdn0EEAZjZuFprxSCZpGlzrZUcL+5/jIbk+Phj0lr4MU58zEneUt8kiMlbQ63VwyfV0ZOq1cxxqyBvJJCRX3Cm5X7c+LJqQ63+j8N5kXkEIKeiXJl2jLP3/sPf6j257QSbwvmwy9ZD5ED6wd2GF+99J5WZ2S13h39aOetObrdO/A8f/3AdasbWrBEYnkVnzkhs0XpkA8YopUw9H/glEJw4ps49huuRgOzf8n6Iq85PCtneDxfhUCQ+F3JvdileT8FyxdfkCfhI+9yRCSAMlHxt+HLX3pd8+/0mh0MT9fPF8Xg6EeB52sc+WQlyxgA3XJycfi+D84X9GNCUKZ+E/JGjyqqbYJtZpo1ZhsN5ybJxPbXlluSlJMcf++8TIA=='))[32*y+x]*3+i]for i in(0,1,2))

পরীক্ষার কোড

for y in range(32):
    for x in range(32):
        print(red(x,y), blue(x,y), green(x,y))

ডিলন কাওয়ারের সমাধানের ভিত্তিতে


1

পিএইচপি (5.4) - 822

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

নিউলাইনস + 822 বাইটের জন্য মন্তব্যগুলি মুছে ফেলা হবে।

// Colour map
$c=[0,16354410,4671418,6379596,7783255,5295994,5390379,3435360,9975021,5131894];

// Optimised RLE map
$r=array_merge(array_diff(range(10,89),[27,40,47,56,59,60,63,66,67,70,73,75,76,77,79,80,83,86]),[92,94,99,105,107,112,118,145]);

// Image data (base 70)
$e="CDsF<Fd]WPX<F0^VE0240GX02Fd;d_F0EFN0?;<onFE0H;2>0I404h0NZ@;>0460640>20<0E05050Q@;0GI0Gd`0H@?0eMqCjY?:51Z0QJjYu[ZD>0>:H:50Wk?;:PQ05M0ErDH;`]E0270707?DHg2VW[?DHg<MW[?c0;F032DN:<7:?0V0DX<0E0^K5:D01CXW0X<K7Ub:d03I3<A?Cp0^023I3<A?:T0Ta<>3I420A050B0Bt2G0=GAHbS0\:8i08Hbf9S0iAH9FBf09S>0YAH9=09IaLoAQO9IBA0ABiKQF09@CA03CP04K:H0ObAXK080AQIFT0B08XS:AHRm090BOlHI0";

// Expand image data
for($i=0;$i<352;$i++){$b=$r[ord($e[$i])-48];$l=(int)($b/10);while($l--)$d[]=$c[$b%10];}

// Colour retrieval functions
function red($x,$y){global$d;return$d[$x+$y*32]&0xff;}
function green($x,$y){global$d;return$d[$x+$y*32]>>8;}
function blue($x,$y){global$d;return($d[$x+$y*32]>>8)&0xff;}

টেস্ট স্টাব:

for ($y=0;$y<32;$y++) {
    for ($x=0;$x<32;$x++) {
        printf("%d %d %d\n", red($x, $y), blue($x, $y), green($x, $y));
    }
}

ইমেজ ডেটা নিজেই সংকোচন করা বেশ ভাল, কিন্তু আরজিবি মান পুনরুদ্ধার করতে ফাংশনগুলি কোডের 1/4 অংশ গ্রহণ করে।

আমি একটি কাস্টম বেস 70 + রান দৈর্ঘ্যের এনকোডিং প্রক্রিয়া ব্যবহার করছি।

  1. 10 টি অনন্য রঙ রয়েছে
  2. রংগুলির দৈর্ঘ্য 1 এবং 14 (12 টি ব্যবহৃত) এর মধ্যে রয়েছে run
  3. সম্ভাব্য 120 টি সমন্বয় রয়েছে।
  4. এখানে কেবলমাত্র ব্যবহৃত 70 টি অনন্য রান / রঙ সমন্বয় রয়েছে actually

এনকোডযুক্ত চিত্রের ডেটা একটি আরএলইয়ের অ্যারে সূচককে উল্লেখ করে, যা পরিবর্তিত রঙের অ্যারেটিকে সূচক করে। আমি নিশ্চিত নই যে এটি সরাসরি রঙগুলি উল্লেখ করতে কত ওভারহেড যুক্ত করে বা বিয়োগ করে।

সাইন এখানে 10 টি রঙ (0 থেকে 9), আরএলইএস হিসাবে সংরক্ষণ করা হয় run_length * 10 + colour_index। রঙ ক্রমের উপর ভিত্তি করে অপটিমাইজেশন পরীক্ষা না করে 10 এবং 145 এর মধ্যে বেশ কয়েকটি এনকোডিং দেওয়া। (যেমন আমি 0 থেকে 5, 5 থেকে 9 এবং 9 থেকে 0 পর্যন্ত রং সরিয়ে 19 থেকে 140 পর্যন্ত পরিসর তৈরি করতে পারি - তবে এতে অন্যান্য নক-অন প্রভাবও থাকতে পারে)

পূর্বের উত্তরে তাদের এনকোডড ডেটা 472 বাইট বলে। আমার এনকোডযুক্ত চিত্রের ডেটা 352 বাইট, তবে মধ্যবর্তী আরএলই / রঙের মানচিত্র (যা বাইনারি এনকোডড নয়) আরও 129 বাইট, মোটটি 481 এ রেখে দেয় (পাশাপাশি দুটি যোগ করার জন্য অতিরিক্ত ওভারহেড)। তবে আমি সন্দেহ করি যে আমার পদ্ধতিটি বৃহত্তর চিত্রগুলির জন্য আরও ভাল স্কেল করতে পারে।

করতে:

  1. আরএলই মানচিত্রের বাইনারি এনকোডিং তদন্ত করুন
  2. ফাংশনগুলির আকার হ্রাস করার একটি উপায় সন্ধান করুন। globalদুশ্চরিত্রা, তবে ধ্রুবকগুলিতে অক্ষর সূচকগুলি অ্যাক্সেস করতে পারে না।
  3. সংখ্যার দীর্ঘ ক্রমিক রানের সাথে আরএলই মানচিত্রের আকার হ্রাস করা যায় কিনা তা দেখার জন্য রঙ সূচী ক্রম সহ পরীক্ষা করুন
  4. রঙ মানচিত্রের সম্ভাব্য bit৪ বিট নির্দিষ্ট অপ্টিমাইজেশন? (r0 << 56 | r1 << 48 | ...)?
  5. লম্বালম্বি আরএলই নিয়ে পরীক্ষা করে দেখুন এটির ফলে আরও এনকোডিংগুলির কমপ্যাক্ট সেট আসে।
  6. এরিয়া এনকোডিং?

1

সি (জিসিসি) , 602 বাইট

P[]={0,6982905,0xba4747,5003361,5751670,8048464,2834514,6318900,0xed3498,7753294},X[1024],*i,r,w;
#define u(d)i=X;for(char*I="56s-8-8_TKCL-8!UJ7!#%!9L!#8_,_W8!78A!0,-us87!:,#/!;%!%i!AN1,/!%'!'%!/#!-!7!&!&!D1,!9;!9_X!:10!a@v&5lM0+&\"N!D<lMvNPN6/!/+:+&!Kn0,+CD!&@!7x(6:,XT7!#(!(!(06:h#JKP06:h-@KP0^!,8!$#6A+-(+0!J!6L-!7!U=&+6!\"5LK!L-=(I\\+_!$;$-305z!U!#$;$-30+H!H[-/$;%#!3!&!4!4y3#9!.93:\\G!Q+)k!):\\e*G!k3:*84e!*G/!M3:*.!*;[>u3DB*;43!34k=D8!*153!$5C!%=+:!B\\3L=!)!3D;8H!4!)LG+3:Ep!*!4Bo:;!";w=*I-33,*I++;)for(r=w/10+1;r--;*i++=P[w%10]>>d&255);x=X[y*32+x];
red(x,y){u(16)}green(x,y){u(8)}blue(x,y){u(0)}

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

ভগ্নস্বাস্থ্য শিঠ্ট

P[]={...},              The palette. Each entry is an integer on the form `RRGGBB`.
X[1024],                The buffer we unpack things into.
*i,r,w;                 Misc variables.
#define u(d)            Macro taking the number of bits to shift palette entries.
i=X;for(char*I="...";   Start at beginning of X for output, I is the encoded data.
                        Data was packed as ((R - 1) * 10) + P + 33, with R being
                        run-length and P the palette entry.
w=*I-33,*I++;)          Pick up encoded char, and check for end of data.
for(r=w/10+1;r--;       Get run-length from encoded byte.
*i++=P[w%10]>>d&255);   Get palette entry and extract colour given by d to store in X.
x=X[y*32+x];            Implicit return of the value at given coordinates.
red(x,y){u(16)}         The specific functions for each channel, calling u() for the
green(x,y){u(8)}        real work.
blue(x,y){u(0)}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.