Ara Dize Dizisi Yansıması


16

2-b karakterlik bir dizideki bir karakterin yansımasını yeniden tanımlayarak başlayalım :

Farklı küçük harfli alfabetik harflere sahip kare 2-d karakter dizisi verildiğinde, matristeki bir harfin yansımasını, karenin ortasından tam karşısındaki karakterle değiştirerek tanımlayın.

Böylece, mektubun bir yansıması ciçinde

abcde
fghij
klmno
pqrst
uvwxy

yapılandırma ile sonuçlanır

abwde
fghij
klmno
pqrst
uvcxy

çünkü cve wanahtarları değiştirildi.

Bazı örnekler (yukarıdaki ile aynı orijinal yapılandırma ile):

Karakteri yansıtan eoluşturacaktır

 abcdu
 fghij
 klmno
 pqrst
 evwxy

Karakteri yansıtan myapacak

 abcde
 fghij
 klmno
 pqrst
 uvwxy

Karakteri yansıtan boluşturacaktır

 axcde
 fghij
 klmno
 pqrst
 uvwby

Meydan okuma

Farklı küçük harflere sahip 2-d karakter dizisi verildiğinde, belirli bir dizgideki her karakteri gözden geçirin ve bunu matriste "yansıtın".

Açıklamalar: Dizedeki harfler a-z harfler, harfler benzersizdir ve dizi en az 1x1 ve en fazla 5x5'tir (açıkçası, İngilizce alfabesinde sadece 26 karakter olduğu için) . Dizedeki karakterlerin 2-d dizisinde. Dize en fazla 100 karakter uzunluğundadır.

Giriş

Bir dize s, bir tam sayı Nve sonra birNxN dizi karakter.

Misal

Giriş:

ac
2
ab
cd

Çıktı:

dc
ba

* Sebep: Birincisi, yansıtmak aile d. Ardından yansıtmak cile bçünkü cgirdi dizesindeki ikinci mektup.


puanlama

  • Çıktı herhangi bir uygun yöntemle verilebilir .
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • Standart boşluklar yasaktır.
  • Bu bu nedenle her zamanki golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Mevcut Kazanan


9
Yarım saat, sanal alandan anlamlı bir şekilde yararlanmak için yeterli zaman değildir.
Rock Garf Hunter Post

3
Sorun değil, iyi görünüyor.
user202729

1
(ayrıca bir Stack snippet leaderboard'umuz var)
user202729

6
50 saat, bir kazananı kabul etmek için biraz daha kısa sürelidir; genellikle bir hafta kadar beklemek istersiniz. Bununla birlikte, PPCG'de, herhangi bir cevabı kabul etmemek yaygın bir uygulamadır, çünkü gelecekteki cevapları caydırır ve zorlukları sonsuza kadar açık tutmak istiyoruz.
HyperNeutrino

2
Tüm örnekleriniz alfabetik sırayla karakterlere sahiptir. Sanırım bu yapabileceğimiz bir varsayım değil mi? Ayrıca, yapmamız var almak Nbunu gerekmiyorsa girdi olarak?
Stewie Griffin

Yanıtlar:


3

Oktav , 85 68 66 bayt

evalİçinde bir döngü kullanarak , çok bayt kurtardı! Ben ilham aldım bu cevap ile Luis Mendo !

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

Çevrimiçi deneyin!

Açıklama:

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 bayt

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

Çevrimiçi deneyin!

Girdi alır:

  • s: string
  • N: yok sayıldı
  • a: birleştirilmiş karakter dizisi

Düz bir karakter listesi döndürür


Ben ise sahip bir liste olarak diziyi almaya:

Piton 2 , 111 108 107 104 bayt

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)]

Çevrimiçi deneyin!

Girdi alır:

  • s: string
  • n: int
  • a: 2B karakter listeleri

2B karakter listesini döndürür


1

Java 10, 126 123 116 bayt

(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;}}

Baytları kaydetmek için yenisini döndürmek yerine giriş karakter matrisini değiştirir.

Çevrimiçi deneyin.

Açıklama:

(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)

Dang, java'da kodlama! ??!?! +1 Def
NL628

1

Python 3 , 122111 bayt

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)]

Çevrimiçi deneyin!

2B karakter dizisini döndürür.


