중요한 공백 : 경찰


51

이 과제의 목적을 위해, 우리는 정의 할 것이다 공백 으로 줄 바꿈 (0x0A)과 공간 (0x20입니다). 대부분의 언어와 정규 표현식은 ASCII 문자의 내부와 외부에서 많은 다른 문자를 공백으로 간주하므로 해당 내장 기능을 사용하지 못할 수 있습니다.

경찰의 도전

ASCII (NUL 제외) 문자로 구성된 문자열을 입력으로 사용하고 모든 공백을 제거한 상태로 출력하는 프로그램 또는 함수를 선택한 언어로 작성해야합니다. 예를 들어 다음과 같은 입력을받은 경우 :

H e l l o,
 W o r l  d!

출력해야합니다

Hello,World!

제출은 모든 공백이 제거 된 소스 코드 가됩니다 (솔루션이 ASCII 범위 밖의 문자를 포함 할 수도 있지만 입력을 솔루션으로 전달하는 것과 동일한 프로세스). 목표는 선택한 언어로 유효한 솔루션을 복구하기 위해 공백을 삽입해야하는 위치를 파악하기 어렵게 만드는 것입니다. 강도는 제거한 것보다 적은 공백을 삽입 할 수 있지만 그보다 많지는 않습니다. 또한 강도는 정확한 코드와 일치 할 필요가 없으며 유효한 솔루션 만 찾으면됩니다.

귀하의 답변에는 다음이 포함되어야합니다.

  • 솔루션을 작성한 언어 (및 필요한 경우 버전)
  • 공백 제거 하기 전에 솔루션의 바이트 수입니다 .
  • 공백이 제거 된 솔루션.

솔루션은 프로그램 또는 기능 일 수 있지만 스 니펫은 아닐 수 있으며 REPL 환경을 가정해서는 안됩니다. STDIN, 명령 행 인수 또는 함수 인수를 통해 입력하고 STDOUT, 함수 리턴 값 또는 함수 (out) 매개 변수를 통해 출력 할 수 있습니다.

공정성을 위해 선택한 언어에 대한 무료 통역사 또는 컴파일러가 있어야합니다.

난수 생성기를 고정 된 값으로 시드하더라도 해싱, 암호화 또는 난수 생성에 내장 기능을 사용해서는 안됩니다. 솔루션은 합리적인 데스크탑 시스템에서 10 초 이내에 100 자 이하의 문자열을 처리 할 수 ​​있어야합니다.

7 일 (168 시간) 내에 답변이 깨지지 않은 경우 답변이 안전한 것으로 간주되는 시점에 자신의 해결책을 밝힐 수 있습니다 . 해결책을 밝히지 않는 한, 7 일이 지난 후에도 여전히 강도에 의해 금이 갈 수 있습니다. 가장 짧은 안전 응답이 이깁니다 (공백을 제거하기 전에 측정).

답변에 금이 가면 답변 헤더에 해당 강도의 답변 링크와 함께 표시하십시오.

강도들을 위해 여기가십시오 .

크랙되지 않은 제출

<script>site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 103182;</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


관련. (사실에서 영감.)
마틴 청산

7
...이 문제를 휴식 것이 공백처럼 보인다
NoOneIsHere

8
@SeeOneRhino 왜? 강도는 단지 공백보다 많은 바이트를 사용하지 않고 공백에서 문제를 해결해야합니다. 경찰이 어느 누구도 할 수없는 미묘한 골재의 공백 응답을 찾지 못하면 공백 응답은 일반적으로이 문제에서 가장 취약합니다.
Martin Ender

1
@SeeOneRhino 또한 탭은 공백으로 계산되지 않으므로 제거되지 않습니다.
mbomb007

4
어떤 hexagony 제출이 시간, 나는 생각하지 않습니다
MildlyMilquetoast

답변:


17

Haskell, 100 바이트, nimi에 의해 크랙 됨

main=interact$iddoidlinesidwordsdoidoidoid=doiddoid<-dooiidoid<-dooiddoiddodoid

이것은 전체 프로그램과 dadaistic시입니다.


공백이있는 코드 (온라인 시도)

main=interact$id doid lines id words
doid oi d o id=do
 iddoid<-do oi id
 oid<-do o iddoid
 do d oid

당신이 나에게 묻는다면 여전히 꽤 시적입니다.

