Я думаю о числе (нить полицейского)


32

Нить грабителя здесь

В этом полицейские будут думать о целых положительных числах. Затем они напишут программу или функцию, которая выводит одно значение, когда предоставляется число в качестве ввода, и другое значение для всех других положительных целочисленных входов. Копы покажут программу в ответе, сохраняя номер в секрете. Грабители могут взломать ответ, найдя номер.

Вот подвох: это не , вместо этого ваш счет будет секретным числом, а более низкий показатель будет лучше. Очевидно, вы не можете раскрыть свой счет, пока грабители все еще пытаются его найти. Ответ, который не был взломан через неделю после публикации, может иметь оценку и быть отмеченным как безопасный. Безопасные ответы не могут быть взломаны.

Это, вероятно, само собой разумеется, но вы должны быть в состоянии оценить свой ответ. То есть вы должны точно знать, какое значение принимает ваша машина принятия решений. Недостаточно просто знать, что он есть.

Использование криптографических функций

В отличие от большинства задач полиции и грабителей, которые просят вас не использовать криптографические функции, эта задача не только полностью разрешает их, но и поощряет их. Вы можете создавать ответы любым способом, пока вы пытаетесь победить. При этом ответы с использованием других методов также приветствуются здесь. Цель этого задания - победить, и пока вы не обманываете, ничего не остается в стороне.


1
Если вы разрешите криптографические функции, я бы рекомендовал установить ограничение по времени для программ.
Okx

12
Я отказался от этой проблемы, потому что в большинстве языков ее можно просто взломать с помощью алгоритма отображения или простого цикла. Я считаю, что это слишком легко для задачи полицейских и грабителей .
Мистер Кскодер

2
Я чувствую, что будет много полицейских, которые знают одну (возможно, наименьшую) принятую ценность, но не знают, есть ли более правильные ответы или каковы они.
гистократ

12
@ Mr.Xcoder Вы можете понизить рейтинг, однако я укажу, что это своего рода проблема, а не, на мой взгляд, недостаток. Задача в основном веселая для полицейских, которым приходится делать все возможное, чтобы грубой силой по возможности замедлить вычисления. Более креативные ответы должны усложнять грубое принуждение, позволяя им использовать все меньшее и меньшее число.
Пшеничный волшебник

1
@WheatWizard Я предполагаю, что это не будет победой, но не удастся взломать, например, программу, которая просто сравнивает вход с тем, A(9,9)где Aнаходится функция Аккермана.
Flawr

Ответы:


10

Тампио , Трещины

m:n tulos on luvun funktio tulostettuna m:ään, missä luku on x:n kerrottuna kahdella seuraaja, kun x on luku m:stä luettuna
x:n funktio on luku sadalla kerrottuna sadalla salattuna, missä luku on x alempana sadan seuraajaa tai nolla
x:n seuraajan edeltäjä on x
x:n negatiivisena edeltäjä on x:n seuraaja negatiivisena
nollan edeltäjä on yksi negatiivisena
x salattuna y:llä on örkin edeltäjä, missä örkki on x:n seuraajan seuraaja jaettuna y:llä korotettuna kahteen
sata on kiven kolo, missä kivi on kallio katkaistuna maanjäristyksestä
kallio on yhteenlasku sovellettuna mannerlaatan jäseniin ja tulivuoren jäseniin
tulivuori on nolla lisättynä kallioon
mannerlaatta on yksi lisättynä mannerlaattaan
maanjäristys on kallion törmäys
a:n lisättynä b:hen kolo on yhteenlasku kutsuttuna a:lla ja b:n kololla
tyhjyyden kolo on nolla
x:n törmäys on x tutkittuna kahdellatoista, missä kaksitoista on 15 ynnä 6
x ynnä y on y vähennettynä x:stä

Бежать с:

python3 suomi.py file.suomi --io

Инструкции по установке переводчика приведены на странице Github. Пожалуйста, сообщите, если у вас есть какие-либо трудности с этим.

Программа в псевдокоде. Программа работает очень медленно, потому что мой переводчик супер неэффективен. Кроме того, я не использовал никакую доступную оптимизацию, которая может сократить время оценки с нескольких минут до 10 секунд.


1
Нет ли онлайн-переводчика для Тампио?
Лохматый

@ Shaggy Пока нет, к сожалению. Я, наверное, должен спросить, можно ли его добавить в TIO.
fergusq


5

Perl 6 - треснул!

В строгом смысле, это неприемлемое представление, потому что не очень старается выиграть. Вместо этого он надеется предложить приятную головоломку.

