Soyut Yeniden Yazım Zorluğu (Soyguncular)


9

Bu biraz -sevmek meydan okuma. Bu soyguncuların iş parçacığı; polislerin konusu burada .

soyguncuları

Polisler soyut yeniden yazma sistemleri yayınlayacak. Göreviniz, hedef dizeye yeniden yazma kurallarını uygulayarak kaynak dizeden ulaşılıp ulaşılamayacağını kanıtlayarak gönderimlerini kırmaktır. (Bunu, kaynak dizeyle başlayan ve hedefle biten bir dizi yeniden yazma kuralı göndererek veya bunun var olduğunu veya olmadığını matematiksel olarak kanıtlayarak yapabilirsiniz.)

Ayrıntılar ve tanımlar için polisin konusuna bakın .


Do'h! Yanlış soruya bir ödül koydum, bu polislerin meydan okumasıydı. Yani birisi rastgele bir ödül kazanacak.
Nathaniel

Endişeye gerek yok, ödül iade ettim.
James

@DJMcMayhem: Ha ... bu yüzden SE API bu soruyu özellikli olarak listeliyor, ancak ödül miktarı veya kapanış tarihi yok. : o Ah, kullanıcı betiğime giriş doğrulama ekleme zamanı.
Ilmari Karonen

Yanıtlar:


16

jimmy23013

Bunun için geriye doğru çalışalım. İlk önce rakamları ikili gösterimine dönüştürürüz. Biz gitmek VW626206555675126212043640270477001760465526277571600601için VW++__+_++__+____++_+_++_++_+++_++++_+__+_+_++__+___+_+____+___++++_+______+_+++___+__++++++________++++++____+__++_+_++_+_+_++__+_+++++++_++++__+++_______++______+. Daha sonra, tüm sembolleri temizleyene kadar tersini DCW:W+ve uygulamasını DW:W_uygularız. Sonuç şimdi VDCDCDDDCDDCDCDDDCDDDDDCDCDDCDDCDCDDCDCDDCDCDCDDCDCDCDCDDCDDDCDDCDDCDCDDDCDDDDCDDCDDDDDCDDDDCDCDCDCDDCDDDDDDDCDDCDCDCDDDDCDDDCDCDCDCDCDCDDDDDDDDDCDCDCDCDCDCDDDDDCDDDCDCDDCDDCDCDDCDDCDDCDCDDDCDDCDCDCDCDCDCDCDDCDCDCDCDDDCDCDCDDDDDDDDCDCDDDDDDDCW. Şimdi bu dizeyi eşleştirmek istiyoruz VD+C+W; yani tüm s'leri tüm Ds'nin soluna taşımak istiyoruz C. Bu işlem tersine çevrilerek yapılabilir DCC:CD. Bunu aşağıdaki algoritmayı tekrarlayarak yapıyoruz:

  1. DBir Cs bloğunun sağındaki ilkini bulun .
  2. Taşı Dbu bloğun solunda.
  3. CS sayısını ikiye katlayın.

Bazı matematik sayesinde, 123 Ds ve 4638704741628490670592103344196019722536654143873 s ile sonuçlanacağımızı belirleyebiliriz C(bunun bir SE cevabına uymaması konusunda haklıydınız ... Dünyadaki tüm atomların durumları olarak saklanırsa bunun uygun olacağından şüpheliyim. kombine: P).

Eğer tersini uygularsak V:VD, şu Dandaki tüm şeylerden kurtulabiliriz , böylece anlıyoruz VCCC.......CCCW. Biz dönüştürmek Viçine geri YZ. Şimdi var YZCCC.......CCCW.

Tüm lerden kurtulmak Cve formda olmak istiyoruz YAAA...AAABBB...BBBZW. Neyse ki, bu aşağıdaki yöntemle yapılabilir. İlk olarak, YB:Yalmak için 587912508217580921743211 kez ters uygulanır YBBB.......BBBZCCC.......CCCW. Ardından, aşağıdaki adım dizisini tekrarlıyoruz (burada [?*]herhangi bir sayı anlamına gelir ?, mutlaka sıfırdan büyük değildir):

  1. Ters CZ:ZCalmak için 587912508217580921743211 kez uygulayınY[A*]BBB.......BBBCCC.......CCCZCCC.......CCCW
  2. Almak için CB:BCbirçok kez ters uygulayınY[A*]BCBCBC.......BCBCBCZCCC.......CCCW
  3. Ters uygulama AZ:Zve AB:BCAalmak için birçok kezY[A*]ABBB.......BBBZCCC.......CCCW