난독 처리

main = interact f
f s = do
 l <- lines s
 w <- words l
 id w

설명

- do표기는 구문 설탕 일 뿐이므로 f다음과 같이 쓸 수 있습니다.

f s = lines s >>= words >>= id

목록의 경우 >>=- 연산자는 다음과 같이 정의되어 concatMap있으므로, f이된다

f = concat . map id . concat . map words . lines

그래서 입력 주어 "a b\nc", lines줄 바꿈에 입력을 분할 ["a b","c"], words항복 공백에서 각 행을 분할 [["a","b"],["c"]](그래서 난 단지 지금이 줄 바꿈을 포함 실현으로 lines실제로 필요하지 않습니다). 번 연접 제공 ["a","b","c"], id식별 함수 등이 영향을주지 않고 연결하여 최종 문자열을 산출한다 "abc".


3
내가 다다이즘 적시를 좋아한다고 말해야 합니까?
Dada


@nimi 네, 잘하셨습니다.
Laikoni

12

C, 475 바이트, Riley에 의해 크랙 됨

C의 특정 부분으로 인해 공백이 어디로 가야하는지 쉽게 알 수 있습니다. 그러나 c 전처리 기는 그렇지 않습니다. 따라서이 코드는 두 줄로 나뉩니다. 최대 17 행 (공백이있는 236 자) 코드는 실제로 난독 화되고 그 후에 (공백이있는 239 자) 행운을 빕니다!

오랫동안이 경쟁에서 이길 수는 없지만 c 전처리기로 무엇을 할 수 있는지 알고 싶었습니다.

#include<unistd.h>#defineachar#defineb*#definecwrite#definedstdin#defineestdout#definefread#defineg(#defineh)#defineiwhile#definejif#definek0#definel&#definem,#definen=#defineo;#definep1#definegpmlmlh#defineabo#definemldmp#definejgdoabo#definelbabod#definegfhaboc#definejgmben#definepmlfg#definegpmlbintmain(){ajgajgmljgigpmlkmlgpmlhjgd!=''&&gpm!='\n'gfgpmlgpmlo}

(경고, 당신이 그들을 사용하도록 설정하는 경우)와 컴파일 gcc -std=c89 -ansi과 같이 작동cat file | ./a.out


이것은 내가 생각했던 것보다 훨씬 빨리 금이 갔다. 축하합니다! 내 전략은 #defines';'와 같은 명백한 토큰 경계를 제거하고 더 많이 #defines사용하여 실제로 어떻게 섞여 있는지 직관적이지 않게하는 것이 었습니다.

그건 그렇고, 명백한 공백 만 추가 된 후 코드는 다음과 같습니다.

#include <unistd.h>
#define a char
#define b *
#define c write
#define d stdin
#define e stdout
#define f read
#define g (
#define h )
#define i while
#define j if
#define k 0
#define l &
#define m ,
#define n =
#define o ;
#define p 1
// thus begins the obfuscation
#define gpmlmlh
#define abo
#define mldmp
#define jgdoabo
#define lbabod
#define gfhaboc
#define jgmben
#define pmlfg
#define gpmlb
int main(){
    ajgajgmljgigpmlkmlgpmlhjgd!=''&&gpm!='\n'gfgpmlgpmlo
}

5
PPCG에 오신 것을 환영합니다! :)
Martin Ender

1
이 하나 개의 방법이 정말 재미.
Riley

9

옥타브, 69 바이트, 안전!

@(U)eval([85329685312682956148388531268295156241''])

입력 형식 : 명령 줄에 줄 바꿈을 직접 입력 할 수 없습니다. 다음과 같이 연결하여 문자열을 작성하십시오.

str = ['This is ',10,'a',10,'string']
str = This is
a
string

다음과 같이 함수를 호출하십시오 (공백 추가).

f=@(U)eval([85329685312682956148388531268295156241''])  
f(['This is ',10,'a',10,'string'])

원본 코드 :

이 작업에는 66 바이트 만 필요했지만 너무 많은 정보를 제공하지 않기 위해 헤더에 69를 썼습니다.

원래 코드는 다음과 같습니다.

@(U)eval([853 296 853 126 829 561 48 38 853 126 829 51 562 41 ''])

설명:

@(U)eval(.....)    % Anonymous function taking U as the input variable

