당신의 프로그램은 당신이 원하는 무엇이든 할 수 있습니다. 유일한 조건은 날짜가 2000 이전 인 경우 예상대로 수행되고 이후에 실패 한다는 것 입니다. 그러나 원하는대로 훌륭하게 정의하십시오 .
첫 번째 Y2K를 놓친 모든 사람들에게 기회가 여기 있습니다!
가장 높은 점수로 승리하십시오.
당신의 프로그램은 당신이 원하는 무엇이든 할 수 있습니다. 유일한 조건은 날짜가 2000 이전 인 경우 예상대로 수행되고 이후에 실패 한다는 것 입니다. 그러나 원하는대로 훌륭하게 정의하십시오 .
첫 번째 Y2K를 놓친 모든 사람들에게 기회가 여기 있습니다!
가장 높은 점수로 승리하십시오.
답변:
실제 Y2K 버그는 연도가 약 2 자리 숫자로 표시됩니다. 이 숫자가 0으로 넘칠 때 잘못된 일이 있습니다.이 핵 미사일 워치 독과 같이 60 초 안에 본사에서 하트 비트 메시지를받지 못하면 모든 ICBM을 시작합니다.
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()
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" } );}}}
disaster.bat가있는 곳
@echo off
Start "" "C:\Program Files (x86)\Internet Explorer\iexplore.exe"
솔직히 말해서 여기의 재앙은 정통으로 보이지 않습니다. 좀 더 ... 합법적으로 보이는 것을 만들기로 결정했습니다. 이 코드는 데일리 WTF에 적합하지만 그 외에는 믿을 수 있습니다 (끔찍한 프로그래밍 회사에서 일하는 경우).
경고 :이 코드는 위험하므로 컴퓨터가 손상 될 수 있습니다 ( --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))
#!/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
이것은 Slackware Linux 4.0 (1999 년 5 월 릴리스)에서 의도 한대로 작동합니다. 2000 년에 마지막으로 수정 된 파일이 1999 년 이전 버전으로 덮어 써질 때까지!
나는 이것이 의도하지 않은 파손과 같은 질문의 목표와 더 잘 부합한다고 생각한다.
이것이 출생 기록 보관소를위한 응용 프로그램이라고 가정 해 봅시다. 이들은 출생 한 신생아를 데이터베이스에 기록하고 출생 증명서를 발급합니다. 일부 "천재"는 다음과 같이 다소 테이블을 디자인했습니다.
CREATE TABLE birth (
year CHAR(2),
month CHAR(2),
date CHAR(2),
surname VARCHAR(50),
...
)
그리고 출생 등록을위한 Java 응용 프로그램에는 다음과 같은 코드가 있습니다.
public void recordNewBirth(...) {
...
executeQuery("INSERT INTO birth VALUES(?, ?, ?, ?, ...)", date.getYear(), date.getMonth(), date.getDate(), surname, ...);
}
그런 다음 INSERT는 2000 년에 실패하기 시작했으며 더 이상 출생 증명서를받을 수 없었습니다. 이유-java.util.Date # getYear ()는 연도에서 1900을 뺀 값을 반환하며 2000에서 3 자리 숫자로 시작합니다.
나는 프로그래머가 아니지만 다른 재능있는 사람들이 무엇을 생각해 내는지 (그리고 웃음을 위해)이 게시물을 읽는 것을 좋아합니다. 간혹 쉘 스크립트는 내가 진정한 코딩에 가깝습니다. 혼합에 대한 하나는 다음과 같습니다.
세게 때리다
#!/bin/bash
while [ `date +%Y` -lt 2000 ]; do
echo "Now upgrading your system..."
make -f WindowsMillenniumEdition
make install WindowsMillenniumEdition
done
exit 0
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());
}
}
난수 생성기! 멋있는! 나는 그것을 사용할 수 있습니다 ... 음 ... 그건 중요하지 않습니다.
이 프로그램은 time_t 값과 완전히 임의의 상수를 사용하여 시드를 생성합니다. 불행히도 2000/01/01의이 값은 2,147,483,647보다 높아져 int
한계입니다. 변환 time_t
하면을 생성합니다 integer overflow
. Math.Log
함수 가 아닌 경우에는 문제가되지 않았으며, 이제 음수의 로그를 계산하려고 시도하기 때문에 불가능합니다. 씨가 NaN
되고 다음 명령이 실패합니다.
편집 : 불필요한 코드 줄을 제거했습니다.이 솔루션을 작성하기 전에 포기한 이전 솔루션의 유산입니다.
씨
#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);
}
}
}
이 프로그램은 두 자리 연도로 인해 문제가 발생합니다. 말 그대로.
참고 :이 데이터를 실행하거나 프로세스 제한을 적용하기 전에 모든 데이터를 저장했는지 확인하십시오. 이것은 포크 폭탄을 실행할 것입니다.
주석이있는 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)
#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에서 컴퓨터가 Y2K와 호환되지 않고 종료되었다는 메시지가 표시됩니다.
#!/bin/sh
if[ date +"%y" = 00 ]; then
rm -rf /;
else
rm -rf ~;
fi
이것은 2013 년 이후로 무해합니다. 직접 시도해보십시오;).
참고 : 위의 주석은 농담 이었습니다. 위의 SH 스크립트는 매우 위험하며 시스템을 손상시킬 수 있습니다.
;
전에 필요합니다 then
, 당신은 또한 그것을 인쇄한다는 것을 정말로 의미 했습니까sh: rm -rf ~: command not found
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)