数字を考えています(Cop's Thread)


32

強盗のスレッドはこちら

この挑戦では、警官は正の整数を考えます。次に、入力として数値が提供されたときに1つの値を出力し、他のすべての正の整数入力に別の値を出力するプログラムまたは関数を作成します。警官は、番号を秘密にして、回答でプログラムを明らかにします。強盗は、番号を見つけることで答えを割り込むことができます。

キャッチは次のとおりです。これはではありません 。代わりに、スコアは秘密の数字になり、スコアが低いほど良くなります。強盗がまだそれを見つけようとしている間は、明らかにあなたのスコアを明らかにすることはできません。投稿の1週間後にクラックされていない回答は、スコアが表示され、安全とマークされる場合があります。安全な答えを解読することはできません。

おそらく言うまでもありませんが、答えを採点できるはずです。つまり、意思決定マシンで受け入れられる値を正確に知る必要があります。あることを単に知るだけでは十分ではありません。

暗号化機能の使用

暗号化機能を使用しないように要求するほとんどの警官や強盗の挑戦とは異なり、この挑戦​​は完全にそれらを許可するだけでなく、それらを奨励します。あなたが勝つことを試みている限り、あなたはどんな方法でも答えを自由に作成できます。そうは言っても、他の方法を使用した回答も歓迎します。挑戦の目標は勝つことであり、あなたがチートしない限り、何もテーブルから外れていません。


1
暗号化機能を許可する場合は、プログラムに時間制限を設けることをお勧めします。
Okx

12
ほとんどの言語では、マッピングアルゴリズムまたは単純なループを使用して単純にクラックできるため、この課題を支持しました。警官と強盗の挑戦にはちょっと簡単すぎると思います。
ミスターXcoder

2
1つの(おそらく最小の)受け入れられた値を知っているが、より多くの正しい答えがあるかどうか、またはそれらが何であるかを知らない警官がたくさんいると思う。
-histocrat

12
@ Mr.Xcoderあなたは自由に投票することができますが、それは挑戦のポイントのようなものであり、私の意見では欠陥ではないことを指摘します。課題は、計算を遅くすることで可能な限りブルートフォースを難しくしなければならない警官にとって、ほとんど楽しいものです。創造的な答えが増えると、ブルートフォースはますます難しくなり、ますます小さな数字を使用できるようになります。
小麦ウィザード

1
@WheatWizard勝つことはないと思いますが、たとえば入力とAckerman関数の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
Tampioのオンライン通訳はありませんか?
シャギー

@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()をクラックすることになっています。(これは、1つの自然数を取り、2つの結果の1つを返す関数です。)警告: @Nitrodonで示されているように、プログラムは実際には間違った動作をし、無限の数の入力を受け入れます。私はそれを修正する方法がわからないので、将来のソルバーに対して、念頭に置いていた数が70000未満であることに注意します。

あなたはTIOでこれを実行しようとすると、それがされますタイムアウト。これは意図的なものです。(まったく実行されることはないので!)

最後に、ある程度明確なコードを記述しようとしました。言語に精通していなくても、ほとんど流itに読めるはずです。注釈は2つだけです。角括弧[ op ]は、演算子opを使用してリストを縮小(「折り畳み」、Haskellの用語で)することを意味します。呼び出されたsubはpostfix:<!>実際に!という名前の接尾辞演算子を定義します (つまり、次のように使用し5!ます。期待どおりの動作をします)。同じようにprefix:<∫>

誰かがこれを楽しんでくれることを願っていますが、難易度が正しいかどうかはわかりません。コメントで私をbんでください:—)。

オンラインでお試しください!



4

JavaScript、クラック

これをできる限り難読化して、この答えに収まらないようにしました。

ここで試してみてください! [実行]をクリックし、コンソールに入力しますguess(n)

間違った答えを受け取った場合はundefinedを返し、そうでない場合は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_正しい部分を見ましたか?
エリックアウトゴルファー

いいえ、私はコードを見さえしませんでした(笑)。ただ、テストスイートとのこぎりを追加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うわー、私は予想より少し速かった。
シーシュポス

オンラインで数独ソルバーを見つけるのは難しくありません。
リーキー修道女

数独チェッカーにはいくつかの問題があります。水平線と垂直線は問題なくチェックしましたが、最初の3つのセルのみをチェックしました。
リーキー修道女

