এই কোডটি কীভাবে ভারতের মানচিত্র তৈরি করে?


169

এই কোডটি ভারতের মানচিত্র প্রিন্ট করে। এটা কিভাবে কাজ করে?

#include <stdio.h>
main()
{
    int a,b,c;
    int count = 1;
    for (b=c=10;a="- FIGURE?, UMKC,XYZHello Folks,\
    TFy!QJu ROo TNn(ROo)SLq SLq ULo+\
    UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^\
    NBELPeHBFHT}TnALVlBLOFAkHFOuFETp\
    HCStHAUFAgcEAelclcn^r^r\\tZvYxXy\
    T|S~Pn SPm SOn TNn ULo0ULo#ULo-W\
    Hq!WFs XDt!" [b+++21]; )
    for(; a-- > 64 ; )
    putchar ( ++c=='Z' ? c = c/ 9:33^b&1);
    return 0;
}

63
এটি কেবল অবহেলিত সি ... পুরো সমাজ রয়েছে এই ধরণের উন্মাদনার জন্য উত্সর্গীকৃত।
চিহ্নিত করুন

12
আউটপুট: codepad.org/ngiITeZ4
Andreas Rejbrand

2
# স্ট্যান্ডিও এইচ "অন্তর্ভুক্ত করুন: এটি কি সমস্ত সংকলকগুলিতে কাজ করে? আপনি মিসক্যাপ দিয়ে ওয়ার্কিং কোড পেতে পারেন তা দেখে আমি অবাক হয়েছি। হতে পারে এটি উইন্ডোজে (অ কেস সংবেদনশীল এফএস)
বিকল্প

2
এই জাতীয় আরও মজাদার কোডের জন্য [আন্তর্জাতিক আবদ্ধ সি কোড প্রতিযোগিতা] [ ioccc.org/] দেখুন
ডার্কডাস্ট

12
কেবল সচেতন থাকুন যে কোডটি ইচ্ছাকৃতভাবে বুঝতে অসুবিধা, এবং এটি শেখার থেকে খুব বেশি কিছু পাওয়ার দরকার নেই, যত তাড়াতাড়ি কোনও শিক্ষানবিশের স্তর থেকে সি শেখার বিষয়টি বিবেচনা করে।
টাইলার ম্যাকহেনরি

উত্তর:


154

দীর্ঘ স্ট্রিংটি কেবল বাইনারি ক্রম যা ASCII তে রূপান্তরিত হয়। প্রথম forবিবৃতিটি b10 এ শুরু হয় এবং[b+++21] স্ট্রিংটি 31 ফলনের পরে আসে। বাকি কোডগুলি বিট সিকোয়েন্সের মাধ্যমে কেবল 1 এবং 0 এর রূপান্তরিত করে! এর সাদা অংশে রূপান্তরিত করে এবং একবারে একটি অক্ষর মুদ্রণ করে।

কম অপ্রচলিত সংস্করণ:

#include "stdio.h"
int main (void) {
    int a=10, b=0, c=10;
    char* bits ="TFy!QJu ROo TNn(ROo)SLq SLq ULo+UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^NBELPeHBFHT}TnALVlBLOFAkHFOuFETpHCStHAUFAgcEAelclcn^r^r\\tZvYxXyT|S~Pn SPm SOn TNn ULo0ULo#ULo-WHq!WFs XDt!";
    a = bits[b];
    while (a != 0) {
        a = bits[b];
        b++;
        while (a > 64) {
            a--;
            if (++c == 'Z') {
                c /= 9;
                putchar(c);
            } else {
                putchar(33 ^ (b & 0x01));
            }
        }
    }
    return 0;
}

অদ্ভুত চালাক অংশে হয় putcharবিবৃতি। প্রথম নিন putchar'Z'দশমিক দশমিক এএসসিআইআই 90, সুতরাং 90/9 = 10 যা একটি নতুন লাইনের চরিত্র। দ্বিতীয়টিতে, দশমিক 33 হল ASCII '!'। লো-অর্ডার বিটের 33 টি টগল করা আপনাকে 32 দেয় যা একটি জায়গার জন্য ASCII। এটি বিজোড় !হলে মুদ্রিত হওয়ার কারণ bএবং bএমনকি যদি ফাঁকা স্থান মুদ্রিত হয়। বাকী কোডটি কেবল aস্ট্রিংয়ের মাধ্যমে "পয়েন্টার" হাঁটার জন্য রয়েছে ।


22
স্ট্রিংটি বিট সিকোয়েন্স নয় (নোট করুন যে কোডটিতে কোনও বিট-শিফট অপারেশন নেই)। এটি চিত্রটির একটি রান-দৈর্ঘ্যের এনকোডিং।
ইন্টারজয়

89

মূলত, স্ট্রিংটি একটি রান-দৈর্ঘ্যের এনকোডিং চিত্রের : স্ট্রিংয়ের বিকল্প অক্ষরগুলি বলে যে কোন স্থানটি কতবার আঁকতে হবে এবং একটানা কতবার বিস্মৃত চিহ্নটি আঁকতে হবে। এখানে এই প্রোগ্রামের বিভিন্ন উপাদান বিশ্লেষণ করা হল:

এনকোডড স্ট্রিং

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

লুপ জন্য বাইরের

এই লুপটি স্ট্রিংয়ের অক্ষরের উপরে চলে যায়। প্রতিটি পুনরাবৃত্তি bএক দ্বারা মান বাড়িয়ে তোলে এবং স্ট্রিংয়ের পরবর্তী অক্ষরকে নির্ধারণ করেa

লুপ জন্য অভ্যন্তরীণ

এই লুপটি স্বতন্ত্র অক্ষরগুলি এবং যখনই লাইনের শেষ প্রান্তে পৌঁছায় তখন একটি নতুন লাইন আঁকে। টানা অক্ষরের সংখ্যা a - 64। মান c10 থেকে 90 পর্যন্ত চলে যায় এবং লাইনের শেষ পৌঁছে গেলে 10 এ পুনরায় সেট হয়।

দ্য putchar

এটি আবার লিখিত হতে পারে:

++c;
if (c==90) {       //'Z' == 90
    c = 10;        //Note: 10 == '\n'
    putchar('\n');
}
else {
    if (b % 2 == 0)
        putchar('!');
    else
        putchar(' ');
}

এটি সমান bবা বিজোড়, বা প্রয়োজনের সময় একটি নতুন লাইন নির্ভর করে উপযুক্ত চরিত্রটি আঁকবে।


1
প্রথম ৩১ টি চরিত্রকে কেন উপেক্ষা করা হচ্ছে?
পঙ্কজ মাহাতো

3
@ পঙ্কজমাহাটো কারণ b10 থেকে শুরু হয় এবং সূচকটি (b++)+2131 থেকে শুরু হয়
ইন্টারজয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.