Desafío de reescritura abstracta (policías)

27

Este es un desafío de como el . Este es el hilo conductor de la policía; El hilo de los ladrones está aquí.

Policías

Su tarea es definir un sistema de reescritura abstracta en el que la accesibilidad de una palabra a otra sea difícil de determinar. Preparará las siguientes cosas:

  1. Un conjunto de símbolos, llamado alfabeto. (Puede utilizar caracteres Unicode para estos, pero no utilice espacios en blanco o símbolos que sean difíciles de distinguir entre sí).

  2. Una cadena fuente compuesta de símbolos de su alfabeto.

  3. Una cadena objetivo compuesta de símbolos de su alfabeto.

  4. Un conjunto de reglas de reescritura utilizando caracteres de su alfabeto. (Consulte a continuación la definición de una regla de reescritura).

  5. Una prueba que muestra si su cadena de origen se puede convertir en su cadena de destino mediante la aplicación sucesiva de sus reglas de reescritura. Esta prueba puede consistir en una secuencia real de pasos de reescritura, o una prueba matemática de que dicha secuencia debe existir, o una prueba matemática de que dicha secuencia no existe.

Publicará los primeros cuatro de estos, manteniendo la prueba en secreto; los ladrones intentarán descifrar su respuesta proporcionando su propia prueba de que su cadena de destino puede o no ser alcanzada desde su cadena de origen. Si su envío no se resuelve en dos semanas , puede marcarlo como seguro y editarlo en su prueba.

Las presentaciones se puntuarán de acuerdo con el número de caracteres en sus reglas de reescritura y sus cadenas de origen y destino, como se detalla a continuación. El ganador será la presentación sin descifrar con la puntuación más baja.

¿Qué es una regla de reescritura?

Una regla de reescritura es simplemente un par de cadenas en su alfabeto. (Cualquiera de estas cadenas puede estar vacía.) Una aplicación de una regla de reescritura consiste en encontrar una subcadena que sea igual a la primera cadena del par y reemplazarla por la segunda.

Un ejemplo debería aclarar esto:

Supongamos que el alfabeto es A, By C; la cadena de origen es " A"; la cadena de destino es " C" y las reglas de reescritura son

A:B
B:BB
B:A
AA:C

entonces la cadena de destino es accesible de la siguiente manera:

A
B   (using rule 1)
BB  (using rule 2)
AB  (using rule 3)
AA  (using rule 3)
C   (using rule 4)

Tanteo

Tu puntaje será

  • la longitud de su cadena de origen,
  • más la longitud de tu cadena objetivo,
  • más la longitud de todas las cadenas incluidas en sus reglas de reescritura,
  • más un punto extra por cada regla de reescritura.

Si escribe sus reglas de reescritura con un separador de dos puntos como se indica arriba, esta es solo la longitud total de todas las reglas de reescritura (incluido el separador), más las longitudes de las cadenas de origen y destino. Una puntuación más baja es mejor. El número de caracteres distintos en su alfabeto se usará para romper los lazos, y menos serán mejores.

Generosidad

Me gustaría ver respuestas que realmente vayan para puntuaciones bajas. Otorgaré 200 repeticiones a la primera respuesta que obtenga menos de 100 puntos en este desafío y no se quiebre.

Nathaniel
fuente
3
Bah, no lo suficientemente expresivo para el rompecabezas MU .
Neil
1
@Neil técnicamente son tan expresivos como las máquinas de Turing: podría hacer una versión del rompecabezas MU, pero necesitaría un montón de símbolos adicionales y reglas de transición para implementar la Mx -> Mxxregla, por lo que terminaría mucho más complicado que el de Hofstadter original.
Nathaniel

Respuestas:

9

326 puntos - Agrietado por jimmy23013

El nivel es Picokosmos # 13 de Aymeric du Peloux (con una modificación trivial). Traté de encontrar un nivel de buen gusto que pudiera implementarse con "cajas" y "paredes" siendo el mismo personaje. Para este nivel, fue posible haciendo que el estrangulador central tuviera dos columnas de ancho en lugar de una.

Las cadenas de reglas / inicial / objetivo podrían jugarse un poco más, pero esto es solo por diversión.

