Polisi: Buat regex - Buat ular

40

Ini adalah utas polisi. The benang perampok di sini .


Tulis kode yang mengambil input ndan buatlah "matriks ular" n-by-n.

Matriks ular adalah matriks yang mengikuti pola ini:

3-oleh-3:

1  2  3
6  5  4
7  8  9

dan 4-oleh-4:

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

Format output yang tepat adalah opsional. Anda dapat misalnya output [[1 2 3],[6 5 4],[7 8 9]], atau yang serupa.

Anda harus memberikan nama bahasa, dan regex yang sepenuhnya cocok dengan kode Anda. Anda dapat memilih seberapa rinci regex Anda seharusnya. Secara ekstrem, Anda dapat menulis regex yang cocok dengan setiap string yang mungkin, dalam hal ini akan sangat mudah untuk memecahkan kode Anda. Anda juga harus memberikan output untuk n=4, sehingga perampok tahu format yang Anda pilih.

Anda dapat menggunakan salah satu dari rasa regex yang tersedia di regex101.com , atau rasa Ruby.

  • PCRE (PHP)
  • Javascript
  • Python
  • Golang
  • Rubi

Anda harus menentukan yang mana yang Anda gunakan.

Catatan:

  • Anda harus mendukung yang cukup besar n. Anda mungkin menganggap itu tidak akan meluap datatype atau memori. Jika tipe data default adalah bilangan bulat bertanda 8-bit, maka Anda dapat mengasumsikan n<=11, jika bilangan bulat 8-bit tidak bertanda, maka Anda dapat berasumsi n<=15.
  • Perampok harus mencocokkan format output kiriman, kecuali spasi awal / akhir dan baris baru, karena itu mungkin telah dilucuti oleh format SE.

Kriteria kemenangan:

Pemenangnya adalah pengajuan tanpa retak dengan regex terpendek, diukur dalam jumlah karakter.

Jika pos Anda tetap tidak retak selama 7 hari, maka Anda dapat memposting solusi yang dimaksud dan menandai kiriman Anda sebagai aman.

Stewie Griffin
sumber
5
Benih, panjang 1 .,.
Kritixi Lithos
1
Bisakah saya menggunakan salah satu bahasa yang didokumentasikan di sini? codegolf.stackexchange.com/questions/61804/…
2
@KritixiLithos Kecuali Anda harus merilis program asli Anda menjadi aman ;-)
ETHproduk
3
@DeepakAgarwal - Tulis kode Anda untuk menghasilkan ular, lalu berikan regex yang cocok dengannya. Solusi perampok harus dalam bahasa yang sama dan cocok dengan regex juga. Jadi salah satu strategi adalah menyediakan regex terbatas, untuk mempersulit perampok, tetapi tidak terlalu ketat sehingga Anda memberikan solusinya!
2
Apakah konsensus meta ini memungkinkan I / O unary untuk sed, yang tidak memiliki tipe data, valid untuk tantangan ini?
seshoumara

Jawaban:

9

05AB1E , Retak oleh mbomb007

Semoga menyenangkan retak dan tidak terlalu jelas.

Regex (PCRE):

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

Output n = 4:

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

Solusi asli

UXFXLNX*+NFR}ˆ
Emigna
sumber
oooooomg - dude itu dope (pujian, tentu saja)
Tilak Maddy
@ mbomb007: Surat dengan aksen tidak cocok dengan \wno. Anda dapat mencoba sendiri di regex101
Emigna
1
Anda dapat membuat regex Anda lebih pendek dengan mengubah .{0,2}ke.?.?
Aaron
1
Anda dapat menempatkan -posisi terakhir dari kelas char bracketed ( [+*\/%-]) sehingga Anda tidak perlu menghindarinya.
Dada
@Dada: Itu memang berhasil di PCRE. Saya tidak terlalu khawatir memperpendeknya sekarang karena saya cukup yakin itu akan retak. Jika harus berlaku, saya akan memasukkan saran Anda dan Aarons. Terima kasih :)
Emigna
8

Python 2 , panjang 62, retak

Regex (PCRE)

^while ((?=\S)[1di\W]|an|eval|nput|nt|or|pr){55}s(?1){45}n...$

Output sampel

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

Dennis
sumber
Cracked
xsot
7

Jelly , panjang 6, retak

Regex (PCRE)

^.{9}$

Output sampel

 1  2  3  4
 8  7  6  5
 9 10 11 12
