Home Forum General Librogame e dintorni Ottimizzatore paragrafi 1.0
Messaggio
  • EU e-Privacy Directive

    This website uses cookies to manage authentication, navigation, and other functions. By using our website, you agree that we can place these types of cookies on your device.

    View e-Privacy Directive Documents

Cerca nel sito

Il Sondaggione!!

Play 2022 e Il Salone del Libro hanno avuto altissime adesioni, la stagione delle fiere sembra essere ripartita alla grande. Ritenete che il momento critico sia passato e che il trend dei librogame sarà di nuovo in forte crescita da adesso in poi?

Assolutamente si, i numeri lo dimostrano, i librogame hanno ripreso in pieno l'ascesa - 17.8%
Ci sarà ancora qualche strascico legato al costo dei materiali, ma il trend è comunque positivo - 17.2%
L'emergenza pandemica è finita, ma la situazione internazionale è complessa e il futuro sarà condizionato da continui alti e bassi - 16.6%
La pandemia tornerà in autunno e con la guerra in Ucraina il settore è destinato a un nuovo stop da cui ripartiranno solo in pochi, i meglio organizzati - 15.9%
È solo un fuoco di paglia. I problemi sono troppi, il settore è destinato a implodere e tornare aglli anni pre-Rinascimento - 16.6%
Ci sono eccessive variabili per lanciarsi in previsioni di qualsiasi tipo - 15.9%

Voti totali: 157

Ottimizzatore paragrafi 1.0

Ottimizzatore paragrafi 1.0

Stanotte avevo poco sonno e mi sono posto un problema.

Sappiamo tutti che spesso la fine del paragrafo non coincide con la fine pagina, e questo obbliga gli impaginatori a inserire piccole immagini tappabuchi, occupando spazio per niente. Non solo: nei casi in cui il paragrafo coincide perfettamente con la fine pagina, il paragrafo successivo non ha bisogno di saltare una riga e quindi si guadagna ulteriore spazio.

Chiariamoci: anche nel peggiore dei casi, non si va oltre un guadagno del 5%. E per un editore serio, non c'è un cambiamento vero fra pubblicare 400 pagine anziché 420. (o così mi pare di aver capito)

Tuttavia, almeno nei corti, ogni riga risparmiata può essere utile. E avere mezza/una pagina in più fa comodo.
Ecco quindi un codice javascript che calcola il modo più efficiente per rimescolare i paragrafi. Lo fa nel modo più stupido possibile: prova combinazioni a caso, finché non trova un risultato soddisfacente.

Non è il massimo, ma testato sul corto che sto scrivendo per "CortiInGioco", ha ridotto le righe da 700 a 679, portandole sotto il massimo.

La prossima volta che mi ubriaco diventerà una feature di Magebook.

Codice:



// Put here the length of each chapter, from the first to the last one
// ie, the first three chapters here are 11, 5 and 18 lines long
const chapters = [
    11,  5, 18, 16,  4, 25,  8, 12, 14,  2,
    16, 30,  9,  6, 26, 11, 12,  3,  9, 11,
    22, 11, 15, 11, 16,  5, 14,  9, 10, 12,
    14, 15,  6, 11, 12, 11,  2, 12, 11, 11,
     6, 17, 25, 15, 24,  9,  3,  5,  4,  5,
]

// length of each page
const pageLines = 29


// index of fixed chapters, ie chapters that won't be touched
const fixed = [1, 39, 17, 24, 50]

// number of times we should run the optimizer
const numberOfTries = 10000






// Pick random key of an object
const randomKey = (obj) => {
    const keys = Object.keys(obj);
    return keys[ keys.length * Math.random() << 0];
}


// Dumb optimizer
const dumbCalculator = (chapters, pageLines, fixed) => {

    let usedLines = 0
    let numberOfChapters = chapters.length

    // Create an object where entries are: chapter number: chapter length
    let c = {}
    chapters.forEach((cLength, i) => { c[i + 1] = cLength })


    let fixedLengths = fixed.map(key => c[key])
    fixed.forEach((chapter) => delete c[chapter]);

    let newChapters = {}


    for(let i = 1; i <= numberOfChapters; i++){

        // Handle fixed chapters
        const fixedIndex = fixed.indexOf(i)
        if(fixedIndex !== -1){
            usedLines += fixedLengths[fixedIndex]
            if((usedLines % pageLines) !== 0) usedLines += 1;
            continue;
        }


        // Handle non-fixed chapters
        const addChapter = (chapter) => {
            newChapters[i] = chapter
            usedLines += c[chapter]
            delete c[chapter]
            if((usedLines % pageLines) !== 0) usedLines += 1;
        }   

        // Check if exists
        const remainingLines = pageLines - (usedLines % pageLines)
        const indexOfPerfect = Object.values(c).indexOf(remainingLines)
        if(indexOfPerfect != -1){
            addChapter(Object.keys(c)[indexOfPerfect])
        }else{
            // choose the key to add completely random
            addChapter(randomKey(c))
        }


    }

    return [usedLines, newChapters]
}




// Try the algorith multiple times, keep best result
let bestLines = 99999999999
let bestChapters = {}

for(let i = 0; i < numberOfTries; i++){
    let [lines, newChapters] = dumbCalculator(chapters, pageLines, fixed)
    if(lines < bestLines){
        bestLines = lines
        bestChapters = newChapters
    }
}

console.log(bestChapters)
console.log(bestLines)

Ultima modifica di: FinalFabbiX
Ago-04-22 03:44:59

FinalFabbiX
Signore del Totoautori 2016
Cavaliere del Sole
ranks
useravatar
Offline
1383 Messaggi
Info utenti nei messaggi
Administrator has disabled public posting

Re: Ottimizzatore paragrafi 1.0

Mi pare una gran figata!

To serve and correct

Mancolista/Doppiolista

gabrieleud
Lo scopavirgole
Principe del Sole
ranks
useravatar
Offline
6449 Messaggi
Info utenti nei messaggi
Administrator has disabled public posting

Info Forum

Statistiche Forum:
 
Totale Discussioni:
5518
Totale Sondaggi:
100
Totale Messaggi:
149717
Totale Messaggi Oggi:
3
Info Utenti:
 
Totale Utenti:
8508
Ultimo Utente Registrato:
Percyfrig