나는 숫자를 생각하고있다 (Cop 's Thread)


32

강도 실

도전에서 경찰은 양의 정수를 생각할 것입니다. 그런 다음 숫자를 입력으로 제공 할 때 하나의 값을 출력하고 다른 모든 양의 정수 입력에 대해 다른 값을 출력하는 프로그램 또는 함수를 작성합니다. 경찰은 그 번호를 비밀로 유지하면서 답안으로 프로그램을 공개 할 것입니다. 강도는 숫자를 찾아서 답을 해독 할 수 있습니다.

여기에 catch가 있습니다 : 이것은 아니며 대신 점수가 낮을수록 비밀 번호가됩니다. 강도가 여전히 점수를 찾으려고하는 동안에는 점수를 공개 할 수 없습니다. 게시 후 1 주일이 지나지 않은 답변은 점수가 공개되어 안전하다고 표시 될 수 있습니다. 안전한 답은 깨질 수 없습니다.

아마 말할 필요도 없지만 답을 채점 할 수 있어야합니다. 즉, 의사 결정 시스템이 어떤 가치를 수용하는지 정확히 알아야합니다. 하나만 있다는 것만으로는 충분하지 않습니다.

암호화 기능 사용

암호화 기능을 사용하지 말 것을 요구하는 대부분의 경찰 및 강도 도전과 달리,이 도전은 완전히 허용 할뿐만 아니라 권장합니다. 이기려고 노력하는 한 어떤 식 으로든 답변을 자유롭게 만들 수 있습니다. 즉, 다른 방법을 사용한 답변도 환영합니다. 도전의 목표는 승리하는 것이며, 당신이 속이지 않는 한 아무 것도 테이블에서 벗어납니다.


1
암호 기능을 허용하는 경우 프로그램에 시간 제한을 두는 것이 좋습니다.
Okx

12
대부분의 언어에서 매핑 알고리즘이나 간단한 루프를 사용하여 간단하게 크래킹 할 수 있기 때문에이 문제를 해결했습니다. 경찰과 도둑이 도전 하기에는 너무 쉬운 일이라고 생각합니다 .
Mr. Xcoder

2
받아 들여질 가치가있는 것 중 하나 (아마도 가장 작은 것)는 알고 있지만 정답이 더 있는지 또는 그들이 무엇인지 모르는 경찰이 많이있을 것 같습니다.
histocrat

12
@ Mr.Xcoder 당신은 downvote 무료이지만, 그것은 내 의견으로는 결함이 아니라 일종의 도전의 포인트임을 지적합니다. 계산 속도를 늦춤으로써 가능한 한 무차별 대항하기 어려운 경찰에게 도전은 대부분 재미있다. 더 창조적 인 답변은 무차별 강제로 점점 더 어려워지고 더 작은 숫자를 사용할 수있게됩니다.
밀 마법사

1
@WheatWizard 나는 그것이 승리하지 않을 것이라고 가정하지만 Ackerman 함수가 A(9,9)어디에 있는지 와 입력을 비교하는 프로그램과 같은 프로그램을 해독하는 것은 불가능 A합니다.
flawr

답변:


10

Tampio ,

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

@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 ]는 연산자 op를 사용하여 목록을 축소 (하스켈 링고에서 "폴딩")하는 것을 의미합니다 . 호출 된 하위는 postfix:<!>실제로!라는 접미사 연산자를 정의합니다. (즉,처럼 사용됩니다 5!-정확히 예상대로 작동합니다). prefix:<∫>하나도 마찬가지입니다 .

누군가가 이것을 즐기기를 바랍니다. 그러나 어려움을 제대로 겪었는지 확실하지 않습니다. 의견에서 저를 강타하십시오 :—).

온라인으로 사용해보십시오!



4

자바 스크립트, 깨짐

나는이 답변에 맞지 않는 지점까지 가능한 한 이것을 난독 화했습니다.

여기 사용해보십시오! 실행을 클릭 한 다음 콘솔에 입력하십시오.guess(n)

틀린 답을 얻으면 undefined를, 그렇지 않으면 true를 반환합니다.

편집 : 어떻게 든 내 점수에 대한 부분을 간과했습니다. 글쎄, 내 번호는 매우 크다. 어쨌든 그것을 해결하는 행운을 빕니다.



3

젤리 , 점수 : ... 1 ( 크랙 )

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

온라인으로 사용해보십시오!

1 내가 그것을 밝히기를 기대 했습니까? 어서! 글쎄요, 점수는 134 점입니다.



