Cảnh sát: Tạo một regex - Tạo một con rắn


40

Đây là chủ đề của cảnh sát. Các chủ đề của tên cướp là ở đây .


Viết mã nhận đầu vào nvà tạo một "ma trận rắn" n-by-n.

Ma trận rắn là một ma trận theo mô hình này:

3 giờ 3:

1  2  3
6  5  4
7  8  9

và 4 giờ 4:

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

Các định dạng đầu ra chính xác là tùy chọn. Bạn có thể ví dụ đầu ra [[1 2 3],[6 5 4],[7 8 9]], hoặc một cái gì đó tương tự.

Bạn phải cung cấp tên ngôn ngữ và biểu thức chính quy phù hợp với mã của bạn. Bạn có thể chọn cách chi tiết regex của bạn. Trong trường hợp cực đoan, bạn có thể viết một biểu thức chính phù hợp với mọi chuỗi có thể, trong trường hợp đó sẽ rất dễ dàng để bẻ khóa mã của bạn. Bạn cũng phải cung cấp đầu ra cho n=4, để kẻ cướp biết định dạng chính xác mà bạn đã chọn.

Bạn có thể sử dụng một trong những hương vị regex có sẵn trên regex101.com hoặc hương vị Ruby.

Bạn phải chỉ định cái nào bạn đang sử dụng.

Ghi chú:

  • Bạn phải hỗ trợ bất kỳ lớn hợp lý n. Bạn có thể cho rằng nó sẽ không tràn bộ dữ liệu hoặc bộ nhớ. Nếu kiểu dữ liệu mặc định là số nguyên có chữ ký 8 bit, thì bạn có thể giả sử n<=11, nếu đó là số nguyên 8 bit không dấu, thì bạn có thể giả sử n<=15.
  • Những tên cướp phải phù hợp với định dạng đầu ra của trình, ngoại trừ không gian hàng đầu / dấu và dòng mới, vì điều đó có thể đã bị xóa bởi định dạng SE.

Tiêu chí chiến thắng:

Người chiến thắng sẽ là người nộp đơn không bị theo dõi với regex ngắn nhất, được đo bằng số lượng ký tự.

Nếu bài đăng của bạn vẫn không bị khóa trong 7 ngày, thì bạn có thể đăng giải pháp dự định và đánh dấu bài đăng của bạn là an toàn.


5
Hạt, dài 1 , ..
Kritixi Lithos

1
Tôi có thể sử dụng một trong những ngôn ngữ được ghi lại ở đây không? codegolf.stackexchange.com/questions/61804/ từ

2
@KritixiLithos Ngoại trừ bạn phải phát hành chương trình gốc của mình để trở nên an toàn ;-)
ETHproductions

3
@DeepakAgarwal - Viết mã của bạn để tạo ra một con rắn, sau đó cung cấp một biểu thức chính phù hợp với nó. Giải pháp của tên cướp phải có cùng ngôn ngữ và cũng phù hợp với biểu thức chính quy. Vì vậy, một chiến lược là cung cấp một regex hạn chế, để làm khó kẻ cướp, nhưng không hạn chế đến mức bạn đưa ra giải pháp!

2
sự đồng thuận meta này cho phép I / O đơn phương cho sed, không có kiểu dữ liệu, có hợp lệ cho thử thách này không?
seshoumara

Câu trả lời:


9

05AB1E , bẻ khóa bởi mbomb007

Hy vọng vui vẻ để crack và không quá rõ ràng.

Regex (PCRE):

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

Đầu ra n = 4:

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

Giải pháp ban đầu

UXFXLNX*+NFR}ˆ

oooooomg - anh chàng đó là dope (tất nhiên là khen ngợi)
Tilak Maddy

@ mbomb007: Chữ cái có dấu không khớp với số \wkhông. Bạn có thể thử bản thân tại regex101
Emigna

1
Bạn có thể làm cho regex của mình ngắn hơn bằng cách đổi .{0,2}thành.?.?
Aaron

1
Bạn có thể đặt -vị trí cuối cùng của lớp char ngoặc ( [+*\/%-]) để bạn không phải thoát nó.
Dada

@Dada: Điều đó thực sự hoạt động trong PCRE. Tôi không quan tâm lắm đến việc rút ngắn nó ngay bây giờ vì tôi khá chắc chắn rằng nó sẽ bị bẻ khóa. Nếu nó nên giữ, tôi sẽ kết hợp cả đề xuất của bạn và Aarons. Cảm ơn :)
Emigna


7

Thạch , dài 6, nứt

Regex (PCRE)

^.{9}$

Sản lượng mẫu

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

3
Điều này buộc phải chơi golf thực sự tốt trong Jelly: D
Yytsi

1
Bất kỳ chín nhân vật? Bạn đang cảm thấy hào phóng! : D
admBorkBork

1
'Bất kỳ chín' Có bao nhiêu chức năng trong Jelly?
Matthew Roh

Tôi chắc chắn 99% rằng char cuối cùng phải được Gđịnh dạng đầu ra đúng. Tôi gần như giải quyết phần còn lại, nhưng tôi không thể tìm ra cách đảo ngược mọi mục khác trong một mảng bằng Jelly ...
ETHproductions

