警官:正規表現を作る-ヘビを作る


40

これは警官のスレッドです。強盗のスレッドはここにあります


入力を受け取り、nn行n列の「スネークマトリックス」を作成するコードを記述します。

スネークマトリックスは、次のパターンに従うマトリックスです。

3行3列:

1  2  3
6  5  4
7  8  9

および4行4列:

1   2   3   4
8   7   6   5
9   10  11  12
16  15  14  13

正確な出力形式はオプションです。たとえば、output [[1 2 3],[6 5 4],[7 8 9]]、または同様のものがあります。

言語名と、コードに完全に一致する正規表現を指定する必要があります。正規表現の詳細度を選択できます。極端な場合、考えられるすべての文字列に一致する正規表現を作成できます。この場合、コードを解読するのは非常に簡単です。またn=4、強盗があなたが選択した正確な形式を知るように、の出力も提供する必要があります。

regex101.comで利用可能なregexフレーバーの1つ、またはRubyフレーバーを使用できます。

  • PCRE(PHP)
  • Javascript
  • Python
  • ゴラン
  • ルビー

使用しているものを指定する必要があります。

ノート:

  • 合理的に大きいすべてをサポートする必要がありnます。データ型またはメモリがオーバーフローしないと仮定できます。デフォルトのデータ型が8ビットn<=11の符号付き整数である場合、を仮定できますn<=15。それが符号なしの8ビット整数である場合、を仮定できます。
  • 強盗は、先行/末尾のスペースと改行を除き、提出物の出力形式と一致する必要があります。これは、SEの形式によって削除される可能性があるためです。

受賞基準:

勝者は、文字数で測定された、最短の正規表現を使用したクラックのない提出物になります。

投稿が7日間クラックされずに残っている場合は、目的のソリューションを投稿し、投稿を安全とマークすることができます。


5
シード、長さ1 、..
クリチキシリソス

1
ここに記載されている言語のいずれかを使用できますか?codegolf.stackexchange.com/questions/61804/…-user15259

2
@KritixiLithos安全にするために元のプログラムをリリースする必要があることを除いて;
ETHproductions

3
@DeepakAgarwal-スネークを生成するコードを記述し、それに一致する正規表現を提供します。強盗のソリューションは同じ言語であり、正規表現にも一致する必要があります。そのため、戦略の1つは、強盗を困難にするために制限的な正規表現を提供することですが、ソリューションを提供するほど制限的ではありません!

2
このメタコンセンサスは、データ型を持たないsedの単項I / Oを許可し、この課題に対して有効ですか?
seshoumara

回答:


9

05AB1Embomb007 によりクラック

クラッキングするのが楽しく、明白ではないことを願っています。

正規表現(PCRE):

^\w*[+\-*\/%]*\w*.{0,2}$

出力n = 4:

[[1, 2, 3, 4], [8, 7, 6, 5], [9, 10, 11, 12], [16, 15, 14, 13]]

元のソリューション

UXFXLNX*+NFR}ˆ

oooooomg-ドープの男(もちろん、補完)
ティラックマディ

@ mbomb007:アクセント付きの文字が\wnoと一致しません。regex101で
エミグナ

1
に変更.{0,2}することで正規表現を短くすることができます.?.?
アーロン

1
-かっこで囲まれたcharクラス([+*\/%-])の最後の位置に配置できるため、エスケープする必要はありません。
ダダ

@Dada:それは実際にPCREで機能します。私はそれがクラックされることをかなり確信しているので、私は今それを短くすることにそれほど心配していません。しかし、もしそうなら、私はあなたとアーロンの両方の提案を取り入れます。ありがとう:)
エミグナ


7

ゼリー、長さ6、ひび割れ

正規表現(PCRE)

^.{9}$

サンプル出力

 1  2  3  4
 8  7  6  5
 9 10 11 12
16 15 14 13

3
これはゼリーでゴルフを非常によく強制します:D
Yytsi

1
任意の 9文字?あなたは寛大です!:D
AdmBorkBork

1
「任意の9」ゼリーにはいくつの機能がありましたか?
マシュー

私は、最後の文字がG出力を適切にフォーマットする必要があることを99%確信しています。私は残りを解決することに近づいていますが、ゼリーと配列内の他のすべてのアイテムを逆にする方法を
見つける

@ETHproductions:私はそれがほとんど解決されていて、他のすべてのアイテムを元に戻す方法があると確信していました。私の問題は、すべてを結び付ける方法を理解できないことです(チュートリアルを試したことはありません)。しかし、今ではそれが解決されるのを期待していました。たぶんそれは私が考えるより難しいです。
エミグナ

6

R、長さ14 プランナパスによりひび割れ

この正規表現が正しいことを願っています。私が言いたいことを除く77文字で<space>#;[ここでテストしました

正規表現

^[^ #;\[]{77}$

サンプル出力n = 4

1 2 3 4 
8 7 6 5 
9 10 11 12 
16 15 14 13  

これは簡単だと思いましたが、そのような数字を出力するのに大きな問題があります(ある種の配列に対して)。よくできました。
BLT

1
@BLTありがとう、難易度を上げようとするのは興味深い問題でした。
MickyT

おそらくあなたのものと同じコードではありませんが、ひびが入っています。
プランナパス


6

> <>、長さ49、アーロンによるクラック

正規表現(Javascript)

^.{7}\n.{12}\n\?.{6};[^v^]{27}(\n.{13}:&.{2}){2}$

サンプル出力(n = 4)

1 2 3 4 
8 7 6 5 
9 10 11 12 
16 15 14 13 

書式設定は少し奇妙ですが、数値の長さをチェックすると、はるかに長くなります。正規表現では少し行き過ぎたかもしれませんが、確かではありません!

編集:また、言及するのを忘れました、私は通常の魚の入力ではなく、入力に初期スタック(-vフラグ)を使用します。ごめんなさい!

元のコード:

<v1*2&:
 >:{:}=?v:1+
?^{r0}v;>&:&[r]{&:&2*+}::&:::&*@+@(
+:}=?v>n" "o&:&{1
0~{oa<^v?)*&::&:}

アーロンの方がずっと簡単です!私の元のコードの複雑さは、n[r]n番目ごとの数字を使用してそのセグメント(行)を反転し、最後にすべての数字を一度に印刷するという考えに基づいています


1
...{2};)より短い
アーロン

