重要空白:警察


51

为了解决这一挑战,我们将空白定义为换行(0x0A)和空格(0x20)。请注意,大多数语言和正则表达式都将许多其他字符也视为空格,无论是在ASCII范围内还是在ASCII范围之外,因此您可能无法使用相应的内置函数。

警察的挑战

您应该使用自己选择的语言编写程序或函数,该程序或函数采用由ASCII(NUL除外)字符组成的字符串作为输入,并输出删除了所有空白的字符串。例如,如果您收到以下输入:

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

你应该输出

Hello,World!

然后,您提交的内容将是您的源代码,其中所有空格都将被删除(与将解决方案作为输入传递给自己的过程相同,尽管您的解决方案也可能包含ASCII范围之外的字符)。您的目标是尽可能地找出需要插入空白的位置,以便以您选择的语言恢复有效的解决方案。请注意,强盗插入的空格可能少于您删除的空格,但不会更多。还要记住,强盗不必匹配您的确切代码,他们只需要找到任何有效的解决方案即可。

您的答案应包含以下内容:

  • 解决方案的编写语言(如有必要,还提供版本)。
  • 删除空格之前,解决方案的字节数。
  • 删除空格的解决方案。

您的解决方案可以是程序或函数,但不能是代码段,并且您不得使用REPL环境。您可以通过STDIN,命令行参数或函数参数进行输入,并通过STDOUT,函数返回值或函数(输出)参数进行输出。

为了公平起见,必须为您选择的语言提供免费的解释器或编译器。

您不得使用内置函数进行散列,加密或随机数生成(即使您将随机数生成器植入固定值)。您的解决方案必须能够在合理的台式机上在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
似乎Whitespace会打破这一挑战……
NoOneIsHere16年

8
@SeeOneRhino为什么?强盗只需要解决空白中的问题,而不要使用比警察更多的字节。除非警察找到没人能匹配的疯狂的空白答案,否则空白答案通常是这一挑战中最脆弱的。
马丁·恩德

1
@SeeOneRhino另外,选项卡不算作空格,因此不会被删除。
mbomb007 '16

4
我想这次没有六边形提交了
MildlyMilquetoast

Answers:


17

Haskell,100字节,由nimi破解

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

这是一门完整的节目,是一首达摩主义的诗。


带空格的代码 (在线尝试!)

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

对于列表,>>=-operator定义为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
我需要说我喜欢达达主义诗歌吗?
达达


@nimi是的,做得很好。
Laikoni '16

12

C,475字节,被莱利破解

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!:)
马丁·恩德

1
破解这种方式真的很有趣。
莱利2016年

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)U29显然不合适,因此我们将空间再右移并得到296mod(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
+1解释了我花10时的2行输入格式:-D
Luis

1
好吧,还是不知道,除了我现在能认出U那组数字中的字母了:-)
Luis Mendo

2
很好的把戏!八度使用字符代码来做到这一点是很疯狂的。我对此一无所知。但是,那么,当官方文档说Octave 偶然支持Unicode时,您能期待什么呢?:-P
Luis Mendo 2016年

7

JavaScript ES6,199个字节,由SLuck49破解

一个相当大的条目,需要添加33个字节的空格。

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

尼斯的..我想我们需要以异或加密的字符串,并得到适当的源〜添加空格,以“SECRETCODE”适量
帕特里克·罗伯茨

@PatrickRoberts是的,完全是。
Arnauld

我已经有一个自动化脚本来测试所有可能的组合,这只是时间问题…… 绞尽脑汁,知道他的邪恶计划正在起作用
Patrick Roberts

ew ...这花的时间比我想象的要长。考虑到元素必须加总的长度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 ]
帕特里克·罗伯茨



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字节,由链接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 '16


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如果没有空格,则将其解释为number 100000

t 接受输入并复制它。

' @ *'推入该字符串,并d计算其连续的差,得出[32 -32 10]-32无用)。

m给出一个逻辑行数组,指示哪些字符是3210(或-32)。

1然后e连续重塑。这里没有人。

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是“替换”命令的糖。堆:<INPUTWITHOUTSPACES>

接下来,“ NEWLINE”推送包含换行符的字符串,这很不错,因为RProgN不使用转义符,它直接向上就可以让您推送这样的字符串。堆<INPUTWOSPACES> "\n"

然后,我们再次使用`技巧,并使用Replace来提供输出。


这应该在Firefox中工作吗?
科纳·奥布赖恩

我在Firefox中运行它,有问题吗?你能得到截图吗?
ATaco 2016年


嗯,那太快了。我几乎持续了半个小时!
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
我想我有时间的时候将解释器移到Node上,以便Dennis可以将其添加到TIO中……
ETHproductions 2016年

1
我已经创建了解释器的Node克隆,并且Dennis现在将其添加到TIO中
ETHproductions 2016年

4

迷宫,127字节

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

希望我做对了:)这是我的第一个警察和强盗条目。

原始码

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

您的答案现在是安全的,您可以添加原始代码和说明。
Laikoni '17

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 rep无限荣誉(以及极好的数学论文)。



2
您的解决方案和我的解决方案很可能会步履蹒跚。
约书亚州

1
对于下级投票者,此裁定是否有违法之处?
Rohan Jhunjhunwala

1
实际上,有一个简单的解决方案(不涉及等效的RSA-440数字),不幸的是,这需要额外的10,000字节...
SLuck49'1

1
@ SLuck49您能对我发表评论吗?
Rohan Jhunjhunwala

1
@ SLuck49哇!我才意识到你在看什么!我几乎失去了500名声誉。
Rohan Jhunjhunwala

3

C,140字节,被莱利破解

让我们从一个简单的开始。

#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个字节。
莱利

@Riley在末尾添加额外的换行符,您会很好的;)
Alfie Goodacre 2016年


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@"

或者,如果您愿意,可以使用一个十六进制转储:

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 '16


2

JavaScript 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``}

这是扩展的微小加密算法的实现。64位空格编码的密钥扩展为以下128位密钥:

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

在此处输入图片说明

资料来源:维基百科

解密并转换为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}]

请不要查看编辑历史记录,因为我的代码中还有一个错误。
Addison Crump

你不知道邪恶。我知道邪恶。
约书亚

对我来说,已经过了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。
丹尼斯,

只是检查一下,如果输入包含两个连续的换行符,这行得通吗?
马丁·恩德

@MartinEnder应该。这取决于输入是否通过管道传输。用管道传输时,应读取所有标准输入。
科纳·奥布莱恩

@丹尼斯,谢谢!我想在聊天中问你。
科纳·奥布莱恩


1

沃尔夫勒姆132

可能有不止一种解决方案(提示:Mersenne)

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为我做了。
约书亚

0

SILOS,159个字节,安全!

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

应该相当琐碎。这是我的第一个警察和强盗入境。

没有人来攻击它,可能是由于我自己语言的深奥本质。似乎是一种lea琐的方法,但这并不重要,因为较短的方法很安全。

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

随时在线尝试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.