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]]
-199
può essere formato dai due numeri precedenti19
e9
, 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]]
94
può essere formato dai due numeri precedenti9
e4
, quindi, è nel gruppo :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
può 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]]
-2134
può essere formato da due numeri precedenti213
e4
(o dei tre numeri precedenti21
,3
e4
, 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]]
44449
può essere formato dai due numeri precedenti quattro volte4
e9
, quindi, è nel gruppo :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]
44
può 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 da213
e4
- due numeri, e non da21
,3
e4
- tre numeri). - Come puoi vedere nell'esempio per intero
1934499
, puoi usare un numero precedente (il9
in questo caso) più volte (simile con l'44449
utilizzo di quattro se4
un9
esempio 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?