16 15 14 13
Dennis
sumber
3
Ini memaksa bermain golf dengan sangat baik di Jelly: D
Yytsi
1
Ada sembilan karakter? Anda merasa murah hati! : D
AdmBorkBork
1
'Ada sembilan' Ada berapa fungsi di Jelly?
Matius Roh
Saya 99% yakin bahwa char terakhir harus Gmemformat output dengan benar. Saya hampir menyelesaikan sisanya, tapi saya tidak tahu bagaimana cara membalikkan setiap item lain dalam sebuah array dengan Jelly ...
ETHproduksi
@ ETHproductions: Saya cukup yakin saya hampir memecahkannya dan saya punya metode membalikkan setiap item lainnya. Masalah saya adalah saya tidak tahu bagaimana cara mengikat semuanya (saya belum mencoba tutorialnya). Saya berharap untuk melihatnya diselesaikan sekarang. Mungkin lebih sulit daripada yang saya kira.
Emigna
6

R, panjang 14 Cracked oleh plannapus

Saya harap saya mendapatkan regex ini dengan benar. Apa yang saya katakan adalah 77 karakter tidak termasuk <space>, #, ;dan [. Saya mengujinya di sini

Regex

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

Output sampel n = 4

1 2 3 4 
8 7 6 5 
9 10 11 12 
16 15 14 13  
MickyT
sumber
Saya pikir ini akan mudah tetapi saya mengalami kesulitan besar untuk mengeluarkan angka-angka seperti itu (versus berbagai jenis). Kerja bagus.
BLT
1
@ BLT Terima kasih, ini masalah yang menarik untuk dicoba dan dipersulit.
MickyT
Retak , meskipun mungkin tidak sama dengan kode Anda.
plannapus
6

05AB1E , Retak dengan Value Ink

Mari kita menendang itu takik :)
Semoga puzzle yang bagus.

Regex (PCRE)

^\w*..\w*$

Output n = 4

[[1, 2, 3, 4], [8, 7, 6, 5], [9, 10, 11, 12], [16, 15, 14, 13]]
Emigna
sumber
Mengerti
Value Ink
6

> <> , panjang 49, Retak oleh Harun

Regex (Javascript)

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

Output sampel (n = 4)

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

Memformat agak aneh, tetapi memeriksa panjang angka akan membuatnya lebih lama. Mungkin sedikit berlebihan di regex, tidak yakin!

Sunting: Juga saya lupa menyebutkan, saya menggunakan tumpukan awal (-v flag) untuk input, bukan input ikan biasa. Maaf!

Kode Asli:

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

Harun jauh lebih sederhana! Kompleksitas kode asli saya didasarkan pada ide menggunakan n[r]setiap angka ke-n untuk membalik segmen itu (baris), lalu mencetak semua angka sekaligus di akhir

torcado
sumber
1
..lebih pendek dari .{2};)
Aaron
Tidak masalah, hancurkan ! Saya jelas tidak terlalu banyak mengikuti kode Anda, tapi itu tantangan yang menarik. Silakan bagikan kode asli Anda! Juga jika Anda suka, Anda dapat membalas budi ;)
Aaron
@ Harun pekerjaan bagus! juga yeeah saya tidak yakin bagaimana saya tidak melihat itu di regex. oh well :) Saya akan melihat apakah saya dapat memecahkan milik Anda
torcado
5

Ohm , sudah retak

Juga tantangan pertama Polisi dan Perampok saya, jadi beri tahu saya jika ada masalah dengan pola ini (terutama karena ini adalah bahasa yang tidak dikenal).

Regex (PCRE)

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

Output (n = 4)

[[1, 2, 3, 4], [8, 7, 6, 5], [9, 10, 11, 12], [16, 15, 14, 13]]
Nick Clifford
sumber
1
Jika ada, itu mungkin terlalu mudah. Jika ada .*di regex Anda, bisa jadi apa saja. Jadi jika bahasa tersebut memiliki komentar, mereka dapat menulis program apa saja diikuti dengan komentar.
mbomb007
@ mbomb007 Poin bagus.
Nick Clifford
1
Cracked :)
Emigna
@ Emigna Bagus!
Nick Clifford
5

PHP, 221 Bytes ( Retak )

Saya harap ini cukup sulit.

Regex (PCRE): 16 Bytes

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

Tanpa ruang, Tidak ada komentar, tidak ada penggunaan base64_decode. Selamat bersenang-senang.

Keluaran

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

Kode Asli

$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));
Jörg Hülsermann
sumber
Harap perhatikan bahwa jawaban dapat digunakan base64_decodekarena regex Anda tidak melarangnya.
CalculatorFeline
4
@ CalculatorFeline: blok regex 6, yang mungkin memblokir base64_decode.
nneonneo
Ups, ketinggalan itu. Tapi, jadi tidak masalah.
CalculatorFeline
5

C # net46 (Retak)

( http://ideone.com/ works)

Panjang rasa PCRE Regex 58 diuji di regex101

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

Hanya metodenya yang diregexed. Metode mengembalikan array 2d int [,] (int [4,4]) untuk input n = 4. Jika dicetak terlihat seperti ini:

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

Ini adalah entri pertama saya ke hal seperti ini, beri tahu saya jika saya melakukan kesalahan. Tidak mencoba untuk menang dengan panjang regex pasti, saya hanya tertarik untuk melihat seberapa baik yang saya lakukan untuk mencegah retak :)

