Este es el hilo del policía. El hilo del ladrón está aquí .
Escriba un código que tome una entrada n
y cree una "matriz de serpiente" n-por-n.
Una matriz de serpiente es una matriz que sigue este patrón:
3 por 3:
1 2 3
6 5 4
7 8 9
y 4 por 4:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
El formato de salida exacto es opcional. Puede, por ejemplo [[1 2 3],[6 5 4],[7 8 9]]
, salida , o algo similar.
Debe proporcionar el nombre del idioma y una expresión regular que coincida completamente con su código. Puedes elegir qué tan detallada debe ser tu expresión regular. En el extremo, puede escribir una expresión regular que coincida con todas las cadenas posibles, en cuyo caso será muy fácil descifrar su código. También debe proporcionar la salida para n=4
que los ladrones sepan el formato exacto que ha elegido.
Puede usar uno de los sabores regex que están disponibles en regex101.com , o el sabor Ruby.
- PCRE (PHP)
- Javascript
- Pitón
- Golang
- Rubí
Debe especificar cuál está utilizando.
Notas:
- Debe admitir cualquier razonablemente grande
n
. Puede suponer que no desbordará el tipo de datos o la memoria. Si el tipo de datos predeterminado es enteros conn<=11
signo de 8 bits, puede suponer que si es un número entero de 8 bits sin signo, puede suponern<=15
. - Los ladrones deben hacer coincidir el formato de salida del envío, excepto los espacios iniciales / finales y las nuevas líneas, ya que el formato SE podría haber eliminado.
Criterio ganador:
El ganador será la presentación sin descifrar con la expresión regular más corta, medida en número de caracteres.
Si su publicación ha permanecido sin descifrar durante 7 días, puede publicar la solución deseada y marcar su envío como seguro.
fuente
.
.Respuestas:
05AB1E , agrietado por mbomb007
Esperemos que sea divertido de descifrar y no demasiado obvio.
Regex (PCRE):
Salida n = 4:
Solución original
fuente
\w
no. Puedes probarlo en regex101.{0,2}
a.?.?
-
última posición de la clase char entre corchetes ([+*\/%-]
) para no tener que escapar de ella.Python 2 , longitud 62, agrietada
Regex (PCRE)
Salida de muestra
fuente
Gelatina , longitud 6, agrietada
Regex (PCRE)
Salida de muestra
fuente
G
formatear la salida correctamente. Estoy cerca de resolver el resto, pero no puedo entender cómo revertir todos los demás elementos en una matriz con Jelly ...R, longitud 14 Agrietado por plannapus
Espero haber entendido bien esta expresión regular. Lo que intento decir es de 77 caracteres excepto
<space>
,#
,;
y[
. Lo probé aquíRegex
Salida de muestra n = 4
fuente
05AB1E , agrietado por tinta de valor
Vamos a subir un poco :)
Esperemos que sea un buen rompecabezas.
Regex (PCRE)
Salida n = 4
fuente
> <> , longitud 49, agrietado por Aaron
Regex (Javascript)
Salida de muestra (n = 4)
El formateo es un poco extraño, pero verificar la longitud del número lo hubiera hecho mucho más largo. Podría haber ido un poco por la borda en la expresión regular, ¡no estoy seguro!
Editar: También olvidé mencionar que uso la pila inicial (-v flag) para la entrada, no la entrada de pescado habitual. ¡Lo siento!
Código original
¡Aaron's es mucho más simple! La complejidad de mi código original se basa en la idea de usar
n[r]
cada enésimo número para voltear ese segmento (fila), luego imprimir todos los números a la vez al finalfuente
..
es más corto que.{2}
;)Ohm , agrietado
También es mi primer desafío para policías y ladrones, así que dime si hay problemas con este patrón (especialmente porque este es un lenguaje bastante desconocido).
Regex (PCRE)
Salida (n = 4)
fuente
.*
en su expresión regular, podría ser cualquier cosa. Entonces, si el idioma tiene comentarios, podrían escribir cualquier programa seguido de un comentario.PHP, 221 bytes ( agrietado )
Espero que sea lo suficientemente difícil.
Regex (PCRE): 16 bytes
Sin espacio, sin comentarios, sin uso de base64_decode. Que te diviertas.
Salida
Código original
fuente
base64_decode
porque su expresión regular no lo rechaza.6
, que podrían bloquearsebase64_decode
.C # net46 (agrietado)
( http://ideone.com/ works)
Regex PCRE sabor longitud 58 probado en regex101
Solo el método es regexed. El método devuelve una matriz 2d int [,] (int [4,4]) para una entrada n = 4. Si impreso se ve así:
Esta es mi primera entrada en algo como esto, avíseme si hice algo mal. No estoy tratando de ganar por la duración de la expresión regular con seguridad, solo estoy interesado en ver qué tan bien hice para evitar el agrietamiento :)
Código original:
fuente
QBasic, longitud de expresión regular 10 ( agrietada )
Regex
Debería funcionar en cualquier sabor regex, pero lo llamaremos sabor Python.
NOTA: Mi solución usa QBasic sin formato; después de formatear, el código no coincide con la expresión regular debido a espacios agregados. (Pero puedo decirte que ese es el único cambio que marca la diferencia.
([A-Z]+ ?. ?)+
Todavía funciona en la versión formateada).Para fines de prueba, utilicé QB64 con el formato de código desactivado (en Opciones> Diseño de código). Si no desea descargar algo, también puede ejecutar QBasic en línea en archive.org (pero allí no puede desactivar el formateo).
Salida de muestra
fuente
\w+\W
se puede dividir en\w*
y\w\W
. (\w*
esnull
(trivial) o\w+
(se coló fácilmente con un símbolo)).
no puede ser un carácter de palabra. Puede ser una letra minúscula o un dígito. De hecho, incluso podría ser una letra mayúscula, en el caso de que el último carácter del programa sea uno.Python 3, 55 bytes (Agrietado)
Sabor PCRE / Python / Golang.
(Recuerde que se requiere una coincidencia completa . Suponga
^
y$
cuando realice la prueba).Salida de muestra:
Solución original:
Debería haber recortado 4 bytes: p
fuente
)
en la segunda parte de la expresión regular(
está dentro de una clase de personaje que comienza despuésprint
y termina antes{48}
. Me tomó un tiempo verlo también. ;) (Para el caso, el par de paréntesis anterior también está dentro de una clase de caracteres.)dc , longitud de expresión regular 12 ¡ Agrietado por seshoumara!
Esta expresión regular es tan simple que no creo que el sabor de la expresión regular sea importante, debería funcionar en todos los ámbitos. (Tenga en cuenta el espacio después del # en la expresión regular).
He probado los cuatro sabores en regex101.com (PCRE / PHP, Javascript, Python y Golang), así como la versión Ruby en rubular.com. El programa dc coincide con la expresión regular en las cinco versiones de expresión regular.
El programa de CC toma su entrada en stdin y pone su salida en stdout.
Salida de muestra para la entrada 4 (hay un espacio final al final de cada línea):
Código original (agregado después de ser descifrado)
Esto ha sido resuelto por @seshoumara . Aquí está mi código previsto:
Explicación:
La suma en la parte superior de la pila ahora es el siguiente número que queremos imprimir:
Es fácil ver que eso es correcto si el número de fila es par, ya que la suma es solo i.
Para las filas impares, observe que i = d * (i / d) + (i% d) = d * (número de fila) + número de columna. De ello se deduce que la suma i + d-2 * (número de columna) -1 es d * (número de fila) + número de columna + d - 2 * (número de columna) - 1 = d * (número de fila + 1) - número de columna - 1, que es el número que queremos poner en la fila y columna indicadas para asegurar que estamos contando hacia atrás en las filas impares.
Volviendo a la explicación ahora:
fuente
#
omiten los caracteres y `` para que una solución más corta no pueda usar comentarios para alcanzar 59 bytes? Si es así, no es necesario, ya que en DC hay muchas maneras de agregar comandos que no cambian nada, por ejemplo.q
comandos repetitivos al final del guión.32P
es más corto que de[ ]n
todos modos.Bash, expresión regular 38, agrietada ( @kennytm )
Entrada:
Salida:
fuente
PHP
¡Espero que sea divertido! :RE
Salida (n = 4)
Nivel 1: PCRE (longitud = 17) ( Agrietado por Jörg Hülsermann )
{
no ... ¡no hay funciones anónimas!v
tan ... noeval()
!;
entonces ... ¡debe ser una sola declaración!<
no ... ¡Heredoc
ni bloques múltiples de PHP!@ JörgHülsermann tenía un enfoque interesante, pero no es lo que tenía en mente :). Por lo tanto, estoy introduciendo un nuevo nivel de dificultad (prometo que tengo el código que se ajusta a esto y no solo estoy jugando contigo):
Nivel 2: PCRE (longitud = 23) ( Agrietado por Jörg Hülsermann )
_~|&A-Z
! :)¡Que te diviertas!
LA SOLUCIÓN ORIGINAL
Por lo tanto, prohibir el
$
significado de las variables no se podía acceder de la manera regular, ¡pero eso no significa que no se puedan usar en absoluto! Todavía puede usarextract()/compact()
para importar / exportar variables al alcance actual. :)Sin embargo, hay un problema:
compact('x')['x']++
no funcionaría porque las variables en PHP se pasan por valor ... ¡con una excepción! Objetos.El resto es fácil.
0
y1
se generan fácilmente mediante la conversiónfalse
ytrue
alint
anteponiendo con el+
signoand
yor
desde&
y|
están prohibidos@
v
se puede generar mediante el usochr(ord('u') + 1)
, que se traduce en@chr(ord(u) + true)
uso de las soluciones alternativas anterioreschr(ord('a') - 2)
que se traduce enchr(ord(a) - true - true)
callable
tipo de PHP , que puede ser una cadena que contiene el nombre de la función. Por lo tanto, puede concatenar constantes indefinidas y cadenas de caracteres individuales generadas porord()
para construir el nombre de la función e invocarla así: searray_reverse()
convierte(a.rray.chr(ord(a)-true-true).re.chr(ord(u)+true).erse)()
(array
es una construcción de lenguaje, es por eso que se divide en constantes indefinidasa
yrray
)if ($n = $argv[1] and $i = 0) while ($n > $i++ and do_some and other_stuff or exit)
La lógica en el código legible para humanos sería:
Y la versión hostil que coincide con la expresión regular:
<?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)))))?>
fuente
V
. ¡Que te diviertas! :)(array_re.chr(ord(u)+true).erse)()
! :) (... o al menos podrías cuando_
se permitía)Rubí [agrietado]
Primer desafío de policías y ladrones. Espero no haberlo hecho demasiado fácil.
EDITAR: reemplazado
\g<1>
por(?1)
porque son evidentemente equivalentes en PCRE.Regex (PCRE)
Salida (n = 4)
(Devuelve una matriz de matrices. Es una lambda, por cierto, pero ¿tal vez eso revela demasiado?)
fuente
JavaScript (agrietado)
La primera vez que hago un desafío de policías y ladrones, con suerte lo haremos bien.
Regex (JavaScript)
Salida
Una matriz igual a:
fuente
$
al final de la expresión regular si el código en sí termina al final de la expresión regular. De lo contrario, podría hacer, por ejemplo,x=>x.toString().toString().toString().toString()
y luego lo que quiera después de eso..*
al principio lo habría hecho realmente fácil. Podría ser cualquier programa seguido de un comentario. Básicamente, no incluya.*
en su expresión regular.Swift, regex 25 (Agrietado)
Bien, veamos si tengo el truco de esto. Esta es mi primera publicación de policías y ladrones, ¡así que déjame saber si me equivoqué!
Regex
Utilicé el sabor de JavaScript en regex101.com
Salida de muestra
Código original
fuente
n
como entrada, pero requiere una variable codificada . Si eso es correcto, me temo que esto no es válido según el meta consenso.C - expresión regular de 42 caracteres de longitud - agrietada
Javascript regex como se usa en regex101 .
Adivinar esto será trivial ...
La salida está delimitada por tabuladores con
\n
después de cada línea.Mi solución, aquí los números enteros a 0 - 2 se obtuvieron a través de
t-t
,t/t
yt
:fuente
r
en tu expresión regular.Gelatina , longitud 14 agrietada
agrietado por Dennis
Python regex.
Agregué
m
nuevamente después de que lo dejé pasar./
(reducir rápido);de
P
(producto) a`
(mónada de díada rápida);m
(indexación de módulo);v
(eval dyad);de
Ḋ
(cola) aṫ
(cola); y€
(para cada rápido)Para una entrada de
4
salidas de mina:... porque formateé una lista de listas como una cuadrícula con
G
.fuente
Powershell, 23 bytes
Agrietado por Matt
Solución original
Toma entrada como argumento y salidas a stdout
Espero que esta expresión regular esté bien, no espero que sea demasiado difícil de descifrar, ya que no he ofuscado mucho, y la expresión regular da algunos buenos puntos de partida para llenar los vacíos, hay una cosa en el primer segmento Sin embargo, lo cual es muy poco común en el golf de código, lo que puede sorprender a alguien, creo que se requiere un partido no codicioso para hacer esto un poco más difícil.
Los primeros policías desafían de todos modos.
fuente
[Array]::Reverse()
en lugar de$array[9..0]
y$script:r
variables que son en su mayoría innecesaria.Röda 0.12 , longitud 19 (Agrietado por @KritixiLithos)
PCRE:
Salida de muestra (n = 4):
Código original:
Pruébalo en línea!
fuente
PHP 7 (seguro)
Código original
Segundo intento
Regex (PCRE): 29 bytes
Sin espacio, sin comentarios, sin uso de base64_decode.
¡Muchas funciones no están permitidas! guion bajo
Salida n = 11
Salida n = 4
Salida n = 3
fuente
MATL , longitud 12 (seguro)
Regex
Utiliza sabor Python:
Salida de ejemplo
Para
n=4
:Solución
Para ver cómo funciona esto, considere la entrada
n=4
.fuente
Gelatina , longitud 17 (seguro)
Python regex.
Apretando el nudo, esto prohíbe algunas cosas más útiles, para su ayuda aquí están los bytes prohibidos:
justo debajo de un tercio de ellos!
Para una entrada de
4
salidas de mina:... porque formateé una lista de listas como una cuadrícula con
G
.Una solución:
Pruébalo en línea! / regex101
El truco principal aquí es indexar en una lista ordenada lexicográficamente de las permutaciones de los números naturales hasta n 2 (¡
œ?
para evitar construir la lista de longitud n 2 ! ), Y dividir el resultado en trozos de longitud n . El índice mencionado anteriormente se encuentra formando su representación en el sistema de números factoriales que es formulado ya que la serpiente "sin cortar" se crea permutando elementos de una manera prescrita (esto puede convertirse fácilmente en un número conÆ¡
).La solución que presento utiliza
Ŀ
para hacer referencia a enlaces anteriores como mónadas (reemplazandoÑ
yÇ
), pero se$
podrían emplear múltiples seguidos para "en línea" estas funciones auxiliares. También usar
desdeḶ
yR
está prohibido.fuente
Pipa , regex longitud 3 (seguro)
La solución es un programa completo que toma n como argumento de línea de comandos. No utiliza ningún indicador de línea de comandos.
Regex (cualquier sabor)
Salida de muestra
Mi solución
Pruébalo en línea!
Estrategia
Aquí está el código que nos gustaría escribir:
Es decir:
a
aly
i
0 aa-1
i
es impar, invierta y, agreguei*a
a cada elemento, concatene un espacio con cada elemento e imprimaDificultades
Muchos comandos y variables en Pip usan letras, pero algunos importantes no:
,
y\,
)+
,-
,*
,%
,++
):
){}
)Cómo superamos esas limitaciones:
EN
umerate se puede usar en lugar de,
; solo necesitamos una cadena con el número de caracteres que queremos, y necesitamos extraer el primer elemento de cada sublista en una estructura como[[0 "H"] [1 "i"]]
.F
o bucles.y
variable con elY
operador ank.X
es la multiplicación de cadenas, yPU
sh (oPB
"push-back") concatenará una cadena a otra cadena en su lugar. Para tomar la longitud de una cuerda, podemosEN
umerarla y extraer el número correcto de la lista resultante._
.Detalles específicos
Los bloques de construcción de nuestro programa:
Distancia
Eso está
map-unpack(_, enumerate(repeat(space, a)))
en pseudocódigo. Map-unpack es como Pythonitertools.starmap
: dada una lista de listas, llama a una función en los elementos de cada sublista._
devuelve su primer argumento, por lo que_MU
solo obtiene el primer elemento de cada sublista. Por ejemplo, si a = 3:... que es lo mismo que
,a
.Rango inclusivo
No estoy seguro de que haya una manera de hacerlo
inclusive-range(1, a)
en una sola expresión, pero afortunadamente solo la necesitamos una vez, por lo que podemos construirla en lay
variable en tres pasos.En pseudocódigo,
yank(enumerate(repeat(space, a).push-back(space)))
:A continuación,
POy
saca el primer elementoy
y lo descarta, dejando[[1 " "] [2 " "] [3 " "]]
.Finalmente,
Es decir
yank(map-unpack(_, y))
: extraiga el primer elemento de cada sublista y vuelva a tirar de la lista resultantey
.y
es ahora[1 2 3]
.Longitud
En pseudocódigo,
pop(dequeue(enumerate(a.push-back(space))))
. La dificultad aquí es que enumerar solo nos da números hastalen(a)-1
, pero queremoslen(a)
. Entonces, primero empujamos un espacio haciaa
, alargándolo en un carácter, y luego tomamoslen-1
la nueva cadena.Mates
Ahora que tenemos una manera de tomar la longitud de las cadenas, podemos usar cadenas para multiplicar y sumar números:
El primero lo hace
sXaXb
para crear una cadena dea*b
espacios y luego toma la longitud del mismo; el segundo lo hacesXaPBsXb
para empujar una cadena deb
espacios a una cadena dea
espacios y luego toma la longitud de la misma.La parte buena es que todos los operadores que estamos usando aquí (
PU
,PO
,PB
,DQ
,EN
,X
) se pueden utilizar con_
las expresiones lambda forma. Entonces podemos mapear transformaciones matemáticas al rango inclusivo que construimos anteriormente.También tenemos que comprobar
i%2
dentro del bucle, pero esto se logra fácilmente con la función Y:iBA1
.Póngalos juntos
El código completo, con algunos espacios en blanco agregados:
fuente
-S
?a*b
es_V_VRVENCGaRLbPU1
,,a
es_MUENZGa
,aJ" "
esaJ_VRVk
ya@i
es algo así_V_VRVaZCGi
, aunque todavía no puedo resolver la precedencia sin paréntesis. Además, una vaga idea de que puedo obtener las permutaciones de un rango (creado como se indica arriba, usando el equivalente de,(a*a)
) y usarlo para seleccionar la permutación correcta para cada fila.CJam, PCRE, longitud 8, agrietado
Ejemplo de salida para 4:
fuente
CJam, PCRE, longitud 9, agrietado
Ejemplo de salida para 4:
Ahora también
{|}
están prohibidos.fuente
me
ymq
para aproximar el número, por lo que fue extremadamente largo (~ 20k bytes).Mathematica, regex longitud 11, no competitiva , agrietada
Sabor PCRE:
La solución correcta será una función que toma un número entero y devuelve el resultado como una lista anidada como:
fuente
tinylisp , regex longitud 3 ( agrietada )
Puede probar el código de tinylisp en ¡ Pruébelo en línea!
Regex (cualquier sabor)
Es hora de ir al hardcore.
Salida
La solución define una función que toma un argumento entero único y devuelve una lista como esta (para n = 4):
Mi código original usa la misma idea básica que se le ocurrió a Brian McCutchon, crear listas y evaluarlas. Aquí está en una línea:
Usé el método completo de construcción y evaluación una vez, para definir una macro
d'
que hace definiciones comod
, pero toma sus argumentos envueltos en una lista: así que en lugar de hacerlo(d x 42)
, puede hacerlo(d'(x 42))
. Luego fue solo una cuestión de reescribir cualquier lista en las definiciones que pudieran necesitar espacios en blanco:(q(a b))
->(c a(q(b)))
->(c(h(q(a)))(q(b)))
.fuente
Python3, longitud 162 (¡Agrietado!)
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\)$
Bien, lo sé, es bastante largo. Afortunadamente, no se descifrará en menos de una semana ...: 'D.
Creo que no cometí ningún error en ninguna parte, eso permitiría respuestas de escapatoria.
Formato de salida
Código original:
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)
fuente