ตีความการทำซ้ำ!


11

ความท้าทายนี้เป็นครั้งแรกในซีรีส์สองความท้าทายเกี่ยวกับการทำซ้ำ วินาทีจะเพิ่มขึ้นในไม่ช้า

ในภาษาที่เรียกว่า Repetition (สิ่งที่ฉันเพิ่งสร้างขึ้น) ประกอบด้วยสตริงที่ไม่มีที่สิ้นสุดของที่12345678901234567890...มีการ1234567890ทำซ้ำตลอดไป

ไวยากรณ์ต่อไปนี้มีให้สำหรับหมายเลขเอาต์พุต:

  • +-*/: สิ่งนี้จะแทรกโอเปอเรเตอร์ในสตริงของตัวเลขที่ซ้ำกัน
    • ตัวอย่าง:
      • +-> 1+2= 3( +แทรก+ระหว่าง1และ2)
      • +*-> 1+2*3= 1+6= 7(เหมือนข้างบนยกเว้นใช้ตัวดำเนินการสองตัวในขณะนี้)
      • /-> 1/2= 0(การทำซ้ำใช้การหารจำนวนเต็ม)
      • //-> 1/2/3= 0/3= 0(การทำซ้ำใช้ "การเชื่อมโยงด้านซ้าย" พร้อมการลบและการหารหลายรายการ)
    • ผู้ให้บริการแต่ละรายจะถูกแทรกเพื่อให้มีหนึ่งหลักทางด้านซ้ายยกเว้นว่ามีc(ดูด้านล่าง)
  • c: เชื่อมต่อกับตัวเลขถัดไปในสตริง
    • ตัวอย่าง:
      • c+-> 12+3= 15( c"ต่อไป" 1และเชื่อมต่อกับตัวเลขถัดไป2เพื่อจัดรูปแบบ12)
      • +c-> 1+23=24
      • ccc -> 1234
  • (): วงเล็บสำหรับการประมวลผลหมายเลข
    • ตัวอย่าง:
      • (c+)*-> (12+3)*4= 15*4= 60(การทำซ้ำใช้ลำดับของการดำเนินการ)
      • (c+)/c-> (12+3)/45= 15/45=0
      • (cc+c)/-> (123+45)/6= 168/6=28
  • s: ข้ามตัวเลข (ลบตัวเลขออกจากสตริงอนันต์)
    • s+-> 2+3= 5( sข้าม1)
    • csc-> 124( cconcats แรก1และ2, sข้าม3และcconcats สุดท้าย12ไป4)
    • +s+-> 7(ครั้งแรกที่+เพิ่ม1และ2จะทำให้3, sข้าม3และสุดท้าย+เพิ่ม3เพื่อ4ที่จะทำให้7)
    • cs*(++)-> 12*(4+5+6)= 12*15=180

ในตัวอย่างข้างต้นจะใช้ตัวเลขจำนวน จำกัด ในสตริงที่ไม่สิ้นสุดเท่านั้น number of operators, concats and skips + 1จำนวนของตัวเลขที่ใช้เทียบเท่ากับ

งานของคุณคือเมื่อได้รับสตริงรหัสการทำซ้ำผลลัพธ์ผลลัพธ์

ตัวอย่างของอินพุตและเอาต์พุตคือ:

++ -> 6
- -> -1
(-)* -> -3
cscc -> 1245
(cc+c)/ -> 28
cc+c/ -> 130
cs*(++) -> 180

นี่คือโค้ดกอล์ฟดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

รายละเอียด:

  • คุณรับประกันได้ว่าผลลัพธ์จะไม่มีวัน2^31-1เปลี่ยนแปลง
  • คุณรับประกันด้วยว่าอินพุตจะประกอบด้วยสัญลักษณ์+-*/cs()เท่านั้น
  • 1ที่ว่างเปล่าเอาท์พุทโปรแกรมพระทัย

แล้ว~มันล่ะ? อย่าปล่อยให้เราแขวน
Robert Fraser

@RobertFraser อ๊ะนั่นเป็นความผิดพลาด แต่เดิม c ~ แต่ดูเหมือนว่าฉันไม่ได้แก้ไขอย่างสมบูรณ์
clismique

1
@ TonHospel Ooh คุณมีจุดดีที่นั่น สัญญลักษณ์ "s" จะลบตัวเลขที่เกี่ยวข้องจากสตริงอนันต์โดยสิ้นเชิงดังนั้นจึงเป็นใช่สำหรับทั้งสองสถานการณ์
clismique