Это «чистая математическая» программа, которая предназначена для взлома созерцанием. Я уверен, что вы могли бы перебить решение (после того, как я очистил некоторые неаккуратные программы, которые я намеренно совершил), но для «полного доверия» (: -)) вы должны быть в состоянии объяснить, что он делает на математических основаниях. ,

sub postfix:<!>(Int $n where $n >= 0)
{
	[*] 1 .. $n;
}

sub series($x)
{
	[+] (0 .. 107).map({ (i*($x % (8*π))) ** $_ / $_! });
}

sub prefix:<∫>(Callable $f)
{
	my $n = 87931;
	([+] (0 .. $n).map({
		π/$n * ($_ == 0 || $_ == $n ?? 1 !! 2) * $f(2 * $_/$n)
	})).round(.01);
}

sub f(Int $in where $in >= 0)
{
	 { series($_)**11 / series($in * $_) }
}

Вы должны взломать функцию f (). (Это функция, которая принимает одно натуральное число и возвращает один из двух результатов.) Предупреждение. Как показывает @Nitrodon, программа на самом деле ведет себя неправильно и «принимает» бесконечное количество входных данных. Поскольку я понятия не имею, как это исправить, я просто отмечаю для будущих решателей, что число, которое я имел в виду, составляет менее 70000 .

Если вы попытаетесь запустить это в TIO, это будет тайм - аут. Это намеренно. (Так как он вообще не должен запускаться!)

Наконец, я попытался написать довольно понятный код. В большинстве случаев вы должны свободно читать его, даже если вы не знакомы с языком. Только два замечания: квадратные скобки [ op ] означают сокращение («сворачивание», в языке Haskell) списка с оператором op ; и вызываемая подпрограмма postfix:<!>фактически определяет постфиксный оператор с именем! (т.е. используется как 5!- он делает именно то, что вы ожидаете). Аналогично для prefix:<∫>одного.

Я надеюсь, что кому-то понравится этот, но я не уверен, правильно ли я понял проблему. Не стесняйтесь избивать меня в комментариях :—).

Попробуйте онлайн!



4

JavaScript, Cracked

Я настолько запутал это, насколько смог, до такой степени, что это не вписывается в этот ответ.

Попробуй это здесь! Нажмите Run, затем введите в консолиguess(n)

Возвращает неопределенное значение, если вы получили неправильный ответ, в противном случае возвращает true.

Редактировать: Каким-то образом я упустил из виду, что мой счет - это число. Ну что ж, мой номер очень, очень большой. В любом случае, удачи в решении.



3

Желе , оценка: ... 1 ( трещины )

5ȷ2_c⁼“ḍtṚøWoḂRf¦ẓ)ṿẒƓSÑÞ=v7&ðþạẆ®GȯżʠṬƑḋɓḋ⁼Ụ9ḌṢE¹’

Попробуйте онлайн!

+1 Действительно ожидал, что я раскрою это? Давай! О, хорошо, у этого есть счет 134. Там, я сказал это!



@ Mr.Xcoder Это прожило долго ...
Эрик Outgolfer

Я просто добавил Ç€Gи диапазон в 1...1000качестве входных данных: P
Mr. Xcoder

Вы видели 5ȷ2_часть правильно?
Эрик Outgolfer

Нет, я даже не посмотрел на код LOL. Просто добавил набор тестов и увидел, где 1находится, затем я вставил строку с начала и до 1сценария Python и посчитал количество нулей перед ним ...
Mr. Xcoder

3

Python 2 (взломан)

Я бы не предложил грубую силу. Надеюсь, вы любите генераторы!

print~~[all([c[1](c[0](l))==h and c[0](l)[p]==c[0](p^q) for c in [(str,len)] for o in [2] for h in [(o*o*o+o/o)**o] for p,q in [(60,59),(40,44),(19,20),(63,58),(61,53),(12,10),(43,42),(1,3),(35,33),(37,45),(17,18),(32,35),(20,16),(22,30),(45,43),(48,53),(58,59),(79,75),(68,77)]] + [{i+1 for i in f(r[5])}=={j(i) for j in [q[3]] for i in l} for q in [(range,zip,str,int)] for r in [[3,1,4,1,5,9]] for g in [q[1]] for s in [[p(l)[i:i+r[5]] for p in [q[2]] for i in [r[5]*u for f in [q[0]] for u in f(r[5])]]] for l in s + g(*s) + [[z for y in [s[i+a][j:j+r[0]] for g in [q[0]] for a in g(r[0])] for z in y] for k in [[w*r[0] for i in [q[0]] for w in i(r[0])]] for i in k for j in k] for f in [q[0]]]) for l in [int(raw_input())]][0]

Попробуйте онлайн!

Выходы 1для правильного номера, в 0противном случае.



@ LeakyNun Вау, немного быстрее, чем я ожидал.
Сизиф