@ETHproductions: Tôi khá chắc chắn rằng tôi đã giải quyết được nó và tôi có một phương pháp đảo ngược mọi mục khác. Vấn đề của tôi là tôi không thể tìm ra cách liên kết mọi thứ lại với nhau (Tôi chưa thử hướng dẫn). Tôi đã mong đợi để xem nó được giải quyết bây giờ mặc dù. Có lẽ nó khó hơn tôi nghĩ.
Emigna

6

R, chiều dài 14 Cracked bởi plannapus

Tôi hy vọng tôi có regex này ngay. Những gì tôi đang cố gắng để nói là 77 ký tự bao gồm <space>, #, ;[. Tôi đã thử nó ở đây

Regex

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

Sản lượng mẫu n = 4

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

Tôi nghĩ rằng điều này sẽ dễ dàng nhưng tôi gặp khó khăn lớn khi đưa nó ra những con số như thế (so với một mảng nào đó). Làm tốt lắm.
BLT

1
@BLT Cảm ơn, đó là một vấn đề thú vị để thử và làm khó.
MickyT

Cracked , mặc dù có lẽ không phải là mã giống như của bạn.
plannapus


6

> <> , dài 49, bị nứt bởi Aaron

Regex (Javascript)

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

Đầu ra mẫu (n = 4)

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

Định dạng là một chút lạ, nhưng kiểm tra độ dài số sẽ làm cho nó dài hơn rất nhiều. Có thể đã đi hơi quá mức trên regex, không chắc chắn!

Chỉnh sửa: Ngoài ra tôi quên đề cập, tôi sử dụng ngăn xếp ban đầu (cờ -v) cho đầu vào, không phải đầu vào cá thông thường. Lấy làm tiếc!

Mã gốc:

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

Aaron's đơn giản hơn nhiều! Độ phức tạp của mã ban đầu của tôi dựa trên ý tưởng sử dụng n[r]mọi số thứ n để lật đoạn (hàng) đó, sau đó in tất cả các số cùng một lúc ở cuối


1
..ngắn hơn .{2};)
Aaron

Không quan trọng, đã phá vỡ nó! Tôi rõ ràng đã không theo mã của bạn quá nhiều, nhưng dù sao đó cũng là một thử thách thú vị. Hãy chia sẻ mã gốc của bạn! Ngoài ra nếu bạn thích, bạn có thể trả lại sự ủng hộ ;)
Aaron

@Aaron làm tốt lắm! Ngoài ra, tôi không chắc làm thế nào tôi không nhận thấy điều đó trong regex. oh tốt :) Tôi sẽ xem liệu tôi có thể bẻ khóa của bạn không
torcado

5

, bị nứt

Ngoài ra thử thách Cops và Robbers đầu tiên của tôi, vì vậy hãy cho tôi biết nếu có vấn đề với mẫu này (đặc biệt vì đây là ngôn ngữ khá lạ).

Regex (PCRE)

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

Đầu ra (n = 4)

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

1
Nếu bất cứ điều gì nó có thể là quá dễ dàng. Nếu bạn có .*trong regex của bạn, nó có thể là bất cứ điều gì. Vì vậy, nếu ngôn ngữ có ý kiến, họ có thể viết bất kỳ chương trình nào theo sau là một bình luận.
mbomb007

@ mbomb007 Điểm tốt.
Nick Clifford


@Emigna Tốt lắm!
Nick Clifford

5

PHP, 221 byte (đã bẻ khóa )

Tôi hy vọng nó là đủ khó.

Regex (PCRE): 16 byte

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

Không có không gian, không có bình luận, không sử dụng base64_decode. Chúc vui vẻ.

Đầu ra

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

Mã gốc

$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));

Xin lưu ý rằng câu trả lời có thể sử dụng base64_decodevì regex của bạn không cho phép.
Máy

4
@CalculatorFeline: các khối regex 6, có thể chặn base64_decode.
nneonneo


Rất tiếc, đã bỏ lỡ điều đó. Nhưng ^ vì vậy nó không thành vấn đề.
Máy

5

C # net46 ( Đã bẻ khóa )

( http://ideone.com/ hoạt động)

Regex PCRE độ dài 58 thử nghiệm tại regex101

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

Chỉ có phương pháp là regexed. Phương thức trả về một mảng 2d int [,] (int [4,4]) cho đầu vào n = 4. Nếu được in trông như thế này:

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

Đây là lần đầu tiên tôi tham gia vào bất cứ điều gì như thế này, hãy cho tôi biết nếu tôi làm gì sai. Chắc chắn không cố gắng giành chiến thắng theo độ dài regex, tôi chỉ quan tâm để xem tôi đã làm tốt như thế nào trong việc ngăn chặn bẻ khóa :)

Mã gốc:

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 _;}


Làm tốt lắm, đáng lẽ tôi nên cố gắng làm cho chiều dài trở nên khó khăn hơn ít nhất ...
EklipZ

