重要な空白:警官


51

この課題のために、空白をラインフィード(0x0A)とスペース(0x20)のみとして定義します。ほとんどの言語と正規表現フレーバーは、ASCII範囲の内側と外側の両方で、他の多くの文字も同様に空白と見なすため、対応するビルトインを使用できない場合があります。

警官の挑戦

選択した言語でプログラムまたは関数を作成する必要があります。これは、ASCII(NULを除く)文字で構成される文字列を入力として受け取り、すべての空白を削除して出力します。たとえば、次の入力を受け取った場合:

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

出力する必要があります

Hello,World!

提出物は、すべての空白が削除されたソースコードになります(ソリューションに入力としてソリューションを渡すのと同じプロセスですが、ソリューションにはASCII範囲外の文字が含まれている場合もあります)。あなたの目標は、選択した言語で有効なソリューションを回復するために空白を挿入する必要がある場所を把握することを可能な限り難しくすることです。強盗は、削除するよりも少ない空白を挿入できますが、追加することはできません。また、強盗は正確なコードと一致する必要はなく、有効なソリューションを見つける必要があるだけであることを忘れないでください。

あなたの答えは次を含むべきです:

  • ソリューションを作成した言語(および必要に応じてバージョン)。
  • 空白を削除する前のソリューションのバイトカウント。
  • 空白が削除されたソリューション。

ソリューションはプログラムまたは関数のいずれかですが、スニペットではなく、REPL環境を想定してはなりません。STDIN、コマンドライン引数または関数引数を介して入力を受け取り、STDOUT、関数の戻り値または関数(出力)パラメーターを介して出力することができます。

公平を期すために、選択した言語用の無料のインタープリターまたはコンパイラーが必要です。

ハッシュ、暗号化、または乱数生成に組み込み関数を使用しないでください(乱数ジェネレーターを固定値にシードした場合でも)。ソリューションは、適切なデスクトップマシンで100文字以下の文字列を10秒未満で処理できる必要があります。

回答が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なんで?強盗は、警官よりも多くのバイトを使用するのではなく、ホワイトスペースの問題を解決する必要があります。警官が、誰も一致できないクレイジーによくゴルフされたホワイトスペースの答えを見つけない限り、ホワイトスペースの答えは一般にこの課題で最も脆弱です。
マーティンエンダー

1
@SeeOneRhinoまた、タブは空白としてカウントされないため、削除されません。
mbomb007 16

4
いいえhexagony提出しないこの時間、私は推測
MildlyMilquetoast

回答:


17

Haskell、100バイト、nimiによりクラック

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

これは完全なプログラムであり、教義的な詩です。


withspaceを使用したコード (オンラインで試してください!)

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
私はダダの詩が好きだと言う必要がありますか?
ダダ


@nimiはい、よくできました。
ライコニ16

12

C、475バイト、Rileyによりクラック

Cの特定の部分により、空白がどこにあるべきかを本当に簡単に確認できます。ただし、cプリプロセッサはサポートしていません。したがって、このコードは2つの半分に分かれています。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
ひび割れこの1つの方法は本当に楽しい。
ライリー

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 = 853char(853)警告を与えながら、を[853,'']返しますU

Octaveでこのタスクを実行する明白な方法は次のとおりです。

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

最初のの後に開き括弧(コードポイント40)が必要であることがわかりUます。29明らかに収まらないので、スペースをさらに1つ右に移動してを取得し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
入力フォーマットを2行で説明するために+1が必要でしたが、10分かかりました:-D
ルイスメンドー

1
さて、まだU数え切れないほどの数字の中で文字を認識していることを除いて、まだわかりません:
ルイスメンドー

2
非常に良いトリックです!Octaveが文字コードでそれを行うのはおかしいです。私はそれについて全く知りませんでした。しかし、その後、公式ドキュメントがOctave が偶然 Unicode サポートしていると言ったとき、あなたは何を期待できますか?:-P
ルイスメンドー

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

ニース1 ..私は暗号化された文字列をXORし、適切なソース〜取得するために、我々は「SECRETCODE」に空白の適切な量を追加する必要があると思います
パトリック・ロバーツ

