85
\$\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\$
10
  • 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
  • 5
    \$\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
  • \$\begingroup\$ Can the string be empty? \$\endgroup\$ Aug 6, 2019 at 19:58
  • 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

212 Answers 212

1 2 3
4
5
8
3
\$\begingroup\$

BRASCA, 6 bytes

As of writing, there's no online interpreter yet.
EDIT: There is now.

,[:oo]

Try it online!

Explanation

<implicit input>      - Push STDIN to the stack
,                     - Reverse stack
 [   ]                - While non-zero:
  :oo                 -     Output the current character twice
\$\endgroup\$
3
\$\begingroup\$

naz, 34 32 bytes

2x1v1x1f0a0x1x2f1r3x1v1e2o2f0x2f

Works for any null-terminated input string.

Try it online!

Explanation (with 0x instructions removed)

2x1v             # Set variable 1 equal to 0
1x1f0a           # Function 1
                 # Add 0 to the register
1x2f1r3x1v1e2o2f # Function 2
                 # Read a byte of input and goto function 1 if it equals variable 1
                 # Otherwise, output twice and call function 2
2f               # Call function 2
\$\endgroup\$
3
\$\begingroup\$

Python 3, 43 bytes

def d(s,o=""):
	for c in s:o+=c+c
	return o

Try it online!

\$\endgroup\$
2
  • \$\begingroup\$ 32 bytes \$\endgroup\$
    – lyxal
    Feb 15, 2021 at 2:14
  • \$\begingroup\$ FYI there's already a few Python 3 solutions. (although we don't prohibit posting your own attempts) codegolf.stackexchange.com/search?q=inquestion%3A188988+Python (I think there's also the graduation userscript that shows a leader board under every questions, but I don't use it myself) cc @Lyxal \$\endgroup\$
    – DELETE_ME
    Feb 15, 2021 at 10:12
3
\$\begingroup\$

Labyrinth, 9 8 bytes

 ,
.:@
:

Try it online!

Wins over Jonathan Allan's answer.

How it works

,    Start at the first meaningful instruction; push a char from stdin
:    Duplicate; on EOF, top is -1 so turn left and exit (@)
     otherwise, top is positive (printable ASCII) so turn right
.:.  Pop-print as char, dup, pop-print as char. Top is still the input char
:    Duplicate; turn to (,) since top is nonzero
,    This is a dead end so it runs again from the start, until EOF
\$\endgroup\$
3
\$\begingroup\$

Taxi, 390 342 335 bytes

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to Chop Suey.[A]Go to Chop Suey:n 1 r 1 l 4 r 1 l.Switch to plan B i.Pickup a passenger going to Cyclone.Go to Zoom Zoom:n 1 l 3 r.Go to Cyclone:w.[C]Pickup a passenger going to Post Office.Switch to plan B i.Switch to plan C.[B]Go to Post Office:s 1 l 2 r 1 l.Switch to plan A.

Try it online!

Explanation/Ungolfed

    [Take input string]
Go to Post Office: west 1st left, 1st right, 1st left.
Pickup a passenger going to Chop Suey.

[loop]
    [If string as a passenger, split it]
Go to Chop Suey: north 1st right, 1st left, 4th right, 1st left.
    [At the end of the string, end the program]
Switch to plan end_loop if noone is waiting.
        [any character after end_loop is fine]
    [Duplicate first character left]
Pickup a passenger going to Cyclone.
Go to Zoom Zoom: north 1st left, 3rd right.
Go to Cyclone: west.
    [Pickup character twice]
