Imprimer le tableau ASCII

28

La tâche consiste à afficher n caractères de la table ASCII .

Vous pouvez écrire une fonction (ou un programme qui prend l'argument comme paramètre, STDIN est également autorisé) qui prend un paramètre n , qui sera l'index du dernier caractère à imprimer.

La tâche est assez simple, donc à titre d'exemple, voici une implémentation possible en Python 2.7:

(lambda n:map(chr, range(n)))(256)

Comme je l'ai dit, c'est une tâche simple. Il s'agit donc de code-golf et les codes les plus courts gagnent!

MODIFIER

Comme certains d'entre vous l'ont souligné, ce code n'imprime pas le résultat. C'est juste un exemple car je pourrais avoir du mal à expliquer le problème en anglais ;-).

EDIT2

N'hésitez pas à publier la réponse dans n'importe quel langage de programmation, même si ce n'est pas le code le plus court. Il existe peut-être des implémentations intéressantes!

EDIT3

Correction de l'exemple pour qu'il imprime le résultat.

oopbase
la source
1. Doit-il s'agir d'une fonction? 2. Selon votre code de référence, n serait le premier caractère non imprimé.
Dennis
2
En fait, le code de référence n'imprime rien. Il retourne juste une liste des caractères et laisse le REPL faire ce qu'il veut avec le résultat.
manatwork
1
Quelqu'un peut-il expliquer le vote négatif? Je suis désolé si mon anglais n'est pas si bon. S'il y a quelque chose de flou dans la question, dites-le moi.
oopbase
1
for x in range(input()):print chr(x)Imprime en fait les caractères, si vous souhaitez modifier votre exemple.
FryAmTheEggman
2
nota [i for i in range(n)]est assez similaire àrange(n)
njzk2

Réponses:

19

CJam, 4 octets

ric,

Programme complet qui lit à partir de STDIN (champ de saisie dans l' interpréteur en ligne ).

Cela s'exécute simplement range(chr(int(input()))), profitant du fait que ,renvoie un tableau de caractères si son argument est un caractère.

J'appelle dibs on c,(2 octets), juste au cas où en supposant que l'entrée est déjà sur la pile se révèle être autorisée.

Dennis
la source
Devez-vous spécifier une entrée? Le coureur en ligne sort simplement le code lui-même.
manatwork
12
@manatwork: Juste une seconde. Vous devez vous dépêcher lorsque vous postez ces ...;)
Dennis
Je suis un peu confus par cela. Le caractère à 0 (alias 0c) empêche tout autre élément d'être imprimé après. ric, (semble bien fonctionner. Cela signifie que le code ne fonctionne pas.
kaine
1
@kaine: Internet Explorer est écrit en C ++, qui n'utilise pas de chaînes terminées par null. Selon cela , les caractères nuls sont des erreurs d'analyse dans HTML 5; le navigateur doit le remplacer par un ou abandonner le traitement du document.
Dennis
4
N'oubliez pas que vous devez saisir un caractère suffisamment grand n, car les premières dizaines de caractères ASCII sont des caractères non imprimables. Fait amusant: ce programme
génère
25

brainfuck - 169 146 142 octets

-[+>+[+<]>+]>+>>,[>,]<[<]<[->>[->]<[<]<]>>>[[<[-<+<+<+>>>]+++++++++[<[-<+>]<<[-<+>>>+<<]<[->+<]>>>>-]]<,<<,>[->>>+<<<]>>>---------->]<-[->.+<]

Limites:

  • EOF doit être 0
  • Nécessite des cellules d'emballage 8 bits
  • En raison de ^, les mods sont entrés par 256

Pas la réponse la plus courte ici, mais bon, enculé! Ce serait un défi vraiment, vraiment bon, sauf pour le fait qu'il nécessite une entrée lisible par l'homme sans garantir le nombre de chiffres. J'aurais pu exiger une entrée pour avoir des zéros de tête pour faire 3 caractères de long, mais quel plaisir est-ce? : D Un problème majeur avec la prise d'entrée de cette façon est que la seule structure de branchement ou de boucle de brainfuck vérifie si la cellule actuelle est nulle ou non. Lorsque l'entrée peut contenir des zéros, votre code peut prendre des branches qu'il ne devrait pas prendre. Pour résoudre ce problème, je stocke chaque chiffre d'entrée plus 1 , puis soustrais l'excédent à la dernière seconde possible. De cette façon, je sais toujours où sont mes zéros.

