Напомним условия конкурса:
«Побеждает тот, кто реализует заданную программу самым оригинальным, запутанным, сложным и невообразимо идиотским способом. Задание: напишите программу, выводящую время, большее текущего на 23 часа».
Выбрать лучших из лучших было очень тяжело: все ваши программы были идиотскими, от них хотелось домой к маме и плакать. Даже если вы не попали в топ победителей, не расстраивайтесь: вы причинили нам достаточные страдания от созерцания вашего кода.
Победитель #1: Айрат Камалетдинов, C++
«Что я сделал перед тем, как написать программу?
/* тут подставьте ту мелодию, когда Джонни Айв рассказывает про новый продукт Apple — youtu.be/IOqZXD6cLvg */
Я переосмыслил фразу «время через 23 часа». Программа выводит надпись «время» вертикально (что само по себе уже что-то невероятное!), а также ровно через центр горизонтальной надписи «через 23 часа» (чувствуете силу слова «через»?).
А ещё я обожаю классы, классы — моя страсть. Думаю, получилось достаточно по-индусски».
Приз: 1 фирменная футболка Tproger, 5 фирменных наклеек.
#include <iostream>
using namespace std;
class Locale
{
private:
const int zero = 0;
const char russian[8] = {'R', 'u', 's', 's', 'i', 'a', 'n'};
public:
void setLocaleRussian() const
{
setlocale(zero, russian);
}
};
class Time
{
private:
char time[8][16];
public:
void setTime()
{
time[0][0] = '\0';
time[0][1] = '\0';
time[0][2] = '\0';
time[0][3] = '\0';
time[0][4] = '\0';
time[0][5] = '\0';
time[0][6] = '\0';
time[0][7] = '\0';
time[0][8] = '\0';
time[0][9] = '\0';
time[0][10] = '\0';
time[0][11] = '\0';
time[0][12] = '\0';
time[0][13] = '\0';
time[0][14] = '\0';
time[0][15] = '\0';
time[1][0] = '\0';
time[1][1] = '\0';
time[1][2] = '\0';
time[1][3] = '\0';
time[1][4] = '\0';
time[1][5] = '\0';
time[1][6] = '\0';
time[1][7] = '\0';
time[1][8] = '\0';
time[1][9] = '\0';
time[1][10] = '\0';
time[1][11] = '\0';
time[1][12] = '\0';
time[1][13] = '\0';
time[1][14] = '\0';
time[1][15] = '\0';
time[2][0] = '\0';
time[2][1] = '\0';
time[2][2] = '\0';
time[2][3] = '\0';
time[2][4] = '\0';
time[2][5] = '\0';
time[2][6] = '\0';
time[2][7] = 'в';
time[2][8] = '\0';
time[2][9] = '\0';
time[2][10] = '\0';
time[2][11] = '\0';
time[2][12] = '\0';
time[2][13] = '\0';
time[2][14] = '\0';
time[2][15] = '\0';
time[3][0] = '\0';
time[3][1] = '\0';
time[3][2] = '\0';
time[3][3] = '\0';
time[3][4] = '\0';
time[3][5] = '\0';
time[3][6] = '\0';
time[3][7] = 'р';
time[3][8] = '\0';
time[3][9] = '\0';
time[3][10] = '\0';
time[3][11] = '\0';
time[3][12] = '\0';
time[3][13] = '\0';
time[3][14] = '\0';
time[3][15] = '\0';
time[4][0] = 'ч';
time[4][1] = 'е';
time[4][2] = 'р';
time[4][3] = 'е';
time[4][4] = 'з';
time[4][5] = '\0';
time[4][6] = '2';
time[4][7] = 'е';
time[4][8] = '3';
time[4][9] = '\0';
time[4][10] = 'ч';
time[4][11] = 'а';
time[4][12] = 'с';
time[4][13] = 'а';
time[4][14] = '\0';
time[4][15] = '\0';
time[5][0] = '\0';
time[5][1] = '\0';
time[5][2] = '\0';
time[5][3] = '\0';
time[5][4] = '\0';
time[5][5] = '\0';
time[5][6] = '\0';
time[5][7] = 'м';
time[5][8] = '\0';
time[5][9] = '\0';
time[5][10] = '\0';
time[5][11] = '\0';
time[5][12] = '\0';
time[5][13] = '\0';
time[5][14] = '\0';
time[5][15] = '\0';
time[6][0] = '\0';
time[6][1] = '\0';
time[6][2] = '\0';
time[6][3] = '\0';
time[6][4] = '\0';
time[6][5] = '\0';
time[6][6] = '\0';
time[6][7] = 'я';
time[6][8] = '\0';
time[6][9] = '\0';
time[6][10] = '\0';
time[6][11] = '\0';
time[6][12] = '\0';
time[6][13] = '\0';
time[6][14] = '\0';
time[6][15] = '\0';
time[7][0] = '\0';
time[7][1] = '\0';
time[7][2] = '\0';
time[7][3] = '\0';
time[7][4] = '\0';
time[7][5] = '\0';
time[7][6] = '\0';
time[7][7] = '\0';
time[7][8] = '\0';
time[7][9] = '\0';
time[7][10] = '\0';
time[7][11] = '\0';
time[7][12] = '\0';
time[7][13] = '\0';
time[7][14] = '\0';
time[7][15] = '\0';
}
void getTime() const
{
cout << time[0][0];
cout << time[0][1];
cout << time[0][2];
cout << time[0][3];
cout << time[0][4];
cout << time[0][5];
cout << time[0][6];
cout << time[0][7];
cout << time[0][8];
cout << time[0][9];
cout << time[0][10];
cout << time[0][11];
cout << time[0][12];
cout << time[0][13];
cout << time[0][14];
cout << time[0][15];
cout << endl;
cout << time[1][0];
cout << time[1][1];
cout << time[1][2];
cout << time[1][3];
cout << time[1][4];
cout << time[1][5];
cout << time[1][6];
cout << time[1][7];
cout << time[1][8];
cout << time[1][9];
cout << time[1][10];
cout << time[1][11];
cout << time[1][12];
cout << time[1][13];
cout << time[1][14];
cout << time[1][15];
cout << endl;
cout << time[2][0];
cout << time[2][1];
cout << time[2][2];
cout << time[2][3];
cout << time[2][4];
cout << time[2][5];
cout << time[2][6];
cout << time[2][7];
cout << time[2][8];
cout << time[2][9];
cout << time[2][10];
cout << time[2][11];
cout << time[2][12];
cout << time[2][13];
cout << time[2][14];
cout << time[2][15];
cout << endl;
cout << time[3][0];
cout << time[3][1];
cout << time[3][2];
cout << time[3][3];
cout << time[3][4];
cout << time[3][5];
cout << time[3][6];
cout << time[3][7];
cout << time[3][8];
cout << time[3][9];
cout << time[3][10];
cout << time[3][11];
cout << time[3][12];
cout << time[3][13];
cout << time[3][14];
cout << time[3][15];
cout << endl;
cout << time[4][0];
cout << time[4][1];
cout << time[4][2];
cout << time[4][3];
cout << time[4][4];
cout << time[4][5];
cout << time[4][6];
cout << time[4][7];
cout << time[4][8];
cout << time[4][9];
cout << time[4][10];
cout << time[4][11];
cout << time[4][12];
cout << time[4][13];
cout << time[4][14];
cout << time[4][15];
cout << endl;
cout << time[5][0];
cout << time[5][1];
cout << time[5][2];
cout << time[5][3];
cout << time[5][4];
cout << time[5][5];
cout << time[5][6];
cout << time[5][7];
cout << time[5][8];
cout << time[5][9];
cout << time[5][10];
cout << time[5][11];
cout << time[5][12];
cout << time[5][13];
cout << time[5][14];
cout << time[5][15];
cout << endl;
cout << time[6][0];
cout << time[6][1];
cout << time[6][2];
cout << time[6][3];
cout << time[6][4];
cout << time[6][5];
cout << time[6][6];
cout << time[6][7];
cout << time[6][8];
cout << time[6][9];
cout << time[6][10];
cout << time[6][11];
cout << time[6][12];
cout << time[6][13];
cout << time[6][14];
cout << time[6][15];
cout << endl;
cout << time[7][0];
cout << time[7][1];
cout << time[7][2];
cout << time[7][3];
cout << time[7][4];
cout << time[7][5];
cout << time[7][6];
cout << time[7][7];
cout << time[7][8];
cout << time[7][9];
cout << time[7][10];
cout << time[7][11];
cout << time[7][12];
cout << time[7][13];
cout << time[7][14];
cout << time[7][15];
}
void endLine() const
{
cout << endl;
}
};
class Pause
{
private:
const char variable[6] = "pause";
public:
void systemPause() const
{
if(variable == "pause")
{
system(variable);
}
else
{
const char anotherVariable[6] = "pause";
system(anotherVariable);
}
}
};
class Return
{
private:
const int zero = (int) ((((((((((((15346.0/23.0) + 254.7826) - 2.12)*12.4)/5.18) + 1010.0)/1001) + 1.79118) - 4.3445)/6.0) + 3.45) - 3.55925)*0; //то же самое, что (0)*0 :)
public:
int returnZero()
{
switch(zero)
{
case 0:
return zero;
default:
return (zero - 1 + zero + 1);
}
}
};
int main()
{
Locale IC_locale;
Time IC_time;
Pause IC_pause;
Return IC_return;
IC_locale.setLocaleRussian();
IC_time.setTime();
IC_time.getTime();
IC_time.endLine();
IC_time.endLine();
IC_pause.systemPause();
IC_return.returnZero();
}
Победитель #2: Константин Захарченко, Java
«Данная программа специально оптимизирована, чтобы максимально задействовать вычислительные способности компьютера. Алгоритм является рекурсивным. При проходе мы выбираем случайное число, далее проверяем, затем в случае первого прохода, проверяем чтобы оно было больше нуля, а также проверяем не достигли ли мы конечного результата.
После, используя наше случайное число, запускаем в отдельных потоках сам код расчета времени. Проверяем значение результата последнего времени, и если оно слишком большое, мы прибавляем к нему значение, рассчитанное по тривиальной формуле. Иногда в этой формуле, правда, происходит деление на ноль, из-за несовершенства языка программирования и IDE, но это никак не влияет на работу алгоритма, так что можно эту ситуацию просто игнорировать. Алгоритм выдает значения с точностью ±2. Для лучших показателей мы, их уточняем специальным отдельным алгоритмом.
После всего происходит рекурсивный вызов (какой же алгоритм без рекурсивных вызовов?)».
Приз: 1 футболка, 4 наклейки Tproger.
package LoginServer;
import java.util.*;
/**
* Created by kostya on 14.08.2016.
*/
public class Fun {
private static final long TWENTY_THREE_HOURS_IN_MILLIS = 82800000;
private static long timeResult = 1001;
private static long startTime;
private static int threadsCount = 1;
public static void main(String[] args) {
startTime = System.currentTimeMillis();
System.out.println(startTime);
//System.out.println("control " + (startTime + TWENTY_THREE_HOURS_IN_MILLIS));
getNextTime();
}
public static synchronized void getNextTime() {
threadsCount--;
int random = (int) (Math.random() * 5);
if (threadsCount <= 0 && random == 0) {
random = 1;
}
if (timeResult == startTime + TWENTY_THREE_HOURS_IN_MILLIS) {
System.out.println("Result = " + timeResult);
System.exit(0);
}
for (int i = 0; i < random; i++) {
final Thread thread = new Thread(new Runnable() {
public void run() {
threadsCount++;
if (timeResult < startTime + TWENTY_THREE_HOURS_IN_MILLIS) {
try {
timeResult += (long) ((Math.random() + 1) * ((long) (5 + (10 % 500) * 42145424 + 11 - System.currentTimeMillis() % 250 * 16 / 12 + Math.random() * (startTime % 1000000) + 44342 / 3 * 45 + TWENTY_THREE_HOURS_IN_MILLIS * 5034 % 20 * 128 + 807) % (startTime + TWENTY_THREE_HOURS_IN_MILLIS - timeResult + 1)));
} catch (ArithmeticException e) {
}
if (Math.abs(timeResult - (startTime + TWENTY_THREE_HOURS_IN_MILLIS)) < 3) {
timeResult = makeResultAccurate(timeResult, startTime + TWENTY_THREE_HOURS_IN_MILLIS);
}
getNextTime();
} else if (timeResult > startTime + TWENTY_THREE_HOURS_IN_MILLIS) {
try {
timeResult -= (long) ((Math.random() + 1) * ((long) (5 + (10 % 500) * 42145424 + 11 - System.currentTimeMillis() % 250 * 16 / 12 + Math.random() * (startTime % 1000000) + 44342 / 3 * 45 + TWENTY_THREE_HOURS_IN_MILLIS * 5034 % 20 * 128 + 807) % (startTime + TWENTY_THREE_HOURS_IN_MILLIS - timeResult + 1)));
} catch (ArithmeticException e) {
}
if (Math.abs(timeResult - (startTime + TWENTY_THREE_HOURS_IN_MILLIS)) < 3) {
timeResult = makeResultAccurate(timeResult, startTime + TWENTY_THREE_HOURS_IN_MILLIS);
}
getNextTime();
}
}
});
thread.start();
}
}
public static long makeResultAccurate(long resultNow, long requiredResult){
return requiredResult;
}
}
Победитель #3: Сергей Панферов, Brainfuck
«Алгоритм разработан специально для крупных коммерческих фирм, банков, заводов, марсиан и умного дома.
Если кратко: процесс написания программы заставил меня забыть о том, как я писал программу. Этот вывод чисел… когда у тебя нет операторов if-else, а есть только [ ] (while). Это печально. Мои мозги еле-еле смогли отладить эту программу. Не зря BF так называется».
Приз: 1 футболка, 3 наклейки Tproger.
>>++++++++++[>+++++++++>+++++++>++++++>++++++++>+++>+++++++>++++++++>+++>+++++++>++++++++>++++++++>++++++++>+++>++++++++>++++++++>+++++++++>++++++>+++>+++++++++>+++++>+++++>++++>+++++>+++++>+++++++++[<]>-]>--->++>+++++>++++>++>+++>+++>++>++>->+++++>++>++>-->->--->+++>++>+>-->->+++++>>++>+++[<]>[.>]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,------------------------------------------------>,------------------------------------------------><[>>>>+<<<<-]<[>>>>>++++++++++<<<<<-]>>>>>->+<[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[->[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++..---.+++.[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++.+.[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++..[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++.-.[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++.--.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.++++++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.+++++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.++++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.+++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.+++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.+.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++..[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.-.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]>[-]]<<]>[+++++++++++++++++++++++++++++++++++++++++++++++++.++.>[-]]<<
Бонус: такой же приз получает Елена, которая прислала свой вариант программы на WhiteSpace — языке, в котором используются только пробелы, переводы строки и табуляция.
Это программа, написанная на
WhiteSpace. Я думаю, что
уже за
это можно дать человеку маечку. Пусть даже вне конкурса. А
вообще алгоритм очень прост. Вводится время, отнимается единица, проверяется выход за границы, выводится
результат. В описании алгоритма будет дан
компилятор этого языка. Так же будет
дан код программы, где
пробел будет
отмечен как П, табуляция - Т, перевод на новую строку - Н . А принцип
“ Написанное
однажды - лучше не
читать” соблюден. Конец
этой
программы
Победитель #4: Ярослав Лакаев, С
«Алгоритм: «О божечки оно работает!»»
Приз: 3 наклейки.
#include <stdio.h>
#include <sys/time.h>
#define p printf
#define r putchar
#define n "\n\e[1;1H\e[2J"
#define l long
#define f for
#define v void
#define j int
#define k char
#define N P(i);
#define u usleep
#define you p(n);u(T);}}}o(g,3e5,1);o(w,1e5,3);o(q,4e5,1);o(a,4e4,4);
#define know "\x49\x74\x20\x69\x73\x20\x67\x6f\x6e\x6e\x61\x20\x62\x65\x20\x6c\x65\x67\x65\x6e\x2e\x2e\x2e";
#define this f(;;){S=time(0);l h=S/60/60%24;
#define scare {f(j x=0;(E[x])!='\0';x++){f(j y=0;y<=x;y++){r(E[y]);}
#define code l m=S/60%60;l s=S%60;P(i-3);h>9?p("%s%li:",d,h):p("%s0%li:",d,h);
#define is m>9?p("%li:",m):p("0%li:",m);s>9?p("%li%s\n",s,d):p("0%li%s\n",s,d);
#define Best N p(" ( (ヽ\n");N p(" | |、\\n");N p(" | 丿 \ ⌒)\n");N p(" | | ) /\n");
#define I j main(){k*g=
#define kidding N p(" レ ノ ヽ_つ\n");N p(" / /\n");N p(" / /|\n");
#define but l i=0;l S;v P(l c){f(l i=c;i>=0;i--){p(" ");}}l b=0;l t=15e4;
#define may k*a="\x4c\x45\x47\x45\x4e\x44\x41\x52\x59\x21";k*d="";j c;v o(k*E,l T,j z){f(;z>0;z--)
#define safe if(t==99){p(n);t=15e4;d=!(S%11)?" || ":!(S%7)?" ## ":!(S%3)?" $$ ":!(S%13)?" !! ":
#define regards N p(" ノ ) Lノ\n");N p("(_/\n");u(t);t=(t=t-(t/1e2));
#define Just p(" \( ͡° ͜ʖ ͡°)\n");N p(" > ⌒ヽ\n");N p(" / へ\\n"); N p(" / / \\\n");
#define it k*w="\x77\x61\x69\x74\x20\x66\x6f\x72\x20\x69\x74\x2e\x2e\x2e";k*q="\x64\x61\x72\x79\x21";
#define likely " ~~ ";continue;}N p("⊂_ヽ\n");N p(" \\\n"); N
#define pl7ofit p(n);b=(i>50||(i>0&&b==1))?1:0;i=b==1?i-1:i+1;}}
I know it may scare you but this code is safe
likely //...
Just kidding
Best regards
pl7ofit
Победитель #5: Сергей Охрименко, C++
«Программа написана в лучших олимпиадных традициях. Для начала вычисляются все простые до 100000, решетом Эратосфена за линейное время, потом находим количество секунд от начала дня, инициализируем рандом и после этого строится дерево отрезков, с обновлением чисел на отрезке, входные данные которого случайные простые числа с предыдущего решета. После всех этих операций начинается цикл по всем поддеревам дерева отрезков и считается сумма на отрезках, находится минимум между суммой и значением «время»+23. Найдя отрезок, разница суммы которого и «время»+23 минимальна, мы переходим к бинарному поиску, для подгонки ответа до точного решения и в конце мы обратно считаем от количества секунд значение «время»+23».
Приз: 2 наклейки.
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
long long get_second(int h, int m, int s){
return h*3600+m*60+s;
}
void write_time(int sec){
cout << setw(2) << setfill('0') << sec / 3600 << ":";
cout << setw(2) << setfill('0') << sec/60%60 << ":";
cout << setw(2) << setfill('0') << sec%60 << endl;
}
const int N = 100000;
vector v(7*1e5);
vector p(7*1e5, -1000000);
void push(int i, int tl, int tr){
if(p[i]!=-1000000){
v[i] = p[i] * (tr-tl+1);
if(tl!=tr)
p[i*2] = p[i];
p[i*2+1] = p[i];
p[i] = -1000000;
}
}
long long get(int i, int tl, int tr, int l, int r){
push(i, tl, tr);
if(tl>r || tr<l) return 0; if(tl>=l && tr<=r) return v[i]; int d = (tl+tr)>>1;
return get(i*2, tl, d, l, r) + get(i*2+1, d+1, tr, l, r);
}
void update(int i, int tl, int tr, int l, int r, int x){
push(i, tl, tr);
if(tl>r || tr<l) return; if(tl>=l && tr<=r){ p[i] = x; push(i, tl, tr); return; } int d = (tl+tr)>>1;
update(i*2, tl, d, l, r, x);
update(i*2+1, d+1, tr, l, r, x);
v[i] = v[i*2] + v[i*2+1];
}
int main() {
int lp[N+1];
vector pr;
for (int i=2; i<=N; ++i) {
if (lp[i] == 0) {
lp[i] = i;
pr.push_back (i);
}
for (int j=0; j<(int)pr.size() && pr[j]<=lp[i] && i*pr[j]<=N; ++j) lp[i * pr[j]] = pr[j]; } time_t t = time(0); srand(time(NULL)); struct tm * now = localtime( & t ); int sec = get_second(now->tm_hour?now->tm_hour:24, now->tm_min, now->tm_sec);
long long k = 1,l,r,x;
int n = 2000;
while (k<N) k+=k;
for (int i = 1; i < n; i++)
update(1, 1, k, i, i+1, pr[rand()%200]);
int mn = 1e7;
int mni,mnj;
for (int i = 1; i < n; i++) {
for (int j = i+1; j < n; j++) { int temp = get(1, 1, k, i, j); if(temp > sec) break;
int trs = abs(2*11*4493 + sec - ((3*107)*(3*107)-137*2) - temp + 3*107);
if (trs < mn){
mn = trs;
mni = i;
mnj = j;
}
}
}
int d = get(1,1,k,mni,mnj);
while(2*11*4493 + sec - ((3*107)*(3*107)-137*2) - d + 3*107){
if (2*11*4493 + sec - ((3*107)*(3*107)-137*2) - d + 3*107 < 0)
d--;
else
d++;
}
write_time(d);
}
Со всеми победителями в ближайшее время свяжется администрация Tproger для уточнения адреса доставки призов.
Спасибо за участие!