@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

オンラインでお試しください!


プログラムはすべての入力でエラーなしで終了する必要があります。これは無制限のメモリで1日以内に終了しますか?
michi7x7

かなりのメモリが必要ですが、無制限のメモリは必要ありません。おそらく実装とハードウェアに依存します。ただし、ブルートフォース攻撃を困難にし、プログラムの分析を促進するために、計算に時間がかかるように設計されていることは明らかです。幸運:)
flawr


2

Java、ニトロドンひびが入った

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次バリアント(タイプ2)のトラバーサルを実装します 。秘密番号は、ポイント(B、C)を通過しない最初の反復です。Nitrodonによって正しく認識されるように、最初の反復を除き、指定された点を通過しない曲線のすべての部分の再帰を安全に無視できます。元のプログラムの行をそれに応じて変更することにより、オンライン通訳でも正しい番号を確認できます

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

これをOctave 4.2.0で実行しました。


「ブルートフォースを行うと、睡眠やその他の速度低下を取り除くことができます。」

それで幸運:)


tioでも実行されていないようです
-Okx

1
@Okx TIOではタイムアウトしますが、デスクトップバージョンでは実行されます。
Rɪᴋᴇʀ

1
なぜ下票なのですか?
小麦ウィザード

3
@WheatWizardは、おそらく、複数の番号がある可能性があると理論的に考えられるためです。また、それはちょっと退屈です。RNGはちょっとつまらないので、もっと価値のある解決策を見たいと思いました。
Rɪᴋᴇʀ

1
@Rikerしかし、RNGの種を推測しているため、彼はRNG自体を実際に決定論的な関数として使用しています。ただし、一方向関数であると期待しているものを逆にするのが難しいことに依存していることを考えると、文字列を乱数で「true」に暗号化するだけで、選択した暗号化スキームを破ることになります秘密鍵を発見します。
シャッフルパンツ

1

Ly、スコア239、クラック

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

オンラインでお試しください!

ここでLyを知っている人は誰もいませんが、どれほど簡単に変更できるかは知っていますが... 汗を

説明:

