Perampok: Pecahkan regex - Buat ular

20

Ini adalah utas perampok. The benang polisi di sini .


Matriks ular adalah matriks persegi 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

Tugas Anda adalah menulis kode yang mengambil input ndan membuat matriks seperti itu, dalam bahasa yang sama dengan pos polisi, dan dengan kode yang cocok dengan regex polisi. Format output dari kode Anda harus sesuai dengan format output dari kode polisi.

Silakan tinggalkan komentar di bawah pos Cop untuk menunjukkan bahwa Anda telah memecahkannya.

Kriteria kemenangan:

Pemenang akan menjadi pengguna yang telah memecahkan sebagian besar kiriman. Dalam hal seri, maka akan ada beberapa pemenang.

Stewie Griffin
sumber

Jawaban:

10

Jelly , 9 byte, memecahkan jawaban @Dennis

²sµUFḤ$¦G

Cobalah online!

Seharusnya benar sekarang; Saya harus memikirkan kembali apa yang saya lakukan.

Penjelasan

Bagian tersulit dari masalah ini adalah mendapatkan daftar indeks genap di dalam ¦(yang menerapkan operasi pada indeks tertentu). Tidak seperti kebanyakan operasi, yang menggunakan input ke seluruh program sebagai default untuk operan kedua, ¦menggunakan nilai yang paling baru dilihat sebagai default (karena secara konseptual memiliki dua operan kiri, daripada operan kiri dan kanan seperti kebanyakan hal yang ambil dua nilai).

Namun, kita dapat mengamati bahwa kita memiliki daftar angka, termasuk semua bilangan bulat dari 1 hingga setengah input, sudah dalam nilai saat ini pada saat itu. Dengan demikian, meratakan dan menggandakannya memberi kita daftar angka genap, termasuk semua indeks genap (juga beberapa angka genap lainnya tetapi kita tidak peduli tentang itu). Bahkan mungkin untuk menghabiskan satu saja µuntuk menghindari ambiguitas parsing dan masih masuk dalam 9 karakter.

²sµUFḤ$¦G
 s         Split
²          {the list of numbers from 1 to} the square of {the input}
  µ        into a number of pieces equal to {the input};
   U       then reverse
       ¦   the elements at indexes
    F      obtained by flattening the split list
      $    and
     Ḥ     doubling each element in the flattened list;
        G  finally, format it into a grid.         
Komunitas
sumber
Eh, cara ¦kerjanya membunuh saya setiap kali, saya mencoba ini kemarin tetapi dengan dan bukannya Umemutuskan itu tidak berhasil.
Jonathan Allan
Bagus, saya hampir memilikinya tetapi terjebak dalam memilih setiap elemen lainnya juga. Fadalah ide yang bagus,
ETHproduk
Kode asli saya cukup identik dengan ini. Saya hanya menggunakan Jbukan F.
Dennis
@ Dennis Oh, J... Saya sudah mencoba dengan LRtetapi tidak bisa mendapatkannya di bawah 11 byte
ETHproduk
9

05AB1E, Emigna

Ini adalah pertama kalinya saya menggunakan 05AB1E. Dapatkan dengan sedikit bantuan. Itu tadi menyenangkan. :)

UXFXLNX*+N2BSR1k_iR}ˆ

Cobalah online

Penjelasan:

U                       Assign input to X
 XF                     For N in range(0,X):
   XL                   Push list [1 .. X]
     NX*+               Add N*X to each element of the list
         N2BSR1k_       Super clever way to get N%2:
                            not bool(reversed(str(bin(N))).index('1')) (N%2 is odd)
                 iR}    if N%2 is odd, then reverse the list
                    ˆ   Add row to global array
                        Implicit print

Saya sebenarnya menemukan program serupa ini sendiri, tetapi format outputnya berbeda:

UXFXLNX*+N2BSR1k_iR}=

Cobalah online

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

Lihat riwayat edit untuk dua upaya saya sebelumnya.

mbomb007
sumber
Pekerjaan yang baik! Cukup mirip dengan solusi aslinya.
Emigna
5
not bool(reversed(str(bin(N))).index('1'))... Saya pikir itu cara paling masuk akal yang pernah saya lihat ada yang melakukan N%2operasi.
Stewie Griffin
3
@StewieGriffin Ketika hidup memberi Anda lemon tetapi tanpa air atau gula, Anda hanya perlu memakannya mentah. : D
mbomb007
6

Python 2, Dennis

Ini adalah masalah token golf yang menyenangkan.

while ord>eval:1;int,eval=int<1and(int,eval+1)or(-input(),1);i=int;ord=i*i;print'%*s'%(-i,(eval+~i+~-eval%-i*~1,eval)[eval/i&1])+'\nt'[:-1<eval%int],

Verifikasi verifikasi

xsot
sumber
5

Ohm, Nick Clifford

Pertama kali saya mencoba Ohm.
Bahasa yang sangat bagus yang saya nantikan untuk digunakan lagi :)

²@┼σ▓_^è?R

Penjelasan

²             # square input
 @            # range [1 ... input^2]
  ┼σ          # split in input sized chunks
    ▓         # perform the following block on each element of the array
     _        # current element
      ^è?     # if index is odd
         R    # reverse

Upaya pertama saya yang tidak berfungsi sebagai menambahkan array dan int tidak mungkin:

@┼MDR┼+;W

Upaya kedua saya yang tidak cocok dengan regex:

²@┼σ▓_^MR
Emigna
sumber
Anda melakukannya persis seperti yang saya lakukan! Kerja bagus!
Nick Clifford
5

05AB1E, Emigna (pengiriman kedua)

Pertama kali bekerja dengan 05AB1E.

VYLUYFYXDˆ+RU

Cobalah online! | Verifikasi verifikasi

Penjelasan

VYLUYFYXDˆ+RU  # Implicit input
V              # Save input to Y
 YL            # Push [1 .. Y]
   U           # Save list to X
    YF         # Repeat Y times:
      YX       # Push Y, then X
        Dˆ     # Add X into the global array (could've used X here instead)
          +    # Push X + Y
           R   # Reverse top of stack
            U  # Save updated list to X
               # Implicit loop end
               # Implicit global array print if stack is empty
