50
\$\begingroup\$

Print 0 to 100 without using characters 1,2,3,4,5,6,7,8,9 in your code.

Seperator of numbers can be comma, whitespace or newline.

Shortest code wins.

\$\endgroup\$
6
  • 12
    \$\begingroup\$ Many tricks are made possible by allowing 0. Which is what makes this challenge interesting, IMO. \$\endgroup\$
    – Arnauld
    Feb 23 '21 at 17:08
  • 2
    \$\begingroup\$ I thought "do X without Y" questions weren't allowed anymore. \$\endgroup\$
    – Purple P
    Feb 24 '21 at 3:34
  • 1
    \$\begingroup\$ @PurpleP They're allowed, but discouraged. Interesting ones are fine. \$\endgroup\$ Feb 25 '21 at 0:06
  • 10
    \$\begingroup\$ Is there a requirement to stop printing at 100? \$\endgroup\$
    – spuck
    Feb 25 '21 at 16:44
  • \$\begingroup\$ Can we do it in reverse order? \$\endgroup\$
    – Dion
    Oct 16 '21 at 9:51

128 Answers 128

2
\$\begingroup\$

KonamiCode, 54 50 55 bytes

v(>)>(^)v(^^^>^^)S(^>>^)>(>)L(>)<<<v((>))>(^)<<>(>)B(>)

A version with an explanation:

[You actually do need to inititalize address 0, my mistake. Also, my original version did not print 0.]

v(>) [Inititalizes address 0]
>(^) [Sets address pointer to 1, this is where the space character wil be held]
v(^^^>^^) [Writes 32 (a space) to memory]
S(^>>^) [Sets the comparison buffer to 101]
>(>) [Back to address 0]
L(>) [Loop marker]
<<< [Output the counter at address 0 as a number]
v((>)) [Increase the counter by 1]
>(^) [Goes to the space]
<< [Output the space]
>(>) [Back to 0]
B(>) [Done!]
\$\endgroup\$
1
\$\begingroup\$

VBScript, 33 bytes

for i=0 to asc("d")
msgbox i
Next

Competitive answer in VBScript!

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

Javascript (Browser), 53 46 37 33 bytes

for(n=0;++n<+atob`MTAx`;)alert(n)

-15 bytes thanks to @EliteDaMyth

\$\endgroup\$
7
  • 1
    \$\begingroup\$ change the parseInt() to +atob`MTAx` for 11 bytes \$\endgroup\$
    – user100752
    Feb 23 '21 at 15:58
  • \$\begingroup\$ @EliteDaMyth thanks for that! \$\endgroup\$
    – wasif
    Feb 23 '21 at 16:00
  • 1
    \$\begingroup\$ also @Wasif you dont need the curly braces after the for loop. and you can change the way the for loop works, by incrementing, while checking, i.e. for(n=0;++n<+atob`MTAx`;)alert(n) this is 33 bytes \$\endgroup\$
    – user100752
    Feb 23 '21 at 16:02
  • \$\begingroup\$ @EliteDaMyth thanks again! \$\endgroup\$
    – wasif
    Feb 23 '21 at 16:04
  • 4
    \$\begingroup\$ you don't need the + in front of atob`MTAx`; \$\endgroup\$ Feb 23 '21 at 17:15
1
\$\begingroup\$

J, 12 bytes

a.i.@i.'e'"_

Try it online!

\$\endgroup\$
4
  • \$\begingroup\$ i.a.i.'e' for 9 works fine for me... \$\endgroup\$ Feb 27 '21 at 20:58
  • \$\begingroup\$ i.'e' returns 101, \$\endgroup\$ Feb 27 '21 at 21:05
  • \$\begingroup\$ Sadly that’s a snippet hence not legal according to site rules \$\endgroup\$
    – Jonah
    Feb 27 '21 at 21:51
  • \$\begingroup\$ For more, see this meta discussion \$\endgroup\$
    – Jonah
    Feb 27 '21 at 22:05
1
\$\begingroup\$

Clojure, 24 bytes

(apply pr(range(int\e)))

Try it online!

If it is acceptable that output is wrapped in parentheses, then we can remove apply for -6 bytes.

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

