เรามาถึงจุดที่เราเริ่มแล้ว! ...


29

ท้าทาย:

การป้อนข้อมูล:

คุณรับสองอินพุต:
- สตริงประกอบด้วย ASCII ที่พิมพ์ได้เท่านั้น (ไม่รวมช่องว่างแท็บหรือบรรทัดใหม่)
- อักขระ ASCII ที่พิมพ์ได้

เอาท์พุท:

บรรทัดแรกจะมีการป้อนสตริง ทุกi-modulo-3 ครั้งแรกที่เกิดขึ้นของตัวละครนี้จะย้ายไปในทิศทางที่ตะวันออกเฉียงใต้; ทุกi-modulo-3 วินาทีที่เกิดขึ้นจะย้ายในทิศทางใต้; และทุก ๆi-modulo-3 เหตุการณ์ที่สามจะย้ายในทิศทางตะวันตกเฉียงใต้ คุณจะดำเนินการต่อไปจนกว่าอักขระจะอยู่ในตำแหน่งเริ่มต้นเริ่มต้นของพวกเขาอีกครั้ง (ซึ่งหมายความว่ามันจะถูกล้อมรอบจากด้านหนึ่งไปอีกด้านหนึ่งหากจำเป็น) จากนั้นคุณจะพิมพ์บรรทัดสุดท้ายด้วยการป้อนสตริงอีกครั้ง ทำมันให้เสร็จ. (โปรดทราบว่ากรณีทดสอบทั้งหมดจะสิ้นสุดที่อินพุตเริ่มต้นหลังจากที่length(input)แถวส่วนใหญ่รวมถึงแถวที่มีอินพุตต่อท้ายซึ่งอาจเร็วกว่าที่เห็นในกรณีทดสอบครั้งแรกด้านล่างนี้ด้วยความยาว 14 แต่สิ้นสุดหลังจาก 9. )

ทั้งหมดนี้อาจคลุมเครือดังนั้นนี่เป็นตัวอย่าง:

กรณีทดสอบ 1:

สตริงอินพุต: "This_is_a_test"
อักขระอินพุต:'s'

เอาท์พุท:

This_is_a_test
    s s    s  
     ss   s   
      s  s    
      sss     
      sss     
      s  s    
     ss   s   
    s s    s  
This_is_a_test

นี่คือกรณีทดสอบเดียวกันกับเส้นทางสีของทั้งสามs:

ป้อนคำอธิบายรูปภาพที่นี่

โดยเส้นทางแรก's'เดินไปตามเส้นทางสีเขียวในทิศทางตะวันออกเฉียงใต้ เส้นทางที่สอง's'เดินตามเส้นทางสีเหลืองในทิศใต้ และเส้นทางที่สาม's'เดินตามเส้นทางสีฟ้าอ่อนในทิศทางตะวันตกเฉียงใต้ (หากมีหนึ่งในสี่'s'มันจะไปในทิศทางตะวันออกเฉียงใต้อีกครั้งซึ่งสามารถเห็นได้ในบางกรณีทดสอบด้านล่าง)

กฏท้าทาย:

  • อินพุตจะมีเฉพาะ ASCII ที่พิมพ์ได้ (ยกเว้นช่องว่างแท็บและบรรทัดใหม่)
  • รูปแบบ I / O มีความยืดหยุ่น สามารถเป็นสตริงที่คั่นด้วยบรรทัดใหม่เมทริกซ์อักขระ ฯลฯ การโทรของคุณ
  • เป็นไปได้ว่าอักขระที่กำหนดไม่มีอยู่ในสตริงซึ่งในกรณีนี้คุณได้รับอนุญาตให้ส่งออกอินพุตสตริงหนึ่งหรือสองครั้ง (เช่น"test", 'a'สามารถมีหนึ่งในนั้นเป็นเอาต์พุตที่เป็นไปได้: "test\ntest"/"test" )
  • ช่องว่างชั้นนำเป็นข้อบังคับ; ช่องว่างต่อท้ายเป็นตัวเลือก อนุญาตให้ขึ้นบรรทัดใหม่หนึ่งหรือหลายบรรทัด

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น

กรณีทดสอบ / ตัวอย่างเพิ่มเติม:

กรณีทดสอบ 2:

สตริงอินพุต: "abcabcabcabcabc"
อักขระอินพุต:'b'

เอาท์พุท:

abcabcabcabcabc
  b b b    b b 
   bbb      bb 
    b        b 
   bbb       bb
b b b b      b 
 b  b  b     b 
b b b   b    b
   bb    b   bb
    b     b  b 
    bb     bbb
    b b    bbb 
    b  b  b  b 
    b   bb   bb
b   b   bb   b 
abcabcabcabcabc

นี่คือกรณีทดสอบเดียวกันกับเส้นทางสีของห้าa:

ป้อนคำอธิบายรูปภาพที่นี่

กรณีทดสอบ 3:

สตริงอินพุต: "only_two_paths?"
อักขระอินพุต:'o'

เอาท์พุท:

only_two_paths?
 o     o       
  o    o       
   o   o       
    o  o       
     o o       
      oo       
       o       
       oo      
       o o     
       o  o    
       o   o   
       o    o  
       o     o 
       o      o
only_two_paths?

นี่คือกรณีทดสอบเดียวกันกับเส้นทางสีของทั้งสองo:

ป้อนคำอธิบายรูปภาพที่นี่

กรณีทดสอบ 4:

สตริงอินพุต: "lollollollollol"
อักขระอินพุต:'l'

เอาท์พุท:

lollollollollol
lll   ll  ll   
 ll   ll  ll   
l ll ll ll ll  
  lll l ll l ll
  llllll  ll ll
l l  ll    ll  
 ll  lll   ll  
l l l lll ll l 
  ll  l ll l  l
l l l l llll l 
 ll  lll  lll  
l l   l    ll  
  ll lll  lllll
  l l l ll l ll
lollollollollol

นี่คือกรณีทดสอบเดียวกันกับเส้นทางสีของสิบl:

ป้อนคำอธิบายรูปภาพที่นี่

กรณีทดสอบ 5:

สตริงอินพุต: "AbCdEeDcBaAbCdEeDcBa_CCCCC"
อักขระอินพุต:'C'

เอาท์พุท:

AbCdEeDcBaAbCdEeDcBa_CCCCC
C  C        C       C  C  
 C  C       C      C  CCC 
  C  C      C     C  C C C
C  C  C     C    C  C  C  
 C  C  C    C   C  C   C  
  C  C  C   C  C  C    C  
   C  C  C  C C  C     C  
    C  C  C CC  C      C  
     C  C  CC  C       C  
      C  C CC C        C  
       C  C CC         C  
        CC CC C        C  
        CC CC  C       C  
       C  C CC  C      C  
      C  C CC C  C     C  
     C  C   C  C  C    C  
    C  C    CC  C  C   C  
   C  C     C C  C  C  C  
  C  C      C  C  C  C C  
 C  C       C   C  C  CC  
C  C        C    C  C  C  
  C         C     C  C CCC
 C          C      C  CCCC
C           C       C  C  
 C          C        CCCCC
AbCdEeDcBaAbCdEeDcBa_CCCCC

นี่คือกรณีทดสอบเดียวกันกับเส้นทางสีของทั้งเจ็ดC:

ป้อนคำอธิบายรูปภาพที่นี่

กรณีทดสอบ 6:

สตริงอินพุต: "XyX"
อักขระอินพุต:'X'

เอาท์พุท:

XyX
 XX
  X
XyX

นี่คือกรณีทดสอบเดียวกันกับเส้นทางสีของทั้งสองX:

ป้อนคำอธิบายรูปภาพที่นี่

กรณีทดสอบ 7:

สตริงอินพุต: "aaaa"
อักขระอินพุต:'a'

เอาท์พุท:

aaaa
aa  
aaa 
 aaa
aaaa

นี่คือกรณีทดสอบเดียวกันกับเส้นทางสีของสี่a:

ป้อนคำอธิบายรูปภาพที่นี่


ดังนั้นเมื่อสตริงมีหลายตัวอักขระ 3 ตัวเอาต์พุตอาจมีแถวน้อยกว่าความยาวของสตริง?
Neil

@ ไม่มีฉันไม่แน่ใจว่ามันเป็นหลายในสามหรือยังไม่ได้ตรวจสอบมันมากนัก ทั้งหมดที่ฉันรู้ก็คือว่าlength(input)ทุกอย่างตรงมากที่สุดอีกครั้ง แต่มันอาจเร็วกว่าที่กรณีทดสอบแรกพิสูจน์ แต่ดูเหมือนว่าคุณพูดถูกในสามส่วน (แม้ว่าฉันจะไม่แน่ใจ 100%)
Kevin Cruijssen

