บทคัดย่อการเขียนซ้ำที่ท้าทาย (โจร)


9

นี่คือค่อนข้าง -ชอบ ท้าทาย. นี่คือกระทู้โจร ด้ายตำรวจอยู่ที่นี่

โจร

ตำรวจจะโพสต์ระบบการเขียนบทคัดย่อ งานของคุณคือถอดรหัสการส่งของพวกเขาโดยการพิสูจน์ว่าสตริงเป้าหมายสามารถหรือไม่สามารถเข้าถึงได้จากสตริงต้นทางโดยใช้กฎการเขียนซ้ำของพวกเขา (คุณสามารถทำได้โดยการโพสต์ลำดับของกฎการเขียนใหม่ที่เริ่มต้นด้วยสตริงต้นทางและสิ้นสุดด้วยเป้าหมายหรือโดยการพิสูจน์ทางคณิตศาสตร์ว่าสิ่งนี้มีอยู่หรือไม่มีอยู่)

ดูหัวข้อของตำรวจสำหรับรายละเอียดและคำจำกัดความ


Do'h! ฉันตั้งคำถามที่ผิดเกี่ยวกับเรื่องนี้ออกไปนี่เป็นความท้าทายของตำรวจ ดังนั้นใครบางคนจะได้รับรางวัลแบบสุ่ม
นาธาเนียล

ไม่ต้องกังวลฉันได้คืนเงินค่าหัวแล้ว
James

@DJMcMayhem: อืม ... นั่นคือเหตุผลที่SE APIกำลังแสดงรายการคำถามนี้ว่าเป็นคุณลักษณะ แต่ไม่มีจำนวนเงินหรือวันที่ปิดบัญชี : โอ้ดีแล้วเวลาเพิ่มการตรวจสอบอินพุตให้กับสคริปต์ผู้ใช้ของฉัน
Ilmari Karonen

คำตอบ:


16

jimmy23013

ลองย้อนกลับสำหรับอันนี้ ก่อนอื่นเราเปลี่ยนตัวเลขให้เป็นตัวแทนไบนารีของพวกเขา เราไปจากการVW626206555675126212043640270477001760465526277571600601 VW++__+_++__+____++_+_++_++_+++_++++_+__+_+_++__+___+_+____+___++++_+______+_+++___+__++++++________++++++____+__++_+_++_+_+_++__+_+++++++_++++__+++_______++______+ต่อไปเราจะใช้การผกผันของDCW:W+และDW:W_จนกว่าเราจะล้างสัญลักษณ์ทั้งหมด VDCDCDDDCDDCDCDDDCDDDDDCDCDDCDDCDCDDCDCDDCDCDCDDCDCDCDCDDCDDDCDDCDDCDCDDDCDDDDCDDCDDDDDCDDDDCDCDCDCDDCDDDDDDDCDDCDCDCDDDDCDDDCDCDCDCDCDCDDDDDDDDDCDCDCDCDCDCDDDDDCDDDCDCDDCDDCDCDDCDDCDDCDCDDDCDDCDCDCDCDCDCDCDDCDCDCDCDDDCDCDCDDDDDDDDCDCDDDDDDDCWผลของเราอยู่ในขณะนี้ ตอนนี้เราต้องการทำให้สตริงนี้ตรงกันVD+C+W; นั่นคือเราต้องการย้ายDs ทั้งหมดไปทางซ้ายของCs ทั้งหมด DCC:CDซึ่งสามารถทำได้โดยการกลับ เราทำสิ่งนี้โดยทำซ้ำอัลกอริทึมต่อไปนี้:

  1. พบครั้งแรกDที่เป็นไปทางขวาของบล็อกที่Cs
  2. ย้ายDไปทางซ้ายของบล็อกนั้น
  3. เพิ่มจำนวนCเป็นสองเท่า

ด้วยคณิตศาสตร์เราสามารถตัดสินได้ว่าเราจะจบลงด้วย 123 Ds และ 46387047416284906705921033441960197219361919191919191919191919194193873 Cs (คุณถูกต้องเกี่ยวกับเรื่องนี้ไม่เหมาะในคำตอบ SE ... ฉันสงสัยว่ามันจะเหมาะสมถ้าเก็บไว้เป็นสถานะของอะตอมทั้งหมดในโลก รวมกัน: P)