Nilai Tinta
sumber
Pekerjaan yang baik! Anda mendapatkan solusi yang dimaksudkan :)
Emigna
@Emigna terima kasih! Saya tidak akan mendapatkannya jika bukan karena solusi lain di sini (termasuk Anda) yang membuat saya menyadari bahwa array global akan dicetak jika tumpukannya kosong! Jika bukan karena itu saya tidak akan pernah bisa mengetahuinya; Saya terus mencoba melakukan trik yang berakhir dengan )berpikir itu akan menjadi satu-satunya cara untuk mendapatkan hasil yang benar di tumpukan.
Nilai Tinta
Ya itu sangat tidak mungkin dilakukan )ketika Anda hanya dapat menggunakan 2 karakter non-alfanumerik. Bagian yang sulit di sini dimaksudkan untuk menyusun program hanya menggunakan 2 wildcard dan mengurutkannya. Mungkin akan sedikit lebih sulit tanpa solusi lain tetapi harus ada beberapa yang membingungkan :)
Emigna
@ Emigna Yang ingin saya ketahui adalah jika ^\w*..$memungkinkan.
mbomb007
@ mbomb007: Saya rasa tidak. Dengan taktik ini Anda harus menyimpan hasil penambahan untuk iterasi berikutnya dan Anda tidak dapat menggunakan tumpukan untuk makna ini yang UVharus diikuti . Saya tidak bisa memikirkan cara lain untuk melakukannya dengan hanya 2 wildcard pada akhirnya juga. Ini bisa dilakukan dengan 3 wildcard.
Emigna
5

CJam , Lynn

esmpmpmeimtmemqmememqicelic
esmpmpmeimememqmlmtmemoc
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimememqmtmtmtmtmeic
esmpmpmeimeiscic
esmpmpmeimemeimfsic
esmpmpmeisciscimqmtmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeimemomqmqmemeic
esmpmpmeisciscimfsimqic
esmpmpmeimeiscic
esmpmpmeisciscimfsimqic
esmpmpmeimemomqmemqmemtmemoc
esmpmpmeiscic
esmpmpmeimemomeimqmeic
esmpmpmeimemeimqmlmtmeic
esmpmpmeimtmtmqmemtmtmeic
esmpmpmeimemomqmqmtmeic
esmpmpmeimemqmqmemeic
esmpmpmeiscimlmqmqmemeic
esmpmpmeiscimqmtmtmtmqmemeic
esmpmpmeimeimemtmqmemeic
esmpmpmeimeiscimlmlmtmlmtic
esmpmpmeimemeimqmlmtmeic
~~

Semua umpan garis untuk keperluan kosmetik dan dapat dihapus tanpa mempengaruhi program.

Cobalah online!

Penjelasan

Setelah Lynn dihapus {|}dari daftar karakter yang diizinkan, saya harus mencoba sesuatu yang baru. Ternyata kita masih bisa membuat string arbitrer dan mengevaluasinya sebagai kode.

Pertama, kita perlu mendapatkan beberapa nilai ke stack. Satu-satunya built-in yang mendorong sesuatu tanpa muncul sesuatu yang lain terlebih dahulu (dan tanpa membaca input) adalah es, eadan et. Saya yakin Anda bisa mulai dari semua ini dengan satu atau lain cara, tapi saya pergi dengan esyang mendorong cap waktu saat ini. Karena saya tidak ingin membuat asumsi tentang nilai aktualnya, saya menguji keutamaannya dengan mp(yang memberi 0dan 1) dan menguji keutamaan nilai itu lagi untuk memastikan saya mendapatkan nilai 0di tumpukan. Sebuah 1akan lebih berguna, jadi kita menghitung exp(0)dengan medan mengubahnya menjadi integer dengan i. Jadi semua angka dimulai dengan:

esmpmpmei

Sekarang kita punya banyak operator matematika unary untuk bekerja dengan:

i    int(x) (floor for positive numbers, ceiling for negative)
me   exp(x)
ml   ln(x)
mq   sqrt(x)
mo   round(x)
mt   tan(x)

Kami juga dapat menggabungkan beberapa built-in untuk fungsi yang lebih rumit dari x:

sci     Extract first digit of x and add 48 (convert to string, convert
        to character, convert to integer).
ceui    Convert to character, convert to upper case, convert to integer.
celi    Convert to character, convert to lower case, convert to integer.
mfsi    Get a sorted list of prime factors of x and concatenate them into 
        a new number.
mfseei  Get a sorted list of prime factors, interleave it with 1,2,3,..., and
        concatenate the result into a new number.

Dengan menggunakan ini, kami dapat memperoleh nomor dalam 0 <= x < 128(dan banyak lainnya) dalam waktu kurang dari 10 langkah dari 1. Saya yakin subset yang jauh lebih kecil dari perintah ini juga cukup. Saya telah menulis sebuah program Mathematica kecil, untuk menentukan semua cuplikan ini (tidak mudah dibaca, maaf):

