6
\$\begingroup\$

You have to create a code which prints

:)  

a random number of times from 1 to 255 inclusive. Your output may not contain any whitespace.

Your score :
The count in bytes

EDIT : Also show 3 outputs of your code

\$\endgroup\$
26
  • 22
    \$\begingroup\$ What's the purpose of subtracting points from popular answers? \$\endgroup\$
    – sortfiend
    Commented Mar 6, 2014 at 4:41
  • 24
    \$\begingroup\$ But, further, why is a code golf question scoring based on votes? It's code golf, not a popularity contest \$\endgroup\$ Commented Mar 6, 2014 at 8:38
  • 8
    \$\begingroup\$ Can you define "random"? Do you mean a uniform distribution between 0 and 255 number of occurrences, any probability distribution where each number of occurences between 0 and 255 has a non-zero probability, or just an unpredictable amount of smileys? \$\endgroup\$
    – Bakuriu
    Commented Mar 6, 2014 at 10:27
  • 16
    \$\begingroup\$ My php solution is 0 bytes. It is an empty php file. Since you didn't specify what "random" means: For my custom made random number generator, I chose the distribution which gives zero with probability 1 and all other numbers with 0 probability (the degenerate distribution). I am sure you will find it obeys all of your rules. \$\endgroup\$ Commented Mar 6, 2014 at 14:10
  • 7
    \$\begingroup\$ I agree with @TimSeguine, if I could I would downvote. This is super easy, basically no option to be creative in any way, strange score system (mix of code-golf and popularity), the challenge itself isn't very innovativ. \$\endgroup\$ Commented Mar 6, 2014 at 15:09

72 Answers 72

53
\$\begingroup\$

JavaScript (ES6), 25

":)".repeat(new Date%256)

Outputs (REPL):

> ":)".repeat(new Date%256)
":):):):):)"
> ":)".repeat(new Date%256)
":):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)"
> ":)".repeat(new Date%256)
":):):):):):):):):):):):):):):):):):):):):):):):):):):)"
\$\endgroup\$
13
  • 2
    \$\begingroup\$ You sir deserve more likes! \$\endgroup\$ Commented Mar 6, 2014 at 10:48
  • 5
    \$\begingroup\$ @rafaelcastrocouto The question does not mention about how good the random generation must be. Using the timestamp seems to be a good compromise between number distribution and randomness. \$\endgroup\$
    – Florent
    Commented Mar 6, 2014 at 17:44
  • 3
    \$\begingroup\$ You can use new Date%256, instead of Date.now()%256. 2 characters shorter. \$\endgroup\$
    – Toothbrush
    Commented Mar 6, 2014 at 19:11
  • 4
    \$\begingroup\$ @rafaelcastrocouto It takes a random seed (The time at which you choose to run it), it's predictable (like any RNG) because you know the seed, still random. \$\endgroup\$ Commented Mar 7, 2014 at 0:01
  • 1
    \$\begingroup\$ @Steve most golfing languages are never used in production, at least ES6 will actually be used. \$\endgroup\$
    – howderek
    Commented Mar 7, 2014 at 20:08
31
\$\begingroup\$

C - 116 (including artistic whitespace)

  x,i;           main
  (){           srand
         (time
         (0));
for                   (x=
 rand()            %256;
   i<x;           i++)
      printf(":)");}

I never get to do ASCII art code, and the 65 needed characters in the code are already running long as is... This was actually harder than I thought it would be because of the small number of characters to work with and the density of the code. Gets the point across at least.

Boring version:

x,i;main(){srand(time(0));for(x=rand()%256;i<x;i++)printf(":)");}

Note - Auto code counts are going to be off because I had to replace 8 tabs with spaces to get it to look the same in the code window. You can verify my count here if you want.

Edit: Oops, forgot to post output (newlines added for legibility).

comintern@fidel ~ $ ./a.out 
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):)
comintern@fidel ~ $ ./a.out 
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
comintern@fidel ~ $ ./a.out 
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):)
\$\endgroup\$
5
  • \$\begingroup\$ don't we include files like stdlib.h or so and count their char count ? \$\endgroup\$ Commented Mar 6, 2014 at 5:55
  • \$\begingroup\$ It compiles without headers in gcc. It complains about implicit declaration of built-in function ‘printf’, but works fine. \$\endgroup\$
    – Comintern
    Commented Mar 6, 2014 at 6:01
  • \$\begingroup\$ You could drop 1 character by doing for(x=rand()%256;i++<x;). EDIT: But it would break your ASCII art, yeah. \$\endgroup\$ Commented Mar 8, 2014 at 10:00
  • \$\begingroup\$ This can be done with just 60 chars: x;main(){srand(time(0));for(x=rand()%256;--x;)printf(":)");}. \$\endgroup\$
    – Tobias
    Commented Mar 8, 2014 at 11:15
  • \$\begingroup\$ @still_learning - Yeah, I know it can be quite a bit shorter, I structured the loop that way to keep the long strings I could divide distributed right. \$\endgroup\$
    – Comintern
    Commented Mar 9, 2014 at 1:24