J'ai dit que cela aurait été un grand défi de réflexion sans avoir à analyser les entrées. Pourquoi donc? Eh bien, supposons que nous ne prenons pas de saisie numérique. Nous dirons que le défi est "Étant donné un octet d'entrée, sortez tous les caractères ASCII en dessous de cet octet". Voici ma réponse:


brainfuck - 8 octets

,[->.+<]

C'est toute une différence! Le vrai programme utilise 135 instructions pour collecter l'entrée (plus de 95% du programme!), Simplement parce que c'est un humain qui la tape. Enregistrez le numéro sous forme d'octet et donnez - le-moi, et cela ne prend qu'un seul.

(Fait amusant: si vous avez compris le programme hypothétique, alors félicitations! Vous comprenez le brainfuck dans son intégralité. La langue entière n'a que huit commandes, et ce programme arrive à utiliser chacune une seule fois.)

Explication

-[+>+[+<]>+]>+               abuse 8 bit wrapping to put 47 in cell 4

>>,[>,]                      starting in cell 6; get each character of input

<[<]<[->>[->]<[<]<]          subtract the value of cell 4 from each input character
                             '0' has an ascii value of 47 so subtracting 47 from each
                             digit gives you that digit's value plus 1

>>>[                         if the number is in more than one cell
                             (when the program first starts this means "if the input has
                             more than one digit")

[<[-<+<+<+>>>]               copy first input cell to 3 new cells

+++++++++[<[-<+>]<<          do some fancy addition magic to multiply that value by 10
[-<+>>>+<<]<[->+<]>>>>-]]

<,<<,>                       clean up a bit (abusing comma to set cells to 0)

[->>>+<<<]>>>                add the value to the next cell of input

----------                   because we multiplied (the digit plus 1) by 10; the answer
                             is 10 too high; so subtract 10

>]                           if the input is still in multiple cells; do the song and
                             dance again (multiply by 10; add to next cell; subtract 10)

<-                           we never got a chance to fix the final digit; so it's still 1
                             too high

               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
               ;;         we have now finished processing input         ;;
               ;;     the tape is empty except for the current cell     ;;
               ;;  the current cell contains the number that was input  ;;
               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[                            while the cell containing input != 0

-                            subtract 1 from it

>.+                          go a cell to the right; output that cell; then add 1

<]                           repeat
métro monorail
la source
Agréable! Certainement +1 pour l'effort :-)
oopbase
1
Vous pouvez enregistrer quelques octets sur la partie en sortie: >[-]<[->.+<]définissez la cellule à côté de la cellule actuelle sur 0, puis comptez à rebours la cellule actuelle tout en augmentant la cellule à côté et en imprimant simultanément la valeur.
Shujal
@shu C'est un excellent point! Je n'y ai pas pensé du tout. En plus d'être plus court, il corrige le problème que j'avais avec l'étouffement sur les grandes entrées et c'est probablement plus rapide! Merci :)
undergroundmonorail
Oui, c'est beaucoup, beaucoup plus rapide maintenant. Je n'avais pas non plus besoin de la >[-]<pièce car j'étais déjà à côté d'une cellule vide. :)
undergroundmonorail
1
De plus, votre deuxième réponse est valide.
Esolanging Fruit
12

Pyth , 4 octets

VQCN

Fondamentalement, une traduction du programme Python 3:

for N in range(eval(input())):print(chr(N))
FryAmTheEggman
la source
11

Befunge 93 - vingt-trois 21

&> :#v_,>:#,_@
 ^-1:<

Befunge 93 - 15 13 (par Ingo Bürk)

Celui-ci imprime la liste à l'envers, mais OP a seulement dit que nous devons imprimer les premiers ncaractères, pas que cela doit être en ordre.

&>::>v
@^-1,_

