Introduzione:
Colleziono puzzle intricati. La maggior parte dei puzzle intricati sono prodotti e venduti da aziende cinesi. Le aziende più famose chiedono il permesso ai progettisti di puzzle di produrre i loro progetti e lavorare insieme per un prodotto sul mercato. In questo caso, i progettisti di puzzle sono ovviamente molto felici e orgogliosi che uno dei loro puzzle abbia colpito il mercato.
Esistono tuttavia anche società cinesi che realizzano puzzle a eliminazione diretta. Questi knock-off sono o disegni utilizzati senza il permesso del creatore originale, oppure sono copie decisamente più economiche di puzzle già esistenti.
Sfida:
Determineremo l'originalità dei numeri che vengono "rilasciati" in un ordine specifico (da sinistra a destra † ).
Dato un elenco di numeri interi, raggruppali e generali in base alla loro originalità.
Come viene determinata l'originalità dei numeri?
- Un numero è un duplicato esatto di un numero precedente? Gruppo (meno originale), in cui il gruppo è in coda, dopo tutti gli altri gruppi.
- Un numero è un duplicato di un numero precedente, ma è invece negativo (ovvero il numero originale era , ma ora ; o viceversa)? Gruppo .
- Il valore assoluto del numero può essere formato concatenando uno o più numeri assoluti precedenti e non fa parte dei precedenti gruppi o ? Gruppo , dove è la quantità di numeri distinti utilizzati nella concatenazione (e ).
- Il numero non rientra in nessuno dei gruppi sopra indicati, quindi è completamente unico finora? Gruppo (il più originale), che precede tutti gli altri gruppi.
Questo può sembrare piuttosto vago, quindi ecco un esempio dettagliato :
Input-list: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34è il primo numero, che è sempre originale e nel gruppo . Uscita finora:[[34]]9è anche originale:[[34,9]]4è anche originale:[[34,9,4]]-34è il negativo del numero precedente34, quindi è nel gruppo :[[34,9,4],[-34]]19è originale:[[34,9,4,19],[-34]]-199può essere formato dai due numeri precedenti19e9, quindi, è nel gruppo :[[34,9,4,19],[-199],[-34]]34è una copia esatta di un numero precedente, quindi è nel gruppo :[[34,9,4,19],[-199],[-34],[34]]-213è originale:[[34,9,4,19,-213],[-199],[-34],[34]]94può essere formato dai due numeri precedenti9e4, quindi, è nel gruppo :[[34,9,4,19,-213],[-199,94],[-34],[34]]1934499può essere formato dai quattro numeri precedenti19,34,4, e due volte9, quindi è nel gruppo :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]213è il negativo del numero precedente-213, quindi è nel gruppo :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]3è originale:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]21è originale:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]-2134può essere formato da due numeri precedenti213e4(o dei tre numeri precedenti21,3e4, ma usiamo sempre la minor quantità di concatenare i numeri per determinare l'originalità), quindi è nel gruppo :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134],[-34,213],[34]]44449può essere formato dai due numeri precedenti quattro volte4e9, quindi, è nel gruppo :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]44può essere formato da un singolo numero precedente4, ripetuto due volte, quindi è nel gruppo :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Quindi per l'input [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]l'uscita è [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]].
Regole della sfida:
- L'I / O è flessibile. Puoi inserire un elenco / matrice / flusso di numeri interi o stringhe, inserirli uno per uno tramite STDIN, ecc. L'output può essere una mappa con i gruppi come chiave, un elenco nidificato come esempio e casi di prova in questa sfida, stampati newline separato, ecc.
- È consentito prendere l'elenco di input in ordine inverso (forse utile per le lingue basate su stack). † Nel qual caso il menzionato da sinistra a destra è ovviamente da destra a sinistra.
- Come si può vedere l'esempio per intero
-2134, abbiamo sempre gruppo un numero che è una concatenazione di altri numeri con il meno possibile (formata da213e4- due numeri, e non da21,3e4- tre numeri). - Come puoi vedere nell'esempio per intero
1934499, puoi usare un numero precedente (il9in questo caso) più volte (simile con l'44449utilizzo di quattro se4un9esempio nell'esempio). Tuttavia, vengono conteggiati una sola volta per determinare il gruppo. - Non è consentito avere elenchi interni vuoti nell'output per gruppi vuoti. Quindi test case
[1,58,85,-8,5,8585,5885,518]potrebbe non comportare[[1,58,85,8,5],[518],[5885],[8585],[],[]]invece, dove i gruppi vuoti sono e , e l'esempio sopra potrebbe non comportare[[34,9,4,19,-213,3,21],[1934499],[],[-199,94,-2134,44449],[44],[-34,213],[34]]invece, dove il gruppo vuoto è . - L'ordine dei gruppi è rigoroso (a meno che non si utilizzi una mappa, poiché i gruppi possono quindi essere dedotti dalle chiavi), ma l'ordine dei numeri all'interno di un gruppo può essere in qualsiasi ordine. Quindi
[34,9,4,19,-213,3,21]per il gruppo nell'esempio sopra può essere anche[21,3,-213,19,4,9,34]o[-213,4,34,19,9,21,3]. - Si garantisce che non ci saranno mai numeri che possono essere formati da più di nove numeri precedenti. In modo da non avere alcun gruppi, e la più grande quantità di gruppi possibili è 12:
- Puoi supporre che i numeri interi saranno al massimo di 32 bit, quindi all'interno dell'intervallo
[−2147483648,2147483647].
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Le regole standard si applicano alla tua risposta con le regole I / O predefinite , quindi puoi utilizzare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Le scappatoie predefinite sono vietate.
- Se possibile, aggiungi un link con un test per il tuo codice (ad es. TIO ).
- Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.
Casi test:
Input: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
Output: [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Input: [17,21,3,-317,317,2,3,117,14,-4,-232,-43,317]
Output: [[17,21,3,2,117,14,-4],[-317,-232,-43],[317],[3,317]]
Input: [2,4,8,10,12,-12,-102,488,10824]
Output: [[2,4,8,10,12],[10824],[-102,488],[-12]]
Input: [0,100,-100,10000,-100,1001000]
Output: [[0,100],[10000,1001000],[-100],[-100]]
Input: [1,58,85,-8,5,8585,5885,518]
Output: [[1,58,85,-8,5],[518],[5885],[8585]]
Input: [4,-4,44,5,54]
Output: [[4,5],[54],[44],[-4]]
X + 1è un gruppo speciale per copie esatte edXè un gruppo per altri numeri che può essere formato da copie di un singolo numero, come la sua negazione?