@PatrickRobertsはい、正確に。
アーナルド

すべての可能な組み合わせをテストする自動スクリプトをすでに持っています。それは時間の問題です... 彼の邪悪な計画が機能していることを知って手をつなぎ
パトリックロバーツ

ふー...これは思ったより時間がかかっています。長さ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,<
#-
^<

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

これの秘trickは、実行のパスが水平よりも垂直であり、さまざまなスペースがコードにランダムに挿入されて、垂直パスをさらにシャッフルすることでした。改行と空白が最終的に削除されると、操作が相互にどのように関連しているかを示すものがほとんどないことを願っています。

それが十分に難しくなかった場合、私も少しインターリーブを投げたので、多くの操作が互いに垂直に流れる異なるコードパスによって実行されることになりました。特定のコマンドの正しい位置を見つけたと思った場合、コードの後半で再び使用する必要があるかもしれないことに気付かないという考え方です。

物事を複雑にしようとするすべての努力の価値があったのか、人々がそれを解決しようとさえしなかったのかはわかりません。:)

コードの説明

_      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

これは@Link Ngによってクラックされています:codegolf.stackexchange.com/a/103233/38550
TheLethalCoder

5

MATL、22バイト。ひび割れ割れました

これは、STDINを介して入力を受け取り、STDOUTを介して出力を生成するプログラムです。

スペースや改行なしのコード:

t'@*'dm1e5%Mdw%Y(

入力フォーマットは、理由MATLが文字列の入力を取る方法を少しぎこちないです。改行を含む文字列は、STDINから直接入力できません。これは、各入力が1行でなければならないためです(改行は入力の終わりを示します)。したがって、形式は次のとおりです。

  1. 文字列は一重引用符で囲まれます。文字列の内容に一重引用符が含まれる場合、複製によってエスケープされます。例:'I''m a string'

  2. 改行を含む文字列を入力するには、文字列を改行で分割し、ASCIIコードとしての数字を含むすべてを(角括弧で)連結する必要があります。たとえば、姓と名の間に改行がある文字列を考えてみましょう。として入力され['Luis' 10 'Mendo']ます。

    これにより、他の(場合によっては印刷できない)ASCIIコードを入力できます。したがって、上記のアイテム1の文字列は、代わりにとして入力できます['I' 39 'm ' 97 32 'string']こちらで確認してください

    唯一の条件は、括弧内の少なくとも1つの部分が文字列であることです。これにより、連結時にすべての数値が強制的にASCIIコードとして解釈されます。

このフォーマットを使用して厄介な幸運について申し訳ありません

元のソリューション

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

それぞれ%がコメント記号であるため、行の残りは無視されます。

スペースは何も行いませんが、セパレータとして機能します。たとえば1e5、スペースなしの場合、数値として解釈され100000ます。

t 入力を取得して複製します。

' @ *'その文字列をプッシュし、dその連続的な差を計算します[32 -32 10](これ-32は役に立ちません)。

mどの文字が32or 10(または-32)であるかを示す論理行配列を提供します。

1その後e、行として再形成されます。これはここではノーオペレーションです。

5その後、もう一度Mプッシュ1します(最新の複数入力関数への最後の入力、つまりe)。

dの連続微分を計算し1[](空の配列)を返します。

wスワップし、最後に空白文字に(割り当て[]ます。つまり、それらを削除します。


1
あなたは嘘をついています!まさかこれは機能します!(+1)...
Stewie Griffin


2
がらくた...私はそれがすでに割れていることに気づかなかった...まあ、二重割れた
スチューウィーグリフィン

お二人ともいい​​ですね!:-)私の意図したソリューションではありませんが、完全に動作します
ルイスメンドー

4

RProgN、15バイトがクラックされました!

''`R""`R

ここでコードをいじることができます。RProgNが文字列を処理する方法の迷惑な性質により、比較的単純な解決策が期待できます。

オリジナルプログラム

' ' ` R
"
" ` R

説明

まず、入力が暗黙的にスタックにプッシュされます。スタック:<INPUT>

次に、「」を使用して、スタックにスペースをプッシュします。スタック:<INPUT> " "

`は実際には`(WORD)で表される文字列をプッシュしようとしますが、その後に空白があるため、空の文字列をプッシュするだけです。スタック:<INPUT> " " ""

ここのRは、Replaceコマンドのシュガーです。スタック:<INPUTWITHOUTSPACES>

次に、「NEWLINE」は改行を含む文字列をプッシュします。これは、RProgNがエスケープを使用しないため便利です。まっすぐ上に、そのような文字列をプッシュできます。スタック<INPUTWOSPACES> "\n"

次に、「トリック」を再度使用し、Replaceを使用して出力します。


これはFirefoxで動作するはずですか?
コナーオブライエン

firefoxで実行していますが、問題はありますか?スクリーンショットを入手できますか?
アタコ16


まあそれは速かった。半時間近くかかった!
アタコ16


4

Beam、72バイト、Safe!

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に追加することができますので、私はノードへの通訳を移動すると思う
ETHproductions

1
インタープリターのNodeクローンを作成しましたが、DennisがTIOに追加しました!
ETHproductions 16

4

ラビリンス、127バイト

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

うまくいけば、私はこれを正しくした:)これは私の最初の警官と強盗のエントリです。