関係ない、それをクラック!私は明らかにあなたのコードにあまり従いませんでしたが、とにかく興味深い挑戦でした。元のコードを共有してください!また、あなたが好きなら、あなたは好意を返すことができます;)
アーロン

@Aaronすてきな仕事!また、ええ、私は正規表現でどのように気付かなかったのか分かりません。まあ:)私はあなたのものをクラックできるかどうかを確認します
-torcado

5

オーム割れた

私の最初の警官と強盗の挑戦も、このパターンに問題があるかどうかを教えてください(特にこれはかなり未知の言語であるため)。

正規表現(PCRE)

^\S{6}\W{0,3}\w$

出力(n = 4)

[[1, 2, 3, 4], [8, 7, 6, 5], [9, 10, 11, 12], [16, 15, 14, 13]]

1
どちらかと言えば簡単すぎるかもしれません。.*正規表現を使用している場合は、何でもかまいません。そのため、言語にコメントがある場合は、コメントが続く任意のプログラムを作成できます。
mbomb007

@ mbomb007良い点。
ニッククリフォード


@Emignaよくやった!
ニッククリフォード

5

PHP、221バイト(クラック

私はそれが十分に難しいことを願っています。

正規表現(PCRE):16バイト

^[^\s/\#6]{221}$

スペースなし、コメントなし、base64_decodeの使用なし。楽しむ。

出力

  1  2  3  4
  8  7  6  5
  9 10 11 12
 16 15 14 13

元のコード

$w=$argv[1];$s="";$r=range(1,$w**2);for($i=0;$i<$w;$i++)if($i%2)array_splice($r,$i*$w,$w,array_reverse(array_slice($r,$i*$w,$w)));foreach(($r)as$v)$s.=str_pad($v,$l=strlen(max($r))+1,"\x20",0);echo(chunk_split($s,$l*$w));

base64_decode正規表現では許可されないため、回答を使用できることに注意してください。
電卓

4
@CalculatorFeline:ブロック6する可能性のある正規表現ブロックbase64_decode
-nneonneo


おっと、それを見逃した。しかし、^だからそれは問題ではありません。
電卓

5

C#net46 (クラック)

http://ideone.com/作品)

regex101でテストされたRegex PCREフレーバーの長さ58

^sta((?![\d%bh\/]|==|if|(\[.*){4}|(i.*){6}).){142}urn....$

メソッドのみが再実行されます。メソッドは、入力n = 4に対して2d int [、]配列(int [4,4])を返します。次のように印刷された場合:

1 2 3 4 
8 7 6 5 
9 10 11 12 
16 15 14 13 

これはこのようなものへの私の最初のエントリです。確かに正規表現の長さで勝とうとはしていませんが、私はクラッキングを防止するのにどれだけうまくいったか見てみたいです:)

元のコード:

static int[,]g(int n){int l,j,k=n-n,c,s;var _=new int[n,n];var d=n!=n;c=k;c++;s=k;for(l=k;l<n;l++){for(j=k;j<n;j++){_[l,d?n-j-c:j]=++s;}d=!d;}return _;}


よくやった、私は少なくとも長さをより挑戦的にすることを試みるべきだった
...-EklipZ

5

QBasic、正規表現の長さ10(クラック

正規表現

任意の正規表現フレーバーで動作するはずですが、Pythonフレーバーと呼びます。

([A-Z]+.)+

注:私のソリューションでは、フォーマットされていないQBasicを使用しています。フォーマット後、スペースが追加されたため、コードは正規表現と一致しません。(しかし、それ違いを生む唯一の変更であることを伝えることができます。([A-Z]+ ?. ?)+まだフォーマットされたバージョンで動作します。)

テストの目的で、コードの書式設定をオフにしてQB64を使用しました([オプション]> [コードレイアウト]の下)。何かをダウンロードしたくない場合は、archive.orgで QBasicをオンラインで実行することもできます(ただし、フォーマットをオフにすることはできません)。

サンプル出力

 1  2  3  4 
 8  7  6  5 
 9  10  11  12 
 16  15  14  13 

したがって、ソース内のすべてのシンボルの前に文字を付ける必要があります。
電卓

@CalculatorFeline 1つ以上の文字。
mbomb007

ので、まあ、私の要件は同等である\w+\Wに分割することができます\w*\w\W。(\w*null(些細な)または\w+(簡単に記号を使用して))
CalculatorFeline

@CalculatorFelineが.単語文字になれないということはありません。小文字でも数字でも構いません。実際、プログラムの最後の文字が1文字である場合、大文字であってもかまいません。
mbomb007


5

Python 3、55バイト(クラック)

PCRE / Python / Golangフレーバー。

def [triangles=(1,SNAKE)]{27}:print[]SNAKE(--:>or[]{48}

(ことを思い出すこと完全一致が必要です。想定^して$テストするとき。)

サンプル出力:

[1, 2, 3, 4]
[8, 7, 6, 5]
[9, 10, 11, 12]
[16, 15, 14, 13]

元のソリューション:

def r(N,S=1,A=1,K=range,E=list):print(E(K(S,S+N))[::A])or(S+N>N*N)or(r(N,S+N,-A,K,E))

4バイトをトリミングする必要があります:p


あなたが見逃していることを私のためと思われる )正規表現の第二部では
イェルクHülsermann

@JörgHülsermannは何も欠けていません、正規表現は正しいです。
ケニー

1
@JörgHülsermann余分な(文字は、で始まり、printで終わる文字クラス内にあり{48}ます。それを見るのにしばらく時間がかかりました。;)(その点については、以前の括弧のペアも文字クラスの中にあります。)
DLosc

@DLoscこれで明らかです。ありがとう
ヨルグヒュルサーマン


5

dc正規表現の長さ12  

^[^# !]{59}$

この正規表現は単純なので、正規表現のフレーバーは重要ではないと思うので、全面的に機能するはずです。(正規表現の#の後のスペースに注意してください。)

regex101.comで4つのフレーバー(PCRE / PHP、Javascript、Python、Golang)をすべてテストし、rubular.comでRubyバージョンをテストしました。dcプログラムは、5つすべての正規表現バージョンの正規表現と一致します。


dcプログラムは、stdinに入力を取り、stdoutに出力を置きます。

入力4のサンプル出力(各行の末尾に末尾スペースがあります):

1 2 3 4 
8 7 6 5 
9 10 11 12 
16 15 14 13 

元のコード(クラックされた後に追加)

これは@seshoumaraによってクラックされています。私の意図したコードは次のとおりです。

?sd[AP]s+0[dddld/2%rld%2*1+ldr-*+1+n2CP1+dld%0=+dvld>l]dslx

説明:

?sd      Input number and store it in register d.
[AP]s+   Macro that prints a newline. The macro is stored in register '+'.
0        Push 0 on the stack, initializing a loop.  (The top of the stack is the index variable.  It will go up to d^2-1.)
[        Start a macro definition.  (The macro will be stored in register l.)
ddd      Push 3 copies of the loop index variable on the stack, so they'll be available later. I'll call this number i.
ld/      Divide the last copy of i by d (integer division); this computes the row of the square that we're in (starting with row 0).
2%       Replace the row number with 0 if the row number is even, with 1 if the row number is odd.
r        Swap the top two items on the stack, so the top item is now the next to last copy of i, and the second item on the stack is the row number mod 2.
ld%      Compute i mod d; this goes from 0 to d-1. It is the column in the square that the next number will be placed in.  (The leftmost column is column 0.)
2*1+     Top of the stack is replaced with 2*(column number)+1.
ldr      Inserts d as the second item on the stack.
-        Computes d-2*(column number)-1.
*        The second item on the stack is the row number mod 2, so multiplying yields 0 if the row number is even, and d-2*(column number)-1 if the row number is odd.
+        Add to the remaining copy of i. The sum is i itself in even-numbered rows, and it's i+d-2*(column number)-1 in odd-numbered rows.

スタックの一番上にある合計が、次に印刷する数字です。

  • 行番号が偶数であれば、合計がちょうどiであるため、それが正しいことは簡単にわかります。

  • 奇数行の場合、i = d *(i / d)+(i%d)= d *(行番号)+列番号に注意してください。したがって、合計i + d-2 *(列番号)-1はd *(行番号)+列番号+ d-2 *(列番号)-1 = d *(行番号+ 1)-列番号-1。指定された行と列に入れる数字で、奇数行で逆方向にカウントすることを保証します。

説明に戻ります。

n        Print the desired number for the current row and column.
2CP      Print a space.  (2C, which is computed by dc as 20 + 12, is 32, the ASCII code for a space.)
1+       The original copy of i is at the top of the stack; add 1 to it.
dld%0=+  If (the incremented value of) i is a multiple of d, call the macro at register '+', which prints a newline.
dvld>l   If d > sqrt(i) (in other words, if i < d^2), then go back to the top of the loop by calling macro l again.
]dslx    End the macro definition, store the macro in register l, and execute it.

#より短いソリューションがコメントを使用して59バイトに到達できないように、chars と ``は省略されていますか?もしそうなら、DCには何も変更しないコマンドを追加するための非常に多くの方法があるので、例えば、必要はありません。qスクリプトの最後でコマンドを繰り返します。
seshoumara

@seshoumara正規表現を短く保ちながら、その方向にうなずきます。もちろん、あなたは正しいです。(これは私の最初の警官と強盗のエントリなので、どれほど簡単かはわかりません。)
ミッチェルスペクター

割れた!。59バイトをわずかに超えることは簡単ですが、制限以下に合わせるのは予想以上に困難でした。正規表現については、印刷する必要があるため、スペースを省略してもかまいませんでした。他の何かを使用する必要がありました。
seshoumara

@seshoumaraいい仕事だ!
ミッチェルスペクター

@seshoumaraちなみに、スペースは2つの連続する数値定数を分離するためにdcでも役立ちます。そのため、スペースを禁止するには、その機能が必要な場合に回避策が必要です。ただし、とにかく32P短いので、スペースを印刷することは大したことではありませ[ ]nん。
ミッチェルスペクター


5

PHP

これが楽しいものになることを願っています!:D

出力(n = 4)

[[1,2,3,4],[8,7,6,5],[9,10,11,12],[16,15,14,13]]

レベル1:PCRE(長さ= 17)(JörgHülsermannによるひび割れ

^<[^'"\d{vV;<$]+$
  • 一重引用符や二重引用符がないので、文字列はありません!
  • 数字なし!
  • いいえ{、匿名関数はありません!
  • いやv...いやeval()
  • ;そうではありません...それは単一のステートメントでなければなりません!
  • そうではありません<... HeredocPHPブロックも複数もありません!
  • 大きなもの!ノー$そう...幸運は、変数を定義します!>:D

@JörgHülsermannには興味深いアプローチがありましたが、それは私が念頭に置いていたものではありません:)。したがって、私は新しいレベルの難易度を導入しています(これに適合するコードがあることをお約束します。

レベル2:PCRE(長さ= 23)(JörgHülsermannによるひび割れ

^<[^'"\d{v;<$_~|&A-Z]+$
  • レベル1のすべての制限
  • このレベルの新機能:これらはありません_~|&A-Z!:)

楽しむ!


元のソリューション

その$ため、変数に通常の方法でアクセスすることはできませんでしたが、それは変数がまったく使用できないという意味ではありません!extract()/compact()現在のスコープに変数をインポート/エクスポートするために引き続き使用できます。:)

$i = 1;
// can be written as
extract(['i' => 1])

echo $i;
// can be written as
echo compact('i')['i'];

ただし、落とし穴があります。PHPのcompact('x')['x']++変数は値で渡されるため、機能しません... 1つの例外があります。オブジェクト。

$x = (object) ['i' => 1];
// is
extract(['x' => (object) ['i' => 1]]);

// and
compact('x')['x']->i++;
// works just fine!

残りは簡単です。

  • 番号01容易に変換することによって生成されるfalsetrueするintと、それらを付加することにより+符号
  • 使用andしてor以来&|禁止されています
  • 禁止された引用符を回避するには、文字列として扱われる未定義の定数を使用します
  • 未定義の定数を使用して生成された通知を抑制するには、単に使用します @
  • を使用して禁止文字vを生成できますchr(ord('u') + 1)。これ@chr(ord(u) + true)は、上記の回避策の使用に変換されます
  • 下線は上記と同様である:chr(ord('a') - 2)に変換されますchr(ord(a) - true - true)
  • 禁止された文字を含む関数の呼び出しcallableは、関数の名前を含む文字列である可能性があるPHPの型を利用することで実行できます。だから、あなたは未定義の定数とによって生成された単一の文字列連結することができord()、このように関数の名前とそれたinvokeを構築するために:array_reverse()なりは(a.rray.chr(ord(a)-true-true).re.chr(ord(u)+true).erse)()array未定義の定数へのは、なぜそれのスプリットこと、言語構造であるarray
  • 条件およびループ構造に関しては、その構造が直後のステートメントにのみ適用される場合、中括弧はオプションです。これは、次のようなことができることを意味します。 if ($n = $argv[1] and $i = 0) while ($n > $i++ and do_some and other_stuff or exit)

人間が読めるコードのロジックは次のとおりです。

if (
    $x = (object) [
        'result' => [],
        'i' => 0
    ]

    and

    define('n', $argv[1])

    and

    define('un', '_')

    and

    // create the initial set which we'll loop through
    define('segments', array_chunk(range(1, pow(n, 2)), n))
) while (
    // store each odd segment as-is and increment the "pointer"
    ($x->result[] = @segments[$x->i++])

    and

    // store each even segment reversed and increment the "pointer"
    ($x->result[] = @array_reverse(segments[$x->i++]))

    and

    // check if we need to break out of the loop
    n > $x->i

    or

    // exit and output the result if the above is false
    die(json_encode(
        // if n is odd, the above would have copied a NULL entry 
        // from the segments, so it needs to be filtered out
        array_filter($x->result)
    ))
)

そして、正規表現に一致する非友好的なバージョン:

<?php if (@extract([x=>(object)[s=>[],i=>+false]])and@define(n,compact(arg.chr(ord(u)+true))[arg.chr(ord(u)+true)][+true]?:+true)and@define(un,chr(ord(a)-true-true))and@define(s,(a.rray.un.chunk)(range(+true,pow(n,true+true)),n)))while((@compact(x)[x]->s[]=s[@compact(x)[x]->i++])and(@compact(x)[x]->s[]=(a.rray.un.re.chr(ord(u)+true).erse)(s[@compact(x)[x]->i++]))and(n>@compact(x)[x]->i)or(@die((json.un.encode)((a.rray.un.filter)(@compact(x)[x]->s)))))?>


@JörgHülsermann私の正規表現は以前のようにかなり長く、勝つチャンスはないと思っているので、正規表現エンジンの大文字と小文字の区別などの技術にあまり夢中にならないと思いました。とにかく、正規表現に大文字が含まれるように回答を編集しましたV。楽しむ!:)
イオナットボティザン


1
@JörgHülsermannこれは実際には同じコードですが、他のソリューションがどのようなものになるかについて興味があったので、最初はより緩やかな正規表現を使用しました。あと1日(週末に誰かが試してみたいと思うかもしれません)、明日夜にコードと説明を投稿します。私が今あなたに言えることは、あなたは未定義の定数を文字列として使うことについて正しい道を歩んでいたということです。また、ソリューション内の何かについて間違っていました。電話することができます(array_re.chr(ord(u)+true).erse)()!:)(...または少なくとも_許可されたときはできる)
イオナットボティザン

3
@IonutBotizanレベル1のソリューションはクラックされているため、今のところ秘密にしておくことができます。レベル2を新しい投稿として作成する方が良いでしょう。他の人にとって、レベル2がクラックされているかどうかを確認するのは簡単です。
ケニー

1
レベル2に割れたregex101.com/r/XtVl9G/1ヒントをありがとう。今、レベル3を待っています:
ヨルクヒュルサーマン

5

ルビー[割れた]

最初の警官と強盗の挑戦。これがあまりにも簡単にならなかったことを願っています。

編集:PCREで明らかに同等であるために置き換えられ\g<1>まし(?1)た。

正規表現(PCRE)

^(\W?\W\w){4}..(?1){2}[(-=Z-~]*(?1){5}\w*(?1)(.)\2$

出力(n = 4)

[[1, 2, 3, 4], [8, 7, 6, 5], [9, 10, 11, 12], [16, 15, 14, 13]]

(配列の配列を返します。これは、ラムダ、BTWですが、多すぎますか?)



4

JavaScript (クラック)

初めて警官と強盗の挑戦をします。うまくいけばうまくいきます。

正規表現(JavaScript)

^.*(\.\w+\(.*\)){4}$

出力

等しい配列:

[[1,2,3,4],[8,7,6,5],[9,10,11,12],[16,15,14,13]]

あなたはしたいことがあり$、コード自体は正規表現の末尾に終了した場合、正規表現の終わりに。それ以外の場合は、たとえばx=>x.toString().toString().toString().toString()、その後でやりたいことができます。
-ETHproductions

@ETHproductions良い点、ヒントをありがとう!
トム


1
@ovsうわー、それは速かった。よくやった!
トム

4
@Tom .*初めは本当に簡単だったでしょう。コメントが続く任意のプログラムを指定できます。基本的に、.*正規表現に含めないでください。
mbomb007

4

Swift、正規表現25 (クラック)

そうです、私はこれのこつを持っているかどうか見てみましょう。これは私の最初の警官と強盗の投稿ですので、私は混乱したかどうかを知っています!

正規表現

regex101.comでJavaScriptフレーバーを使用しました

^.{21}print[^/]{49}o.{7}$

サンプル出力

[1, 2, 3, 4]
[8, 7, 6, 5]
[9, 10, 11, 12]
[16, 15, 14, 13]

元のコード

(0..<n).forEach{i in print((0..<n).map{i%2>0 ?(i+1)*n-$0 :i*n+$0+1},separator:",")}


この送信はn入力として受け取らないようですが、ハードコードされた変数が必要です。それが正しい場合、メタコンセンサスによると、これは有効ではないようです。
スチューウィーグリフィン

注:既にクラックされているため、投稿を保持できます:)
Stewie Griffin

@Stewie。情報をありがとう、過去にこの種の質問を避けてきた理由があります!この答えがクラックされたので、「ちょうど機能」の概念をもう少しよく理解していると思います。私はそれが関数の本体を意味すると仮定していましたが、私は今それが関数変数を意味するかを集めましたか?
ジェームズウェブスター

4

C –長さが42文字の正規表現– クラック

regex101で使用されるJavascript正規表現。

^[-h<=*c+m?{printf("\/a: %d\\',o);}]{137}$

これは簡単だと思います...

> main 4
1   2   3   4
8   7   6   5
9   10  11  12
16  15  14  13
>

出力は\n、各行の後にタブ区切りで表示されます。

私のソリューションは、ここでは、整数0から2を経て得られたt-tt/tt

main(int t,char**a){int o=t-t,i=t/t,m,n,h=atoi(*(a+i));for(m=o;m<h;m++)for(n=o;n<h;n++)printf("%d%c",m*h+(m%t?h-n:n+i),n<h-i?'\t':'\n');}

r正規表現から削除できます。
ケニー

@kennytm-ありがとう-その1つを逃した


4

ゼリー、長さ14 割れ

デニスにひびが入った

[^/P-`mvḊ-ṫ€]*

Python正規表現。

m私はそれを滑らせた後、再び追加しました。

/(迅速に削減);
from P(product)to `(monad from dyad quick);
m(モジュロインデックス);
v(評価ダイアド);
from (dequeue)to (tail); および
(クイックごとに)

4鉱山出力の入力の場合:

 1  2  3  4
 8  7  6  5
 9 10 11 12
16 15 14 13

...リストのリストをでグリッドとしてフォーマットしたためGです。


割れた。これは楽しいものでした。
デニス

4

Powershell、23バイト

ひび割れたマット

^.+?%.{42}%.{11}:.{35}$

元のソリューション:

$n="$args";$script:r=0;$a=1..$n|%{$t=++$script:r..($script:r+=$n-1);if(!($_%2)){[Array]::Reverse($t)};,$t};$a|%{$_-join" "}

入力を引数として受け取り、標準出力に出力します

うまくいけば、この正規表現は大丈夫です。これを解読するのはあまり難しいことではないと思います。あまり難読化していないので、正規表現はギャップを埋めるためのいくつかの出発点を提供します、最初のセグメントに1つのことがありますこれはコードゴルフでは非常に珍しいことですが、誰かを見つける可能性があります。

とにかく最初の警官が挑戦します。

1..4 | % { "----$_----" ; .\snake-cops.ps1 $_  }
----1----
1
----2----
1 2
4 3
----3----
1 2 3
6 5 4
7 8 9
----4----
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13


あなたの解決策は何でしたか?
マット

@Mattが追加しました。コードゴルフ以外のものをいくつ追加するか、つまり、ほとんど不要な変数と変数の[Array]::Reverse()代わりに使用することを考えると、さらに難しくなると思いました。$array[9..0]$script:r
-colsw

4

ローダ0.12、長さ19 (@KritixiLithosによりクラック)

PCRE:

^{(\|[^\/#\s]*){8}$

サンプル出力(n = 4):

[1, 2, 3, 4][8, 7, 6, 5][9, 10, 11, 12][16, 15, 14, 13]

元のコード:

{|n|seq(0,n-1+n%2)|push([{|i|seq(n*i+1,n*i+n)}(_)],[{|j|seq(n*j+n,n*j+1,step=-1)}(_)])|head(n)}

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


1
この課題に先立ち、利用可能な(無料の)通訳者がいる限り、それは公平なゲームです。MATLを初めて試したのは、警官ポストクラックしようとした時でした。誰かがこの答えをクラックするためだけにローダを学んだとしても、驚かないでください:)
Stewie Griffin

ドキュメントが英語ではなく、フィンランド語であることを願っています:)
Stewie Griffin

@StewieGriffin 利用可能なドキュメントいくつかあります。回答にリンクを追加する必要がありますか、またはGithubページから簡単に見つけることができますか?
fergusq


4

PHP 7(安全)

元のコード

for($z=0,$q="";$z<($x=$argv[1])**2;){$w=($d=intdiv($z,$x))%2?($d+1)*$x-$z%$x:($z+1);for($f=0;$f<(log10($x**2)^0)-(log10($w)^0);$f++)$q.="\x20";$q.=++$z%$x?"$w\x20":"$w\n";}print(rtrim($q));

2回目

正規表現(PCRE):29バイト

^[^A-Z#\/\s\>busy_heck]{189}$

スペースなし、コメントなし、base64_decodeの使用なし。

多くの機能は許可されていません!下線

出力n = 11

  1   2   3   4   5   6   7   8   9  10  11
 22  21  20  19  18  17  16  15  14  13  12
 23  24  25  26  27  28  29  30  31  32  33
 44  43  42  41  40  39  38  37  36  35  34
 45  46  47  48  49  50  51  52  53  54  55
 66  65  64  63  62  61  60  59  58  57  56
 67  68  69  70  71  72  73  74  75  76  77
 88  87  86  85  84  83  82  81  80  79  78
 89  90  91  92  93  94  95  96  97  98  99
110 109 108 107 106 105 104 103 102 101 100
111 112 113 114 115 116 117 118 119 120 121

出力n = 4

 1  2  3  4
 8  7  6  5
 9 10 11 12
16 15 14 13

出力n = 3

1 2 3
6 5 4
7 8 9

あなたの答えは今安全だと思います:)
アーロン

@アーロン私はそれが割れていなかったのだろうか。元のコードが追加されました
ヨルグヒュルサーマン

4

MATL、長さ12(安全)

正規表現

Pythonフレーバーを使用します。

(\w{3}\W){5}

出力例

のためにn=4

 1  2  3  4
 8  7  6  5
 9 10 11 12
16 15 14 13

溶液

txU:GeG:oEq*S5M*TTx!

これがどのように機能するかを確認するには、inputを検討してくださいn=4

tx   % Implicit input n, duplicate, delete. So this does nothing
     % STACK: 4
U    % Square
     % STACK: 16
:    % Range
     % STACK: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
Ge   % Reshape as an n-row array in column major order
     % STACK: [1  5  9 13;
               2  6 10 14;
               3  7 11 15;
               4  8 12 16]
G:   % Push range [1 2 ... n]
     % STACK: [1  5  9 13;
               2  6 10 14;
               3  7 11 15;
               4  8 12 16]
               [1 2 3 4]
o    % Modulo 2
     % STACK: [1  5  9 13;
               2  6 10 14;
               3  7 11 15;
               4  8 12 16]
              [1  0  1  0]
Eq   % Times 2, minus 1 (element-wise)
     % STACK: [1  5  9 13;
               2  6 10 14;
               3  7 11 15;
               4  8 12 16]
              [1 -1  1 -1]
*    % Multiply (element-wise with broadcast)
     % STACK: [1 -5  9 -13;
               2 -6 10 -14
               3 -7 11 -15
               4 -8 12 -16]
S    % Sort each column
     % STACK: [1 -8  9 -16;
               2 -7 10 -15;
               3 -6 11 -14;
               4 -5 12 -13]
5M   % Push [1 -1 1 -1] again
     % STACK: [1 -8  9 -16;
               2 -7 10 -15;
               3 -6 11 -14;
               4 -5 12 -13]
              [1 -1  1  -1]
*    % Multiply (element-wise with broadcast)
     % STACK: [1  8  9  16;
               2  7 10  15;
               3  6 11  14;
               4  5 12  13]
TTx  % Push [true true] and delete it. So this does nothing
!    % Transpose. Implicitly display
     % STACK: [ 1  2  3  4;
                8  7  6  5;
                9 10 11 12;
               16 15 14 13]

4

ゼリー、長さ17(安全)

[^/P-`mvÇ-ıḃ-ṫ€]*

Python正規表現。

結び目を締めて、これはいくつかのより有用なものを禁止します、あなたの援助のためにここに禁止されたバイトがあります:

/PQRSTUVWXYZ[\]^_`mvÇÐÑ×ØÞßæçðñ÷øþĊċĖėĠġİıḃḄḅḊḋḌḍḞḟḢḣḤḥḲḳḶḷṀṁṂṃṄṅṆṇṖṗṘṙṚṛṠṡṢṣṪṫ€

それらの3分の1以下!

4鉱山出力の入力の場合:

 1  2  3  4
 8  7  6  5
 9 10 11 12
16 15 14 13

...リストのリストをでグリッドとしてフォーマットしたためGです。

解決策:

’:2o1
Ḃ¬aẋ@0
’r0;0ẋ$ẋ1Ŀ¬0¦;2ĿÆ¡œ?⁸²¤s⁸G

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

ここでの主なトリックは、n 2までの自然数の順列の辞書式にソートされたリストにインデックスを付け(œ?長さn 2!のリストの作成を回避するために使用)、結果を長さnのチャンクに分割することです。前述のインデックスは、「非スライス」スネークが要素を所定の方法で並べ替えることによって作成されるため、定式化された乗数体系でその表現を形成することで見つかります(これはで簡単に数値に変換できますÆ¡)。

私が提示するソリューションはĿ、以前のリンクをモナド(ÑおよびÇ)として参照するために使用しますが、$代わりにこれらのヘルパー関数を「インライン化」するために複数の行を使用することもできます。また、使用してrいるためR禁止されています。

’:2o1 - Link 1, periodic repetitions in the factorial base representation: n
’     - decrement n
 :2   - integer divide by 2
   o1 - or 1 (keep one period in the cases n=1 and n=2)

Ḃ¬aẋ@0 - Link 2, n zeros if n is even, else an empty list: n
Ḃ      - mod 2
 ¬     - not
   ẋ@0 - 0 repeated n times
  a    - and

’r0;0ẋ$ẋ1Ŀ¬0¦;2ĿÆ¡œ?⁸²¤s⁸G - Main link: n                    e.g. 6
’r0                        - inclusive range(n-1, 0)              [5,4,3,2,1,0]
    0ẋ$                    - 0 repeated n times                   [0,0,0,0,0,0]
   ;                       - concatenate (makes one "period")     [5,4,3,2,1,0,0,0,0,0,0,0]
        1Ŀ                 - call link 1 as a monad               2
       ẋ                   - repeat list                          [5,4,3,2,1,0,0,0,0,0,0,0,5,4,3,2,1,0,0,0,0,0,0,0]
           0¦              - apply to index 0 (rightmost index):
          ¬                -     not (make the last 0 a 1)        [5,4,3,2,1,0,0,0,0,0,0,0,5,4,3,2,1,0,0,0,0,0,0,1]
              2Ŀ           - call link 2 as a monad               [0,0,0,0,0,0]
             ;             - concatenate                          [5,4,3,2,1,0,0,0,0,0,0,0,5,4,3,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0]
                Æ¡         - convert from factorial base          45461852049628918679695458739920
                      ¤    - nilad followed by link(s) as a nilad
                    ⁸      -     left argument, n                 6
                     ²     -     square                           36
                  œ?       - lexicographical permutation lookup   [1,2,3,4,5,6,12,11,10,9,8,7,13,14,15,16,17,18,24,23,22,21,20,19,25,26,27,28,29,30,36,35,34,33,32,31]
                       s⁸  - split into chunks of length n        [[1,2,3,4,5,6],[12,11,10,9,8,7],[13,14,15,16,17,18],[24,23,22,21,20,19],[25,26,27,28,29,30],[36,35,34,33,32,31]]
                         G - format as a grid

4

ピップ、正規表現の長さ3(安全)

解決策は、コマンドライン引数としてnを取る完全なプログラムです。コマンドラインフラグは使用しません。

正規表現(任意のフレーバー)

\w+

サンプル出力

1 2 3 4 
8 7 6 5 
9 10 11 12 
16 15 14 13 

私の解決策

YENsXaPBsPOyY_MUyFi_MUENsXaIiBA1PsPUPODQENsXiXaPBsX_PBsMRVyEI1PsPUPODQENsXiXaPBsX_PBsMy

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

戦略

ここでは、するコードです好きな書き込みには:

Y \,a
F i ,a
 I i%2
  P i*a+_.s M RVy
 E
  P i*a+_.s M y

あれは:

  • 数字1介して店舗ay
  • i0からの値をループしますa-1
  • iが奇数の場合、yを反転し、i*a各要素に追加し、各要素にスペースを連結して、印刷します
  • それ以外の場合は、同じことを行いますが、最初に元に戻すことはしません

難しさ

Pipの多くのコマンドと変数は文字を使用しますが、いくつかの重要なものは使用しません:

  • 範囲と包括的範囲(,および\,
  • ほとんどの数学演算(+-*%++
  • 割り当て(:
  • 複数のステートメントを持つループまたは関数本体を作成することはできません(それはが必要です{}
  • 括弧を使用して優先順位を強制することはできません

これらの制限を回避する方法:

  • ENの代わりにumerateを使用できます,。必要な文字数の文字列が必要なだけで、のような構造の各サブリストの最初の要素を抽出する必要があり[[0 "H"] [1 "i"]]ます。
  • Forループの問題を解決できれば、何も増やす必要はありません。
  • ank演算子yを使用して変数に割り当てることができますY
  • 文字列を使用して数学を実行できます。X文字列の乗算ですPU。sh(またはPB「プッシュバック」)は、文字列を別の文字列にインプレースで連結します。文字列の長さを取得するには、それをEN列挙し、結果のリストから正しい数を抽出します。
  • を使用して単一式のラムダ関数として記述できる限り、関数を使用できます_

仕様

プログラムの構成要素:

範囲

_MUENsXa

それmap-unpack(_, enumerate(repeat(space, a)))は擬似コードです。Map-unpackはPythonのようなものですitertools.starmap。リストのリストが与えられると、各サブリストのアイテムに対して関数を呼び出します。_最初の引数を返すため_MU、各サブリストの最初の項目を取得するだけです。たとえば、a = 3の場合:

     sXa  "   "
   EN     [[0 " "] [1 " "] [2 " "]]
_MU       [0 1 2]

...これはと同じ,aです。

包含範囲

inclusive-range(1, a)単一の式で行う方法があるかどうかはわかりませんが、幸いなことに、必要なのは1回だけなので、y変数に3つのステップで作成できます。

YENsXaPBs

擬似コードでは、yank(enumerate(repeat(space, a).push-back(space)))

   sXa     "   "
      PBs  "    "
 EN        [[0 " "] [1 " "] [2 " "] [3 " "]]
Y          Store that in y

次にPOy、から最初のアイテムをポップしてy破棄し、を残し[[1 " "] [2 " "] [3 " "]]ます。

最後に、

Y_MUy

つまりyank(map-unpack(_, y))、各サブリストの最初の要素を抽出し、結果のリストをに戻しyます。y[1 2 3]です。

長さ

PODQENaPBs

擬似コードでは、pop(dequeue(enumerate(a.push-back(space))))。ここでの難しさは、列挙len(a)-1が最大の数字しか与えないことですが、欲しいですlen(a)。したがって、最初にスペースをaにプッシュし、1文字分長くしてlen-1から、新しい文字列を取得します。

      a     "xyz"
       PBs  "xyz "
    EN      [[0 "x"] [1 "y"] [2 "z"] [3 " "]]
  DQ        [3 " "]
PO          3

数学

文字列の長さを取得する方法ができたので、文字列を使用して数値の乗算と加算を行うことができます。

PODQENsXaXbPBs
PODQENsXaPBsXbPBs

最初はスペースのsXaXb文字列を作成してからa*b、その長さを取得します。2番目はスペースのsXaPBsXb文字列をbスペースの文字列にプッシュし、aその長さを取得します。

素敵な部分は、すべての事業者たちがここで使用していることである(PUPOPBDQENX)を使用することができます_ラムダ式を形成すること。したがって、数学的変換を前に構築した包括的範囲にマッピングできます。

i%2ループ内をチェックする必要もありますが、これはビット単位のAND:で簡単に実現できますiBA1

それらをまとめる

空白を追加した完全なコード:

YENsXaPBs POy Y_MUy              Get \,a into y
F i _MUENsXa                     For i in ,a
 I iBA1                           If i%2=1
  P sPUPODQENsXiXaPBsX_PBs M RVy   Print sPUi*a+_ M RVy
 EI1                              Elseif 1 (using E would cause a parsing problem)
  P sPUPODQENsXiXaPBsX_PBs M y     Print sPUi*a+_ M y

などのフラグを使用でき-Sますか?
ブライアンマッカトン

@BrianMcCutchon良い質問:答えはノーです。(正規表現の対象となるコードの一部ではないため、それらを使用するには抜け穴が多すぎるように見えました。)明確にするために編集されました。
DLosc

これまでのところ、私はそれが持ってa*bいる_V_VRVENCGaRLbPU1,aある_MUENZGaaJ" "あるaJ_VRVk、とa@iのようなもので_V_VRVaZCGi、私はかなりまだ括弧なしで優先して動作することはできませんが、。また、範囲の順列(上記のように作成され、に相当するもの,(a*a))を取得し、それを使用して各行の正しい順列を選択できるという漠然としたアイデア。
ブライアンマックラッチン

@BrianMcCutchon詳細についてはもちろんコメントできませんが、進行状況の更新を本当に楽しんでいます。^ _ ^
DLosc

今は安全だと思います。どうだった?
ブライアンマックラッチン


3

CJam、PCRE、長さ9、クラック

^[a-z~]*$

4の出力例:

[[1 2 3 4] [8 7 6 5] [9 10 11 12] [16 15 14 13]]

{|}も禁止されています。



よくやった!それが唯一の束を使用除いて私の答えは、基本的に同じであったmemq、それはのようだったので、長い間、非常に(〜20Kバイト)、番号を近似します。
リン

3

Mathematica、正規表現の長さ11、非競合クラック

PCREフレーバー:

^[^]@]{49}$

正しい解は、整数を受け取り、次のようなネストされたリストとして出力を返す関数になります。

{{1, 2, 3, 4}, {8, 7, 6, 5}, {9, 10, 11, 12}, {16, 15, 14, 13}}


@kennytmああ、それはきちんとした解決策です。私が持っていたものとはまったく異なります。後で投稿するか、より制限的な正規表現を追加するかを確認します。
マーティンエンダー

3

tinylisp、正規表現の長さ3(クラック

tinylispコードは、Try it onlineでテストできます!

正規表現(任意のフレーバー)

\S+

筋金入りの時間です。

出力

ソリューションは、単一の整数引数を取り、次のようなリストを返す関数を定義します(n = 4の場合):

((1 2 3 4) (8 7 6 5) (9 10 11 12) (16 15 14 13))

私の元のコードは、ブライアンマックラッチンが思いついたのと同じ基本的なアイデアを使用して、リストを作成し、それらを評価します。これは1行です。

(v(c(h(q(d)))(c(h(q(d')))(c(c(h(q(q)))(c(c()(c(q(arglist))(c(c(h(q(v)))(c(c(h(q(c)))(c(c(h(q(q)))(q(d)))(q(arglist))))()))())))()))()))))(d'(seq-args(c(h(q(start)))(c(h(q(stop)))(c(h(q(step)))())))))(d'(seq(c(c(h(q(accum)))seq-args)(q((i(e(v(h(q(start))))stop)(c(v(h(q(start))))accum)(seq(c(v(h(q(stop))))accum)start(s(v(h(q(stop))))step)step)))))))(d'(f'(c(c(h(q(index)))(c(h(q(size)))seq-args))(q((i(e(v(h(q(index))))size)()(c(seq()start(v(h(q(stop))))step)(f'(a(h(q(1)))index)size(a(v(h(q(stop))))size)(a(v(h(q(start))))size)(s(h(q(0)))step)))))))))(d'(f(q((size)(f'(h(q(0)))size(h(q(1)))size(h(q(1))))))))

マクロを定義するために、完全な構築と評価のメソッドを一度使用しました d'て、のような定義を行うを定義しましdたが、その引数をリストにラップして(d x 42)います(d'(x 42))。そして、それは空白を必要とするかもしれない定義内のすべてのリストを書き換えるだけの問題でした:(q(a b))- > (c a(q(b)))- > (c(h(q(a)))(q(b)))


1
割れた。簡単ではありませんでした。
ブライアンマックラッチン

2

Python3、長さ162 (割れた!)

正規表現: ^([^"' #]){24}"(?1){11}i%n(?1){4}2\*n-(?1){4}i%n(?1){10}i\/n(\)\/\/1)(?1){5}(?2)(?1){3}2\*\(i%n\)(?1){4}[int()2\/]{16}for i in range\(j,(?1){4}\]\)(?1){6}\"\*n\)$

さて、私は知っている、それはかなりです長い。幸いなことに、1週間以内にクラックされることはありません。

私はどこでも間違いを犯さなかったと思う、それは抜け穴のような答えを許すだろう。

出力フォーマット

4:
[1, 2, 3, 4]
[8, 7, 6, 5]
[9, 10, 11, 12]
[16, 15, 14, 13]

元のコード:n=int(input());j=0;exec("print([int(i%n+1+(2*n-(2*(i%n)+1))*((((i/n)//1+1)/2)//1)+(2*(i%n)+1)*int(int(i/n)/2))for i in range(j,j+n)]);j+=n;"*n)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.