Tümevarım yoluyla, BZkombinasyonu sonuna kadar hareket ettirebileceğimizi görüyoruz (önce hariç W) ve sonra As sayısının 1/587912508217580921743211, Cbize 7890127658096618386747843 As. Şimdi sahibiz YAAA.......AAABBB.......BBBZW. Dönüştürme ZWbir karşı arkasını U, ardından ters-uygulamak U:BUsadece 2 tutmaya defalarca Bs ve sonra dönüştürmek BBUbir etmek Tve şimdi var YAAA.......AAAT. Daha sonra T:AAAAATalmak için birçok kez ters uygulayabilirsiniz YAAATçünkü As sayısı 5'in katlarından 3 daha büyüktü.

Meydan okuma için teşekkürler!


Herhangi bir yerde belirtilmiş veya varsayılan olarak ters uygulamaya izin verilmiş mi?
Weijun Zhou

2
@WeijunZhou Yani, uygulamadan eğer A:Biçin ABCverir BBC, bu en bariz olduğu tersinin uygulanması A:Biçin BBCverebilir ABC. Özellikle izin verildiği belirtilmedi, ancak adımlarımı kolayca tersine çevirebilir ve "geleneksel" bir çözüme sahip olabilirim, IMO'ya geri gitmenin daha kolay olması.
HyperNeutrino

Orada tek bir kural olup olmadığını, örneğin, demek A:Bve ters o zaman ben gitmek sanmıyorum izin geçerli olduğunu ifade edilmez BBCiçin ABC. Bu özel durum farklı olabilir ve diğer yöne gitmenin bir yolu vardır. Daha sonra kontrol edeceğim.
Weijun Zhou

2
@HyperNeutrino ^^
Weijun Zhou

1
Bunu çarpanlarına ayırmak için hangi programı kullandınız ve ne kadar sürdü?
user202729

9

boboquack

Belirli bir dize için tüm harfleri (a = 0, b = 1, c = 2) alın, toplayın ve modulo 3'ü alın. Sonra yeniden yazma kurallarının hiçbiri bu değeri değiştirmez. Kaynak dizginin değeri 1 ve hedefin değeri 2'dir. Bu nedenle, hiçbir kural birleşimi kaynak dizgiyi hedef dizgeye dönüştürmez.


9

feersum

Bu bir sokoban bulmacası. Başlangıç ​​pozisyonu:

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

Bitiş pozisyonu:

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

Aşağıdaki tuş dizisi kullanılarak çözülebilir:

←← → ↓↓ ← ↑ ←←←←←← ↓↓ → ↑ ← ↑↑↑ ←← ↓ → ↑ → ↓↓ →→→→→→ ↓ → ↑↑ ↓↓ ← ↓ ← ↑ → ↑ ←←← ← ↑ ←← ↓ →→→→→ ↓ →→ ↑↑ → ↑↑ ← ↓ ←← ↓↓ → ↑ ← ↑ →→ ↑ →→ ↓ ← ↓ ←← ↓↓ → ↑ ←←←←←←← ↑ ↑ ←← ↓ →→ ↓ → ↓↓ ← ↑ ← ↑ → ↑↑ ←← ↓ → ↑ → ↓↓ ← ↓ → ↑ →→→→→→ ↓↓ ← ↑ → ↑ ←←←←←← →→→ →→→ ↑↑ ← ↓ → ↓ ← ↑↑ →→ ↑ →→ ↓ ← ↓ ← → ↑↑ ← ↓ ← ↓ ↑ →→ ↓ ← ↑ ←← ↓↓↓ →→ ↑↑ ↓↓ ←← ↑↑ → ↓ ↑↑ → ↑ →→ ↓ ← ↓ ← ↓ ←← ↑↑ →→ ↑ → ↓ ← ↓↓ ←←←←← ↑ ←← ↓ →→→→→ ←←←←← ↑↑ ←← ↓ →→ ↓↓ ← ↑ →→→→

