Sfida:
Sui social network circola un puzzle stupido che recita:
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
Implementare una funzione o un operatore che, quando vengono dati due numeri interi positivi x
e y
simili x > y > 0
, fornisce la risposta corretta come numero intero , in cui le cifre della risposta sono le cifre x * y
seguite dalle cifre di x + y
seguite dalle cifre di x - y
. Molto semplice.
Regole:
- Le scappatoie standard non sono ammesse.
- Questo è code-golf, quindi vince il codice più breve in byte.
- Non è richiesta la convalida dei dati di input . Questo programma potrebbe arrestarsi in modo anomalo o restituire immondizia quando viene fornito un input non valido.
- Puoi utilizzare funzioni e operatori numerici (inclusi numeri interi e virgola mobile, funzioni della libreria matematica e altre funzioni che accettano e restituiscono numeri).
- Puoi utilizzare una funzione che restituisce il numero di cifre di un numero, se applicabile.
- Stai Non permesso usare le stringhe o qualsiasi tipo di concatenazione qualsiasi punto del codice.
- Il risultato può essere restituito o trasferito nello stack, a seconda della lingua. Il risultato deve essere un numero intero, non una stringa.
Codice di esempio:
Il codice seguente crea un operatore diadico denominato X
.
X ← {(⍺-⍵) + ((+ ⍺ ⍵) × 10 * 1 + ⌊10⍟⍺-⍵) + ⍺ × ⍵ × 10 * (2 + ⌊10⍟⍺ + ⍵) + ⌊10⍟⍺- ⍵}
Spiegazione:
In APL, si valuta da destra a sinistra.
⍺ and ⍵
sono rispettivamente l'operando sinistro e destro⌊10⍟⍺-⍵
si legge:floor of log10(⍺-⍵)
. Prima esegue la sottrazione, quindi il logaritmo, quindi il pavimento. Da destra a sinistra log10 viene eseguito per contare le cifre di⍺-⍵
(è necessario sommare 1 in seguito).⍺×⍵×10*(...)
si legge:10 to the (...)th power, multiplied by ⍵, multiplied by ⍺
Quindi,
⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵
è il prodotto, spostato a sinistra dalla somma del numero di cifre della somma e della differenza. Moltiplicando per una potenza di 10 si sposta un numero intero a sinistra.((⍺+⍵)×10*1+⌊10⍟⍺-⍵)
è la somma, spostata a sinistra dal numero di cifre della differenza.(⍺-⍵)
è la differenza Non è necessario spostare qui.X←{...}
è come si definisce un operatore in APL.
Esempi:
8 X 2
16106
5 X 4
2091
9 X 6
54153
GNU dc:
Il codice seguente crea una macro denominata a
:
[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa
Spiegazione:
sx
esy
pop un elemento dallo stack e salvarlo sui registrix
ey
, rispettivamente.lx
ely
carica un elemento dai registrix
ey
rispettivamente e spingilo nello stack.d
duplica l'ultimo elemento nello stack.^
calcola la potenza di due numeri.Z
apre un numero e restituisce il suo numero di cifre. Questo viene fatto perchédc
non ha una funzione logaritmica.[...]sa
memorizza una macro nel registroa
.la
lo carica.x
esegue la macro nella parte superiore dello stack.
Esempi:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153