আন্ডারহ্যান্ডড প্রতিযোগিতা: ওএস যুদ্ধ [বন্ধ]


29

আমরা সবাই জানি যে সেরা অপারেটিং সিস্টেম কোনটি নিয়ে আলোচনার ফলে প্রচুর শিখা-যুদ্ধ হয়েছিল। আপনার লক্ষ্যটি এখন, আপনার প্রিয় অপারেটিং সিস্টেমটি আরও ভাল যে সিদ্ধান্ত নেওয়ার জন্য "প্রমাণ" প্রদান করুন ... আহ, না, আরও ভাল, অন্য একটি অপারেটিং সিস্টেমটি খারাপ, এমন সিদ্ধান্তযুক্ত "প্রমাণ" সরবরাহ করা।

কাজটি: একটি প্রোগ্রাম লিখুন, যা কিছু গণনা করে এবং এটি কমপক্ষে একটি ওএসে এবং কমপক্ষে অন্য একটিতে ভুলভাবে কাজ করে।

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

এটার মত

  • পার্থক্যের কারণটি সূক্ষ্ম হতে হবে, সুতরাং কোনও #ifdef _WIN32বা অনুরূপ নয়, দয়া করে! মনে রাখবেন, আপনার লক্ষ্যটি "প্রমাণ" করা যা এই নির্দিষ্ট সিস্টেমটি খারাপ, তাই লোকেরা (তাত্ক্ষণিকভাবে) আপনার কৌশলটি স্পট করতে সক্ষম হবে না!

  • যদি আপনার কোডটিতে খুব অদ্ভুত বা খুব অস্বাভাবিক অংশ থাকে তবে আপনাকে এটি কেন আছে তা মন্তব্যে এটি সমর্থন করতে হবে। অবশ্যই, এই "ন্যায়সঙ্গততা" একটি বড় মিথ্যাচার হতে পারে / করবে।

স্কোরিং:

এটি কোনও গল্ফ নয়! কোডটি সুসংহত এবং সহজ রাখা উচিত and মনে রাখবেন, আপনার লক্ষ্য এটিতে একটি বাগ লুকানো যাতে লোকেরা এটি সন্দেহ না করে। কোডটি যত সহজ, সন্দেহজনক এটি তত কম।

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

যথারীতি আমি বিজয়ী হিসাবে কোনও উত্তরকে বেছে নেওয়ার অধিকারকে আটকে রাখি যদি এটি কোনও বিষয়গত মানদণ্ডে সর্বাধিক ভোটের সাথে 10% বা 1 পয়েন্টের চেয়ে বেশি না হয়।


5
আকর্ষণীয়ভাবে make (1)প্রতিটি ইউনিক্স বাক্সে এবং সঠিকভাবে কিছু উইন্ডোজ বাক্সে সঠিকভাবে কাজ করে। ওএসের কারণে নয়, ফাইল সিস্টেমগুলির কারণে। ফাইল সংশোধনের তারিখ কম নির্ভুলতায় রাখে এমন কোনও ফাইল সিস্টেম makeদ্রুত মেশিনে সঠিকভাবে ব্যর্থ হতে পারে ।
ডিসেমেক

1
@ ডিএমকে: এই কারণেই আমি আনন্দিত যে আমি সবকিছু খোলা রাখিনি, এবং আপনাকে কিছু ইনপুট পড়তে হবে এবং কিছু সাধারণ গণনা করতে হবে।
বনাম

10
আমি কেবল এটি এখনই
অনুধাবন করেছি

3
উইন্ডোজ এবং <সন্নিবেশ লিনাক্স ডিস্ট্রিবিউশন> তবে ম্যাকের জন্য কাজ করে না এমন একটি উত্তরের জন্য এখানে আশা করা যায়।
কেসি কুবাল

1
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ ছদ্মবেশী চ্যালেঞ্জগুলি এখন আর এই সাইটে অন টপিক নয়। meta.codegolf.stackexchange.com/a/8326/20469
বিড়াল

উত্তর:


15

ইউনিক্স শেল + স্ট্যান্ডার্ড ইউটিলিটিস

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

নিম্নলিখিতটি সর্বাধিক সিপিইউ সময়ের সাথে প্রক্রিয়াটির নাম পাওয়ার জন্য পোর্টেবল উপায় হওয়া উচিত (আমি স্পষ্টত লিনাকনিজম এড়ানোর চেষ্টা করেছি তবে এটি সোলারিসে পরীক্ষা করে দেখিনি):