30
\$\begingroup\$

GolfScript, 12 characters

":)"256rand*

Nothing really interesting here.

\$\endgroup\$
11
  • 1
    \$\begingroup\$ It doesn't change the length, but shouldn't that be 256 rather than 255? \$\endgroup\$
    – DocMax
    Commented Mar 6, 2014 at 5:05
  • 11
    \$\begingroup\$ @Doorknob Happy 10k! \$\endgroup\$ Commented Mar 6, 2014 at 5:09
  • 1
    \$\begingroup\$ @DocMax: If we want a uniform distribution from 0 to 255 inclusive, yes. If not, it might as well be 9. :) \$\endgroup\$ Commented Mar 6, 2014 at 9:05
  • 7
    \$\begingroup\$ Why in the world does this answer have so many upvotes? There are other more interesting answers out there. \$\endgroup\$
    – Justin
    Commented Mar 6, 2014 at 21:05
  • 4
    \$\begingroup\$ @Quincunx to point out how uninteresting this problem is. A good code-golf question should not be solvable by boring answers. If it is, it's a bad question. \$\endgroup\$
    – o0'.
    Commented Mar 9, 2014 at 0:32
30
\$\begingroup\$

Scala REPL 1337

Scala makes everyone happy. Need 266 votes to lower the score.

("""
:^)  :^(  :^[  :^]  :^D  :^P  :^b  :^&  
:o)  :o(  :o[  :o]  :oD  :oP  :ob  :o&  
:O)  :O(  :O[  :O]  :OD  :OP  :Ob  :O&  
:)  :(  :[  :]  :D  :P  :b  :&  
;^)  ;^(  ;^[  ;^]  ;^D  ;^P  ;^b  ;^&  
;o)  ;o(  ;o[  ;o]  ;oD  ;oP  ;ob  ;o&  
;O)  ;O(  ;O[  ;O]  ;OD  ;OP  ;Ob  ;O&  
;)  ;(  ;[  ;]  ;D  ;P  ;b  ;&  
=^)  =^(  =^[  =^]  =^D  =^P  =^b  =^&  
=o)  =o(  =o[  =o]  =oD  =oP  =ob  =o&  
=O)  =O(  =O[  =O]  =OD  =OP  =Ob  =O&  
=)  =(  =[  =]  =D  =P  =b  =&  
8^)  8^(  8^[  8^]  8^D  8^P  8^b  8^&  
8o)  8o(  8o[  8o]  8oD  8oP  8ob  8o&  
8O)  8O(  8O[  8O]  8OD  8OP  8Ob  8O&  
8)  8(  8[  8]  8D  8P  8b  8&  
B^)  B^(  B^[  B^]  B^D  B^P  B^b  B^&  
Bo)  Bo(  Bo[  Bo]  BoD  BoP  Bob  Bo&  
BO)  BO(  BO[  BO]  BOD  BOP  BOb  BO&  
B)  B(  B[  B]  BD  BP  Bb  B&  
%^)  %^(  %^[  %^]  %^D  %^P  %^b  %^&  
%o)  %o(  %o[  %o]  %oD  %oP  %ob  %o&  
%O)  %O(  %O[  %O]  %OD  %OP  %Ob  %O&  
%)  %(  %[  %]  %D  %P  %b  %&  
@^)  @^(  @^[  @^]  @^D  @^P  @^b  @^&  
@o)  @o(  @o[  @o]  @oD  @oP  @ob  @o&  
@O)  @O(  @O[  @O]  @OD  @OP  @Ob  @O&  
@)  @(  @[  @]  @D  @P  @b  @&  
X^)  X^(  X^[  X^]  X^D  X^P  X^b  X^&  
Xo)  Xo(  Xo[  Xo]  XoD  XoP  Xob  Xo&  
XO)  XO(  XO[  XO]  XOD  XOP  XOb  XO&  
X)  X(  X[  X]  XD  XP  Xb X&
^__^
""".replaceAll("\n","").replaceAll("x|X",":)")
.replaceAll("(:|=|8|B|;|%|@)+",":")
.replaceAll("[^:]+","\\)")
.substring(0,new scala.util.Random().nextInt(256)*2))

Output 1

res32: String = :)

Output 2

res33: String = 
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):)

Output 3

res34: String = 
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

FYI, the code to generate all smileys is the following:

for(i <- ":;=8B%@X"; j <- "^oO".toIterator.map(_.toString) ++ List(""); k <- ")([]DPb&") yield (i.toString+j.toString+k.toString)
//         eyes          nose or nothing                                      mouth
\$\endgroup\$
2
  • 3
    \$\begingroup\$ Add 5 more bytes and you have my vote :) \$\endgroup\$
    – Justin
    Commented Mar 6, 2014 at 18:54
  • 2
    \$\begingroup\$ Did it. Added a chinese smiley: ^__^ . Now because your comment has been upvoted once, there should be two more people voting for my answer ^__^ \$\endgroup\$ Commented Mar 7, 2014 at 15:11