C# (.NET Core), 56 bytes

for(int i=0;i<=(0xb0e-0xaaa);i++){Console.WriteLine(i);}

Try it online!

\$\endgroup\$
3
  • \$\begingroup\$ -1 byte by moving the i++ into Console.WriteLine(). Try it online! \$\endgroup\$ Feb 23 '21 at 18:22
  • \$\begingroup\$ 52 bytes by getting rid of the curly braces and switching to < rather than <=, along with the byte save from my last comment Try it online! \$\endgroup\$ Feb 23 '21 at 18:33
  • \$\begingroup\$ Also, char has an implicit conversion to int, so you can replace the magic hex codes with 'e' for 42 bytes Try it online!, though upon looking it seems the C answer by Noodle got to that idea first. \$\endgroup\$ Feb 23 '21 at 18:37
1
\$\begingroup\$

Nim, 26 bytes

for i in 0..'d'.ord:echo i

Try it online!

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

Charcoal, 7 5 bytes

IE℅eι

Try it online! Link is to verbose version of code. Explanation:

   e    Literal string `e`
  ℅     ASCII code i.e. 101
 E      Map over implicit range
    ι   Current value
I       Cast to string
        Implicitly print
\$\endgroup\$
1
\$\begingroup\$

Alice, 17 bytes

aa*r\
 @Q
&d\
 O

Try it online!

Explanation:

a       Push 10
 a      Push 10
  *     Pop x. Pop y. Push x * y
   r    Pop n. Push all integers from 0 to n, inclusive
    \   Switch to Ordinal mode. Redirect command flow to the southeast
        Command flow hits the boundary of the grid and is reflected to the southwest
   Q    Reverse the order of the stack
  \     Switch to Cardinal mode. Redirect command flow to the west
 d      Push the number of elements currently on the stack
&       Pop n. Add n to the iterator queue
        Command flow hits the boundary of the grid and wraps
  \     Switch to Ordinal mode. Redirect command flow to the southwest
 O      Pop s. Print s as a string followed by a newline 
          (Gets executed the number of times stored on the top of the iterator queue)
        Command flow hits the boundary of the grid and reflects to the northwest
&       Pop s. Add s to the iterator queue
          (Everything between here and the end of the program is just the command flow 
          bouncing around until it reaches the @)
        Command flow hits the boundary of the grid and reflects to the northeast
  *     Pop b. Pop a. Push the concatenation of a and b
          (Executes 0 times because & added an empty string to the iterator queue)
        Command flow hits the boundary of the grid and reflects to the southeast
   Q    Reverse the order of the stack
        Command flow hits the boundary of the grid and reflects to the southwest
        Command flow hits the boundary of the grid and reflects to the northwest
  \     Switch to Cardinal mode. Redirect command flow to the south
        Command flow hits the boundary of the grid and wraps
  *     Pop x. Pop y. Push x * y
  @     Terminate the program
\$\endgroup\$
1
\$\begingroup\$

Wolfram Language (Mathematica), 29 bytes

included more for the amusing built-in than the byte count, though this would be something like 9 bytes in the hypothetical mthmca golfing language.

Range[0,FromRomanNumeral@"C"]

Try it online!

And similar, but longer

Range[0, Interpreter["SemanticNumber"]@"hundred"]
\$\endgroup\$
1
\$\begingroup\$

Tcl, 46 bytes

set i 0
while \$i<[incr u]0$u {puts $i
incr i}

Try it online!

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

SimpleTemplate 0.84, 45 bytes

This was fun, but quite difficult.

The code outputs all numbers from 0 to 100, with a trailing newline:

{@setC 0}{@for_ from"   "to"m"}{@echolC}{@incC}

Due to bugs in the compiler, the tab character (inside {@for_ from" "to"m"}) MUST be a real tab.


Ungolfed

This version should be easier to read, despite being functionally the same:

{@set counter 0}
{@for i from "  " to "m"}
    {@echo counter, EOL}
    {@inc counter}
{@/}

Closing the {@for [...]} is optional, but left here for the cleanest code possible.


You can try this on https://ideone.com/tLsDFn

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

Stax, 5 bytes

