Завдання полягає в тому, щоб написати найшвидший код, можливий для обчислення постійної матриці .
Постійне значення n
-by- n
matrix A
= ( a
i,j
) визначається як
Тут S_n
представлений набір усіх перестановок [1, n]
.
Як приклад (з вікі):
У цьому питанні матриці всі квадратні і матимуть лише значення -1
і 1
в них.
Приклади
Вхід:
[[ 1 -1 -1 1]
[-1 -1 -1 1]
[-1 1 -1 1]
[ 1 -1 -1 1]]
Постійний:
-4
Вхід:
[[-1 -1 -1 -1]
[-1 1 -1 -1]
[ 1 -1 -1 -1]
[ 1 -1 1 -1]]
Постійний:
0
Вхід:
[[ 1 -1 1 -1 -1 -1 -1 -1]
[-1 -1 1 1 -1 1 1 -1]
[ 1 -1 -1 -1 -1 1 1 1]
[-1 -1 -1 1 -1 1 1 1]
[ 1 -1 -1 1 1 1 1 -1]
[-1 1 -1 1 -1 1 1 -1]
[ 1 -1 1 -1 1 -1 1 -1]
[-1 -1 1 -1 1 1 1 1]]
Постійний:
192
Вхід:
[[1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1],
[1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1],
[-1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1],
[-1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1],
[-1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1],
[1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1],
[1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1],
[1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1],
[1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1],
[-1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1],
[-1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1],
[1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1],
[-1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1],
[1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1],
[1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1],
[1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1],
[-1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1],
[1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1],
[1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1],
[-1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1]]
Постійний:
1021509632
Завдання
Ви повинні написати код, який n
за n
матрицею видає його постійний.
Оскільки мені знадобиться перевірити ваш код, було б корисно, якби ви могли дати простий спосіб мені дати матрицю як вхід до вашого коду, наприклад, читаючи з стандартного в.
Попереджуйте, що постійне може бути великим (вся матриця 1s - крайній випадок).
Оцінки та зв’язки
Я перевіряю ваш код на випадкових + -1 матрицях збільшення розміру і зупиняюсь, коли перший раз ваш код займе більше ніж 1 хвилину на моєму комп’ютері. Матриці оцінювання будуть послідовними для всіх робіт, щоб забезпечити справедливість.
Якщо двоє людей отримують однаковий бал, то переможець - той, який найшвидший за цю величину n
. Якщо вони знаходяться в межах 1 секунди один від одного, тоді це перша, розміщена першою.
Мови та бібліотеки
Ви можете використовувати будь-яку доступну мову та бібліотеки, які вам подобаються, але жодної попередньої функції для обчислення постійної. Там, де це можливо, було б добре запустити свій код, тому, будь-ласка, додайте повне пояснення, як запустити / скомпілювати свій код в Linux, якщо це можливо. "
Реалізація посилань
Вже є питання щодо кодегольфа з великою кількістю коду на різних мовах для обчислення постійних для малих матриць. Математика та Maple також мають постійні реалізації, якщо ви можете отримати доступ до них.
Моя машина Часи синхронізуються на моєму 64-бітному апараті. Це стандартна установка ubuntu з 8 ГБ оперативної пам’яті, AMD FX-8350 восьмиядерний процесор і Radeon HD 4250. Це також означає, що мені потрібно мати можливість запускати ваш код.
Інформація про мою машину низького рівня
cat /proc/cpuinfo/|grep flags
дає
прапори: FPU VME-де-псевдоефедрин TSC MSR паї MCE CX8 APIC вересня MTRR PGE MCA CMOV погладити pse36 clflush MMX fxsr сс sse2 ХТИ системного виклик ого mmxext fxsr_opt pdpe1gb rdtscp ого constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf ПНІ PCLMULQDQ монітор SSSE3 FMA CX16 sse4_1 sse4_2 POPCNT АЕС XSAVE AVX F16C lahf_lm cmp_legacy SVM extapic cr8_legacy АВМ SSE4a misalignsse 3dnowprefetch osvw СРК XOP skinit WDT LWP fma4 TCE nodeid_msr TBM topoext perfctr_core perfctr_nb CPB hw_pstate vmmcall Bmi1 арат НТР lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
Я буду задавати тісно пов'язане багатомовне запитання, яке не страждає від великої проблеми Int, тому любителі Scala , Nim , Julia , Rust , Bash також можуть показати свої мови.
Рада лідерів
- n = 33 (45 секунд. 64 секунди за n = 34). Тонне Євангеліє в С ++ з г ++ 5.4.0.
- n = 32 (32 секунди). Денніс в C з gcc 5.4.0, використовуючи прапорці gcc Тона Госпеля.
- n = 31 (54 секунди). Крістіан Сіверс в Хаскеллі
- n = 31 (60 секунд). примо в rpython
- n = 30 (26 секунд). ezrast в Rust
- n = 28 (49 секунд). xnor з Python + pypy 5.4.1
- n = 22 (25 секунд). Шебанг з Python + pypy 5.4.1
Примітка . На практиці терміни для Денніса та Тона Євангелія дуже різняться з загадкових причин. Наприклад, вони здаються швидшими після завантаження веб-браузера! Цитовані терміни є найшвидшими за всі тести, які я зробив.