@Neil สตริงใด ๆ ที่มีอักขระปรากฏเพียง 3 ครั้งในหนึ่งแถวจะพิมพ์ 3 บรรทัด แต่จะยาวเท่าไร
Asone Tuhid

อนุญาตให้มีการขึ้นบรรทัดใหม่ระหว่าง 2 บรรทัดที่พิมพ์หรือไม่
Asone Tuhid

@AsoneTuhid ขออภัย แต่ไม่ ฉันไม่สนใจจำนวนบรรทัดต่อท้ายหรือนำบรรทัดใหม่ก่อนหรือหลังเอาต์พุตที่คาดหวังทั้งหมด แต่ฉันจะไม่อนุญาตระหว่างบรรทัด เส้นทแยงมุมจะไม่ถูกต้องอีกต่อไปเช่นกัน ..
Kevin Cruijssen

คำตอบ:


1

สแตกซ์ , 24 ไบต์

»v↕*δó‼Γ█|q┬YM╨|·£↕fßßZo

เรียกใช้และตรวจแก้จุดบกพร่องออนไลน์

นี่คือตัวแทน ASCII ของโปรแกรมเดียวกัน

YxP|Ic{{i3%v-x%%mb-!Czny&PWxP

มันจะได้ดัชนีของตัวละครทั้งหมดแล้วก็ทำการเปลี่ยนแปลงพวกมันจนกว่าพวกมันจะถูกตั้งค่าอย่างชาญฉลาดเท่ากับดัชนีดั้งเดิม สำหรับการเปลี่ยนแปลงทุกครั้งเอาต์พุตสตริงด้วยอักขระที่ดัชนีเหล่านั้น

Y                               Store character in y.  Now the inputs are x and y.
 xP                             Print x.
   |Ic                          Get all indices of y in x. Make a copy.
      {                   W     Loop until cancelled.
       {        m               Map index array using block.
        i3%v-                   Subtract i%3-1 from each element. i is the loop index.
             x%%                Modulo len(x)
                 b-!            Is the mutated array set-equal to the original?
                    C           If so, cancel W loop
                     zny&P      Print a string with y at all specified indices
                           xP   Finally, print x again

8

Perl 5 , -plF 101 100 99 98 97 96 ไบต์

แทนที่\0ด้วยตัวอักษร 0 ไบต์เพื่อรับ 96 โปรดสังเกตว่าลิงค์ลองออนไลน์มี 97 ไบต์เพราะดูเหมือนจะไม่สามารถป้อนอักขระ 0 ตัวอักษรที่นั่นได้

#!/usr/bin/perl -plF
say;say$$l=~y/\0/ /runtil--$l,(s:\Q${\<>}:$$l|=v0 x((++$#$l%3*$l-$l+"@-")%@F).$&;v0:oreg^$$l)eq$_

ปากกาเน้นข้อความกอล์ฟ perl คิดว่า#เริ่มความคิดเห็น ช่างไร้เดียงสา😈

ลองออนไลน์!

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

$lเป็นตัวนับสำหรับบรรทัดที่อยู่หลังบรรทัดแรกที่เราอยู่ (มันนับถอยหลังดังนั้นเช่น -3 สำหรับ 3 บรรทัดใต้สตริงด้านบน) หลังจากพิมพ์สตริงเริ่มต้นเมื่อซ้ำแล้วซ้ำอีกจะทำดังต่อไปนี้

ค้นหาสตริงแรกเพื่อค้นหาอักขระเป้าหมายและคำนวณว่าควรจะชดเชยอ็อพชั่นไหน: (++$#$l%3*$l-$l+"@-")%@Fซึ่งเป็นตำแหน่งปัจจุบันบวกกับจำนวนบรรทัด (ลบ) ครั้ง-1, 0, 1(ไซคลิก) สร้างสตริงกับที่หลาย ๆ ครั้ง\0ตามด้วยอักขระเป้าหมายและorที่เป็นสะสม$$l(นั่นคือสะสมที่แตกต่างกันสำหรับแต่ละ$lและเหตุผลที่$lนับลงแทนเพราะ$1, $2ฯลฯ จะอ่านอย่างเดียว) Simularly $#$lหมายถึงอาร์เรย์ที่แตกต่างกันในแต่ละครั้งที่ผ่านการวนซ้ำ ผลลัพธ์คือ$lบรรทัดที่ แต่\0แทนที่ด้วยช่องว่าง

ตัวอักษรเป้าหมายในสตริงแรกจะถูกแทนที่ด้วย\0ดังนั้นคุณจะจบลงด้วยสตริงเดิมด้วย "หลุม" (พร้อม\0) ที่ตำแหน่งเดิมของตัวละครเป้าหมาย หากคุณxorมีการสะสมหลุมจะได้รับการเติมถ้าหากมีการสะสมตัวละครเป้าหมายในตำแหน่งเดิมดังนั้นผลลัพธ์จะเป็นสตริงเดิม ที่ใช้ในการยกเลิกการวนรอบ หากการวนซ้ำยังไม่เสร็จสิ้นให้พิมพ์ตัวสะสมด้วยการ\0แทนที่ด้วยช่องว่าง

เมื่อลูปสิ้นสุด-pตัวเลือกอีกครั้งพิมพ์สตริงแรกและโปรแกรมจะทำ

ตัวละครเป้าหมายหยิบขึ้นมาในลักษณะที่ค่อนข้างยุ่งยาก การ${\<>}แปลงบรรทัดที่อ่านจาก STDIN เป็นการอ้างอิงซึ่งจะถูกยกเลิกและแทนที่ใน regex ทันที \Qคำนำหน้าหนีทุกตัวอักษรที่มีความพิเศษใน regex (ชอบ.และ*) \Eเป็นนัย โมดิoฟายเออร์ทำให้ส่วนการค้นหาไม่ได้รับการประเมินอีก แต่ทำซ้ำในการแข่งขันที่ตามมาทั้งหมด (ซึ่งดีเพราะไม่มีอะไรใน STDIN อีกต่อไป)


ฉันไม่คิดว่าคุณสามารถใส่ค่า null ได้โดยตรง แต่คุณสามารถรันมันด้วยการทุบตีหรืออะไรก็ได้
FryAmTheEggman

@FryAmTheEggman ขอบคุณนั่นเป็นดอดจ์ที่ดี แต่ฉันไม่คิดว่าฉันจะรบกวน ผู้คนจะต้องเชื่อใจฉันว่ามันใช้ได้ผลถ้าพวกเขาไม่ต้องการลองด้วยตัวเอง :-)
Ton Hospel

ยุติธรรมอย่างสมบูรณ์ แต่ฉันจะออกความคิดเห็นเพื่อให้ผู้คนสามารถเห็นมัน สนามกอล์ฟที่ดีตามทาง :)
FryAmTheEggman

4

Python 2 , 199 193 191 ไบต์

s,c=input()
print s;l=len(s);r=range;I=j=[i for i in r(l)if s[i]==c]
while 1:
 j=[(j[i]-i%3+1)%l for i in r(len(I))]
 if sorted(j)==I:print s;break
 print''.join((' '+c)[i in j]for i in r(l))

ลองออนไลน์!


หากลูปสามารถออกจากข้อยกเว้น:

Python 2 , 187 ไบต์

s,c=input()
print s;l=len(s);r=range;I=j=[i for i in r(l)if s[i]==c]
while 1:
 j=[(j[i]-i%3+1)%l for i in r(len(I))]
 if sorted(j)==I:print s;q
 print''.join((' '+c)[i in j]for i in r(l))

ลองออนไลน์!


  • -4 ไบต์ขอบคุณ Jonathan Frech
  • -2 ไบต์ขอบคุณ Lynn

เป็นไปได้189 ไบต์ (ออกจากลูปผ่านข้อยกเว้น)
Jonathan Frech

คุณสามารถวาง parens คู่หนึ่งใน(j[i]-i%3+1)%lสองไบต์
Lynn


2

JavaScript (Node.js) , 197 194 ไบต์

s=>c=>{(C=console.log)(s);w=0;g=[];while(~(w=s.indexOf(c,w)))g.push(w++);h=(H=_=>g.map(x=>A[x]=c,A=Array(l=s.length).fill` `)&&A.join``)();while(h!=(y=H(g=g.map((x,i)=>(l-~x-i%3)%l))))C(y);C(s)}

ลองออนไลน์!

f(s)(c)นำปัจจัยการผลิตในความดีความชอบไวยากรณ์คือ

ไม่ใช่คนที่สมบูรณ์แบบเลย แต่ฉันต้องการ JS ฟังก์ชั่นมากมายในฟังก์ชั่น



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