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 v
e >
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 -1
non rappresenta più input.
># $ .# @
Se l'input era -1
allora 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.