17
\$\begingroup\$

Python 23

print':)'*(id(9)/8%256)

Demo

D:\temp>smiley.py
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):)

D:\temp>smiley.py
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):)

D:\temp>smiley.py
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):)
\$\endgroup\$
8
  • \$\begingroup\$ id(9) is not random and id(9)%255 will never give 255. \$\endgroup\$
    – grc
    Commented Mar 6, 2014 at 5:00
  • 2
    \$\begingroup\$ @grc: id(9) is random across multiple sessions but not across the same session. To get a random number across Please refer my output :-). And I agree, it should be id(9)%256 \$\endgroup\$
    – Abhijit
    Commented Mar 6, 2014 at 5:44
  • \$\begingroup\$ It appears to me that the output of id is always divisible by 8, so only 32 unique numbers can be produced from id(x)%256. If you divide by 8 first it should fix this. \$\endgroup\$
    – grc
    Commented Mar 6, 2014 at 6:00
  • \$\begingroup\$ @grc: Ahh yes, I forgot about that, yet thought that implementation dependent, yet in cPython which is widely used, its how its implemented \$\endgroup\$
    – Abhijit
    Commented Mar 6, 2014 at 6:08
  • 1
    \$\begingroup\$ @Abhijit: You can shave off one more character by swapping the multiplication around, since then you can get rid of the parenthesis (but have to add the space after print): print id(9)/8%256*':)' :) \$\endgroup\$ Commented Mar 10, 2014 at 0:59
13
\$\begingroup\$

Java 72 lines 1,832 bytes and ~50 seconds runtime

Me and my buddy pair programmed (Agile Methods ftw) this golfed Java Enterprise solution.

import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;

public class EnterpriseJavaSolution {

    public static class BodyPart {

        private char[] part = new char[2];

        public BodyPart (String part) {
            this.part = part.toCharArray();
        }

        public String toString() {
            return new String(part);
        }

    }

    public static class Eyes extends BodyPart {

        public Eyes () {
            super(":");
        }

    }

    public static class Mouth extends BodyPart {

        public Mouth () {
            super(")");
        }

    }

    public static class Face extends BodyPart {

        /**
         * So generic, much parts
         */
        public Face (List<BodyPart> parts) {
            super(parts.toString());
        }

    }

    public static void main (String[] args) {

        SecureRandom seed = new SecureRandom();
        //Very random, dont use all RAM though!!
        SecureRandom reallyRandom = new SecureRandom(seed.generateSeed((int) (Runtime.getRuntime().maxMemory() / 2.0)));
        byte[] randomNumber = new byte[1];
        reallyRandom.nextBytes(randomNumber);
        ArrayList<Face> smilees = new ArrayList<Face>();

        //Why are Java bytes signed! Such inconvenience
        for (int numSmilee = 0; numSmilee <= Math.abs(randomNumber[0] * 2.0); numSmilee++) {
            ArrayList<BodyPart> bits = new ArrayList<BodyPart>(new Integer((int)2.0)); //Optimal
            bits.add(new Eyes());
            bits.add(new Mouth());
            smilees.add(new Face(bits));
        }

        //TODO: make N-tier solution for printing
        System.out.println(smilees.toString().replaceAll("[^:)]",""));

    }

}

I've timed the runtime and given some example output below. I'm satisfied at the production readiness of this code.

$ time java EnterpriseJavaSolution
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

real    0m53.678s
user    0m4.380s
 sys    0m48.568s

$ time java EnterpriseJavaSolution
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

real    0m51.928s
user    0m4.218s
 sys    0m46.704s

$ time java EnterpriseJavaSolution
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

real    0m55.480s
user    0m4.074s
 sys    0m50.621s
\$\endgroup\$
5
  • \$\begingroup\$ The question is a code-golf, so please include the character count in your answer. Also, try to "golf" your answer by removing unnecessary whitespace for example. And I also think that this answer can be a lot shorter, so for example it is not really necessary to create a class for each part of the smiley. It might be a good programming practice, but this is code-golf, code length is a lot more important than best practices. \$\endgroup\$
    – ProgramFOX
    Commented Mar 7, 2014 at 18:42
  • 3
    \$\begingroup\$ Well the previous Java example was critiqued for bad practice and lack of randomosity >:3 \$\endgroup\$
    – Matt Oates
    Commented Mar 7, 2014 at 20:25
  • \$\begingroup\$ Haha I love this. Needs more comments and java doc though. \$\endgroup\$
    – krs013
    Commented May 20, 2014 at 5:17
  • \$\begingroup\$ This made me burst out laughing :D \$\endgroup\$
    – Beta Decay
    Commented Aug 27, 2015 at 12:28
  • 1
    \$\begingroup\$ The real joke is we both program in Perl professionally :) \$\endgroup\$
    – Matt Oates
    Commented Aug 28, 2015 at 18:28