Найти решателя судоку онлайн не сложно.
Утренняя монахиня

Есть некоторая проблема с вашей программой проверки судоку: вы хорошо проверили горизонтальные и вертикальные линии, но вы проверили только первые три ячейки.
Утренняя монахиня

@ LeakyNun Вы правы, aдолжно быть i+a. Я исправил это, но он все равно треснул,
Сизиф

3

Хаскелл , треснувший

Это чисто на основе арифметики. Обратите внимание, что myfunэто фактическая функция, а hпросто вспомогательная функция.

h k = sum $ map (\x -> (x*x)**(-1) - 1/(x**(2-1/(fromIntegral k)))) [1..2*3*3*47*14593]
myfun inp | inp == (last $ filter (\k -> h k < (-7.8015e-5)  )[1..37*333667-1]) = 1
          | otherwise = 0

main = print $ show $ myfun 42 -- replace 42 with your input

Попробуйте онлайн!


Программа должна завершиться без ошибок на всех входах. Это даже заканчивается в течение дня на неограниченной памяти?
michi7x7

Вам действительно нужно совсем немного памяти, но вам определенно не нужна неограниченная память. Вероятно, это зависит от реализации и от вашего оборудования. Но очевидно, что он рассчитан на некоторое время, чтобы затруднить атаки методом "грубой силы" и стимулировать анализ программы. Удачи :)
flawr


2

Ява, взломанная нитродоном

import java.math.BigDecimal;

public class Main {
    private static final BigDecimal A = BigDecimal.valueOf(4);
    private static final BigDecimal B = BigDecimal.valueOf(5, 1);
    private static final BigDecimal C = BigDecimal.valueOf(-191222921, 9);
    private static BigDecimal a;
    private static BigDecimal b;
    private static int c;

    private static boolean f(BigDecimal i, BigDecimal j, BigDecimal k, BigDecimal l, BigDecimal m) {
        return i.compareTo(j) == 0 && k.compareTo(l) >= 0 && k.compareTo(m) <= 0;
    }

    private static boolean g(int i, int j, BigDecimal k) {
        c = (c + i) % 4;
        if (j == 0) {
            BigDecimal l = a; BigDecimal m = b;
            switch (c) {
                case 0: a = a.add(k); return f(C, b, B, l, a);
                case 1: b = b.add(k); return f(B, a, C, m, b);
                case 2: a = a.subtract(k); return f(C, b, B, a, l);
                case 3: b = b.subtract(k); return f(B, a, C, b, m);
                default: return false;
            }
        } else {
            --j;
            k = k.divide(A);
            return g(0, j, k) || g(1, j, k) || g(3, j, k) || g(3, j, k) || g(0, j, k) || g(1, j, k) || g(1, j, k) || g(3, j, k);
        }
    }

    private static boolean h(int i) {
        a = BigDecimal.ZERO; b = BigDecimal.ZERO; c = 0;
        return g(0, i, BigDecimal.ONE);
    }

    public static void main(String[] args) {
        int i = Integer.valueOf(args[0]);
        System.out.println(!h(i) && h(i - 1) ? 1 : 0);
    }
}

Я хотел попробовать что-то отличное от обычных хеш-функций и случайных функций. Вы можете передать число в качестве аргумента командной строки. Выводится, 1если задано правильное число и 0иначе. Для небольших номеров вы также можете попробовать это онлайн .

Подсказка:

Основная часть программы реализует вариант очень известного алгоритма. Как только вы узнаете, что он делает, вы сможете оптимизировать данную программу для вычисления секретного числа.

Объяснение:

Эта программа реализует обход квадратичного варианта (тип 2) хорошо известной кривой Коха (изображение из Википедии): Секретное число - это первая итерация, которая не проходит через точку (B, C). Как правильно распознал Нитродон , за исключением первой итерации, мы можем смело игнорировать рекурсию всех частей кривой, которые не проходят через данную точку. Изменяя строку в исходной программе, мы можем проверить правильный номер даже в онлайн-переводчике .

Quadratic_Koch_curve_type2_iterations.png


Трещины , я думаю; время выполнения слишком длинное, чтобы проверить напрямую, но я проверил с более простыми значениями, и моя трещина, кажется, работает.
Нитродон


1

Октава, оценка: ???

В значительной степени гарантируется, что ни одно другое число не будет иметь одинаковых 20 случайных чисел в конце списка 1e8чисел.