İşte tuş dizisini sed komutlarına dönüştüren ve uygulayan bir bash programı. Sed komutları, yalnızca polisin cevabında tanımlanan yeniden yazma kurallarını kullanarak değiştirme komutlarını ve dizeyi değiştirmeyen etiketleme ve dallandırma komutlarını içerir. Hedef dizeyi yalnızca yeniden yazma kurallarını kullanarak alabileceğinizi onaylar.

s="___##___####_____##_#_#_##_#_!####______##_#####__####_#_######__###__"
input=

while
    printf '\n%80s\n' "$s"|fold -w14
    read -n 1
    [ "$REPLY" = $'\e' ]
do
    read -n 2
    case "$REPLY" in
    [A)
        s="$(sed '
s:!:wLW_:
        :a
s:L:<<<<<<<<<<<<<:
s:#w<:w#:
s:_w<:w_:
s:_<:<_:
s:#<:<#:
s:#wW:wLX!:
s:_W:W_:
s:#W:W#:
s:_wW:!:
s:_X:X_:
s:#X:X#:
s:_wX:#:
        ta' <<<"$s")";;
    [B)
        s="$(sed '
s:!:_VRv:
        :a
s:R:>>>>>>>>>>>>>:
s:>v#:#v:
s:>v_:_v:
s:>_:_>:
s:>#:#>:
s:Vv#:!URv:
s:U_:_U:
s:U#:#U:
s:Uv_:#:
s:V_:_V:
s:V#:#V:
s:Vv_:!:
        ta' <<<"$s")";;
    [C)
        s="$(sed '
s:!#_:_!#:
        te
s:!_:_!:
        :e' <<<"$s")";;
    [D)
        s="$(sed '
s:_#!:#!_:
        te
s:_!:!_:
        :e' <<<"$s")";;
    esac
    input="$input${REPLY:1}"
done

echo "$input"

Çevrimiçi deneyin!

Çevrimiçi deneyin (çıkış kodu kaldırıldığında)!

Yukarı ve aşağı, !:wLW_veya !:_VRvkarşılık gelen bir kez uygulanır ve ilgili kurallar tekrar görünene kadar !tekrar tekrar uygulanır . Doğru, biri !#_:_!#ve !_:_!uygulanır. Sol için biri _#!:#!_ve _!:!_uygulanır.

Her hareketten sonraki konum için bağlantılardaki çıkışa bakın.


6

XNOR

Kural 1 x:xn Kural 2 no:oon Kural 3 nr:r Kural 4ooooooooooo:

[X,Y]Y Xs'nin bir çalışmasını belirtmek için kullanıyoruz

-Dan başlayarak xn[o,A]r,

  1. Kural 2 uygulandıktan sonra x[o,2]n[o,A-1]r .
  2. Kural 2'yi bir kez daha uygulamak x[o,4]n[o,A-2]r
  3. Kadar uygulamak oarasındaki s nve r0 olur, elimizdekix[o,2*A]nr .
  4. Kural 3'ü bir kez uyguladık x[o,2*A]r.
  5. Kural 1'i uyguladıktan sonra uygulamak xn[o,2*A]r.

Yani, biz den üretmek için bir algoritma var xn[o,A]riçin xn[o,2*A]r.

Başlayarak xnor = xn[o,1]r, algoritmanın 10 katını tekrarlamak - 10. döngü hariç, 4. Adımda duruyoruz x[o,1024]r.

Kural 4 uygulandığında, bu 1023 = 11 * 93 os 'yi temizler xor.


2

VortexYT

FDiğer karakterleri yaratmadan / kullanmadan s ortadan kaldırmanın bir yolu yoktur ; bu nedenle I:Fhedefe ulaşmak için son adım olarak kullanmalıyız . Hiçbir kural Idiğer istenmeyen karakterler olmadan tek bir karakter vermez, böylece hedef dizeye ulaşamazsınız.

Aynı şekilde, kaynaktan geriye doğru eşlemeye çalışırsanız, yalnızca başka Fseçeneğiniz Iolmadan adresinden alabilirsiniz .


Ooch, bu acıtıyor. Yine de başka bir çözüm var ...
VortexYT

@VortexYT oh, gerçekten var mı? hm, bilmiyordum. ama evet, hedef bunu bir adımdan daha fazlasını eşleştiremez ve bu da muhtemelen bunu bir tondan daha kolay hale
getirir

Kesin olmak için 2 kat daha kolay
VortexYT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.