12
\$\begingroup\$

PowerShell 21, 17

":)"*(Random 256)

PS C:\Users\DocMax> ":)"*(Random 256) :):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

PS C:\Users\DocMax> ":)"*(Random 256) :):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

PS C:\Users\DocMax> ":)"*(Random 256) :):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

Edit: Removed Get- following Rynant's awesome news-to-me input. It's not often that PowerShell is competitive at code golf.

\$\endgroup\$
3
  • 1
    \$\begingroup\$ All Get-<Something> functions in PowerShell are automatically aliased as <Something>, so you can save 4 bytes by getting rid of Get- \$\endgroup\$
    – Rynant
    Commented May 12, 2014 at 18:36
  • 1
    \$\begingroup\$ I really want to make this shorter, but it's so simple I'm afraid that's not possible. Fair warning about omitting "Get-": It's fine for short scripts like this, but it actually bloats the run time quite significantly. Try Measure-Command {Get-Random}; Measure-Command {Random} to see the difference. On my system, they're 0.1579 ms vs. 30.0963 ms. It's hardly noticeable when you're just running it once, but it can be a big deal when your script uses the command a lot more (say, 30,000 times)! \$\endgroup\$
    – Iszi
    Commented May 27, 2014 at 15:26
  • \$\begingroup\$ Thanks for the comment on aliasing. It's always useful to know the potential impact of something like aliasing, even when it is small. \$\endgroup\$
    – DocMax
    Commented May 27, 2014 at 16:45
11
\$\begingroup\$

C 50 48 44 (with the suggestion from @urogen and @n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳)

Note I liked what @Comintern, so tried to do something similar with my answer

/*
Uninitialized c will always randomized to an address range (assuming system 
supports ASLR. 
Recursion instead of loop to reduce code length 
As whitespace is not counted, organized the code to represent a smiley character
*/
main(a
        ,
          c)
  {c       &&  
 main        (    
printf        (
 ":)"        )
  ,(       c&
         255
       )
-1);}

Demo

D:\temp>Smiley.exe
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):)
D:\temp>Smiley.exe
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):)
D:\temp>Smiley.exe
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):)

IDEONE

http://ideone.com/ZWPjqS

\$\endgroup\$
6
  • \$\begingroup\$ I get a segmentation fault about half the time. I suppose it is intentional that you are trying to get a "random" variable by not initializing c? \$\endgroup\$ Commented Mar 6, 2014 at 4:47
  • \$\begingroup\$ @skibrianski: Yes, there was some issue with the code. Brackets were misplaced and we need to work with absolute value \$\endgroup\$
    – Abhijit
    Commented Mar 6, 2014 at 5:53
  • \$\begingroup\$ Have you tried (c&0xff) instead of abs(c)%256? This should work due to integer promotion. \$\endgroup\$ Commented Mar 6, 2014 at 6:48
  • \$\begingroup\$ c&&main(printf(..),..); would be shorter. \$\endgroup\$
    – ugoren
    Commented Mar 6, 2014 at 6:51
  • \$\begingroup\$ I think you missed urogen's other suggestion, to move the printf to main's arguments. \$\endgroup\$
    – hvd
    Commented Mar 6, 2014 at 13:24
11
\$\begingroup\$

Befunge 98 - 20 bytes (with unicode)

?1+:'ÿ`!j@"):",,>
@

? sends the IP in a random direction, either left, right, up, or down. After doing so, I increment a counter and compare it to 255: 1+:'ÿ`!. j@ will exit if this is the 256th time. "):" is the frowny face that I'm supposed to print, and ,, prints it (output: :)). The > is to ensure that if the IP goes left, it will change directions and go right.

On each iteration, there is a 2/3 probability that the loop will exit. This means that the probability that comparing to 255 is needed (assuming perfect random) is

(1/3)255 = 1/46336150792381577588313262263220434371406283602843045997201608143345357543255478647000589718036536507270555180182966478507

Is that close enough to zero to justify not comparing to 255 (it would save me 10 bytes, bringing me down to 10 bytes)? For comparison, this number is about 2.158 × 10-122. The number of atoms in the universe is about 1080. The Planck length, the smallest measurable length (as in the universe does not allow for smaller), is 1.616199(97) × 10-35 m. This means that if this number were the size of the Planck length, the Planck length would be about

8.5×1059 × diameter of the observable universe (93 billion light-years)

First output:

:)

Second output:

:):)

Third output:

:):):):):)

Alternatively, if I am allowed to print null characters, then this works, for 19 bytes:

?,,":)"_@#-ÿ':+1
@

Exploit (you say random times in the range 0-255, so I'll choose random in the range 0-126, saving 1 more byte):

?1+:'~`!j@"):",,>
@
\$\endgroup\$
1
  • 3
    \$\begingroup\$ +1 for noticing that the random distribution need not be uniform. \$\endgroup\$
    – geometrian
    Commented Mar 6, 2014 at 7:14
8
\$\begingroup\$

J - 18 char

Surprisingly, there is a subtle behaviour in the J interpreter that prevents a quick 12 character solution: the interpreter's REPL output is truncated after 256 characters, so you have to print directly to stdout to "do it right".

1!:2&4^:(?256)':)'

Explained:

  • 1!:2&4 - Print to stdout (file handle 4)...
  • ^:(?256) - ... a random number of times less than 256...
  • ':)' - ... the string :).