function val = cnr(num)
rand("seed", num);
randomints = randi(flintmax-1,1e4,1e4);
val = isequal(randomints(end+(-20:0))(:), ...
 [7918995738984448
  7706857103687680
  1846690847916032
  6527244872712192
  5318889109979136
  7877935851634688
  3899749505695744
  4256732691824640
  2803292404973568
  1410614496854016
  2592550976225280
  4221573015797760
  5165372483305472
  7184095696125952
  6588467484033024
  6670217354674176
  4537379545153536
  3669953454538752
  5365211942879232
  1471052739772416
  5355814017564672](:));
end

Выходы 1для секретного номера, в 0противном случае.

Я запустил это в октаве 4.2.0.


«Сны и другие замедления могут быть устранены при брутфорсе».

Удачи с этим :)


кажется, что он даже не работает на tio
Okx

1
@Okx Тайм-аут на TIO, но он работает в настольной версии.
17

1
Почему отрицательный голос?
Пшеничный волшебник

3
@WheatWizard, вероятно, потому что теоретически возможно, что он имеет несколько чисел. Кроме того, это довольно скучно. Я хотел бы видеть больше математических решений, RNG довольно скучен.
17

1
@Riker Но поскольку вы угадываете зерно для ГСЧ, он использует сам ГСЧ в качестве своей функции, которая на самом деле является детерминированной. Но да, учитывая то, что он полагается на трудность инвертирования того, что, как вы надеетесь, является односторонней функцией, можно также просто зашифровать строку «true» случайным числом, и тогда задача почти сводится к взлому любой выбранной схемы шифрования. открыть закрытый ключ.
Shufflepants

1

Ли , оценка 239, трещины

(1014750)1sp[l1+sp1-]28^RrnI24^=u;

Попробуйте онлайн!

Я рассчитываю на то, что никто не знает Ли здесь, хотя я знаю, как легко это может измениться ... пот

Объяснение:

(1014750)1sp[l1+sp1-]              # meaningless code that counts up to 1014750 and discards the result
                     28^Rr         # range from 255 to 0
                          nI       # get the index from the range equal to the input
                            24^=   # check if it's 16
                                u; # print the result


1

Brain-Flak , оценка 1574 ( взломан )

<>(((((((((((((((((((([([(((()()()){}){}){}])]){})))){}{}{}{}()){}){})){}{})){}{})){}((((((((()()){}){}){}){}[()]){}){}){}){}())){})){}){}{}{}){})(((((((((((((((((((()()){}){}()){}){}){}()){}){}()){}){})){}{}())){}{})){}{}){}){}){})(((((((((((((((()()){}()){}()){}){}){}()){}){}){}()){}){}){}()){}()){}()){})<>{({}[()])<>({}({})<({}({})<({}({})<({}({}))>)>)>)<>}({}<>(){[()](<{}>)}<>)

Попробуйте онлайн!



1

Округ Колумбия

#!/bin/dc
[[yes]P] sy [[no]P] sn [ly sp] sq [ln sp] sr [lp ss] st [ln ss] su
?  sa
119560046169484541198922343958138057249252666454948744274520813687698868044973597713429463135512055466078366508770799591124879298416357795802621986464667571278338128259356758545026669650713817588084391470449324204624551285340087267973444310321615325862852648829135607602791474437312218673178016667591286378293
la %
d 0 r 0
=q !=r
10 154 ^ 10 153 ^ +
d la r la
<t !<u
1 la 1 la
>s !>n

Попробуйте онлайн!


Примечание. Это представление было изменено с момента его отправки. Первоначальное представление (ниже) было недействительным и взломано Sleafar в комментариях ниже. (Ввод 1дает результат yes, но есть еще одно число, которое дает тот же результат.)

#!/bin/dc
[[yes]P] sy [[no]P] sn [ly sp] sq [ln sp] sr
?  sa
119560046169484541198922343958138057249252666454948744274520813687698868044973597713429463135512055466078366508770799591124879298416357795802621986464667571278338128259356758545026669650713817588084391470449324204624551285340087267973444310321615325862852648829135607602791474437312218673178016667591286378293
la %
d 0 r 0
=q !=r
10 154 ^ 10 153 ^ +
d la r la
<p !<n

Попробуйте онлайн!


Онлайн-переводчик возвращает «да» для ввода «1». Теперь это считается треснувшим?
Sleafar

@ Sleafar Вздох ... да, это была глупая ошибка с моей стороны.
Джон Гауэрс

Однако это означает, что этот вызов теперь недействителен, так как есть два ввода, которые заставляют его печатать да, поэтому я не уверен, что вам разрешено требовать его. Я добавлю исправленную версию в этот пост, но оставлю оригинал на всякий случай.
Джон Гауэрс

1

Рубин , сейф, оценка:

63105425988599693916

#!ruby -lnaF|
if /^#{eval [$F,0]*"**#{~/$/}+"}$/ && $_.to_i.to_s(36)=~/joe|tim/
  p true
