Відображення проміжного струнного масиву


16

Почнемо з повторного визначення відображення символу у дводенному масиві символів:

Давши квадратний двовимірний масив символів з чіткими малими буквеними буквами, визначте відображення літери в матриці як заміну її символом прямо через нього через центр квадрата.

Таким чином, відображення букви 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, букви - унікальні, а масив - принаймні 1х1 і максимум 5х5 (очевидно, оскільки в англійському алфавіті всього 26 символів.) Символи в рядку гарантовано є у 2-д масиві. Рядок має довжину не більше 100 символів.

Вхідні дані

Рядок s, ціле число N, а потім NxNмасив символів.

Приклад

Вхід:

ac
2
ab
cd

Вихід:

dc
ba

* Причина: По-перше, подумайте про aте d. Потім відображіть знак "the c", bоскільки cце друга літера у вхідному рядку.


Оцінка балів

  • Вихід може бути наданий будь-яким зручним способом .
  • Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
  • Стандартні лазівки заборонені.
  • Це тому застосовуються всі звичайні правила гольфу, і найкоротший код (у байтах) виграє.

Поточний переможець


9
Півгодини - це насправді недостатньо часу, щоб вийти з пісочниці будь-якого змістовного використання.
Пост Рок-Гарф Хантер

3
Немає проблем, це добре виглядає.
користувач202729

1
(також у нас є таблиця лідерів фрагментів стека )
user202729

6
50 годин - це занадто короткий проміжок часу, щоб прийняти переможця; як правило, ви хочете зачекати тиждень або близько того. Однак, щодо PPCG, це звичайна практика не приймати жодних відповідей, тому що це відлякує майбутні відповіді, і ми хочемо залишати виклики відкритими назавжди.
HyperNeutrino

2
Усі приклади мають символи в алфавітному порядку. Я припускаю, що це не припущення, яке ми можемо зробити? Крім того, чи потрібно брати нас Nяк вхідний матеріал, якщо він нам не потрібен?
Стюі Гріффін

Відповіді:


3

Октава , 85 68 66 байт

Використання eval цикл всередині, він економив багато байтів! Я отримав натхнення від цієї відповіді по Луїсу 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: міжнар
  • a: 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

Пітон 3 , 122 111 байт

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

Спробуйте в Інтернеті!

Повертає 2D масив символів.


Ви повинні мати можливість додатково гольфувати .. Ніякий спосіб зміни вхідної матриці в 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]
Kevin Cruijssen

1

R , 74 61 байт

-13 байт завдяки Джузеппе.

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

Спробуйте в Інтернеті!

Вводить вектор символів для пошуку як s, розміру матриці як nі самої матриці як m. Якщо абсолютно необхідно взяти перший аргумент як рядок , це дуже зіпсує задоволення.


Користуючись логічними, а не числовими індексами, я зійшов на 61 байт
Джузеппе,

Нічого собі, це здоровенне поліпшення, велике спасибі.
Кирило Л.

0

Желе , 15 14 байт

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

Спробуйте в Інтернеті!

Повна програма.

Пояснення:

FW; Ṛi, C $ ¥ ¦ / ṁḷY Головна посилання. Введення: ['ab', 'cd'] (зліва), 'ac' (праворуч).
FW                    F latten і W його у списку. Поточне значення = ['abcd'].
  ; Об’єднайте це правильним аргументом. ['abcd', 'a', 'c']
          / Зменшити зліва:
   ¦ Застосовувати verse навпроти ...
    я ¥ індекс (правий аргумент у лівому аргументі) ...
     , 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переробляється в свою чергу. Регекс відповідає двом позиціям, рівновіддаленим від кінців масиву, з яких одне є, cа друге - його дзеркало m. Ці символи заміняються і cвидаляються з s.

+`

Обробляє кожен персонаж sпо черзі.

^(.)

$1захоплює c.

(.*¶(.|¶)*)

$3фіксує стек символів у масиві з префіксом один із cабо m. $2фіксує решту sплюс усіх цих символів.

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

Якщо вона 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фіксує символи з суфіксом іншого з cта m. Балансуюча група використовується для того, щоб забезпечити $12, наскільки вона $3була глибокою, тобто префікс і суфікс однакової довжини.

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

Шматки потім збираються разом - спочатку решта sта префікс масиву, потім, якщо cпередує, mто mсередина, потім c, потім, якщо mпередує, cто середина m, потім суфікс.

1A`

Тепер, що sпорожнє, воно видаляється.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.