ps -A -o time= -o comm= | sort | tail -n 1 | cut -d ' ' -f 2

সুতরাং আমাদের স্ক্রিপ্ট সহজভাবে

killall `ps -A -o time= -o comm= | sort | tail -n 1 | cut -d ' ' -f 2`

সেরা ফলাফলের জন্য রুট হিসাবে চালান, যাতে এটি অন্যান্য ব্যবহারকারীদের থেকে প্রক্রিয়াগুলিকে হত্যা করতে পারে।

লিনাক্স এবং বিএসডি

এটি লিনাক্সে কাজ করে এবং বিএসডিগুলিতে কাজ করা উচিত, কারণ killall argনামের প্রক্রিয়াগুলিকে হত্যা করে arg

সোলারিস

যাইহোক, সোলারিসে, যদি কোনও ব্যবহারকারী 9কোনও অসীম লুপে নামকরণ করা একটি প্রোগ্রাম চালাচ্ছেন , স্ক্রিপ্টটি সিস্টেমটি নামিয়ে আনবে । এই কারণ:

সোলারিসে, killall argমানে সিগন্যাল দিয়ে সমস্ত প্রক্রিয়া হত্যা করাarg । সুতরাং কমান্ড লাইন হয়ে যায় killall 9। হিসাবে 9সোলারিস উপর SIGKILL জন্য সংখ্যা , এই সকল প্রক্রিয়ার হত্যা করবে এবং যার ফলে সিস্টেম নিচে আনা।

বিশেষ দ্রষ্টব্য

এই শেল ইনজেকশন ইস্যুটি লিনাক্সে প্রযোজ্য নয়, কারণ দূষিত ব্যবহারকারী -KILLপ্রক্রিয়া নাম হিসাবে কিছু বিশেষ যুক্তি সরবরাহ করতে পারলেও killall -KILLনির্দোষভাবে কোনও ব্যবহারের বার্তা মুদ্রণ করবে।


3
killallহয় না একটি উদাহরণ। এটি একই নামের সাথে দুটি ভিন্ন প্রোগ্রাম। প্রতিটি সংস্করণ সঠিকভাবে কাজ করছে।
dmckee

7
হ্যাঁ, তবে শেল স্ক্রিপ্টটি সঠিকভাবে কাজ করছে না।
যান্ত্রিক শামুক

12
আপনি কী লক্ষ্য করেছেন কীভাবে ক্রোমিয়াম এবং কাঁটাচামচ বোমা তুলনাযোগ্য? ;)
কাওড

7
@ কেওডি: মূল পার্থক্যটি হ'ল কাঁটাচামচ বোমাগুলি কম স্মৃতি ব্যবহার করে।
যান্ত্রিক শামুক 10

1
শুধু লক্ষ যেমন জিনিস যেমন "গুগল ক্রোমিয়াম" যে: গুগল ক্রোম ব্রাউজার হয় ওপেন সোর্স উপর ভিত্তি করে ক্রোমিয়াম ব্রাউজার, কিন্তু শুধুমাত্র সাবেক গুগল-নির্দিষ্ট কোড রয়েছে এবং Google এর নাম সংযুক্ত করেছেন।
অঙ্কো

18

পাইথন

এই প্রোগ্রামটি কমান্ড লাইনে নির্দিষ্ট চিত্রটি খুলবে এবং এটি প্রদর্শন করবে।

import Image
import sys

with open(sys.argv[1]) as f:
    im = Image.open(f)
    im.show()

লিনাক্সে কাজ করে, উইন্ডোতে কাজ করে না।

উইন্ডোজ ফাইলগুলি খোলার উপায়ের কারণে এটি ঘটে। সমস্ত অপারেটিং সিস্টেমে সঠিকভাবে কাজ করার জন্য বাইনারি মোড অবশ্যই নির্দিষ্ট করতে হবে।


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

5

লিটল এন্ডিয়ান (ইন্টেল x86) বনাম বিগ এন্ডিয়ান (আইবিএম পাওয়ার 7)

