Một Patttern đơn giản


17

Đầu vào:

Hai chữ số đơn (hãy gọi chúng mn) và hai ký tự (hãy gọi chúng ab) theo định dạng đầu vào mà bạn chọn.

Đầu ra:

Đối với các hướng dẫn, giả vờ m=2, n=5, a='a', b='b'.

Đầu ra của bạn sẽ là một chuỗi được xây dựng từ bốn đầu vào của bạn. Hãy gọi chuỗi result, với giá trị "". Đầu tiên, nối avào result mthời gian, vì vậy nối avào result 2thời gian. resulthiện nay tương đương aa. Thứ hai, nối bvào result mthời gian, vì vậy nối bvào result 2thời gian. resulthiện nay tương đương aabb. Cuối cùng, nếu kết quả đã dài hơn n, cắt ngắn resultđể nó có độ dài n. Mặt khác, tiếp tục xen kẽ với các bước mchạy dài abcho đến khi resultcó độ dài n. Cuối cùng resultaabba, có chiều dài 5.

Các trường hợp thử nghiệm:

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 

Như tất cả đều biết, một người ít hơn sẽ thống trị thế giới, vì vậy các chương trình nhỏ nhất, tính bằng byte, sẽ giành chiến thắng! :)


Bạn có ý nghĩa gì bởi "tổng số char trong sản lượng sẽ là 'n'" và "ít hơn một người sẽ thống trị thế giới"?
Erik the Outgolfer

Về cơ bản tôi viết lại thử thách, giữ những gì tôi tin là mục đích ban đầu của bạn. Bạn có thể quay lại nếu muốn, nhưng ở trạng thái ban đầu, nó sẽ không được mở lại.
Stephen

@StepHen bạn đã lưu ngày của tôi: p gracias :)
Durga

@Durga không có vấn đề gì :) Tôi rất vui vì nó vẫn nói những gì bạn muốn.
Stephen

2
@Durga đề xuất trường hợp thử nghiệm:m=2,n=10,a=A,b=B
Rod

Câu trả lời:


8

Python , 32 byte

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

Hãy thử trực tuyến!


Các hàm ẩn danh được cho phép cuối cùng tôi đã kiểm tra để bạn có thể loại bỏ f=for byte byte.
Đồng chí SparklePony

@ComradeSparklePony: Cảm ơn vì đã ngẩng cao đầu. Đó là phần còn lại từ TiO; Tôi thực sự đã loại bỏ nó khỏi số byte.
Julian Wolf

2
Bạn có thể đặt f=phần tiêu đề của TIO, vì vậy bạn không cần phải xóa nó bằng tay. TIO
lò nướng

Ah, tôi luôn quên về dấu gạch chéo ngược. Cảm ơn.
Julian Wolf

1
Cho bất cứ ai đề nghị chỉnh sửa (a*m+b*m)-> (a+b)*m: điều này không hoạt động.
Julian Wolf

6

MATL , 5 byte

Y"i:)

Đầu vào là một chuỗi có hai ký tự, sau đó m, sau đón .

Hãy thử trực tuyến!

Giải trình

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 byte

VîUçW +UçX

Trước tiên hãy thử sử dụng một ngôn ngữ chơi golf. Hãy thử trực tuyến!

Giải trình

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

Cảm ơn bạn đã sử dụng Japt và hoàn thành tốt :-) Bạn cũng có thể làm như VîWpU +XpUvậy, nhưng cả hai đều làm điều tương tự. là hoàn hảo cho thử thách này.
Sản phẩm ETH

@ETHproductions Cảm ơn, và cảm ơn vì đã làm nó! Tôi thực sự thích cách mọi thứ chuyển mã độc đáo sang mã JS.
Justin Mariner



3

V , 13 byte

ÀäjÀäêÍî
À|lD

Hãy thử trực tuyến!

abđược lấy trên các dòng riêng biệt trong đầu vào mnđược lấy làm đối số, đảo ngược (vì vậy nlà đối số đầu tiên vàm là thứ hai)

Giải trình

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

Haskell , 36 35 29 byte

Một giải pháp Haskell khác (dự kiến ​​các ký tự được đưa ra dưới dạng danh sách):

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

Hãy thử trực tuyến!

Cảm ơn @Laikoni cho -1 byte.


1
Bạn có thể lưu một byte với (m#n)a b=.
Laikoni

3

R , 41 39 byte

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

Một chức năng ẩn danh; in kết quả ra thiết bị xuất chuẩn. Đưa các nhân vật như một vector d=c(a,b). gltạo ra các yếu tố (số nguyên) của (trong trường hợp này) 2mức độ dài chạy mvới tổng chiều dài n! catnối và in chúng dưới dạng một chuỗi.

Hãy thử trực tuyến!


Tôi nghĩ rằng function(d,m,n)rep(d,e=m,l=n)sẽ là một đệ trình hợp lệ.
OVS

Thật không may @ovs repsẽ dẫn đến một vectơ ký tự chứ không phải là một chuỗi
Giuseppe

2

Javascript, 55 byte

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

Đoạn mã ví dụ:

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 byte

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



1

QBIC , 37 27 byte

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

Giải trình

          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

Lần thử trước:

(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

Khối , 63 58 byte

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

Hãy thử trực tuyến!

xem phiên dịch

Đưa đầu vào như ab*m*nnơi* có thể là bất kỳ ký tự không có chữ số nào.

Phiên bản khối:

        . 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: đọc trong ký tự và trao đổi chúng (vì vậy alà trên cùng)
  • I:q: đọc trong m, dup và đẩy xuống dưới (stack bây giờ m,b,a,m)
  • ) : giảm
  • ? : rẽ phải nếu dương, đi thẳng nếu không (trùng lặp a )
  • nhánh tích cực (vòng lặp)
    • s:rur(/w: hoán đổi, nhân đôi, di chuyển m-ilên đỉnh ngăn xếp, giảm dầnm-i
  • không chi nhánh
    • B: ngăn xếp ngược (hiện có mbản sao của a:a... b m )
    • n: phủ định m(vì vậy chúng ta có thể sử dụng ?để rẽ trái)
    • ) : tăng
    • ? : đi thẳng nếu không, rẽ trái nếu âm
  • nhánh âm (trùng lặp b)
    • s:r\/rw)\ về cơ bản giống như nhánh dương nhưng với gia số và rẽ trái.
  • nhánh không (in đầu ra)
    • >v;: bật 0ngăn xếp ra (hình như a...b...)
    • /B : đảo ngược ngăn xếp
    • I : đọc n
    • s : vòng lặp trao đổi in:
  • oq : in và đẩy xuống dưới cùng của ngăn xếp bây giờ trông như: ab...a...n
  • ( giảm n
  • ? : rẽ phải nếu dương, đi thẳng nếu không
  • Nếu đúng ,: /su hoán đổi đỉnh ngăn xếp và tiếp tục vòng lặp
  • nếu không, /phản ánh xuống và mã được đánh giá là Iru@; @chấm dứt chương trình.

0

Than , 10 byte

…⁺×ζIθ×εNN

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã và bao gồm ví dụ thứ tư. (Khó chịu là deverbosifer sẽ không xóa dải phân cách nếu tôi thêm cái trước cái cuối cùng InputNumber().)


Bạn có ý nghĩa gì bởi dải phân cách? (Bạn có thể đưa ra một ví dụ)
ASCII - chỉ

@ Chỉ ASCII Với dấu phẩy trước InputNumber () cuối cùng, lưu ý rằng mã được tạo có một dấu tách không cần thiết: Hãy thử trực tuyến!
Neil

0

Toán học, 61 byte

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

đầu vào

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


0

Toán học, 44 byte

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

Giải trình

là ký tự sử dụng riêng ba byte U+F3C7, đại diện cho \[Transpose]toán tử postfix trong Mathicala. Không có liên kết TIO vì Mathics không hỗ trợ , \[Transpose]có quyền ưu tiên toán tử sai, đối số thứ hai Tableđược yêu cầu là một danh sách và quan trọng nhất StringPadRightlà không được triển khai.

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

APL (Dyalog) , 5 byte

⎕⍴⎕/⎕

Hãy thử trực tuyến!

Lấy hai ký tự trong một chuỗi làm đầu vào đầu tiên, theo sau mvà sau đón .

Giải trình

Hãy ví dụ đầu vào được 'ab', 2, 10.

⎕/⎕                 Replicate the two-char string `m` times
                    2/'ab' => 'aabb'
⎕⍴                  Shape it so that its length is `n`
                    10'aabb' => 'aabbaabbaa'

0

Bình thường , 13 byte

KE<*+*EQ*EQKK

Hãy thử trực tuyến!

Giải trình

                 # 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

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

Hãy thử trực tuyến!

Đưa đầu vào dưới dạng chuỗi 4 ký tự. Hai đầu tiên là các ký tự ab , tiếp theo là giá trị byte m và sau đó là giá trị byte n . Ví dụ: TIO bao gồm đầu vào ab<tab>2, điều này tương ứng với 'a', 'b', 9, 50. (Vì các mã cho <tab>2 là 9 và 50.

Làm sao?

Câu trả lời này là một chút của một người khổng lồ, nhưng đây là những điểm nổi bật:

Khối trên bên trái, với chữ thường a- h, là cơ chế lưu trữ cho các ký tự ab , mỗi dòng một bit. Ở dưới cùng của nó, với v~vmz là cơ chế chuyển đổi, để trao đổi giữa hai.

Ở giữa là một cột với một loạt các ~#M. Cái này đọc bằng m và lưu trữ tiêu cực của nó. Hình tam giác lớn ở bên phải chỉ là dây để đưa giá trị này vào bộ tích lũy phía trên.

Khối trên bên phải là bộ tích lũy cho m . Nó tăng mỗi chu kỳ (bắt đầu từ -m ) cho đến khi nó về không. Khi điều này xảy ra, ký tự đầu ra được hoán đổi và đếm khởi động lại từ -m .

Trong khi đó, có khối thấp hơn, đó là bộ tích lũy n . Vì n chỉ được đọc một lần, chúng tôi không cần ngân hàng bộ nhớ ( Mm) để lưu trữ giá trị này. Chúng tôi chỉ đơn giản là phủ nhận nó và bắt đầu đếm. Khi giá trị này bằng 0, toàn bộ shebang chỉ đơn giản là chấm dứt.

Tất cả các câu nói đùa khác là sự chậm trễ ( Zz), hệ thống dây điện ( -, |, ...), và sưu tập khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.