93
\$\begingroup\$

Super simple challenge today, or is it?

I feel like we've heard a fair bit about double speak recently, well let's define it in a codable way...

Double speak is when each and every character in a string of text is immediately repeated. For example:

"DDoouubbllee  ssppeeaakk!!"

The Rules

  • Write code which accepts one argument, a string.
  • It will modify this string, duplicating every character.
  • Then it will return the double speak version of the string.
  • It's code golf, try to achieve this in the smallest number of bytes.
  • Please include a link to an online interpreter for your code.
  • Input strings will only contain characters in the printable ASCII range. Reference: http://www.asciitable.com/mobile/

Leaderboards

Here is a Stack Snippet to generate both a regular leaderboard and an overview of winners by language.

var QUESTION_ID=188988;
var OVERRIDE_USER=53748;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;float:left}table thead{font-weight:700}table td{padding:5px}
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> 

To make sure that your answer shows up, please start your answer with a headline, using the following Markdown template:

# Language Name, [Other information] N bytes

where N is the size of your submission. Other information may include flags set and if you've improved your score (usually a struck out number like <s>M</s>). N should be the right-most number in this heading, and everything before the first , is the name of the language you've used. The language name and the word bytes may be links.

For example:

# [><>](http://esolangs.org/wiki/Fish), <s>162</s> 121 [bytes](https://esolangs.org/wiki/Fish#Instructions)
\$\endgroup\$
9
  • 5
    \$\begingroup\$ It will modify this string. Are you intentionally requiring pass-by-reference and modify in-place? And then return a copy or reference to that modified string? If so, languages like asm or C would need to accept an explicit-length string (pointer + length) where the length is either the current string length (with the buffer being twice that size), or it's the total size and you need to duplicate the low half. Thus you need to start from the end and work backwards, or allocate scratch space and then copy back. But there are answers in C and 8086 asm that totally violate all that. \$\endgroup\$ Aug 3, 2019 at 1:49
  • 6
    \$\begingroup\$ @PeterCordes I do not care if it modifies the same object or builds a new one. \$\endgroup\$
    – AJFaraday
    Aug 3, 2019 at 5:08
  • 4
    \$\begingroup\$ I'd suggest wording it as "modify (or produce a modified copy) of the string" to explicitly allow answers that do or don't modify in-place. Simplifying the wording to "return a string that's twice as long, with each character repeated" would be nice but then it's not clear if void foo(char *c, size_t len) is legal that takes one input/output buffer and a length, and doesn't have any return value, just a side-effect on the object it has a pointer to. \$\endgroup\$ Aug 3, 2019 at 5:16
  • 1
    \$\begingroup\$ @cschultz2048 it says the string will only contain printable ascii characters, so that implies that they’ll always be populated. I’d expect that any code for this challenge would leave an empty string empty... anyway, I don’t think it’s a test case that I’d use for this. \$\endgroup\$
    – AJFaraday
    Aug 6, 2019 at 22:36
  • \$\begingroup\$ Does this answer your question? Stretching Words Because when you make the two operands in any submission to that challenge equal, programs will obey the behavior described in this challenge. An example of this behavior is here. \$\endgroup\$
    – user85052
    Jan 2, 2020 at 12:29

244 Answers 244

1
3 4
5
6 7
9
2
\$\begingroup\$

Japt -m, 1 byte

²

Try it online

\$\endgroup\$
3
  • 1
    \$\begingroup\$ Was about to hit "Post" on my identical solution when the page refreshed with yours! \$\endgroup\$
    – Shaggy
    Jul 31, 2019 at 12:21
  • 1
    \$\begingroup\$ @Shaggy I knew this would be a race against you :-P \$\endgroup\$
    – Oliver
    Jul 31, 2019 at 12:22
  • 2
    \$\begingroup\$ A race against everyone, nearly, on a challenge this trivial! Posted a 2 byte solution anyway. \$\endgroup\$
    – Shaggy
    Jul 31, 2019 at 12:23
2
\$\begingroup\$

Japt, 2 bytes

Oliver beat me to the straightforward, 1 byte solution.

íU

Try it

Interleaves the input with itself.

\$\endgroup\$
2
\$\begingroup\$

VDM-SL, 28 bytes

f(a)==conc[[x,x]|x in seq a]

Distributed enumeration of the sequence containing sequences of length 2 of repeated elements of a.

enter image description here

