পার্ল, 164 বাইট, কোনও zlib / gzip সংক্ষেপণ
সমস্যার উপর ঘুমানোর পরে, আমি আমার প্রথমটির চেয়ে অনেক কম সমাধান বের করতে সক্ষম হয়েছি। কৌতুকটি নিয়মগুলির মধ্যে একটি ছোটখাটো লুফোলের সুবিধা গ্রহণ করা: চরিত্রগুলি প্রতিটি 8 বাই 8 পিক্সেলের সাথে ফিট করতে হবে, তবে কিছুই বলে না যে তাদের সমস্ত জায়গা পূরণ করতে হবে। সুতরাং আমি আমার নিজস্ব 4 বাই 5 পিক্সেল হরফ আঁকুন, আমাকে দুটি অক্ষর 5 বাইটে প্যাক করতে দিয়েছি।
আউটপুটটি দেখতে এটির মতো দেখাচ্ছে:
(মাপা x 4)
(মূল আকার)
এম্বেড থাকা ফন্টের ডেটা সহ প্রকৃত কোড দেওয়ার আগে, আমাকে একটি ডি-গল্ফযুক্ত সংস্করণ দেখানো উচিত:
y/A-Z!./\0-\033/ for @a = <> =~ /./g;
say "P4 " . 8*@a . " 8";
for $p (qw'PACKED FONT DATA') {
print chr vec $p, ord, 4 for @a;
}
আসল কোডে, PACKED FONT DATA
আটটি সাদা স্পেস-ডিলিমেটেড সারি (চার 14-বাইট সারি এবং একটি 13-বাইট এক, ফাঁকা সারিগুলির জন্য তিনটি একক নাল বাইট) সমন্বিত একটি বাইনারি স্ট্রিং দ্বারা প্রতিস্থাপিত হবে। আমি ইচ্ছাকৃতভাবে আমার ফন্টটি এমনভাবে তৈরি করেছি যাতে প্যাক করা ডেটাতে কোনও শ্বেত স্থান, একক উদ্ধৃতি বা ব্যাকস্ল্যাশ না থাকে, যাতে এটি এনকোড করা যায় qw'...'
।
যেহেতু প্যাকযুক্ত ফন্ট স্ট্রিংয়ে অপ্রিন্টযোগ্য অক্ষর রয়েছে, তাই আমি আসল স্ক্রিপ্টটি হেক্স ডাম্প হিসাবে সরবরাহ করেছি। xxd -r
এটিকে এক্সিকিউটেবল পার্ল কোডে ফিরিয়ে আনতে ব্যবহার করুন :
0000000: 792f 412d 5a21 2e2f 002d 1b2f 666f 7240 y/A-Z!./.-./for@
0000010: 613d 3c3e 3d7e 2f2e 2f67 3b73 6179 2250 a=<>=~/./g;say"P
0000020: 3420 222e 382a 4061 2e22 2038 223b 666f 4 ".8*@a." 8";fo
0000030: 7224 7028 7177 2700 20e6 e6ff 9612 8999 r$p(qw'. .......
0000040: e6e6 7759 99f5 0420 9999 8898 128a df99 ..wY... ........
0000050: 9928 5999 1504 20ef 98ee fb12 8cb9 e9e9 .(Y... .........
0000060: 2659 6965 0420 9999 8899 928a 9989 ab21 &Yie. .........!
0000070: 599f 8220 e9e6 8f96 62f9 9986 972e 2699 Y.. ....b.....&.
0000080: f284 2000 2000 2729 7b70 7269 6e74 2063 .. . .'){print c
0000090: 6872 2076 6563 2470 2c6f 7264 2c34 666f hr vec$p,ord,4fo
00000a0: 7240 617d r@a}
এখানে কিভাবে এটা কাজ করে:
প্রথম লাইন (ডি golfed সংস্করণে), ইনপুটের একটি একক লাইন লেখা অক্ষর (সুবিধামত কোন চিহ্ন নতুন লাইন বাদ) এর একটি অ্যারের সেটিকে splits ও অক্ষর মানচিত্র A
থেকে Z
এবং অক্ষর !
এবং .
চরিত্র কোড 0 28, যা সাধারণত ASCII / ইউনিকোডে অপ্রিন্টযোগ্য নিয়ন্ত্রণ অক্ষরের সাথে সামঞ্জস্য হয়। (এর একটি সামান্য পার্শ্ব প্রতিক্রিয়া হ'ল ইনপুটটিতে যে কোনও ট্যাব J
গুলি এস হিসাবে মুদ্রিত হয় )) আউটপুট লুপ যে কোনও কোড ২৮-এর উপরে কোনও কোডকে ফাঁকাতে পরিণত করে, স্পেস অক্ষরটি আনম্যাপ না করে ছেড়ে যায়।
দ্বিতীয় লাইনটি কেবল PBM শিরোনামটি প্রিন্ট করে। এটি পার্ল ৫.১০ say
বৈশিষ্ট্যটি ব্যবহার করে , সুতরাং perl -M5.010
এটির কাজ করার জন্য আপনাকে এই স্ক্রিপ্টটি চালানো দরকার ।
আউটপুট লুপটি প্যাক করা চিত্র সারিগুলির একটি সাদা স্থান-বিস্মৃত তালিকা নেয় এবং তাদের প্রত্যেককে $p
পালাক্রমে বরাদ্দ করে । (আমি ফন্টটি ডিজাইন করেছি যাতে প্যাকড ডেটাতে কোনও শ্বেতস্থান বা '
অক্ষর না থাকে )) এটি ইনপুট অক্ষরের উপর লুপ করে ইমেজ সারি থেকে ম্যাপযুক্ত অক্ষর কোডের সাথে 4-বিট নিবলে বের করার জন্য @a
পার্লের vec
কমান্ডটি ব্যবহার করে , এটি একটি 8-বিট বাইটে প্যাড করে এবং মুদ্রণ করে।
পুরানো উত্তর, 268 বাইট:
এটি একটি দ্রুত এবং নোংরা প্রথম প্রচেষ্টা। আমি প্লিজস্ট্যান্ডের ফন্টটি চুরি করেছি এবং এটি আমার উত্স কোডের সাথে সংকুচিত করেছি। যেহেতু ফলাফল প্রাপ্ত স্ক্রিপ্টটি বেশিরভাগই ছাপিয়ে যায় না, তাই এখানে একটি হেক্সডাম্প রয়েছে; xxd -r
এটাকে এক্সিকিউটেবল পার্ল কোডে পরিণত করতে ব্যবহার করুন :
0000000: 7573 6520 436f 6d70 7265 7373 275a 6c69 use Compress'Zli
0000010: 623b 6576 616c 2075 6e63 6f6d 7072 6573 b;eval uncompres
0000020: 7320 2778 da85 d03d 4b03 4118 85d1 452c s 'x...=K.A...E,
0000030: b69c 72cb 7519 4894 552c 2c02 3319 ee5c ..r.u.H.U,,.3..\
0000040: d7b8 5a89 6093 4634 7e82 c490 6c91 8597 ..Z.`.F4~...l...
0000050: 80fe 7267 d660 23ae e52d 0e0f dcd6 f8c3 ..rg.`#..-......
0000060: e9d1 5e6e ccec a15c ddb5 c5d5 495e 94a3 ..^n...\....I^..
0000070: 83b7 c7f9 73f3 5216 f9a8 787a 5fea 666c ....s.R...xz_.fl
0000080: 9dd1 b763 dd98 76f8 2df6 0799 5811 7144 ...c..v.-...X.qD
0000090: 4acc ee9d b8b0 c90f 7e4a 8264 6016 cbd7 J.......~J.d`...
00000a0: 79f3 1b91 047c 4055 409e 9e54 1dda ed41 y....|@U@..T...A
00000b0: 9a20 8080 6adc 5c47 8488 7495 f621 01d7 . ..j.\G..t..!..
00000c0: 6b6c 902e b6c8 2a6a 6643 f56f e99c 115d kl....*jfC.o...]
00000d0: 5c7a f1b2 13d0 3453 790f da74 c813 751d \z....4Sy..t..u.
00000e0: 11ce d821 ad90 247f 2292 5b54 c14f 3c4e ...!..$.".[T.O<N
00000f0: 49c5 4c53 a1a7 c478 391c 714c f113 0747 I.LS...x9.qL...G
0000100: ab6c 4482 9fd2 177a 5677 6327 .lD....zVwc'
ডিকম্প্রেসড পার্ল কোডটি নিম্নলিখিত উপস্থাপিকা নিয়ে গঠিত:
y;A-Z.! ;;cd,say"P4 ",8*length," 8"for$t=<>
নিম্নলিখিত কোডের আটটি পুনরাবৃত্তি অনুসরণ করবে:
;$_=$t;y(A-Z.! )'BITMAP DATA HERE';print
BITMAP DATA HERE
ফন্টের এক সারি এনকোডিং 29 বাইট সহ প্রতিস্থাপন সহ।