AJ^rJ

Run and debug it

AJ^   10 squared plus 1 (101)
   r  range from 0..n-1
    J join with spaces
\$\endgroup\$
1
\$\begingroup\$

Elixir, 42 28 bytes

(?b-?a)..?d|>Enum.join("\n")

Try it online!

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

Japt, 2 bytes

Try it online!

This outputs a list of numbers from 0 to 100 separated by commas.

How it works

Lò
L   -Number 100 
 ò  -Creates an inclusive range from 0 to L, and return it in the output
\$\endgroup\$
1
\$\begingroup\$

C++, 77 Bytes

#import<iostream>
main(){for(int i=0;i<=int('d');++i)  std::cout<<i<<" ";}

Here, I've used the ASCII value and ran the loop and printed the value. Simple!

\$\endgroup\$
1
  • \$\begingroup\$ This can definitely be golfed a bit, like by removing unnecessary whitespace and newlines. Make sure to read our tips questions if you want some hints! \$\endgroup\$ Mar 8 '21 at 18:14
1
\$\begingroup\$

TeX, 57 bytes

\newcount~\loop\advance~`^^A\the~ \ifnum~<`^^%\repeat\bye

Makes uses of these two tricks:

  • \$\rm\TeX\$'s preprocessor runs through the code and replaces any instance of two consecutive superscript (category code 7) characters followed by a character token, and adds/subtracts 64 from its ascii code, hence ^^A becomes NUL.
  • \$\rm\TeX\$ has a `backtick notation' of inputting numbers that reads the following character's ascii code instead.
\$\endgroup\$
1
\$\begingroup\$

GolfScript, 8/11 bytes

'e'{}/,`

Try it online! - 8 Bytes

Makes an array of values of e (101) elements, starting at 0, then formats with spaces. The format also has brackets at either end of the output, so it may not be valid. If not, they can be removed with 3 more bytes:

'e'{}/,' '*

Try it online! - 11 Bytes

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

V (vim), 30 bytes

i00<esc><C-a>hxpi0<esc>0"aDi0<esc>qqYp<C-a>q@a@qdd

Try it online!

can definitely be improved.

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

K (oK), 4 bytes

Solution:

!"e"

Try it online!

Explanation:

Scrolling through the other solutions tells me I wasn't as novel as I hoped when I came up with this.

!"e" / the solution
 "e" / ASCII 101
