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