sfondo
Ada è un linguaggio di programmazione che non è esattamente noto per la sua terseness.
Tuttavia, la sua sintassi letterale di array può in teoria consentire specifiche di array abbastanza concise. Ecco una semplice descrizione EBNF della sintassi letterale dell'array (passabile a bottlecaps.de :
array ::= positional_array | named_array
positional_array ::= expression ',' expression (',' expression)*
| expression (',' expression)* ',' 'others' '=>' expression
named_array ::= component_association (',' component_association)*
component_association ::= discrete_choice_list '=>' expression
discrete_choice_list ::= discrete_choice ('|' discrete_choice)*
discrete_choice ::= expression ('..' expression)? | 'others'
Ci limiteremo ad array monodimensionali di numeri interi per semplicità. Ciò significa che useremo solo numeri interi per i valori dell'espressione. Forse in una sfida futura potremmo provare qualcosa di più avanzato (come dichiarare variabili e array multidimensionali). Non , non è necessario il golf i letterali interi .
Ecco alcuni esempi di letterali array Ada e una rappresentazione equivalente in stile pitone per chiarezza:
(1, 2, 3) = [1, 2, 3]
(1, others => 2) = [1, 2, 2, ..., 2]
(others => 1) = [1, 1, ..., 1]
(1 => 1, 2 => 3) = [1, 3]
(1|2 => 1, 3 => 2) = [1, 1, 2]
(1 => 1, 3 => 2, others => 3) = [1, 3, 2, 3, 3, ..., 3]
Sfida
L'obiettivo di questa sfida è quello di produrre letteralmente l'array Ada conteggio dei byte più breve per un determinato array di input. Si noti che le matrici Ada possono iniziare da qualsiasi indice sia desiderato, quindi è possibile scegliere ciò che si desidera che l'indice iniziale sia purché ciascun valore sia sequenziale. In questo esempio ho scelto di iniziare da 1, che è idiomatico per Ada, tuttavia puoi scegliere di iniziare da qualsiasi altro numero intero.
Ingresso
Il tuo input sarà costituito da un elenco di numeri interi, in qualsiasi forma sia conveniente.
Produzione
L'output sarà una stringa di testo che rappresenta il valore letterale dell'array Ada più breve valido che rappresenta l'elenco di numeri interi di input. È possibile utilizzare qualsiasi indice iniziale desiderato su questo array, ma la scelta (qualunque essa sia) deve essere specificata nella risposta (l'indice iniziale può anche essere dinamico).
I numeri interi devono essere rappresentati come numeri decimali con segno, come negli esempi. Questa sfida non copre il golf dei valori interi.
Esempi
Ecco alcuni esempi:
Simple: [1, 2, 3] -> (1,2,3)
Range: [1, 1, 1, 1, 1, 1, 1,] -> (1..7=>1)
Others: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1] -> (6=>2,others=>1)
Multiple Ranges: [1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1] -> (6..10|16..20=>2,others=>1)
Tiny Ranges: [1,1,2,2,1,1,1,1,1] -> (3|4=>2,others=>1)
Far Range: [[1]*5, [2]*100, [3]*5] -> (1..5=>1,6..105=>2,others=>3)
Alternation: [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2] -> (1|3|5|7|9|11|13|15|17=>1,others=>2)
Big Number: [1234567890,1,1234567890] -> (2=>1,1|3=>1234567890)
Big-ish Number: [1234567,1,1234567] -> (1234567,1,1234567)
Solo: [-1] -> (1=>-1)
Huge Input: [[0],[1]*1000000000] -> (0,others=>1)
Positional Others: [1, 2, 3, 3, 3, 3, 3, 3] -> (1,2,others=>3)
Range and Choice, no Others: [1,1,1,12,12,3,3,3,3,3,3,3,3,3,3,4] -> (1..3=>1,4|5=>12,6..15=>3,16=>4)
Requisiti minimi
Supporta almeno 100 numeri e input di almeno 256 numeri di lunghezza.
Produrre il risultato corretto per tutti questi input
- Include mettere "altri" alla fine
- Include l'inserimento di un indice per array di singoli elementi
Terminare (preferibilmente su TIO) per ciascuno degli ingressi sopra in meno di un minuto.
Vince la soluzione più breve in byte!
Implementazione di riferimento
Questa implementazione utilizza l'input come array, con ogni carattere che è un numero. Le lettere maiuscole sono costanti speciali per valori di grandi dimensioni. L'argomento del programma è l '"indice iniziale" da utilizzare.
La sezione "codice" nel collegamento TIO è una soluzione corretta al problema, mentre "intestazione" e "piè di pagina" implementano la struttura del test.
106..110=>3,others=>2
sarebbe più lungo) L'ultimo caso deve avere un indice, poiché la grammatica non consente matrici posizionali a singolo elemento ( positional_array ::= expression ',' expression (',' expression)*
)
(1=>1,others=>1)
(1..100000000=>1)
(1|3=>1234567,2=>1)
è un altro output valido per [1234567,1,1234567]
?
(-1)
?