@ Mr.Xcoder 그것은 오래 살았다 ...
Outgolfer Erik

방금 입력 Ç€G하고 범위 1...1000를 입력으로 추가했습니다 .P
Mr. Xcoder

당신은 5ȷ2_부분을 봤어요 ?
Outgolfer Erik

아니요, 코드 lol도 보지 못했습니다. 방금 테스트 스위트를 추가하고 어디에 있는지 11
확인한

3

파이썬 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 Wow, 예상보다 조금 빠릅니다.
Sisyphus

온라인으로 스도쿠 솔버를 찾는 것은 어렵지 않습니다.
Leaky Nun

스도쿠 검사기에 문제가 있습니다. 가로선과 세로선을 모두 확인했지만 처음 세 개의 셀만 확인했습니다.
Leaky Nun

당신에게 맞아요을 @LeakyNun,가 a있어야한다 i+a. 나는 그것을 고쳤
Sisyphus

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

자바, Nitrodon에 의해 금이

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. 작은 숫자의 경우 온라인으로 시도 할 수도 있습니다 .

힌트:

프로그램의 주요 부분은 잘 알려진 알고리즘 의 변형 을 구현합니다 . 그것이 무엇인지 알면 주어진 프로그램을 최적화하여 비밀 번호를 계산할 수 있습니다.

설명:

이 프로그램은 잘 알려진 Koch 곡선 의 2 차 변형 (유형 2)의 순회를 구현합니다 (Wikipedia의 이미지). 비밀 번호는 점 (B, C)을 통과하지 않는 첫 번째 반복입니다. 첫 번째 반복을 제외하고 Nitrodon 에 의해 올바르게 인식 되었으므로 주어진 점을 통과하지 않는 곡선의 모든 부분의 재귀를 무시할 수 있습니다. 그에 따라 원본 프로그램에서 줄을 변경하면 온라인 통역사 에서도 정확한 번호를 확인할 수 있습니다 .

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"를 암호화하면 선택한 암호화 체계를 어기는 것이 거의 도전입니다. 개인 키를 발견합니다.
셔플 팬츠

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

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"에 대해 "yes"를 반환합니다. 이것은 지금 금이 간 것으로 간주됩니까?
Sleafar

@ Sleafar Sigh ... 네, 그건 멍청한 실수였습니다.
John Gowers

그러나, 예를 인쇄하는 두 개의 입력이 있으므로이 챌린지가 이제 유효하지 않다는 것을 의미하므로 청구 할 수 있는지 확실하지 않습니다. 이 게시물에 수정 된 버전을 추가하되 원할 경우 원본을 그대로 두십시오.
John Gowers

1

루비 , 안전, 점수 :

63105425988599693916

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

온라인으로 사용해보십시오!

설명:

첫 번째 조건은 자기애에 대한 입력 번호를 확인합니다 . 내가 처음 쓰던 쓰레드는 이것을 게시했을 때 우연히 충돌했지만 아무도 눈치 채지 못했습니다. 두 번째는 숫자를 문자 36을 숫자로 사용하는 밑수로 변환하고 문자열에 "joe"또는 "tim"이 포함되어 있는지 확인합니다. 자기애 적 숫자가 유한하기 때문에 Joe 또는 Tim (Joe)이라는 자기애 적 숫자가 하나만 있음을 증명할 수 있습니다 (고갈을 통해). 그것들이 유한하다는 증거 : n 자릿수를 취하고 각 자릿수를 n 제곱으로 올린 다음 합산은n*9^nn 자리 숫자의 값은 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을 출력합니다.

편집 : 나는 누구도 이것을 크랙하려고 시도하지 않았다고 생각합니다.

무차별 대항하기 쉽다.

설명:

입력을 받아 "base 36"으로 변환하지만 나머지를 뒤집어 최종 숫자를 생성하지는 않습니다. 숫자 60256은 기본 36에서 "1ahs"입니다. 반전되지 않은, 즉 "sha1"은 PHP의 함수입니다. 마지막 확인은 sha1 (60256)이 해시와 동일하다는 것입니다.



0

파이썬 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
실제로이 답변은 유효하지 않습니다. 의도 한 코드에 도달하기 전에 파이썬 코드조차 유효하지 않은 다른 것이 exec () 일 것입니다.
Joshua

1
@ sonar235 : 프래그먼트 템플릿에 512 비트 이상이 있습니다.
Joshua

