การสะท้อนสตริงอาเรย์ระดับกลาง


16

เริ่มจากการกำหนดภาพสะท้อนของตัวละครในอาเรย์แบบสองมิติอีกครั้ง:

กำหนดอาเรย์ 2-d อาร์เรย์ของตัวอักษรที่มีตัวอักษรตัวพิมพ์เล็กที่แตกต่างกันกำหนดสะท้อนของตัวอักษรในเมทริกซ์เป็นการแลกเปลี่ยนกับตัวละครตรงข้ามจากมันผ่านใจกลางของสแควร์

ดังนั้นภาพสะท้อนของตัวอักษรcใน

abcde
fghij
klmno
pqrst
uvwxy

จะส่งผลให้การกำหนดค่า

abwde
fghij
klmno
pqrst
uvcxy

เพราะcและwมีการเปลี่ยน

ตัวอย่างเพิ่มเติมบางส่วน (ที่มีการกำหนดค่าดั้งเดิมเหมือนด้านบน):

สะท้อนให้เห็นถึงตัวละครeจะฟอร์ม

 abcdu
 fghij
 klmno
 pqrst
 evwxy

สะท้อนถึงตัวละครที่mจะทำให้

 abcde
 fghij
 klmno
 pqrst
 uvwxy

สะท้อนให้เห็นถึงตัวละครbจะฟอร์ม

 axcde
 fghij
 klmno
 pqrst
 uvwby

ความท้าทาย

รับอาร์เรย์ 2 มิติของตัวอักษรที่มีตัวอักษรตัวพิมพ์เล็กที่แตกต่างกันไปผ่านตัวละครแต่ละตัวในสตริงที่กำหนดและ "สะท้อน" ในเมทริกซ์

การชี้แจง: ตัวอักษรในสตริงมาจากa-zตัวอักษรมีเอกลักษณ์และอาร์เรย์ต้องมีอย่างน้อย 1x1 และสูงสุด 5x5 (เห็นได้ชัดเนื่องจากมีเพียง 26 ตัวอักษรในตัวอักษรภาษาอังกฤษ)ตัวอักษรในสตริงรับประกันว่าจะเป็น ในอาร์เรย์ 2 มิติ สตริงมีความยาวไม่เกิน 100 อักขระ

อินพุต

สายอักขระsจำนวนเต็มNและNxNอาร์เรย์ของอักขระ

ตัวอย่าง

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

ac
2
ab
cd

เอาท์พุท:

dc
ba

* เหตุผล: ครั้งแรกที่สะท้อนให้เห็นถึงกับa dจากนั้นสะท้อนให้เห็นถึงcด้วยbเพราะเพราะcเป็นตัวอักษรที่สองในสายป้อน


เกณฑ์การให้คะแนน

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

ผู้ชนะปัจจุบัน


9
ครึ่งชั่วโมงไม่มีเวลามากพอที่จะใช้ประโยชน์จากทรายอย่างมีความหมาย
โพสต์ Rock Garf Hunter

3
ไม่มีปัญหามันดูดี
user202729

1
(นอกจากนี้เรายังมีกระดานข้อมูลโค้ดแบบสแต็กซ์ )
user202729

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

2
ตัวอย่างทั้งหมดของคุณมีอักขระตามลำดับตัวอักษร ฉันคิดว่านั่นไม่ใช่ข้อสมมุติที่เราทำได้ นอกจากนี้เราต้องใช้Nเป็นอินพุตถ้าเราไม่ต้องการมัน?
Stewie Griffin

คำตอบ:


3

อ็อกเทฟ , 85 68 66 ไบต์

การใช้evalด้วยการวนรอบในนั้นช่วยบันทึกจำนวนมากไบต์! ฉันได้รับแรงบันดาลใจจากคำตอบของLuis Mendo !

@(c,N,A)eval"for C=c,A(flip(k))=A(k=[x=find(A==C),N^2+1-x]);end,A"

ลองออนไลน์!

คำอธิบาย:

f=@(c,N,A)          % Anonymous function that takes the three input variables
eval"...          % Evaluate the string and run it:
 for C=c,          % Loop over the character list 'c'
  .. x=find(A==C)   % Find the index where the character C is in A, and store it as 'x'
  .. k=[x,N^2+1-x]  % Create a vector with the index of C, and the index of its reflection
   A(flip(k))=A(k)  % Swap the elements in these positions
  end               % End loop
  A"                % Display the new 'A'

