Défi de réécriture abstraite (flics)


27

C'est un peu la -comme défi. Ceci est le fil des flics; le fil des voleurs est ici.

Flics

Votre tâche consiste à définir un système de réécriture abstrait dans lequel l'accessibilité d'un mot à l'autre est difficile à déterminer. Vous préparerez les choses suivantes:

  1. Un ensemble de symboles, appelé l'alphabet. (Vous pouvez utiliser des caractères Unicode pour ceux-ci, mais veuillez ne pas utiliser d'espaces ou de symboles difficiles à distinguer les uns des autres.)

  2. Une chaîne source composée de symboles de votre alphabet.

  3. Une chaîne cible composée de symboles de votre alphabet.

  4. Un ensemble de règles de réécriture utilisant des caractères de votre alphabet. (Voir ci-dessous pour la définition d'une règle de réécriture.)

  5. Une preuve montrant si votre chaîne source peut être convertie en votre chaîne cible par application successive de vos règles de réécriture. Cette preuve peut consister en une séquence réelle d'étapes de réécriture, ou une preuve mathématique qu'une telle séquence doit exister, ou une preuve mathématique qu'une telle séquence n'existe pas.

Vous publierez les quatre premiers de ceux-ci, en gardant la preuve secrète; les voleurs essaieront de déchiffrer votre réponse en fournissant leur propre preuve que votre chaîne cible peut ou ne peut pas être atteinte à partir de votre chaîne source. Si votre soumission n'est pas piratée dans les deux semaines , vous pouvez la marquer comme sûre et la modifier dans votre épreuve.

Les soumissions seront notées en fonction du nombre de caractères dans leurs règles de réécriture et de leurs chaînes source et cible, comme détaillé ci-dessous. Le gagnant sera la soumission non fissurée avec le score le plus bas.

Qu'est-ce qu'une règle de réécriture?

Une règle de réécriture est simplement une paire de chaînes dans votre alphabet. (L'une ou l'autre de ces chaînes peut être vide.) Une application d'une règle de réécriture consiste à rechercher une sous-chaîne égale à la première chaîne de la paire et à la remplacer par la seconde.

Un exemple devrait clarifier ceci:

Supposons que l'alphabet soit A, Bet C; la chaîne source est " A"; la chaîne cible est " C" et les règles de réécriture sont

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

alors la chaîne cible est accessible de la manière suivante:

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

Notation

Votre score sera

  • la longueur de votre chaîne source,
  • plus la longueur de votre chaîne cible,
  • plus la longueur de toutes les chaînes incluses dans vos règles de réécriture,
  • plus un point supplémentaire pour chaque règle de réécriture.

Si vous écrivez vos règles de réécriture avec un séparateur deux-points comme ci-dessus, il s'agit simplement de la longueur totale de toutes les règles de réécriture (y compris le séparateur), plus les longueurs des chaînes source et cible. Un score inférieur est préférable. Le nombre de caractères distincts de votre alphabet sera utilisé pour rompre les liens, moins étant mieux.

Prime

J'aimerais voir des réponses qui vont vraiment pour des scores faibles. Je vais attribuer 200 répétitions à la première réponse qui marque moins de 100 points dans ce défi et qui ne se fissure pas.


3
Bah, pas assez expressif pour le puzzle MU .
Neil

1
@Neil techniquement, ils sont aussi expressifs que les machines de Turing - vous pourriez faire une version du puzzle MU, mais vous auriez besoin d'un tas de symboles supplémentaires et de règles de transition pour implémenter la Mx -> Mxxrègle, donc cela finirait beaucoup plus compliqué que celui de Hofstadter original.
Nathaniel

Réponses:


9

326 points - fissurés par jimmy23013

Le niveau est Picokosmos # 13 par Aymeric du Peloux (avec une modification triviale). J'ai essayé de trouver un niveau de bon goût qui pourrait être mis en œuvre avec des «boîtes» et des «murs» ayant le même caractère. Pour ce niveau, il était possible de faire en sorte que le starter central ait deux colonnes de large plutôt qu'une.

Les règles / chaînes initiales / cibles pourraient être jouées un peu plus, mais c'est juste pour le plaisir.

Chaîne initiale:

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

Chaîne cible:

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

Règles:

_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


8

171 points, cracké par HyperNeutrino

La source: YAAAT

Cible: VW626206555675126212043640270477001760465526277571600601

Règles:

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

Juste quelque chose d'évident à faire. La séquence réelle des étapes de réécriture ne rentrera probablement pas dans une réponse SE.


Je dois avoir hésité quelque part parce que je ne peux arriver à l' VWxendroit où xest formé à partir de n'importe quelle chaîne binaire de _(0) et +(1) qui évaluent à 10*n+6(y compris l'interligne _; n= entier non négatif) mais le xdonné ( 626...601) est formé à partir du binaire qui évalue à 10*n+3(pour un grand n).
Jonathan Allan

Des choses comme celle-ci sont résolubles par pure logique?
VortexYT


@HyperNeutrino Drat, j'espérais que votre crack aurait exposé où j'avais trébuché.
Jonathan Allan


4

139 points (sécurité)

Je voulais que cette réponse soit fissurée, et user202729 l'a résolue dans les commentaires, mais personne n'a posté de réponse dans le fil des voleurs, donc je la marque "en toute sécurité" et j'inclus ma preuve ci-dessous.

(Ces choses sont évidemment beaucoup plus faciles à faire qu'à casser. Personne n'a encore essayé d'obtenir un score vraiment bas, et il pourrait y avoir plus de plaisir à avoir à cette fin, si ce défi décolle un jour. )


Voici une réponse personnelle. C'est potentiellement très difficile, mais devrait être facile si vous déterminez d'où il vient.

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

la source: ←A→

cible: ←🎂→

Règles: (l'espace blanc n'est pas significatif)

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

Voici une version ASCII , au cas où l'unicode ne s'afficherait pas bien pour tout le monde.


Preuve

C'est l'équivalent du meilleur concurrent actuel pour un castor occupé à six états . Un castor occupé est une machine de Turing qui s'arrête après une très longue période. Pour cette raison, la chaîne source ←A→peut en effet être transformée en chaîne cible ←🎂→, mais seulement après plus de 7*10^36534étapes, ce qui prendrait beaucoup plus de temps que l'âge de l'univers pour toute implémentation physique.

La bande de la machine de Turing est représentée par les symboles (0) et (1). Les règles

← : ←⬛
→ : ⬛→

signifie que les extrémités de la bande peuvent toujours être étendues avec plus de zéros. Si jamais la tête de la machine Turing se rapproche d'une extrémité de la bande, nous pouvons simplement appliquer l'une de ces règles, ce qui nous permet de prétendre que la bande est infinie et commence remplie de tous les zéros. (Les symboles et ne sont jamais créés ou détruits, ils sont donc toujours à la fin de la bande.)

La tête de la machine de Turing est représentée par les symboles ABCDEⒶⒷⒸⒹⒺⒻet 🎂. Asignifie que la tête est en état Aet que le symbole sous la tête est un (0), tandis que Ⓐ signifie qu'elle est en état Aet que le symbole en dessous est un (1). Cela se poursuit pour les autres États, avec la lettre encerclée représentant un 1 sous la tête et la version non cerclée représentant un 0. (Il n'y a pas de symbole Fcar il arrive que la tête ne se retrouve jamais en état Favec un 1 en dessous.)

L'État 🎂est l'état d'arrêt. Il a les règles spéciales

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

Si l'état d'arrêt est atteint, nous pouvons appliquer à plusieurs reprises ces règles pour «aspirer» toute la bande (y compris les zéros supplémentaires résultant de l'extension de la bande plus que nécessaire), nous laissant ainsi dans l'état ←🎂→. Par conséquent, le problème d'accessibilité se résume à savoir si l'état 🎂sera jamais atteint.

Les règles restantes sont les règles de transition pour la machine de Turing. Par exemple, les règles

A⬛ : ⚪B
A⚪ : ⚪Ⓑ

peut être lu comme "si la machine est dans l'état A et qu'il y a un zéro sous la tête, puis écrivez un 1, passez à l'état B et déplacez-vous vers la droite." Le déplacement vers la droite nécessite deux règles, car la cellule de bande vers la droite peut contenir un , auquel cas la machine doit passer en état B, ou la cellule peut contenir un , auquel cas elle doit entrer en état , car il y a un en dessous.

De même,

⬛Ⓓ : C⬛
⚪Ⓓ : Ⓒ⬛

signifie "si la machine est dans l'état D et qu'il y a un 1 sous la tête, alors écrivez un 0, passez à l'état C et déplacez-vous vers la gauche."

La machine Turing utilisée a été découverte par Pavel Kropitz en 2010. Bien qu'elle soit souvent mentionnée dans le contexte des castors occupés, sa véritable table de transition est un peu difficile à retrouver, mais elle peut être trouvée par exemple ici . Il peut être écrit comme

    0   1

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

qui peut être lu comme "si la machine est dans l'état A et qu'il y a un zéro sous la tête, puis écrivez un 1, passez à l'état B et déplacez-vous vers la droite", et ainsi de suite. Il doit être simple, si laborieux, de vérifier que chaque entrée de ce tableau correspond à une paire de règles comme décrit ci-dessus.

La seule exception est la règle 1RHqui se produit lorsque la machine est dans l'état F sur un 0, car il semblait assez inutile de faire écrire la machine un 1 et de se déplacer vers la droite alors qu'elle pourrait s'arrêter immédiatement dès qu'elle entre dans l'état F sur un 0. J'ai donc changé la règle qui aurait été

Ⓑ⬛ : ⚪F

dans

Ⓑ⬛ : 🎂

C'est pourquoi il n'y a pas de symbole Fdans l'alphabet. (Il y a d'autres golfs que j'aurais pu faire, mais je ne voulais pas trop les obscurcir.)

C'est essentiellement ça. La chaîne cible est accessible à partir de la chaîne source, mais seulement après un nombre ridicule d'étapes.

Encore un fait amusant: si j'avais utilisé

←A⚪⚪→

comme point de départ à la place, alors il ne faudrait pas des 7*10^36534étapes pour arrêter, mais des 10^10^10^10^18705352étapes, ce qui est un très grand nombre en effet.


1
Cela ressemble à une implémentation d'une machine de turing
NieDzejkob

1
Je pense que c'est le "meilleur concurrent actuel à 6 états et 2 symboles" répertorié ici . Maintenant, quelqu'un a juste besoin de prouver qu'ils sont équivalents.
user202729


1
@ user202729 Pourquoi ne pas poster comme réponse?
jimmy23013


3

287 points, sûr

La source: YAAT

Cible:

VW644507203420630255035757474755142053542246325217734264734527745236024300376212053464720055350477167345032015327021403167165534313137253235506613164473217702550435776242713

Règles:

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

J'ai trouvé que openssl est beaucoup plus facile à utiliser que gpg à cet effet.


Voir le crack d' HyperNeutrino à la version la plus faible. Dans ce cas, le nombre de Cs est:

22030661124527021657244569669713986649562044939414344827127551659400215941242670121250289039666163853124410625741840610262419007778597078437731811349579211

Et les facteurs premiers sont:

220040395270643587721928041668579651570457474080109642875632513424514300377757
100120985046540745657156603717368093083538096517411033964934953688222272684423

Le premier nombre mod 5 = 2, il est donc possible d'obtenir la chaîne finale.



En supposant qu'il s'agit de semi-temps 512 bits aléatoires, les PC actuels prendront des semaines à des mois pour en tenir compte
didgogns

C'est sûr maintenant.
user202729

2

402 points

Alphabet: abcdefghijklmnopqrstu
Source: abcdoi
Cible: ioabcdnnnnnnnnnnnnnnnnnn
Règles de réécriture:

ab: ba
ba: ab
ac: ca
ca: ac
ajouter un
da: ad
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
être: 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
euh: oi
tm: oi
sm: oi
lm: oi
lj: oi
: n

La dernière règle vous permet de créer autant de ns que vous le souhaitez.

Aussi laid que cela puisse paraître, c'est en fait plutôt sympa, d'une manière ou d'une autre ...


* En aoi:eogest eogcensé être eag?
Kritixi Lithos

@Cowsquack oui, merci d'avoir choisi ça
boboquack

2

1337 Points

Certainement pas compétitif, et a pris beaucoup trop de temps à créer (j'espère que je ne me suis pas trompé).

Allusion:

essayez de comprendre la chaîne source avant de regarder les règles

Alphabet: ABEILRSTabcdefijlr

La source: SIbbbbbbbdbffacebbfadbdbeecddfaeebddcefaddbdbeeecddaaaaadfaeeebdddcefbbfadbdbdbeeecdddfaeeebdddcefaddbdbeeecddaaaadfaeeebdddcefbfadbdbdbeeecdddfaeeebdddcbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdceeeeefadddddbdbeeeeeecddddddfaeeeeeebddddddceeefaddaeecdddbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdcefaefaeeebdddcdcefaceeaaaceefacdffacebdceeeeefadddddbdbeeeeeecddddddfaeeeeeebddddddceeefaddaeecdddbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdcefaefaeeebdddcdcefaceeaaaaceefacdffacebdcecefacE

Cible: SE

Réécrire les règles:

Ab: bA
bA: Ab
Aa: aA
aA: Aa
Ajouter un
dA: Ad
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: Soyez
Soyez: 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
ie: 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
IL
TB: T
BT: T
bT: T
aT: T
dT: T
eT: T
fT: T
cT: T
T:

2

Notez que j'ai fait quelques erreurs au départ, donc le score a été changé. Néanmoins, l'idée est la même. J'espère qu'il n'y a plus d'erreurs maintenant.


154 Points

Alphabet: P.!xABC[{mD<
Source: [x!P.P...P..P.P....P..P.P.....P.P....P......P.P..P...P.P...Pm(61 caractères)
Cible: {CCCCC<(il y a 5 Cs, donc 7 caractères)

Règles:

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

Il y a 19 règles, nombre total de caractères = 67.


1

106 points - craqué par HyperNeutrino

Alphabet: ABCDEFGHIJ

La source: FIABCJAGJDEHHID

Cible: F

Réécrire les règles:

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

D'accord, HyperNeutrino a prouvé que cela est insoluble. Cependant, il existe une autre solution à cela.


Prendre:

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

La valeur de la source est égale. La valeur de la cible est impaire. Si nous prenons chaque côté, totalisons la valeur et prenons la valeur au mod 2, les valeurs restent les mêmes. Par conséquent, cela ne peut pas être réalisé.



Vous pouvez modifier la solution que vous souhaitez, si vous le souhaitez.
Nathaniel

@Nathaniel, bien sûr
VortexYT
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.