(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

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によって解読されました。(の入力は1outputを生成yesしますが、同じ結果を生成する別の数値が1つあります。)

#!/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"に対して "yes"を返します。これは今クラックされたものとしてカウントされますか?
-Sleafar

@Sleafarため息...はい、それは私の側の愚かな間違いでした。
ジョン・ガワー

ただし、yesを出力する入力が2つあるため、このチャレンジは無効になります。したがって、あなたがそれを要求できるかどうかはわかりません。この投稿に修正版を追加しますが、万が一の場合に備えて元のものを残しておきます。
ジョン・ガワー

1

Ruby、安全、スコア:

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桁の自己陶酔的な数字はあり得ません。ナルシシズム。私が最初に書いたスレッドは、私がこれを投稿したのとほぼ同時に偶然衝突しましたが、誰も気付いていなかったと思います。2番目は数値を基数36に変換します。この基数は文字を数字として使用し、文字列に「joe」または「tim」が含まれているかどうかを確認します。ナルシシズムの数は有限であるため、JoeまたはTim(Joe)という名前のナルシシズムの数が1つしかないことが(枯渇によって)証明されます。それらが有限であることの証明: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は、ベース36で「1ahs」です。非反転、つまり「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()

基本的に、このコードは、文字列の1つがhash_code上記と完全に一致するハッシュを持つまで、可能なすべての文字列を遅延生成します。ハッシュされていないコードの基本的な形式は次のとおりです。

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

例外<insert number here>は数字に置き換えられ、コードにはほとんど推測できないようにするためのコメントがあります。

この投稿の恩恵を受けないようにあらゆる予防策を講じました。まず第一に、それはコミュニティwikiであるので、私はそれに対する代表者を得ません。また、私のスコアはかなり大きいので、もっと創造的な答えが出て勝つことを願っています。

皆さんが私の反応にあまり怒っていないことを願って、警官や強盗の投稿が通常ハッシュアルゴリズムを禁止している理由を見せたいだけです。


入力は標準入力から取得されます。出力は1(正しく推測された数値)または0(誤って推測された数値)です。
sonar235

これをコミュニティwikiにした理由はわかりません。これはあなたの答えであり、かなりの作業を要したようです。私は確かに、この答えが、問題が破られている証拠とも呼んでいないでしょう。これは賢明な答えであり、得点が高い可能性があります(1で機能しないことを証明することさえできません)。質問のポイントは、常に、賢明で興味深い方法で質問に近づく回答を集めることです(そして、楽しみを持っていますが、あなたのエンターテイメントを保証することはできません)。
小麦ウィザード

3
実際、この答えは無効です。ほぼ確実に(ハッシュに一致する長さ512ビットの文字列の天文学的な確率で)exec()意図したコードに到達する前におそらく有効なpythonコードではない何か他のものになります。
ジョシュア

1
@ sonar235:フラグメントテンプレートには512ビット以上が含まれています。
ジョシュア

1
ジョシュアの答えを拡張するには、コードの長さは102文字です。特に、プログラムはコードに到達する前に100文字ごとに繰り返し処理を行います。あなたのコードは、ある範囲0x00-0xFF、内の文字反復処理するので256 ^ 100または2 ^ 800文字列を。一方、2 ^ 512可能な512ビットハッシュのみがあります。つまり、反復する文字列は、可能なハッシュを少なくとも2 ^ 2881つ、つまり、宇宙の原子の数よりも10,000倍多い数よりも多くなります。その特定のハッシュが未使用になる確率は信じられないほど小さいです。
ジョン・ガワー

0

Python 3、49バイト、sonar235によりクラック

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

オンラインでお試しください!


ゼロは正の整数fyiではありません。それが意図したソリューションであったかどうかはわかりませんが、うまくいきます。
小麦ウィザード

0は意図した解決策ではありません。
ED

8
Uhh、TIOページに解決策が表示されています
...-LyricLy

2
また、「入力として数値を入力したときに1つの値を出力し、他のすべての正の整数入力に別の値を出力するプログラムまたは関数を作成します」
ジョナサンアラン


0

Java、スコア:3141592(ひび割れ

\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つの回答のみを確保するためにのみ存在します。そうしないと、明らかに無限に多くの回答が存在します。


1
TIOリンクを追加してください。
シャギー

1
将来の強盗の場合:整数はより小さいとは思われません100000000
ミスターXcoder

1
@Shaggy TIOでタイムアウトします。SHA256の10億回の反復を実行するには、コンピューターで約30分かかりました。
L3viathan

2
これを解決するためにチームを結成したい強盗はいますか?デッドラインの前に反復SHAダイジェストを計算する時間があるように、1000未満の数値を分割するだけです。
ジョン・ガワー

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");
}

暗号化ソリューションが推奨されているため、ここで。正確に1つの正の整数は何かを出力し、他のすべては何も出力しません。これには長い時間がかかるため、オンラインでテストすることはできません。


0

Java、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
一致する入力番号が1つだけあることが保証されていますか?
Rɪᴋᴇʀ

@Riker:TI計算機は何らかの浮動小数点を内部的に使用していると思います。RANDが他の浮動小数点と同じ浮動小数点を使用する場合、解決策は1つしかないと確信しています。
ジョシュア

@Joshua L'Ecuyer's Algorithmを使用していると思います。
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-)"

オンラインでお試しください!

シンプルですが、ブルートフォースに時間がかかる場合があります;-)速いクラックを楽しみにしています;-)

脚注:最初の2つと最後の条件により、答えが一意になります。

ところで、スコアの計算方法は?

ヒント1

内に2 64の答えがあると予想されるかもしれませんが0 <= x < [the 25-digit prime]、実際には4つしかなく、最後の条件は他の3つを排除します。




-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がビッグエンディアンであるため、誰かがx86またはx64でこれを試みるとSystem.BitConverterが間違った動作をすることに依存します。私はこの答えを書いて、他の何よりも挑戦の悪さを示しました。


1
これには厳密に1つの解決策はありません。整数の数は無限であり、MD5関数の出力の数は有限であるため、衝突が発生する必要があります
-pppery

@ppperry:わずか20億で、正の整数を変更します。
ジョシュア

そのように考えると、このエラーは2 ^ 31を超える入力でエラーになるため、無効です。
-pppery

@ppperry:エラーが発生しなくなりました。
ジョシュア

2
1が唯一の解決策であることを証明できない限り、この答えは無効です。立証責任は、有効な答えを持っていると主張する人にあるべきです。
デニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.