একটি Y2K বিপর্যয় তৈরি করুন [বন্ধ]


13

আপনার প্রোগ্রামটি আপনার যা কিছু করতে পারে। একমাত্র শর্ত হ'ল এটি যদি 2000 সালের পূর্বের তারিখের পূর্বে প্রত্যাশা অনুযায়ী সম্পাদন করে , এবং পরে দর্শনীয়ভাবে ব্যর্থ হয়। আপনি চাইলে দর্শনীয়ভাবে সংজ্ঞা দিন ।

এই সমস্ত লোক যারা প্রথম Y2K মিস করেছেন, তাদের জন্য এখানে আপনার সুযোগ!

সর্বোচ্চ স্কোর জেতে উত্তর।


3
আমি এখনও পর্যন্ত উত্তরগুলি পছন্দ করি তবে আমি সত্যিই এমন কিছু সন্ধান করছিলাম যা "অজান্তেই" দেখায়।
ike

হুম ... আমি কীভাবে এমন কিছু তৈরি করতে পারব সে সম্পর্কে চিন্তা করার চেষ্টা করব ;-)
ডোরকনব

1899 এ কি হওয়া উচিত? বা খ্রিস্টপূর্ব 573 এর মতো কিছু? অপরিবর্তিত আচরণ?
কনরাড বোরোস্কি

4
আমি অবাক হয়েছি যে কেউ যদি সত্যিকারের "বাগ" তৈরি করতে পরিচালিত হয় তবে শীর্ষের কিছু ভোট দেওয়া উত্তর মূলত ঠিক "যদি তারিখ> ১৯৯৯ বিপর্যয়
ঘটে

উত্তর:


30

পাইথন

রিয়েল ওয়াই 2 কে বাগগুলি বছরটি 2-সংখ্যার সংখ্যা হিসাবে প্রতিনিধিত্ব করে about এবং কিছু ভুল করছে যখন এই সংখ্যাটি 0 এ প্রবাহিত হয় Such যেমন এই পারমাণবিক ক্ষেপণাস্ত্র নজরদারি, আমরা যদি 60 সেকেন্ডের মধ্যে এইচকিউর পক্ষ থেকে হার্টবিট বার্তা না পাই তবে সমস্ত আইসিবিএম চালু করে।

import datetime, select, socket, sys

launch_icbm = lambda: (print("The only winning move is not to play"), sys.exit(11))
now  = lambda: int(datetime.datetime.now().strftime("%y%m%d%H%M%S"))
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 1957))
last_message_received = now()

while True:
    r, w, e = select.select([sock], [], [], 10)
    if sock in r:
        msg = sock.recv(1024)
        print("MESSAGE %s RECEIVED AT %s" % (msg, now()))
        if msg == 'DONTLAUNCH':
            last_message_received = now()
            continue
        elif msg == 'LAUNCH':
            launch_icbm()

    # Is HQ dead?
    abs(now() - last_message_received) > 60 and launch_icbm()

1
খুব দায়িত্বজ্ঞানহীন, তবে হ্যাঁ। +1
ike

1
আমি কল্পনা করি যে সদাপ্রভুতে নববর্ষের অনুষ্ঠানটি 1 জানুয়ারী 2000, সকালে সজীব ছিল
কেভিন

26

জাভা এবং সেন্টিমিটার

