Простой Патттерн

17

Входы:

Две отдельные цифры (назовем их mи n) и две буквы (назовем их aи b) в выбранном вами формате ввода.

Выход:

Для прохождения, притворись m=2, n=5, a='a', b='b'.

Ваш вывод будет строкой, созданной из ваших четырех входов. Давайте назовем строку resultсо значением "". Во- первых, конкатенация aна result mраз, так что СЦЕПИТЬ aна result 2раз. resultтеперь равны aa. Во-вторых, объединить bна result mраз, поэтому объединить bна result 2раз. resultтеперь равны aabb. И наконец, если результат уже длиннее n, обрезать resultего до длины n. В противном случае продолжайте чередование с mдлинами отрезков aи bпока resultне будет длины n. Окончательное resultэто aabba, который имеет длину 5.

Тестовые случаи:

Input: m = 2, n = 4, a = A, b = B

Output: AABB

Input: m = 3, n = 8, a = A, b = B

Output: AAABBBAA

Input: m = 4, n = 3, a = A, b = B

Output: AAA

Input: m = 2, n = 10, a = A, b = B

Output: AABBAABBAA 

Как всем известно, миром правит меньшее, поэтому побеждают самые маленькие программы в байтах! :)

Дурга
источник
Что вы подразумеваете под "общим символом на выходе будет 'n'" и "меньший будет править миром"?
Эрик Outgolfer
Я в основном переписал задачу, сохранив то, что, как я считаю, было твоим первоначальным намерением. Вы можете откатиться, если хотите, но в исходном состоянии он не будет вновь открыт.
Стивен
@StepHen вы спасли мой день: p gracias :)
Дурга
@ Дурга без проблем :) Я рад, что это все еще говорит, что ты хотел.
Стивен
2
@Durga предложил тестовый пример:m=2,n=10,a=A,b=B
Род

Ответы:

8

Python , 32 байта

lambda m,n,a,b:((a*m+b*m)*n)[:n]

Попробуйте онлайн!

Юлианский волк
источник
В последний раз я проверял анонимные функции, поэтому вы можете удалить f=байты на -2.
Товарищ SparklePony
@ComradeSparklePony: Спасибо за внимание. Это был остаток от TiO; Я на самом деле уже удалил его из подсчета байтов.
Джулиан Вольф
2
Вы можете поместить его f=в заголовочный раздел TIO, поэтому вам не нужно удалять его вручную. TIO
овс
Ах, я всегда забываю про обратную косую черту. Благодарю.
Джулиан Вольф
1
Для тех, кто предложил редактирование (a*m+b*m)-> (a+b)*m: это не работает.
Джулиан Вольф
6

MATL , 5 байтов

Y"i:)

Входные данные - это строка с двумя символами, затем m, затем n.

Попробуйте онлайн!

объяснение

Y"   % Implicit inputs: string and number m. Apply run-length decoding.
     % The second input is reused for each char in the first. Gives a
     % string
i    % Input number n
:    % Push vector [1 2 ... n]
)    % Index the string with the numbers in that vector. Indexing is
     % modular, so the chars are reused if necessary. Implicit display
Луис Мендо
источник
5

Japt , 10 байт

VîUçW +UçX

Сначала попробуйте использовать язык игры в гольф. Попробуйте онлайн!

объяснение

Vî          // repeat the following until it reaches length V (second input)
  UçW       // third input repeated U (first input) times
      +UçX  // plus the fourth input, repeated U times
Джастин Маринер
источник
Спасибо за использование Japt, и молодец :-) Вы VîWpU +XpUтоже можете это сделать , но оба делают одно и то же. идеально подходит для этой задачи.
ETHproductions
@ETHproductions Спасибо, и спасибо за это! Мне очень нравится, как все хорошо переносится в код JS.
Джастин Маринер
3

05AB1E , 5 байтов

×J×I£

Попробуйте онлайн!

объяснение

×      # repeat a and b m times each
 J     # join to string
  ×    # repeat the string n times
   I£  # take the first n characters
Emigna
источник
Именно то, что я получил, не проверив сначала: P
Волшебная Осьминога Урна
3

Желе , 6 4 байта

xFṁ⁵

Попробуйте онлайн!

Спасибо Джонатану Аллану за лучший формат ввода (-2).

Эрик Outgolfer
источник
4 байта как полная программа с другим форматом ввода
Джонатан Аллан
@JonathanAllan Хех Я обычно стараюсь избегать использования третьего аргумента, но на этот раз мой ответ становится короче.
Эрик Outgolfer
3

V , 13 байт

ÀäjÀäêÍî
À|lD

Попробуйте онлайн!

aи bвзяты в отдельных строках на входе, mи nвзяты в качестве аргумента, обратный (так nже, как первый аргумент иm второй)

объяснение

Àäj      ' duplicate the inputs [arg 1] times
a -> a
b    b
     a
     b
     ...
   Àäê   ' duplicate everything straight down [arg 2] times - À cycles arguments
a -> aaa
b    bbb
a    aaa
b    bbb
...  ...
      Íî ' remove all newlines