[two]
Pickup a passenger going to the Post Office.
Switch to plan end_loop if noone is waiting.
Switch to plan two.
    [Prints characters or crashes program, you can't drive that way]
[end_loop]
Go to the Post Office: south 1st left, 2nd right, 1st left.
Switch to plan loop.

Comment

It does not even matter whether we tank at Zoom Zoom or Fueler Up, both are 335 bytes.

By tanking at Fueler Up we pay so much that we don't earn enough and are out of gas for string of length 86 or more. However, even tanking at Zoom Zoom does not allow to drive infinitely, it probably stops at strings of a length around 129, I didn't test or solve this because it's an old answer.

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to Chop Suey.[A]Go to Fueler Up:n 1 r 1 l.Go to Chop Suey:n 3 r 1 l.Switch to plan B i.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 3 l.[C]Pickup a passenger going to Post Office.Switch to plan B i.Switch to plan C.[B]Go to Post Office:s 1 l 2 r 1 l.Switch to plan A.

Try it online! (With a long string)

\$\endgroup\$
1
  • 1
    \$\begingroup\$ You can save four bytes by removing the quotation marks in the "Switch to plan" commands. \$\endgroup\$
    – Dorian
    Nov 12, 2019 at 10:12
3
\$\begingroup\$

Python 3.8, 31 bytes

for x in input():print(end=x*2)

Try it online!

\$\endgroup\$
3
\$\begingroup\$

Dis, 3 bytes.

}{{

Try it online!

How it works

} ( a=getchar;if a==EOF a=59048;)
 { ( if a==59048 exit; else putchar a%256; )
   { ( again)
( then keep program counter+=1 until 59048 where each cell from i=3 to 59048 is NOP;
   then pc=0 if pc is 59048) 
\$\endgroup\$
3
\$\begingroup\$

Vyxal, 4 2 bytes

2•

Try it Online!

Removed implicit input and output. Thanks @emanresu A

Doesn't beat Y but works nonetheless.

\$\endgroup\$
1
  • \$\begingroup\$ Nice! You don't need the ? or , due to implicit input/output. \$\endgroup\$
    – emanresu A
    Sep 16, 2021 at 9:01
3
\$\begingroup\$

Q, 7 bytes:

(,/)2#'

Explanation

      '          // Each operator
    2#           // Take two
(,/)             // Join over (aka raze)

q/kdb+ CLI

\$\endgroup\$
1
  • \$\begingroup\$ Welcome to Code Golf! Nice answer. \$\endgroup\$ Oct 27, 2021 at 2:34
3
\$\begingroup\$

Lexurgy, 28 bytes

The "canonical" way of duplicating characters (gemination in linguistics terms) in Lexurgy: capture a character and an empty string, and replace both with itself. The $$ matches the space literal between words on a newline-separated input.

a:
[]$1 *=>$1 $1
$$=>$$ $$
\$\endgroup\$
3
\$\begingroup\$

TI-Basic, 52 37 39 bytes

For(I,1,2length(Ans),2
sub(Ans,1,I)+sub(Ans,I,1-I+length(Ans
End
Ans

Input is taken in Ans. Output is stored in Ans and displayed.

\$\endgroup\$
3
\$\begingroup\$

Javascript(Node.js), 64 57 55 bytes

-7 bytes thanks to Radvylf Programs
-2 bytes thanks to pxeger
This is my first code golf answer, so I know this could be improved.

s=>{eval("e='';for(var i in s){e+=s.at(i).repeat(2)};e")}

Attempt this online

\$\endgroup\$
2
  • 1
    \$\begingroup\$ Welcome to code golf! You can save some bytes by replacing (s) with s, shortening end to a single letter, and removing the {} around the for loop. You can also use a trick where instead of s=>{...;return end}, you do s=>eval("...;end") to save another byte. \$\endgroup\$ Mar 31 at 2:35
  • \$\begingroup\$ The eval() tip Radvylf mentioned requires you to remove the {} around the function. Also, you can avoid the problem of having an extra 20 bytes on ATO by putting the running code in the Header and Footer: ato.pxeger.com/… \$\endgroup\$
    – pxeger
    Mar 31 at 7:49
3
\$\begingroup\$

C (clang), 43 chars

The function f is double speaking its string input.

f(char*a){*a&&f(a+!!putchar(putchar(*a)));}

Edit : saved 1 char by reusing the putchar output to eliminate a division, by ceilingcat.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Suggest printf("%c%1$c",*a)-1 instead of !!putchar(putchar(*a)) \$\endgroup\$
    – ceilingcat
    Apr 9 at 20:26
3
\$\begingroup\$

Curry (PAKCS), 16 bytes

(>>=(\x->[x,x]))

Try it online!

very similar to haskell.

\$\endgroup\$
3
\$\begingroup\$

Rust, 114 bytes

fn main(){let mut b=format!("");std::io::stdin().read_line(&mut b).unwrap();for l in b.chars(){print!("{}{0}",l)}}

Rust is not a great golfing language given its focus on explicitness, but here's an answer anyway!

Normally one allocates a string using String::new(), but format!("") is two bytes shorter. I also use that the print macro can accept the index of the variable to print, so I avoid writing print!("{}{}",l,l), saving one byte.

Try it online!

\$\endgroup\$
3
\$\begingroup\$

Wolfram Language (Mathematica), 44 33 bytes

-11 bytes

StringJoin[{#,#}&/@Characters@#]&

Mathematica is probably not the best choice for this given its verbose function names, but here's what I managed! The code works by first splitting its input into a list of characters, then it maps an anonymous function over it which replaces each character by a list of two copies. It then combines this list of lists of strings into the final string using StringJoin, which ignores all list structure.

Try it online!

\$\endgroup\$
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\$
    – NieDzejkob
    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
1 2 3
4
5
8

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.