Pourrait ne plus être jouable au golf sans passer à Befunge98 (pour l'opérateur ";", voir la réponse de @ Kasran )

Essayez-le ici:

karhell
la source
J'espère que cela ne vous dérange pas que j'ai utilisé un interprète en ligne d' ici :)
Ingo Bürk
La question n'indique pas que nous devons l'imprimer dans n'importe quel ordre, c'est donc cinq octets plus court: &> #- #1:# :#,_@(il l'imprime simplement à l'envers)
Ingo Bürk
J'ai rasé un autre octet pour un total de 15. En raison des nouvelles lignes, je vais le modifier dans votre message.
Ingo Bürk
Bien joué sur le golf supplémentaire :) Quant à l'interprète en ligne, je ne savais pas qu'il y en avait un. C'est super, merci :)
karhell
L'interprète est nouveau du défi lié. Je pensais juste que je l'utiliserais réellement quand j'ai vu votre réponse. :)
Ingo Bürk
8

Java, 151 128 77 62 56 octets

Essayez d'abord le golf par code.

void f(int n){for(char i=0;++i<=n;System.out.print(i));}

Usage:

import java.util.Scanner;
class A {

    public static void main(String[] a) {
        int num = new Scanner(System.in).nextInt();
        new A().f(num);
    }

    void f(int n) {
        for (char i = 0; ++i <= n; System.out.print(i));
    }
}

Merci à @Shujal, @flawr, @Ingo Bürk et @Loovjo pour la sérieuse réduction d'octets.

Rodolfo Dias
la source
1
Vous pouvez enregistrer certains caractères en déclarant l'int tout en ouvrant le scanner: int i,n=new Scanner(...et en changeant la boucle en for(;++i<n;). De plus, vous n'avez pas besoin d'invoquer Character.toString. Vous pouvez simplement fournir à System.out une valeur char et il la restituera avec plaisir.
Shujal
1
Le défi permet l'utilisation de votre aentrée. Et je pense que vous pouvez raccourcir la forboucle en abusant de la place de l'incrément en tant que corps de boucle: for(;++i<n;System.out.print((char)i));(mais vous devrez peut-être modifier l'initialisation ou la valeur finale de + - 1)
flawr
1
Vous êtes autorisé à écrire une fonction, donc pas besoin d'une classe entière et tout.
Ingo Bürk
1
@RodolfoDias Êtes-vous sûr? De toute évidence, ++i<n+1devrait être équivalent à ++i<=n. Notez le =dedans, cependant! Il enregistre juste un octet. Ça marche pour moi.
Ingo Bürk
1
On en revient donc à void f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}62 octets. Au moins, je ne vois plus de golf maintenant. :)
Ingo Bürk
6

APL, 5

⎕UCS⍳

Exemple d'utilisation:

⎕UCS⍳256
Shujal
la source
1
Vous n'avez pas besoin de créer un DFN. Juste «UCS» fonctionnerait bien. Donc 5 caractères
Moris Zucca
1
Vous n'avez pas à prendre en charge les points de code supérieurs à 127. Juste ↑ ⎕AV fonctionnerait bien. Donc 4 caractères
Adám
6

JavaScript, ES6 - 52 58 56 53 44 42 octets

n=>String.fromCharCode(...Array(n).keys())

Collez-le dans la console Firefox. Exécuter en tant que f(NUM).

J'ai dû l'allonger car le premier n'acceptait pas correctement les entrées.

Down 3, merci edc65! Jusqu'à 44 grâce à Swivel!

Scimonster
la source
1
Cela ne gère pas vraiment ni paramètre ni entrée.
manatwork
Remplacez simplement le 70 par un nombre différent; c'est l'entrée.
Scimonster
D'accord, je l'ai mis à jour pour prendre en entrée, au prix de 6 octets.
Scimonster
3
-2: f = n => [... Array (n)]. Map ((v, i) => String.fromCharCode (i))
edc65
2
44 personnages! f=n=>String.fromCharCode(...Array(n).keys())
Pivotant
6

Haskell, 17 23 octets

flip take['\0'..]

Je ne sais pas s'il est possible de faire mieux sans importations.

modifier

Ma première solution n'a pas réellement imprimé le résultat, alors autorisez 6 caractères supplémentaires pour cela:

print.flip take['\0'..]

De plus, pas plus court (25 caractères avec impression, 19 sans), mais une approche alternative intéressante (elle nécessite cependant 'Data.List'):

print.((inits['\0'..])!!)
archaephyrryx
la source
Cela n'imprime pas réellement le résultat.
nyuszika7h
@ nyuszika7h maintenant c'est le cas
John Dvorak
(`take`['\0'..])enregistre un octet.
Laikoni
4