Examples:

   1!:2&4^:(?256)':)'
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
   1!:2&4^:(?256)':)'
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
   1!:2&4^:(?256)':)'
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

And, for posterity, here's the 12 char solution which generates the string but is unable to display it right.

':)'$~2*?256

We take the random int, multiply it by 2, and then create a string that long, cyclically pulling characters from :). Yes, this is shorter than copying the string.

\$\endgroup\$
7
  • \$\begingroup\$ Which one should I consider...18 char or 12 char solution \$\endgroup\$ Commented Mar 6, 2014 at 3:38
  • 1
    \$\begingroup\$ The 12 char version doesn't print the string properly whenever the random number is 129 or greater, due to the nature of the J interpreter. Unless the rules change, only the 18 char solution is correct. \$\endgroup\$ Commented Mar 6, 2014 at 3:57
  • 1
    \$\begingroup\$ You can double the max line length with (9!:37) 0 512 0 222. I'm not sure whether setting global parameters is allowed outside of the character count though. \$\endgroup\$
    – grc
    Commented Mar 6, 2014 at 5:09
  • \$\begingroup\$ Assuming the z locale, you can get 17 with echo(+:?128)$':)' \$\endgroup\$
    – AlliedEnvy
    Commented Mar 7, 2014 at 1:04
  • \$\begingroup\$ @AlliedEnvy You could get even shorter with echo':)'$~+:?256 (16 char), but it falls prey to the same bug as above, because echo uses 1!:2&2 and not &4, and thus respects the settings in 9!:36. \$\endgroup\$ Commented Mar 7, 2014 at 1:33
7
\$\begingroup\$

Ruby, 18

(with help from manatwork, David Herrmann, and Victor)

$><<':)'*rand(256)

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

\$\endgroup\$
9
  • \$\begingroup\$ Not sure how to show the wrapping in the result part, but they are of different lengths \$\endgroup\$ Commented Mar 6, 2014 at 3:38
  • 1
    \$\begingroup\$ press enter then add four spaces before text \$\endgroup\$ Commented Mar 6, 2014 at 3:53
  • \$\begingroup\$ Shouldn't it be rand(256) to get 0-255? \$\endgroup\$ Commented Mar 6, 2014 at 6:15
  • \$\begingroup\$ You can use spare: 1 character by using $><< to output; 2 characters by removing the outer pair of parenthesis. $><<':)'*rand(255) \$\endgroup\$
    – manatwork
    Commented Mar 6, 2014 at 7:44
  • 3
    \$\begingroup\$ $><< looks fancy, but is there anything wrong with puts':)'*rand(255)? \$\endgroup\$
    – Ry-
    Commented Mar 6, 2014 at 19:53
7
\$\begingroup\$

perl 20, 17 characters

Thanks to skibrianski for shaving 3 characters.

say":)"x rand 256

Sample execution:

$ perl -M5.10.0 -e 'say":)"x rand 256'
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):)

$ perl -M5.10.0 -e 'say":)"x rand 256'
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):)

$ perl -M5.10.0 -e 'say":)"x rand 256'
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):)

$ perl -M5.10.0 -e 'say":)"x rand 256'                                                 
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
\$\endgroup\$
5
  • \$\begingroup\$ You can save 2 bytes by: 1 - nuking the space between say and the smiley and 2 - ditching the parens around rand. IOW: 'say":)"x rand 255' \$\endgroup\$ Commented Mar 6, 2014 at 4:47
  • \$\begingroup\$ note: rand 255 doesn't include 255 \$\endgroup\$
    – jfs
    Commented Mar 8, 2014 at 8:39
  • \$\begingroup\$ @J.F.Sebastian Oversight, I guess. I'll change it to 256. (Between 0 and 255 is ambiguous at best.) \$\endgroup\$
    – devnull
    Commented Mar 8, 2014 at 8:42
  • \$\begingroup\$ could shave off a byte: say":)"x($$&255) (or if you want to be a smartass, say":)"x($^T&255), where ^T is the literal control character) \$\endgroup\$
    – Eevee
    Commented Mar 9, 2014 at 19:36
  • \$\begingroup\$ What's interesting is that this is almost the same as the shortest Perl6 code. The only difference is that Perl6 requires some whitespace after sub calls ( unless you alter the parsing behaviour with a slang or macro ). \$\endgroup\$ Commented Dec 1, 2014 at 14:03
6
\$\begingroup\$

PHP | 30 bytes

 <?=str_repeat(':)',rand()%256)
