Patttern Sederhana

17

Input:

Dua digit tunggal (sebut saja mdan n) dan dua karakter (sebut saja adan b) dalam format input pilihan Anda.

Keluaran:

Untuk penelusuran, berpura-pura m=2, n=5, a='a', b='b'.

Output Anda akan berupa string yang dibangun dari empat input Anda. Mari kita sebut string result, dengan nilai "". Pertama, menyatu ake result mkali, jadi menyatu ake result 2kali. resultsekarang sama dengan aa. Kedua, menyatu bke result mkali, jadi menyatu bke result 2kali. resultsekarang sama dengan aabb. Terakhir, jika hasilnya sudah lebih lama dari n, potong resultsehingga memiliki panjang n. Jika tidak, lanjutkan bergantian dengan mpanjang berjalan dari adan bsampai resultpanjang n. Final resultadalah aabba, yang memiliki panjang 5.

Kasus uji:

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 

Seperti diketahui, yang lebih kecil akan menguasai dunia, jadi program terkecil, dalam byte, menang! :)

Durga
sumber
Apa yang Anda maksud dengan "total char dalam output akan menjadi 'n'" dan "yang lebih rendah akan menguasai dunia"?
Erik the Outgolfer
Saya pada dasarnya menulis ulang tantangan, menjaga apa yang saya yakini sebagai niat awal Anda. Anda dapat mengembalikan jika Anda mau, tetapi dalam kondisi aslinya tidak akan dibuka kembali.
Stephen
@LangkahKau telah menyelamatkan hariku: p gracias :)
Durga
@ Durga tidak ada masalah :) Saya senang masih mengatakan apa yang Anda inginkan.
Stephen
2
@ Durga mengusulkan test case:m=2,n=10,a=A,b=B
Rod

Jawaban:

8

Python , 32 byte

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

Cobalah online!

Julian Wolf
sumber
Fungsi anonim diizinkan terakhir saya periksa sehingga Anda dapat menghapus f=untuk -2 byte.
Kamerad SparklePony
@ComradeSparklePony: Terima kasih atas perhatiannya. Itu sisa dari TiO; Saya sebenarnya sudah menghapusnya dari jumlah byte.
Julian Wolf
2
Anda bisa meletakkannya f=di bagian tajuk TIO, jadi Anda tidak perlu menghapusnya secara manual. TIO
ovs
Ah, aku selalu lupa tentang garis miring terbalik. Terima kasih.
Julian Wolf
1
Untuk siapa pun yang menyarankan pengeditan (a*m+b*m)-> (a+b)*m: ini tidak berfungsi.
Julian Wolf
6

MATL , 5 byte

Y"i:)

Input adalah string dengan dua karakter, lalu m, lalu n.

Cobalah online!

Penjelasan

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
Luis Mendo
sumber
5

Ruby, 29 karakter

->m,n,a,b{((a*m+b*m)*n)[0,n]}

Contoh dijalankan:

irb(main):001:0> ->m,n,a,b{((a*m+b*m)*n)[0,n]}[3, 8, 'A', 'B']
=> "AAABBBAA"

Cobalah online!

manatwork
sumber
5

Japt , 10 byte

VîUçW +UçX

Pertama-tama coba gunakan bahasa golf. Cobalah online!

Penjelasan

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
Justin Mariner
sumber
Terima kasih telah menggunakan Japt, dan dilakukan dengan baik :-) Anda bisa melakukannya VîWpU +XpUjuga, tetapi keduanya melakukan hal yang sama. sangat cocok untuk tantangan ini.
ETHproduksi
@ ETHproductions Terima kasih, dan terima kasih telah membuatnya! Saya benar-benar menikmati bagaimana semuanya transparan dengan baik ke kode JS.
Justin Mariner
3

05AB1E , 5 byte

×J×I£

Cobalah online!

Penjelasan

×      # repeat a and b m times each
 J     # join to string
  ×    # repeat the string n times
   I£  # take the first n characters
Emigna
sumber
Persis apa yang saya dapatkan tanpa memeriksa terlebih dahulu: P
Magic Octopus Mm
3

Jelly , 6 4 byte

xFṁ⁵

Cobalah online!

Terima kasih kepada Jonathan Allan untuk format input yang lebih baik (-2).

Erik the Outgolfer
sumber
4 byte sebagai program lengkap dengan format input berbeda
Jonathan Allan
@ JonathanAllan Heh Saya biasanya mencoba menghindari menggunakan argumen ketiga tetapi kali ini membuat jawaban saya jauh lebih pendek.
Erik the Outgolfer
3

V , 13 byte

ÀäjÀäêÍî
À|lD

Cobalah online!

adan bdiambil pada baris yang terpisah dalam input, mdan ndiambil sebagai argumen, dibalik (jadin juga argumen pertama dan myang kedua)

Penjelasan

Àä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
sumber
3

Haskell , 36 35 29 byte

Namun solusi Haskell lainnya (mengharapkan karakter yang diberikan sebagai daftar):

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

Cobalah online!

Terima kasih @Laikoni untuk -1 byte.

ბიმო
sumber
1
Anda dapat menyimpan byte dengan (m#n)a b=.
Laikoni
3

R , 41 39 byte

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

Fungsi anonim; mencetak hasilnya ke stdout. Mengambil karakter sebagai vektor d=c(a,b). glmenghasilkan faktor (bilangan bulat) dari (dalam hal ini) 2tingkat panjang lari mdengan panjang totaln ! catmenggabungkan dan mencetaknya sebagai string.

Cobalah online!

Giuseppe
sumber
Saya pikir function(d,m,n)rep(d,e=m,l=n)akan menjadi pengajuan yang valid.
Ovs
@ovs sayangnya repakan menghasilkan vektor karakter daripada string tunggal
Giuseppe
2

Javascript, 55 byte

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

Cuplikan kode contoh:

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

Herman L.
sumber
2

Javascript, 53 byte

(m,n,a,b)=>a.repeat(n).replace(/./g,(i,j)=>j/m&1?b:i)
Ra8
sumber
2

Sekam , 3 byte

Port Langsung jawaban Haskell saya, kecuali bahwa urutan argumennya berbeda:

↑¢Ṙ

Cobalah online!

ბიმო
sumber
1

Haskell , 48 43 byte

(m#n)a|r<-(<$[1..m])=take n.cycle.(r a++).r

Cobalah online!

Julian Wolf
sumber
1

QBIC , 37 27 byte

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

Penjelasan

          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

Upaya sebelumnya:

(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
sumber
1

PHP> = 7.1, 77 byte

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

PHP Sandbox Online

Jörg Hülsermann
sumber
1

Cubix , 63 58 byte

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

Cobalah online!

perhatikan penerjemahnya

Mengambil input seperti di ab*m*nmana* karakter non-digit dapat.

Versi kubus:

        . 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: baca di karakter, dan tukar (begitu ajuga di atas)
  • I:q: baca m, dup, dan tekan ke bawah (tumpukan sekarang m,b,a,m)
  • ) : pengurangan
  • ? : belok kanan jika positif, lurus jika nol (duplikat a )
  • cabang positif (loop)
    • s:rur(/w: swap, dup, pindah m-ike atas tumpukan, penguranganm-i
  • cabang nol
    • B: tumpukan terbalik (yang sekarang memiliki msalinan a:a... b m )
    • n: negate m(jadi kita bisa menggunakan? untuk belok kiri)
    • ) : peningkatan
    • ? : lurus jika nol, belok kiri jika negatif
  • cabang negatif (duplikat b )
    • s:r\/rw)\ pada dasarnya sama dengan cabang positif tetapi dengan kenaikan dan belokan kiri.
  • cabang nol (mencetak output)
    • >v;: pop the 0off the stack (sepertinya a...b...)
    • /B : membalikkan tumpukan
    • I : Baca n
    • s : swap print loop:
  • oq : cetak dan tekan ke bawah tumpukan sekarang terlihat seperti: ab...a...n
  • ( pengurangan n
  • ? : belok kanan jika positif, lurus jika nol
  • Jika benar,: /su tukar bagian atas tumpukan dan lanjutkan loop
  • jika nol, /pantulkan turun dan kode yang dievaluasi adalah Iru@; @mengakhiri program.
Giuseppe
sumber
0

Arang , 10 byte

…⁺×ζIθ×εNN

Cobalah online! Tautan adalah untuk versi kode yang verbose dan termasuk contoh keempat. (Mengganggu deverbosifer tidak akan menghapus pemisah jika saya menambahkan satu sebelum yang terakhir InputNumber().)

Neil
sumber
Apa yang Anda maksud dengan pemisah? (Bisakah Anda memberi contoh)
ASCII
@ Khusus ASCII Dengan koma sebelum InputNumber terakhir (), perhatikan bahwa kode yang dihasilkan memiliki pemisah yang tidak perlu: Coba online!
Neil
0

Mathematica, 61 byte

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

memasukkan

[2,10, "A", "B"]

J42161217
sumber
0

Mathematica, 44 byte

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

Penjelasan

adalah karakter penggunaan pribadi tiga byte U+F3C7, yang mewakili \[Transpose]operator postfix di Mathematica. Tidak ada tautan TIO karena Matematika tidak mendukung , \[Transpose]memiliki prioritas operator yang salah, argumen kedua Tablediperlukan sebagai daftar, dan yang paling penting, StringPadRighttidak diterapkan.

                                         & (* 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
sumber
0

APL (Dyalog) , 5 byte

⎕⍴⎕/⎕

Cobalah online!

Mengambil dua karakter dalam string sebagai input pertama, diikuti oleh mdan kemudiann .

Penjelasan

Biarkan contoh masukan menjadi '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
sumber
0

Pyth , 13 byte

KE<*+*EQ*EQKK

Cobalah online!

Penjelasan

                 # 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
Jim
sumber
0

Chip , 588 byte

*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|
 )\')\')\')\')\')\')\')\'
 `--^--^--^--^--^--^--'

Cobalah online!

Mengambil input sebagai string 4 karakter. Dua yang pertama adalah karakter a dan b , diikuti oleh nilai byte m , dan kemudian nilai byte n . Misalnya, TIO mencakup input ab<tab>2, ini terkait dengan 'a', 'b', 9, 50. (Karena kode untuk <tab>dan2 9 dan 50.

Bagaimana?

Jawaban ini agak raksasa, tapi inilah yang terpenting:

Blok kiri atas, dengan huruf kecil a- h, adalah mekanisme penyimpanan untuk karakter a dan b , satu baris per bit. Di bagian bawahnya, dengan v~vdanmz merupakan mekanisme switching, untuk bertukar antara keduanya.

Di tengah adalah kolom dengan sekelompok ~#M's. Ini berbunyi dalam m dan menyimpan negatifnya. Segitiga besar ke kanan hanya kabel untuk membawa nilai ini ke akumulator atas.

Blok kanan atas adalah akumulator untuk m . Itu meningkatkan setiap siklus (mulai dari -m ) hingga mencapai nol. Ketika ini terjadi, karakter output ditukar, dan menghitung restart dari -m .

Sementara itu, ada blok bawah, yang merupakan akumulator n . Karena n hanya dibaca sekali, kita tidak perlu bank memori ( Mdan m) untuk menyimpan nilai ini. Kami cukup meniadakannya dan mulai menghitung. Ketika nilai ini mencapai nol, seluruh shebang dihentikan begitu saja.

Semua protes lainnya adalah penundaan ( Zdan z), kabel ( -, |, ...), dan varia lainnya.

Phlarx
sumber