codes = SortBy[
  Select[Nest[Select[DeleteDuplicatesBy[SortBy[Join @@ (Through[{
               List,
               If[1 <= # < 50, {Exp@#, #2 <> "me"}, Nothing] &,
               If[# >= 1, {Log@#, #2 <> "ml"}, Nothing] &,
               If[# > 1, {Sqrt@#, #2 <> "mq"}, Nothing] &,
               {If[# > 0, Floor@#, Ceiling@#], #2 <> "i"} &,
               {Floor[# + 1/2], #2 <> "mo"} &,
               {Tan@#, #2 <> "mt"} &,               
               If[NumberQ@# && # >= 0, {First@
                   ToCharacterCode@ToString@#, #2 <> "sci"}, 
                 Nothing] &,
               If[IntegerQ@# && 
                  32 < # < 65536, {First@
                   ToCharacterCode@
                    ToUpperCase@FromCharacterCode@#, #2 <> "ceui"}, 
                 Nothing] &,
               If[IntegerQ@# && 
                  32 < # < 65536, {First@
                   ToCharacterCode@
                    ToLowerCase@FromCharacterCode@#, #2 <> "celi"}, 
                 Nothing] &,
               If[IntegerQ@# && # > 0, ## & @@ {
                   {FromDigits[
                    "" <> (ToString /@ (f = 
                    Join @@ Table @@@ FactorInteger@#))], #2 <> 
                    "mfsi"},
                   {FromDigits[
                    "" <> (ToString /@ 
                    MapIndexed[## & @@ {#2[[1]] - 1, #} &, f])], #2 <>
                     "mfeesi"}
                   }, Nothing] &
               }@##] &) @@@ #, StringLength@*Last], 
       First], #[[1]] < 1000000 &] &, {{1, "esmpmpmei"}}, 9], 
   IntegerQ@# && 0 <= # < 128 &@*First], First]

Dengan itu, kita cukup mendorong daftar kode karakter yang sewenang-wenang, mengonversinya masing-masing menjadi karakter dengan csesudahnya. Setelah kami mendorong seluruh kode yang ingin kami jalankan, kami mendorong 95( ]). Kami mengevaluasinya dengan ~membungkus semua yang lain dalam sebuah string, dan kemudian kami mengevaluasinya ~.

Sekali lagi kode aktual yang dijalankan di akhir program:

ri__2#,:)/2/[1W]f.%:~<p

Lihat solusi saya sebelumnya untuk penjelasan.

Martin Ender
sumber
4

Python 3, TuukkaX

Maaf, regex yang Anda gunakan terlalu mudah untuk diremehkan. Tidak 0, #atau ? Tidak masalah!

Saya mungkin telah salah mengartikan output contoh tetapi masih cukup mudah untuk mengubah karena saya memiliki 45 karakter cadangan yang tersisa

n=int(input())
print(str(n)+":")
x=1-1
exec("print([*range(1+x*n,1+n*-~x)][::(1,-1)[x%2]]);x+=1;"*n)
"no-op:a_string_that_doesnt_actually_matter"
Nilai Tinta
sumber
Bagus! : D FYI: Saya akan membuat yang lain dengan Python, jika Anda tertarik untuk menyelesaikannya;) Ini akan menjadi sedikit lebih lama, tetapi keindahannya terletak pada ketidakteraturan.
Yytsi
4

R, MickyT

lets_make_a_snake<-function(n)`for`(i,1:n,cat(i*n+1-`if`(i%%2,n:1,1:n),"\n"))

Tes kasus:

> lets_make_a_snake(4)
1 2 3 4 
8 7 6 5 
9 10 11 12 
16 15 14 13 
> lets_make_a_snake(7)
1 2 3 4 5 6 7 
14 13 12 11 10 9 8 
15 16 17 18 19 20 21 
28 27 26 25 24 23 22 
29 30 31 32 33 34 35 
42 41 40 39 38 37 36 
43 44 45 46 47 48 49 

Dan konfirmasi regex: https://regex101.com/r/OB8ZIM/1

Saya juga punya:

invisible(sapply(1:(n=scan()),function(i)cat(i*n+1-`if`(i%%2,n:1,1:n),"\n")))

yang memberikan output yang sama dan cocok dengan regex yang sama .

plannapus
sumber
6
lets_make_a_snake... Saya akan terkejut jika itu adalah solusi yang dimaksudkan: P
Stewie Griffin
@plannapus Kerja bagus. Yang pertama pada dasarnya adalah apa yang saya maksudkan menggunakan ` for` dan ` if`, tetapi jauh lebih baik bermain golf daripada milik saya.
MickyT
4

Röda , fergusq

{|i|;a=1;while[a<=i]do;b=a*i-i+1;c=[];while[b<=a*i]do;c+=b;b++;done;{d=[];x=0;while[x<i]do;d+=c[i-x-1];x++;done[d]}if[a%2<1]else{[c]};a++;done;r="||||||"}

Ini adalah fungsi anonim yang cocok PCRE regex ini: ^{(\|[^\/#\s]*){8}$.

Cobalah online!

Kritixi Lithos
sumber
4

Bash, @Marcos M

sort -n <(seq 1 $((n * n)) | xargs -n$n | sed -n 'p;n'; seq $((n * n)) 1 | xargs -n$n | sort -n | sed -n 'n;p')

Prettified:

sort -n <(               # feed the stdout of this subshell into stdin for `sort -n`
    seq 1 $((n * n)) |   #   generate 1 2 3 ... n²
        xargs -n$n |     #     add line break every n numbers
        sed -n 'p;n';    #     print only odd lines
    seq $((n * n)) 1 |   #   generate n² ... 3 2 1
        xargs -n$n |     #     add line break every n numbers
        sort -n |        #     reverse all lines (keeping each row decreasing)
        sed -n 'n;p'     #     print only even lines
)

Bagian pertama dari subcommand akan menghasilkan 1 2 3 4, 9 10 11 12dan bagian kedua akan menghasilkan 8 7 6 5, 16 15 14 13. Bagian luar sort -nakan mencampur mereka dengan benar untuk membentuk pola ular.

Saya menggunakan trik di /superuser//a/101760 untuk mencetak garis ganjil dan genap. Terima kasih Marcos, benar-benar menyenangkan.

kennytm
sumber
Solusi yang sangat bagus
Mitchell Spector
3

Javascript, Tom

f=(a,i=1,j=0)=>Array(a).fill(0).map(b=>Array(a).fill(0).map(a=>i++)).map(a=>j++%2?a.reverse():a).map(a=>a)

console.log(f(4))

ovs
sumber
3

Python 3, @TuukkaX

n=int(input());j=0;exec("print([(j-+i%n-n++2*n-0,j+i%n+1)[1&int(i/n)//1^(0x1)//1]*(2*(i%n)*0+2222222//2222222)for i in range(j,j+n)]);j+=n;"*n)

Menganalisis sedikit regex polisi menunjukkan templat tetap:

________________________"___________i%n____2*n-____i%n__________i/n)//1_____)//1___2*(i%n)____^^^^^^^^^^^^^^^^for i in range(j,____])______"*n)

di mana _ada karakter kecuali [ '"#]dan ^adalah dari [int()2/].

Di "*n)bagian akhir jelas menunjukkan eval("..."*n)atau exec("..."*n)sedang terjadi, jadi kita hanya perlu memastikan "..."cetakan baris ke-j.

The for i in range(j,terlalu dekat dengan akhir string, mengisyaratkan daftar pemahaman tanpa if. Jadi kita perlu membuat kolom ke-i menggunakan itu i%n, 2*nbarang.

n = int(input())
j=0
exec("""print([
    (
        j - +i%n - n ++ 2*n - 0,    # equivalent to (n + j - i%n) for the decreasing rows
        j + i%n + 1                 # equivalent to (j + i%n + 1 == i + 1) for the increasing rows
    )[1 & int(i/n)//1 ^ (0x1)//1]   # int(i/n)   ->    get row number 0, 1, 2, 3, ...; 
                                    # 1 & int(i/n)//1    ->    0 for increasing rows, 1 for decreasing rows, 
                                    # 1 & int(i/n)//1 ^ (0x1)//1    ->   flip 0 and 1
    * (2*(i%n)*0+2222222//2222222)  # multiply by the constant 1.
    for i in range(j,j+n)
]); j+=n; "*n)
kennytm
sumber
Bagus! Yah, hampir bertahan seminggu: D Saya akan memposting kode asli saya.
Yytsi
3

dc , Mitchell Spector

Ini adalah entri pertama saya ke tantangan polisi dan perampok, dan saya bersenang-senang. Regex yang perlu dicocokkan adalah sederhana,, ^[^# !]{59}$yang pada dasarnya mengubah pekerjaan saya menjadi golf, tanpa menggunakan 3 karakter itu. Awalnya saya mengalami kesulitan mendapatkan di bawah 60 byte, tetapi pada akhirnya saya memecahkannya.

?sN0[AP]sP[ddlN~_2*lN+1-r2%*+1+n32P1+dlN%0=PdlNd*>L]dsLxqqq

Cobalah online!

Penjelasan:

Kode saya menggunakan satu loop dengan iterasi N 2 , menjaga penghitung berbasis nol (1D), dan menghitung angka apa yang perlu dicetak berdasarkan pada baris matriks dan koordinat kolom (r, c) yang sesuai.

Contoh apa yang saya maksud, jika N = 4:

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

Ini terlihat rumit, tetapi langkah perantara sangat membantu. Plus, saya sudah mencoba menggunakan 2 loop dari awal, tetapi saya berakhir di atas batas karakter regex. Pembuatan angka pada setiap iterasi (berbasis nol):

  • jika r % 2 = 0(baris normal),n = (r * N) + c = counter
  • jika r % 2 = 1(baris terbalik),n = ((r + 1) * N) - c - 1 = counter + N - (2 * c) - 1

Atau sekaligus, sebagai penomoran berdasarkan satu: n = counter + ((N - (2 * c) - 1) * (r % 2)); n++

?sN0             # read input, save as N, initialize iteration counter
[AP]sP           # macro 'P' that prints a newline (ASCII code 10 = A)
[                # start loop
    ddlN~        # push N, calculate row and column coordinates:
                 #r = int(counter / N), c = counter % N, '~' calculates both
    _2*lN+1-     # c is on top, so this does: N - (2 * c) - 1
    r2%*+        # now r is on top, do: (r % 2) * (previous result) + counter
    1+n32P       # do: n++, print space (ASCII code 32)
    1+           # increment counter
    dlN%0=P      # call macro 'P' every Nth printed number
    dlNd*>L      # if: N * N > counter, repeat loop
]dsLx            # this saves the loop to macro 'L', then executes it
qqq              # my script was shorter, so I added a bunch of quit commands to
                 #fit the regex limit. Use of comments ('#') was prohibited.
seshoumara
sumber
@MitchellSpector Ini penjelasan saya. Seperti yang Anda lihat, kita berdua secara harfiah memiliki algoritma yang sama, hanya saya menggunakan perintah ~untuk menghitung indeks baris dan kolom sekaligus. Tetapi salah satu upaya saya sebelumnya menghitungnya secara terpisah seperti yang Anda lakukan. Pemikir hebat berfikir yang sama? :)
seshoumara
1
Ya, itu memang algoritma yang sama. Saya suka Anda menggunakan ~untuk mempersingkat kode.
Mitchell Spector
Saya pikir Anda dapat mempersingkatnya dengan satu byte jika Anda menggunakan trik akar kuadrat dalam tes loop di akhir makro: ?sN0[AP]sP[ddlN~_2*lN+1-r2%*+1+n32P1+dlN%0=PdvlN>L]dsLx tio.run/nexus/…
Mitchell Spector
@MitchellSpector Anda benar, dan saya memang memperhatikannya ketika membaca penjelasan Anda, tetapi berkomentar di ruang obrolan .
seshoumara
Ya, saya mengerti sekarang - saya belum melihat ke ruang obrolan pagi ini.
Mitchell Spector
3

PowerShell, ConnorLSW

Retak

$mySnakeIndex=1;$seq=1..$args[0];$seq|%{$rowNum=$seq|%{($mySnakeIndex++)};if(!($_%2)){[array]::Reverse($rowNum)};$rowNum-join" "}

Saya mulai dengan solusi yang lebih kecil untuk masalah ini dan mengisi nama variabel saya untuk mendapatkan regex yang cocok. Mencoba menemukan kegunaan untuk usus besar saya kira adalah bagian yang paling sulit untuk membungkus kepala saya.

$a=1..$args[0];$i=1;$a|%{$r=$a|%{($i++)};if(!($_%2)){[array]::Reverse($r)};$r-join" "}

Penjelasan

# Initialize a counter that starts at one.
$mySnakeIndex=1
# Save the integer array from 1 to the input value. 
$seq=1..$args[0]
# For each row of the output...
$seq|%{
    # Build the integer array for this row sequentially
    $rowNum=$seq|%{
        # Increase the integer index while sending it down the pipeline
        ($mySnakeIndex++)}
        # Check if this is and odd row. If so reverse the integer array.
        if(!($_%2)){[array]::Reverse($rowNum)}
        # Take this row and join all the numbers with spaces.
        $rowNum-join" "
Mat
sumber
Bagus, saya menggunakan $scriptvariabel dan beberapa looping benar-benar berantakan untuk pad keluar, [array]::Reverse()itu benar, selamat - saya pikir Anda mungkin ingin meratakan panjang $idan $MySnakeIndexmeskipun.
colsw
@ConnorLSW Saya tahu Anda tidak akan bisa tidur di malam hari mengetahui saya memiliki kesalahan dalam perampok saya. Saya sudah memperbaikinya.
Matt
3

CJam, Lynn

Sesuatu seperti ini:

ri
{s}seu~~ci{zs}seu~~c{a}seu~~|~{w}seu~~z{w}seu~~sc~c{z}seu~~{w}seu~~sc~c{w}seu~~z{w}seu~~sc~c~

{s}seu~~ci{z}seu~~{s}seu~~c{a}seu~~|~{w}seu~~z{w}seu~~sc~c
{s}seu~~ci{z}seu~~{s}seu~~c{a}seu~~|~{w}seu~~z{w}seu~~sc~c
{s}seu~~ci{z}seu~~{s}seu~~c{a}seu~~|~{w}seu~~z{w}seu~~sc~c
{s}seu~~c{a}seu~~|
{s}seu~~c{c}seu~~|
{t}seu~~sc{a}seu~~|
{s}seu~~c{a}seu~~|{w}seu~~z{w}seu~~sc~c
{s}seu~~sc{fb}seu~~||
{s}seu~~sc{i}seu~~|
{s}seu~~sc{fb}seu~~||
{s}seu~~ci{z}seu~~{s}seu~~c{a}seu~~|~{w}seu~~z{w}seu~~sc~c{z}seu~~{w}seu~~sc~c{w}seu~~z{w}seu~~sc~c
{a}seu~~scs
{w}seu~~
{s}seu~~ci{z}seu~~{s}seu~~c{a}seu~~|~{z}seu~~{w}seu~~sc~c
{fb}s{b}s{w}seu~~sc~
{s}seu~~sc{ee}seu~~||
{s}seu~~sc{z}seu~~|{w}seu~~{w}seu~~sc~{w}seu~~{w}seu~~sc~
{t}seu~~sc{a}seu~~|
{~}s{}s{w}seu~~sc~
{t}seu~~sc{c}seu~~|

{s}seu~~ci{z}seu~~{s}seu~~c{a}seu~~|~{z}seu~~{w}seu~~sc~c~
s~
p

Semua spasi putih adalah untuk ... "keterbacaan" ... dan dapat dihilangkan untuk mematuhi regex Lynn.

Cobalah online!

Penjelasan

Regex mengharuskan kami menyelesaikan masalah hanya dengan menggunakan:

  • Huruf kecil.
  • {}, yang dapat digunakan untuk membuat blok.
  • |, kebanyakan digunakan untuk bitwise OR.
  • ~, "eval" dan bitwise NOT (juga "dump array", tapi saya tidak akan menggunakannya).

Karena kita memiliki,, ~jika kita dapat membuat string arbitrer, kita dapat menjalankan kode arbitrer. Namun, pada awalnya tidak jelas bagaimana melakukan itu.

Bagian pertama dari teka-teki adalah bahwa blok adalah potongan kode yang tidak dievaluasi, yang dapat berubah menjadi string s. Jadi {abc}sberi kami "{abc}". Selanjutnya, kita dapat menggunakan euuntuk mengubah string ini menjadi huruf besar.

{abc}seu  e# gives "{ABC}"

Keuntungan dari ini adalah bahwa huruf besar adalah variabel yang diinisialisasi, sehingga kita bisa mendapatkan banyak nilai konstan dengan membuat string seperti itu, dan mengevaluasi dua kali (satu kali untuk mengubah string kembali menjadi blok dan satu kali untuk jalankan blok itu). Kami tidak bisa mendapatkan semua surat, karena beberapa, seperti xbukan perintah yang valid (jadi CJam akan menolak untuk menguraikan blok yang berisi mereka). Kita tidak bisa menggunakan fapa adanya, karena itu harus diikuti oleh perintah lain, tetapi kita bisa menggunakan fbdan kemudian ATAU kedua nilai bersama. Demikian juga, kita dapat menggunakan eebukan e. Dengan itu, kita bisa mendapatkan nomor 0, -1, 3, dan 10untuk 19. The-1 nyaman, karena jika kita mengubahnya menjadi string ( "-1") maka menjadi karakter ('-) dan kemudian evaluasi, kita bisa mendapatkan pengurangan atau mengatur perbedaan. Seperti yang saya katakan, kita tidak bisa mendapatkan X(untuk 1), tetapi kita bisa mengambil nilai absolut dari -1with z.

Kita juga bisa menggunakan suntuk mendapatkan string yang berisi spasi, dan gunakan cuntuk mengubahnya menjadi karakter spasi :

{s}seu~~c

Ini nyaman, karena dari sana kita bisa mendapatkan banyak perintah yang berguna di kisaran ASCII lebih rendah dengan ORing spasi dengan berbagai angka. Untuk mendapatkan beberapa karakter di atas titik kode 48, kami menggunakan karakter '0sebagai dasarnya:

{t}seu~~si

Ini sudah cukup untuk membuat string arbitrer, karena kita bisa mendapatkan '+(penambahan dan penggabungan string) dari cuplikan berikut:

{s}seu~~c{b}seu~~|

Dan kami memiliki literal 1 sehingga kita bisa mendorong karakter spasi, menambahnya ke nilai yang kita butuhkan dan kemudian menggabungkan semuanya, tapi itu sedikit membosankan dan kodenya akan menjadi besar.

Alih-alih, saya telah membuat [dan ]mengujinya, sehingga semua karakter yang saya tekan di antaranya dibungkus dalam sebuah string secara otomatis. Itulah dua baris ini:

{s}seu~~ci{zs}seu~~c{a}seu~~|~{w}seu~~z{w}seu~~sc~c{z}seu~~{w}seu~~sc~c{w}seu~~z{w}seu~~sc~c~

...

{s}seu~~ci{z}seu~~{s}seu~~c{a}seu~~|~{z}seu~~{w}seu~~sc~c~

Dan akhirnya, kita akan membutuhkan fdan ~dalam string yang kita hasilkan. Walaupun sudah menjadi karakter yang valid, kami tidak memiliki string literal atau literal karakter, jadi kami harus membuatnya juga dan membangun poin kode yang lebih besar dari ruang agak menjengkelkan. Alih-alih, saya telah menggunakan pengurangan set di sini, tetapi mengurangi dua blok (untuk menghilangkan {}):

{fb}s{b}s{w}seu~~sc~
...
{~}s{}s{w}seu~~sc~

Cukup banyak yang ada untuk itu. Kami eval [. Kami mendorong semua karakter, yang diperoleh dengan berbagai perhitungan dari beberapa konstanta bawaan yang kami miliki |,, -(melalui eval) dan +(melalui eval). Kami eval ]. Kami meratakan semuanya menjadi string, karena pada titik tertentu saya menambahkan beberapa string atau angka ke dalam daftar. Kami mengevaluasi string sewenang-wenang kami dengan~ .

Itu ri...p adalah bagian dari program final yang sebenarnya, tetapi saya telah mengekstraknya karena mereka tidak perlu penyandian.

Akhirnya, ini adalah program yang sebenarnya kami jalankan:

ri___*,:)/2/[1-1]f.%:~<p

ri      e# Read input and convert to integer.
__      e# Make two copies.
_*      e# Square the last copy.
,       e# Turn into range [0 1 ... n^2-1].
:)      e# Increment each to get [1 2 ... n^2].
/       e# Split into chunks of length n, creating a square.
2/      e# Split into pairs of lines.
[1-1]   e# Push [1 -1].
f.%     e# Use this to reverse the second line in each pair. If n was odd,
        e# this will pair a -1 with the last line.
:~      e# Flatten the pairs back into the square.
<       e# Truncate to n lines to get rid of that extraneous -1 for odd inputs.
p       e# Pretty-print.
Martin Ender
sumber
3

tinylisp , @Dosc

(v(c(h(q(d)))(c(h(q(f)))(q((c(q(n))(q((g(v(h(q(n))))(s(v(h(q(n))))(v(h(q(1)))))())))))))))(v(c(h(q(d)))(c(h(q(mod)))(q((c(c(h(q(x)))(q(y)))(q((i(l(v(h(q(x))))(v(h(q(y)))))x(mod(s(v(h(q(x))))(v(h(q(y)))))y))))))))))(v(c(h(q(d)))(c(h(q(range)))(q((c(c(h(q(x)))(c(h(q(y)))(c(h(q(z)))(q(w)))))(q((i(l(times(v(h(q(z))))(v(h(q(x))))(v(h(q(0)))))(times(v(h(q(z))))(v(h(q(y))))(v(h(q(0))))))(range(v(h(q(x))))(s(v(h(q(y))))(v(h(q(z)))))z(c(s(v(h(q(y))))(v(h(q(z)))))w))w)))))))))(v(c(h(q(d)))(c(h(q(times)))(q((c(c(h(q(x)))(c(h(q(y)))(q(acc))))(q((i(l(v(h(q(x))))(v(h(q(0)))))(times(s(v(h(q(0))))(v(h(q(x)))))(s(v(h(q(0))))(v(h(q(y)))))acc)(i(e(v(h(q(x))))(v(h(q(0)))))acc(times(s(v(h(q(x))))(v(h(q(1)))))y(a(v(h(q(y))))(v(h(q(acc))))))))))))))))(v(c(h(q(d)))(c(h(q(g)))(q((c(c(h(q(n)))(c(h(q(w)))(q(r))))(q((i(l(v(h(q(w))))(v(h(q(0)))))r(g(v(h(q(n))))(s(v(h(q(w))))(v(h(q(1)))))(c(i(e(v(h(q(0))))(mod(v(h(q(w))))(v(h(q(2))))))(range(a(v(h(q(1))))(times(v(h(q(w))))(v(h(q(n))))(v(h(q(0))))))(a(a(v(h(q(1))))(times(v(h(q(w))))(v(h(q(n))))(v(h(q(0))))))n)1())(range(a(times(v(h(q(w))))(v(h(q(n))))(v(h(q(0)))))n)(times(v(h(q(w))))(v(h(q(n))))(v(h(q(0)))))(s(v(h(q(0))))(v(h(q(1)))))()))r)))))))))))

Cobalah online!

Ini mendefinisikan fungsi fyang mengembalikan jawaban. Itu juga mencetak nama-nama fungsi yang saya definisikan untuk stdout, tapi saya menganggap itu tidak masalah, karena [kita diperbolehkan memilih aliran output kami] untuk kode golf, setidaknya. Jika ini masalah besar, saya pikir saya bisa mengubahnya untuk tidak mencetaknya. Bagaimana saya melakukannya? Saya mulai dengan sesuatu yang cukup standar:

(d f (q ((n)
  (g n (s n 1) ()))))

(d mod (q((x y)
  (i (l x y) x
    (mod (s x y) y)))))

(d range (q((x y z w)
  (i (l (times z x 0) (times z y 0))
    (range x (s y z) z (c (s y z) w))
    w))))

(d times (q ((x y acc)
  (i (l x 0) (times (s 0 x) (s 0 y) acc)
  (i (e x 0) acc
    (times (s x 1) y (a y acc)))))))

(d g (q ((n w r)
  (i (l w 0) r
    (g n (s w 1)
       (c (i (e 0 (mod w 2))
             (range (a 1 (times w n 0)) (a (a 1 (times w n 0)) n) 1 ())
             (range (a (times w n 0) n) (times w n 0) (s 0 1) ()))
          r))))))

Kemudian, saya mengamati bahwa seseorang dapat mengubah definisi fungsi seperti ini:

(d mod (q ((x y) (body))))

menjadi

(v(c(h(q(d)))(c(h(q(mod)))(q((c(c(h(q(x)))(q(y)))(q((body)))))))))

Dan panggilan fungsi seperti ini:

(a x y)

menjadi

(a(v(h(q(x))))y)

Saya menggunakan makro Vim rekursif ini, disimpan dalam register q, untuk melakukan yang kedua (saya telah jkmemetakan ke <Esc>):f s(v(h(q(jkea))))jk@q .

Kedua transformasi ini cukup untuk menghilangkan semua ruang.

Brian McCutchon
sumber
Bagus sekali! Kode asli saya sangat mirip, meskipun saya menulis makro pembantu untuk membuatnya sedikit kurang menyakitkan untuk ditulis. Saya ingin tahu tentang pemikiran Anda tentang cara menghindari mencetak simbol yang ditentukan - jika Anda ingin membaginya, saya akan berada di ruang obrolan tinylisp .
DLosc
@ Docosc Selesai, saya diposting di sana.
Brian McCutchon
2

Swift, @ames Webster

{n in for j in 0..<n{print((1...n).map{j%2==0 ?$0+j*n:j*n+n+1-$0})}} as(CShort)->()

Verifikasi: https://regex101.com/r/7ukrM0/1

kennytm
sumber
Saya mendapatkan "Ekspresi memutuskan ke fungsi yang tidak digunakan" dengan ini sendiri, tetapi saya tidak terbiasa dengan segala sesuatu yang membuat jawaban yang dapat diterima. Apakah eg `let a = <code>; a (CShort (4)); diperlukan untuk membuatnya berjalan tidak perlu?
James Webster
@ JamesWebster Saya tidak yakin tentang aturan yang pasti karena "kode" cukup ambigu. Untuk kode-golf pengajuan dapat berupa program atau fungsi , jadi saya hanya menyediakan fungsi anonim di sini. Bagaimana lagi kita menerima argumen input?
kennytm
Orisinal saya adalah badan fungsi, jadi tidak yakin punyaku valid! Jadi saya hanya akan pergi dengan "Tentu, ini baik-baik saja" dan membenarkannya. :)
James Webster
@ JamesWebster Anda dapat memanggil semuanya sebagai (…)(4), tidak perlu membuang integer literal ke CShort.
kennytm
Ah ya! Saya tidak akan pernah memikirkan itu.
James Webster
2

PHP, @ JörgHülsermann

<?=(function($n,$snake){foreach(array_chunk(range(1,$n*$n),$n)as$i=>$a){if($i%2)$a=array_reverse($a);echo"\n",join('',array_map(function($e){return(sprintf("%3d",$e));},$a));}})($argv[1],'-=-=-=-=-=-=-=-=-=-=-=-=-=-o~')?>

221 byte terlalu panjang (dengan demikian ular), dan kurangnya ruang kosong dapat dengan mudah diatasi.

Prettified:

<?=
(
    function($n, $snake) {
        foreach (array_chunk(range(1, $n*$n), $n) as $i => $a) {
            if($i % 2)
                $a = array_reverse($a);
            echo "\n", join('', array_map(function($e) {
                return (sprintf("%3d", $e));
            }, $a));
        }
    }
)($argv[1], '-=-=-=-=-=-=-=-=-=-=-=-=-=-o~')
?>
kennytm
sumber
Varian yang bagus. Kesalahan saya adalah tidak memikirkan fungsi dan hanya membuat satu output
Jörg Hülsermann
2

Jelly, panjangnya 12, @Jonathan Allan

Ḷ-*m@"s@²$G

Cobalah online!

Bagaimana itu bekerja

Ḷ-*m@"s@²$G  Main link. Argument: n

Ḷ            Unlength; yield [0, ..., n-1].
 -*          Yield [(-1)**0, ..., (-1)**(n-1)].
         $   Combine the two links to the left into a chain.
        ²    Yield n².
      s@     Split [1, ..., n²] into chunks of length n.
   m@"       Take the lists to the right modulo the units to the left, 1 being
             normal order and -1 being reversed.
Dennis
sumber
2

Jelly , 12 byte, retak @ jawaban kedua Jonathan Allan

²sµ;@/€FḤ$¦G

Cobalah online!

Penjelasan

Ini hampir sama dengan jawaban saya yang lain . Saya baru saja membuat dua perubahan:

Pertama, saya mengubah U("membalikkan setiap elemen") menjadi Ṛ€("membalikkan" "setiap elemen"). Itu tidak membantu dengan sendirinya, karena juga dilarang.

Kemudian, saya mengubah ("mundur") menjadi ;@/( /"lipat dengan" ;"menyatukan"@ "dalam urutan yang berlawanan dengan daftar asli"). Itu menghindari semua karakter yang dilarang, memberikan solusi yang valid.

Saya berasumsi langkah selanjutnya adalah mulai melarang quick -manipulation array , selain atom.

Komunitas
sumber
Eh, saya tahu saya seharusnya melarang ...
Jonathan Allan
Anda dapat menulis dalam bentuk /juga. Itu hanya sedikit lebih bertele-tele daripada solusi ini.
Yap dan satu bisa ;@\ṫ0, regex semakin lama.
Jonathan Allan
2

Jelly, panjang 13, @Jonathan Allan

1r-*Nm@"s@²$G

Cobalah online!

Bagaimana itu bekerja

1r-*Nm@"s@²$G  Main link. Argument: n

1r             Range 1; yield [1, ..., n].
 -*            Yield [(-1)**1, ..., (-1)**n].
   N           Negate each unit.
           $   Combine the two links to the left into a chain.
          ²    Yield n².
        s@     Split [1, ..., n²] into chunks of length n.
     m@"       Take the lists to the right modulo the units to the left, 1 being
               normal order and -1 being reversed.
Dennis
sumber
Oh, tunggu, apa, aku rindu m?!
Jonathan Allan
2

Jelly, panjang 14, @Jonathan Allan

²sµðạ"J×2$$¦GµL.xị"ḅ1µ$

Cobalah online!

Dennis
sumber
Itu mengesankan: D
Jonathan Allan
Terima kasih! :) Untuk beberapa alasan, saya yakin bahwa kode saya tidak dapat berisi baris baru, yang memaksa saya menemukan beberapa tipu daya berantai.
Dennis
2

Scala, @Soapy

def g(n:Int) = {
    var vec = Vector.fill(0)(Vector.fill(0)(1))
    for (p <- 1 to n) {
        var vec2 = Vector.fill(0)(1)
        for (q <- (p-1)*n+1 to p*n) {
            vec2 = vec2 ++ Vector(q)
        }
        if (p%2==1) vec = vec ++ Vector(vec2)
        else vec = vec ++ Vector(vec2.reverse)

    }
    println(vec)
}

Belum pernah menyentuh Scala, itu menyenangkan untuk dikunjungi kembali. Sayangnya, solusi ini kehilangan banyak fitur keren Scala.

Cobalah di sini

Konfirmasi Regex

pecandu matematika
sumber
2

QBasic (QB64), @DLosc

Perhatikan bahwa karena .tidak cocok \n(U + 000A, LF), baris baru di sini adalah \r(U + 000D, CR).

INPUT N:ZERO=N-N:ONE=N/N:FOR I=ZERO TO N-ONE:FOR J=ONE TO N:IF ZERO=I MOD(ONE+ONE)THEN PRINT I*N+J;ELSE PRINT I*N+N-J+ONE;REM
NEXT:PRINT:NEXT

Memeriksa:

>>> re.match('^([A-Z]+.)+$', 'INPUT N:ZERO=N-N:ONE=N/N:FOR I=ZERO TO N-ONE:FOR J=ONE TO N:IF ZERO=I MOD(ONE+ONE)THEN PRINT I*N+J;ELSE PRINT I*N+N-J+ONE;REM\rNEXT:PRINT:NEXT')
<_sre.SRE_Match object; span=(0, 141), match='INPUT N:ZERO=N-N:ONE=N/N:FOR I=ZERO TO N-ONE:FOR >

Kesulitan utama adalah bagaimana memasukkan kata setelah kata ;. Untungnya, QB64 memperlakukan CR sebagai baris baru sementara regex Python tidak, sehingga kita bisa tergelincir di REM\rsini. Dari lima rasa regex yang diizinkan,

Jadi celah ini baik-baik saja selama kita tidak menyebutkan JavaScript ... 🤐

kennytm
sumber
Saya akan menerima ini, karena ini berfungsi di QB64. Namun, saya juga akan mengatakan bahwa QBasic archive.org (yang saya pikir adalah QBasic yang sebenarnya dan bukan emulasi) mengeluh tentang REMsegera mengikuti pernyataan tanpa pemisah pernyataan. Solusi asli saya tidak menggunakan komentar. Saya punya variasi lain yang akan saya posting segera. : D
DLosc
2

> <>, torcado

!v &0_!
_<>~ao1+>_v_
?______;__>:&:&=?;::2%:}+&:&*{3+0$.
?!v1+:n' 'o:&:&%_
?!v:n' 'o1-:&:&%_
Harun
sumber
1

C, @Yimin Rong

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

Program tidak dapat berisi angka, tetapi kami bisa mendapatkan angka melalui:

  1. c, umumnya dikenal sebagai "argc", yang selalu 2.
  2. +dan -tersedia, sehingga kami dapat membuat 0 dengan n-n, dan membuat 1 dengan o=c;--o.
kennytm
sumber
Masalah kecil, versi polisi dibatasi oleh tab sebagai lawan dari ruang-dibenarkan, tetapi tidak ada masalah.
1

Ruby, @Nilai Tinta

->n{(1..n).map{|r|x=(r*n-n+1..r*n).to_a;if(r.modulo(2)==1)then(x)else(x.reverse)end}}#1-2-3-4-5-6--

[(-=Z-~]* berarti "Saya bisa menulis apa pun yang saya suka :)"

kennytm
sumber
Ah, saya mengacaukannya bukan saya
Value Ink
1

tinylisp, @Dosc

Solusi yang sangat mudah, dan benar-benar tidak dioptimalkan :)

(d p(q((m n)(s m(s(s 1 1)n)))))(d j(q((f g)(i(l f g)(c f(j(p f 1) g))()))))(d r(q((f g)(i(l f g)(c(s g 1)(r f(s g 1)))()))))(d k(q((m o f g n)(i(l n g)()(c(m f(p f n))(k o m(p f n)(p g 1) n))))))(d f(q((n)(k j r 1 1 n))))

Sebut sebagai (disp (f 4)).

  • (p m n)menghitung m + n menggunakan pengurangan s(m + n == m - ((1 - 1) - n))
  • (j f g) menghasilkan (f f+1 f+2 ... g-1)
  • (r f g) menghasilkan (g-1 g-2 g-3 ... f)
  • (k m o f g n)menghasilkan satu baris dari matriks ular, dan kemudian recurve sendiri untuk baris berikutnya, hingga n baris dibuat. Argumen m, odiganti oleh j/ runtuk menghasilkan kenaikan atau penurunan baris. Argumen f, gmenjalankan indeks untuk mengetahui di baris mana kita berada.
  • (f n)panggilan (k j r 1 1 n)untuk memulai generasi.
kennytm
sumber
Kerja bagus. (BTW, itu lebih idiomatis hanya untuk melakukan (f 4)- dispitu tersirat.)
DLosc
1

PHP, @Ionut Botizan

Saat ini saya tidak punya ide yang lebih baik untuk memecahkan solusi yang asli.

Mendukung n <= 15

Ini adalah pertama kalinya saya menggunakan getopt. Mungkin bukan ide terbaik untuk menggunakan opsi sebagai input.

mulai dari baris perintah seperti ini

php hack.php -a=4

Regex asli

Tingkat 1:

^<[^'"\d{vV;<$]+$

Kombinasi huruf yang sangat bagus. Jangan ragu untuk memilih utas polisi.

Itu memblokir saya fungsi seperti - strrev - array_reverse - get_defined_vars

https://regex101.com/r/5rGTnw/2

Level 2:

^<[^'"\d{v;<$_~|&A-Z]+$

https://regex101.com/r/XtVl9G/1

Larutan

 <?php
    error_reporting(~E_NOTICE)&
    define(A,a.chr(E_COMPILE_ERROR-E_NOTICE+E_WARNING))
    &define(B,getopt(A,[])[a])&print_r(array_chunk(
    array_slice(
    array_merge(
    range(E_ERROR,B)
    ,range(E_WARNING*B,E_ERROR+B)
    ,range(E_WARNING*B+E_ERROR,(E_WARNING+E_ERROR)*B)
    ,range(E_PARSE*B,+E_ERROR+(E_WARNING+E_ERROR)*B)
    ,range(E_PARSE*B+E_ERROR,(E_PARSE+E_ERROR)*B)
    ,range((E_PARSE+E_WARNING)*B,+E_ERROR+(E_PARSE+E_ERROR)*B)
    ,range((E_PARSE+E_WARNING)*B+E_ERROR,(E_NOTICE-E_ERROR)*B)
    ,range(E_NOTICE*B,+E_ERROR+(E_NOTICE-E_ERROR)*B)
    ,range(E_NOTICE*B+E_ERROR,(E_NOTICE+E_ERROR)*B)
    ,range((E_NOTICE+E_WARNING)*B,E_ERROR+(E_NOTICE+E_ERROR)*B)
    ,range((E_NOTICE+E_WARNING)*B+E_ERROR,(E_NOTICE+E_WARNING+E_ERROR)*B)
    ,range((E_NOTICE+E_PARSE)*B,E_ERROR+(E_NOTICE+E_WARNING+E_ERROR)*B)
    ,range((E_NOTICE+E_PARSE)*B+E_ERROR,(E_NOTICE+E_PARSE+E_ERROR)*B)
    ,range((E_CORE_ERROR-E_WARNING)*B,E_ERROR+(E_NOTICE+E_PARSE+E_ERROR)*B)
    ,range((E_CORE_ERROR-E_WARNING)*B+E_ERROR,(E_CORE_ERROR-E_ERROR)*B)
    )
    ,B-B,B*B
    ),B)
    )
    ?>

Level 2:

<?php
define(aa,a.chr(ord(strtoupper(a))-ord(h)+ord(a)))and
define(bb,getopt(aa,[])[a])and
define(us,chr(ord(a)-true-true))and
(prin.t.(us).r)(
(arra.y.(us).chunk)(
(arra.y.(us).slice)(
(arra.y.(us).merge)(
range((ord(b)-ord(a)),bb)
,range((ord(c)-ord(a))*bb,(ord(b)-ord(a))+bb)
,range((ord(c)-ord(a))*bb+(ord(b)-ord(a)),((ord(c)-ord(a))+(ord(b)-ord(a)))*bb)
,range((ord(e)-ord(a))*bb,+(ord(b)-ord(a))+((ord(c)-ord(a))+(ord(b)-ord(a)))*bb)
,range((ord(e)-ord(a))*bb+(ord(b)-ord(a)),((ord(e)-ord(a))+(ord(b)-ord(a)))*bb)
,range(((ord(e)-ord(a))+(ord(c)-ord(a)))*bb,+(ord(b)-ord(a))+((ord(e)-ord(a))+(ord(b)-ord(a)))*bb)
,range(((ord(e)-ord(a))+(ord(c)-ord(a)))*bb+(ord(b)-ord(a)),((ord(e)-ord(a))-(ord(b)-ord(a)))*bb)
,range((ord(e)-ord(a))*bb,+(ord(b)-ord(a))+((ord(e)-ord(a))-(ord(b)-ord(a)))*bb)
,range((ord(e)-ord(a))*bb+(ord(b)-ord(a)),((ord(e)-ord(a))+(ord(b)-ord(a)))*bb)
,range(((ord(e)-ord(a))+(ord(c)-ord(a)))*bb,(ord(b)-ord(a))+((ord(e)-ord(a))+(ord(b)-ord(a)))*bb)
,range(((ord(e)-ord(a))+(ord(c)-ord(a)))*bb+(ord(b)-ord(a)),((ord(e)-ord(a))+(ord(c)-ord(a))+(ord(b)-ord(a)))*bb)
,range(((ord(e)-ord(a))+(ord(e)-ord(a)))*bb,(ord(b)-ord(a))+((ord(e)-ord(a))+(ord(c)-ord(a))+(ord(b)-ord(a)))*bb)
,range(((ord(e)-ord(a))+(ord(e)-ord(a)))*bb+(ord(b)-ord(a)),((ord(e)-ord(a))+(ord(e)-ord(a))+(ord(b)-ord(a)))*bb)
,range(((ord(q)-ord(a))-(ord(c)-ord(a)))*bb,(ord(b)-ord(a))+((ord(e)-ord(a))+(ord(e)-ord(a))+(ord(b)-ord(a)))*bb)
,range(((ord(q)-ord(a))-(ord(c)-ord(a)))*bb+(ord(b)-ord(a)),((ord(q)-ord(a))-(ord(b)-ord(a)))*bb)
)
,bb-bb,bb*bb
),bb)
)
?>
Jörg Hülsermann
sumber