\$\endgroup\$
5
  • \$\begingroup\$ Add a '#' character before 'PHP' to make it a heading like other answers \$\endgroup\$ Commented Mar 6, 2014 at 4:57
  • 1
    \$\begingroup\$ Since this question is tagged code-golf, it is helpful to include the character count in your answer. \$\endgroup\$
    – grc
    Commented Mar 6, 2014 at 6:52
  • \$\begingroup\$ You can remove the space and the mt_ \$\endgroup\$
    – TimWolla
    Commented Mar 6, 2014 at 11:20
  • 4
    \$\begingroup\$ A shorter version: <?=str_repeat(":)",rand()%256); \$\endgroup\$
    – Florent
    Commented Mar 6, 2014 at 13:01
  • \$\begingroup\$ Instead of upvote my answer please upvote @Florent \$\endgroup\$ Commented Mar 6, 2014 at 14:03
5
\$\begingroup\$

Python 2.7 - 45 bytes

print':)'*__import__('random').randint(0,255)

(Originally this printed :)\n, the newline was removed upon OP's clarification)

The (slightly) more idiomatic way to do this is

from random import*
print ':)'*randint(0,255)

which is... also 45 bytes, but I figured "why not make it a one-liner?"

Three sample outputs:

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

 

:):):):):):):):):):):):):):):)

 

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
\$\endgroup\$
8
  • \$\begingroup\$ I am okay with no newline and white spaces \$\endgroup\$ Commented Mar 6, 2014 at 2:51
  • 1
    \$\begingroup\$ Actually, I was wrong to begin with. print':)'*(whatever) includes newlines. I didn't test it until right now. I learned something new today! \$\endgroup\$ Commented Mar 6, 2014 at 3:00
  • 3
    \$\begingroup\$ I think you can save up to 7 characters by using os.urandom instead. \$\endgroup\$
    – grc
    Commented Mar 6, 2014 at 4:51
  • 1
    \$\begingroup\$ What grc means is: import os;print':)'*ord(os.urandom(1)) \$\endgroup\$
    – Justin
    Commented Mar 6, 2014 at 7:04
  • 1
    \$\begingroup\$ @alexander shorter than that would be: import os;':)'*ord(os.urandom(1)) at 33 chars \$\endgroup\$
    – Justin
    Commented Mar 6, 2014 at 21:04
5
\$\begingroup\$

Mathematica 35

Row@Table[":)", {RandomInteger@255}]

Examples

outputs

\$\endgroup\$
5
\$\begingroup\$

Pure Bash, 41

printf -va %$[RANDOM>>7]s;echo ${a// /:)}

Sample outputs:

$ printf -va %$[RANDOM>>7]s;echo ${a// /:)}
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
$ printf -va %$[RANDOM>>7]s;echo ${a// /:)}
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
$ printf -va %$[RANDOM>>7]s;echo ${a// /:)}
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
$ 
\$\endgroup\$
5
\$\begingroup\$

APL: 12 characters

(?255)⍴⊂':)'

In this code, ?255 generates a random number between 1 and 255. The function repeats the argument to the right this number of times. The expression ⊂':)' encpsulates the string :) into a single object, since otherwise the expression 3⍴':)' would yield :): as opposed to :) :) :).

Edit: The behaviour of this function depends on the value of ⎕IO. If it's set to 0 (the default in many versions of APL) then ?255 will return a value in the range 0-254. If it is 1, the return value with be in the range 1-255.

\$\endgroup\$
4
  • \$\begingroup\$ range is 0-255 not 1-255 \$\endgroup\$ Commented Mar 6, 2014 at 5:27
  • \$\begingroup\$ Fair enough. If you set ⎕IO to 0 (which is the default in many versions of APL), that will be the effect. \$\endgroup\$ Commented Mar 6, 2014 at 5:28
  • \$\begingroup\$ well, you can have numbers from 1-256 then subtract 1 from it \$\endgroup\$ Commented Mar 6, 2014 at 5:29
  • 1
    \$\begingroup\$ Wrong answer on two counts: It prints lots of forbidden white-space, and the number should be 256. \$\endgroup\$
    – Adám
    Commented Oct 15, 2015 at 21:29
5
\$\begingroup\$

Python - 21

The randomness is stretching the rules a fair bit, but each run will probably be different.

print':)'*(id(1)%255)

And some example runs:

> python -c "print ':)'*(id(1)%255)"
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
> python -c "print ':)'*(id(1)%255)"
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
> python -c "print ':)'*(id(1)%255)"
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
\$\endgroup\$
1
  • \$\begingroup\$ print id(1)%255*":)" would be one byte shorter. \$\endgroup\$ Commented Oct 2, 2017 at 12:06
4
\$\begingroup\$