U85ASCII 테이블의 코드 포인트 이므로 첫 번째 공백 뒤에와 같이 나타납니다 85. 잘못된!

853대신 공백을 삽입하면 문자 번호 853를 가져와야합니다. char인식 가능한 문자인지 확인하는 데 사용 :

char(853)
warning: range error for conversion to character value

그러나 우리는 char코드에서 사용하지 않고 빈 문자열로 숫자를 연결하는 짧은 버전을 사용합니다 [853 '']. 범위를 벗어난 오류를 발생시키는 대신 짧은 버전은 단순히 계수 256을 취합니다.

그냥 그렇게 85+3*256 = 853됩니다. 하지만 char(853)경고를 제공, [853,'']반환합니다 U.

Octave에서이 작업을 수행하는 확실한 방법은 다음과 같습니다.

@(U)U(U~=10&U~=32)

첫 번째 뒤에 여는 괄호 (코드 포인트 40)가 있어야한다는 것을 알고 있습니다 U. 29분명히 맞지 않기 때문에 공간을 더 오른쪽으로 이동하고 얻을 수 296있습니다. mod(296,256) = 40. 빙고!

이처럼 계속하고 시퀀스로 끝납니다.

[853 296 853 126 829 561 48 38 853 126 829 51 562 41 '']
ans = U(U~=10&U~=32)

마지막으로 eval문자열을 코드로 변환합니다.


3
10 :-D
Luis Mendo

1
글쎄요, 지금도 U그 숫자들 중에서 문자를 인식한다는 점을 제외하고는 전혀 모릅니다. :-)
Luis Mendo

2
아주 좋은 트릭! Octave가 문자 코드로 그렇게한다는 것은 미친 일입니다. 나는 그것에 대해 전혀 몰랐다. 그러나 공식 문서에서 Octave 가 우연히 유니 코드 지원한다고 말할 때 무엇을 기대할 수 있습니까 ... :-P
Luis Mendo

7

SLuck49에 의해 크랙 된 JavaScript ES6, 199 바이트

33 바이트의 공백이있는 다소 부피가 큰 항목입니다.

s=>eval(atob`ISYgJiAtOkI8Qk97BRBeaxZFShoUZSsiOGkMenNy`.replace(/./g,(c,i)=>String.fromCharCode(c.charCodeAt()^(k+="SecretCode".split(/\w/)[i%11].length)),k=0)).join``

멋진 하나 .. 암호화 된 문자열을 고르고 적절한 소스를 얻기 위해 "SecretCode"에 적절한 양의 공백을 추가해야한다고 생각합니다.
Patrick Roberts

@PatrickRoberts 그렇습니다.
Arnauld

나는 이미 가능한 모든 조합을 테스트하는 자동 스크립트를 가지고 있습니다. 그것은 단지 시간 문제입니다 ... 그의 사악한 계획이 작동한다는 것을 알고 손을 모으십시오
Patrick Roberts

휴 ...이 생각보다 오래 걸렸습니다. 길이 N의 배열과 요소가 합산 해야하는 합계 S를 고려할 때 가능한 순열 수를 계산하기 위해 코드 골프 도전을 작성하려고합니다. 지금 [ 10, 0, 0, 0, 0, 9, 8, 1, 5, 0, 0 ]은 갭 시퀀스에 있으며 배열의 반복 함수는 (a)=>{for(var x=0;!a[x];x++);if(a.length-x>1){a[0]=a[x]-1;a[x]=(x==0?a[x]:0);a[x+1]++;}else{a[0]=a[x]+1;a[x]=0;i=0}}입니다. 에서 시작했습니다 [ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ].
Patrick Roberts



6

Befunge-93, 58 바이트, 안전!

_vv$v<~:!`:<#^0*@-:0*5|845\+`-v0,<#-^<

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

오리지널 프로그램

_vv
 $ v<
 ~:!`
 :<#^0
*  @
-:0
*5 |
8
45
\+`
-
v0,<
#-
^<

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

이에 대한 요령은 실행 경로가 수평보다 수직이라는 것입니다. 그런 다음 수직 경로를 더 섞기 위해 코드에 다양한 공간이 무작위로 삽입되었습니다. 줄 바꿈과 공백이 마침내 제거되면, 작업이 서로 어떻게 관련되어 있는지를 나타내는 것은 거의 없었습니다.