Kode asli:

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
sumber
Bagus, saya seharusnya mencoba membuat panjangnya lebih menantang setidaknya ...
EklipZ
5

QBasic, regex length 10 ( retak )

Regex

Seharusnya bekerja dengan rasa regex apa pun, tapi kami akan menyebutnya rasa Python.

([A-Z]+.)+

CATATAN: Solusi saya menggunakan QBasic yang belum diformat; setelah memformat, kode tidak cocok dengan regex karena spasi yang ditambahkan. (Tapi saya dapat memberi tahu Anda bahwa hanya perubahan yang membuat perbedaan. ([A-Z]+ ?. ?)+Masih berfungsi pada versi yang diformat.)

Untuk tujuan pengujian, saya menggunakan QB64 dengan pemformatan kode dimatikan (di bawah Pilihan> Tata letak kode). Jika Anda tidak ingin mengunduh sesuatu, Anda juga dapat menjalankan QBasic online di archive.org (tetapi di sana Anda tidak dapat mematikan pemformatan).

Output sampel

 1  2  3  4 
 8  7  6  5 
 9  10  11  12 
 16  15  14  13 
DLosc
sumber
Jadi semua simbol di sumber harus didahului dengan huruf.
CalculatorFeline
@CalculatorFeline Satu atau lebih surat.
mbomb007
Nah, persyaratan saya setara karena \w+\Wdapat dibagi menjadi \w*dan \w\W. ( \w*Adalah baik null(sepele) atau \w+(mudah menyelinap dengan simbol))
CalculatorFeline
@CalculatorFeline Tidak ada yang mengatakan bahwa .tidak bisa menjadi karakter kata. Itu bisa berupa huruf kecil, atau digit. Bahkan, itu bisa menjadi huruf kapital, dalam hal karakter terakhir dari program adalah satu.
mbomb007
5

Python 3, 55 byte (Retak)

Rasa PCRE / Python / Golang.

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

(Diingatkan bahwa kecocokan penuh diperlukan . Asumsikan ^dan $saat pengujian.)

Output sampel:

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

Solusi asli:

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

Seharusnya dipangkas 4 byte: p

kennytm
sumber
Tampaknya bagi saya bahwa Anda melewatkan )bagian kedua dari regex
Jörg Hülsermann
@ JörgHülsermann tidak ada yang hilang, regex sudah benar.
kennytm
1
@ JörgHülsermann Ekstra (ada di dalam kelas karakter yang dimulai setelah printdan berakhir sebelumnya {48}. Butuh waktu beberapa saat untuk melihatnya juga. ;) (Dalam hal ini, pasangan kurung sebelumnya juga berada di dalam kelas karakter.)
DLosc
@Dosc Sekarang jelas. Terima Kasih
Jörg Hülsermann
Cracked
xsot
5

dc , panjang Regex 12   Cracked oleh seshoumara!

