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


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 "і" меншим буде керувати світом "?
Ерік Аутгольфер

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

@StepHen ти врятував мій день: p gracias :)
Durga

@Durga жодних проблем :) Я радий, що все ще йдеться про те, що ти хотів.
Стівен

2
@Durga запропонував тестовий випадок: m=2,n=10,a=A,b=B
Род

Відповіді:


8

Пітон , 32 байти

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

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


Анонімні функції дозволені востаннє я перевірив, щоб ви могли видалити f=-2 байти.
Товариш SparklePony

@ComradeSparklePony: Дякую за голову. Це залишилось від TiO; Я фактично вже видалив його з підрахунку байтів.
Джуліан Вольф

2
Ви можете помістити f=в розділ заголовка TIO, тому не потрібно видаляти його вручну. TIO
ovs

Ах, я завжди забуваю про відкоси. Спасибі.
Джуліан Вольф

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

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

xFṁ⁵

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

Завдяки Джонатану Аллану за кращий формат введення (-2).


4 байти як повноцінна програма з іншим форматом введення
Джонатан Аллан

@JonathanAllan Heh Я, як правило, намагаюся уникати використання третього аргументу, але цього разу мій спосіб відповіді коротший.
Ерік Аутгольфер

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


3

R , 41 39 байт

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

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

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


Я думаю, це 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)



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



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у верхню частину стека, decrementm-i
  • нульова гілка
    • B: зворотний стек (який тепер має mкопії a:a... b m )
    • n: negate m(тому ми можемо ?повернути ліворуч)
    • ) : приріст
    • ? : їдьте прямо, якщо нуль, поверніть ліворуч, якщо негативно
  • негативна гілка (дублікати b)
    • s:r\/rw)\ в основному те саме, що і позитивна гілка, але з приростом і лівими поворотами.
  • нульова гілка (друкує вихід)
    • >v;: вискочити 0з стека (схоже a...b...)
    • /B : повернути стек
    • I : читати n
    • s : цикл друку swap:
  • oq : друк та натискання на нижню частину стека зараз виглядає так: ab...a...n
  • ( декремент n
  • ? : поверніть праворуч, якщо позитивно, перейдіть прямо, якщо нуль
  • Якщо це правильно: /su поміняйте верхню частину стека і продовжуйте цикл
  • якщо нуль, /відображається вниз, а код оцінюється Iru@; @припиняє програму.

0

Вугілля деревне , 10 байт

…⁺×ζIθ×εNN

Спробуйте в Інтернеті! Посилання на багатослівну версію коду та включає четвертий приклад. (Прикро, девербосифер не видалить роздільник, якщо я додаю його до останнього InputNumber().)


Що ви маєте на увазі під роздільником? (Чи можете ви навести приклад)
Лише ASCII

@ ASCII Тільки з комою перед останнім InputNumber (), зауважте, що в генерованому коді є непотрібний роздільник: Спробуйте це в Інтернеті!
Ніл

0

Математика, 61 байт

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

вхід

[2,10, "А", "В"]


0

Математика, 44 байти

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

Пояснення

є трьома байтним символом приватного використання U+F3C7, що представляє \[Transpose]оператор постфіксу в Mathematica. Немає TIO-зв’язку, оскільки Mathics не підтримує , \[Transpose]має неправильний пріоритет оператора, другий аргумент до 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. *)




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's. Це читається в м і зберігає його негатив. Великий трикутник праворуч - це лише дроти, щоб перенести це значення у верхній акумулятор.

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

Тим часом, є нижній блок, який є російським акумулятором. Оскільки n читається лише один раз, для зберігання цього значення нам не потрібен банк пам'яті ( Mта m). Ми просто заперечуємо це і починаємо рахувати. Коли це значення досягне нуля, весь шебанг просто припиняється.

Всі інші це пусті балачки затримка ( Zі z), проводка ( -, |, ...), і інший альманах.

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