HQ9+ é uma linguagem "esotérica" criada por Cliff L. Biffle. Ela tem esse nome por causa de seus quatro(e únicos) operadores(H, Q, 9 e +). A idéia é criar uma linguagem perfeita para iniciantes, que possa executar os exemplos/exercícios mais típicos para eles sem muito sofrimento. Mais sobre isso em http://www.cliff.biffle.org/esoterica/hq9plus.html.
Os quatro operadores
- H - "Hello, world!" na stdout.
- Q - mostra todo o código digitado desde o início do interpretador.
- 9 - Letra de "99 garrafas de cerveja no muro".
- + - incrementa em um o contador iniciado em 0 junto do interpretador.
E aqui vai a versão em português do interpretador:
1 #! /usr/bin/env python
2
3 """Interpretador HQ9+
4
5 HQ9+ e uma linguagem de programacao "esoterica", criada por Cliff L. Biffle
6 (http://www.cliff.biffle.org/esoterica/hq9plus.html)
7 Essa e uma versao python do interpretador."""
8
9 __author__="Carlos KNIGHTSTALKER M. dos Santos (knightslayer@gmail.com)"
10
11
12 def main():
13 counter=0
14 terminate=0
15 while not terminate:
16 com=raw_input('! - >')
17
18 runtime.append(com)
19
20 for c in com:
21 if c.upper()=='H':
22 H()
23 elif c.upper()=='Q':
24 Q()
25 elif c=='9':
26 nine(99)
27 elif c=='+':
28 counter+=1
29 print counter
30 elif c=='!':
31 terminate=1
32 break
33 else:
34 print '\tComando nao-reconhecido: %s' %(c)
35
36 def H():
37 print "Hello, world!!" # eu me recuso a traduzir isso!!!
38
39
40 def Q():
41 print '\n'.join([elem for elem in runtime])
42
43
44 def nine(n):
45 '''Yeah, I always do the things in "the hardest way", so
46 why can't I put it in verbose mode ?) '''
47
48 def bottles(n):
49 if n>99:
50 return '%s garrafas de cerveja' %(str(n))
51 elif n>19:
52 if n%10!=0:
53 return "%s e %s garrafas de cerveja" %(tenths[str(n)[0]], ones[str(n)[1]].lower())
54 else:
55 return "%s garrafas de cerveja" %(tenths[str(n)[0]])
56 elif n>9:
57 return "%s garrafas de cerveja" %(tenths['1'][int(str(n)[1])])
58 elif n>1:
59 return "%s garrafas de cerveja" %(ones[str(n)])
60 else:
61 return "Uma garrafa de cerveja"
62
63 for x in range(n):
64 print "%s no muro, " %(bottles(n-x))
65 print "%s no muro, " %(bottles(n-x))
66 print "%s." %(bottles(n-x))
67 print "Derrube uma, comece de novo, "
68 print "Nao sobrou nenhuma garrafa de cerveja no muro..."
69
70
71 if __name__=="__main__":
72 runtime=[]
73 tenths={'1':['Dez',
74 'Onze',
75 'Doze',
76 'Treze',
77 'Quatorze',
78 'Quinze',
79 'Dezesseis',
80 'Dezessete',
81 'Dezoito',
82 'Dezenove'],
83 '2':'Vinte',
84 '3':'Trinta',
85 '4':'Quarenta',
86 '5':'Cinquenta',
87 '6':'Sessenta',
88 '7':'Setenta',
89 '8':'Oitenta',
90 '9':'Noventa'
91 }
92
93 ones={'1':'Uma',
94 '2':'Duas',
95 '3':'Tres',
96 '4':'Quatro',
97 '5':'Cinco',
98 '6':'Seis',
99 '7':'Sete',
100 '8':'Oito',
101 '9':'Nove'
102 }
103
104 print "\tInterpretador HQ9+\nPython powered(http://www.python.org)"
105 main()
P.S.: Yeah, eu sei que o código tá tosco, mas isso é porque eu sou iniciante em python. Sinta-se à vontade para alterá-lo, mas me avise, assim eu posso saber onde errei. Inclua um atributo co-author no código também :).