2

Python 2 , 76 ไบต์

lambda s,a:[a[[i,~i][(s.count(c)+s.count(a[~i]))%2]]for i,c in enumerate(a)]

ลองออนไลน์!

ใช้อินพุต:

  • s: สตริง
  • N: ถูกละเว้น
  • a: เข้าร่วมสตริงของตัวอักษร

ส่งคืนรายการอักขระแบบคงที่


ถ้าฉันต้องใช้อาร์เรย์เป็นรายการ:

Python 2 , 111 108 107 104 ไบต์

lambda s,n,a:[[x[sum(map(s.count,x))%2]for i in range(n)for x in[[a[j][i],a[~j][~i]]]]for j in range(n)]

ลองออนไลน์!

ใช้อินพุต:

  • s: สตริง
  • n: int
  • a: รายการ 2D ของตัวอักษร

ส่งคืนรายการตัวอักษร 2D


1

Java 10, 126 123 116 ไบต์

(s,n,m)->{for(var c:s)for(int N=n*n,i,j;N-->0;)if(m[i=N/n][j=N%n]==c){m[i][j]=m[n+~i][n+~j];m[n+~i][n+~j]=c;break;}}

ปรับเปลี่ยนเมทริกซ์อักขระอินพุตแทนที่จะส่งคืนใหม่เพื่อบันทึกไบต์

ลองออนไลน์

คำอธิบาย:

(s,n,m)->{        // Method with the three parameters and no return-type
  for(var c:s)    //  Loop over the characters given
    for(int N=n*n,i,j;N-->0;)
                  //   Inner loop over the matrix
      if(m[i=N/n][j=N%n]==c){
                  //    If the current character and matrix-value are equals:
        m[i][j]=m[n+~i][n+~j];m[n+~i][n+~j]=c;
                  //     Swap the values in the matrix at indices [i, j] and [n-i-1, n-j-1]
        break;}}  //     Stop the inner loop (go to next iteration of the outer loop)

แดงโค้ดใน java! ??!?! +1 Def
NL628

1

Python 3 , 122 111 bytes

lambda l,n,A:[[[A[a][b],A[~b][~a]][sum(map(l.count,[A[a][b],A[~b][~a]]))%2]for b in range(n)]for a in range(n)]

ลองออนไลน์!

ส่งคืนอาร์เรย์ 2 มิติของ chars


คุณควรจะสามารถเล่นกอล์ฟนี้ต่อไป .. ไม่มีวิธีแก้ไขเมทริกซ์อินพุตที่สั้นกว่าใน Java มากกว่าใน Python .. ; p ในการเริ่มต้น (และทำให้สั้นลง 1 ไบต์แทนที่จะเป็น 1 ไบต์นานกว่าคำตอบ Java ของฉัน): การลบaและbและการใช้n+~xและn+~yโดยตรงช่วยประหยัด 2 ไบต์: a,b=n+~x,n+~y;A[x][y],A[a][b]=A[a][b],A[x][y]ไปA[x][y],A[n+~x][n+~y]=A[n+~x][n+~y],A[x][y]
เควิน Cruijssen

1

R , 74 61 ไบต์

-13 ไบต์ขอบคุณ Giuseppe

function(s,n,m){for(x in s)m[v]=rev(m[v<-(i=x==m)|rev(i)]);m}

ลองออนไลน์!

ปัจจัยการผลิตเวกเตอร์ของตัวละครในการค้นหาเป็นsขนาดของเมทริกซ์เป็นและเมทริกซ์ตัวเองเป็นn mหากมีความจำเป็นอย่างยิ่งที่จะต้องเอาอาร์กิวเมนต์แรกมาเป็นสตริงนั่นจะทำให้เสียความสนุก


ใช้ตรรกะมากกว่าดัชนีที่เป็นตัวเลขฉันลงไปที่61 bytes
Giuseppe

ว้าวนั่นคือการปรับปรุงที่แข็งแรงขอบคุณมาก
คิริลล์ลิตร

0

เยลลี่ , 15 14 ไบต์

FW;Ṛi,C$¥¦/ṁḷY

ลองออนไลน์!

โปรแกรมเต็มรูปแบบ

คำอธิบาย:

FW; ,i, C $ ¥ ¦ / ṁḷYลิงก์หลัก อินพุต: ['ab', 'cd'] (ซ้าย), 'ac' (ขวา)
FW                    F latten และWแร็พไว้ในรายการ ค่าปัจจุบัน = ['abcd']
  ; เชื่อมต่อกับอาร์กิวเมนต์ที่ถูกต้อง [ 'ABCD', 'A' 'C']
          / ลดจากซ้าย:
   Ṛ ¦ สมัครพบเห็นได้ที่ ...
    ฉันดัชนี (ของอาร์กิวเมนต์ที่ถูกต้องในอาร์กิวเมนต์ซ้าย) ...
     , C $ และดัชนีส่วนเสริม

การดำเนินการครั้งสุดท้ายต้องการคำอธิบายเพิ่มเติม แสดงว่า f = Ṛi,C$¥¦สำหรับค่าที่['abcd','a','c']คำนวณ('abcd' f 'a') f 'c'ซึ่งจะขยายเป็น:

Ṛi, C $ ¥ ¦ ฟังก์ชั่นf . สมมติให้อาร์กิวเมนต์ที่เหลือ = 'abcd' และอาร์กิวเมนต์ที่ถูกต้อง = 'a'
Ṛก่อนอื่นคำนวณการย้อนกลับ รับ 'dcba'
 i ¥ในการคำนวณดัชนีที่จะนำไปใช้อันดับแรกของดัชนี 'a' ใน 'abcd'
             คือ ('abcd' i 'a') = 1. (ดัชนีแรก)
  , C $ จากนั้นจับคู่กับ (1 C) = 0. (ดัชนีล่าสุด)
      ¦ ใช้ 'dcba' กับ 'abcd' ที่ดัชนี 0 และ 1:

              a bc d
               d cb a
              ^ 1 ^ 0
              ====
              DBCA

0

เรติน่า 0.8.2 , 96 ไบต์

+`^(.)(.*¶(.|¶)*)((.)((.|¶)*))?\1(?(4)|(((.|¶)*)(.))?)((?<-3>.|¶)*$(?(3).))
$2$11$9$1$6$5$12
1A`

ลองออนไลน์! ใช้เวลาสตริงและอาร์เรย์ของตัวอักษรเป็นสตริงขึ้นบรรทัดใหม่โดยไม่ต้องคั่นด้วยจำนวนเต็มs Nคำอธิบาย: อักขระแต่ละตัวcของsถูกประมวลผลตามลำดับ regex ตรงกับสองตำแหน่งเท่ากันจากปลายของอาร์เรย์ของเป็นที่หนึ่งที่cและอื่น ๆ mที่เป็นกระจก ตัวละครเหล่านี้จะสลับและถูกลบออกจากcs

+`

ประมวลผลตัวละครแต่ละตัวsในทางกลับกัน

^(.)

$1cจับ

(.*¶(.|¶)*)

$3จับสแต็คของตัวละครในอาร์เรย์ prefixing หนึ่งหรือc จับส่วนที่เหลือทั้งหมดของตัวละครเหล่านี้m$2s

((.)((.|¶)*))?

หากmแจ๋วc, $4มีค่า, $5จับmและ$6จับตัวละครระหว่างและm จับเป็นสแต็ก แต่ไม่ได้ใช้ค่าc$7$6

\1

c ถูกจับคู่ในอาร์เรย์แล้ว

(?(4)|(((.|¶)*)(.))?)

หากmไม่ได้รับการจับคู่อยู่แล้ว$8เลือกที่จะจับค่าในกรณีที่$9จับตัวละครจากcไปm, $10จับ$9เป็นสแต็คซึ่งเป็นที่ไม่ได้ใช้และจับ$11 mค่าเป็นทางเลือกในกรณีcและmเป็นอักขระเดียวกัน

((?<-3>.|¶)*$(?(3).))

$12จับตัวอักษร suffixing อื่น ๆ ของและc mกลุ่มที่สมดุลจะใช้เพื่อให้แน่ใจ$12ว่าตราบใดที่$3ลึกเช่นคำนำหน้าและคำต่อท้ายจะมีความยาวเท่ากัน

$2$11$9$1$6$5$12

ชิ้นส่วนจะถูกนำกลับมารวมกัน - ก่อนอื่นsและส่วนที่เหลือของคำนำหน้าของอาร์เรย์แล้วถ้าcนำหน้าmแล้วmจากนั้นตรงกลางแล้วcจากนั้นถ้าmนำหน้าcแล้วตรงกลางแล้วmต่อท้ายแล้ว

1A`

ตอนนี้ที่ sมันว่างเปล่ามันจะถูกลบ



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