一个简单的模式


17

输入:

您选择的输入格式中的两位数字(我们称它们为mn)和两个字符(我们称其为ab)。

输出:

对于演练,请假装m=2, n=5, a='a', b='b'

您的输出将是根据四个输入构建的字符串。让我们result用value 调用字符串""。首先,连击aresult m时间,所以串连aresult 2倍。result现在等于aa。其次,连击bresult m时间,所以串连bresult 2倍。result现在等于aabb。最后,如果结果已经比更长n,请截断result它,使其具有length n。否则,继续交替使用m的长度运行a,并b直到result有长度n。最终resultaabba,它有长度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',而统治世界的小字符数”是什么意思?
暴民埃里克(Erik the Outgolfer)'17年

我基本上改写了挑战,保持了我的初衷。您可以根据需要进行回滚,但是在其原始状态下不会重新打开。
斯蒂芬,

@StepHen,您保存了我的一天:p gracias :)
Durga

@ Durga没问题:)我很高兴它仍然说出您想要的内容。
斯蒂芬,

2
@Durga提出的测试用例:m=2,n=10,a=A,b=B
Rod

Answers:


8

Python,32字节

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

在线尝试!


上次我检查了匿名功能,所以您可以删除f=-2个字节。
“ SparklePony同志” 17年

@ComradeSparklePony:感谢大家的注意。那是TiO剩下的;我实际上已经从字节数中删除了它。
朱利安·沃尔夫

2
您可以将f=TIO 放置在TIO的标题部分,因此您无需手动将其删除。TIO
ovs'July

啊,我总是忘了反斜杠。谢谢。
朱利安·沃尔夫

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

Ruby,29个字符

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

样品运行:

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

在线尝试!


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

V,13个字节

ÀäjÀäêÍî
À|lD

在线尝试!

ab在输入中的不同行上采用,mn作为自变量,取反(因此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

Haskell36 35 29字节

Haskell的另一个解决方案(期望以列表形式给出字符):

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

在线尝试!

感谢@Laikoni提供-1个字节。


1
您可以使用保存一个字节(m#n)a b=
Laikoni'7

3

R41 39字节

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

匿名函数;将结果打印到标准输出。将字符作为向量d=c(a,b)gl生成2游程长度m(总长度)水平的因子(整数)ncat连接并打印为字符串。

在线尝试!


我认为function(d,m,n)rep(d,e=m,l=n)这是有效的提交。
ovs '17

不幸的rep是,@ ovs 将导致字符向量而不是单个字符串
Giuseppe

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

QBIC37 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

Cubix63 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,dup并压入底部(堆栈现在是m,b,a,m
  • ) :递减
  • ?:如果为正数,则向右转;如果为零,则直行(重复a
  • 正分支(循环)
    • s:rur(/w:交换,重复,移至m-i堆栈顶部,递减m-i
  • 零分支
    • B:反向叠层(其现在具有m的拷贝aa... b m
    • n:取反m(因此我们可以?用来向左转)
    • ) : 增量
    • ? :如果为零则直走,如果为负则左转
  • 负分支(重复b
    • s:r\/rw)\ 基本与正分支相同,但具有增量和左转。
  • 零分支(打印输出)
    • >v;:弹出0堆栈(看起来像a...b...
    • /B :反转堆栈
    • I :阅读 n
    • s :交换打印循环:
  • oq :打印并推入堆栈底部现在看起来像: ab...a...n
  • ( 递减 n
  • ? :如果为正,则向右转,如果为零,则直行
  • 如果正确,::/su交换栈顶并继续循环
  • 如果为零,则/向下反射,所评估的代码为Iru@@终止程序。

0

木炭,10字节

…⁺×ζIθ×εNN

在线尝试!链接是冗长的代码版本,其中包括第四个示例。(令人讨厌的是,如果我在最后一个分隔符之前添加一个分隔符,那么deverbosifer不会删除分隔符InputNumber()。)


分隔符是什么意思?(您能举个例子)
ASCII码,仅ASCII

@ASCII专用仅在最后一个InputNumber()之前使用逗号,请注意所生成的代码具有不必要的分隔符:在线尝试!
尼尔

0

Mathematica,61个字节

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

输入

[2,10,“ A”,“ B”]


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. *)


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个字符的字符串。前两个是字符ab,后跟字节值m,然后是字节值n。例如,TIO包括输入ab<tab>2,这对应于“A”,“B”,9,50。(由于用于码<tab>2是9和50。

怎么样?

这个答案有点像庞然大物,但是这里是重点:

左上角的小写字母a- h是字符ab的存储机制,每位一行。在其底部,使用v~vmz是切换机制,以在两者之间进行交换。

中间是一串带有的的列~#M。这读成并存储其负数。右边的大三角形只是将这个值带入上层累加器的导线。

右上方的块是累加器 m。它每个周期(从-m开始)递增,直到达到零。发生这种情况时,将交换输出字符,并从-m重新开始计数。

同时,还有一个较低的块,即n累加器。由于n仅被读取一次,因此我们不需要存储空间(Mm)来存储该值。我们简单地否定它并开始计数。当该值达到零时,整个shebang就会简单地终止。

所有其他废话是延迟(Zz),线(-|,...),和其他杂物。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.