C'est le fil du flic. Le fil du voleur est ici .
Ecrivez un code qui prend une entrée n
et crée une "matrice de serpent" n-by-n.
Une matrice de serpent est une matrice qui suit ce modèle:
3-sur-3:
1 2 3
6 5 4
7 8 9
et 4 par 4:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
Le format de sortie exact est facultatif. Vous pouvez par exemple une sortie [[1 2 3],[6 5 4],[7 8 9]]
, ou quelque chose de similaire.
Vous devez fournir le nom de la langue et une expression régulière qui correspond parfaitement à votre code. Vous pouvez choisir le niveau de détail de votre expression rationnelle. À la limite, vous pouvez écrire une regex qui correspond à toutes les chaînes possibles, auquel cas il sera très facile de déchiffrer votre code. Vous devez également fournir la sortie pour n=4
que les cambrioleurs sachent le format exact que vous avez choisi.
Vous pouvez utiliser l’une des saveurs regex disponibles sur regex101.com ou la saveur Ruby.
- PCRE (PHP)
- Javascript
- Python
- Golang
- Rubis
Vous devez spécifier lequel vous utilisez.
Remarques:
- Vous devez supporter toute taille raisonnable
n
. Vous pouvez supposer que le type de données ou la mémoire ne sera pas dépassé. Si le type de données par défaut est des entiers signés sur 8 bits, vous pouvez supposer quen<=11
s'il s'agit d'entiers non signés sur 8 bits, vous pouvez alors assumern<=15
. - Les voleurs doivent correspondre au format de sortie de la soumission, à l'exception des espaces de début / fin et des nouvelles lignes, car cela aurait pu être supprimé par le formatage SE.
Critère gagnant:
Le gagnant sera la soumission non fissurée avec la regex la plus courte, mesurée en nombre de caractères.
Si votre publication est restée ouverte pendant 7 jours, vous pouvez alors publier la solution et marquer votre soumission comme étant sûre.
la source
.
.Réponses:
05AB1E , fissuré par mbomb007
Si tout va bien amusant à craquer et pas trop évident.
Regex (PCRE):
Sortie n = 4:
Solution originale
la source
\w
no. Vous pouvez vous essayer à regex101.{0,2}
de.?.?
-
dernière position de la classe char entre crochets ([+*\/%-]
) pour ne pas y échapper.Python 2 , longueur 62, fissuré
Regex (PCRE)
Échantillon de sortie
la source
Gelée , longueur 6, fissurée
Regex (PCRE)
Échantillon de sortie
la source
G
de formater correctement la sortie. Je suis sur le point de résoudre le reste du problème, mais je ne vois pas comment renverser tous les autres éléments d'un tableau avec Jelly ...R, longueur 14 Fissuré par le plannapus
J'espère que j'ai bien compris cette regex. Ce que je veux dire est de 77 caractères à l' exclusion
<space>
,#
,;
et[
. Je l'ai testé iciRegex
Exemple de sortie n = 4
la source
05AB1E , fissuré par l'encre valeur
Lançons-le un cran :)
J'espère un joli casse-tête.
Regex (PCRE)
Sortie n = 4
la source
> <> , longueur 49, fissuré par Aaron
Regex (Javascript)
Exemple de sortie (n = 4)
Le formatage est un peu bizarre, mais vérifier la longueur du nombre aurait été beaucoup plus long. Aurait pu aller un peu trop loin sur la regex, pas sûr!
Edit: De plus, j’ai oublié de mentionner que j’utilise la pile initiale (indicateur -v) pour l’entrée, pas l’entrée fish habituelle. Désolé!
Code d'origine:
Aaron est beaucoup plus simple! La complexité de mon code d'origine repose sur l'idée d'utiliser
n[r]
chaque nième nombre pour retourner ce segment (ligne), puis d'afficher tous les nombres en même temps à la fin.la source
..
est plus court que.{2}
;)Ohm , fissuré
Également mon premier défi Cops and Robbers, alors dites-moi s’il ya des problèmes avec ce modèle (d’autant plus que c’est une langue assez inconnue).
Regex (PCRE)
Sortie (n = 4)
la source
.*
dans votre regex, cela pourrait être n'importe quoi. Ainsi, si la langue contient des commentaires, ils peuvent écrire n’importe quel programme suivi d’un commentaire.PHP, 221 octets ( fissuré )
J'espère que c'est assez difficile.
Regex (PCRE): 16 octets
Pas d'espace, pas de commentaires, pas d'utilisation de base64_decode. S'amuser.
Sortie
Code d'origine
la source
base64_decode
car votre expression rationnelle ne l’interdit pas.6
, ce qui pourrait bloquerbase64_decode
.C # net46 (fissuré)
( http://ideone.com/ works)
Regex PCRE flavour length 58 testé sur regex101
Seule la méthode est regexed. La méthode retourne un tableau 2d int [,] (int [4,4]) pour une entrée n = 4. Si imprimé ressemble à ceci:
Ceci est ma première entrée dans quelque chose comme ça, laissez-moi savoir si j'ai fait quelque chose de mal. N'essayant certainement pas de gagner par la longueur de la regex, je suis simplement intéressé de voir comment j'ai réussi à prévenir la fissuration :)
Code d'origine:
la source
QBasic, longueur de regex 10 ( fissuré )
Regex
Devrait fonctionner dans n'importe quelle saveur regex, mais nous l'appellerons saveur Python.
REMARQUE: Ma solution utilise QBasic non formaté. après le formatage, le code ne correspond pas à l'expression régulière à cause d'espaces ajoutés. (Mais je peux vous dire que c'est le seul changement qui fait la différence.
([A-Z]+ ?. ?)+
Fonctionne toujours sur la version formatée.)À des fins de test, j'ai utilisé QB64 avec le formatage du code désactivé (sous Options> Disposition du code). Si vous ne souhaitez pas télécharger quelque chose, vous pouvez également exécuter QBasic en ligne sur archive.org (mais vous ne pouvez pas désactiver le formatage).
Échantillon de sortie
la source
\w+\W
peut être divisée en\w*
et\w\W
. (\w*
est soitnull
(trivial) ou\w+
(facilement faufilé avec un symbole)).
mot ne peut pas être. Il peut s'agir d'une lettre minuscule ou d'un chiffre. En fait, il pourrait même s'agir d'une lettre majuscule, dans le cas où le dernier caractère du programme en est un.Python 3, 55 bytes (Cracked)
PCRE / Python / Golang flavor.
(Be reminded that Full match is required. Assume
^
and$
when testing.)Sample output:
Original solution:
Should have trimmed 4 bytes :p
la source
)
in the second part of the regex(
is inside a character class starting afterprint
and ending before{48}
. Took me a while to see it too. ;) (For that matter, the earlier pair of parentheses are also inside a character class.)dc, Regex length 12 Cracked by seshoumara!
Cette expression régulière est assez simple pour que je ne pense pas que la saveur de la regex importe - elle devrait fonctionner à tous les niveaux. (Notez l'espace après le # dans la regex.)
J'ai testé les quatre versions sur regex101.com (PCRE / PHP, Javascript, Python et Golang), ainsi que la version Ruby sur rubular.com. Le programme dc correspond à la regex dans les cinq versions de regex.
Le programme dc prend son entrée sur stdin et met sa sortie sur stdout.
Exemple de sortie pour l'entrée 4 (il y a un espace de fin à la fin de chaque ligne):
Code original (ajouté après avoir été craqué)
Ceci a été craqué par @seshoumara . Voici mon code prévu:
Explication:
La somme au sommet de la pile est maintenant le prochain nombre que nous voulons imprimer:
Il est facile de voir que c'est correct si le numéro de ligne est pair, puisque la somme n'est que i.
For odd-numbered rows, notice that i = d*(i/d)+(i%d) = d * (row number) + column number. It follows that the sum i+d-2*(column number)-1 is d * (row number) + column number + d - 2*(column number)- 1 = d * (row number + 1) - column number - 1, which is the number we want to put in the indicated row and column to ensure that we're counting backwards in the odd-numbered rows.
Returning to the explanation now:
la source
#
and ` ` omitted so that a shorter solution can't use comments to reach 59 bytes? If so, there's no need since in dc there are so many ways to add commands that don't change anything, for ex. repeatingq
commands at the end of the script.32P
is shorter than[ ]n
anyway.Bash, regex length 38, cracked (@kennytm)
Input:
Output:
la source
PHP
I hope this will be a fun one! :D
Output (n=4)
Level 1: PCRE (length=17) (Cracked by Jörg Hülsermann)
{
so... no anonymous functions!v
so... noeval()
!;
so... it must be a single statement!<
so... noHeredoc
nor multiple PHP blocks!@JörgHülsermann had an interesting approach, but it's not what I had in mind :). Therefore, I'm introducing a new level of difficulty (I promise I have the code that fits this and I'm not just messing with you):
Level 2: PCRE (length=23) (Cracked by Jörg Hülsermann)
_~|&A-Z
! :)Have fun!
THE ORIGINAL SOLUTION
So, forbidding the
$
meant the variables couldn't be accessed the regular way, but that doesn't mean they can't be used at all! You can still useextract()/compact()
to import/export variables into the current scope. :)However, there's a gotcha:
compact('x')['x']++
wouldn't work because variables in PHP are passed by value... with one exception! Objects.The rest is easy.
0
and1
are easily generated by convertingfalse
andtrue
toint
by prepending them with the+
signand
andor
since&
and|
are forbidden@
v
can be generated by usingchr(ord('u') + 1)
, which translates to@chr(ord(u) + true)
using the above workaroundschr(ord('a') - 2)
which translates tochr(ord(a) - true - true)
callable
type, which can be a string containing the name of the function. So, you can concatenate undefined constants and single character strings generated byord()
to build the name of the function and invoke it like this:array_reverse()
becomes(a.rray.chr(ord(a)-true-true).re.chr(ord(u)+true).erse)()
(array
is a language construct, that's why it's split into the undefined constantsa
andrray
)if ($n = $argv[1] and $i = 0) while ($n > $i++ and do_some and other_stuff or exit)
The logic in human readable code would be:
And the unfriendly version that matches the 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)))))?>
la source
V
. Have fun! :)(array_re.chr(ord(u)+true).erse)()
! :) (...or at least you could when the_
was allowed)Ruby [cracked]
First Cops and Robbers challenge. Hope I didn't make this too easy.
EDIT: replaced
\g<1>
with(?1)
because they're evidently equivalent in PCRE.Regex(PCRE)
Output (n=4)
(Returns an array of arrays. It's a lambda, BTW, but maybe that gives away too much?)
la source
JavaScript (Cracked)
First time doing a Cops and Robbers challenge, hopefully doing it right.
Regex (JavaScript)
Output
An array equal to:
la source
$
on the end of the regex if the code itself ends at the end of the regex. Otherwise I could do e.g.x=>x.toString().toString().toString().toString()
and then whatever I want after that..*
at the beginning would've made it really easy. It could be any program followed by a comment. Basically, don't include.*
in your regex.Swift, regex 25 (Cracked)
Right, let's see if I've got the hang of this. This is my first cops and robbers post, so lemme know if I've messed up!
Regex
I used javascript flavour on regex101.com
Sample Output
Original Code
la source
n
as an input, but requires a hard coded variable. If that's correct then I'm afraid this is not valid according to meta consensus.C – regex of 42 characters in length – cracked
Javascript regex as used in regex101.
Guessing this will be trivial...
Output is tab-delimited with
\n
after each line.My solution, here integers 0 - 2 were obtained via
t-t
,t/t
, andt
:la source
r
in your regex.Jelly, length 14 cracked
cracked by Dennis
Python regex.
Added
m
back in again after I let it slip./
(reduce quick);from
P
(product) to`
(monad from dyad quick);m
(modulo indexing);v
(eval dyad);from
Ḋ
(dequeue) toṫ
(tail); and€
(for each quick)For an input of
4
mine outputs:...because I formatted a list of lists as a grid with
G
.la source
Powershell, 23 Bytes
Cracked By Matt
Original Solution:
Takes input as argument and outputs to stdout
Hopefully this regex is OK, I don't expect this being too difficult to crack, as I haven't obfuscated much of it, and the regex gives a good few starting points to fill in the gaps, there's one thing in the first segment which is very uncommon in code golf though, which may catch someone out, I think a non-greedy match is required there to make this a bit tougher.
First cops challenge anyway.
la source
[Array]::Reverse()
instead of$array[9..0]
and$script:r
variables which are mostly needless.Röda 0.12, length 19 (Cracked by @KritixiLithos)
PCRE:
Sample output (n=4):
Original code:
Try it online!
la source
PHP 7 (Safe)
Original Code
Second Try
Regex (PCRE): 29 Bytes
No space, No comments, no use of base64_decode.
Many functions are not allowed! underscore
Output n=11
Output n=4
Output n=3
la source
MATL, length 12 (safe)
Regex
Uses Python flavour:
Example output
For
n=4
:Solution
To see how this works, consider input
n=4
.la source
Jelly, length 17 (safe)
Python regex.
Tightening the knot, this bans some more useful things, for your aid here are the banned bytes:
just under a third of them!
For an input of
4
mine outputs:...because I formatted a list of lists as a grid with
G
.A solution:
Try it online! / regex101
The main trick here is to index into a lexicographically sorted list of the permutations of the natural numbers up to n2 (using
œ?
to avoid building the list of length n2!), and to split the result into chunks of length n. The aforementioned index is found by forming its representation in the factorial number system which is formulaic since the "unsliced" snake is created by permuting elements in a prescribed manner (this may be readily converted to a number withơ
).The solution I present uses
Ŀ
to reference previous links as monads (replacingÑ
andÇ
), but multiple$
in a row could be employed instead to "inline" these helper functions. It also usesr
sinceḶ
andR
are banned.la source
Pip, regex length 3 (safe)
The solution is a full program that takes n as a command-line argument. It does not use any command-line flags.
Regex (any flavor)
Sample output
My solution
Try it online!
Strategy
Here's the code we would like to write:
That is:
a
iny
i
from 0 througha-1
i
is odd, reverse y, addi*a
to each element, concatenate a space to each element, and printDifficulties
A lot of commands and variables in Pip use letters, but some important ones don't:
,
and\,
)+
,-
,*
,%
,++
):
){}
)How we get around those limitations:
EN
umerate can be used in place of,
; we just need a string with the number of characters we want, and we need to extract the first element of each sublist in a structure like[[0 "H"] [1 "i"]]
.F
or loops.y
variable with theY
ank operator.X
is string multiplication, andPU
sh (orPB
"push-back") will concatenate a string to another string in-place. To take the length of a string, we canEN
umerate it and extract the right number from the resulting list._
.Specifics
The building blocks of our program:
Range
That's
map-unpack(_, enumerate(repeat(space, a)))
in pseudocode. Map-unpack is like Python'sitertools.starmap
: given a list of lists, it calls a function on the items of each sublist._
returns its first argument, so_MU
just gets the first item of each sublist. For example, if a = 3:... which is the same as
,a
.Inclusive range
I'm not sure there's a way to do
inclusive-range(1, a)
in a single expression, but fortunately we only need it once, so we can construct it in they
variable in three steps.In pseudocode,
yank(enumerate(repeat(space, a).push-back(space)))
:Next
POy
pops the first item fromy
and discards it, leaving[[1 " "] [2 " "] [3 " "]]
.Finally,
That is,
yank(map-unpack(_, y))
: extract the first element of each sublist and yank the resulting list back intoy
.y
is now[1 2 3]
.Length
In pseudocode,
pop(dequeue(enumerate(a.push-back(space))))
. The difficulty here is that enumerate only gives us numbers up tolen(a)-1
, but we wantlen(a)
. So we first push a space toa
, lengthening it by one character, and then takelen-1
of the new string.Math
Now that we have a way to take the length of strings, we can use strings to do multiplication and addition of numbers:
The first does
sXaXb
to create a string ofa*b
spaces and then takes the length of it; the second doessXaPBsXb
to push a string ofb
spaces to a string ofa
spaces and then takes the length of it.The nice part is that all the operators we're using here (
PU
,PO
,PB
,DQ
,EN
,X
) can be used with_
to form lambda expressions. So we can map mathematical transformations to the inclusive range we constructed earlier.We also need to check
i%2
inside the loop, but this is easily accomplished with bitwise AND:iBA1
.Put them together
The full code, with some added whitespace:
la source
-S
?a*b
is_V_VRVENCGaRLbPU1
,,a
is_MUENZGa
,aJ" "
isaJ_VRVk
, anda@i
is something like_V_VRVaZCGi
, though I can't quite work out the precedence without parentheses yet. Also, a vague idea that I can get the permutations of a range (created as above, using the equivalent of,(a*a)
) and use that to select the correct permutation for each row.CJam, PCRE, length 8, cracked
Example output for 4:
la source
CJam, PCRE, length 9, cracked
Example output for 4:
Now
{|}
are banned, too.la source
me
andmq
to approximate the number, so it was like, extremely (~20k bytes) long.Mathematica, regex length 11, non-competing, cracked
PCRE flavour:
The correct solution will be a function which takes an integer and returns the output as a nested list like:
la source
tinylisp, regex length 3 (cracked)
You can test tinylisp code at Try it online!
Regex (any flavor)
Time to go hardcore.
Output
The solution defines a function that takes a single integer argument and returns a list like this (for n=4):
My original code uses the same basic idea Brian McCutchon came up with, building lists and eval'ing them. Here it is in one line:
I used the full construct-and-eval method once, to define a macro
d'
that makes definitions liked
, but takes its arguments wrapped in a list: so instead of(d x 42)
, you can do(d'(x 42))
. Then it was just a matter of rewriting any lists in the definitions that might need whitespace:(q(a b))
->(c a(q(b)))
->(c(h(q(a)))(q(b)))
.la source
Python3, length 162 (Cracked!)
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\)$
Okay, I know, it's quite long. Fortunately, it won't be cracked in under a week... :'D.
I think I didn't make a mistake anywhere, that would allow loophole-y answers.
Output format
Original code:
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)
la source