เปลี่ยนแรงโน้มถ่วงข้อความเช่นปริศนา 2048


14

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

ab cd e 
 f ghij 
      kl
mno p   
 q r st 
u      v
 w x  y 
z       

หรือ

['ab cd e ', ' f ghij ', '      kl', 'mno p   ', ' q r st ', 'u      v', ' w x  y ', 'z       ']

สี่การดำเนินงานleft, right, และup downผลลัพธ์ของแต่ละรายการในอินพุตด้านบน:

ซ้าย:

abcde   
fghij   
kl      
mnop    
qrst    
uv      
wxy     
z       

หรือ

['abcde   ', 'fghij   ', 'kl      ', 'mnop    ', 'qrst    ', 'uv      ', 'wxy     ', 'z       ']

ขวา:

   abcde
   fghij
      kl
    mnop
    qrst
      uv
     wxy
       z

หรือ

['   abcde', '   fghij', '      kl', '    mnop', '    qrst', '      uv', '     wxy', '       z']

ขึ้น:

abocdiel
mf ghsjv
un rp k 
zq x  t 
 w    y 


        

หรือ

['abocdiel', 'mf ghsjv', 'un rp k ', 'zq x  t ', ' w    y ', '        ', '        ', '        ']

ลง:

        


 b    e 
af c  j 
mn gd k 
uq rhitl
zwoxpsyv

หรือ

['        ', '        ', '        ', ' b    e ', 'af c  j ', 'mn gd k ', 'uq rhitl', 'zwoxpsyv']

เป้าหมายของคุณคือการหมุนการดำเนินการที่จะดำเนินการซ้ำแต่ละครั้งดำเนินการในnเวลาที่ป้อนเข้า ดังนั้นหากคำสั่งซื้อของคุณURDLและอินพุตบอกว่าเริ่มต้นด้วยD( 2, 0 ดัชนี) และคุณต้องการ5การดำเนินการคุณดำเนินการD-L-U-R-Dแล้วพิมพ์

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

  • สตริงในรูปแบบด้านบน
    • ไม่จำเป็นต้องใช้ช่องว่างต่อท้าย (แต่อาจมีประโยชน์)
    • มันจะมีอย่างน้อย 2x2
    • จะมีเฉพาะ ASCII ที่พิมพ์ได้และช่องว่าง (และบรรทัดใหม่ตามรูปแบบการป้อนข้อมูลของคุณ)
    • คุณควรสนับสนุนความยาวตามหลักเหตุผลใด ๆ
  • จำนวนเต็มที่ไม่เป็นลบnสำหรับจำนวนของการดำเนินการที่จะดำเนินการ
  • จำนวนเต็ม0-3หรือ1-4หรือตัวอักษรUDLRอธิบายการดำเนินการที่จะเริ่มต้นด้วย
    • ดังนั้นโปรแกรมของคุณจะต้องสามารถเริ่มต้นหรือสิ้นสุดด้วยการดำเนินการใด ๆ
    • คุณอาจจะกำหนดให้ในลำดับใด ๆ สำหรับการเริ่มต้นวัตถุประสงค์ แต่มันจะต้องเป็นคำสั่งที่สอดคล้องกันจึงUไม่สามารถบางครั้งทำตามและบางครั้งก็ทำตามRL
  • การดำเนินการจะต้องดำเนินการที่ไม่สำคัญ
    • คุณสามารถดำเนินการตามลำดับLDRU(ซ้าย, ลง, ขวา, ขึ้น) ซ้ำ ๆ แต่ไม่ใช่DLRUหรือUDLR(เพราะUDเหมือนกันDและLRเหมือนกันกับที่ทำR)

เอาท์พุท:

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

ตัวอย่าง:

URDLตัวอย่างนี้ใช้คำสั่ง

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

10  (number of times operations are applied)
0   (starts with Up)
ab cd e 
 f ghij 
      kl
mno p   
 q r st 
u      v
 w x  y 
z       

เอาต์พุตสำหรับ n = 0-5: (เพียงพิมพ์ผลลัพธ์สุดท้าย)

ab cd e 
 f ghij 
      kl
mno p   
 q r st 
u      v
 w x  y 
z       
---------------
abocdiel
mf ghsjv
un rp k 
zq x  t 
 w    y 



---------------
abocdiel
 mfghsjv
   unrpk
    zqxt
      wy



---------------



      el
    dijv
   chspk
 bognrxt
amfuzqwy
---------------



el      
dijv    
chspk   
bognrxt 
amfuzqwy
---------------
eljvkxty
disprqw 
chgnz   
bofu    
am      


        

การใช้งานที่สวยและไม่อวดดีของฉัน


ที่เกี่ยวข้องแต่แตกต่างกันเพราะสามารถมีตัวอักษร "หลุดออกจากแผนที่"
mbomb007