Utilitaires communs Bash + BSD, 9 octets

jot -c $1

GNU dc, 20 octets

?sc_1[1+dPdlc>m]dsmx
Traumatisme numérique
la source
4

C, 31 30 28 27

k;f(n){putch(k++)<n&&f(n);}

Puisque le putch n'est pas standard, voici la version entièrement conforme:

k;f(n){putchar(k++)<n&&f(n);}

Doit être appelé depuis le principal:

main(){f(255);}

EDIT: amélioré en profitant de la valeur de retour de putchar
EDIT 2: réduit par un autre personnage par récursivité

takra
la source
1
putch est une fonction non standard. Puis-je également demander pourquoi cette réponse a été rejetée?
Stuntddude
@Stuntddude J'ajouterai une version alternative qui utilise putchar, et je ne sais pas pourquoi cela est downvoted. Après tout, c'est l'un des plus courts.
takra
4

Perl, 17 octets

say chr for 0..$_
Demnogonis
la source
1
Trop de parenthèses. print chr for 0..$ARGV[0]
manatwork
Tu as raison! Cela fait un moment que je n'ai pas utilisé perl
Demnogonis
1
Vous pouvez utiliser shiftau lieu de $ARGV[0]pour enregistrer 2 octets.
nyuszika7h
Si vous êtes autorisé à imprimer les caractères sur différentes lignes, vous pouvez utiliser say. En outre, le nombre de caractères est plus court si vous le faites en une ligne avec -n. echo "90" | perl -nE'say chr for 0..$_'compterait comme des 18caractères. 17pour say chr for 0..$_plus 1pour le n.
hmatt1
Tu as raison. Mais sayne fonctionnera pas avec toutes les versions de perl.
Demnogonis
3

CJam, 3

,:c

J'ai supposé que l'argument était l'élément de pile supérieur.

Exemple d'utilisation:

256,:c

ri,:c
Shujal
la source
3

Ruby, 30 caractères

puts (0..$*[0].to_i).map &:chr
Poignée de porte
la source
3

awk - 27

{while(i<$0)printf"%c",i++}

Pour donner le paramètre sur stdin, exécutez-le comme:

awk '{while(i<$0)printf"%c",i++}' <<<96

Juste pour le plaisir: la "version positive" à partir d'une version définitive yes:

yes|head -96|awk '{printf"%c",NR-1}'