-> aaabbbaaabbb...
À|lD     ' delete from the [arg 1] + 1 column onwards
-> aaabbbaa
nmjcman101
источник
3

Haskell , 36 35 29 байт

Еще одно решение на Haskell (ожидается, что символы представлены в виде списка):

(m#n)c=take n$cycle$c<*[1..m]

Попробуйте онлайн!

Спасибо @Laikoni за -1 байт.

ბიმო
источник
1
Вы можете сохранить байт с помощью (m#n)a b=.
Лайкони
3

R , 41 39 байт

function(d,m,n)cat(d[gl(2,m,n)],sep='')

Анонимная функция; выводит результат в стандартный вывод. Принимает персонажей как вектор d=c(a,b). glгенерирует факторы (целые числа) (в данном случае) 2уровней длины пробега mс общей длиной n! catобъединяет и печатает их в виде строки.

Попробуйте онлайн!

Giuseppe
источник
Я думаю, function(d,m,n)rep(d,e=m,l=n)что будет правильным представлением.
овс
К сожалению, @ovs repприведет к вектору символов, а не к одной строке
Джузеппе
2

Javascript, 55 байт

(m,n,a,b)=>(a[r='repeat'](m)+b[r](m))[r](n).substr(0,n)

Пример кода:

f=

(m,n,a,b)=>(a[r='repeat'](m)+b[r](m))[r](n).substr(0,n)

console.log(f(2, 4, 'A', 'B'))
console.log(f(3, 8, 'A', 'B'))
console.log(f(4, 3, 'A', 'B'))
console.log(f(2, 9, 'A', 'B'))

Герман Л
источник
2

Javascript, 53 байта

(m,n,a,b)=>a.repeat(n).replace(/./g,(i,j)=>j/m&1?b:i)
Ra8
источник
1

QBIC , 37 27 байт

[:|G=;+G+;][:|G=G+G]?_sG,d

объяснение

          This takes its arguments as frequency m, A, B, length n
          For example: 2, A, B, 8
 :        Read a cmd line arg as number 'b' ('a' is used by the FOR declaration as loop counter)
[ |       Start a FOR loop, from 1 to b
G=  G     Set G to hold itself
  ;+      prepended by a cmd line arg read as strig and assigned to A$
     +;   and followed by a cmd line arg read as strig and assigned to B$
]         At the end of the FOR loop, G has had A added to the front twice, and B t the end x2: G$ = AABB
[:|       FOR c = 1 to n
G=G+G]      Add G to itself          G$ = AABBAABBAABBAABBAABBAABBAABBAABB
?_sG,d    PRINT the first n chars of G$   AABBAABB

Предыдущая попытка:

(37b)  {Z=Z+;┘_LZ|~a=:|_X]~a%:|\C=A┘A=;┘B=C
Takes its arguments as `A, length n, frequency m, B`.
Basically adds A to Z until length % freq = 0, then swaps A for B. Loops until lengtn = n
steenbergh
источник
1

PHP> = 7,1, 77 байт

for([,$x,$l,$f,$s]=$argv;$l-=$z;)echo str_repeat(++$i&1?$f:$s,$z=min($l,$x));

PHP Sandbox Online

Йорг Хюльсерманн
источник
1

Cubix , 63 58 байт

.rr.@u:s?.\.sw).i|>v:.\nB;?(q:Is...;rr/s.uw/....sIB/\/?(qo

Попробуйте онлайн!

смотреть переводчик

Принимает вход как ab*m*n где* может быть любой нецифровый символ.

Куб версия:

        . r r .
        @ u : s
        ? . \ .
        s w ) .
i | > v : . \ n B ; ? ( q : I s
. . . ; r r / s . u w / . . . .
s I B / \ / ? ( q o . . . . . .
. . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .
  • i|is: прочитайте символы и поменяйте их местами (значит, aсверху)
  • I:q: читать m, дублировать и толкать вниз (стек сейчас m,b,a,m)
  • ) : декремент
  • ? : повернуть направо, если положительный, идти прямо, если ноль (дублирует a )
  • положительная ветвь (петля)
    • s:rur(/w: swap, dup, перемещение m-iна вершину стека, уменьшениеm-i
  • нулевая ветвь
    • B: Обратный стек (который теперь имеет mкопию a: a... b m)
    • n: negate m(чтобы мы могли ?повернуть налево)
    • ) : приращение
    • ? : идти прямо, если ноль, повернуть налево, если отрицательный
  • отрицательная ветвь (дубликаты b )
    • s:r\/rw)\ в основном так же, как положительная ветвь, но с приращением и левым поворотом.
  • нулевая ветвь (печатает вывод)
    • >v;: вытолкнуть 0из стека (выглядит какa...b... )
    • /B : перевернуть стек
    • I : читать n
    • s : swap print loop:
  • oq : print и push в конец стека теперь выглядит так: ab...a...n
  • ( декремент n
  • ? : повернуть направо, если положительный, идти прямо, если ноль
  • Если правильно, то: /su поменяйте местами вершину стека и продолжите цикл
  • если ноль, /отражает вниз и код оценивается как Iru@; @завершает программу
Giuseppe
источник
0

Древесный уголь , 10 байт

…⁺×ζIθ×εNN

Попробуйте онлайн! Ссылка на подробную версию кода и включает в себя четвертый пример. (К сожалению, девербосифер не удалит разделитель, если я добавлю один перед последним InputNumber().)

Нил
источник
Что вы подразумеваете под разделителем? (Можете привести пример)
только ASCII
@ Только для ASCII Запятая перед последним InputNumber (), обратите внимание, что в сгенерированном коде есть ненужный разделитель: попробуйте онлайн!
Нил
0

Mathematica, 61 байт

T=Table;StringTake[""<>Flatten@T[{#3~T~#,#4~T~#},⌈#2/#⌉],#2]&

вход

[2,10, "А", "Б"]

J42161217
источник
0

Mathematica, 44 байта

StringPadRight[x={##3}~Table~#<>"",#2,x]&

объяснение

это трехбайтовый символ частного использования U+F3C7, представляющий постфиксный \[Transpose]оператор в Mathematica. Нет ссылки на TIO, потому что Mathics не поддерживает , \[Transpose]имеет неправильный приоритет оператора, второй аргумент to Tableдолжен быть списком и, что самое важное, StringPadRightне реализован.

                                         & (* Function *)
                 {##3}                     (* which takes the third and fourth arguments *)
                      ~Table~#             (* repeats them a number of times equal to the first argument *)
                                          (* takes the tranpose *)
                               <>""        (* then joins the strings with the empty string *)
               x=                          (* sets x equal to that string *)
StringPadRight[                            (* then pads x *)
                                   ,#2     (* to a length equal to the second argument *)
                                      ,x]  (* with x. *)
ngenisis
источник
0

APL (Dyalog) , 5 байтов

⎕⍴⎕/⎕

Попробуйте онлайн!

Принимает два символа в строке в качестве первого ввода, затем следует mи затем n.

объяснение

Пусть пример ввода быть 'ab', 2, 10.

⎕/⎕                 Replicate the two-char string `m` times
                    2/'ab' => 'aabb'
⎕⍴                  Shape it so that its length is `n`
                    10'aabb' => 'aabbaabbaa'
Kritixi Lithos
источник
0

Pyth , 13 байт

KE<*+*EQ*EQKK

Попробуйте онлайн!

объяснение

                 # Implicitly store m to Q
KE               # Store n to K
     *EQ         # Perform a * m
        *EQ      # Perform b * m
    +            # Concatenate the two strings
   *       K     # Multiply by n
  <         K    # Take the first n characters of the string
Джим
источник
0

Чип , 588 байт

*Z~vZ.*ZZZs  z. z. z. z. z. z. z. z.
  ,'|`-. ZZ--#<,#<,#<,#<,#<,#<,#<,#<
a/mAM/a| `~S `x'`x'`x'`x'`x'`x'`x'`x.
b/mBM/b|  *.)/')/')/')/')/')/')/')/'|
c/mCM/cZv--x^x-^x-^x-^x-^x-^x-^x-^x-'
d/mDM/d||A~#M',-',-',-',-',-',-',-'
e/mEM/e||B~#M-',-',-',-',-',-',-'
f/mFM/f||C~#M--',-',-',-',-',-'
g/mGM/g||D~#M---',-',-',-',-'
h/mHM/h||E~#M----',-',-',-'
 `v~v' ||F~#M-----',-',-'
* `mz  ||G~#M------',-'
Z  `---x'H~#M-------'
Z,--z--^----'
Z|z. z. z. z. z. z. z. z.
Zx#<,#<,#<,#<,#<,#<,#<,#<
 |`x'`x'`x'`x'`x'`x'`x'`xT
 |A| B| C| D| E| F| G| H|
 )\')\')\')\')\')\')\')\'
 `--^--^--^--^--^--^--'

Попробуйте онлайн!

Принимает ввод в виде 4-символьной строки. Первые два - это символы a и b , за которыми следует байтовое значение m , а затем байтовое значение n . Например, TIO включает ввод ab<tab>2, это соответствует 'a', 'b', 9, 50. (Так как коды для <tab>и2 являются 9 и 50.

Как?

Этот ответ немного чудовищен, но вот основные моменты:

Верхний левый блок с нижним регистром a- hэто механизм хранения символов a и b , одна строка на бит. В нижней части, с v~vиmz находится механизм переключения, для переключения между ними.

В середине колонна с кучей ~#Mсимволов. Это читает в м и хранит его отрицательный. Большой треугольник справа - это просто провода, чтобы перенести это значение в верхний аккумулятор.

Верхний правый блок - это аккумулятор для m . Он увеличивает каждый цикл (начиная с -m ), пока не достигнет нуля. Когда это происходит, выходной символ заменяется, и отсчет начинается с -m .

Между тем, есть нижний блок, который является n аккумулятором. Поскольку n читается только один раз, нам не нужен банк памяти ( Mи m) для хранения этого значения. Мы просто отрицаем это и начинаем считать. Когда это значение достигает нуля, весь шебанг просто прекращается.

Все остальные это пустая болтовня задержка ( Zи z), проводка ( -, |, ...), и другой альманах.

Phlarx
источник