\$\endgroup\$
3
  • \$\begingroup\$ I don't think the output of your first solution is valid. \$\endgroup\$
    – Shaggy
    Jul 31, 2019 at 15:09
  • \$\begingroup\$ @Shaggy maybe, when I posted it there were other answers with similar output. I'll remove the first one \$\endgroup\$ Jul 31, 2019 at 15:15
  • \$\begingroup\$ If you spot any others, leave them a similar comment ;) \$\endgroup\$
    – Shaggy
    Jul 31, 2019 at 17:10
2
\$\begingroup\$

Forth (gforth), 40 bytes

: x 0 ?do dup c@ dup emit emit 1+ loop ;

Try it online!

A byte can be saved by removing the ?, but that will break the handling of zero-length input.

\$\endgroup\$
2
\$\begingroup\$

CJam, 3 bytes

q:_

Try it online!

\$\endgroup\$
2
\$\begingroup\$

><>, 9 bytes

i::0(?;oo

Try it online! I'm reasonably confident that this is optimal (barring solutions which terminate through errors; i:oo would be such a solution.)

Explanation

i::0(?;oo
i             takes one character of input      [c]
 ::           duplicates it twices              [c, c, c]
   0(?        if it's less than 0 (no input)    [c, c]
      ;       terminate
       oo     output twice                      []
              implicitly wrap to the beginning
\$\endgroup\$
1
  • 1
    \$\begingroup\$ If you can start with input on the stack (IIRC a command line option for one implementation), then you could do :oo for a solution with an error and l?!;:oo for a solution without. These are not tested, but I’m pretty sure they’re right. \$\endgroup\$
    – cole
    Jul 31, 2019 at 19:11
2
\$\begingroup\$

J, 2 bytes

2#

The verb "#", or "copy", copies its right argument the number of times specified by the left argument where the left argument is greater than or equal to zero and is either a single number or a vector of numbers of the same length as the first axis of the right argument. So, we can copy things "zero" times to remove them:

   1 0 1 0 # 1 2 3 4

returns 1 3.

Try it online: https://tio.run/##y/r//39qcka@gpGyukt@aVJOqkJxQWpitqI6138A

\$\endgroup\$
1
  • 6
    \$\begingroup\$ Snippets aren't allowed. You solution needs to be assignable to a variable. So eg 2 # ], Galen's answer, is allowable because you can write f=. 2#], but you cannot write f=.2# \$\endgroup\$
    – Jonah
    Aug 1, 2019 at 2:08
2
\$\begingroup\$

Minkolang v.0.15, 7 bytes

od?.dOO

Try it here!

Explanation

od?.dOO
o            take one character of input
 d           duplicate top of stack
  ?.         terminate if its 0
    dOO      duplicate and output twice
\$\endgroup\$
2
\$\begingroup\$

8086/8088 machine code, 9 bytes

I couldn't resist.

ac       lodsb        Read DS:[SI] into AL, then increment SI.
aa       stosb        Write AL into ES:[DI], then increment DI.
3c 00    cmp al, 0    Is AL = 0?
74 03    je +5        If so, jump to the end of this loop.
aa       stosb        Write AL into ES:[DI], then increment DI.
eb f7    jmp -7       Jump to the beginning of this loop.

Assumptions:

  • The input string is a null-terminated string of bytes located at DS:SI.
  • There is an output string buffer located at ES:DI.
  • The output string buffer is large enough to hold the resulting string.
  • It's not necessary to tell the calling code the location of the output string buffer. If it is, add 2 bytes: 57 (push di) at the beginning and 5f (pop di) at the end. This assumes that the stack has 2 bytes free.
  • This code will be placed inline, so it's unnecessary to use an instruction to return. If this is false, add 1 byte: c3 (ret) at the end (after the 5f, if applicable).
\$\endgroup\$
7
  • 2
    \$\begingroup\$ Or 7 bytes with just: lodsb / stosb / stosb / cmp al, 0 / jne -7 It will give you two 0's at the end of the string, but can't see how that's not allowed since you're writing to a "large enough" buffer and will still be null terminated. \$\endgroup\$
    – 640KB
    Aug 1, 2019 at 18:40
  • 2
    \$\begingroup\$ Or 6 bytes by combining the two ideas: lodsb / stosb / stosb / dec ax / jns -6 \$\endgroup\$
    – 640KB
    Aug 1, 2019 at 18:43
  • \$\begingroup\$ The question wording is pretty clear: It will modify this string. Not return a copy, so asking the caller to pass a 2nd output arg is definitely bending the rules. I asked for clarification on this. re: omitting the ret: it doesn't say "function" but it does say "return" instead of just "produce". To me that implies function, not inline block. \$\endgroup\$ Aug 3, 2019 at 1:52
  • \$\begingroup\$ @gwaugh: dec ax only works if AH was known to be zero ahead of that. That would cost an extra 2-byte instruction ahead of the loop to zero AH or AX. You can't justify offloading that setup of a tmp reg to the "caller" in code-golf. dec al wouldn't be safe and is 2 bytes anyway so we might as well just use cmp. \$\endgroup\$ Aug 3, 2019 at 2:01
  • \$\begingroup\$ Anyway, to loop backwards I was thinking std then a loop like lodsb/2xstosb/loop/cld (with the caller passing a length in CX). Although we probably need add si, cx and add di, cx first if the caller passes pointers to the start of the buffers. lea di, [esi + ecx*2] costs 4 bytes (address-size prefix + SIB) so it's the same as 2x add di, cx. I don't think there's a compact way to broadcast-load so we could do word stores. 32-bit mode for AVX2 vpbroadcastb xmm0, [esi] costs at least a 3-byte VEX prefix + opcode + ModRM. \$\endgroup\$ Aug 3, 2019 at 2:07
2
\$\begingroup\$

Kotlin, 47 bytes

{(0..it.length-1).fold(""){s,c->s+it[c]+it[c]}}

Try it online!

\$\endgroup\$
2
\$\begingroup\$

Bash, 58 39 bytes

Using only shell builtins, no fancy parsers like sed.

58 bytes: Try it online

a="$*";for((i=0;i<${#a};i++)){ x=${a:i:1};echo -n "$x$x";}

47 bytes: (via primo)

for((;i<${#1};)){ x=${1:i++:1};echo -n "$x$x";}

39 bytes: (by manatwork). Try it online

while read -N1 c;do echo -n "$c$c";done
\$\endgroup\$
4
  • 2
    \$\begingroup\$ Does not double % characters. \$\endgroup\$
    – Maya
    Jul 31, 2019 at 15:23
  • \$\begingroup\$ Good catch, fixed now (replaced printf with echo -n) \$\endgroup\$
    – roblogic
    Jul 31, 2019 at 15:42
  • 1
    \$\begingroup\$ No need to reassign $*, just use $1. Initializing i=0 is unnecessary. i++ can be moved to x=${1:i++:1}. \$\endgroup\$
    – primo
    Jul 31, 2019 at 16:49
  • 1
    \$\begingroup\$ A traditional read in while would be shorter and still using only Bash's own staff: Try it online!. \$\endgroup\$
    – manatwork
    Jul 31, 2019 at 17:33
2
\$\begingroup\$

Starry, 14 bytes

` , + + + . .'

Try it online!

\$\endgroup\$
2
\$\begingroup\$

33, 8 bytes

P[ktppP]

Try it online! Or not. How do you get a language on TIO?

The input string has to be null-terminated.

Explanation:

P     P  | Get input character
 [     ] | While it isn't a null character:
  kt     | - Put it in the string register
    pp   | - Print it twice
\$\endgroup\$
1
2
\$\begingroup\$

Java (OpenJDK 8), 88 87 bytes

g->{String d ="";for(int i=0;i<g.length();){d+=""+g.charAt(i)+g.charAt(i++);}return d;}

Try it online!

Ungolfed:

g->{
    String d ="";
    for (int i=0;i<g.length();) {
        d+=""g.charAt(i)+g.charAt(i++);
    }
return d;
};

I'm sure there's way to shorten it, at least it was my first attempt in PPCG.

-1 for @manatwork

\$\endgroup\$
10
  • \$\begingroup\$ Is shorter to force the casting (?) than to use 2 separate assignments; you can move the incrementation from for's 3rd argument to i's last usage: d+=""+g.charAt(i)+g.charAt(i++); \$\endgroup\$
    – manatwork
    Aug 1, 2019 at 11:31
  • \$\begingroup\$ @manatwork Oh, okay. Done \$\endgroup\$ Aug 1, 2019 at 11:52
  • 4
    \$\begingroup\$ 48 \$\endgroup\$
    – Grimmy
    Aug 1, 2019 at 11:55
  • \$\begingroup\$ @CuttingChipset, actually the point of using a single assignment was to be able to remove the for block's braces. But with Grimy's suggestion, now that's meaningless. \$\endgroup\$
    – manatwork
    Aug 1, 2019 at 12:27
  • \$\begingroup\$ @manatwork but can I put his suggestion into the answer or what? It looks diametrically different than it is currently? \$\endgroup\$ Aug 1, 2019 at 12:46
2
\$\begingroup\$

x86 machine code, 6 bytes

f:
  AC       LODSB
  AA       STOSB
  AA       STOSB
  E2 FB    LOOP  f
  C3       RET

Takes address of input string in SI, length of input string in CX, address of output string in DI. Should work in 16, 32 and 64-bit mode.

Try it online!

\$\endgroup\$
3
  • \$\begingroup\$ In 16-bit mode with far pointers the input string is in DS:SI and the output is in ES:DI of course. \$\endgroup\$
    – Neil
    Aug 2, 2019 at 9:51
  • \$\begingroup\$ The question specifies modifying a string (which implies in-place). So you need to work from the end of the string backwards to not overwrite chars you haven't read yet. I asked on the question for clarification. See also discussion on the 8086 machine-code answer. \$\endgroup\$ Aug 3, 2019 at 2:46
  • \$\begingroup\$ Heck, in 32-bit mode input is in ds:esi and output is in es:edi. \$\endgroup\$ Jul 14, 2022 at 22:03
2
\$\begingroup\$

Perl 6, 33 bytes

(@*ARGS[0].comb Xx 2).join.say

Comb splits our string into an array. The X meta operator applies the operator to it's right in a cross product fashion. So with the string "Double" it's doing ("D"x2, "o"x2, etc). Then we join the result and say it to print (with a newline).

\$\endgroup\$
2
\$\begingroup\$

Bash, 72 bytes

s=$1;e(){ echo -n "${s:$i:1}";};for ((i=0;i<${#s};i++));do e;e;done;echo

If you don't have a bash terminal somewhere, this should work.

\$\endgroup\$
2
2
\$\begingroup\$

C# (Visual C# Interactive Compiler) with Regex-flag, 24 bytes

: /u:System.Text.RegularExpressions.Regex (flag is not in the header, so it won't mess up the leader-board)

Port of my Java 8 answer, so look there for an explanation.

s=>Replace(s,".","$0$0")

Try it online.

\$\endgroup\$
2
  • \$\begingroup\$ Anything we can do to make the flag text in the header shorter? It makes the language name column in the leader-board pretty wide. (maybe "C# (Visual C# Interactive Compiler) with /u:...* flag, 28 bytes" and a * /u:System.Text.RegularExpressions.Regex in the body?) \$\endgroup\$ Aug 1, 2019 at 12:29
  • 1
    \$\begingroup\$ @JonathanAllan I've changed it. Will have to wait a few minutes before the API-date is updated to see if it works. EDIT: works. It's better readable now. ;) \$\endgroup\$ Aug 1, 2019 at 12:39
2
\$\begingroup\$

Retina 0.8.2, 6 bytes

.
$&$&

Try it online! Not guaranteed to work with unprintable characters. Previous 8-byte version worked with newlines:

s`.
$&$&

Try it online!

\$\endgroup\$
2
  • \$\begingroup\$ You can remove the s` now that the rules got changed. \$\endgroup\$ Aug 2, 2019 at 9:30
  • \$\begingroup\$ @KevinCruijssen Thanks! \$\endgroup\$
    – Neil
    Aug 2, 2019 at 9:46
2
\$\begingroup\$

Twig, 66 bytes

This is just a simple "split, loop, output twice".
Splitting by 0 on a string is similar to splitting by '' (empty string).

{%macro a(s)%}{%for c in s|split(0)%}{{c~c}}{%endfor%}{%endmacro%}

You can try it on https://twigfiddle.com/ldxe0c.

\$\endgroup\$
2
\$\begingroup\$

Agda, 110 Bytes

Sorry, no online interpreter available because this is more of a proof checker.

So this was quite annoying since I tried not to use the standard library and thus had to explicitly define lists. Chars also don't exist by now, but the function is polymorphic, so it would work in this case.

data L(A : Set): Set where
 N : L A
 C : A → L A → L A
d :{A : _}→ L A → L A
d N = N
d(C x y) = C x(C x(d y))
\$\endgroup\$
2
\$\begingroup\$

PHP, 59 bytes

-1 bytes by @manatwork

function($g){foreach(str_split($g)as$v)$e.=$v.$v;return$e;}

Try it online!

Full program , 44 bytes

foreach(str_split(readline())as$v)echo$v.$v;

Try it online!

\$\endgroup\$
7
  • \$\begingroup\$ No need for the braces around foreach's block. \$\endgroup\$
    – manatwork
    Aug 2, 2019 at 10:28
  • \$\begingroup\$ If you are submitting as a function you do have to include the function declaration (anonymous is fine) in your byte count: 65 bytes. \$\endgroup\$
    – 640KB
    Aug 4, 2019 at 17:27
  • \$\begingroup\$ Though errors and notices are fine so you don't really need to initialize $e: 59 bytes. \$\endgroup\$
    – 640KB
    Aug 4, 2019 at 17:30
  • \$\begingroup\$ Oh, welcome to PPCG by the way! \$\endgroup\$
    – 640KB
    Aug 4, 2019 at 17:31
  • \$\begingroup\$ Thanks, I'm fixing my answer \$\endgroup\$
    – ShiSHcat
    Aug 4, 2019 at 17:33
2
\$\begingroup\$

Matlab >= r2015a, 16 bytes

@(x)repelem(x,2)

Credits to Giuseppe

Note: I haven't found an online interpreter for MATLAB; this answer correctly works with MATLAB r2015a.

Matlab <= r2014b, 23 bytes

@(x)char(kron(x,[1,1]))

Note: I haven't found an online interpreter for MATLAB; this answer correctly works with MATLAB r2014b.

\$\endgroup\$
0
2
\$\begingroup\$

Cubix, 9 bytes

oU;?Av/@o

Try it online!

Mapped onto a cube

    o U
    ; ?
A v / @ o . . .
. . . . . . . .
    . .
    . .

Watch it run

  • A Put all the input onto the stack
  • v Redirect around the cube and start of the print loop
  • o? Output the character for the stack value and test value
  • @ If test is negative (EOI), halt
  • Uo;/ If test is positive, u-turn to the left, output character again, pop from stack and reflect onto the start of the print loop.
\$\endgroup\$
2
\$\begingroup\$

Octave, 32 25 bytes

@(x)char(kron(x+0,[1,1]))

Try it online!

-7 bytes thanks to Giuseppe

\$\endgroup\$
0
2
\$\begingroup\$

Fortran (GFortran), 100 bytes

Another demonstration of fortran's concise and elegant string handling capabilities... not!!

Summary: declare S as a 99 character string. read S in string format '(A)'. iterate over the trimmed string length. print the i'th character a couple of times without a newline (TIL).

Try it Online!

character(99)S;read(*,'(A)')S;do i=1,len_trim(S)
write(*,'(A)',advance="no")S(i:i)//S(i:i);enddo;end
\$\endgroup\$
2
\$\begingroup\$

K (ngn/k), 5 bytes

,/2#'

Try it online!


the above is an expression that will take (#) 2 copies of each (') letter and return a list where each element is a 2-char list, e.g.

("DD";"oo";"uu";"bb";"ll";"ee";"  ";"ss";"pp";"ee";"aa";"kk";"!!")

,/ is "join over", and flattens the list. we read the expression as "join over 2 take each string". with the string passed right-side we get:

  ,/2#'"Double speak!"
"DDoouubbllee  ssppeeaakk!!"
\$\endgroup\$
1
  • \$\begingroup\$ {2}# works too. see other answers \$\endgroup\$
    – ngn
    Aug 20, 2019 at 15:18
2
\$\begingroup\$

AsciiDots, 27 21 bytes

.>#a?**>$_a#
 \---/\/

Note that this halts in an error, which is allowed.

-6 bytes by getting rid of whitespace and not using warps.

Try it online!

\$\endgroup\$
2
\$\begingroup\$

Kipple (cipple), 28 bytes

(i>ac<0>b(a-1b+1c+1a?)b>o<c)

It's actually suprisingly difficult to duplicate stack items in Kipple

Expanation

(i>ac<0>b(a-1b+1c+1a?)b>o<c) Full program

(i                         ) Loops until the input stack is empty
 i>a                         Push the top item of the input stack to stack A
    c<a>b                    Push 0's to stack B and C
         (a-1b+1c+1a?)       A loop that basically pushes the top of stack A to stack B and C
                      b>o<c  Push the top of stack B and stack C to the output stack

Try it online!

\$\endgroup\$
2
\$\begingroup\$

MathGolf, 2 bytes

I hope this isn't a duplicate. (Great, it isn't.)

_^

Explanation

_  Duplicate the implicit input
 ^ Zip

Try it online!

\$\endgroup\$
1
3 4
5
6 7
9

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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