630
\$\begingroup\$

Note to challenge writers as per meta consensus: This question was well-received when it was posted, but challenges like this, asking answerers to Do X without using Y are likely to be poorly received. Try using the sandbox to get feedback on if you want to post a similar challenge.


It's 2017 2018 2019 2020 2021 2022 2023 2024 already, folks, go home.

Woo, 10 years of this challenge!

So, now that it's 2014, it's time for a code question involving the number 2014.

Your task is to make a program that prints the number 2014, without using any of the characters 0123456789 in your code, and independently of any external variables such as the date or time or a random seed.

The shortest code (counting in bytes) to do so in any language in which numbers are valid tokens wins.


Leaderboard:

var QUESTION_ID=17005,OVERRIDE_USER=7110;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.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(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;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="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <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><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><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>

\$\endgroup\$
16
  • 26
    \$\begingroup\$ Even though numbers are ignored in brainfuck, I thought I'd post one anyway. 32 Chars: ++++++[>++++++++<-]>++.--.+.+++. \$\endgroup\$ Commented Apr 1, 2015 at 21:37
  • 8
    \$\begingroup\$ Brainfuck isn't a valid language for this challenge. \$\endgroup\$
    – Joe Z.
    Commented Apr 1, 2015 at 22:49
  • 15
    \$\begingroup\$ I know. That's why I posted it as a comment \$\endgroup\$ Commented Apr 1, 2015 at 22:51
  • 15
    \$\begingroup\$ I wonder if this question gets a small spike in popularity around New Year's. \$\endgroup\$
    – Joe Z.
    Commented Dec 26, 2015 at 23:28
  • 6
    \$\begingroup\$ Waiting for "Come on folks, don't you realize it's 2016?" :) \$\endgroup\$
    – padawan
    Commented Jan 4, 2016 at 23:35

341 Answers 341

1
6 7
8
9 10
12
1
\$\begingroup\$

Braingolf, 3 bytes

Try it online!

The ordinal of ߞ is 2014, # pushes the ordinal of the next character to the stack, and Braingolf implicitly outputs the last item on the stack.

\$\endgroup\$
2
  • \$\begingroup\$ Braingolf is your language, right? \$\endgroup\$
    – MD XF
    Commented Jun 6, 2017 at 19:11
  • \$\begingroup\$ @MDXF Indeed it is \$\endgroup\$
    – Mayube
    Commented Jun 6, 2017 at 19:46
1
\$\begingroup\$

JavaScript, 81 76 bytes

l="length";alert(("hi"[l]<<"javascript"[l])-"wow"[l]*"hello death"[l]-true);

\$\endgroup\$
1
\$\begingroup\$

Lua, 27 bytes

Should work in Lua 5.1, Lua 5.2, and Lua 5.3.