5

QBasic, regex dài 10 ( bị nứt )

Regex

Nên hoạt động trong bất kỳ hương vị regex nào, nhưng chúng ta sẽ gọi nó là hương vị Python.

([A-Z]+.)+

LƯU Ý: Giải pháp của tôi sử dụng QBasic chưa được định dạng; sau khi định dạng, mã không khớp với biểu thức chính quy do khoảng trắng được thêm vào. (Nhưng tôi có thể nói với bạn rằng đó là thay đổi duy nhất tạo nên sự khác biệt.([A-Z]+ ?. ?)+ Vẫn hoạt động trên phiên bản được định dạng.)

Đối với mục đích thử nghiệm, tôi đã sử dụng QB64 với tắt định dạng mã (bên dưới Tùy chọn> Bố cục mã). Nếu bạn không muốn tải xuống một cái gì đó, bạn cũng có thể chạy QBasic trực tuyến tại archive.org (nhưng ở đó bạn không thể tắt định dạng).

Sản lượng mẫu

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

Vì vậy, tất cả các biểu tượng trong nguồn phải được đặt trước một chữ cái.
Máy

@CalculatorFeline Một hoặc nhiều chữ cái.
mbomb007

Vâng, yêu cầu của tôi là tương đương vì \w+\Wcó thể được chia thành \w*\w\W. ( \w*null(tầm thường) hoặc \w+(dễ dàng lẻn vào với một biểu tượng))
CalculatorFeline

@CalculatorFeline Không có gì để nói rằng .không thể là một ký tự từ. Nó có thể là một chữ cái viết thường, hoặc một chữ số. Trong thực tế, nó thậm chí có thể là một chữ in hoa, trong trường hợp nhân vật cuối cùng của chương trình là một.
mbomb007


5

Python 3, 55 byte (Cracked)

PCRE / Python / Golang hương vị.

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

(Xin lưu ý rằng bắt buộc phải khớp hoàn toàn . Giả sử ^$khi kiểm tra.)

Đầu ra mẫu:

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

Giải pháp ban đầu:

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

Nên cắt bớt 4 byte: p


Dường như đối với tôi mà bạn bỏ lỡ )trong phần thứ hai của regex
Jörg Hülsermann

@ JörgHülsermann không có gì là thiếu, regex là chính xác.
kennytm

1
@ JörgHülsermann Phần phụ (nằm trong lớp nhân vật bắt đầu sau printvà kết thúc trước {48}. Mất một lúc tôi cũng thấy nó. ;) (Đối với vấn đề đó, cặp dấu ngoặc đơn trước đó cũng nằm trong một lớp ký tự.)
DLosc

@DLosc Bây giờ thì rõ rồi. Cảm ơn bạn
Jörg Hülsermann


5

dc , Regex chiều dài 12   Cracked bởi seshoumara!

