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 __coautor__ = "Eduardo 'EdCrypt' de Oliveira Padoan (eduardo.padoan@gmail.com)"
11
12 def main():
13 counter = 0
14 end = False
15
16 def inccounter(): counter += 1 # nested scopes
17
18 def finalize(): end = True
19
20 while not terminate:
21 comm = raw_input('! - >')
22
23 runtime.append(comm)
24
25 try:
26 {'H': H,
27 'Q': Q,
28 '9': nine,
29 '+': inccounter,
30 '!': finalize}[c.upper()]() # dictionary dispatch
31 except KeyError:
32 print '\tComando nao-reconhecido: %s' %(c)
33 else:
34 if c == '+':
35 print counter
36 elif c == '!':
37 break
38
39 def H():
40 print "Hello, world!!" # eu me recuso a traduzir isso!!!
41
42
43 def Q():
44 print '\n'.join([elem for elem in runtime])
45
46
47 def nine(n=99):
48 '''Yeah, I always do the things in "the hardest way", so
49 why can't I put it in verbose mode ?) '''
50
51 def bottles(n):
52 if n > 99:
53 return '%s garrafas de cerveja' %(str(n))
54 elif n > 19:
55 if n%10 != 0:
56 return "%s e %s garrafas de cerveja" %(tenths[str(n)[0]], ones[str(n)[1]].lower())
57 else:
58 return "%s garrafas de cerveja" %(tenths[str(n)[0]])
59 elif n > 9:
60 return "%s garrafas de cerveja" %(tenths['1'][int(str(n)[1])])
61 elif n > 1:
62 return "%s garrafas de cerveja" %(ones[str(n)])
63 else:
64 return "Uma garrafa de cerveja"
65
66 for x in range(n):
67 print "%s no muro, " %(bottles(n-x))
68 print "%s no muro, " %(bottles(n-x))
69 print "%s." %(bottles(n-x))
70 print "Derrube uma, comece de novo, "
71 print "Nao sobrou nenhuma garrafa de cerveja no muro..."
72
73
74 if __name__ == "__main__":
75 runtime = []
76 tenths = {'1': ['Dez',
77 'Onze',
78 'Doze',
79 'Treze',
80 'Quatorze',
81 'Quinze',
82 'Dezesseis',
83 'Dezessete',
84 'Dezoito',
85 'Dezenove'],
86 '2': 'Vinte',
87 '3': 'Trinta',
88 '4': 'Quarenta',
89 '5': 'Cinquenta',
90 '6': 'Sessenta',
91 '7': 'Setenta',
92 '8': 'Oitenta',
93 '9': 'Noventa'}
94
95 ones={'1': 'Uma',
96 '2': 'Duas',
97 '3': 'Tres',
98 '4': 'Quatro',
99 '5': 'Cinco',
100 '6': 'Seis',
101 '7': 'Sete',
102 '8': 'Oito',
103 '9': 'Nove'}
104
105 print "\tInterpretador HQ9+\nPython powered(http://www.python.org)"
106 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 :).