2
ข้อกำหนดของคุณอย่างไรกล่าวs+คือ2+3เป็นตัวอย่างแรกของ และยังคงsดักฟังฉันอยู่ ฉันสงสัยว่า+s()+ขยายตัวอย่างไร ถ้ามันถูก1+(2)+4แล้ว(มาก่อน2แต่sที่มาแม้กระทั่งก่อนที่(ดูเหมือนจะยังคงข้ามไม่ได้3 2แต่ถ้าผลที่ได้คือ1+(3)+4แล้วผลของsขึ้นอยู่กับสิ่งที่เกิดขึ้นหลังจากที่มัน (เปรียบเทียบกับ+s+)
Ton Hospel

1
scเป็น23และs+คือ1+3อะไร? ไม่sข้าม1ในขณะนี้หรือ2? ตัวอย่างทั้งหมดใช้การดำเนินการครั้งแรกในตัวถูกดำเนินการ1และ2... ดังนั้นควรจะเป็นsc 13
ติตัส

คำตอบ:


4

JavaScript (ES6), 110 ไบต์

s=>eval((" "+s)[R='replace'](/[^\)](?!\()/g,x=>x+i++%10,i=1)[R](/c| (\ds)+|s\d/g,"")[R](/\d+\/\d+/g,"($&|0)"))

ง่ายมาก แต่การแบ่งจำนวนเต็มเพิ่ม 25 ไบต์ ด้วยเหตุผลบางอย่าง regex ใน JS ไม่สามารถจับคู่ทั้งจุดเริ่มต้นของสตริงและอักขระตัวแรกได้ดังนั้นจึงเพิ่มจำนวนสองสามไบต์

มันทำงานอย่างไร

  1. เตรียมช่องว่างให้กับอินพุต
  2. ผนวกหลักติดกับตัวละครแต่ละตัว (ยกเว้น)) (ที่ไม่ได้ทันทีก่อน
  3. ลบแต่ละcหลัก + sที่จุดเริ่มต้น ( 1s2-> 2) และแต่ละs+ หลัก ( 3s4-> 3)
  4. เปลี่ยนการดำเนินการของแต่ละแผนกให้เป็น int-division ( 1/2-> (1/2|0))
  5. ประเมินและกลับมา

ตกลง ... โปรแกรมของคุณมีข้อผิดพลาด ... ss+ผลตอบแทน6เมื่อมันหมายถึงการกลับ7(ทั้งสองsข้าม1และ2ดังนั้นการ+เพิ่ม3และ4)
clismique

@ Qwerp-Derp ขอบคุณคงแล้ว
ETHproductions

สิ่งที่ชอบ/^|,|$/gจะจับคู่เพียงครั้งเดียวที่จุดเริ่มต้นเนื่องจากการแข่งขันทั้งสองจะมีดัชนีเดียวกัน $ไม่มีปัญหาเดียวกันเนื่องจากการจับคู่มีดัชนีมากกว่าการจับคู่ที่เป็นไปได้อื่น ๆ
Neil

0

รุ่นที่ 332 ไบต์

@echo off
set s=
set e=
set d=
set r=
set/ps=
:d
set/ad=-~d%%10
:l
if "%s%"=="" goto g
set c=%s:~0,1%
set s=%s:~1%
if %c%==( set e=%e%(&goto l
if %c%==) set r=%r%)&goto l
if %c%==s goto d
if %c%==c set c=
if "%r%"=="" set/ar=d,d=-~d%%10
set e=%e%%r%%c%
set/ar=d
goto d
:g
if "%r%"=="" set/ar=d
cmd/cset/a%e%%r%

พฤติกรรมของการsทำให้เรื่องนี้น่าอึดอัดใจมาก (บางทีcsควรประเมิน13และ-sถึง-2?) ตัวแปร:

  • s สตริงป้อนข้อมูล (ลบออกอย่างชัดเจนเนื่องจาก set / p ไม่เปลี่ยนแปลงตัวแปรหากคุณไม่ได้ป้อนข้อมูลใด ๆ )
  • eการแสดงออกบางส่วนในเลขคณิตปกติจำนวนเต็ม (ซึ่งเราสามารถส่งset/aเป็นรูปแบบของeval)
  • d ตัวเลขถัดไปจากสตริงตัวเลขอนันต์
  • rด้านขวามือของผู้ปฏิบัติงานล่าสุด เราไม่สามารถต่อกันได้ทันทีเพราะ(ต้องมาก่อน แต่เราต้องเก็บมันเพื่อที่sจะไม่เพิ่มขึ้น โชคดีที่มันทำให้การจัดการ)ทำได้ง่ายขึ้นเล็กน้อย
  • c ตัวละครปัจจุบัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.