^[^# !]{59}$

Ekspresi reguler ini cukup sederhana sehingga saya tidak berpikir tentang rasa dari hal-hal regex - itu harus bekerja secara menyeluruh. (Catat spasi setelah # di regex.)

Saya sudah menguji keempat rasa di regex101.com (PCRE / PHP, Javascript, Python, dan Golang), serta versi Ruby di rubular.com. Program dc cocok dengan regex di semua lima versi regex.


Program dc mengambil inputnya pada stdin dan menempatkan outputnya pada stdout.

Output sampel untuk input 4 (ada spasi tambahan di akhir setiap baris):

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

Kode asli (ditambahkan setelah di-crack)

Ini telah dipecahkan oleh @seshoumara . Ini kode yang saya maksudkan:

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

Penjelasan:

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

Jumlah di bagian atas tumpukan sekarang adalah nomor berikutnya yang ingin kita cetak:

  • Sangat mudah untuk melihat bahwa itu benar jika nomor barisnya genap, karena jumlahnya hanya i.

  • Untuk baris bernomor ganjil, perhatikan bahwa i = d * (i / d) + (i% d) = d * (nomor baris) + nomor kolom. Maka jumlah i + d-2 * (nomor kolom) -1 adalah d * (nomor baris) + nomor kolom + d - 2 * (nomor kolom) - 1 = d * (nomor baris + 1) - nomor kolom - 1, yang merupakan angka yang ingin kita masukkan pada baris dan kolom yang ditunjukkan untuk memastikan bahwa kita menghitung mundur dalam baris bernomor ganjil.

Kembali ke penjelasan sekarang:

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.
Mitchell Spector
sumber
Apakah karakter #dan `dihilangkan sehingga solusi yang lebih pendek tidak dapat menggunakan komentar untuk mencapai 59 byte? Jika demikian, tidak perlu karena di dc ada begitu banyak cara untuk menambahkan perintah yang tidak mengubah apa pun, misalnya. mengulangi qperintah di akhir skrip.
seshoumara
@seshoumara Ini dimaksudkan sebagai anggukan ke arah itu sambil tetap menjaga regex pendek. Tapi kamu benar, tentu saja. (Ini adalah entri polisi dan perampok pertama saya, jadi saya tidak yakin betapa mudahnya itu.)
Mitchell Spector
Retak! . Mendapatkan sedikit lebih dari 59 byte itu mudah, tetapi mencocokkan batas Anda atau di bawahnya lebih sulit dari yang saya harapkan. Adapun regex, ruang itu ok untuk menghilangkan, saya buruk, karena orang perlu mencetaknya, jadi saya harus menggunakan sesuatu yang lain.
seshoumara
@seshoumara Kerja bagus!
Mitchell Spector
@seshoumara By the way, spasi juga berguna dalam dc untuk memisahkan dua konstanta numerik berturut-turut, jadi melarang ruang memerlukan solusi jika Anda memerlukan fungsionalitas itu. Namun, mencetak ruang bukan masalah besar, karena 32Plebih pendek daripada [ ]nitu.
Mitchell Spector
5

Bash, panjang regex 38, retak ( @kennytm )

^sort -n <[1adegnopqrstx$\-*()|'; ]+$

Memasukkan:

n=4; <command>

Keluaran:

1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
Marcos M
sumber
Cracked codegolf.stackexchange.com/a/112656/32353 . Yang ini bagus: D
kennytm
Senang Anda menikmatinya @kennytm Anda telah menemukan solusi tepat sebagai perintah asli saya!
Marcos M
5

PHP

Saya harap ini akan menyenangkan! : D

Output (n = 4)

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

Level 1: PCRE (panjang = 17) ( Retak oleh Jörg Hülsermann )

^<[^'"\d{vV;<$]+$
  • Tidak ada kutipan tunggal atau ganda jadi ... tidak ada string!
  • Tanpa digit!
  • Tidak {jadi ... tidak ada fungsi anonim!
  • Tidak vbegitu ... tidak eval()!
  • Tidak ;begitu ... itu pasti satu pernyataan!
  • Tidak <jadi ... tidak Heredocatau beberapa blok PHP!
  • Yang besar! No $ so ... good luck mendefinisikan variabel! >: D

@ JörgHülsermann punya pendekatan yang menarik, tapi bukan itu yang ada dalam pikiran saya :). Oleh karena itu, saya memperkenalkan tingkat kesulitan baru (saya berjanji saya memiliki kode yang sesuai dengan ini dan saya tidak hanya mengacaukan Anda):

Level 2: PCRE (panjang = 23) ( Cracked oleh Jörg Hülsermann )

^<[^'"\d{v;<$_~|&A-Z]+$
  • Semua batasan Level 1
  • Baru di level ini: tidak ada satupun _~|&A-Z! :)

Selamat bersenang-senang!


SOLUSI ASLI

Jadi, melarang itu $berarti variabel tidak dapat diakses dengan cara biasa, tetapi itu tidak berarti mereka tidak dapat digunakan sama sekali! Anda masih dapat menggunakan extract()/compact()untuk mengimpor / mengekspor variabel ke dalam cakupan saat ini. :)

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

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

Namun, ada gotcha: compact('x')['x']++tidak akan berfungsi karena variabel dalam PHP diteruskan oleh nilai ... dengan satu pengecualian! Benda.

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

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

Sisanya mudah.

  • Nomor 0dan 1mudah dihasilkan dengan mengkonversi falsedan trueuntuk intdengan mengawali mereka dengan +tanda
  • Gunakan anddan orsejak &dan |dilarang
  • Untuk mengatasi tanda kutip terlarang, cukup gunakan konstanta tidak terdefinisi, yang diperlakukan sebagai string
  • Untuk menekan pemberitahuan yang dihasilkan dengan menggunakan konstanta tidak terdefinisi, cukup gunakan @
  • Huruf terlarang vdapat dihasilkan dengan menggunakan chr(ord('u') + 1), yang berarti @chr(ord(u) + true)menggunakan solusi di atas
  • Garis bawah mirip dengan yang di atas: chr(ord('a') - 2)yang diterjemahkan menjadichr(ord(a) - true - true)
  • Fungsi panggilan yang berisi karakter terlarang dapat dilakukan dengan memanfaatkan jenis PHP callable, yang bisa berupa string yang berisi nama fungsi. Jadi, Anda dapat menggabungkan konstanta yang tidak terdefinisi dan string karakter tunggal yang dihasilkan oleh ord()untuk membangun nama fungsi dan memanggilnya seperti ini: array_reverse()menjadi (a.rray.chr(ord(a)-true-true).re.chr(ord(u)+true).erse)()( arrayadalah konstruksi bahasa, itu sebabnya ia dibagi menjadi konstanta yang tidak terdefinisi adan rray)
  • Manfaatkan fakta bahwa, ketika menyangkut konstruksi kondisional dan loop, tanda kurung keriting adalah opsional jika konstruk berlaku hanya untuk pernyataan berikut ini. Ini berarti Anda dapat melakukan hal-hal seperti: if ($n = $argv[1] and $i = 0) while ($n > $i++ and do_some and other_stuff or exit)

Logika dalam kode yang dapat dibaca manusia adalah:

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

Dan versi tidak ramah yang cocok dengan 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)))))?>