ถ้าเราให้ใช้หลังของV:VDเราจะได้รับการกำจัดของทั้งหมดของDs VCCC.......CCCWตอนนี้เราจึงได้รับ เราแปลงกลับเข้ามาV ตอนนี้เรามีYZYZCCC.......CCCW

เราต้องการที่จะสามารถที่จะได้รับการกำจัดทั้งหมดของCs YAAA...AAABBB...BBBZWและมีมันในรูปแบบ โชคดีที่สามารถทำได้ด้วยวิธีต่อไปนี้ ประการแรกเราผกผันสมัครYB:Y587912508217580921743211 YBBB.......BBBZCCC.......CCCWครั้งที่จะได้รับ จากนั้นเราทำซ้ำขั้นตอนต่อไปนี้ (ซึ่ง[?*]หมายถึงจำนวนใด ๆ?ไม่จำเป็นต้องมากกว่าศูนย์):

  1. ใช้CZ:ZCinverse 587912508217580921743211 เท่าเพื่อให้ได้Y[A*]BBB.......BBBCCC.......CCCZCCC.......CCCW
  2. ใช้การผกผันCB:BCหลาย ๆ ครั้งเพื่อรับY[A*]BCBCBC.......BCBCBCZCCC.......CCCW
  3. ใช้ผกผันAZ:ZและAB:BCAหลายต่อหลายครั้งที่จะได้รับY[A*]ABBB.......BBBZCCC.......CCCW

ผ่านการเหนี่ยวนำเราจะเห็นว่าเราสามารถย้ายBZชุดค่าผสมไปจนสุด (ยกเว้นก่อนหน้าW) จากนั้นจำนวนAs คือ 1/587912508217580921743211 ของจำนวนCs ทำให้เรามี 7890127658096618386747843 As YAAA.......AAABBB.......BBBZWขณะนี้เรามี แปลงZWกลับไปUแล้วผกผันสมัครU:BUหลายครั้งเพื่อให้เพียง 2 Bวินาทีแล้วเปลี่ยนBBUไปและตอนนี้คุณมีT YAAA.......AAATจากนั้นคุณสามารถใช้การผกผันได้T:AAAAATหลายครั้งYAAATเนื่องจากจำนวนAs มีค่ามากกว่า 3 คูณ 5

ขอบคุณสำหรับความท้าทาย!


มีการระบุไว้ทุกที่หรือเป็นค่าเริ่มต้นที่อนุญาตให้ใช้การกลับรายการได้
Weijun Zhou

2
@WeijunZhou ฉันหมายความว่าถ้าใช้A:BจะABCช่วยให้BBCมันเห็นได้ชัดว่าการใช้ค่าผกผันของการA:Bที่จะสามารถให้BBC ABCไม่ได้ระบุไว้โดยเฉพาะว่าได้รับอนุญาต แต่ฉันสามารถย้อนกลับขั้นตอนของฉันได้อย่างง่ายดายและมีวิธีการแก้ปัญหาแบบ "ธรรมดา" มันแค่ง่ายกว่าที่จะย้อนกลับ IMO
HyperNeutrino

ตัวอย่างเช่นฉันหมายความว่าหากมีเพียงกฎเดียวเท่านั้นA:Bและไม่ได้ระบุว่าอนุญาตให้ใช้การย้อนกลับได้ฉันไม่คิดว่าคุณจะไปBBCถึงABCได้ กรณีเฉพาะนี้อาจแตกต่างกันและมีวิธีที่จะไปในทิศทางอื่น ฉันจะตรวจสอบในภายหลัง
Weijun Zhou

2
@HyperNeutrino ^^
Weijun Zhou

1
คุณใช้โปรแกรมใดในการแยกตัวประกอบนี้และใช้เวลานานเท่าใด
user202729

9

boboquack

สำหรับสตริงที่กำหนดให้ใช้ตัวอักษรทั้งหมด (a = 0, b = 1, c = 2) รวมผลและใช้โมดูโล่ 3 จากนั้นไม่มีกฎการเขียนซ้ำเปลี่ยนค่านั้น สตริงต้นทางมีค่า 1 และเป้าหมายมีค่าเป็น 2 ดังนั้นจะไม่มีการรวมกันของกฎใด ๆ ที่จะแปลงสตริงต้นทางเป็นสตริงเป้าหมาย