NR-1est nécessaire pour imprimer (char)0pour NR==1. :-(

Et pourquoi n'avons-nous pas de nocommande? C'est un peu méchant!


la source
1
alias no='yes no'
nyuszika7h
... mais je devrais aussi compter les caractères de cette définition d'alias ... :-(
3

J - 5 octets

{.&a.

{.est Head, a.est Alphabet (une liste de tous les caractères) et les &lie, générant un verbe monadique appelé comme:

{.&a. 100 NB. first 100 characters

Remarque : Il semble que cela ne fonctionne pas de manière interactive: Jconsole et jQt semblent mettre en place une traduction, produisant des caractères de boîte au lieu de certains caractères de contrôle. Dans un script ou à partir de la ligne de commande, cela fonctionne cependant:

  ijconsole <<< '127 {. a.' | hd
jpjacobs
la source
Notez que l'alphabet n'est pas exactement ASCII.
FUZxxl
Jusqu'à {.&a. 127, ce n'est pas?
jpjacobs
Non, car J contient des caractères de dessin de boîte au lieu de certains des caractères de contrôle.
FUZxxl
En fait, l'écrire dans un fichier et l'inspecter avec une visionneuse hexadécimale me dit que J génère les valeurs correctes (0x00 0x01, ...). ce n'est que l'interpréteur J / IDE qui interprète ces valeurs comme des caractères de tirage au lieu de caractères de contrôle. Il fait exactement la même chose que toutes les autres langues utilisant charou équivalentes.
jpjacobs
C'est bizarre parce que je l'ai testé sur ma boîte UNIX et il a effectivement sorti des caractères Unicode pour certains des points de code.
FUZxxl
3

gs2, 2 octets

V.

Cela devrait être en compétition, je pense! Cela aurait fonctionné même dans les premiers jours de gs2. Essayez-le ici.

Lynn
la source
1
Testé avec succès avec cette version , antérieure au défi d'un mois.
Dennis
3

Brainfuck, 44 octets

,
[
  <[>++++++++++<-]
  -[>-<-----]
  >+++>,
]
<[>.+<-]

Attend une chaîne décimale sans retour à la ligne.

Essayez-le en ligne.

La lecture d'entiers dans la gamme [0, max_cell_size]de brainfuck n'est pas difficile. Je vous encourage à inventer vous-même une méthode propre. Je considère que c'est un exercice de niveau débutant. (L'opération inverse de l'impression de la valeur numérique d'une cellule est plus complexe et pourrait être considérée comme une tâche de niveau intermédiaire.)

Voici une version de 58 octets qui peut gérer 256les implémentations 8 bits:

,
[
  <[<+> >++++++++++<-]
  -[>-<-----]
  >+++>,
]
<[>]
-<<[>.]
>[>+.<-]

Mitch Schwartz
la source
Pourquoi n'y ai-je pas pensé ??? C'est ingénieux !!!
FinW
Puis-je emprunter cela pour l'utiliser dans les réponses futures?
FinW
1
@FinW Je suppose que vous ne connaissez pas ce méta-post .
Mitch Schwartz
2

Golfscript - 5

Merci à @Dennis

~,''+
Beta Decay
la source
1
~,""+est plus court et traite correctement les entrées de STDIN.
Dennis
@Dennis Cela ne produit aucune sortie pour moi ...
Beta Decay
1
Utilisez-vous l'interpètre en ligne? Pour simuler correctement l'entrée de STDIN, vous devez utiliser, par exemple ;"65", car l'entrée de STDIN sera toujours une chaîne.
Dennis
1
@Dennis Oh merci qui fonctionne maintenant!
Beta Decay
2

Lua - 43 41 octets

for i=1,arg[1]do print(string.char(i))end
William Barbosa
la source
Vous pouvez raccourcir cela d'un octeta=""for i=1,arg[1]do print(a.char(i))end
Digital Veer
Vous pouvez raccourcir cela de 2 octetsfor i=1,arg[1]do print(("").char(i))end
manatwork
2

Befunge 98, 22

&:00pv>0gk,@
0::-1<^j`

Un peu triste que ce soit si long.

&:00p        ; gets numerical input, stores a copy at cell (0,0)               ;
     v       ; IP goes down                                                    ;

     <       ; IP goes left, so I execute 1-::0`j^                             ;
 ::-1        ; (1-::) subtract one from our number and duplicate it twice      ;
0       `    ; (0`) compare the number with 0, push 1 if greater else 0        ;
     <^j     ; if the result was 0, go up, otherwise continue going left       ;

      >0gk,  ; get the value at cell (0,0), print that many numbers from stack ;
           @ ; terminate program                                               ;
Justin
la source
2

Python 3.4 - 36 octets / 43 octets

print(*map(chr,range(int(input()))))
print(*map(chr,range(int(input()))),sep='')

255 entrée ()

Comment cela fonctionne:

  1. Obtenez la limite supérieure de la plage
  2. Générez une plage de la table.
  3. Mappez la plage à la fonction chr (prend int, retourne ascii).
  4. Consommer la carte via l'expansion de l'argument splat (nombre -> caractère -> imprimer!)

Le second supprime simplement l'espace séparant chaque caractère en échange de 7 octets.

Full Metal
la source
Vous pourriez très bien en faire un lambda, comme l'indique la question, et en Python 2, mapretourne une liste, donc vous pouvez simplement le fairef=lambda i:map(chr,range(i))
Justin
C'est vrai, et ma solution initiale était similaire mais je ne voulais pas utiliser un lambda pour pouvoir imprimer immédiatement la sortie. Je souhaite que la carte garde la tendance de retourner une liste au lieu d'un itérateur, même si elle est plus pythonique de cette façon.
Full Metal
2

Pascal 87

program _;var c:char;n:byte;begin n:=0;readln(n);for c:=chr(0)to chr(n)do write(c);end.

Pascal 73

program _;var c,n:byte;begin readln(n);for c:=0to n do write(chr(c));end.

Construit et fonctionne correctement à partir de http://www.onlinecompiler.net/pascal

Mark K Cowan
la source
1
FreePascal (et si je me souviens bien, Turbo Pascal aussi) n'a besoin que de 60 de ces caractères: var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end. pastebin.com/aFLVTuvh
manatwork
Très probablement, je n'ai utilisé que Delphi. Mais quelqu'un l'a édité hors du titre.
Mark K Cowan
2

x86 ASM (Linux) (beaucoup d'octets sauf si vous le compilez)

Écrit en tant que fonction, suppose que le paramètre est passé dans AX (j'oublie le numéro de l'appel système lu) Ne préserve pas non plus [SP] ou BX.

test ax,ax
jz @Done
mov [sp],ax
@Loop:
mov ax,4
mov bx,1
mov cx,sp
mov dx,1
int 0x80
sub [sp],1  ; Can I do this?  Or do I need to load/sub/store separately?
jnz @Loop
@Done:
ret
Mark K Cowan
la source
2
(J'aurais dû mettre un exploit F00F là-dedans, ce n'est pas comme si quelqu'un le ferait de toute façon)
Mark K Cowan
7
J'allais gérer ça. Je ne vais pas gérer ça maintenant.
Aearnus
2

Perl - 29

sub f{print map{chr}0..shift}
nyuszika7h
la source
2

Rubis, 23

f=->n{puts *?\0..n.chr}

Explication

  • L'entrée est considérée comme l'argument d'un lambda. Il attend un nombre entier.
  • L '"opérateur de déstructuration" ( *) invoque #to_arysur la plage pour imprimer chaque caractère sur sa propre ligne.
britishtea
la source
2

Julia: 20 caractères (REPL)

Ceci est proche de l'exemple de la question: génère simplement les personnages et laisse le REPL faire ce qu'il veut avec eux.

f(n)=map(char,[0:n])

Julia: 33 personnages

Imprime chaque caractère sur une ligne distincte.

print(map(char,[0:int(ARGS[1])]))
homme au travail
la source
2

M (MUMPS) - 21

R n F i=1:1:n W $C(i)

Sous forme développée: READ n FOR i=1:1:n WRITE $CHAR(i)

temporicide
la source
2

T-SQL: 68 63

En boucle d'impression

DECLARE @i INT=64,@ INT=0A:PRINT CHAR(@)SET @+=1IF @<=@i GOTO A

T-SQL: 95 86

Comme une requête

DECLARE @ INT=64SELECT TOP(@+1)CHAR(ROW_NUMBER()OVER(ORDER BY 0/0)-1)FROM sys.messages

Modifier: apporté des modifications et des correctifs signalés par Muqo. Merci. Corrections et golf suggérées par @ t-clausen.dk

MickyT
la source
Pour la boucle, vous pouvez enregistrer environ 5 caractères convertissant le WHILE en un GOTOavec étiquette. Pour la requête, spécifiez peut-être msdb.sys.objectspour garantir suffisamment d'objets. En outre, il ne génère pas CHAR (0). Cependant, comme consolation, vous pouvez ORDER BY @.
Muqo
La deuxième réponse n'est pas valide. Vous pouvez le réécrire de cette façon et jouer au golf 9 caractères: DECLARE @ INT = 64SELECT TOP (@ + 1) CHAR (ROW_NUMBER () OVER (ORDER BY 0/0) -1) FROM sys.messages
t-clausen.dk
@ t-clausen.dk ne sais pas comment je l'ai laissé passer. Merci pour ça.
MickyT
2

Brainfuck - 140 112 Octets

,>,>,>-[>+<-----]>---[<+>-]<[<<<->->->-]<[>+<-]<[>>++++++++++<<-]<[>>>>++++++++++[<++++++++++>-]<<<<-]>>>[>.+<-]

Essayez-le ici!

28 octets enregistrés en changeant [<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]pour [<<<->->->-].

Ce qu'il fait

,>,>,>                                                              Takes three inputs
                                                                    in three separate cells

-[>+<-----]>---[<+>-]<[<<<->->->-]<                                 Takes 48 off of each to
                                                                    convert them to decimal

[>+<-]<[>>++++++++++<<-]<[>>>>++++++++++[<++++++++++>-]<<<<-]>>>    Combines them into a
                                                                    three digit number by
                                                                    multiplying the first
                                                                    by 100, the second by
                                                                    10 and then adding all
                                                                    three

[>.+<-]                                                             Repeatedly prints the
                                                                    value of the adjacent
                                                                    cell and then adds one
                                                                    to it until it reaches
                                                                    the input value.
FinW
la source