Questa è una sfida da poliziotti e ladri in qualche modo simile al golf . Questo è il filo della polizia; il thread dei ladri è qui.
Cops
Il tuo compito è definire un sistema di riscrittura astratto in cui è difficile determinare la raggiungibilità di una parola da un'altra. Preparerai le seguenti cose:
Un insieme di simboli, chiamato alfabeto. (Puoi usare qualsiasi carattere Unicode per questi, ma per favore non usare spazi bianchi o simboli che sono difficili da distinguere l'uno dall'altro.)
Una stringa di origine composta da simboli dell'alfabeto.
Una stringa di destinazione composta da simboli dell'alfabeto.
Un insieme di regole di riscrittura usando i caratteri dell'alfabeto. (Vedi sotto per la definizione di una regola di riscrittura.)
Una prova che mostra se la stringa di origine può essere convertita nella stringa di destinazione mediante l'applicazione successiva delle regole di riscrittura. Questa dimostrazione potrebbe consistere in una sequenza effettiva di passaggi di riscrittura o in una prova matematica che tale sequenza deve esistere o in una prova matematica che tale sequenza non esiste.
Pubblicherai i primi quattro di questi, mantenendo segreta la prova; i ladri proveranno a decifrare la tua risposta fornendo la propria prova che la tua stringa target può o non può essere raggiunta dalla tua stringa sorgente. Se l'invio non viene infranto entro due settimane , è possibile contrassegnarlo come sicuro e modificarlo nella prova.
Le iscrizioni verranno classificate in base al numero di caratteri nelle regole di riscrittura e nelle stringhe di origine e di destinazione, come indicato di seguito. Il vincitore sarà l'invio non crackato con il punteggio più basso.
Che cos'è una regola di riscrittura?
Una regola di riscrittura è semplicemente una coppia di stringhe nel tuo alfabeto. (Ognuna di queste stringhe può essere vuota.) L'applicazione di una regola di riscrittura consiste nel trovare una sottostringa uguale alla prima stringa nella coppia e sostituirla con la seconda.
Un esempio dovrebbe chiarire questo:
Supponiamo che l'alfabeto sia A
, B
e C
; la stringa di origine è " A
"; la stringa di destinazione è " C
" e le regole di riscrittura sono
A:B
B:BB
B:A
AA:C
quindi la stringa di destinazione è raggiungibile nel modo seguente:
A
B (using rule 1)
BB (using rule 2)
AB (using rule 3)
AA (using rule 3)
C (using rule 4)
punteggio
Il tuo punteggio sarà
- la lunghezza della stringa di origine,
- più la lunghezza della stringa target,
- oltre alla lunghezza di tutte le stringhe incluse nelle regole di riscrittura,
- più un punto in più per ogni regola di riscrittura.
Se scrivi le tue regole di riscrittura con un separatore di due punti come sopra, questa è solo la lunghezza totale di tutte le regole di riscrittura (incluso il separatore), più le lunghezze delle stringhe sorgente e target. Un punteggio più basso è migliore. Il numero di caratteri distinti nel tuo alfabeto verrà utilizzato per rompere i legami, con un minor numero di migliori.
generosità
Mi piacerebbe vedere le risposte che vanno davvero per i punteggi bassi. Assegnerò 200 rappresentanti alla prima risposta che segna meno di 100 punti in questa sfida e non si spezza.
Mx -> Mxx
regola avresti bisogno di un sacco di simboli extra e regole di transizione , quindi sarebbe molto più complicato di quello di Hofstadter originale.