x="ɅɅ"print(x:byte()..#x)

Try it online!

This is mean to be saved with the UTF-8 encoding. The first byte of the string is 201, and its length is four. Lua is mostly encoding agnostic, so as long as these things are true in whatever encoding, it works.

With only ASCII, 28 bytes:

x=""io.write(x:byte(y,#x))

Note: the string must contain ASCII 20 and ASCII 14 (which are not printable characters). y here is an undefined variable, so it is nil, which byte defaults to 1 in the first parameter.

\$\endgroup\$
1
\$\begingroup\$

Charcoal, 5 bytes

I²⁰¹⁴

Try it online!

Language was created after January 1, 2014, but as Charcoal uses the superindices ⁰¹²³⁴⁵⁶⁷⁸⁹ to represent the numbers, the answer is valid. :-)

\$\endgroup\$
1
\$\begingroup\$

Lua, 29 bytes

b=("").byte print(b"?"..b"?")

NB: the two question marks are substitutes for characters that are not appearing properly in the post. See the tio link below for proof.

Try it online!

As an interesting point, although this is not the case with Lua, a language with an implementation of pi to at least 3137 digits would be able to print pi and find '2014' at digits 3133-3136!

\$\endgroup\$
1
\$\begingroup\$

√ å ı ¥ ® Ï Ø ¿, 8 bytes

TTX''_o

Try it online!

The rest of the code in the TIO link is the Python interpreter (because I can't be bothered to ask Dennis to add √ å ı ¥ ® Ï Ø ¿

\$\endgroup\$
1
\$\begingroup\$

Python, 41 bytes

print(int(ord("j")/len("aa") * ord("&")))

Try it online!

\$\endgroup\$
1
  • 2
    \$\begingroup\$ Welcome to the site! The aim of this question (and code golf in general) is to get the shortest functional code. You can remove the spaces around the * to start with. \$\endgroup\$ Commented Jan 7, 2018 at 20:51
1
\$\begingroup\$

PHP, 25 bytes

<?=IntlChar::ord("ߞ");?>

\$\endgroup\$
2
  • \$\begingroup\$ This requires the IntlChar library; and that´s a lot younger than the question. Nice idea, though. \$\endgroup\$
    – Titus
    Commented Mar 10, 2018 at 1:31
  • \$\begingroup\$ Thanks. Can be solved without using IntlChar library with preg_replace('#\D#','',json_encode('—')). Pick your number from a unicode table :-) \$\endgroup\$ Commented Mar 10, 2018 at 12:08
1
\$\begingroup\$

Pyt, 9 bytes

π!⬡⁻⁻⁻△⁻⁻

Try it online!

\$\endgroup\$
1
\$\begingroup\$

LibreLogo (Paper Format: Tabloid), 55 bytes

The document must be in Tabloid Format for this method to work.

Code:

print ''.join(set(str(pagesize.pop()))).replace('.','')

Result:

enter image description here

Explanation:

pagesize                                           ; Returns [792.0, 1224.0] (Tabloid Format)
pagesize.pop()                                     ; Returns 1224.0
str(pagesize.pop())                                ; Returns "1224.0"
set(str(pagesize.pop()))                           ; Returns {u'2', u'0', u'1', u'.', u'4'}
''.join(set(str(pagesize.pop())))                  ; Returns "201.4"
''.join(set(str(pagesize.pop()))).replace('.','')  ; Returns "2014"
\$\endgroup\$
1
\$\begingroup\$

Canvas, 7 bytes

AA+q⁷┤t

Try it online!

AA       | Push 10 to stack twice
   +      | Add top two items in stack
    q     | Print top item in stack on current line
      ⁷    | Push 16 to stack
       ┤   | Decrement top item in stack twice
        t | Print top item in stack on current line, disable implicit output
\$\endgroup\$
1
\$\begingroup\$

C, 24

(Using GCC-4.9.2)

f(){printf("%i",'Þ');}         (Properly formatted version on Pastebin)


IMPORTANT NOTE: There is a U+0007 in-front of the Þ character but stackexchange removes it for some reason. Make sure you edit it back in before compiling my code. Here is a pastebin of the code that does include the unicode characters needed.

\$\endgroup\$
1
\$\begingroup\$

Perl 5 + Perligata, 25 bytes

Byte count uses the new rule that command-line switches for choosing appropriate modules don't count.

perl -MLingua::Romana::Perligata -e'MMXIVimum egresso scribe.'

Tested in Strawberry 5.26.0 with Perligata 0.601 (with " instead of ' in the above code).

\$\endgroup\$
1
\$\begingroup\$

T-SQL, 32 bytes

Based on the idea of Steve Matthews, but avoiding unprintable characters:

SELECT -~(ASCII('=')*ASCII('!'))

Alternative (but rather obvious) solution, 23 bytes:

PRINT UNICODE(N'ߞ')
\$\endgroup\$
1
\$\begingroup\$

jshell, 5 bytes

How to make Java an useful code golf language? Simple, just remove the need to declare classes, methods, make things automatically print and so on.

+'ߞ'
\$\endgroup\$
1
\$\begingroup\$

Stax, 4 bytes

ü◘♥┐

Run and debug (ha) it online!

Obligatory Stax answer. This unpacks to 2014. Implicit print.

I haven't yet found a shorter version.

\$\endgroup\$
1
\$\begingroup\$

C# (.NET Core), 42 bytes

System.Console.Write((int)'ϯ'+(int)'ϯ');

// Btw. it's now 2018 ^^ so
System.Console.Write((int)'ϱ' + (int)'ϱ');

Try it online!

\$\endgroup\$
1
\$\begingroup\$

SMBF, 15 bytes

\x00 is a literal NUL byte. This program adds 5 to each of /,+- and prints.

<[+++++.<]\x00/,+-

Only my Python interpreter can accept non-printable ASCII. Change the data line to this, and substitute the code you want to run with the non-printable values escaped (on line 169):

data = bytearray(b'the above code goes here')
\$\endgroup\$
1
\$\begingroup\$

CJam, 2 bytes

KE

K is predefined as 20, E is predefined as 14. The stack gets automatically printed after the program.

Try it online!

\$\endgroup\$
1
\$\begingroup\$

C#, 28 bytes

You don't need to cast to an int as Hille does, so it becomes

Console.WriteLine('ϱ'+'ϱ')

\$\endgroup\$
1
\$\begingroup\$

Symbolic Python, 31 bytes

_=-~-~-~(_==_)
_=`""`[_::_]

Try it online!

Symbolic Python bans numbers anyway.

Explanation:

_=-~-~-~(_==_)   # Set _ to 4
_=               # Set _ to
  `""`         # From the representation of some unprintables 
                    # Which is '\x12\x10\x11\x14'
           [_::_]   # From the 4th character, take every 4th character
                    # Output the contents of _ implicitly

A more interesting solution at 34 bytes:

_=-~(_==_)
_=`_`+`_-_`+`_/_`+`_*_`

Try it online!

_=-~(_==_)               # Set _ to 2
_=`_`+`_-_`+`_/_`+`_*_`
# '2'+'2-2'+'2/2'+'2*2' = '2'+'0'+'1'+'4' = '2014'
\$\endgroup\$
1
  • \$\begingroup\$ Crazy that someone else is actually using this stupid language I made, haha \$\endgroup\$
    – FlipTack
    Commented Dec 17, 2018 at 21:01
1
\$\begingroup\$

Edited: bash 81 chars!

Just for fun:

wc -c < <(echo {,}{,,}{,}{,,,}{,}{,,,}film dbugjkqstvxz{,}{,,} 'Happy New Year!')

there is no numbers, all letters are used and this print exactly:

2014

( This method could reasonably be used until 2016: by just adding one or two exclamation point after the wish:

   wc -c < <(echo {,}{,,}{,}{,,,}{,}{,,,}film dbugjkqstvxz{,}{,,} 'Happy New Year!!')
   2015

;-)

bash 27 chars

.;v=$?;echo $v$?${#v}$[v+v]

This will output:

bash: .: filename argument required
.: usage: . filename [arguments]
2014

Ok, this will generate some unwanted output, but 2014 is printed and is a valid token!

The two following sample are error free (a little longer but near golfed)

v=$(echo {V..v});echo $[${#v}#vu]
2014

or

printf -vv "%d" $?xfbc;echo $[v>>${#?}]
2014

or even:

echo $[$[$[${#?}$?-${#?}]$?>>${#?}]#Iy]
2014

Inspired by comment from GammaFunction:

echo $[$[a-a]xfbd>>${#?}]
\$\endgroup\$
3
  • \$\begingroup\$ You don't need to set a var in the 0xfbc solution: echo $[$?xfbc>>++j] works just fine (19 bytes). \$\endgroup\$ Commented Mar 28, 2019 at 7:15
  • \$\begingroup\$ Nice! Late to post but you could! Unfortunely you have to ensure $? to be 0 and this could not be reused... But impressive! \$\endgroup\$ Commented Mar 28, 2019 at 15:54
  • 1
    \$\begingroup\$ @GammaFunction Post edited ;-) \$\endgroup\$ Commented Mar 28, 2019 at 16:46
1
\$\begingroup\$

@, 9 chars

-Σ*{~~}82

Explanation (syntactically invalid)

-       2  Subtract the result by 2(2014)
 Σ         Summation of all ASCII codes in the string(2016)
  *    8   Duplicate the string 8 times
   {~~}    Define the string "~~"

There is no Try It Online for @.

If the current year is 2016, it would be perfect(7 chars):

Σ*{~~}8
\$\endgroup\$
1
\$\begingroup\$

Base64, 9 Bytes

MjAxNA==

(You can decode it with: echo MjAxNA== |base64 -d)

\$\endgroup\$
1
\$\begingroup\$

Javascript, 45 characters

_=> new Date().getFullYear()-new Date().getDate()

Very Temporary!!

Another Day, another very Temporary answer :-)

f=new Date().getFullYear()-new Date().getDay()
\$\endgroup\$
2
  • \$\begingroup\$ Welcome to Code Golf! Submissions should be either a full program or a function, so I would recommend prepending _=> to your solution to turn it into an anonymous function. \$\endgroup\$
    – Stephen
    Commented Sep 5, 2019 at 20:00
  • \$\begingroup\$ You could possibly remove the space between => and new to save a byte \$\endgroup\$
    – Benji
    Commented Mar 19, 2020 at 15:26
1
\$\begingroup\$

Triangular, 12 bytes

tE**%Cdd.`>/

Try it online!

Y'know, I was just about to post a 14-byte solution; luckily I went back to double-check and had a hunch.

Ungolfed:

    t 
   E * 
  * % C 
 d d . ` 
> /

-- Actual Execution Order --

t*C`          The first multiplication does nothing.
              12 is pushed twice, then direction changes and both are multiplied to get 144.

E*d>/d%       Push 14, then multiply 14*144=2016. Decrement twice and print.


The 14-byte I was going to post:

t*CE.`*...>dd%
\$\endgroup\$
1
\$\begingroup\$

Wren, 27 bytes

Just like most other answers, convert to code points and print. However this uses control characters in the source code.

System.printAll("".bytes)

Try it online!

Explanation

                ""        // An unprintable chain containing 0x14 (20 in decimal) and 0x0e (14 in decimal)
                  .bytes  // Convert them to a list of their decimal codes [20, 14]
System.printAll(        ) // Print them all without a separator (2014)
\$\endgroup\$
1
\$\begingroup\$

><>, 7 bytes

aa+nen;

You can try it on The Online ><> interpreter.

Explanation

a        # push 10
 a       # push 10
  +      # push sum of top two values (10 + 10 = 20)
   n     # output top value as number
    e    # push 14
     n   # output top value as number
      ;  # halt program

This doesn't print the following:

20
14

because n outputs the top value as a number without a newline.

Alternate Solution (9 bytes)

This one actually puts 2014 on the stack as a single number and outputs it.

cbde**+n;

I basically just tried random values for this one :P

\$\endgroup\$
1
\$\begingroup\$

ABC, 11 bytes

aacncacaaac

Explanation

a increments the accumulator, c outputs it and n sets it to 0.

\$\endgroup\$
1
\$\begingroup\$

W j, 4 bytes

ë‘"C

Explanation

ë‘"  % Push a list
   C % Convert to list of ord codes [20,14]

flag:j % Join without a separator
```
\$\endgroup\$
1
6 7
8
9 10
12

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