নন-হোস্ট অর্ডারে মাল্টি-বাইট বাইনারি পরিমাণ রয়েছে এমন কোনও ফাইল ফর্ম্যাট ভুল ব্যাখ্যা করার ঝুঁকি চালায়। এখানে এমন একটি ফাংশন যা কাঁচা অডিও নিয়ে যায়, ডাব্লুএইভি ফাইল (যা একটি মাইক্রোসফ্ট লিটল এন্ডিয়ান ফাইল ফর্ম্যাট) থেকে এক্সট্রাক্ট করা হয়, প্রশস্ততা অর্ধেক করে দেয় এবং অচল অডিওকে আউটপুট করে।

#include <stdio.h>

int main()
{
    short audio;
    while (fread(&audio, sizeof(short), 1, stdin))
    {
        audio >>= 1;
        fwrite(&audio, sizeof(short), 1, stdout);
    }
    return 0;
}

সামান্য এডিয়ান মেশিনে, এটি দুর্দান্ত কাজ করে তবে বড় এন্ডিয়ান মেশিনে এটি একটি বিপর্যয়। যেমন

01001101 11001110 -> CE4D (little endian format)

সামান্য এন্ডিয়ান এ ডান দিকে চালিত করুন:

00100110 01100111 -> 8726 (correct)

বড় এন্ডিয়ান এ ডান দিকে চালিত করুন:

00100110 11100111 -> E726 (not correct)

খেয়াল করুন কিছু আপু সঠিক! প্রকৃতপক্ষে, এটি একটি 50:50 সম্ভাবনা যে আউটপুটটি সঠিক হবে, তার উপর নির্ভর করে সাউন্ড নমুনার সর্বনিম্ন উল্লেখযোগ্য বিট 0 বা 1 হয়!

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


5

GTB

:"-→_[_+_→_]

কম্পিউটারে এটি কাজ করে, তবে আমার টিআই -৪৪ ক্যালকুলেটে এটি কাজ করে না। কেন?

ক্যালকুলেটরটিতে র্যামের ওভারফ্লো হয় এবং সম্ভাব্যভাবে সাফ হয়ে যায়, উইন্ডোজের জন্য এমুলেটর থাকা অবস্থায়, সীমিত বরাদ্দের কারণে র‌্যাম এমুলেটর দ্বারা উপচে পড়া যায় না।


এটার কাজ কি?
ইলমারি করোনেন

প্রশ্নটিতে একটি স্পয়লার (হলুদ বাক্স) রয়েছে যা আপনি লুকানো পাঠ্যটি দেখতে মাউস করতে পারেন।
টিমটেক

4
হ্যাঁ, তবে এটি কী করে যা র‌্যাম উপচে পড়ে না ? এটি আসলে "কিছু গণনা করে", যেমন প্রশ্নটি জিজ্ঞাসা করে, এবং যদি তাই হয় তবে কী?
ইলমারি করোনেন

@ ইলমারিকারোনেন এটি কেবল স্ট্রিংগুলিকে সম্মতি দেয়। (আপনি অবশ্যই উল্লেখ করতে পারেন)
টিমটেক

4

সি

100 টি সমস্যার এই সমাধানটি (কোলাটজ সিকোয়েন্স সম্পর্কে) ইউভিএ অনলাইন বিচারক গ্রহণ করেছেন।

তবে, এই কোডটি কেবলমাত্র * নিক্স প্ল্যাটফর্মে সঠিকভাবে কাজ করে যেহেতু longটাইপটি -৪ -বিট স্বাক্ষরিত পূর্ণসংখ্যার হিসাবে প্রয়োগ করা হয়। উপর উইন্ডোজ , কোড পূজা, ব্যবহার undefined যেহেতু long, টাইপ 32 বিট স্বাক্ষর পূর্ণসংখ্যা হিসাবে বাস্তবায়িত হয় যখন মধ্যবর্তী মান এক cyc()ফাংশন চাহিদা অন্তত 32 বিট প্রতিনিধিত্ব করতে।

#include <stdio.h>

#define swap(a, b, t) t __tmp__ = a; a = b; b = __tmp__;
#define M 1000000

short l[M] = {0, 1};

int cyc(long n) { // HERE
    if (n < M && l[n]) return l[n];
    n = n & 0x1 ? 3 * n + 1 : n >> 1;
    return n < M ? (l[n] = cyc(n)) + 1 : cyc(n) + 1;
}

int max(int a, int b) { return a > b ? a : b; }