else
  p false
end

Попробуйте онлайн!

Объяснение:

Первое условие проверяет входной номер , в то время как значение n-значного числа ограничено снизу n ^ 10. Соотношение между этими слагаемыми равно n * (9/10) ^ n, которое в конечном итоге монотонно уменьшается при увеличении n. Как только он падает ниже 1, не может быть n-значных нарциссических чисел. нарциссизм . Нить, для которой я первоначально написал, была случайно натолкнута примерно в то же время, когда я опубликовал это, но я думаю, никто не заметил. Второй преобразует число в базу 36, которая использует буквы в качестве цифр, и проверяет, содержит ли строка «joe» или «tim». Можно доказать (посредством исчерпания), что существует только одно нарциссическое число, названное Джо или Тимом (Джо), потому что нарциссические числа конечны. Доказательство того, что они конечны: результат взятия n-значного числа, повышения каждой цифры до n-й степени и суммирования ограничен сверхуn*9^n


1

PHP, безопасно, оценка:

60256

<?php

$a = $argv[1];

$b ='0123456789abcdefghijklmnopqrstuvwxyz';

$c = strlen($b);

$d = '';
$e = $a;
while ($e) {
    $d .= $b[$e % $c];
    $e = floor($e / $c);
}

echo ((function_exists($d) && $d($a) === '731f62943ddf6733f493a812fc7aeb7ec07d97b6') ? 1 : 0) . "\n";

Выходы 1, если правильно, 0 в противном случае.

Редактировать: я не думаю, что кто-то даже пытался взломать это, потому что:

было бы легко грубой силой.

Объяснение:

Я беру входные данные и преобразовываю их в «базу 36», но я не переворачиваю остатки, чтобы получить окончательное число. Число 60256 - это «1ahs» в базе 36. Необращенный, то есть «sha1», который является функцией в PHP. Последняя проверка состоит в том, что sha1 (60256) равен хешу.



0

Python 3, оценка: ???

Надеюсь, это, во всяком случае, демонстрирует, насколько эта проблема действительно нарушена:

from hashlib import sha3_512

hash_code = 'c9738b1424731502e1910f8289c98ccaae93d2a58a74dc3658151f43af350bec' \
            'feff7a2654dcdd0d1bd6952ca39ae01f46b4260d22c1a1b0e38214fbbf5eb1fb'


def inc_string(string):
    length = len(string)
    if length == 0 or all(char == '\xFF' for char in string):
        return '\x00' * (length + 1)
    new_string = ''
    carry = True
    for i, char in enumerate(string[::-1]):
        if char == '\xFF' and carry:
            new_string = '\x00' + new_string
            carry = True
        elif carry:
            new_string = chr(ord(char) + 1) + new_string
            carry = False
        if not carry:
            new_string = string[0:~i] + new_string
            break
    return new_string


def strings():
    string = ''
    while True:
        yield string
        string = inc_string(string)


def hash_string(string):
    return sha3_512(string.encode('utf-8')).hexdigest()


def main():
    for string in strings():
        if hash_string(string) == hash_code:
            exec(string)
            break


main()

По сути, этот код лениво генерирует каждую возможную строку до тех пор, пока одна из строк не получит хеш, который точно соответствует hash_codeприведенному выше. Нехэшированный код принимает базовую форму:

num = int(input('Enter a number:\n'))
if num == <insert number here>:
    print(1)
else:
    print(0)

За исключением того, <insert number here>что заменяется на число, и в коде есть комментарии с целью сделать код почти неузнаваемым.

Я принял все меры предосторожности, чтобы не получить пользу от этого поста. Для начала, это вики сообщества, поэтому я не буду получать за это репутацию. Кроме того, мой счет довольно большой, поэтому, надеюсь, придет гораздо более креативный ответ и победит.

Надеюсь, вы все не слишком взбешены моим ответом, я просто хотел показать, почему посты полицейских и грабителей обычно запрещают алгоритмы хеширования.


Ввод взят из стандартного ввода. Вывод 1 (для правильно угаданного числа) или 0 (для неправильно угаданного).
sonar235

Я не знаю, почему вы сделали это вики-сообществом. Это ваш ответ, который, похоже, потребовал значительных усилий. Я, конечно, не назвал бы этот ответ доказательством того, что вопрос был нарушен. Это умный ответ, который, вероятно, мог бы хорошо зарекомендовать себя (я даже не могу доказать, что это не работает для 1). Суть вопроса заключается в том, чтобы всегда привлекать ответы, подходящие к этому вопросу умными и интересными способами (а также развлекаться, но я не могу поручиться за ваше развлечение), и, насколько я понимаю, это так.
Пшеничный волшебник