Cadena inicial:

___##___####_____##_#_#_##_#_!####______##_#####__####_#_######__###__

Cadena de destino:

___##___####_____##_#_#_##_#_#####____!__#_#####__####_#_######__###__

Reglas:

_wW:!
_<:<_
Vv_:!
V_:_V
R:>>>>>>>>>>>>>
V#:#V
#w<:w#
>v_:_v
_wX:#
_!:!_
!:wLW_
L:<<<<<<<<<<<<<
#W:W#
!#_:_!#
_w<:w_
#<:<#
!:_VRv
>v#:#v
Uv_:#
_W:W_
_X:X_
>#:#>
#X:X#
U_:_U
Vv#:!URv
#wW:wLX!
>_:_>
!_:_!
_#!:#!_
U#:#U
Feersum
fuente
Agrietado.
jimmy23013 17/0318
8

171 puntos, agrietados por HyperNeutrino

Fuente: YAAAT

Objetivo: VW626206555675126212043640270477001760465526277571600601

Reglas:

T:AAAAAT
T:BBU
U:BU
U:ZW
AB:BCA
CB:BC
AZ:Z
CZ:ZC
YB:Y
YZ:V
V:VD
DCC:CD
DCW:W+
DW:W_
___:0
__+:1
_+_:2
_++:3
+__:4
+_+:5
++_:6
+++:7

Solo algo obvio que hacer. La secuencia real de pasos de reescritura probablemente no encajará en una respuesta SE.

jimmy23013
fuente
Debo haber vacilado en alguna parte porque solo puedo llegar a VWxdonde xse forma a partir de cualquier cadena binaria de _(0) y +(1) que evalúe a 10*n+6(incluido el líder _; n= entero no negativo), pero el xdado ( 626...601) se forma a partir de un binario que evalúa a 10*n+3(para un gran n).
Jonathan Allan
¿Cosas como esta son solucionables por pura lógica?
VortexYT
@HyperNeutrino Drat, esperaba que tu crack se hubiera expuesto donde había tropezado.
Jonathan Allan
4

139 puntos (seguro-ish)

Tenía la intención de que esta respuesta fuera descifrada, y user202729 básicamente la resolvió en los comentarios, pero nadie publicó una respuesta en el hilo de los ladrones, así que la marco como "segura" e incluyo mi prueba a continuación.

(Evidentemente, estas cosas son mucho más fáciles de hacer que de descifrar. Sin embargo, nadie ha intentado obtener un puntaje realmente bajo, y podría haber más diversión al final de las cosas, si este desafío alguna vez despega. )


Aquí hay una respuesta propia. Es potencialmente muy difícil, pero debería ser fácil si averigua de dónde viene.

alfabeto: ABCDEⒶⒷⒸⒹⒺⒻ⬛⚪️️🎂←→

fuente: ←A→

objetivo: ←🎂→

Reglas: (el espacio en blanco no es significativo)

← : ←⬛
→ : ⬛→
A⬛ : ⚪B
A⚪ : ⚪Ⓑ
⬛Ⓐ : E⚪
⚪Ⓐ : Ⓔ⚪
B⬛ : ⚪C
B⚪ : ⚪Ⓒ
Ⓑ⬛ : 🎂
Ⓑ⚪ : ⚪Ⓕ
⬛C : D⚪
⚪C : Ⓓ⚪
Ⓒ⬛ : ⬛B
Ⓒ⚪ : ⬛Ⓑ
D⬛ : ⚪E
D⚪ : ⚪Ⓔ
⬛Ⓓ : C⬛
⚪Ⓓ : Ⓒ⬛
⬛E : A⚪
⚪E : Ⓐ⚪
Ⓔ⬛ : ⬛D
Ⓔ⚪ : ⬛Ⓓ
Ⓕ⬛ : ⚪C
Ⓕ⚪ : ⚪Ⓒ
⬛🎂 : 🎂
⚪🎂 : 🎂
🎂⬛ : 🎂
🎂⚪ : 🎂

Aquí hay una versión ASCII , en caso de que unicode no se muestre bien para todos.