Bunu daha fazla golf oynayabilmeniz gerekir. Java'da giriş matrisini değiştirmenin hiçbir yolu Python'dan daha kısa değildir ..; p Başlamak için (ve Java cevabımdan 1 bayt daha uzun değil 1 bayt kısaltmak) ave bve kullanma n+~xve n+~y: doğrudan 2 bayt kaydeder a,b=n+~x,n+~y;A[x][y],A[a][b]=A[a][b],A[x][y]içinA[x][y],A[n+~x][n+~y]=A[n+~x][n+~y],A[x][y]
Kevin Cruijssen

1

R , 7461 bayt

Giuseppe sayesinde -13 bayt.

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

Çevrimiçi deneyin!

Arama yapılacak karakterlerin bir vektörünü s, matrisin boyutunu nve matrisin kendisini olarak girer m. İlk argümanı dize olarak almak kesinlikle gerekliyse , bu eğlenceyi bozar.


Sayısal endeksler yerine mantıksal indeksler kullanarak 61 bayta
Giuseppe

Vay canına, bu çok büyük bir gelişme, çok teşekkürler.
Kirill L.

0

Jöle , 15 14 bayt

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

Çevrimiçi deneyin!

Tam program.

Açıklama:

FW; Ṛi, C $ ¥ ¦ / ṁḷY Ana bağlantı. Giriş: ['ab', 'cd'] (sol), 'ac' (sağ).
FW                    F latten ve W bir listede rap yapar. Geçerli değer = ['abcd'].
  ; Doğru argüman ile birleştirin. [ 'ABCD', 'a', 'c']
          / Soldan azalt:
   At ¦ Uygula  everse ...
    i ¥ endeksi (sol argümandaki sağ argüman) ...
     , C $ ve tamamlayıcı dizini.

Son operasyonun daha fazla açıklanması gerekiyor. F = 'yi belirtin Ṛi,C$¥¦, sonra değer için['abcd','a','c'] hesapladığı('abcd' f 'a') f 'c' genişler:

Ṛi, C $ ¥ ¦ İşlev  f . Sol argüman = 'abcd' ve sağ argüman = 'a' varsayalım
Ṛ Önce tersini hesaplayın. 'Dcba' alın.
 i ¥ Uygulanacak endeksleri hesaplamak için, önce 'abcd' içindeki 'a' indeksi
             ('abcd' i 'a') = 1. (ilk dizin)
  , C $ Ardından (1 C) = 0 ile eşleştirin (son dizin)
      0 0 ve 1 indekslerinde 'abcd' ye 'dcba' uygulayın:

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

0

Retina 0.8.2 , 96 bayt

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

Çevrimiçi deneyin! Dizgiyi sve karakter dizisini tamsayı olmadan satırsonu-sınırlandırılmış dize olarak alır N. Açıklama: Her karakter carasında ssırayla işlenir. Normal ifade, dizinin uçlarından eşit olan ve biri cdiğeri aynası olan iki konumla eşleşir m. Bu karakterler değiştirilir ve dizinden ckaldırılır s.

+`

sSırasıyla her karakterini işler.

^(.)

$1yakalar c.

(.*¶(.|¶)*)

$3dizideki cveya karakterlerinden birine önek ekleyen bir karakter yığını yakalar m. $2kalan skarakterleri ve tüm bu karakterleri yakalar .

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

Eğer mönce gelir c, $4bir değer vardır $5yakalar mve $6yakalar arasındaki karakterler mve c. yığın olarak $7yakalar $6ancak değeri kullanılmaz.

\1

c artık dizinin kendisiyle eşleştirildi.

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

Eğer mönceden eşleştirilmiş olup, daha sonra $8, isteğe bağlı olarak bir kasa, bir değer, yakalar $9karakterleri yakalar ciçin m, $10yakalar $9, kullanılmamış ve bir yığın olarak $11yakalar m. Bu durumda değer isteğe bağlıdır cve maynı karakterdir.

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

$12karakterler diğer son eklemeli yakalar cve m. Derin $12olduğu sürece bir dengeleme grubu kullanılır $3, yani önek ve sonek aynı uzunluktadır.

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

Parçalar daha sonra bir araya konur - ilk geri kalanını sve dizinin ön ek, daha sonra ise cişaretinden msonra m, daha sonra daha sonra orta cve sonra eğer mpreceeded corta daha sonra mdaha sonra, son ek.

1A`

Şimdi sboş olan silinir.


0

JavaScript, 85 bayt

Dize Sve bir diziyi Abirleştirilmiş dize olarak alır.

([...S],[...A])=>S.map(c=>[A[j],A[i]]=[A[i=A.indexOf(c)],A[j=A.length+~i]])&&A.join``


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.