元のコード

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

これで答えは安全です。元のコードと説明を追加できます。
ライコニ

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
ダウンボッターにとって、この服従について違法なものはありますか?
ローハンジュンジュンワラ

1
これには実際には些細な解決策があり(RSA-440の同等の数値を
考慮する

1
@ SLuck49私にコメントしてもらえますか?
ローハンジュンジュンワラ

1
@ SLuck49すごい!私はあなたが見ているものに気づきました!私はほとんど500の評判を失いました。
ローハンジュンジュンワラ

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が最後に余分な改行を追加すると、大丈夫です;)
アルフィー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@"

または、必要に応じて、hexdump:

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

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

解決

これはExtended Tiny Encryption Algorithmの実装です。64ビットの空白でエンコードされたキーは、次の128ビットキーに展開されます。

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

ここに画像の説明を入力してください

ソース:ウィキペディア

64ビットブロックは、復号化されASCIIに変換されると、のBase64エンコード表現である[x, y]として読み取ります。c3BsaXQ=split


1
私はこの考えを強引に始めました。たぶん幸運になり、4つのキー値のそれぞれが同じ長さ(8ビット)になるようにしました。それがそれぞれ16ビットだということを除けば... ブルートフォースは発生しません。別のアプローチの時間です。
SLuck49 16

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}]

コードにバグが残っているため、編集履歴を確認しないでください。
アディソンクランプ

あなたは悪を知りません。私は悪を知っています。
ジョシュア

私にとってはちょうど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を使用しました。
デニス

確認するだけですが、入力に2つの連続した改行が含まれている場合、これは機能しますか?
マーティンエンダー

@MartinEnderそれが必要です。入力がパイプされるかどうかによって異なります。パイプされると、stdinのすべてを読み取る必要があります。
コナーオブライエン

@デニスありがとう!チャットでお聞きするつもりでした。
コナーオブライエン


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
スウィッシュ

2行目の前のスペースと、1行目と2行目の間の改行はどうですか?
Kritixi Lithos

さて、あなたしている権利、それは...ただ読みやすくするためである
スウィッシュ

今すぐソリューションを投稿できると思います。
CalculatorFeline

1

空白81 74バイト

																					

人間が読めるバージョン:

ttttttttttttttttttttt (21 tab characters)

私はこれが古い挑戦であることを知っていますが、うまくいけば、誰かがこれをクラックすることを喜んで喜んでいます。バイトカウントを最適化しようとしましたが、同じタブ文字数で何かを短くすることができるかもしれません。


0

tcc、850バイト

非常に長い行の貼り付けを避けるために、これをtr -d '\ n'に渡しました| fold -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;}

通訳へのリンク?
アディソンクランプ

@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

かなり些細なことです。それは私の最初の警官と強盗のエントリです。

おそらく私自身の言語の難解な性質のために、誰もそれを攻撃しませんでした。滑る方法はなめらかな方法のように見えますが、短いものは安全であるため、実際には問題ではありません。

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.