Prueba

Esto es equivalente al mejor contendiente actual para un castor ocupado de seis estados . Un castor ocupado es una máquina de Turing que se detiene después de mucho tiempo. Debido a esto, la cadena de origen ←A→se puede transformar en la cadena de destino ←🎂→, pero solo después de más de 7*10^36534pasos, lo que llevaría mucho más tiempo que la edad del universo para cualquier implementación física.

La cinta de la máquina Turing está representada por los símbolos (0) y (1). Las normas

← : ←⬛
→ : ⬛→

significa que los extremos de la cinta siempre se pueden extender con más ceros. Si el cabezal de la máquina de Turing alguna vez se acerca a un extremo de la cinta, podemos aplicar una de estas reglas, lo que nos permite pretender que la cinta es infinita, y comienza con todos los ceros. (Los símbolos y nunca se crean o destruyen, por lo que siempre están en los extremos de la cinta).

La cabeza de la máquina de Turing se representa con los símbolos ABCDEⒶⒷⒸⒹⒺⒻy 🎂. Asignifica que la cabeza está en estado Ay el símbolo debajo de la cabeza es un (0), mientras que Ⓐ significa que está en estado Ay el símbolo debajo de ella es un (1). Esto continúa para los otros estados, con la letra dentro de un círculo que representa un 1 debajo de la cabeza y la versión no circulada que representa un 0. (No hay símbolo Fporque sucede que la cabeza nunca termina en estado Fcon un 1 debajo).

El estado 🎂es el estado de detención. Tiene las reglas especiales

⬛🎂 : 🎂
⚪🎂 : 🎂
🎂⬛ : 🎂
🎂⚪ : 🎂

Si alguna vez se alcanza el estado de detención, podemos aplicar repetidamente estas reglas para "absorber" toda la cinta (incluidos los ceros adicionales que surgieron al extender la cinta más de lo necesario), dejándonos en el estado ←🎂→. Por lo tanto, el problema de accesibilidad se reduce a si 🎂alguna vez se alcanzará el estado .

Las reglas restantes son las reglas de transición para la máquina Turing. Por ejemplo, las reglas

A⬛ : ⚪B
A⚪ : ⚪Ⓑ

puede leerse como "si la máquina está en estado A y hay un cero debajo de la cabeza, luego escriba un 1, cambie al estado B y muévase a la derecha". Mover a la derecha requiere dos reglas, porque la celda de la cinta a la derecha podría contener un , en cuyo caso la máquina debería entrar en estado B, o la celda podría contener un , en cuyo caso debería entrar en estado , ya que hay una debajo.

Similar,

⬛Ⓓ : C⬛
⚪Ⓓ : Ⓒ⬛

significa "si la máquina está en estado D y hay un 1 debajo de la cabeza, luego escriba un 0, cambie al estado C y muévase a la izquierda".

La máquina Turing utilizada fue descubierta por Pavel Kropitz en 2010. Aunque a menudo se menciona en el contexto de castores ocupados, su tabla de transición real es un poco difícil de rastrear, pero se puede encontrar, por ejemplo, aquí . Se puede escribir como

    0   1

A   1RB 1LE
B   1RC 1RF
C   1LD 0RB
D   1RE 0LC
E   1LA 0RD
F   1RH 1RC

que puede leerse como "si la máquina está en el estado A y hay un cero debajo de la cabeza, luego escriba un 1, cambie al estado B y muévase a la derecha", y así sucesivamente. Debe ser sencillo, si es laborioso, verificar que cada entrada de esta tabla corresponda a un par de reglas como se describió anteriormente.

La única excepción es la regla 1RHque ocurre cuando la máquina está en el estado F sobre un 0, porque parecía bastante inútil hacer que la máquina escribiera un 1 y se moviera hacia la derecha cuando podría detenerse inmediatamente tan pronto como entrara en el estado F sobre un 0. Así que cambié la regla que habría sido

Ⓑ⬛ : ⚪F

dentro

Ⓑ⬛ : 🎂

Por eso no hay símbolo Fen el alfabeto. (Hay otros 'golfs' que podría haber hecho, pero no quería ocultarlo demasiado).