^[^# !]{59}$

Biểu thức chính quy này đủ đơn giản để tôi không nghĩ rằng hương vị của các vấn đề regex - nó sẽ hoạt động trên bảng. (Lưu ý khoảng trắng sau dấu # trong regex.)

Tôi đã thử nghiệm tất cả bốn hương vị tại regex101.com (PCRE / PHP, Javascript, Python và Golang), cũng như phiên bản Ruby tại rubular.com. Chương trình dc khớp với regex trong tất cả năm phiên bản regex.


Chương trình dc lấy đầu vào của nó trên stdin và đặt đầu ra của nó trên thiết bị xuất chuẩn.

Đầu ra mẫu cho đầu vào 4 (có một khoảng trắng ở cuối mỗi dòng):

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

Mã gốc (được thêm vào sau khi bị bẻ khóa)

Điều này đã bị bẻ khóa bởi @seshoumara . Đây là mã dự định của tôi:

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

Giải trình:

?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.

Tổng số ở đầu ngăn xếp bây giờ là số tiếp theo chúng tôi muốn in:

  • Thật dễ dàng để thấy rằng điều đó là chính xác nếu số hàng là số chẵn, kể từ đó tổng chỉ là i.

  • Đối với các hàng được đánh số lẻ, lưu ý rằng i = d * (i / d) + (i% d) = d * (số hàng) + số cột. Theo sau, tổng i + d-2 * (số cột) -1 là d * (số hàng) + số cột + d - 2 * (số cột) - 1 = d * (số hàng + 1) - số cột - 1, là số chúng tôi muốn đặt vào hàng và cột được chỉ định để đảm bảo rằng chúng tôi đang đếm ngược trong các hàng được đánh số lẻ.

Quay trở lại với lời giải thích bây giờ:

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.

Các ký tự #và `` được bỏ qua để một giải pháp ngắn hơn không thể sử dụng các nhận xét để đạt 59 byte? Nếu vậy, không có nhu cầu vì trong dc có rất nhiều cách để thêm các lệnh không thay đổi bất cứ điều gì, ví dụ như vậy. lặp lại qcác lệnh ở cuối đoạn script.
seshoumara

@seshoumara Nó có nghĩa là một cái gật đầu theo hướng đó trong khi vẫn giữ cho regex ngắn. Nhưng bạn đã đúng, tất nhiên. (Đây là mục nhập cảnh sát và cướp đầu tiên của tôi, vì vậy tôi không chắc nó dễ đến mức nào.)
Mitchell Spector

Nứt! . Nhận được hơn 59 byte một chút là dễ dàng, nhưng phù hợp với giới hạn của bạn hoặc dưới mức khó khăn hơn tôi mong đợi. Đối với regex, không gian được chấp nhận bỏ qua, xấu của tôi, vì người ta cần in nó, vì vậy tôi phải sử dụng một cái gì đó khác.
seshoumara

@seshoumara Làm tốt lắm!
Mitchell Spector

@seshoumara Nhân tiện, không gian cũng hữu ích trong việc tách hai hằng số liên tiếp, vì vậy, việc cấm không gian cần có cách giải quyết nếu bạn cần chức năng đó. Tuy nhiên, in một không gian không phải là vấn đề lớn, vì 32Pngắn hơn [ ]ndù sao.
Spector Mitchell


5

PHP

Tôi hy vọng đây sẽ là một niềm vui! : D

Đầu ra (n = 4)

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

Cấp 1: PCRE (chiều dài = 17) ( Được bẻ khóa bởi Jörg Hülsermann )

^<[^'"\d{vV;<$]+$
  • Không có dấu ngoặc đơn hay kép nên ... không có chuỗi!
  • Không có chữ số!
  • Không {... không có chức năng ẩn danh!
  • Không vvậy ... không eval()!
  • Không ;vì vậy ... nó phải là một tuyên bố duy nhất!
  • Không <... không Heredoccũng không có nhiều khối PHP!
  • Cái lớn! Không có $ vì vậy ... chúc may mắn xác định các biến! >: D

@ JörgHülsermann có một cách tiếp cận thú vị, nhưng đó không phải là điều tôi nghĩ trong đầu :). Do đó, tôi đang giới thiệu một mức độ khó mới (Tôi hứa rằng tôi có mã phù hợp với điều này và tôi không chỉ gây rối với bạn):

Cấp độ 2: PCRE (chiều dài = 23) ( Được bẻ khóa bởi Jörg Hülsermann )

^<[^'"\d{v;<$_~|&A-Z]+$
  • Tất cả các hạn chế của Cấp 1
  • Mới ở cấp độ này: không ai trong số này _~|&A-Z! :)

Chúc vui vẻ!


GIẢI PHÁP NGUỒN GỐC

Vì vậy, việc cấm các $biến có nghĩa là không thể truy cập theo cách thông thường, nhưng điều đó không có nghĩa là chúng không thể được sử dụng! Bạn vẫn có thể sử dụng extract()/compact()để nhập / xuất các biến vào phạm vi hiện tại. :)

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

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

Tuy nhiên, có một vấn đề: compact('x')['x']++sẽ không hoạt động vì các biến trong PHP được truyền theo giá trị ... với một ngoại lệ! Các đối tượng.

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

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

Phần còn lại là dễ dàng.

  • Các số 01được tạo dễ dàng bằng cách chuyển đổi falsevà chuyển truesang intbằng cách thêm chúng vào +dấu
  • Sử dụng andorkể từ &|cấm
  • Để làm việc xung quanh các trích dẫn bị cấm, chỉ cần sử dụng các hằng số không xác định, được coi là chuỗi
  • Để loại bỏ các thông báo được tạo bằng cách sử dụng các hằng số không xác định, chỉ cần sử dụng @
  • Chữ cấm vcó thể được tạo bằng cách sử dụng chr(ord('u') + 1), dịch thành@chr(ord(u) + true) sử dụng các cách giải quyết trên
  • Dấu gạch dưới tương tự như trên: chr(ord('a') - 2)có nghĩa làchr(ord(a) - true - true)
  • Các hàm gọi có chứa các ký tự bị cấm có thể được thực hiện bằng cách tận dụng kiểu của PHP callable, đây có thể là một chuỗi chứa tên của hàm. Vì vậy, bạn có thể nối các hằng số không xác định và các chuỗi ký tự đơn được tạo bằng cách ord()xây dựng tên của hàm và gọi nó như sau: array_reverse()trở thành (a.rray.chr(ord(a)-true-true).re.chr(ord(u)+true).erse)()( arraylà một cấu trúc ngôn ngữ, đó là lý do tại sao nó được chia thành các hằng số không xác định array)
  • Tận dụng thực tế là, khi nói đến các cấu trúc có điều kiện và vòng lặp, dấu ngoặc nhọn là tùy chọn nếu cấu trúc chỉ áp dụng cho câu lệnh ngay sau đây. Điều này có nghĩa là bạn có thể làm những thứ như: if ($n = $argv[1] and $i = 0) while ($n > $i++ and do_some and other_stuff or exit)

Logic trong mã có thể đọc được của con người sẽ là:

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

Và phiên bản không thân thiện phù hợp với regex:

<?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ì regex của tôi khá dài và tôi không hy vọng nó sẽ có cơ hội chiến thắng, tôi chỉ cho rằng mọi người sẽ không quá bận tâm về các kỹ thuật như độ nhạy trường hợp của công cụ regex. Dù sao, tôi đã chỉnh sửa câu trả lời của mình để regex bây giờ bao gồm một số vốn V. Chúc vui vẻ! :)
I Muff Botizan 10/03/2017


1
@ JörgHülsermann Nó thực sự là cùng một mã nhưng ban đầu tôi đã sử dụng một biểu thức chính quy lỏng hơn bởi vì tôi tò mò về những giải pháp khác mà mọi người có thể đưa ra. Tôi sẽ cung cấp cho nó thêm một ngày nữa (có thể ai đó muốn chụp ảnh vào cuối tuần này) và tôi sẽ đăng mã của mình và lời giải thích vào tối mai. Điều tôi có thể nói với bạn ngay bây giờ là bạn đã đi đúng hướng về việc sử dụng các hằng số không xác định làm chuỗi. Ngoài ra, bạn đã sai về một cái gì đó trong giải pháp của bạn. Bạn có thể gọi (array_re.chr(ord(u)+true).erse)()! :) (... hoặc ít nhất là bạn có thể khi _được phép)
I Muff Botizan 11/03/2017