그것이 충분히 어렵지 않은 경우, 나는 또한 약간의 인터리빙을 던 졌으므로 여러 작업이 서로 수직으로 흐르는 다른 코드 경로에 의해 실행되었습니다. 특정 명령에 대한 올바른 위치를 찾았다 고 생각되면 나중에 코드에서 다시 사용해야 할 수도 있습니다.

일을 복잡하게 만들려고 노력하는 것이 가치가 있는지 또는 사람들이 그것을 해결하려고 애 쓰지 않았는지 확실하지 않습니다. :)

코드 설명

_      Since an empty stack is treated as zero, this initially just branches right.
v      The program flow is then directed downwards.
$      And this drop command initially does nothing because the stack is still empty.
~      A character is read from stdin.
::     Two duplicates are created.
55+-   We subtract 10 from the first copy (the 0- is just a nop to confuse things).
\48*-  And subtract 32 from the second copy.
*      The product of those two will be zero if the character is a newline or space.
_      So if we got whitespace, our branch goes right again repeating the loop.

v      If not, we go left, wrapping around till we hit the down arrow in column 3.
:<:    Again we make two duplicates of the character.
0`!|   One copy is used to compare if it's not greater than zero.
@      If it's not (i.e. it's the EOF), the branch goes up and we terminate.
<      Otherwise we go down and to the left.
,      Output the second copy of the character, leaving one remaining on the stack.
0      Push a zero to force the next branch right.
v      Redirect the flow down, wrapping to the top again.
_      Back at our initial branch, the zero we pushed forces us right.
v      Again the program flow is directed downwards.
$      And the drop command gets rid of the last duplicate character.
~      So now we're back reading the next character and the loop repeats.

5

C # 6, 201 바이트, Link Ng에 의해 크랙 됨

usingSystem.Linq;_=>string./**/#iftrueJoin(/*"*//*/""/**//*/"*/",#elseConcat(//*/,#endiffrommin""letp=$@"{@""[1]}"fromiin(_.Replace(p,@""))where!new[]{p[0]^32^10}.Contains(i)select@i);

184 바이트가 축소되어 17 바이트의 공백이 남습니다.

Concat내 의도 된 솔루션을 사용 하여 깨진 솔루션을 사용했습니다 Join. 의도 된 솔루션은 다음과 같습니다.

_=>string./**/
#if true
Join(/*"* //*/""/**//*/"* /",#elseConcat(//*/,
#endif
from m in" "let p=$@"{@"  "[1]}"from i in(_.Replace(p,@"
"))where!new[]{p[0]^32^10}.Contains(i)select@i);

작동하려면 c # 6 이상이 필요합니다. 추가 할 수 있습니까?
TheLethalCoder

이것은 @link 잉에 의해 금이되었습니다 codegolf.stackexchange.com/a/103233/38550
TheLethalCoder을

5

MATL , 22 바이트 금이 간 .

STDIN을 통해 입력을 받고 STDOUT을 통해 출력을 생성하는 프로그램입니다.

공백이나 줄 바꿈이없는 코드 :

t'@*'dm1e5%Mdw%Y(

입력 형식이 때문에 MATL 문자열 입력을 받아 어떻게 좀 어색하다. 줄 바꿈이있는 문자열은 각 입력이 한 줄이어야하므로 줄 바꿈 (STDIN)을 통해 직접 입력 할 수 없습니다 (줄 바꿈은 입력 끝을 표시 함). 따라서 형식은 다음과 같습니다.

  1. 문자열은 작은 따옴표로 묶습니다 . 문자열 내용에 작은 따옴표가 포함 된 경우을 복제하여 이스케이프합니다 . 예:'I''m a string'

  2. 줄 바꿈으로 문자열을 입력하려면 문자열을 줄 바꿈으로 나누고 숫자를 ASCII 코드 로 포함하여 모든 대괄호를 사용하여 연결해야합니다 . 예를 들어, 이름과 성 사이에 줄 바꿈이있는 문자열을 생각해보십시오. 로 입력됩니다 ['Luis' 10 'Mendo'].

    다른 (인쇄 불가능한) ASCII 코드를 입력 할 수 있습니다. 따라서 위의 항목 1의 문자열을 대신로 입력 할 수 있습니다 ['I' 39 'm ' 97 32 'string']. 여기서 확인 하십시오 .

    유일한 조건은 괄호 안의 부품 중 하나 이상이 문자열이라는 것입니다. 연결하면 숫자가 ASCII 코드로 해석됩니다.

이 형식을 사용하여 어색한 행운을 빕니다!

독창적 인 솔루션

t' @ *'dm1e 5%
Mdw%Y
(

각각 %은 주석 기호이므로 나머지 줄은 무시됩니다.

공백은 아무 것도하지 않지만 구분 기호로 사용됩니다. 예를 들어, 1e5공백이 없으면 숫자로 해석됩니다 100000.

t 입력을 받아서 복제합니다.

' @ *'해당 문자열을 푸시 d하고 연속적인 차이를 계산하여 [32 -32 10]결과 -32는 쓸모가 없습니다.

m문자가되고 있는지를 나타내는 논리 로우 어레이 제공 32하거나 10(또는 -32).

1e행 형태 로 재구성됩니다. 이것은 여기에 없습니다.

5그 다음에 다시 M푸시 1합니다 (가장 최근의 다중 입력 기능에 대한 입력, 즉 e).

d의 연속 차등을 계산 1하므로 [](빈 배열)을 제공합니다.

w스왑하고 마지막 으로 공백 문자를 (할당 []합니다. 즉,이를 제거합니다.


1
넌 거짓말하고있어! 이 방법으로 작동하지 않습니다! (+1) ...
Stewie Griffin


2
쓰레기 ... 나는 이미 두 번, 음 ... 금했다 통보하지 않았다 .
Stewie Griffin

둘 다 잘 했어! :-) 정확히 의도 한 솔루션은 아니지만 완벽하게 작동합니다.
Luis Mendo

4

RProgN , 15 바이트 깨짐!

''`R""`R

여기 코드로 장난감을 만들 수 있습니다 . 비교적 간단한 해결책, RProgN이 문자열을 처리하는 방식의 성가신 특성이 균열을 남기지 않기를 바랍니다.

오리지널 프로그램

' ' ` R
"
" ` R