Eso es básicamente todo. Se puede acceder a la cadena de destino desde la cadena de origen, pero solo después de un número ridículo de pasos.

Un dato más divertido: si hubiera usado

←A⚪⚪→

como punto de partida, entonces no se necesitarían 7*10^36534pasos para detenerlos, sino 10^10^10^10^18705352pasos, que es un número muy grande.

Nathaniel
fuente
1
Esto parece una implementación de una máquina de turing
NieDzejkob
1
Creo que esta es la "máquina de Turing actual de 6 estados y 2 símbolos" que figura aquí . Ahora alguien solo necesita demostrar que son equivalentes.
user202729
1
Intérprete ineficiente .
user202729
1
@ user202729 ¿Por qué no publicar como respuesta?
jimmy23013
3

48 puntos, agrietados por bb94

Alfabeto: abc
Fuente: cbaabaabc
Destino: cbacbcabc
Reescribir reglas:

ab: ba
bc: cb
ca: ac
ab: cc
bc: aa
ca: bb
boboquack
fuente
Agrietado
bb94
3

287 puntos, seguro

Fuente: YAAT

Objetivo:

VW644507203420630255035757474755142053542246325217734264734527745236024300376212053464720055350477167345032015327021403167165534313137253235506613164473217702550435776242713

Reglas:

T:AAAAAT
T:BBU
U:BU
U:ZW
AB:BCA
CB:BC
AZ:Z
CZ:ZC
YB:Y
YZ:V
V:VD
DCC:CD
DCW:W+
DW:W_
___:0
__+:1
_+_:2
_++:3
+__:4
+_+:5
++_:6
+++:7

Descubrí que openssl es mucho más fácil de usar que gpg para este propósito.


Vea el crack de HyperNeutrino a la versión más débil. En este caso, el número de Cs es:

22030661124527021657244569669713986649562044939414344827127551659400215941242670121250289039666163853124410625741840610262419007778597078437731811349579211

Y los factores primos son:

220040395270643587721928041668579651570457474080109642875632513424514300377757
100120985046540745657156603717368093083538096517411033964934953688222272684423

El primer número mod 5 = 2, por lo que es posible obtener la cadena final.

jimmy23013
fuente
Suponiendo que esto es un semiprime aleatorio de 512 bits, las PC actuales tardarán semanas o meses en factorizar esto
didgogns
Ahora es seguro
user202729
2

402 puntos

Alfabeto: abcdefghijklmnopqrstu
Fuente: abcdoi
Destino: ioabcdnnnnnnnnnnnnnnnnnn
Reescribir reglas:

ab: ba
ba: ab
ac: ca
ca: ac
Agrega un
da: anuncio
bc: cb
cb: bc
bd: db
db: bd
cd: dc
dc: cd
naan
nb: bn
nc: cn
nd: dn
nm: mn
nj: jn
aoi: eag
boi: ebg
coi: ecg
doi: edg
ae: ha
ser: hb
ce: hc
de: hd
ioa: kam
iob: kbm
ioc: kcm
iod: kdm
ma: aj
mb: bj
mc: cj
md: dj
dg: rdnnnnnnnnnn
cg: qcnnnnn
bg: pbnn
ag: fan
cr: fc
br: fb
ar: fa
bq: fb
aq: fa
ap: fa
er: io
eq: io
ep: io
ef: io
hf: io
kd: dunnnnnnnnnn
kc: ctnnnnn
kb: bsnn
ka: aln
uc: cl
ub: bl
ua: al
tb: bl
ta: al
sa: al
um: oi
tm: oi
sm: oi
lm: oi
lj: oi
:norte

La última regla le permite crear tantos ncorreos electrónicos como necesite.

Por feo que parezca, en realidad es bastante agradable, de una forma u otra ...

boboquack
fuente
* En aoi:eogse eogsupone que es eag?
Kritixi Lithos
@Cowsquack sí, gracias por recoger eso
boboquack
2

1337 puntos

Definitivamente no es competitivo, y tardó demasiado en crear (espero no haberme equivocado)

Insinuación:

intente comprender la cadena fuente antes de mirar las reglas