3
@I MuffBotizan Bây giờ bạn có thể giữ bí mật về giải pháp Cấp 1 vì nó đã bị bẻ khóa. Vẫn tốt hơn cho bạn để làm Cấp 2 như một bài đăng mới, người khác dễ dàng kiểm tra xem nó có bị bẻ khóa hay không.
kennytm

1
cấp 2 đã bẻ khóa regex101.com/r/XtVl9G/1 cảm ơn bạn đã gợi ý. Bây giờ tôi đang chờ cấp 3 :-)
Jörg Hülsermann

5

Ruby [nứt]

Cảnh sát đầu tiên và Cướp thử thách. Hy vọng tôi đã không làm điều này quá dễ dàng.

EDIT: thay thế \g<1>với (?1)vì họ rõ ràng là tương đương trong PCRE.

Regex (PCRE)

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

Đầu ra (n = 4)

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

(Trả về một mảng các mảng. Đó là lambda, BTW, nhưng có lẽ điều đó cho đi quá nhiều?)



4

JavaScript (đã bẻ khóa)

Lần đầu tiên thực hiện thử thách Cops and Robbers, hy vọng sẽ làm đúng.

Regex (JavaScript)

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

Đầu ra

Một mảng bằng:

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

Bạn có thể muốn một $kết thúc của regex nếu mã tự kết thúc ở cuối regex. Nếu không tôi có thể làm ví dụ x=>x.toString().toString().toString().toString()và sau đó bất cứ điều gì tôi muốn sau đó.
Sản xuất ETH

@ETHproductions Điểm tốt, cảm ơn vì tiền boa!
Tom


1
@ovs Wow, thật nhanh. Làm tốt lắm!
Tom

4
@Tom Lúc .*ban đầu sẽ làm cho nó thực sự dễ dàng. Nó có thể là bất kỳ chương trình theo sau bởi một bình luận. Về cơ bản, không bao gồm .*trong regex của bạn.
mbomb007

4

Swift, regex 25 (Cracked)

Phải, hãy xem tôi đã hiểu rõ điều này chưa. Đây là bài viết của cảnh sát và tên cướp đầu tiên của tôi, vì vậy tôi biết nếu tôi đã làm hỏng!

Regex

Tôi đã sử dụng hương vị javascript trên regex101.com

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

Đầu ra mẫu

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

Mã gốc

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


Có vẻ như đệ trình này không lấy nlàm đầu vào, nhưng yêu cầu một biến được mã hóa cứng . Nếu điều đó đúng thì tôi e rằng điều này không hợp lệ theo sự đồng thuận của meta.
Stewie Griffin

Lưu ý: Bạn có thể giữ bài đăng, vì nó đã bị bẻ khóa :)
Stewie Griffin

@Stewie. Cảm ơn thông tin, có một lý do tôi đã tránh những loại câu hỏi này trong quá khứ! Tôi nghĩ rằng tôi hiểu khái niệm "chỉ là một chức năng" tốt hơn một chút vì câu trả lời này đã bị bẻ khóa. Tôi đã giả định rằng nó có nghĩa là cơ thể của một chức năng, nhưng bây giờ tôi tập hợp nó có nghĩa là một biến chức năng?
James Webster

4

C - regex gồm 42 ký tự - bị nứt

Javascript regex như được sử dụng trong regex101 .

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

Đoán điều này sẽ là tầm thường ...

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

Đầu ra được phân định bằng tab \nsau mỗi dòng.

Giải pháp của tôi, ở đây số nguyên 0-2 đã thu được thông qua t-t, t/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');}

Bạn có thể loại bỏ một rtrong regex của bạn.
kennytm

@kennytm - cảm ơn - đã bỏ lỡ cái đó


4

Thạch , dài 14 nứt

bị nứt bởi Dennis

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

Regex Python.