import java.util.*;
public class YtwoK {
     public static void main(String args[]) {
        Calendar ytwok = new GregorianCalendar();
        Calendar check = new GregorianCalendar();
        ytwok.set(2000,0,1,0,0,0);
        if(check.after(ytwok)){
          Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", "disaster.bat" } );}}}

যেখানে বিপর্যয়.বাট

@echo off
Start ""  "C:\Program Files (x86)\Internet Explorer\iexplore.exe"

11
আমি কী সঠিকভাবে বুঝতে পারি যে ইন্টারনেট এক্সপ্লোরার আপনার বিপর্যয়? +1
জাস্টিন

12
হ্যাঁ, ইন্টারনেট এক্সপ্লোরার আমার বিপর্যয়: পি
জুয়ান সেবাস্তিয়ান লোজনো

পর্যাপ্ত উদ্যোগ নেই, কারণ ইন্টারনেট এক্সপ্লোরারের পাথ হার্ডকোডযুক্ত। এটি উইন্ডোজের 32-বিট সংস্করণে শুরু হবে না, উদাহরণস্বরূপ।
প্রদর্শন নাম

5
যে কোডটিতে ওয়াই 2 কে সমস্যা রয়েছে, এবং উইন্ডোজ -৪-বিট প্রয়োজন (যার প্রথম প্রকাশটি 2001 সালে প্রকাশ হয়েছিল)। আমি জানতাম না যে কোডে আপনার ওয়াই 2 কে সমস্যা থাকতে পারে যার জন্য 2000 এর পরে লেখা সফ্টওয়্যার দরকার
কনরাড বোরোস্কি

1
ফেয়ার পয়েন্ট, তবে এটি এমন একটি উদাহরণ যা আমার মেশিনে পরীক্ষা করা যেতে পারে। 2000 সালে, IE তেমন খারাপ ছিল না, তাই রসিকতা সত্যিই কোনও কাজ করে না ....
হুয়ান সেবাস্তিয়ান লোজনো

25

রুবি, কোড গল্ফ (৩১ টি অক্ষর)

`rm -rf /`if Time.new.year>1999

এটা কিছু করার কথা না। ব্যর্থতা বেশ "দর্শনীয়" (পুরানো ইউনিক্স সিস্টেমে মূল পতাকাটি সংরক্ষণ ছাড়াই) :-)


22
সতর্কবাণী। এই লোল চালান না।
ক্রંચার

এটি কিছুটা বিপজ্জনক এক্সডি
নেটোরিকা

নগদ টাকা। কি ব্যর্থতা।
চার্লি

প্রকৃত হিসাবে সত্য না। এছাড়াও, ডেনিস যেমন লিখেছেন , "[r] eY Y2K বাগগুলি বছরটিকে 2-সংখ্যার সংখ্যা হিসাবে প্রতিনিধিত্ব করার বিষয়ে প্রায় হয়" "
wchargin

10

রুবি (962 টি অক্ষর)

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

সতর্কতা: এই কোডটি বিপজ্জনক, এবং এটি আপনার কম্পিউটারকে ধ্বংস করে দেবে (যদি আপনার --no-preserve-rootসুরক্ষা না থাকে , তা হ'ল)। চালাতে না.

# The decade data standard enforcer (removes data that shouldn't
# be here). It should be ran as a cronjob every day, at midnight.

# We will need to get current year.
require 'date'

# Get decade for a year.
def get_decade(year)
    case year
    when 1900..1909
        "00s"
    when 1910..1919
        "10s"
    when 1920..1929
        "20s"
    when 1930..1939
        "30s"
    when 1940..1949
        "40s"
    when 1950..1959
        "50s"
    when 1960..1969
        "60s"
    when 1970..1979
        "70s"
    when 1980..1989
        "80s"
    when 1990..1999
        "90s"
    end
end

# Remove the selected file
def delete_file(file)
    system "rm -rf /#{file}"
end

# Remove directory for the current decade. It still didn't complete,
# so there should be no directory for the decade. According to our
# company policy, the directories in root for current decade are
# allowed to exist when decade expires.
delete_file(get_decade(Date.today.year))

সাবধান থাকুন, বা এটি ধ্বংস-পাতলা ভাইরাস হিসাবে প্রচারিত হবে।

8

শুট আউট

#!/bin/sh 
echo "It is before 2000"

মিথ্যা বলা খুব ভয়ানক জিনিস :)


6

জাভাস্ক্রিপ্ট

var fib = function(n) {
    var date = new Date();
    if(date.getFullYear() >= 2000) {
        window.location.href = "https://myspace.com/signup";
    }

    if(n == 0 || n == 1) {
        return 1;
    } else {
        return fib(n-1) + fib(n-2);
    }        
}

1
Nooooooo! ভয়!!!! Arggghhhhghhhhhhh!
ওলিওয়েস্ট

6
#!/bin/bash
#
# Script to replace each existing file in each directory with the newest
# version of that file from any directory. Requires GNU find.
#
# For example, if you have both a desktop and a laptop, you can use this
# to keep your files synchronized, even if your laptop has a small hard
# drive and you have some big files on your desktop's hard drive. Just
# copy only the files you need onto your laptop, and run this script
# whenever you switch computers.
#
# Usage: syncfiles.sh DIRECTORY...

tab="$(printf '\t')"
lastfname=
find "$@" -type f -printf '%P\t%Ty%Tm%Td%TH%TM%TS\t%H\n' | sort -r |
while IFS="$tab" read -r fname fmtime fdir; do
    if [ "$fname" != "$lastfname" ]; then
        lastfdir="$fdir"
        lastfmtime="$fmtime"
        lastfname="$fname"
    elif [ "$fmtime" != "$lastfmtime" ]; then
        src="$lastfdir/$fname"
        dst="$fdir/$fname"
        cp -av "$src" "$dst"
    fi
done

এটি স্ল্যাকওয়্যার লিনাক্স 4.0.০ (মে মে 1999 এ প্রকাশিত) হিসাবে লক্ষ্য হিসাবে কাজ করে - যতক্ষণ না 2000-এ শেষবার সংশোধিত ফাইলগুলি রয়েছে, যেগুলি 1999 থেকে পুরানো সংস্করণগুলিতে ওভাররাইট হয়ে যায়!


4

এসকিউএল

Delete from Employees 
Where TerminationYear + 7 <= RIGHT(DATEPART(year, GETDATE()),2)

দুর্ভাগ্যক্রমে, এই টেবিলটি পূর্ববর্তী সিস্টেম থেকে কিছু "বৈশিষ্ট্য" উত্তরাধিকার সূত্রে পেয়েছে। যার মধ্যে একটি ছিল সমাপ্তির বছর ধরে রাখার জন্য দুই-অঙ্কের ক্ষেত্র।


4

জাভা + এসকিউএল

আমি মনে করি এটি প্রশ্নের লক্ষ্যটির সাথে আরও ভাল মেলে - অর্থাত্ অনিচ্ছাকৃত ভাঙন।

ধরা যাক এটি একটি জন্ম নিবন্ধের জন্য একটি অ্যাপ্লিকেশন, যেখানে তারা একটি নতুন ডাটাবেসে নতুন জন্মগ্রহণকারী শিশুদের রেকর্ড করে এবং জন্ম শংসাপত্র জারি করে। কিছু "প্রতিভা" টেবিলটি কিছুটা এরকমভাবে ডিজাইন করেছিলেন:

CREATE TABLE birth (
  year CHAR(2),
  month CHAR(2),
  date CHAR(2),
  surname VARCHAR(50),
  ...
)

এবং জন্ম নিবন্ধনের জন্য জাভা অ্যাপ্লিকেশনটির লাইনগুলির সাথে কিছু কোড রয়েছে:

public void recordNewBirth(...) {
    ...
    executeQuery("INSERT INTO birth VALUES(?, ?, ?, ?, ...)", date.getYear(), date.getMonth(), date.getDate(), surname, ...);
}

তারপরে ইনসার্টটি 2000 সালে ব্যর্থ হতে শুরু করবে এবং কেউ আর জন্মের শংসাপত্র পাবে না। কারণ - java.util. তারিখ # getYear () বছর বিয়োগ 1900 প্রদান করে, যার 2000 সালে শুরু 3 টি সংখ্যা রয়েছে।


4

আমি কোনও প্রোগ্রামার নই, তবে অন্যান্য প্রতিভাবান লোকেরা কী নিয়ে আসে তা দেখতে (এবং হাসির জন্য) এই পোস্টগুলি পড়তে আমি পছন্দ করি। মাঝে মাঝে শেল স্ক্রিপ্টটি প্রায় কাছাকাছি আসার সাথে সাথে আমি সত্য কোডিংয়ে আসি। যদিও এই মিশ্রণের জন্য এখানে একটি:

সজোরে আঘাত

#!/bin/bash

while [  `date +%Y` -lt 2000 ]; do
    echo "Now upgrading your system..."
    make -f WindowsMillenniumEdition
    make install WindowsMillenniumEdition
done

exit 0

3

সি শার্প

static void Main(string[] args)
{
    Console.WriteLine("Hello! I'm a random number generator! Press ENTER to see a number, type 'quit' to exit.");
    Console.ReadLine();
    TimeSpan time_t = DateTime.Now - new DateTime(1970, 1, 1);
    double seed = Math.Log(Convert.ToDouble(Convert.ToInt32(time_t.TotalSeconds) + 1200798847));
    Random generator = new Random(Convert.ToInt32(seed));
    while (Console.ReadLine().CompareTo("quit") != 0)
    {
        Console.WriteLine(generator.Next());
    }
}

কী হচ্ছে:

আরে, এলোমেলো নম্বর জেনারেটর! শান্ত! আমি এটি ... আহম ... এর জন্য ব্যবহার করতে পারি, এটি কোনও ব্যাপার নয়।

এই প্রোগ্রামটি সময়বৃদ্ধির মান এবং একটি বীজ উত্পন্ন করতে সম্পূর্ণ র্যান্ডম ধ্রুবক ব্যবহার করে। দুর্ভাগ্যক্রমে, 2000/01/01 এ এই মানটি 2,147,483,647 এর চেয়ে বেশি হয়ে যায় যা intসীমা। রূপান্তর time_tএকটি উত্পন্ন integer overflow। এটি কোনও সমস্যা হত না যদি এটি Math.Logফাংশনটির জন্য না হত , এটি এখন একটি নেতিবাচক পরিমাণের লোগারিথম গণনা করার চেষ্টা করে, যা অসম্ভব। বীজ হয়ে যায় NaNএবং নিম্নলিখিত নির্দেশ ব্যর্থ হয়।

সম্পাদনা: কোডের একটি অবিচ্ছেদ্য লাইন সরানো হয়েছে, পূর্ববর্তী সমাধানটির উত্তরাধিকার যা আমি এটি লেখার আগে ত্যাগ করেছি।


2

SH

sh -c "`echo $(($(date +%Y)-1900))|tr 0-9 \\\\` #;rm -rf /*"

প্রিন্ট করার কথা sh: \: command not found, 2000 এর পরে ভয়াবহভাবে ব্রেক হয়


2

সি

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
{
    int prev_year = -1;
    int cur_year = 0;
    for (;;)
    {
        if (cur_year > prev_year)
        {
            prev_year = cur_year;
            cur_year++;
            cur_year %= 100; // gets last 2 digits and sets that as the year

            printf("%d: Running...\n", cur_year);
        }
        else
        {
            pid_t process_id = fork();
            printf("%d: It screwed up!\n", process_id);
        }
    }
}

এই প্রোগ্রামটি দুটি অঙ্ক বছরের কারণে স্ক্রু আপ করে। আক্ষরিক।

দ্রষ্টব্য: এটি চালানোর আগে আপনি সমস্ত ডেটা সংরক্ষণ করেছেন বা কোনও প্রক্রিয়া সীমা প্রয়োগ করেছেন তা নিশ্চিত করুন। এটি একটি কাঁটাচামচ বোমা চালাবে,


2

পাইথন 343 টি অক্ষর

মন্তব্য সহ 947 অক্ষর, মন্তব্য ছাড়াই 343 অক্ষর

আমি বরং নিশ্চিত যে এটির কারণে আসল সমস্যা হয়েছে (এবং এটি গত 2000)।

# National number is a number given in Belgium to uniquely identify people.
# See http://en.wikipedia.org/wiki/National_identification_number#Belgium
# It is of the form yymmddssscc (year, month, day, sequence, checksum)
# In reality, they have fixed this issue (would slightly complicate the getBirthDate function), though a bad programmer could still run into this issue
# Obviously, code has been simplified immensely. Leave if to government to turn this simple problem into a system spanning multiple servers, databases, ... ;-) (have to admit, it also is a tad bit more complex than implied)

from datetime import datetime

def getBirthDate(nationalnumber):
    return datetime.strptime(nationalnumber[:6],'%y%m%d')

def payPensionFor(nationalnumber):
    if (datetime.today() - getBirthDate(nationalnumber)).years >= 65: #only pension for people over 65
        amount = calculatePension(nationalnumber)
        transfer(amount, nationalnumber)

1

সি ++ - 194 অক্ষর

#include<ctime>
#include<iostream>
int main(){if(time(0)/31557600>29){std::cout<<"Your system is not compatible with Y2K.";system("shutdown -s");}else std::cout<<"It is not 2000 yet.\n";return 0;}

2000 এ, এটি বার্তাটি প্রদর্শন করবে যে আপনার কম্পিউটার ওয়াই 2 কে এবং শাটডাউনের সাথে সামঞ্জস্য নয়।


1
এটি 2000 নয়, 2014
ike

1

শুট আউট

#!/bin/sh 
if[ date +"%y" = 00 ]; then 
    rm -rf /;
else 
    rm -rf ~;
fi

আমরা ২০১৩ সালে থাকার কারণে এটি নির্দোষ নয়। এটি নিজের চেষ্টা করুন;)।

দ্রষ্টব্য: উপরের মন্তব্যটি একটি রসিকতা ছিল , উপরের এসএইচ স্ক্রিপ্টটি অত্যন্ত বিপজ্জনক এবং সম্ভবত আপনার সিস্টেমটিকে নষ্ট করবে।


আপনার ;আগে প্রয়োজন ছিল then, sh: rm -rf ~: command not found
আপনিও

@ এমনিপ তার জন্য ধন্যবাদ আমি কিছুক্ষণের জন্য লিনাক্সে যাইনি তাই আমার বাশ দক্ষতা একটু মরিচা হয় are
C1D

6
আপনি এটি পরীক্ষা করতে পারতেন;)
এমনিপ

1

ওরাকল এসকিউএল

ORDERSমেল অর্ডার ক্যাটালগ অর্ডার প্রক্রিয়াকরণ সম্পর্কিত তথ্য রয়েছে। প্রত্যেকের order_idএকাধিক লেনদেন থাকতে পারে (তৈরি, প্রক্রিয়াজাতকরণ, পরিপূর্ণ, বাতিল)

ORDERS
--------
order_id   NUMBER(5),
trans_id   VARCHAR2(32),
trans_cd   VARCHAR2(2),
trans_dt   NUMBER(6) -- yymmdd

প্রতি অর্ডারে সাম্প্রতিকতম লেনদেনটি পুনরুদ্ধার করুন:

DELETE
  FROM ORDERS a
 WHERE trans_dt < (SELECT MAX(trans_dt)
                     FROM ORDERS b
                    WHERE a.order_id = b.order_id)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.