!    / til (i.e. range 0..n-1
\$\endgroup\$
1
\$\begingroup\$

Barrel, 9 bytes

#d(n+¶)n

Explanation:

#        // as many times as...
 d       // ...the ASCII value of 'd' (100)...
  (   )  // Create a single of instruction for the loop
   n     // print the accumulator of a number
    +    // increase the accumulator
     ¶   // print a newline
       n // print the final number

The final n is necessary because the loop only prints the numbers 0 to 99.

I could've shaved off 2 bytes by doing #e(n+¶, which would have used the ASCII value of 'e' (101) and also utilized the self-closing properties of the () instruction, but I had already assigned e to be the value of the mathematical constant \$e\$.

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

Pxem, 21 20 bytes (filename) + 0 bytes (content) = 23 21 20 bytes, requires unprintable character.

  • Filename (escaped unprintable): \001.r.-.z.c.n,.o\001.+.ce.a
  • Content: empty.

Try it online!

With comments

XX.z
# push 1; push int(rand()*pop)
## NOTE rand() outputs 0<=n<1
## NOTE assuming NUL cannot be used for filename
.a\001.rXX.z
# while size<2 || pop!=pop; do
.a.zXX.z
  # dup; print pop; push comma; putc pop
  .a.c.n,.oXX.z
  # push 1; push pop+pop; dup; push 101
  .a\001.+.ce
# done
.a.a

Pxem, 3 bytes (filename) + 20 bytes (content) = 23 bytes, requires unprintable character.

  • Filename: e.e
  • Content (some unprintables are escaped): .c.w\001.-.e.+.n .o.d.a

With comment

e.eXX.z # push 101; call content
.a
XX.z
# dup; while pop!=0; do
.a.c.wXX.z
  # push 1; push abs(pop-pop); call content (* result of final stack will be pushed to original *)
  .a\001.-.eXX.z
  # push pop+pop; print pop; push space; print pop; return
  .a.+.n .o.dXX.z
# done; (* implicit return *)
.a.a

Try it online! (with pxem.posixism)

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

Pyth, 4 bytes

UC\e

Try it online!
Surprised myself by topping the previous Pyth's top score of 5 bytes. Creates a range from 0-101 (char code of 'e' = 101)

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

Risky, 3 2 bytes

0:--

Try it online!

range(100 - -1)
\$\endgroup\$
1
\$\begingroup\$

///, 231 166 bytes

/\\\\\/\//\\\/\/\/\/\/\/\/\/\/\/\/\///\/\\\/\/\//\\\/\
\/\\\\\\\/\
\\\/\/\\\\\\\/\\\/\\\/\\\\\\\\\\\/\/\/\\\/\\\/\\\\\\\\\\\/\/\\\\\\\/\
\\\/\/\/\\\/\///\\\\\\\\\\\//

Try it online!

This was really fun to make. Sadly, there is a single newline. Using a backslash instead breaks everything, and I don't really want to figure out where everything is and fix it.

Update: I remade it from the ground up, it is now much smaller, and works with only slashes. Unfortunately, the challenge specifies commas and whitespace seperators only, so only slashes is not allowed.

Slashes only:

///, 182 bytes

/\\\\\/\//\\\/\/\/\/\/\/\/\/\/\/\/\///\/\\\/\/\//\\\/\\\\\/\\\\\\\/\\\\\\\\\\\/\/\\\\\\\/\\\/\\\/\\\\\\\\\\\/\/\/\\\/\\\/\\\\\\\\\\\/\/\\\\\\\/\\\\\\\\\\\/\/\/\\\/\//\\/\\\\\\\\\\\//

Try it online!

\$\endgroup\$
2
  • \$\begingroup\$ Looks like the output starts with 1, while should start with 0. \$\endgroup\$
    – manatwork
    Feb 28 '21 at 17:39
  • \$\begingroup\$ @manatwork ill work on that ;) \$\endgroup\$ Mar 1 '21 at 15:26
1
\$\begingroup\$

GFortran, 29 bytes

try it online!

print*,(j,j=0,ichar('d'))
end

Similar to this.

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

MathGolf, 4 bytes

♀)rn

Outputs with newline delimiter.

Try it online.

Explanation:

♀     # Push 100
 )    # Increment it to 101
  r   # Pop and push a list in the range [0,101)
   n  # Pop and join it by newlines
      # (after which the entire stack is output implicitly)
\$\endgroup\$
1
\$\begingroup\$

Python 3; 46 Bytes

x=True;a=x+x;b=a*a+x;print(*range(a*a*b*b+x))
\$\endgroup\$
0
1
\$\begingroup\$

ErrLess, 23 25 17 bytes

Thanks to Jo King for saving 8 bytes

0Z@#@'d<l+[.a?l-z

Explanation

0   { Add zero to the stack: (x) }
Z   { Set a "checkpoint" to jump back to later }
@#@ { Output as number & Duplicate: (x x) }
'd< { x < d - true -> -1; false -> 0? (x x<d) }
l   { Get the length of the top element (-1 for integers): (x x<d -1) }
+   { Add: (x [-2 or -1]) }
[   { Skip backwards that many instructions (skip forwards 1 or 2): (x) }
.   { Halt }
a?  { Push 10 and print (print newline) }
l-  { Increment: (x--1) }
z   { Go to "checkpoint" }

Try it online!

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

Ly, 9 5 bytes

'dR&u

Try it online!

Dropped 4 chars thanks for LyricLy(!)

Prints using LF as the delimiter by generating the list of 0-100 on the stack, then using a "print the whole stack" command.

 'd     - push 100 (codepoint for "d") on the stack
   R    - use "range" command to generate the list of numbers
    &u  - print the stack as integers
\$\endgroup\$
1
  • 1
    \$\begingroup\$ 'dR&u is 5 bytes using implicit 0 and the Range command. \$\endgroup\$
    – LyricLy
    Nov 8 '21 at 7:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy