8
\$\begingroup\$
'---------'
'-'.repeat(9) // longer!

'------------'
(x='----')+x+x
'-'.repeat(12) // same length

Is there any cleverer way of generating strings of up to 12 repeated characters in JavaScript?

\$\endgroup\$
  • 1
    \$\begingroup\$ Don't think so but depending on the challenge you may be able to golf multiple runs to save bytes using e.g. RLE \$\endgroup\$ – ASCII-only May 28 '17 at 11:46
  • 9
    \$\begingroup\$ For the special case of commas you can do Array(12)+'', which is shorter than the literal starting at 11 commas and then remains shorter than repeat. \$\endgroup\$ – Martin Ender May 28 '17 at 11:51
  • 1
    \$\begingroup\$ @SteveBennett sometimes you only care about the string length and not the actual character, and many PPCG challenges allow you to use some ASCII character of your choice for output. \$\endgroup\$ – Martin Ender May 28 '17 at 12:15
  • 1
    \$\begingroup\$ If you're going to be reusing repeat, you can alias it. \$\endgroup\$ – Shaggy May 28 '17 at 12:15
  • 5
    \$\begingroup\$ If you don't really need 12 identical characters but rather a 12-character string, you can also do 1e11+''. \$\endgroup\$ – Arnauld May 28 '17 at 12:47
2
\$\begingroup\$

Unfortunately, after what seems an eternity of searching documentation, I can't seem find any solution that will work with the 12-character constraint and generate for any given character given. However, there are a few neat tricks one can do to save some bytes for specific cases:

  • 1eL-1+'' will give a string, filled with 9s, of L length.
  • ''.padEnd(L) will give a string, filled with spaces, of L length. It's only useful when L > 10, otherwise it's too long. This one can be immediately chained with a function.
  • N/9+'' will give a string, starting with 0. then followed by a bunch of Ns. This does not work when N < 1 or N > 8, and the result obviously does not contain the same characters the whole way, but pretty close and pretty short.
  • Array(L)+'' will give a string, filled with commas, of length L - 1.
\$\endgroup\$
  • 1
    \$\begingroup\$ Along the lines of your 1/3+'' tip, you can repeat a digit D (except 0 and 9) a bunch of times similarly with D/9+''. \$\endgroup\$ – kamoroso94 Oct 11 '17 at 0:36
  • \$\begingroup\$ Array(L)+'' gives L-1 length, right? \$\endgroup\$ – Dom Hastings Oct 11 '17 at 5:49
  • \$\begingroup\$ Which means that for L=13, the code is 12 characters and the output is 12 characters, so the same as ','.repeat(12) \$\endgroup\$ – Steve Bennett Oct 11 '17 at 6:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.