Groovy (37 29 characters, @Michaël Demey's suggestion)

print":)"*(Math.random()*255)

The initial solution was:

print":)"*(new Random().nextInt(256))
\$\endgroup\$
1
  • 2
    \$\begingroup\$ I brought it to 29 characters: print":)"*(Math.random()*255) \$\endgroup\$ Commented Mar 7, 2014 at 11:59
4
\$\begingroup\$

R, 34

cat(rep(":)",runif(1)*256),sep="")
\$\endgroup\$
7
  • \$\begingroup\$ You can probably leave off cat and beat the answer I just posted. ;-) \$\endgroup\$
    – Gaffi
    Commented Mar 6, 2014 at 12:12
  • \$\begingroup\$ @Gaffi The output should contain :) only. \$\endgroup\$ Commented Mar 6, 2014 at 12:13
  • \$\begingroup\$ Well, I guess that's up to interpretation! Adding a comment to the original question. \$\endgroup\$
    – Gaffi
    Commented Mar 6, 2014 at 12:15
  • 1
    \$\begingroup\$ @Gaffi Let me cite the OP: No white-space. \$\endgroup\$ Commented Mar 6, 2014 at 12:25
  • 1
    \$\begingroup\$ It should be cat(rep(":)",runif(1)*256),sep=""), otherwise you will never get 255 smilies. See length(rep(":)",254.9999)). \$\endgroup\$
    – djhurio
    Commented Mar 8, 2014 at 12:16
4
\$\begingroup\$

Pure ZSH - 32

repeat $[RANDOM%256] echo ":)\c"

Output 1:

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

Output 2:

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
\$\endgroup\$
3
\$\begingroup\$

(PHP/Python/Perl/Javascript/others)-Polyglot - 0 bytes



Output 1:

Output 2:

Output 3:

You never specified a distribution for the random variable denoting the number of times, so this outputs from the degenerate one with the entire mass on zero. This is fine under the definition of range where it is equal to the codomain of a function, rather than its image.

Alright, it's a huge cheat, but since the id(9) code was successful despite not being guaranteed uniform, I figured this isn't entirely unclever.

Also compiles in C under some compilers. See discussion here.

\$\endgroup\$
22
  • 2
    \$\begingroup\$ Well, you can lead a horse to water, but you can't make him learn measure theory. \$\endgroup\$
    – Yonatan N
    Commented Mar 6, 2014 at 5:08
  • 4
    \$\begingroup\$ I'd argue that there's a difference between finding a loophole in the rules and intentionally syntactically misparsing them, but it's not my job to not submit troll answers when the question is practically begging for them. Downvotes, ahoy! \$\endgroup\$
    – Yonatan N
    Commented Mar 6, 2014 at 6:20
  • 3
    \$\begingroup\$ +1 This is a perfectly reasonable interpretation of the question. The OP didn't specify the distribution. The degenerate distribution is a perfectly valid choice, no more incorrect than a uniform distribution. It may be a tired gag, but I am tied of "underspecified challenges". Make a challenge that is worth solving and nobody will post joke answers. \$\endgroup\$ Commented Mar 6, 2014 at 14:18
  • 3
    \$\begingroup\$ @JonathanVanMatre This isn't interpreting the challenge too literally. It is not our fault if the OP doesn't know what random means. \$\endgroup\$ Commented Mar 6, 2014 at 14:23
  • 3
    \$\begingroup\$ @JonathanVanMatre I have posted 3 challenges since joining this site. At the very least that is three more than you have. ;) And no I think you are wrong: I think it is clear from the comments that the OP in fact doesn't know what he wants. The link he provided implies that he wants a uniform distribution, but he hasn't complained, for example, that the Befunge answer doesn't use a uniform distribution. I stand by my statement that good questions don't attract troll answers. \$\endgroup\$ Commented Mar 6, 2014 at 19:00
3
\$\begingroup\$

Javascript - 51 characters

Thanks to @grc and @DocMax for shaving 3 characters.

for(i=0|Math.random(t='')*256;i--;)t+=':)';alert(t)

4 Outputs:

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
\$\endgroup\$
5
  • 1
    \$\begingroup\$ You don't need to convert i to an int immediately. Using a condition like ~~i-- or --i>0 should save 2 chars. You can also save a char with Math.random(t=''). \$\endgroup\$
    – grc
    Commented Mar 6, 2014 at 4:39
  • 1
    \$\begingroup\$ Intead of ~~() save 2 with 0|Math.... And another if you move t='' inside of the random() call \$\endgroup\$
    – DocMax
    Commented Mar 6, 2014 at 4:45
  • \$\begingroup\$ Just as a curiosity, this is the Harmony version, currently working only in Firefox: alert(':)'.repeat(Math.random()*256)). \$\endgroup\$
    – manatwork
    Commented Mar 6, 2014 at 7:49
  • \$\begingroup\$ @manatwork Didn't knew that the repeat method exists (experimental for now, but exists). Anyway, I think that you may post an entirely new answer by yourself for this. I will upvote it. \$\endgroup\$ Commented Mar 6, 2014 at 8:09
  • \$\begingroup\$ @Victor It’s new in ES6. Here’s a fully spec-compliant polyfill for it: mths.be/repeat \$\endgroup\$ Commented Mar 6, 2014 at 14:54