Ionut Botizan
sumber
@ JörgHülsermann Karena regex saya cukup lama dan saya tidak berharap untuk memiliki kesempatan untuk menang, saya hanya berasumsi bahwa orang tidak akan terlalu terpaku pada teknis seperti sensitivitas case dari mesin regex. Bagaimanapun, saya mengedit jawaban saya sehingga regex sekarang termasuk modal V. Selamat bersenang-senang! :)
Ionut Botizan
1
@ JörgHülsermann Ini sebenarnya kode yang sama tetapi saya awalnya menggunakan ekspresi reguler yang lebih longgar karena saya penasaran dengan solusi apa yang bisa dibuat orang. Saya akan memberikannya satu hari lagi (mungkin seseorang ingin mencobanya pada akhir minggu) dan saya akan memposting kode saya dan penjelasannya besok malam. Apa yang dapat saya katakan kepada Anda saat ini adalah bahwa Anda berada di jalan yang benar tentang penggunaan konstanta yang tidak terdefinisi sebagai string. Juga, Anda salah tentang sesuatu dalam solusi Anda. Anda bisa menelepon (array_re.chr(ord(u)+true).erse)()! :) (... atau setidaknya Anda bisa ketika _diizinkan)
Ionut Botizan
3
@IonutBotizan Anda bisa menyimpan solusi rahasia Level 1 untuk saat ini karena sudah retak. Masih lebih baik bagi Anda untuk membuat Level 2 sebagai posting baru, lebih mudah bagi orang lain untuk memeriksa apakah itu retak atau tidak.
kennytm
1
level 2 crack regex101.com/r/XtVl9G/1 terima kasih atas petunjuknya. Sekarang saya sedang menunggu level 3 :-)
Jörg Hülsermann
5

Ruby [retak]

Tantangan Polisi dan Perampok Pertama. Semoga saya tidak membuat ini terlalu mudah.

EDIT: diganti \g<1>dengan (?1)karena mereka jelas setara di PCRE.

Regex (PCRE)

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

Output (n = 4)

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

(Mengembalikan array array. Ini lambda, BTW, tapi mungkin itu memberi terlalu banyak?)

Nilai Tinta
sumber
4

JavaScript (Retak)

Pertama kali melakukan tantangan Polisi dan Perampok, semoga melakukannya dengan benar.

Regex (JavaScript)

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

Keluaran

Array sama dengan:

[[1,2,3,4],[8,7,6,5],[9,10,11,12],[16,15,14,13]]
Tom
sumber
Anda mungkin menginginkan a $di akhir regex jika kode itu sendiri berakhir di akhir regex. Kalau tidak, saya bisa melakukan eg x=>x.toString().toString().toString().toString()dan kemudian apa pun yang saya inginkan setelah itu.
ETHproduk
@ ETHproduk Bagus, terima kasih atas tipnya!
Tom
Cracked
ovs
1
@ovs Wow, itu cepat. Kerja bagus!
Tom
4
@ Tom .*pada awalnya akan membuatnya sangat mudah. Itu bisa berupa program apa saja yang diikuti oleh komentar. Pada dasarnya, jangan termasuk .*dalam regex Anda.
mbomb007
4

Swift, regex 25 (Cracked)

Benar, mari kita lihat apakah saya sudah memahami ini. Ini adalah pos polisi dan perampok pertamaku, jadi aku tahu kalau aku sudah kacau!

Regex

Saya menggunakan rasa javascript di regex101.com

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

Output Sampel

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

Kode Asli

(0..<n).forEach{i in print((0..<n).map{i%2>0 ?(i+1)*n-$0 :i*n+$0+1},separator:",")}
James Webster
sumber
Tampaknya pengajuan ini tidak dianggap nsebagai input, tetapi memerlukan variabel kode keras . Jika itu benar maka saya khawatir ini tidak valid sesuai dengan konsensus meta.
Stewie Griffin
Catatan: Anda dapat menyimpan kiriman, karena sudah dipecahkan :)
Stewie Griffin
@Stewie. Terima kasih atas informasinya, ada alasan saya menghindari pertanyaan seperti ini di masa lalu! Saya rasa saya mengerti konsep "hanya fungsi" sedikit lebih baik karena jawaban ini sudah retak. Saya berasumsi bahwa itu berarti tubuh fungsi, tetapi saya kumpulkan sekarang berarti variabel fungsi?
James Webster
4

