Befunge - 37 x 5 = 185 38 x 3 = 114 caratteri
Questo è limitato ai numeri interi poiché Befunge non ha supporto in virgola mobile.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Spiegazione
La più grande caratteristica distintiva di Befunge è che invece di essere un insieme lineare di istruzioni come la maggior parte delle lingue; è una griglia 2d di istruzioni a carattere singolo, in cui il controllo può fluire in qualsiasi direzione.
Il primo &inserisce semplicemente il primo numero. Il controllo reindirizza ve >quindi al percorso principale sulla seconda riga.
~:0`!#v_
Questo inserisce un carattere ( ~), lo duplica ( :), spinge zero sulla pila ( 0), apre i primi due elementi e determina se il secondo è maggiore del primo ( ` sono sorpreso che non puoi usare `` '' per ottenere code backticks. ), inverte la veridicità dell'elemento top ( !), quindi va bene se è zero, in basso altrimenti ( #v_).
Fondamentalmente sta controllando se l'input -1non rappresenta più input.
># $ .# @
Se l'input era -1allora il valore di input duplicato viene scartato ( $), la parte superiore dello stack viene emessa come numero intero ( .) e il programma viene arrestato ( @).
:" "`! #v_
Altrimenti si ripete un processo simile per determinare se l'ingresso è inferiore o uguale a uno spazio. Se è uno spazio, il controllo scende, altrimenti controlla le teste a destra.
^ ># $ .# @#<
Se è uno spazio, viene reindirizzato a sinistra ( <); il programma halt ( @), output ( .) e il reindirizzamento destro ( >) vengono saltati usando #; ma lo scarto viene eseguito per rimuovere lo spazio dallo stack. Alla fine viene reindirizzato fino a iniziare la prossima esecuzione ( ^).
:","`#^_
Se non era uno spazio, lo stesso processo viene utilizzato per dividere se è in [+, *]o [-, \]andando rispettivamente verso destra e verso l'alto.
>~ "*"`#v_&*>
^ >&+
Perché [+, *]è di nuovo diviso per determinare se si tratta di a +o a *. Se +viene indirizzato verso il basso, viene immesso il numero successivo ( &) e vengono aggiunti ( +), quindi il controllo si avvolge e viene reindirizzato fino al percorso principale per il carattere successivo. Se *poi inserisce ( &) e moltiplica ( *), quindi si avvolge direttamente.
/& _ #`&# "-"$# -#<
Perché [-, \]inizia sulla destra, andando a sinistra. La #'s saltare il carattere dopo di loro in modo che il percorso iniziale è "-"`_che determina semplicemente se è -o /. In tal caso, /continua a sinistra per input ( &) e divide ( /). Se lo è, -si dirige a destra, saltando di nuovo i caratteri in modo che si esegua &"-"$-risultando nel numero immesso ( &) il -personaggio che viene spinto nella pila e poi scartato ( "-"$) e quindi la sottrazione calcolata ( -). Il controllo viene quindi reindirizzato al percorso principale.