Contesto
Straw Poll è un sito Web pensato per la creazione di sondaggi semplici / informali. Fornito con un elenco di opzioni, l'utente può selezionare le proprie scelte e i voti vengono conteggiati. Ci sono due caratteristiche molto importanti di un sondaggio di paglia:
- È possibile visualizzare i risultati attuali prima di votare
- Spesso è possibile selezionare più opzioni, che vengono trattate come se si votasse più volte, una per ogni opzione.
L'unica cosa più divertente che fare Straw Polls è fare casino con i risultati. Esistono due tipi principali di interruzione:
- Interruzione semplice, in cui si vota per tutte le opzioni
- Interruzione avanzata, in cui scegli strategicamente quali opzioni votare per massimizzare l'effetto.
In questa sfida, scriverai un programma per l' interruzione avanzata .
La matematica
Semplicemente matematicamente, possiamo dire che maggiore è l'entropia dei voti, più un sondaggio è interrotto. Ciò significa che un sondaggio in cui una singola opzione ha tutti i voti non viene affatto interrotto, mentre un sondaggio in cui ogni opzione ha un numero uguale di voti viene interrotto al massimo (essendo questo l'obiettivo finale).
L'entropia di un elenco di numeri [x1, x2, ..., xn]è data dalla seguente equazione di Wikipedia. P(xi)è la probabilità di xi, che è xi / total_num_of_votes. Se un'opzione ha ricevuto zero voti finora, semplicemente non è inclusa nella somma (per evitare log(0)). Per i nostri scopi, il logaritmo può trovarsi in qualsiasi base di vostra scelta.
Ad esempio, l'entropia di [3,2,1,1]è approssimativamente 1.277, usando la base e .
Il prossimo passo è determinare quale modello di voto porta al maggior aumento di entropia. Posso votare qualsiasi sottoinsieme di opzioni, quindi ad esempio il mio voto potrebbe essere [1,0,1,0]. Se questi fossero i miei voti, allora il conteggio finale è [4,2,2,1]. Ricalcolare l'entropia dà 1.273, dando una diminuzione dell'entropia, il che significa che questo è un terribile tentativo di interruzione. Ecco alcune altre opzioni:
don't vote
[3,2,1,1] -> 1.277
vote for everything
[4,3,2,2] -> 1.342
vote for the 1s
[3,2,2,2] -> 1.369
vote for the 2 and 1s
[3,3,2,2] -> 1.366
Da ciò, possiamo concludere che il modello di voto ottimale è [0,0,1,1]dato che dà il maggior aumento di entropia.
Ingresso
L'input è un elenco non vuoto di numeri interi non crescenti e non negativi. Gli esempi includono [3,3,2,1,0,0], [123,23,1]o addirittura [4]. È consentito qualsiasi formato ragionevole.
Produzione
L'output è un elenco (della stessa lunghezza dell'input) di valori di verità e falsità, in cui le verità rappresentano le opzioni per le quali dovrei votare se volessi causare la massima perturbazione. Se più di un modello di voto fornisce la stessa entropia, si può produrre uno di essi.
Criterio vincente
Questo è code-golf, meno byte sono meglio.
Casi test
[3,2,1,1] -> [0,0,1,1] (from 1.227 to 1.369)
[3,3,2,1,0,0] -> [0,0,0,1,1,1] (from 1.311 to 1.705)
[123,23,1] -> [0,1,1] (from 0.473 to 0.510)
[4] -> [0] OR [1] (from 0 to 0)
[7,7,6,6,5] -> [0,0,1,1,1] (from 1.602 to 1.608)
[100,50,1,1] -> [0,1,1,1] (from 0.707 to 0.761)
