Pedro Barbosa veröffentlichte „Porto" 1977 in seinem Buch „A Literatura Cibernética 1: Autopoemas Gerados por Computador". Barbosa, der bei Abraham A. Moles in Straßburg studiert hatte, war einer der Pioniere computergestützter Literatur in Portugal.
Das Gedicht kombiniert vier Substantive — granita (Granit), saudade (Sehnsucht), pedra (Stein), historia (Geschichte) — mit vier portugiesischen Präpositionen. Das vollständige Programm erzeugt alle 24 Permutationen der Substantive, jeweils mit allen 256 Präpositionskombinationen: 6.144 Zeilen, die ein algorithmisches Porträt der Stadt Porto bilden.
from itertools import permutations, product
def generate_permutations(prepositions, main_words):
for main_perm in permutations(main_words):
for prep_comb in product(prepositions, repeat=4):
line = []
for i in range(len(main_words)):
line.append(prep_comb[i])
line.append(main_perm[i])
print(' '.join(line))
prepositions = ['o', 'da', 'no', 'na']
main_words = ['granita', 'saudade', 'pedra', 'historia']
generate_permutations(prepositions, main_words)
const PREPOSITIONS = ['o', 'da', 'no', 'na'];
const MAIN_WORDS = ['granita', 'saudade', 'pedra', 'historia'];
function pick(arr) {
return arr[Math.floor(Math.random() * arr.length)];
}
// Generate a random subset of permutation lines.
// Full set: 24 permutations × 256 preposition combos = 6144 lines.
// For display, we sample a subset.
function generate(count = 24) {
const lines = [];
for (let i = 0; i < count; i++) {
// Shuffle nouns (Fisher-Yates)
const words = [...MAIN_WORDS];
for (let j = words.length - 1; j > 0; j--) {
const k = Math.floor(Math.random() * (j + 1));
[words[j], words[k]] = [words[k], words[j]];
}
// Random preposition for each noun
const parts = [];
for (let j = 0; j < words.length; j++) {
parts.push(pick(PREPOSITIONS));
parts.push(words[j]);
}
lines.push(parts.join(' '));
}
return lines;
}