3
На самом деле этот ответ неверен. Это почти наверняка (с астрономической вероятностью отсутствия строки длиной 512 битов, соответствующей хешу) exec () что-то еще, что, вероятно, даже не является допустимым кодом Python до достижения предполагаемого кода.
Джошуа

1
@ sonar235: в вашем шаблоне фрагмента содержится более 512 бит.
Джошуа

1
Чтобы расширить ответ Джошуа: длина вашего кода составляет 102 символа. В частности, ваша программа будет перебирать каждую 100-символьную строку, прежде чем она попадет в ваш код. Так как ваш код перебирает символы в диапазоне 0x00-0xFF, то есть 256 ^ 100или 2 ^ 800строки. Между тем 2 ^ 512возможны только 512-битные хэши. Это означает, что количество строк, которые вы перебираете, превышает число возможных хэшей, по крайней мере, 2 ^ 288до одного - в 10000 раз больше, чем число атомов во вселенной. Вероятность того, что этот конкретный хеш не будет использован, невероятно мала .
Джон Гауэрс

0

Python 3 , 49 байт, взломан sonar235

x = input()
print(int(x)*2 == int(x[-1]+x[0:-1]))

Попробуйте онлайн!


Ноль не является положительным целым числом. Я не знаю, было ли это намеченным решением, но оно работает.
Пшеничный волшебник

0 не является намеченным решением.
ED

8
Э-э, ваша страница
TIO

2
Также «напишите программу или функцию, которая выводит одно значение, когда в качестве входных данных
Джонатан Аллан


0

Java, оценка: 3141592 ( Cracked )

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u004d\u0061\u006e\u0067\u006f\u0020\u007b
\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u0063\u006f\u006e\u0076\u0065\u0072\u0074\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0073\u0029\u007b\u0066\u006f\u0072\u0028\u0063\u0068\u0061\u0072\u0020\u0063\u0020\u003a\u0020\u0073\u002e\u0074\u006f\u0043\u0068\u0061\u0072\u0041\u0072\u0072\u0061\u0079\u0028\u0029\u0029\u007b\u0020\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u0028\u0022\u005c\u005c\u0075\u0030\u0030\u0022\u002b\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u002e\u0074\u006f\u0048\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0063\u0029\u0029\u003b\u007d\u007d
\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0061\u0072\u0067\u0073\u0029\u0020\u007b\u0069\u006e\u0074\u0020\u0078\u0020\u0020\u003d\u0020\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u002e\u0070\u0061\u0072\u0073\u0065\u0049\u006e\u0074\u0028\u0061\u0072\u0067\u0073\u005b\u0030\u005d\u0029\u003b
\u0064\u006f\u0075\u0062\u006c\u0065\u0020\u0061\u003d\u0020\u0078\u002f\u0038\u002e\u002d\u0033\u0039\u0032\u0036\u0039\u0039\u003b\u0064\u006f\u0075\u0062\u006c\u0065\u0020\u0062\u0020\u003d\u0020\u004d\u0061\u0074\u0068\u002e\u006c\u006f\u0067\u0031\u0030\u0028\u0028\u0069\u006e\u0074\u0029\u0020\u0028\u0078\u002f\u004d\u0061\u0074\u0068\u002e\u0050\u0049\u002b\u0031\u0029\u0029\u002d\u0036\u003b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0028\u0061\u002f\u0062\u003d\u003d\u0061\u002f\u0062\u003f\u0022\u0046\u0061\u0069\u006c\u0022\u003a\u0022\u004f\u004b\u0022\u0020\u0029\u0029\u003b
\u007d\u007d

1
Я не думаю, что запутывание будет делать что-либо, кроме как добавить раздражающий первый шаг.
Инженер Тост


2
@EngineerToast нет, не совсем, это было просто для отпугивания ленивых людей.
user902383

0

Python 3, оценка 1 (безопасно)

Не очень интересное решение, но лучше безопасный полицейский, чем мертвый полицейский.

import hashlib

def sha(x):
    return hashlib.sha256(x).digest()

x = input().encode()
original = x

for _ in range(1000000000):
    x = sha(x)

print(int(x==b'3\xdf\x11\x81\xd4\xfd\x1b\xab19\xbd\xc0\xc3|Y~}\xea83\xaf\xa5\xb4]\xae\x15wN*!\xbe\xd5' and int(original.decode())<1000))

Выходы 1для целевого номера, в 0противном случае. Ввод взят из стандартного ввода. Последняя часть ( and int(original.decode())<1000) существует только для обеспечения только одного ответа, иначе, очевидно, будет бесконечно много ответов.


1
Можете ли вы добавить ссылку TIO, пожалуйста?
Лохматый