C - regex yang terdiri dari 42 karakter panjang - retak

Javascript regex seperti yang digunakan pada regex101 .

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

Menebak ini akan sepele ...

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

Output dipisahkan oleh tab \nsetelah setiap baris.

Solusi saya, di sini bilangan bulat 0-2 diperoleh melalui t-t, t/t, dan t:

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');}
Komunitas
sumber
Anda dapat menghapus satu rdi regex Anda.
kennytm
@kennytm - terima kasih - melewatkan yang satu itu
4

Jelly , panjangnya 14 retak

retak oleh Dennis

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

Python regex.

Menambahkan mkembali lagi setelah saya biarkan tergelincir.

/(kurangi cepat);
dari P(produk) ke `(monad dari angka dua cepat);
m(pengindeksan modulo);
v(Eval dyad);
dari (dequeue) ke (tail); dan
(untuk setiap quick)

Untuk input 4output tambang:

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

... karena saya memformat daftar daftar dengan kisi G.

Jonathan Allan
sumber
Retak. Ini menyenangkan.
Dennis
4

Powershell, 23 Bytes

Retak Oleh Matt

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

Solusi Asli:

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

Membawa input sebagai argumen dan output ke stdout

Semoga regex ini OK, saya tidak berharap ini terlalu sulit untuk retak, karena saya belum mengaburkan banyak hal, dan regex memberikan beberapa titik awal yang baik untuk mengisi kekosongan, ada satu hal di segmen pertama yang sangat jarang dalam kode golf, yang mungkin menangkap seseorang, saya pikir pertandingan non-serakah diperlukan di sana untuk membuat ini sedikit lebih keras.

Toh, tantangan pertama polisi.

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
colsw
sumber
Cracked
Matt
Apa solusimu?
Matt
@Matt menambahkan, saya pikir akan lebih sulit mengingat berapa banyak hal non-kode-golf yang saya tambahkan, yaitu menggunakan [Array]::Reverse()alih-alih $array[9..0]dan $script:rvariabel yang sebagian besar tidak perlu.
colsw
4

Röda 0,12 , panjang 19 (Retak oleh @KritixiLithos)

PCRE:

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

Output sampel (n = 4):

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

Kode asli:

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

Cobalah online!

fergusq
sumber
1
Ini adalah permainan yang adil selama itu mendahului tantangan ini dan memiliki juru bahasa (gratis) yang tersedia. Pertama kali saya mencoba MATL adalah ketika mencoba meretas pos polisi . Jangan heran jika seseorang mengetahui Röda hanya untuk memecahkan jawaban ini :)
Stewie Griffin
Saya berharap dokumentasinya dalam bahasa Inggris, bukan bahasa Finlandia :)
Stewie Griffin
@StewieGriffin Ada beberapa dokumentasi yang tersedia. Haruskah saya menambahkan tautan ke jawaban saya atau cukup mudah ditemukan dari halaman Github?
fergusq
Retak! :)
Kritixi Lithos
4

PHP 7 (Aman)

Kode Asli

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

Coba Kedua

Regex (PCRE): 29 Bytes

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

Tanpa ruang, Tidak ada komentar, tidak ada penggunaan base64_decode.

Banyak fungsi tidak diizinkan! menggarisbawahi

Output 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

Output n = 4

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

Output n = 3

1 2 3
6 5 4
7 8 9
Jörg Hülsermann
sumber
Saya yakin jawaban Anda sekarang aman :)
Aaron
@ Harun Aku ingin tahu aku yang tidak retak. Kode Asli ditambahkan
Jörg Hülsermann
4

MATL , panjang 12 (aman)

Regex

Gunakan rasa Python:

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

Contoh output

Untuk n=4:

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

Larutan

txU:GeG:oEq*S5M*TTx!

Untuk melihat bagaimana ini bekerja, pertimbangkan 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]
Luis Mendo
sumber
4

Jelly , panjangnya 17 (aman)

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

Python regex.

Mengencangkan simpul, ini melarang beberapa hal yang lebih berguna, untuk bantuan Anda di sini adalah byte yang dilarang:

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

hanya di bawah sepertiga dari mereka!

Untuk input 4output tambang:

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

... karena saya memformat daftar daftar dengan kisi G.

Sebuah solusi:

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

Cobalah online! / regex101

Trik utama di sini adalah untuk mengindeks ke dalam daftar diurutkan secara leksikografis permutasi bilangan alami hingga n 2 (gunakan œ?untuk menghindari membangun daftar panjang n 2 ! ), Dan untuk membagi hasilnya menjadi potongan panjang n . Indeks tersebut ditemukan dengan membentuk perwakilannya dalam sistem bilangan faktorial yang merupakan formula sejak ular "tidak berliku-liku" dibuat dengan meng-permutasi elemen-elemen dengan cara yang ditentukan (ini dapat dengan mudah diubah menjadi angka dengan Æ¡).

Solusi yang saya sajikan menggunakan Ŀreferensi tautan sebelumnya sebagai monads (menggantikan Ñdan Ç), tetapi beberapa $baris dapat digunakan sebagai gantinya untuk "menyejajarkan" fungsi-fungsi pembantu ini. Itu juga menggunakan rsejak dan Rdilarang.

’: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
Jonathan Allan
sumber
4

Pip , panjang regex 3 (aman)

Solusinya adalah program lengkap yang menggunakan n sebagai argumen baris perintah. Itu tidak menggunakan flag baris perintah.

Regex (rasa apa saja)

\w+

Output sampel

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

Solusi saya

YENsXaPBsPOyY_MUyFi_MUENsXaIiBA1PsPUPODQENsXiXaPBsX_PBsMRVyEI1PsPUPODQENsXiXaPBsX_PBsMy

Cobalah online!

Strategi

Berikut kode kita akan ingin untuk menulis:

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

Itu adalah:

  • Simpan angka 1 hingga adalamy
  • Simpulkan nilai imulai dari 0 hinggaa-1
  • Jika iganjil, balikkan y, tambahkan i*ake setiap elemen, gabungkan spasi untuk setiap elemen, dan cetak
  • Kalau tidak, lakukan hal yang sama, tetapi tanpa membalikkan terlebih dahulu

Kesulitan

Banyak perintah dan variabel di Pip menggunakan huruf, tetapi beberapa yang penting tidak:

  • Rentang dan rentang inklusif ( ,dan \,)
  • Kebanyakan operasi matematika ( +, -, *, %, ++)
  • Penugasan ( :)
  • Kami tidak dapat memiliki loop atau fungsi tubuh dengan lebih dari satu pernyataan (yang perlu {})
  • Kami tidak dapat menggunakan tanda kurung untuk menegakkan prioritas

Bagaimana kita mengatasi batasan-batasan itu:

  • ENumerate dapat digunakan di tempat ,; kita hanya perlu string dengan jumlah karakter yang kita inginkan, dan kita perlu mengekstraksi elemen pertama dari setiap sublist dalam struktur seperti [[0 "H"] [1 "i"]].
  • Kita tidak perlu menambah apa pun jika kita dapat memecahkan masalah dengan Fatau loop.
  • Kita dapat menetapkan yvariabel dengan Yoperator ank.
  • Kita dapat melakukan matematika dengan string: Xadalah perkalian string, dan PUsh (atau PB"push-back") akan menggabungkan string ke string lain di tempat. Untuk mengambil panjang string, kita dapat ENmem - umerasinya dan mengekstraksi angka yang tepat dari daftar yang dihasilkan.
  • Kita dapat menggunakan fungsi selama mereka dapat ditulis sebagai fungsi lambda ekspresi tunggal menggunakan _.

Spesifik

Blok bangunan program kami:

Jarak

_MUENsXa

Itu map-unpack(_, enumerate(repeat(space, a)))dalam kodesemu. Map-unpack seperti Python itertools.starmap: diberi daftar daftar, itu memanggil fungsi pada item masing-masing sublist. _mengembalikan argumen pertamanya, jadi _MUdapatkan item pertama dari setiap sublist. Misalnya, jika a = 3:

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

... yang sama dengan ,a.

Kisaran inklusif

Saya tidak yakin ada cara untuk melakukannya inclusive-range(1, a)dalam satu ekspresi, tapi untungnya kita hanya membutuhkannya sekali, jadi kita bisa membuatnya dalam yvariabel dalam tiga langkah.

YENsXaPBs

Dalam pseudocode, yank(enumerate(repeat(space, a).push-back(space))):

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

Selanjutnya POymuncul item pertama dari ydan buang, pergi [[1 " "] [2 " "] [3 " "]].

Akhirnya,

Y_MUy

Yaitu yank(map-unpack(_, y)),: ekstrak elemen pertama dari setiap sublist dan tarik kembali daftar yang dihasilkan y. ysekarang [1 2 3].

Panjangnya

PODQENaPBs

Dalam pseudocode pop(dequeue(enumerate(a.push-back(space)))),. Kesulitan di sini adalah bahwa pencacahan hanya memberi kita jumlah hingga len(a)-1, tetapi kita inginkan len(a). Jadi pertama-tama kita mendorong spasi ke a, memanjangnya dengan satu karakter, dan kemudian mengambil len-1string baru.

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

Matematika

Sekarang kita memiliki cara untuk mengambil panjang string, kita dapat menggunakan string untuk melakukan perkalian dan penambahan angka:

PODQENsXaXbPBs
PODQENsXaPBsXbPBs

Yang pertama adalah sXaXbmembuat string a*bspasi dan kemudian memanjangnya; yang kedua tidak sXaPBsXbuntuk mendorong string bspasi ke string aspasi dan kemudian mengambil panjangnya.

Bagian yang menyenangkan adalah bahwa (semua operator kami gunakan di sini PU, PO, PB, DQ, EN, X) dapat digunakan dengan _ekspresi bentuk lambda. Jadi kita bisa memetakan transformasi matematis ke rentang inklusif yang kita buat sebelumnya.

Kami juga perlu memeriksa i%2di dalam loop, tetapi ini mudah dicapai dengan bitwise DAN: iBA1.

Satukan mereka

Kode lengkap, dengan beberapa spasi tambahan:

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
DLosc
sumber
Apakah kami diizinkan menggunakan bendera seperti -S?
Brian McCutchon
@BrianMcCutchon Pertanyaan bagus: jawabannya tidak . (Karena mereka bukan bagian dari kode subjek untuk regex, sepertinya terlalu banyak celah untuk menggunakannya.) Diedit untuk memperjelas.
DLosc
Sejauh ini saya memiliki itu a*badalah _V_VRVENCGaRLbPU1, ,aadalah _MUENZGa, aJ" "adalah aJ_VRVk, dan a@iadalah sesuatu seperti _V_VRVaZCGi, meskipun saya tidak bisa cukup berhasil didahulukan tanpa kurung belum. Juga, ide samar bahwa saya bisa mendapatkan permutasi dari suatu rentang (dibuat seperti di atas, menggunakan yang setara dengan ,(a*a)) dan menggunakannya untuk memilih permutasi yang benar untuk setiap baris.
Brian McCutchon
@BrianMcCutchon Saya tidak bisa mengomentari spesifik apa pun, tentu saja, tapi saya sangat menikmati pembaruan kemajuan. ^ _ ^
DLosc
Saya pikir itu aman sekarang. Bagaimana kamu melakukannya?
Brian McCutchon
3

CJam, PCRE, panjang 8, retak

^[a-~]*$

Contoh output untuk 4:

[[1 2 3 4] [8 7 6 5] [9 10 11 12] [16 15 14 13]]
Lynn
sumber
Retak. Ide bagus. :) Tampaknya ada banyak pendekatan yang berhasil, saya ingin tahu apa yang ada dalam pikiran Anda.
Martin Ender
Jawaban saya benar-benar memuaskan regex yang lebih ketat - Saya akan menunjukkannya ketika yang itu retak!
Lynn
3

CJam, PCRE, panjang 9, retak

^[a-z~]*$

Contoh output untuk 4:

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

Sekarang {|}juga dilarang.

Lynn
sumber
Retak.
Martin Ender
Kerja bagus! Jawaban saya pada dasarnya sama, kecuali hanya menggunakan sekelompok medan mquntuk memperkirakan angka, jadi itu seperti, sangat (~ 20k byte) panjang.
Lynn
3

Mathematica, regex panjang 11, tidak bersaing , retak

Rasa PCRE:

^[^]@]{49}$

Solusi yang benar adalah fungsi yang mengambil integer dan mengembalikan output sebagai daftar bersarang seperti:

{{1, 2, 3, 4}, {8, 7, 6, 5}, {9, 10, 11, 12}, {16, 15, 14, 13}}
Martin Ender
sumber
@kennytm Oh, itu solusi yang rapi. Cukup berbeda dari yang saya miliki. Saya akan melihat apakah saya memposting milik saya nanti atau jika saya menambahkan regex yang lebih ketat.
Martin Ender
3

tinylisp , panjang regex 3 ( retak )

Anda dapat menguji kode tinylisp di Coba online!

Regex (rasa apa saja)

\S+

Saatnya menjadi hardcore.

Keluaran

Solusinya mendefinisikan fungsi yang mengambil argumen integer tunggal dan mengembalikan daftar seperti ini (untuk n = 4):

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

Kode asli saya menggunakan ide dasar yang sama dengan Brian McCutchon, membuat daftar dan mengevaluasi mereka. Ini dia dalam satu baris:

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

Saya menggunakan metode konstruk-dan-eval penuh sekali, untuk mendefinisikan makro d'yang membuat definisi seperti d, tetapi mengambil argumen yang terbungkus dalam daftar: jadi alih-alih (d x 42), Anda bisa melakukannya (d'(x 42)). Maka itu hanya masalah menulis ulang daftar dalam definisi yang mungkin memerlukan spasi putih: (q(a b))-> (c a(q(b)))-> (c(h(q(a)))(q(b))).

DLosc
sumber
1
Retak . Itu tidak mudah.
Brian McCutchon
2

Python3, panjang 162 (Retak!)

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

Oke, saya tahu, ini cukup panjang. Untungnya, itu tidak akan retak dalam waktu kurang dari seminggu ...: 'D.

Saya pikir saya tidak membuat kesalahan di mana pun, itu akan memungkinkan jawaban loophole-y.

Format output

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

Kode asli: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)

Yytsi
sumber