1
ควรจะพิมพ์เฉพาะผลสุดท้ายหรือขั้นตอนกลางด้วยหรือไม่ อีกทั้งผลลัพธ์ก็ไม่ได้เป็นเพียงวงจรหลังจากการดำเนินการทั้งสี่ครั้งเดียวแล้วหรือไม่ (ไม่แน่ใจเพียงเดา)
Luis Mendo

เพียงแค่ผลลัพธ์สุดท้าย และผมยืนยันว่ามันไม่ได้เป็นวงกลม
mbomb007

ไม่ใช่วัฏจักรหลังจากการดำเนินการเพียงสี่ครั้งนั่นคือ ระยะเวลาจะนานขึ้น
mbomb007

คำตอบ:


2

เยลลี่ 23 ไบต์

UZ
Ç¡=⁶$Þ€Ç$⁴¡ZU$⁵+⁴¤¡Y

ลองออนไลน์!

ฉันค่อนข้างไม่พอใจ แต่ MATL นั้นต้องการการแข่งขัน : P

URDLการใช้คำสั่ง ปัจจัยการผลิต:

  • อาร์เรย์อินพุตเป็นอาร์เรย์ของเส้นที่มีเบาะ
  • จำนวนการทำซ้ำ
  • การย้ายเพื่อเริ่มจาก (1 = U, 2 = R, 3 = D, 4 = L)

คำอธิบาย

UZ       Helper link. Argument: A (the 2D array)
U        Reverse each line and...
 Z       ...transpose. Rotates 90° CCW.

Ç¡=⁶$Þ€Ç$⁴¡ZU$⁵+⁴¤¡Y    Main link. Arguments: A, n (2D array, repetitions)
Ç                       Rotate 90° CCW...
 ¡                      ...m times. (m = which move to start on)

     Þ                  Sort...
      €                 ...each line of the array...
  =⁶                    ...based on the characters' equality to " ".
       Ç                Rotate 90° CCW.
        $               Combine the sort and rotate to one action.
         ⁴¡             Do that n times. (n = repetition count)

           Z            Transpose and...
            U           ...reverse each line. Rotates 90° CW.
             $          Combine the transpose and reverse to one action.
                  ¡     Do that...
              ⁵+⁴¤      ...m + n times.

                   Y    Join the array by newlines.

2

JavaScript (ES6), 168 ไบต์

(n,d,s,t=s.replace([RegExp(`( )([^]{${l=s.search`
`}})(\\w)`),/(.)(\b)( )/,RegExp(`(\\w)([^]{${l}})( )`),/( )(\b)(.)/][d%4],`$3$2$1`))=>n?t!=s?f(n,d,t):f(n-1,d+1,s):s

Ungolfed:

function gravity(count, direction, string) {
    let width = string.indexOf('\n');
    let up = new RegExp('( )([^]{' + width + '})(\\w)');
    let down = new RegExp('(\\w)([^]{' + width + '})( )');
    while (count--) {
        let regexp = [up, /(.)(\b)( )/, down, /( )(\b)(.)/][direction++ % 4];
        while (regexp.test(string)) string = string.replace(regexp, '$3$2$1');
    }
    return string;
}

dURDLเป็นดัชนีแรกในทิศทางที่มี


1

Python 2 , 226 224 204 193 ไบต์

-1 ไบต์ขอบคุณ Trelzevir

x,s,n=input()
j=''.join
g=lambda x,i:[eval("j(_.split(' ')).%sjust(len(_))"%'lr'[i%2])for _ in x]
for i in([0,3,1,2]*n)[s:s+n]:x=[map(j,zip(*g(map(j,zip(*x)),i))),g(x,i)][i>1];print'\n'.join(x)

ลองออนไลน์!

ฟังก์ชั่นที่ลบช่องว่างทั้งหมดของแต่ละองค์ประกอบในรายการและสมบูรณ์ด้วยช่องว่างทางซ้ายหรือขวา

g=lambda x,i:[eval("''.join(_.split(' ')).%sjust(len(_))"%'lr'[i%2])for _ in x]

สิ่งนี้เพื่อโอนย้าย (หมุน90º) เมื่ออินพุต0หรือ1( UหรือD) และใช้g

x=[map(''.join,zip(*g(map(''.join,zip(*x)),i))),g(x,i)][i>1]

1
for i in (...)พื้นที่พิเศษใน
Trelzevir

นี่เป็นเวอร์ชั่นของการติดตั้งใช้งานของฉัน (ฉันไม่เคยใส่ใจกับมันมากนัก)
mbomb007

1

MATL , 24 23 ไบต์

:+"@X!XJ_JXzJ32>S(c@_X!

คำสั่งซื้อURDL, 1เบส ดังนั้น1Ù ,2 isR` เป็นต้น

อินพุตคือ: จำนวนครั้ง, ทิศทางเริ่มต้น, เมทริกซ์ถ่าน (ใช้;เป็นตัวคั่นแถว)

ลองออนไลน์!


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