1
Для будущих грабителей: целое число не меньше 100000000.
г-н Xcoder

1
@Shaggy Время ожидания на TIO истекло, на моем компьютере потребовалось около получаса, чтобы выполнить миллиард итераций SHA256.
L3viathan

2
Любые грабители хотят создать команду, чтобы решить эту проблему? Нам просто нужно разделить числа менее 1000 между нами, чтобы у нас было время вычислить повторяющиеся дайджесты SHA до истечения крайнего срока.
Джон Гауэрс

2
Если вы не можете доказать, что 1 является единственным решением, этот ответ недействителен. Бремя доказывания должно лежать на лице, утверждающем, что оно имеет действительный ответ.
Деннис

0

C (gcc) , оценка ???

#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <wmmintrin.h>

#include <openssl/bio.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>

union State
{
    uint8_t u8[128];
    __m128i i128[8];
} state;

void encrypt()
{
    BIO *key = BIO_new_mem_buf
    (
        "-----BEGIN PUBLIC KEY-----\n"
        "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5CBa50oQ3gOPHNt0TLxp96t+6\n"
        "i2KvOp0CedPHdJ+T/wr/ATo7Rz+K/hzC7kQvsrEcr0Zkx7Ll/0tpFxekEk/9PaDt\n"
        "wyFyEntgz8SGUl4aPJkPCgHuJhFMyUflDTywpke3KkSv3V/VjRosn+yRu5mbA/9G\n"
        "mnOvSVBFn3P2rAOTbwIDAQAB\n"
        "-----END PUBLIC KEY-----\n",
        -1
    );

    RSA *rsa = PEM_read_bio_RSA_PUBKEY(key, &rsa, NULL, NULL);

    uint8_t ciphertext[128];

    RSA_public_encrypt(128, state.u8, ciphertext, rsa, RSA_NO_PADDING);
    memcpy(state.u8, ciphertext, 128);
}

void verify()
{
    if (memcmp
    (
        "\x93\xfd\x38\xf6\x22\xf8\xaa\x2f\x7c\x74\xef\x38\x01\xec\x44\x19"
        "\x76\x56\x27\x7e\xc6\x6d\xe9\xaf\x60\x2e\x68\xc7\x62\xfd\x2a\xd8"
        "\xb7\x3c\xc9\x78\xc9\x0f\x6b\xf0\x7c\xf8\xe5\x3c\x4f\x1c\x39\x6e"
        "\xc8\xa8\x99\x91\x3b\x73\x7a\xb8\x56\xf9\x28\xe7\x2e\xb2\x82\x5c"
        "\xb8\x36\x24\xfb\x26\x96\x32\x91\xe5\xee\x9f\x98\xdf\x44\x49\x7b"
        "\xbc\x6c\xdf\xe9\xe7\xdd\x26\x37\xe5\x3c\xe7\xc0\x2d\x60\xa5\x2e"
        "\xb8\x1f\x7e\xfd\x4f\xe0\x83\x38\x20\x48\x47\x49\x78\x18\xfb\xd8"
        "\x62\xaf\x0a\xfb\x5f\x64\xd1\x3a\xfd\xaf\x4b\xaf\x93\x23\xf4\x36",
        state.u8,
        128
    ))
        exit(0);
}

static inline void quarterround(int offset)
{
    int dest = (offset + 1) % 8, src = offset % 8;

    state.i128[dest] = _mm_aesenc_si128(state.i128[src], state.i128[dest]);
}

int main(int argc, char *argv[])
{
    if (argc != 2)
        exit(0);

    uint64_t input = strtoull(argv[1], NULL, 0);

    state.i128[0] = _mm_set_epi32(0, 0, input >> 32, input);

    for (uint64_t round = 0; round < 0x1p45; round += 2)
    {
        quarterround(0);
        quarterround(2);
        quarterround(4);
        quarterround(6);

        quarterround(7);
        quarterround(1);
        quarterround(3);
        quarterround(5);
    }

    encrypt();
    verify();
    puts("something");
}

Так как криптографические решения приветствуются, здесь. Ровно одно положительное целое будет что-то печатать , все остальные ничего не будут печатать. Это занимает много времени, поэтому его нельзя протестировать в Интернете.


0

Ява, 164517378918, сейф

import java.math.*;import java.util.*;
public class T{
    static boolean f(BigInteger i){if(i.compareTo(BigInteger.valueOf(2).pow(38))>0)return false;if(i.longValue()==0)return false;if(i.compareTo(BigInteger.ONE)<0)return false;int j=i.multiply(i).hashCode();for(int k=3^3;k<2000;k+=Math.abs(j%300+1)){j+=1+(short)k+i.hashCode()%(k+1);}return i.remainder(BigInteger.valueOf(5*(125+(i.hashCode()<<11))-7)).equals(BigInteger.valueOf(0));}
    @SuppressWarnings("resource")
    public static void main(String[]a){long l=new Scanner(System.in).nextLong();boolean b=false;for(long j=1;j<10;j++){b|=f(BigInteger.valueOf(l-j));}System.out.println(f(BigInteger.valueOf(l))&&b);}
}