Alfabeto: ABEILRSTabcdefijlr

Fuente: SIbbbbbbbdbffacebbfadbdbeecddfaeebddcefaddbdbeeecddaaaaadfaeeebdddcefbbfadbdbdbeeecdddfaeeebdddcefaddbdbeeecddaaaadfaeeebdddcefbfadbdbdbeeecdddfaeeebdddcbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdceeeeefadddddbdbeeeeeecddddddfaeeeeeebddddddceeefaddaeecdddbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdcefaefaeeebdddcdcefaceeaaaceefacdffacebdceeeeefadddddbdbeeeeeecddddddfaeeeeeebddddddceeefaddaeecdddbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdcefaefaeeebdddcdcefaceeaaaaceefacdffacebdcecefacE

Objetivo: SE

Reescribir reglas:

Ab: bA
bA: Ab
Aa: aA
aA: Aa
Agrega un
dA: anuncio
Ae: eA
eA: Ae
Af: fA
fa: Af
Ac: cA
cA: Ac
IA: AI
AI: IA
Bb: bB
bB: Bb
Ba: aB
aB: Ba
Bd: dB
eB: Be
Ser: eB
dB: Bd
Bf: fB
fB: Bf
Bc: cB
cB: Bc
E: BE
S: SB
Ib: AbI
AIa: aI
IdB: dBI
BIe: eIB
AIf: AfI
BIfB: BfiLB
Lb: bL
La: aL
Le: eL
Ld: dL
Lf: fL
Lc: cL
ib: bi
ia: ai
es decir: ei
id: di
si: fil
lb: bl
la: al
le: el
ld: dl
lf: fl
lc: cl
icl: ci
icL: cI
Ic: jRc
bj: jb
aj: ja
dj: jd
ej: je
br: rb
ar: ra
dr: rd
er: re
fr: rf
cr: rc
bR: Rb
aR: Ra
dR: Rd
eR: Re
fR: Rf
cR: Rc
cj: jrc
fjr: jf
fjR: si
ESO
TB: T
BT: T
bT: T
aT: T
dT: T
eT: T
fT: T
cT: T
T:
ManfP
fuente
2

Tenga en cuenta que cometí algunos errores inicialmente, por lo que se cambió la puntuación. Sin embargo, la idea es la misma. Espero que no haya más errores ahora.


154 puntos

Alfabeto: P.!xABC[{mD<
Fuente: [x!P.P...P..P.P....P..P.P.....P.P....P......P.P..P...P.P...Pm(61 caracteres)
Objetivo: {CCCCC<(hay 5 Cs, entonces 7 caracteres)

Reglas:

P.  →  .PP
!.  →  !
x   →  AxB
x   →  
AB  →  BAC
CB  →  BC
CA  →  AC
[B  →  [
[A  →  {
{A  →  {
!   →  !m
mP  →  PmD
Dm  →  mD
DP  →  PD
!P  →  ?
?P  →  ?
!m  →  <
<m  →  <
C<D →  <

Hay 19 reglas, número total de caracteres = 67.

usuario202729
fuente
1

106 puntos - agrietados por HyperNeutrino

Alfabeto: ABCDEFGHIJ

Fuente: FIABCJAGJDEHHID

Objetivo: F

Reescribir reglas:

B:DCIE
A:IFBA
D:EEFJ
C:GFIC
E:HBJG
F:FEBG
G:HFCJ
H:DIGB
I:FCAH
J:BHEA

EJGI:FF
FFF:J
FF:E
EE:D
DDEA:FI
I:F

Bien, HyperNeutrino ha demostrado que esto no tiene solución. Sin embargo, hay otra solución para esto.


Tomar:

I E C D H G J A F B
1 2 3 4 5 6 7 8 9 10

El valor de la fuente es par. El valor del objetivo es impar. Si tomamos cada lado, sumamos el valor y llevamos el valor a mod 2, los valores se mantienen igual. Por lo tanto, esto no se puede lograr.

VortexYT
fuente
agrietado
HyperNeutrino
Si lo desea, puede editar su solución deseada.
Nathaniel
@Nathaniel, está bien, claro
VortexYT