3
\$\begingroup\$

Ruby (25 Chars)

rand(256).times{$><<":)"}

Wanted to try my hands at ruby. What better way than a codegolf ;)

\$\endgroup\$
3
  • \$\begingroup\$ “Random times but ranged between 0-255” \$\endgroup\$
    – manatwork
    Commented Mar 6, 2014 at 9:00
  • \$\begingroup\$ But you forgot to update the character count too. :) It's 28 here, you seem to counted the final newline too, which is unnecessary. And take a look at Tips for golfing in Ruby, especially to sepp2k's answer's point 3. \$\endgroup\$
    – manatwork
    Commented Mar 6, 2014 at 9:16
  • \$\begingroup\$ Why not just $><<":)"*rand(256)? \$\endgroup\$
    – Doorknob
    Commented Mar 6, 2014 at 23:50
3
\$\begingroup\$

q - 17 bytes

(2*1?255)[0]#":)"

or a second way:

(2*rand 255)#":)"
\$\endgroup\$
3
\$\begingroup\$

R 37

To mirror @Sven Hohenstein's more correct solution, added cat(<>,sep=""):

cat(rep(':)',sum(sample(0:1,255,T))),sep="")

Including @Plannapus' suggestion (I'm an R user, not an R expert!):

cat(rep(':)',sample(0:255,1)),sep="")

Tested on R-Fiddle.

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
\$\endgroup\$
2
  • \$\begingroup\$ why not sample(0:255,1) instead of sum(sample(0:1,255,T)))? \$\endgroup\$
    – plannapus
    Commented Mar 6, 2014 at 13:05
  • \$\begingroup\$ @plannapus Good point! Correcting. \$\endgroup\$
    – Gaffi
    Commented Mar 6, 2014 at 13:10
3
\$\begingroup\$

Julia, 23

print(":)"^rand(0:255))

Usage:

julia> print(":)"^rand(0:255))
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

julia> print(":)"^rand(0:255))
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

julia> print(":)"^rand(0:255))
:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
\$\endgroup\$
3
\$\begingroup\$

Haskell (50)

fmap(\a->concat$replicate a":)")$randomRIO(0,255)
":):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)"

fmap(\a->concat$replicate a":)")$randomRIO(0,255)
":):):):):):):):):):):):):):):):):):):):):):):):):):):):)"

fmap(\a->concat$replicate a":)")$randomRIO(0,255)
":):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)"
\$\endgroup\$
3
  • \$\begingroup\$ That's an expression, not a program. \$\endgroup\$
    – Rhymoid
    Commented Mar 8, 2014 at 23:15
  • \$\begingroup\$ Your line is actually 49 characters, not 50. And I can shave it down to 44 for you: concat.flip replicate":)"<$>randomRIO(0,255) =D \$\endgroup\$
    – KChaloux
    Commented Mar 10, 2014 at 12:57
  • \$\begingroup\$ KChaloux, that's awesome! I understand the concat.flip but I did not know <$>, thanks! And Rhymoid, you are right, to make it into a compilable program we'd have to add main= to it's beginning, which costs an extra 5. \$\endgroup\$
    – linse
    Commented Mar 10, 2014 at 21:59
3
\$\begingroup\$

C++ 104 84 107

#include<iostream>
int main(){int *a=new int;a+=2;*a%=256;std::cout<<*a;while(*a-->0)std::cout<<":)";}  

:( I think I'll never beat other languages in golfing !
Anyway...OUTPUT

#1

:):):):):):):):):):):):):):):):):):):):):):)  

#2

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

#3

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)
\$\endgroup\$
3
  • \$\begingroup\$ fake output? on my machine it always prints the same number of smileys \$\endgroup\$
    – izabera
    Commented Mar 6, 2014 at 9:07
  • \$\begingroup\$ btw you could save a few char with while(*a--%256) \$\endgroup\$
    – izabera
    Commented Mar 6, 2014 at 9:07
  • \$\begingroup\$ @izabera try it again ! \$\endgroup\$ Commented Mar 6, 2014 at 17:42
3
\$\begingroup\$

Java - 59 bytes

int n=255;while(n--*Math.random()>0)System.out.print(":)");

Note that you asked for "shortest code", not shortest complete program. On each run of the loop, there is a 1/7036874417766 probability that the loop exits (see How many double numbers are there between 0.0 and 1.0?). To make this a more even distribution, simply do

int n=0;n+=Math.random()*256;while(n-->0)System.out.println(":)");

Sample run: http://ideone.com/ZLppjR

Output #1:

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

Output #2:

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

Output #3:

:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):)

yes the outputs are identical. I'm not going to run the program until I get an output that is not identical; it would take too long.


Complete program (104 chars):

class c{public static void main(String[]a){int n=255;while(n--*Math.random()>0)System.out.print(":)");}}

Original method (92 chars):

String s="";for(int i=255;Math.random()*i-->0;)s+="x";System.out.print(s.replace("x",":)"));
\$\endgroup\$

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