9

feersum

นี่คือปริศนา sokoban ตำแหน่งเริ่มต้นคือ:

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

ตำแหน่งสิ้นสุดคือ:

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

สามารถแก้ไขได้โดยใช้ลำดับของคีย์ต่อไปนี้:

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

นี่คือโปรแกรม bash ที่แปลงลำดับของคีย์ไปเป็นคำสั่ง sed และใช้มัน คำสั่ง sed มีเพียงการแทนที่คำสั่งโดยใช้กฎการเขียนซ้ำที่กำหนดไว้ในคำตอบของตำรวจและคำสั่งการติดฉลากและการแยกสาขาที่ไม่ได้แก้ไขสตริง มันยืนยันว่าคุณจะได้รับสตริงเป้าหมายโดยใช้กฎการเขียนซ้ำเท่านั้น

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"

ลองออนไลน์!

ลองออนไลน์ (โดยลบรหัสยกเว้น)!

สำหรับขึ้นและลง!:wLW_หรือ!:_VRvถูกนำไปใช้เพียงครั้งเดียวตามลำดับและกฎที่เกี่ยวข้องจะถูกนำไปใช้ซ้ำ ๆ จนกระทั่ง!ปรากฏขึ้นอีกครั้ง เพื่อสิทธิหนึ่งในนั้น!#_:_!#และ!_:_!ถูกนำไปใช้ สำหรับซ้ายหนึ่ง_#!:#!_และ_!:!_ถูกนำไปใช้

ดูผลลัพธ์ในลิงค์สำหรับตำแหน่งหลังจากการย้ายแต่ละครั้ง


6

XNOR

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

เราใช้[X,Y]เพื่อระบุการทำงานของ Y Xs

เริ่มต้นจากxn[o,A]r,

  1. การประยุกต์ใช้กฎข้อที่ 2 x[o,2]n[o,A-1]rเมื่อเรามี
  2. การใช้กฎ 2 อีกครั้งที่เรามี x[o,4]n[o,A-2]r
  3. การประยุกต์ใช้จนos ระหว่างnและrจะกลายเป็น 0 x[o,2*A]nrเรามี
  4. การใช้กฎ 3 x[o,2*A]rเมื่อเรามี
  5. การประยุกต์ใช้กฎข้อที่ 1 xn[o,2*A]rเมื่อเรามี

ดังนั้นเรามีขั้นตอนวิธีการสร้างจากไปxn[o,A]rxn[o,2*A]r

เริ่มต้นจากxnor = xn[o,1]rการทำซ้ำ 10 ครั้งอัลกอริทึม - ยกเว้นในวงที่ 10 เราหยุดที่ขั้นตอนที่ 4 x[o,1024]rมี

การประยุกต์ใช้กฎข้อที่ 4 นี้ล้าง 1023 = 11 * 93 os xorออก


2

VortexYT

ไม่มีทางที่จะกำจัดFs โดยไม่สร้าง / ใช้ตัวละครอื่นได้ ดังนั้นเราต้องใช้I:Fเป็นขั้นตอนสุดท้ายเพื่อไปยังเป้าหมาย ไม่มีกฏที่ให้เดี่ยวIโดยไม่มีตัวอักษรที่ไม่ต้องการอื่น ๆ ดังนั้นคุณจะไม่สามารถไปที่สตริงเป้าหมายได้

เท่าถ้าคุณพยายามที่จะแมถอยหลังจากแหล่งที่คุณจะสามารถได้รับจากการFไปIก่อนที่คุณจะมีตัวเลือกไม่มาก


Ooch ที่เจ็บ มีวิธีแก้ไขปัญหาอื่นอยู่ ...
VortexYT

@VortexYT โอ้จริงเหรอ? หืมไม่รู้ แต่ใช่เป้าหมายไม่สามารถแมปย้อนกลับได้มากกว่าหนึ่งขั้นซึ่งอาจทำให้เรื่องนี้ง่ายกว่าที่คุณตั้งใจ: P
HyperNeutrino

2x ง่ายกว่าที่จะแน่นอน
VortexYT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.