Я думаю про число (Thread Cop)


32

Тут розбійнича нитка

У цьому виклику поліцейських поліцейські подумають про ціле число. Потім вони записують програму або функцію, яка виводить одне значення, коли надається число як вхідне, а інше значення для всіх інших позитивних цілих входів. Потім поліцейські розкриють програму у відповіді, зберігаючи номер у таємниці. Розбійники можуть зламати відповідь, знайшовши номер.

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

Це, мабуть, само собою зрозуміло, але ви повинні мати можливість оцінити свою відповідь. Тобто ви повинні точно знати, яке значення приймається вашою машиною прийняття рішень. Просто знати, що є такий, недостатньо.

Використання криптографічних функцій

На відміну від більшості копів та грабіжників, які просять вас не використовувати криптографічні функції, це завдання не лише повністю дозволяє їм, але й заохочує їх. Ви можете будь-яким чином створювати відповіді, доки не намагаєтесь виграти. Незважаючи на це, тут також вітаються відповіді, використовуючи інші методи. Мета виклику - виграти, і поки ви нічого не обдурите, нічого не стоїть.


1
Якщо ви дозволяєте криптографічні функції, я рекомендую встановити обмеження часу на програми.
Окск

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

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

12
@ Mr.Xcoder Ви можете брати участь у програмі, проте я зазначу, що це є суть питання, а на мій погляд, недоліком. Проблема - це в основному розвага для поліцейських, яким доводиться робити це якомога важче, щоб набити грубі сили, уповільнивши обчислення. Більш креативні відповіді повинні ускладнювати жорстоке примушення і дозволяти їм використовувати все менші та менші числа.
Пшеничний майстер

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

Відповіді:


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

@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 lingo) списку з оператором op ; а підпункт postfix:<!>фактично визначає оператор postfix на ім'я! (тобто використовується як 5!- це робить саме те, що ви очікували). Аналогічно для prefix:<∫>одного.

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

Спробуйте в Інтернеті!



4

JavaScript, тріщинами

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

Спробуйте тут! Клацніть Виконати, а потім введіть консольguess(n)

Повертається невизначено, якщо ви отримали неправильну відповідь, істина повертає інакше.

Редагувати: Я якось пропустив частину про те, що моя оцінка є числом. Ну добре, моя кількість дуже велика. Успіхів вирішити це все одно.



3

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

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

Спробуйте в Інтернеті!

1 Дійсно очікував, що я розкрию це? Давай! Ну добре, вона має оцінку 134. Там я це сказав!



@ Mr.Xcoder Це прожило довго ...
Ерік Аутгольфер

Я щойно додав Ç€Gі діапазон 1...1000як вхід: P
Містер Xcoder

Ви бачили 5ȷ2_частину правильно?
Erik the Outgolfer

Ні, я навіть не дивився на код лол. Щойно додав тестовий набір і побачив, де 1знаходиться, тоді я вставив рядок від початку і до 1сценарію Python і порахував кількість нулів до нього ...
Містер 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

Haskell , тріснув

Це суто засноване на арифметиці. Зауважте, що 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

Вам потрібно зовсім небагато пам’яті, але вам точно не потрібна необмежена пам’ять. Це, мабуть, залежить від реалізації та від вашого обладнання. Але, очевидно, розраховано певний час на обчислення для того, щоб ускладнити атаки грубої сили та заохотити аналіз програми. Удачі :)
недолік


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


Тріснув , я думаю; час роботи занадто довгий, щоб безпосередньо перевірити, але я перевірив більш легкі значення, і, здається, моя тріщина працює.
Nitrodon


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іншому випадку.

Я провів це в Octave 4.2.0.


"Сни та інші уповільнення можуть бути усунені під час грубої сили".

Успіхів з цим :)


це не здається навіть бігати на tio
Okx

1
@Okx Час очікується на TIO, але він працює у настільній версії.
Rɪᴋᴇʀ

1
Чому потік?
Пшеничний майстер

3
@WheatWizard, ймовірно, тому, що теоретично можливо, що він має кілька чисел. Крім того, це щось нудне tbh. Мені б хотілося бачити більше математичних рішень, RNG - це щось нудно.
Rɪᴋᴇʀ

1
@Riker Але тому, що ви здогадуєтесь про те, що ви маєте на увазі RNG, він використовує сам RNG як свою функцію, яка насправді є детермінованою. Але так, враховуючи, що це покладається на важко перетворити те, що ви сподіваєтесь, це одностороння функція, можна також просто зашифрувати рядок "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

Мозок-Флак , оцінка 1574 ( тріщин )

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

Спробуйте в Інтернеті!



1

dc

#!/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

Ruby , safe, оцінка:

63105425988599693916

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

Спробуйте в Інтернеті!

Пояснення:

Перша умовна перевірка вхідного номера на предмет нарцисизму . Нитка, про яку я писав спочатку, випадково зіткнулася приблизно в той же час, коли я це розмістила, але, мабуть, ніхто не помітив. Другий перетворює число в базу 36, яка використовує літери як цифри, і перевіряє, чи містить рядок "joe" або "tim". Можна довести (через виснаження), що існує лише одне нарцисичне число, яке називається або Джо, або Тім (Джо), оскільки нарцисистські числа є кінцевими. Доказ того, що вони кінцеві: результат отримання n-значного числа, підняття кожної цифри до n-ї потужності та підсумовування обмежено вищеn*9^n, тоді як значення n-значного числа обмежене нижче n ^ 10. Співвідношення між цими членами дорівнює n * (9/10) ^ n, яке з часом монотонно зменшується в міру збільшення n. Як тільки воно опуститься нижче 1, не може бути 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>, що замінено числом, в коді є коментарі, щоб зробити код майже непридатним.

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

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


Введення взято з stdin. Вихід - 1 (для правильно відгаданого числа) або 0 (для неправильно відгаданого).
sonar235

Я не знаю, чому ви зробили це вікі спільноти. Це ваша відповідь, схоже, що на це знадобилася значна робота. Звичайно, я б не назвав цю відповідь доказом того, що питання було порушено. Це розумна відповідь, яка, швидше за все, може стати хорошою (я навіть не можу довести, що це не працює для 1). Суть питання полягає в тому, щоб завжди отримувати відповіді, які підходять до питання розумними цікавими способами (а також розважатись, але я не можу поручитися на ваші розваги), і наскільки я переживаю, це робить це.
Пшеничний майстер

3
Насправді ця відповідь є недійсною. Це майже напевно (з астрономічною ймовірністю, що жоден рядок довжиною 512 біт не відповідає хешу) виконує (ще) щось, що, мабуть, не є навіть дійсним кодом 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 відображається рішення ...
LyricLy

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 ні, не дуже, це було суто для відлякування ледачих людей.
користувач902383

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іншому випадку. Введення взято з stdin. Остання частина ( and int(original.decode())<1000) існує лише для того, щоб забезпечити лише одну відповідь, інакше очевидно було б нескінченно багато відповідей.


1
Чи можете ви додати посилання TIO, будь ласка?
Shaggy

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

@ Джошуа "досить впевненого" недостатньо. Якщо ви не зможете довести, що існує лише одне рішення, це неправдива відповідь.
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);
}
}

Дбайливий. Я мав це на увазі. Там багато альфа-тренажерів. Використовуйте один із тремтінням, інакше це не закінчиться.

Це залежить від того, що Альфа є великим ендіаном, що змушує 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.