0

TI-BASIC, оценка: 196164532 не конкурирует

Возвращает 1 для секретного номера, 0 в противном случае.

Ans→rand
rand=1

Обратитесь к примечанию на этой странице о randкоманде для получения дополнительной информации.


8
Это гарантированно иметь ровно один соответствующий входной номер?
Rɪᴋᴇʀ

@Riker: я думаю, что калькулятор TI использует некоторую плавающую точку внутри; если RAND использует ту же самую плавающую точку, что и остальная часть, я уверен, что есть только 1 решение.
Иисус Навин

@ Joshua Я полагаю, он использует алгоритм L'Ecuyer .
kamoroso94

@ Джошуа "уверен" недостаточно. Если вы не можете доказать, что существует только 1 решение, это неверный ответ.
Rɪᴋᴇʀ

1
@Dennis: зонд для 196164532 * 2; если это не решение, чем нет другого решения.
Джошуа

0

Python 3 , оценка:?

def check(x):
    if x < 0 or x >= 5754820589765829850934909 or pow(x, 18446744073709551616, 5754820589765829850934909) != 2093489574700401569580277 or x % 4 != 1:
        return "No way ;-("
    return "Cool B-)"

Попробуйте онлайн!

Просто, но может потребоваться некоторое время для грубой силы ;-) С нетерпением ждем быстрого взлома ;-)

Сноска: первые два и последние условия делают ответ уникальным.

Кстати, как рассчитывается счет?

Подсказка 1

Вы можете ожидать, что внутри будет 2 64 ответа 0 <= x < [the 25-digit prime], но на самом деле их только 4, а последнее условие устраняет остальные 3. Если вы можете взломать это, то вы также будете знать другие 3 решения.



0

Ацето , безопасный

  P'*o*7-9JxriM'lo7*9Yxx.P',xe*ikCKxlI.D+∑\a€'#o*84/si5s:i»I9Ji8:i+∑€isi.s1+.i2\H/iQxsUxsxxsxiss*i1dJi/3d2*Ji-d*id*IILCh98*2JixM'e9hxBNRb!p

Выводит TrueFalse, если правильно, FalseFalse в противном случае

Номер был

15752963

Попробуйте онлайн!


-2

C #, Mono, Linux, Alpha, оценка 1 (безопасно)

class Program
{
public static void Main()
{
//Excluding out-of-range inputs at ppperry's request; does not change solution
//original code:
//var bytes = System.BitConverter.GetBytes((long)int.Parse(System.Console.ReadLine()));
int i;
if (!int.TryParse(System.Console.ReadLine(), out i || i <= 0 || i > 1000000) { System.Console.WriteLine(0); Environment.Exit(0); }
var bytes = System.BitConverter.GetBytes((long)i);
using (var x = System.Security.Cryptography.HashAlgorithm.Create("MD5"))
{
    for (int i = 0; i < 1000000; ++i)
            for (int j = 0; j < 86400; ++j)
                    bytes = x.ComputeHash(bytes);
}
if (bytes[0] == 91 && bytes[1] == 163 && bytes[2] == 41 && bytes[3] == 169)
    System.Console.WriteLine(1);
else
    System.Console.WriteLine(0);
}
}

Осторожный. Я серьезно. Там много альфа-симуляторов. Используйте один с джиттером или это не закончится.

Это зависит от того факта, что Alpha является байтовым порядком байтов, в результате чего System.BitConverter делает неправильные действия, если кто-то пытается это сделать на x86 или x64. Я написал этот ответ, чтобы продемонстрировать серьезность проблемы больше, чем что-либо еще.


1
У этого не может быть только одного решения; существует бесконечное число целых чисел, а функция MD5 имеет конечное число возможных выходных данных, поэтому должно быть столкновение
pppery

@ppperry: Есть только 2 миллиарда и меняются положительные числа, хотя.
Джошуа

Если вы думаете об этом таким образом, это ошибки на входах больше, чем 2 ^ 31 , и, следовательно, является недействительным.
pppery

@ppperry: Там сейчас не будет ошибки по этому поводу.
Джошуа

2
Если вы не можете доказать, что 1 является единственным решением, этот ответ недействителен. Бремя доказывания должно лежать на лице, утверждающем, что оно имеет действительный ответ.
Деннис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.