freopen vanish

আমরা প্রায়ই আমাদের online judge গুলোতে প্রবলেম submit করার সময় freopen comment করতে ভুলে যাই। ফলে আমাদের একটা অনাকাঙ্খিত একটা verdict দেখতে হয়। খুবই pathetic একটা জিনিস। accepted বাদের অন্য কোন verdict দেখলেই বুকের ভেতরটা কেমন করে ওঠে। তারপর বসে বসে error খোজ critical test case বের করো। অনেক ঝামেলা। তাই গুলো থেকে মুক্তি দিতে আমাদের ছোট খাট একটা tricks করতে হবে।
তবে এখানে আমি শুধু freopen থেকে মুক্তির উপায় বলবো। আমরা যদি কোডে ছোট্ট একটা tag যোগ করি তাহলে freopen আর submit করার সময় comment করা লাগবে না। খুব সহজেই কাজ হয়ে যাবে। আমাদের online judge জানবেও না যে tag এ ভিতরে একটা freopen আছে। আর তার জন্য আমাদের freopen টাকে এই tag এর মধ্যে লিখতে হবে।

#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
#endif

তুমি চাইলে তোমার কোডের ভিতরে secret কিছু করতে চাইলে যেটা online judge কে দেখাতে চাও না সেটা এভাবে লিখতে পারো। online judge বুঝতেও পারবে না তুমি তোমার কোডে কি কি করেছো। কাজটা তুমি করতে পারো এভাবেঃ

int main(){
#ifndef ONLINE_JUDGE
	READ("in.txt");
#endif
    bktk(0);
    int cas=1,a[10],sum,ans;
    while(SDi(a[0])==1){
        repl(i,7) SDi(a[i]);
        pf("Case %d: ",cas++);
        ans = 1<<28;
        rep(j,cnt){
            sum = 0;
            rep(i,8){
                sum += (a[i] != (v[j][i]+1));
                #ifndef ONLINE_JUDGE
                    cout<<v[j][i]<<" ";
                #endif
            }
            ans = min(ans,sum);
            #ifndef ONLINE_JUDGE
                puts("");
            #endif
        } pf("%d\n",ans);
    }
    return EXIT_SUCCESS;
}

এখানে আমি প্রত্যেকটা test case নিয়ে কাজ করার সময় সেগুলো প্রিন্ট করে দেখেছি। কিন্তু এই কোডটা যখন online judge এ run করবে তখন এই tag এর ভিতরের কোন কিছু সে execute করবে না।
দারুণ জিনিস তাই না। এটা আমি জোগার করেছি codeforces এ একজনের কোড থেকে। কোডগুলো আমার কিন্তু technique টা তার কাছ থেকে ধার করা।
technique টা apply করতে কোন ঝামেলা হলে comment এ জানানোর জন্য অনুরোধ করছি। হ্যাপি প্রোগ্রামিং ! 🙂

Advertisements