Đã thêm mlại vào sau khi tôi để nó trượt.

/(giảm nhanh);
từ P(sản phẩm) đến `(đơn nguyên từ dyad nhanh);
m(lập chỉ mục modulo);
v(eval dyad);
từ (dequeue) đến (đuôi); và
(cho mỗi nhanh chóng)

Đối với đầu vào của 4đầu ra của tôi:

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

... bởi vì tôi đã định dạng một danh sách các danh sách dưới dạng lưới G.


Nứt. Đây là một niềm vui.
Dennis

4

Powershell, 23 byte

Bị nứt bởi Matt

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

Giải pháp gốc:

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

Đưa đầu vào làm đối số và đầu ra cho thiết bị xuất chuẩn

Hy vọng rằng regex này vẫn ổn, tôi không hy vọng điều này quá khó để bẻ khóa, vì tôi đã không làm khó nó nhiều, và regex cho một vài điểm khởi đầu tốt để lấp đầy các khoảng trống, có một điều trong phân đoạn đầu tiên Điều này rất không phổ biến trong môn đánh gôn, có thể khiến ai đó hiểu ra, tôi nghĩ rằng một trận đấu không tham lam được yêu cầu ở đó để làm cho điều này khó khăn hơn một chút.

Cảnh sát đầu tiên thách thức nào.

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


Giải pháp của bạn là gì?
Matt

@Matt đã thêm, tôi cho rằng sẽ khó hơn khi xem xét có bao nhiêu thứ không phải là mã golf mà tôi đã thêm, tức là sử dụng [Array]::Reverse()thay vì $array[9..0]$script:rcác biến chủ yếu là không cần thiết.
colsw

4

Röda 0.12 , dài 19 (Được bẻ khóa bởi @KritixiLithos)

PCRE:

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

Đầu ra mẫu (n = 4):

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

Mã gốc:

{|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)}

Hãy thử trực tuyến!


1
Đây là trò chơi công bằng miễn là nó vượt qua thử thách này và có một thông dịch viên (miễn phí). Lần đầu tiên tôi thử MATL là khi cố gắng bẻ khóa một bài đăng của cảnh sát . Đừng ngạc nhiên nếu ai đó học Röda chỉ để bẻ khóa câu trả lời này :)
Stewie Griffin

Tôi hy vọng tài liệu này bằng tiếng Anh, không phải tiếng Phần Lan :)
Stewie Griffin

@StewieGriffin Có một số tài liệu có sẵn. Tôi có nên thêm một liên kết đến câu trả lời của mình không hoặc có đủ dễ tìm thấy từ trang Github không?
fergusq


4

PHP 7 (An toàn)

Mã gốc

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));

Thử lần thứ hai

Regex (PCRE): 29 byte

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

Không có không gian, không có bình luận, không sử dụng base64_decode.

Nhiều chức năng không được phép! gạch dưới

Đầu ra 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

Đầu ra n = 4

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

Đầu ra n = 3

1 2 3
6 5 4
7 8 9

Tôi tin rằng câu trả lời của bạn hiện đã an toàn :)
Aaron

@Aaron Tôi tự hỏi tôi không bị nứt. Mã gốc được thêm vào
Jörg Hülsermann 17/03/2017

4

TOÁN , chiều dài 12 (an toàn)

Regex

Sử dụng hương vị Python:

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

Ví dụ đầu ra

Dành cho n=4:

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

Dung dịch

txU:GeG:oEq*S5M*TTx!

Để xem làm thế nào điều này hoạt động, xem xét đầu vào 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

Thạch , dài 17 (an toàn)

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

Regex Python.

Thắt chặt nút thắt, điều này cấm một số điều hữu ích hơn, vì sự trợ giúp của bạn ở đây là các byte bị cấm:

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

chỉ dưới một phần ba trong số họ!

Đối với đầu vào của 4đầu ra của tôi:

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

... bởi vì tôi đã định dạng một danh sách các danh sách dưới dạng lưới G.

Một giải pháp:

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

Hãy thử trực tuyến! / regex101

Thủ thuật chính ở đây là lập chỉ mục vào một danh sách được sắp xếp theo từ vựng về các hoán vị của các số tự nhiên lên đến n 2 (sử dụng œ?để tránh xây dựng danh sách độ dài n 2 ! ) Và chia kết quả thành các đoạn có độ dài n . Chỉ số đã nói ở trên được tìm thấy bằng cách hình thành đại diện của nó trong hệ thống số giai thừa là công thức vì con rắn "không có dấu vết" được tạo ra bằng cách hoán vị các yếu tố theo cách quy định (điều này có thể dễ dàng chuyển đổi thành số với Æ¡).

Giải pháp tôi trình bày sử dụng Ŀđể tham chiếu các liên kết trước đó dưới dạng đơn nguyên (thay thế ÑÇ), nhưng nhiều $liên tiếp có thể được sử dụng thay thế để "nội tuyến" các chức năng trợ giúp này. Nó cũng sử dụng rkể từ Rbị cấm.

’: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

Pip , regex chiều dài 3 (an toàn)

Giải pháp là một chương trình đầy đủ lấy n làm đối số dòng lệnh. Nó không sử dụng bất kỳ cờ dòng lệnh nào.

Regex (bất kỳ hương vị)

\w+

Sản lượng mẫu

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

Giải pháp của tôi

YENsXaPBsPOyY_MUyFi_MUENsXaIiBA1PsPUPODQENsXiXaPBsX_PBsMRVyEI1PsPUPODQENsXiXaPBsX_PBsMy

Hãy thử trực tuyến!

Chiến lược

Dưới đây là các mã chúng tôi sẽ thích để ghi:

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

Đó là:

  • Lưu trữ các số từ 1 đến atrongy
  • Lặp lại các giá trị itừ 0 đếna-1
  • Nếu ilà số lẻ, ngược lại y, thêmi*a vào từng phần tử, nối một khoảng trắng cho mỗi phần tử và in
  • Mặt khác, làm điều tương tự, nhưng không đảo ngược trước

Khó khăn

Rất nhiều lệnh và biến trong Pip sử dụng các chữ cái, nhưng một số lệnh quan trọng thì không:

  • Phạm vi và phạm vi bao gồm ( ,\,)
  • Hầu hết các hoạt động toán học ( +, -, *, %, ++)
  • Bài tập ( :)
  • Chúng ta không thể có một vòng lặp hoặc thân hàm với nhiều hơn một câu lệnh (cần thiết {})
  • Chúng tôi không thể sử dụng dấu ngoặc đơn để thực thi quyền ưu tiên

Làm thế nào chúng ta vượt qua những hạn chế đó:

  • ENumates có thể được sử dụng thay thế ,; chúng ta chỉ cần một chuỗi với số lượng ký tự mà chúng ta muốn và chúng ta cần trích xuất phần tử đầu tiên của mỗi danh sách con trong một cấu trúc như thế nào [[0 "H"] [1 "i"]].
  • Chúng ta không cần phải tăng bất cứ điều gì nếu chúng ta có thể giải quyết vấn đề bằng Fhoặc các vòng lặp.
  • Chúng ta có thể gán cho ybiến với Ytoán tử mắt cá chân.
  • Chúng ta có thể làm toán với các chuỗi: Xlà phép nhân chuỗi và PUsh (hoặc PB"đẩy lùi") sẽ nối một chuỗi thành một chuỗi khác tại chỗ. Để lấy độ dài của một chuỗi, chúng ta có thể ENđánh dấu chuỗi đó và trích xuất đúng số từ danh sách kết quả.
  • Chúng ta có thể sử dụng các hàm miễn là chúng có thể được viết dưới dạng các hàm lambda biểu thức đơn bằng cách sử dụng _.

Cụ thể

Các khối xây dựng của chương trình của chúng tôi:

Phạm vi

_MUENsXa

Đó là map-unpack(_, enumerate(repeat(space, a)))trong mã giả. Map-unpack giống như của Python itertools.starmap: đưa ra một danh sách các danh sách, nó gọi một hàm trên các mục của mỗi danh sách phụ. _trả về đối số đầu tiên của nó, vì vậy _MUchỉ cần lấy mục đầu tiên của mỗi danh sách con. Ví dụ: nếu a = 3:

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

... giống như ,a.

Phạm vi bao gồm

Tôi không chắc chắn có một cách để làm inclusive-range(1, a)trong một biểu thức duy nhất, nhưng may mắn là chúng ta chỉ cần nó một lần, vì vậy chúng ta có thể xây dựng nó trong ybiến theo ba bước.

YENsXaPBs

Trong mã giả , yank(enumerate(repeat(space, a).push-back(space))):

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

Tiếp theo POybật mục đầu tiên từ yvà loại bỏ nó, để lại [[1 " "] [2 " "] [3 " "]].

Cuối cùng,

Y_MUy

Đó là yank(map-unpack(_, y)): trích xuất phần tử đầu tiên của mỗi danh sách con và lấy lại danh sách kết quả y. ytại là [1 2 3].

Chiều dài

PODQENaPBs

Trong mã giả , pop(dequeue(enumerate(a.push-back(space)))). Khó khăn ở đây là liệt kê chỉ cung cấp cho chúng tôi số lượng lên đến len(a)-1, nhưng chúng tôi muốn len(a). Vì vậy, trước tiên chúng ta đẩy một khoảng trắng đến a, kéo dài nó bằng một ký tự và sau đó lấy len-1chuỗi mới.

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

môn Toán

Bây giờ chúng ta có một cách để lấy độ dài của chuỗi, chúng ta có thể sử dụng chuỗi để thực hiện phép nhân và cộng số:

PODQENsXaXbPBs
PODQENsXaPBsXbPBs

Việc đầu tiên làm sXaXbđể tạo ra một chuỗi các a*bkhoảng trắng và sau đó lấy chiều dài của nó; thứ hai làm sXaPBsXbđể đẩy một chuỗi bkhoảng trắng đến một chuỗi akhoảng trắng và sau đó lấy chiều dài của nó.

Phần tốt đẹp là tất cả các nhà khai thác, chúng tôi đang sử dụng ở đây ( PU, PO, PB, DQ, EN, X) có thể được sử dụng với _các biểu thức hình thức lambda. Vì vậy, chúng ta có thể ánh xạ các phép biến đổi toán học đến phạm vi bao gồm chúng ta đã xây dựng trước đó.

Chúng ta cũng cần kiểm tra i%2bên trong vòng lặp, nhưng điều này có thể dễ dàng thực hiện với bitwise AND : iBA1.

Đặt chung lại vơi nhau

Mã đầy đủ, với một số khoảng trắng được thêm vào:

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

Chúng tôi có được phép sử dụng cờ như -Skhông?
Brian McCutchon

@BrianMcCutchon Câu hỏi hay: câu trả lời là không . (Vì chúng không phải là một phần của mã tuân theo biểu thức chính quy, nên có vẻ như quá sơ hở để sử dụng chúng.) Đã chỉnh sửa để làm rõ.
DLosc

Cho đến nay tôi có mà a*b_V_VRVENCGaRLbPU1, ,a_MUENZGa, aJ" "aJ_VRVk, và a@ilà một cái gì đó giống như _V_VRVaZCGi, mặc dù tôi không thể khá làm việc ra các ưu tiên mà không cần dấu ngoặc đơn được nêu ra. Ngoài ra, một ý tưởng mơ hồ rằng tôi có thể nhận được các hoán vị của một phạm vi (được tạo như trên, sử dụng tương đương ,(a*a)) và sử dụng nó để chọn hoán vị chính xác cho mỗi hàng.
Brian McCutchon

@BrianMcCutchon Tôi không thể nhận xét về bất kỳ chi tiết cụ thể nào, tất nhiên, nhưng tôi thực sự thích cập nhật tiến độ. ^ _ ^
DLosc

Tôi nghĩ rằng nó an toàn bây giờ. Làm thế nào bạn làm điều đó?
Brian McCutchon

3

CJam, PCRE, dài 8, bị nứt

^[a-~]*$

Ví dụ đầu ra cho 4:

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

Nứt. Ý kiến ​​hay. :) Dường như có khá nhiều cách tiếp cận hiệu quả, tôi tự hỏi bạn đã nghĩ gì trong đầu.
Martin Ender

Câu trả lời của tôi thực sự thỏa mãn một regex chặt chẽ hơn - Tôi sẽ trình bày khi câu hỏi đó bị bẻ khóa!
Lynn

3

CJam, PCRE, dài 9, bị nứt

^[a-z~]*$

Ví dụ đầu ra cho 4:

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

Bây giờ {|}cũng bị cấm.



Làm tốt lắm! Câu trả lời của tôi về cơ bản là giống nhau, ngoại trừ nó chỉ sử dụng một bó memqđể tính gần đúng số, vì vậy nó rất dài (~ 20k byte).
Lynn

3

Toán học, regex dài 11, không cạnh tranh , bị nứt

Hương vị PCRE:

^[^]@]{49}$

Giải pháp đúng sẽ là một hàm lấy một số nguyên và trả về đầu ra dưới dạng một danh sách lồng nhau như:

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


@kennytm Ồ, đó là một giải pháp gọn gàng. Hoàn toàn khác với những gì tôi đã có. Tôi sẽ xem nếu tôi đăng bài của tôi sau hoặc nếu tôi thêm một regex hạn chế hơn.
Martin Ender

3

tinylisp , regex dài 3 ( nứt )

Bạn có thể kiểm tra mã tinylisp tại Dùng thử trực tuyến!

Regex (bất kỳ hương vị)

\S+

Thời gian để đi khó khăn.

Đầu ra

Giải pháp xác định hàm lấy một đối số nguyên duy nhất và trả về một danh sách như thế này (cho n = 4):

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

Mã ban đầu của tôi sử dụng cùng một ý tưởng cơ bản Brian McCutchon đã đưa ra, xây dựng danh sách và đánh giá chúng. Đây là một dòng:

(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))))))))

Tôi đã sử dụng phương thức xây dựng đầy đủ một lần, để xác định một macro d'tạo ra các định nghĩa như thế d, nhưng lấy các đối số của nó được bọc trong một danh sách: vì vậy thay vì (d x 42), bạn có thể làm (d'(x 42)). Sau đó, đó chỉ là vấn đề viết lại bất kỳ danh sách nào trong các định nghĩa có thể cần khoảng trắng: (q(a b))-> (c a(q(b)))-> (c(h(q(a)))(q(b))).


1
Nứt . Nó không dễ dàng.
Brian McCutchon

2

Python3, dài 162 ( !)

Chế độ: ^([^"' #]){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\)$

Được rồi, tôi biết, đó là khá dài. May mắn thay, nó sẽ không bị bẻ khóa trong vòng một tuần ...: 'D.

Tôi nghĩ rằng tôi đã không phạm sai lầm ở bất cứ đâu, điều đó sẽ cho phép câu trả lời kẽ hở.

Định dạng đầu ra

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

Mã gốc: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)


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.