int main() {
    #ifndef ONLINE_JUDGE
    // freopen("input.txt", "r", stdin);
    #endif
    int i, j, m;
    while (scanf("%d %d", &i, &j) == 2) {
          printf("%d %d ", i, j);
          if (i > j) { swap(i, j, int); }
          for (m = 0; i <= j; i++)
              m = max(m, cyc(i));
          printf("%d\n", m);
    }

    return 0;
}

এটিকে আরও বেমানান করার আরও একটি উপায় হ'ল অ্যারেটি lভিতরে main()andুকিয়ে cyc()ফাংশনে সম্পর্কিত পরিবর্তনগুলি করা । যেহেতু এক্সিকিউটেবলটি উইন্ডোজে ডিফল্ট হিসাবে 2 এমবি স্ট্যাকের জন্য অনুরোধ করার জন্য সেট করা থাকে, তাই প্রোগ্রামটি এখনই ক্র্যাশ হয়ে যায়।


2

পাইথন

ইনপুট টাইমআউটগুলি সন্ধান করার সময় আমি স্ট্যাকওভারফ্লোতে এটি পেলাম

 import signal 
 TIMEOUT = 5

 def interrupted(signum, frame): 
     print 'interrupted!' 
 signal.signal(signal.SIGALRM, interrupted) 

 def input(): 
     try: 
         print 'You have 5 seconds to type in your stuff...' 
         foo = raw_input() 
         return foo 
     except: 
         return

 signal.alarm(TIMEOUT) 
 s = input()
 signal.alarm(0) 
 print 'You typed', s 

এটি উইন্ডোজের পক্ষে কাজ করে না।


কেন এটি উইন্ডোজে কাজ করছে না? উইন্ডোজ পসিক্স সিগস সমর্থন করে না বলে আমি কি ঠিক অনুমান করছি? তারপরে এটি পাইথনের স্ট্যান্ডার্ড লাইব্রেরিগুলির উভয় ওএসে কার্যকারিতা প্রকাশ করার বিষয় মাত্র। আমি মনে করি না এটি চ্যালেঞ্জের চেতনা অনুসরণ করে (উদাহরণস্বরূপ পাইথনের কাঁটা স্পষ্ট কারণেই কাজ করবে না) তবে এটি পাইথনের ত্রুটি (আরও সত্য যে এটি ব্যাখ্যা করা হয়েছে), উইন্ডোজ নয় '' উদাহরণস্বরূপ: সহ conio.hএকই প্রভাব থাকবে তবে সি এমনকি সংকলন করবে না।
কাওড

@ কেওডি: সত্য, আমি জানিনা কেন এটি উইন্ডোজে কাজ করে না। সম্ভবত লিনাক্সের এতে কিছু বৈশিষ্ট্য রয়েছে যা উইন্ডোজ না, তাই এটি উইন্ডোজ নয় লিনাক্সে প্রয়োগ করতে সক্ষম able
beary605

তারপরে আমি এটি অনুমান করেছি: আপনি পাইথন দ্বারা প্রকাশিত পসিক্স কার্যকারিতা ব্যবহার করছেন। পূর্বের বর্ণিত কারণের কারণে এটি উত্তর হিসাবে উপযুক্ত নয়, তবে ওহে আমি উপনিবেশের আরেকটি পিঁপড়ে;) আপনি যা দেখছেন তা উইন্ডোজ নয় পাইথনের "দোষ"। এটি দেখুন: docs.python.org/library/signal.html#signal.signal
kaoD

উইন্ডোজ এপিআই থ্রেডের মধ্যে থেকে কোনও পাইপে বাতিলযোগ্য পঠন সরবরাহ করে না।
জোশুয়া

0

লিনাক্স + ব্যাশ + জিএনইউ কোর্টিলস

rm --no-preserve-root -R -dir /

এটি রুট ফোল্ডার এবং এর উইন্ডোজটিতে বিদ্যমান না থাকা সমস্ত কিছু মুছে ফেলবে, এমনকি আপনি উইন্ডোজের জন্য ব্যাশ ইনস্টল করলেও :)


এটি এখন উইন্ডোজে কাজ করে যে উইন্ডোজটিতে একটি লিনাক্স সাবসিস্টেম অন্তর্নির্মিত আছে I (আমি মনে করি, এটি চেষ্টা করবে না)
পাভেল

@ পাভেল প্রিটি খোলার পক্ষে সহজ cmd.exeএবং rmএটি কার্যকর হয় না তা টাইপ করুন ।
এমডি এক্সএফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.