설명

먼저, 입력은 암시 적으로 스택으로 푸시됩니다. 스택:<INPUT>

그런 다음 ''를 사용하여 공간을 스택으로 푸시합니다. 스택:<INPUT> " "

`는 실제로`(WORD)로 표시된 문자열을 푸시하려고 시도하지만 그 뒤에 공백이 있기 때문에 빈 문자열을 푸시합니다. 스택:<INPUT> " " ""

여기서 R은 Replace 명령의 설탕입니다. 스택:<INPUTWITHOUTSPACES>

다음으로, "NEWLINE"은 개행 문자를 포함하는 문자열을 푸시합니다. RProgN은 이스케이프를 사용하지 않기 때문에 좋습니다. 스택<INPUTWOSPACES> "\n"

그런 다음`트릭을 다시 사용하고 Replace를 사용하여 출력을 제공합니다.


이것이 파이어 폭스에서 작동합니까?
Conor O'Brien

파이어 폭스에서 실행 중입니다. 문제가 있습니까? 스크린 샷을 얻을 수 있습니까?
ATaco


글쎄요. 나는 거의 반 시간을 지속했다!
ATaco


4

, 72 바이트, 안전!

이제 2D 언어입니다. TIO Nexus 에서 재생할 수 있습니다 .

s'''>`+++)+Ss`n\
 n`sS+(+++`<``/
 >rgn\
 ^ @<(\  
     H         <
 ^    /

사람들을 시도하고 속일 수있는 많은 일이없는 상당히 직설적 인 프로그램.

s'''>`+++)+Ss`n\ # Sets the memory slot 0 to 0, 10 to 10 and 32 to 32. n will redirect down
 n`sS+(+++`<``/  # since memory != store. \ is a red herring and not hit.
 >rgn\           # read in from input and set store to memory value. For all characters
 ^ @<(\          # other than space, LF and end of input this will be different and n will 
     H         < # redirect down then through to the print and back to read. Space, LF and  
 ^    /          # end of input get directed to the ( which tests for 0. This will redirect 
                 # space and LF to path back to read, otherwise it will skip over and halt

1
데니스가 TIO에 추가 할 수 있도록 시간이 있으면 통역사를 노드로 옮기
겠다고

1
인터프리터 의 노드 복제본 을 만들었고 Dennis는 이제 TIO에 추가했습니다 !
ETHproductions

4

미로 , 127 바이트

);""{"".@"-;,""""":"##"*"(:"+":}-;{";;"*#{:;"#""+("-;"";;"})"";""""""""

잘만되면 나는 이것을 올바르게했다 :) 이것은 나의 첫번째 경찰과 강도의 입장이다.

원본 코드

 ) ;""{"".@
"-;, "" ""
"  :
" ##
" *
" (:
"  +
"  :}-;{
"    ; ;
" *#{: ;
" #    "
" +("-;"
"    ; ;
"    })"
"      ;
""""""""

당신의 대답은 이제 안전합니다, 당신은 당신의 원래 코드와 설명을 추가 할 수 있습니다.
Laikoni

4

큰 정수 가져 오기를위한 Java, 3241 + 28 바이트

이 항목은 순전히 암호로 안전한 항목의 가능성을 증명하기위한 것입니다. 나는 이것이 규칙 안에 있다고 생각하지만 그것이 정신에 위배되는 경우 알려 주시면 공정성을 기각 할 것입니다. 균열이 발견 될 때까지이 "안전하지 않은"상태로 두겠습니다. 이것은 괴물이며 확실히 더 최적화 될 수 있지만 여기에 있습니다.

interfacer{staticvoidmain(String[]A){Strings=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,",q=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,",a="",b="";for(Stringt:s.split(",")){a+=t.length();}for(Stringt:q.split(",")){b+=t.length();}if((newBigInteger(a).multiply(newBigInteger(b)).toString()).equals("3649760552772806991406184564114682549877113954361462782925976763675666255653486225665808494957477900238166874367635068317805381406282572366371821972593595701388544127398102379288357379612333197280663769935384647844344358594407966485992727383589962048236726744715096711312156760311643104858212670342667229690568585229658813910569607411855770280546861422837629553847973043531578541545436967345783407835402474562087790816775240815912495599135241317")){System.out.println(A[0].replaceAll("","").replaceAll("\n",""));}}}

강도에 대한 공평성에서 여기에 "명백한"공백이 모두 추가되었습니다.

interface r {

    static void main(String[] A) {
        String s = ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", q = ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", a = "", b = "";
        for (String t : s.split(",")) {
            a += t.length();
        }
        for (String t : q.split(",")) {
            b += t.length();
        }
        if ((new BigInteger(a).multiply(new BigInteger(b)).toString()).equals("3649760552772806991406184564114682549877113954361462782925976763675666255653486225665808494957477900238166874367635068317805381406282572366371821972593595701388544127398102379288357379612333197280663769935384647844344358594407966485992727383589962048236726744715096711312156760311643104858212670342667229690568585229658813910569607411855770280546861422837629553847973043531578541545436967345783407835402474562087790816775240815912495599135241317")) {
            System.out.println(A[0].replaceAll("", "").replaceAll("\n", ""));
        }
    }
}

행운을 빈다, 나는 이것이 금이 간 것을보고 싶다. 사실 나는 이것에 대해 무제한의 현상금을 제정 할 것입니다. 언제 라도이 문제를 해결하면 스택 교환에 대해 500 회 에 걸쳐 무한한 상을 받게됩니다 (그리고 훌륭한 수학 논문도 가능).



2
당신의 솔루션과 광산은 깨지지 않은 시대를 걸어 갈 것입니다.
Joshua

1
다운 보더에게이 서브 미션에 대해 불법적 인 것이 있습니까?
Rohan Jhunjhunwala

1
실제로 이것에 대한 간단한 해결책이 있습니다 (RSA-440에 해당하는 수를 고려하지 않음). 불행히도 ~ 10,000 바이트가 더 필요합니다.
SLuck49

1
@ SLuck49 댓글을 달 수 있습니까?
Rohan Jhunjhunwala

1
트윗 담아 가기 방금 당신이보고있는 것을 깨달았습니다! 나는 거의 500 명성을 잃었다.
Rohan Jhunjhunwala

3

C, 140 바이트, Riley에 의해 크랙

쉬운 것으로 시작합시다.

#include<stdio.h>intmain(){inta=getchar();while(a!=EOF){//\a=getchar();if(a!=10&&a!=32)//\\putchar(a^10^32);putchar(a);a=getchar();}}

(내가 올바르게하고 있기를 바랍니다.)


1
깨진. 1 바이트가 적기 때문에 indended 솔루션이 아닙니다.
Riley

@Riley 끝에 추가 줄 바꿈을 추가하면 괜찮을 것입니다.)
Alfie Goodacre


2

V , 37 바이트 nmjcman101에 의해 크래킹

OVrS200@"kIi|D@"Aüî|D@"

여기에는 인쇄 할 수없는 것이 있으므로 다음은 읽을 수있는 버전입니다.

O<esc>Vr<C-a>S200<esc>@"kIi<C-v><C-v><esc>|D@"<esc>Aüî<esc>|D@"

또는 원하는 경우 16 진 덤프 :

00000000: 4f1b 5672 0153 3230 301b 4022 6b49 6916  O.Vr.S200.@"kIi.
00000010: 161b 7c44 4022 1b41 fcee 1b7c 4440 22    ..|D@".A...|D@"

그건 정말 멋진 퍼즐했다
nmjcman101


2

자바 스크립트 ES6, 380 바이트, 안전

이것은 내가 처음에 출시하려고 계획 한 종류의 항목입니다. 그것은 거대하고 이길 기회가 거의 없지만 7 일을 견딜 수있을 정도로 암호 적으로 강력해야 한다고 생각 합니다. 지금, 나는 틀린 것으로 증명 될 수있다!

추가 할 67 바이트의 공백.

s=>{for(k=`|||`.split`|`.map(s=>s.replace(/\s/g,c=>(k-=(c<'')+1,n=n<<2|k&3),k=n=0)&&n),x=10106050295,y=-4955405499,i=32,d=2654435769,t=d*i;i--;y-=(x<<4^x>>>5)+x^t+k[t>>>11&3],t-=d,x-=(y<<4^y>>>5)+y^t+k[t&3]);returns[atob(([x,y].map(n=>String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24)).join``))](/[\n]/).join``}

해결책

이것은 확장 된 Tiny Encryption Algorithm 의 구현입니다 . 64 비트 공백으로 인코딩 된 키는 다음 128 비트 키로 확장됩니다.

K = [0xd224de37, 0x89e34e79, 0xe34e7748, 0x939e2789]

여기에 이미지 설명을 입력하십시오

출처 : Wikipedia

일단 해독되고 ASCII로 변환되면 64 비트 블록 [x, y]은로 읽습니다 c3BsaXQ=.이는 Base64로 인코딩 된 표현입니다 split.


1
나는이 운이 좋을지도 모른다는 생각을 강요하기 시작했고 4 개의 주요 값 각각이 같은 길이 (8 비트)를 갖도록 만들었습니다. 각각 16 비트 일 것만 빼고 ... 무차별 대입은 일어나지 않을 것입니다.
SLuck49

2

Vitsy , 73 바이트, 안전

이것은 명백한 악입니다.

5mW3m7m7m2mD&EPamX}<m15mEnl9mZD\[4m]^P-cm(D_2-3*bmD1-dmrnu-'

행운을 빕니다! 추가 할 공백 13 개 항목.

원본 코드 :

5m
W3m7m
7m
2m
D&EPamX}
<m1
5mEn
l9mZ
D
\[4m]
^P-cm(D
_2-3*
bmD1-dmrnu-
'

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

이것은 대략 다음과 같이 단순화됩니다.

<m1
W2\[2m]Z
l\[D&EP^P-_2-3*D1-rnu-(DX}]

내 코드에 버그가 있었으므로 편집 기록을 보지 마십시오.
애디슨 크럼

당신은 악을 모른다. 나는 악을 안다.
Joshua

그것은 나를 위해 단지 0300을지나 갔다. 그래서 나는 아침에 설명을 추가 할 것이다.
애디슨 크럼

1

C #, 159 바이트, 우유에 의해 갈라짐

usingSystem.Linq;s=>string.Join("",string.Join("",s.Split(@"".Replace(newstring((char)0x0D,1),"").ToCharArray())).Select(c=>c+""!=""?c+"":"").ToArray());

153 축소되어 6 바이트의 공백 만 찾을 수 있으므로 너무 어려워서는 안됩니다 ...



1

망상, 43 바이트, 금이 간

ISBqv<>>$$4jE:d/v$v?c+91d/v?E;!?l$/o$

TIO의 버전이 오래되었지만 github 에서 사본을 얻을 수 있습니다 .


Nexus 버전은 이미 최신 버전입니다. v1도 뽑았습니다.
Dennis

입력에 두 개의 연속 줄 바꿈이 포함되어 있는지 확인하면됩니까?
Martin Ender

@MartinEnder해야합니다. 입력의 파이프 연결 여부에 따라 다릅니다. 배관시 모든 표준 입력을 읽어야합니다.
코너 O'Brien

@ 데니스 감사합니다! 나는 당신에게 채팅을 요청했습니다.
코너 O'Brien


1

볼프람, 132

아마도 하나 이상의 솔루션을 가지고있을 것입니다 (힌트 : 메르 센)

StringReplace[#,""->"",Limit[x/(x-1),x->Boole[PrimeQ[
212821282128228281282128228821282128212821282-1]]]]&

해결책

StringReplace[#," "->"",Limit[x/(x-1),x->Boole[PrimeQ[
2 128 2 128 2 128 2 2 8 2 8 128 2 128 2 2 8 8 2 128 2 128 2 128 2 128 2-1]]]]&

> 제출은 모든 공백이 제거 된
Kritixi Lithos

@KritixiLithos 삭제되었습니다
swish

두 번째 줄 앞의 공백과 첫 번째 줄과 두 번째 줄 사이의 줄 바꾸기는 어떻습니까?
Kritixi Lithos

글쎄, 당신 말이 맞아, 그것은 가독성을위한 것입니다 ...
swish

지금 솔루션을 게시 할 수 있다고 생각합니다.
CalculatorFeline

1

공백 , 81 74 바이트

																					

사람이 읽을 수있는 버전 :

ttttttttttttttttttttt (21 tab characters)

나는 이것이 오래된 도전이라는 것을 알고 있지만 누군가가 이것을 깨기 위해 기꺼이 노력하기를 바랍니다. 바이트 수를 최적화하려고 시도했지만 동일한 수의 탭 문자로 더 짧은 것을 만들 수 있습니다.


0

tcc, 850 바이트

매우 긴 줄을 붙여 넣지 않으려면 tr -d '\ n'| 접기 -b -w 60.

#!/usr/bin/tcc-run#include<stdio.h>typedefunsignedcharu;um[]
={104,105,16,152,94,131,43,42,112,214,53,207,116,170,185,210
};intmain(){uS[256];uk[256];ui,j,t;intc,n=0;FILE*f;f=fopen(_
_FILE__,"r");/*cannotfail*/while(-1!=(c=fgetc(f)))if(c==''||
c==10)k[++n]=c;fclose(f);i=0;do{S[i]=i;}while(++i!=0);j=0;i=
0;do{j=j+S[i]+k[i%n];t=S[i];S[i]=S[j];S[j]=t;}while(++i!=0);
i=0;do{if(S[i]!=m[i])j=1;}while(++i<sizeof(m));if(j==1){i=0;
do{printf("%d,",(int)S[i]);}while(++i<sizeof(m));printf("\n"
);}else{while(-1!=(c=fgetc(stdin)))if(c!=''&&c!=10)fputc(c,s
tdout);}returnj;}

통역사와 연결 하시겠습니까?
Addison Crump

@VoteToClose : apt-get install tcc가 나를 위해했습니다.
Joshua

0

SILOS , 159 바이트 안전!

loadLinedef:lblgetagetzzzz/za=256:aX=getax=Xy=Xz=xx-10x|ifxbGOTOx:by-32y|ifycGOTOx:cprintCharX:xa+1z+1x=getaifxa:b

상당히 사소해야합니다. 내 첫 경찰과 강도 사건입니다.

아마도 내 언어의 난해한 성격 때문에 아무도 그것을 공격하지 않았습니다. 미끄러지는 미끄러운 방법처럼 보이지만 더 짧은 것이 안전하기 때문에 실제로 중요하지 않습니다.

loadLine
def : lbl geta get z zz
z/z
a=256
:a
X=get a
x=X
y=X
z=x
x-10
x |
if x b
GOTO x
:b
y-32
y|
if y c
GOTO x
:c
printChar X
:x
a+1
z+ 1
x=get  a
if x a
:b

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.