Questa sfida ti è stata data dalla vera (e tragica) ispirazione. Recentemente, la riga dei numeri sulla mia tastiera è stata un po 'sporadica. Le chiavi 1-9
funzionano a volte, ma altre volte non hanno alcun risultato. Come appassionato programmatore, questo è orribile! (Vedi quel punto esclamativo? È così che sai che funzionano in questo momento.) Non solo ho spesso bisogno dei numeri stessi, ma dei simboli!@#$%^&*(
sono completamente inefficaci anche la metà delle volte! Come programmatore C, piuttosto che prendermi del tempo libero dal mio fitto programma di scarabocchiare con il codice per riparare il mio laptop, sono stato più interessato a risolvere il problema. Nel corso delle ultime settimane, lentamente, tutti i letterali numerici nel mio codice sono stati sostituiti con esadecimali in modo da non dover andare in giro alla ricerca di numeri da copiare e incollare. Tuttavia, alcuni numeri non sono facili da digitare senza i tasti 1-9
. Ad esempio, il numero 1
non può essere scritto così semplicemente in esadecimale, e ho fatto ricorso alla sostituzione di 1
s nel mio codice con 0xF - 0xE
. Gli unici tasti che vengono colpiti sono 1-9
, quindi io sostengo pieno uso di simboli come +
, -
e /
. Tuttavia, non posso usare la moltiplicazione o le parentesi, come*
e (
sono spesso rotti. Questo porta alla tua sfida.
Ingresso
Un numero intero, n
a stdin o equivalente della tua lingua. Se lo desideri, l'intero può essere preceduto o seguito da una nuova riga o da un altro carattere di spazio bianco. In alternativa, è possibile ricevere input tramite un argomento della riga di comando.
Il programma dovrebbe rispondere correttamente all'input negativo ed essere in grado di gestire numeri interi con segno a 32 bit.
Produzione
Il tuo programma dovrebbe generare, in una forma osservabile, il modo più breve (in caratteri non bianchi) di scrivere il numero n
come somma, differenza o divisione di uno o più valori esadecimali. Esiste più di un modo per risolvere questo problema e non è necessario che si favorisca un output di uguale lunghezza rispetto a qualsiasi altro.
L'output deve essere nella forma in A % A % A...
cui A
è presente un valore esadecimale che 0x
contiene solo cifre A-F a-f
ed %
è uno dei simboli -+/
. Puoi /
descrivere integer divisione, non virgola mobile.
(Si noti che l'output dovrebbe risultare n
quando si valutano prima le divisioni, da sinistra a destra, quindi le aggiunte e le sottrazioni, da sinistra a destra, come per convenzione.)
Casi test
Input Output
1
0xF - 0xE
(o0xF-0xE
o0xB-0xA
o0xd - 0xc
o0xF/0xF
)15
0xF
255
0xFF
30
0xF + 0xF
Punteggio e regole
Questo è code-golf. Il tuo punteggio preliminare è il numero di byte nel tuo file sorgente.
NON puoi usare nessuna delle cifre 1-9
nella tua fonte.
PUOI usare simboli !@#$%^&*(
nella tua fonte, ma ognuno arriva ad una penalità di +20 al tuo punteggio.
Il programma può essere sostituito da una funzione che accetta n
come argomento purché tale funzione produca una forma di output leggibile dall'uomo. Il valore restituito dalla funzione NON viene conteggiato come output.
Non sono ammesse scappatoie standard .
Il punteggio più basso vince! In bocca al lupo!
Ho fatto qualcosa di formattazione / domande / chiarezza? Fammi sapere! Questa è la mia prima presentazione a questo sito!