1
Joshua의 답변을 확장하려면 코드의 길이는 102 자입니다. 특히, 프로그램은 코드에 도달하기 전에 100 자 문자열마다 반복됩니다. 코드는 범위 0x00-0xFF, 문자를 통해 반복 처리 이후 256 ^ 100또는 2 ^ 800문자열을. 한편, 2 ^ 512가능한 512 비트 해시 만 있습니다. 즉, 반복하는 문자열은 가능한 해시 2 ^ 288보다 우주의 원자 수보다 10,000 배 더 큰 해시 보다 수를 초과합니다. 특정 해시가 사용되지 않을 확률은 매우 작습니다 .
John Gowers

0

Python 3 , 49 바이트, sonar235에 의해 크랙 됨

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

온라인으로 사용해보십시오!


0은 postive integer fyi가 아닙니다. 그것이 의도 된 해결책인지는 모르겠지만 효과가 있습니다.
밀 마법사

0은 의도 된 솔루션이 아닙니다.
ED

8
어, TIO 페이지가 해결책을 보여주고 있습니다.
LyricLy

2
또한 "입력으로 숫자를 제공 할 때 하나의 값을 출력하고 다른 모든 양의 정수 입력에 대해 다른 값을 출력하는 프로그램 또는 함수를 작성하십시오 "
Jonathan Allan


0

자바, 점수 : 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. 입력은 stdin에서 가져옵니다. 마지막 부분 ( and int(original.decode())<1000)은 하나의 답변 만 보장하기 위해 존재합니다. 그렇지 않으면 분명히 많은 답변이있을 것입니다.


1
TIO 링크를 추가 할 수 있습니까?
Shaggy

1
미래 강도 : 정수는보다 작지 않은 것 같습니다 100000000.
Mr. Xcoder

1
@Shaggy TIO에서 시간이 초과 될 것입니다. SHA256의 10 억 회 반복을 실행하는 데 약 30 분이 걸렸습니다.
L3viathan

2
이 문제를 해결하기 위해 팀을 구성하는 강도가 있습니까? 마감 시간 이전에 반복 된 SHA 다이제스트를 계산할 시간이 있으므로 숫자를 1000 미만으로 나누면됩니다.
John Gowers

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

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
정확히 일치하는 입력 번호가 하나만 보장됩니까?
Rɪᴋᴇʀ

@Riker : TI 계산기는 어떤 종류의 부동 소수점을 내부적으로 사용한다고 생각합니다. RAND가 나머지 부동 소수점과 동일한 부동 소수점을 사용하면 솔루션이 하나만 있다고 확신합니다.
여호수아

@Joshua 나는 L' Ecuyer 's Algorithm을 사용한다고 생각합니다 .
kamoroso94

@Joshua "꽤 확실하다"로는 충분하지 않습니다. 단 하나의 솔루션 만 존재한다는 것을 증명할 수 없으면 올바른 답변이 아닙니다.
Rɪᴋᴇʀ

1
@Dennis : 196164532 * 2에 대한 프로브; 그것이 다른 해결책이 아닌 해결책이 아닌 경우.
여호수아

0

파이썬 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-)"

온라인으로 사용해보십시오!

단순하지만 무차별 대입에 시간이 걸릴 수 있습니다 ;-) 빠른 균열을 기대합니다 ;-)

각주 : 첫 두 조건과 마지막 조건은 답을 독특하게 만듭니다.

BTW 점수는 어떻게 계산됩니까?

힌트 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);
}
}

꼼꼼한. 진심이야. 알파 시뮬레이터가 많이 있습니다. 지터가있는 것을 사용하면 완료되지 않습니다.

이것은 누군가가 x86 또는 x64에서 이것을 시도하면 Alpha가 빅 엔디안이라는 사실에 따라 System.BitConverter가 잘못된 일을하게합니다. 나는 무엇보다도 도전의 악을 증명하기 위해이 답변을 썼습니다.


1
이것은 정확히 하나의 솔루션을 가질 수 없습니다. 무한 수의 정수가 있고 MD5 함수는 유한 수의 가능한 출력을 가지므로 충돌이 있어야합니다
pppery

@ppperry : 20 억 개만 있고 긍정적 인 정수가 바뀝니다.
Joshua

그렇게 생각하면 2 ^ 31보다 큰 입력 에서이 오류가 발생 하므로 유효하지 않습니다.
pppery

@ ppperry : 이제는 오류가 없습니다.
Joshua

2
1 이 유일한 해결 책임을 증명할 수 없으면 이 답변은 유효하지 않습니다. 증거의 부담은 유효한 답변이 있다고 주장하는 사람에게 있습니다.
데니스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.