70
\$\begingroup\$

Your task is to display the letter "A" alone, without anything else, except any form of trailing newlines if you cannot avoid them, doing so in a program and/or snippet. Code that returns (instead of printing) is allowed.

Both the lowercase and uppercase versions of the letter "A" are acceptable (that is, unicode U+0061 or unicode U+0041. Other character encodings that aren't Unicode are allowed, but either way, the resulting output of your code must be the latin letter "A", and not any lookalikes or homoglyphs)

You must not use any of the below characters in your code, regardless of the character encoding that you pick:

  • "A", whether uppercase or lowercase.

  • "U", whether lowercase or uppercase.

  • X, whether uppercase or lowercase.

  • +

  • &

  • #

  • 0

  • 1

  • 4

  • 5

  • 6

  • 7

  • 9

Cheating, loopholes, etc, are not allowed.

Since this is , the shortest solution, in bytes, that follows all the rules, is the winner.


Validity Checker

This Stack Snippet checks to make sure your code doesn't use the restricted characters. It might not work properly for some character encodings.

var t = prompt("Input your code.");

if (/[AaUuXx+&#0145679]/.test(t)) {
  alert("Contains a disallowed character!");
} else {
  alert("No disallowed characters");
}

This Stack Snippet that makes sure you don't have a disallowed character is also available on JSFiddle.

Leaderboard

var QUESTION_ID=90349,OVERRIDE_USER=58717;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\$
  • 7
    \$\begingroup\$ @ColdGolf You seem to be saying "yes" to functions, but functions don't display, they usually return. \$\endgroup\$ – xnor Aug 19 '16 at 23:06
  • 2
    \$\begingroup\$ Is ending up with a variable that contains just a also good enough ? \$\endgroup\$ – Ton Hospel Aug 19 '16 at 23:17
  • 1
    \$\begingroup\$ That's not what I meant. The supposed code doing a variable assignment would not contain any of the forbidden characters. I'm just trying to understand what is covered by "display by means other than printing". If "return from a function" is OK, what about "assign to a variable" ? \$\endgroup\$ – Ton Hospel Aug 20 '16 at 0:05
  • 1
    \$\begingroup\$ Why those particular characters? \$\endgroup\$ – user253751 Aug 22 '16 at 1:32
  • 7
    \$\begingroup\$ @immibis A for obvious reasons. U for Unicode escape strings (\u0041 is A), X for hex escape strings (\x41), + for Unicode ordinals (U+0041), & for HTML entities, # for I actually don't know, 65 is the decimal ordinal of A, 41 is the hex ordinal of A, 97 is the decimal ordinal of a, and 0 for a few of the previous reasons. \$\endgroup\$ – Mego Aug 22 '16 at 6:26

170 Answers 170

2
\$\begingroup\$

Braingolf, 7 bytes

"C"2-@;

Try it online!

Screw you @totallyhuman :(

Explanation

It subtracts 2 from C and prints.

Braingolf, 12 bytes

Keeping this one because IMO it's the better answer, and took way more effort to do.

/..*3*<2*-@;

Try it online!

Man, this was hard.

Explanation

/..*3*<2*-@;
/             Niladic division, push 5 [5]
 ..           Duplicate twice          [5,5,5]
   *          Multiply last 2 items    [5,25]
    3         Push 3                   [5,25,3]
     *        Multiply by 3            [5,75]
      <       Left-shift stack         [75,5]
       2      Push 2                   [75,5,2]
        *     Multiply last 2 items    [75,10]
         -    Subtract last 2 items    [65]
          @   Print as character, 65 is the ASCII value of A
           ;  Suppress implicit output

Braingolf, 9 bytes

And here's a shorter one that still uses the "calculate 65" method

/82*3-*@;

Try it online!

Explanation

Uses niladic division for 5, calculates 13 from (8 * 2) - 3, then multiplies 5 and 13 to make 65

Braingolf, 11 bytes

And finally here's one that prints a lowercase a.

*v/2*c/3-@;

Try it online!

Explanation

*v/2*c/3-@;
*            Niladic multiply, push 1000 [1000]
 v           Switch to stack2            []
  /          Niladic division, push 5    [5]
   2*        Double                      [10]
     c       Collapse stack into stack1  [1000,10]
      /      Divide last 2 items         [100]
       3-    Subtract 3                  [97]
         @;  Print as ASCII and suppress implicit output
             97 is the ASCII value of a
\$\endgroup\$
  • \$\begingroup\$ :P - - - - - - - \$\endgroup\$ – totallyhuman Jul 18 '17 at 16:19
2
\$\begingroup\$

Woefully, 335 bytes

|||||||| |
||||||| |
|||||| |
||||| |
|||| |
||| |
|| |
| | --push5; A[5], B[]
| |
| |
| |
| |
| | -- dupeA2B; A[5], B[5]
|| |
||| |
|||| |
||||| |
|||||| |
||||||| | -- swap dec/ascii (set to ascii)
|||||| |
||||| |
|||| |
||| |
|| | --push3; A[5,3], B[5]
|| |
|| | --popA2B; A[5], B[5, 3]
||| |
||| |
||| |
||| |
||| | --multiply; A[15], B[5]
|||| |
|||| |
||||| |
|||| |
||| |
|| |
| | --push2; A[15, 2], B[5]
| |
| | --popA2B; A[15], B[5, 2]
|| |
|| |
|| |
|| | --sub; A[13], b[5]
| |
| |
| |
| |
| | --multiply; a[65], b[]
|| |
||| |
|||| |
||||| |
|||||| | --print; OUTPUT; "A"
|||||| | --no op ends program

Try it online!

I've added the explanation of each step at the end of the step.

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

Pushy, 2 bytes

ZQ

Try it online!

Z          \ Push 0
 Q         \ Index into 0-indexed uppercase alphabet, print result
\$\endgroup\$
2
\$\begingroup\$

x86 MS-DOS, 10 bytes

b4 02 mov ah,0x2
b2 40 mov dl,0x40
fe c2 inc dl
cd 21 int 0x21
cd 20 int 0x20

Try yourself

echo "B402B240FEC2CD21CD20" | xxd -r -p > TEST.COM
\$\endgroup\$
2
\$\begingroup\$

JavaScript (ES8), 12 bytes

`e${-{}}`[2]

This evaluates to:

"eNaN"[2]

which is "a".

\$\endgroup\$
  • 3
    \$\begingroup\$ Does this output or return from a function? If not, this is invalid. However, you can make this into a function by prepending _=> \$\endgroup\$ – caird coinheringaahing Nov 12 '17 at 21:26
  • 1
    \$\begingroup\$ I am recommending deletion, as this answer appears to be invalid and there seems to be no effort put in fixing it. \$\endgroup\$ – Jonathan Frech Mar 11 at 8:00
2
\$\begingroup\$

JavaScript, 21

Capital A because there seems to be no other solution to find a capital A

_=>`${[].keys()}`[8]

`${[].keys}` => "[object Array Iterator]" 8th index is A

_=>`${keys}`[38]

Also works in browser for similar reasons.

Edited to add function

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

Powershell, 11 bytes

" $(!2)"[2]

Every non-0 integer evaluates to True when casted to [bool].
!2 implicitly converts 2 to [bool] and negates it, so it becomes False.
$() blocks inside a string allow expressions to be evaluated before being converted to string.
When accessing a string with an index the string is treated as a char-array.
Since we're not allowed to use 1 i had to use a space to shift the a in False one to the right. Another option would be a negative index: "$(!2)"[-4].

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

Java 8, 9 bytes

()->'C'-2

-31 (!) bytes thanks to ASCII-only!
Try it online!

How?
I'm not sure. Best guess is the result of the subtraction is implicitly cast to char because of the return type of the function.

\$\endgroup\$
  • \$\begingroup\$ 34 \$\endgroup\$ – ASCII-only Mar 11 at 7:03
  • \$\begingroup\$ 9 \$\endgroup\$ – ASCII-only Mar 11 at 7:11
  • \$\begingroup\$ @ASCII-only I thought that returned an integer. I guess golfing at night is not the best idea ;) Thanks. \$\endgroup\$ – Benjamin Urquhart Mar 11 at 7:49
  • \$\begingroup\$ 9 bytes excluding the semicolon btw \$\endgroup\$ – ASCII-only Mar 11 at 8:19
  • \$\begingroup\$ @ASCII-only fixed, now time for sleep. \$\endgroup\$ – Benjamin Urquhart Mar 11 at 8:20
1
\$\begingroup\$

Befunge 93, 7 bytes

"C"2-,@

Pretty simple.

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

Jellyfish, 5 bytes

P;>'@

Try it online!

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

Befunge-98, 6 bytes

'Lb-,q

Very basic: 'Lb- pushes (76-11 aka 65), , prints, q quits because using @ is too boring.

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

ECMAScript 6, 41 59 55 bytes

Golfed

This is the golfed version, which doesn't support the use strict pragma. If you want to allow this to be compatible with it, simply replace s=(2-2>(3-2) with var s=(2-2)>(3-2).

Version 3 of this replaced the old substring (that uses the disallowed character u) with slice, a byte-efficient version that fits these rules.

You can try this on JSFiddle or use the below Stack Snippet.

s=(2-2)>(3-2);console.log(s.toString().slice((3-2),2));

Ungolfed

This version of golfed code (version 3) supports the use strict pragma and is 79 bytes.

You can try this on JSFiddle or use the below Stack Snippet.

"use strict";
var s = (2-2) > (3-2);
console.log(s.toString().slice((3-2), 2));

Technically, this doesn't follow the rules as it uses u and a (in use and var respectively), but it was needed to support use strict.

\$\endgroup\$
  • \$\begingroup\$ console.log((3<2).toString().slice(3-2,2)) works too. \$\endgroup\$ – BartekChom Aug 20 '16 at 18:30
  • \$\begingroup\$ @BartekChom, thanks. Will update main post. \$\endgroup\$ – haykam Aug 20 '16 at 19:51
  • \$\begingroup\$ Why not console.log(String(!2)[~-2]) \$\endgroup\$ – Cyoce Aug 21 '16 at 6:59
1
\$\begingroup\$

Ruby, 20 Bytes

print ("c".ord-2).chr

Subtracts 2 from the unicode-code from "c".

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

C# Interactive (REPL), 21 bytes

(3<2).ToString()[3-2]

I really wonder how much smaller it can become in C# in a REPL environment.

\$\endgroup\$
  • \$\begingroup\$ I don't think this is valid, since it's just a snippet. It has to be wrapped in a function, which would almost definitely need to have an A or a U in it somewhere. \$\endgroup\$ – DJMcMayhem Aug 21 '16 at 4:15
  • \$\begingroup\$ @DJMcMayhem I can't seem to see anything specifying that it must be wrapped in a function. I also noticed a few answers aren't even necessarily printing the result explicitly either. It's also worth mentioning that by using something like C# Interactive (built into Visual Studio 2015, it's possible to just add the snippet I have above and it will output the correct value ('a'). Meaning if PowerShell can get away without a explicit print equivalent, C# could too? \$\endgroup\$ – AquaGeneral Aug 21 '16 at 7:00
  • \$\begingroup\$ I've asked about this here and have as such now specified that the solution is for C# Interactive (or any other REPL C# environment that might exist). \$\endgroup\$ – AquaGeneral Aug 21 '16 at 7:48
1
\$\begingroup\$

Python 2, 16 bytes

print chr(88-23)

Simpler but longer (21 bytes):

print chr(ord('c')-2)
\$\endgroup\$
1
\$\begingroup\$

Senva, 9 bytes 4 bytes

There is two ways to write this program, let's begin by the longest :

82.8--8-~

This stores 82 in the memory, substract 8, 8 again, 1, then display the memory as an ASCII char (65 is the ASCII code of A). The cell's value is 82 - 8 - 8 - 1 = 65.

The second way is a little bit pernicious :

B_-~

This converts the 'B' character to its ASCII char code, substract 1, and then display it as an ASCII char.

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

C# Interactive (REPL), 12 bytes

Lower case:

$"_{3<2}"[2]

This works by getting the third character from the string _False.

Upper case:

$"{new{}.GetType()}"[8-3]

This creates an anonymous object and gets its type, which is always of the form <>f__AnonymousType0#9. It then turns this into a string and gets the 6th character.

Answers are given as C# Interactive to compete with the other C# answer, though they can easily be converted to a printing anonymous lambda by wrapping them with:

()=>System.Console.Write(...);

This adds 27 characters to each solution.

\$\endgroup\$
  • \$\begingroup\$ Note the method to wrap the call could be an Action and be displayed as: ()=>System.Console.Write(...);, Note the System. and ending ;. \$\endgroup\$ – TheLethalCoder Aug 22 '16 at 10:06
  • \$\begingroup\$ The problem with that is that you can't declare an Action without an explicit cast. Which you can't do, because the 'A' in 'Action' is disallowed. \$\endgroup\$ – Scepheo Aug 22 '16 at 10:29
  • \$\begingroup\$ You don't need to declare the Action as the action by itself is fine i.e ()=>... \$\endgroup\$ – TheLethalCoder Aug 22 '16 at 10:33
  • \$\begingroup\$ Had a look and it does seem like anonymous lambdas are allowed. I've changed the answer accordingly. \$\endgroup\$ – Scepheo Aug 22 '16 at 10:59
1
\$\begingroup\$

3d, 7 bytes

Don't know if competing, but still, here it is.
Program:

>'b.-!;

Output:

a

Explanation:

>        Set direction of the IP
 'b      Push Unicode ordinal of character 'b'
   .     Push digit 1
    -    Push difference
     !   Print as Unicode character
      ;  End of program
\$\endgroup\$
1
\$\begingroup\$

Javascript, 32 bytes

Uppercase A:

String.fromCodePoint(33*2-(3-2))
\$\endgroup\$
  • \$\begingroup\$ “Your task is to print/display” – Your code is just a snippet generating the value. \$\endgroup\$ – manatwork Aug 24 '16 at 7:01
1
\$\begingroup\$

MSX-BASIC, 25 bytes

?CHR$(3*3*3*2-(-3-3-3-2))
\$\endgroup\$
1
\$\begingroup\$

MIXAL - 101 bytes including tabs

Run on your MIX machine. Or assemble and run using the GNU MIX Development Kit (http://www.gnu.org/software/mdk/).

S       ENT2    2/2
        ST2     8
        ENT3    22*2-3-2-2
        ST3     P(8-3:8-3)
        ENT2    22-3
        ST2     P(8-2-2:8-2-2)
P       IN      8
        HLT
        END     S

The biggest challenge is not being able to use OUT, the only output command, or 19, the number of the teletype output device. I get around the source restrictions by creating forbidden numbers using MIX assembler arithmetic, and by using MIX's self-modifying code features.

  1. Enter the number 1 into index register 2 (assembler turns 2/2 into 1)
  2. Store the contents of index register 2 at memory address 8, later to be sent to the output device
  3. Enter the number 37 into index register 3 using assembler arithmetic. 37 is the operation code OUT, which we need but can't use because it has a U.
  4. Store the contents of index register 3 (=37) in the opcode field (5:5) of the instruction already stored at address 'P' as part of the program (in other words, change IN to OUT)
  5. Enter the number 19 into index register 2. The teletype output device is no. 19.
  6. Store the contents of index register 2 (=19) in the field-specification field (4:4) of the instruction at address 'P' (change 0 to 19 to specify the teletype device as output).
  7. Instruction 'P': We have now rewritten this line as P OUT 8(19). So, send the contents stored at address 8 (= 1 = character code for 'A') to the teletype device for output.
  8. Stop the machine.
\$\endgroup\$
1
\$\begingroup\$

JavaScript (ES6), Uppercase, 34 30 bytes

1. I started from the answers of Conor O'Brien to get this:

_=>this[`${` ${-$}`[2]}tob`]("QQ")

Since btoa("A") gives "QQ==", it's doing atob("QQ") wich gives "A".

2. Completing the answer of chronixlol :

_=>String.fromCodePoint(88-23)
\$\endgroup\$
1
\$\begingroup\$

Game Maker Language, 26 bytes

So lucky that the command is chr() instead of char()...

get_string('',chr(33*3-2))

Basically, we have to get chr(65) or chr(97) to get A or a. Also, I had to use get_string to show the output since return, show_message, show_question, etc. all contained restricted characters.

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

Microscript II, 6 bytes

2s'C-K

Basically subtracts 2 from the char code of C, then converts back to a character before printing implicitly.

In the original Microscript, it becomes this 7-byte program:

2s'C-Ph
\$\endgroup\$
1
\$\begingroup\$

Kotlin, 22 bytes

{print("${3<2}"[3-2])}

This is a lambda that prints a to the console when invoked. Converts false (3<2) to string via string template and returns the 1-indexed character.

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

Ruby REPL, 11 bytes

(88-23).chr

88 - 23 = 65. 65 is the decimal representation of ASCII A. The chr function changes the decimal representation to the character. The REPL displays the result.

\$\endgroup\$
  • \$\begingroup\$ does this display that character though? \$\endgroup\$ – Destructible Lemon Aug 29 '16 at 1:19
1
\$\begingroup\$

F# Interactive, 17 bytes

string(3<2).[3-2]

This produces the following in the Output:

val it : char = 'a'

to print it to STDOUT, well, it becomes larger: 29 chars.

printf"%c"<|string(3<2).[3-2]
\$\endgroup\$
1
\$\begingroup\$

Woefully, 400 bytes

| || |
|| |
||| |
|||| |
||||| |
|||||| |
||||||| |
|||||| |
||||| |
|||| |
||| |
|| |
| |
| |
| |
| |
| |
| |
|| |
|| |
|| |
|| |
|| |
|| |
||| |
||| |
||| |
||| |
||| |
|||| |
|||| |
|||| |
|||| |
|||| |
||| |
|| |
| |
|| |
|| |
|| |
||| |
|| |
| |
| |
| |
| |
|| |
|| |
|| |
||| |
||| |
||| |
||| |
|||| |
|||| |
||||| |
|||| |
||| |
|| |
| |
|| |
||| |
|| |
||| |
|||| |
||||| |
|||||| |
||||||| |

Can probably be golfed more

\$\endgroup\$
  • \$\begingroup\$ This language is cool, I've made my own version for this at 335 bytes - but not sure if I should answer such an old question with this language already used. \$\endgroup\$ – Teal pelican Jul 18 '17 at 14:58
  • \$\begingroup\$ @Tealpelican go for it! we don't care about necros (except when it's like a hundred tag adding necros, but that's irrelevant), and we don't care that much about reusing langs \$\endgroup\$ – Destructible Lemon Jul 19 '17 at 1:20
1
\$\begingroup\$

JavaScript, Node console, 23

Shortest JavaScript I can do for a capital A.

This only works in the Node REPL console.

Object.keys(this)[2][3]

This only works in Firefox REPL (27)

Object.keys(this)[8*3][2*3]
\$\endgroup\$
1
\$\begingroup\$

Elixir, 16 bytes

IO.write [88-23]

Try it online on ElixirPlayground !

Elixir outputs the character(s) with the ASCII code specified in the list.

Using IO.puts would make it 1 byte shorter, but u is not allowed.

As expected, the interactive mode removes the need of explicitly calling IO functions for on-screen output.


Elixir Interactive, 7 bytes

[88-23]
\$\endgroup\$

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