}vg0aa@@*45,eQ.:?}0AaG0`NdE`;:?}1;bI%10sB%nM2np`*`%.*#NaBna!*+#@~%@0nG\]:.;:;bI~0-NdEnMtSsP" "sP.tSsP
STDINでの入力、STDOUTでのスペース区切りの出力。
これは、isaacgの回答と同じ方法を使用します。
「読みやすさ」のために改行付きのコメント付きバージョン:
}vg0aa // get input, take the first char
@@*45,eQ. // check if it's a 45 (ASCII for -) (we also discard the 0 here)
// this is an if-else
: // (if)
?}0AaG // remove first char of input (the negative sign)
0`NdE` // store a -1 in variable e, set active vars to beg
;
: // (else)
?}1 // store a 1 in variable e, set active vars to beg
;bI // active variables are now guaranteed to be beg
%10sB // parse input as number (from-base with base 10)
%nM // multiply by either 1 or -1, as stored in var e earlier
2np`*` // raise to the power of 2 (and discard the 2)
%. // now we have the original number in b, its square in d, and
// active vars are bdg
*#NaBna!*+# // add abs(input number) to the square (without modifying the
// input variable, by juggling around permavars)
@~%@0nG\] // active vars are now abcfh, and we have (0>n) in c (where n is
// the input number)
:.;:;bI // if n is negative, swap d (n^2) and g (n^2+n)
~0-NdEnM // multiply d by -1 (d is n^2 if n is positive, n^2+n otherwise)
tSsP // print d
" "sP // print a space
.tSsP // print g
PPCGに関する最初のスノーマンソリューションの解説:私の言語をできるだけ混乱させるという私の設計目標は達成されたと思います。
これは実際にはもっと短かったかもしれませんが、私はばかで、文字列->数値解析に負の数を実装するのを忘れていました。その-ため、最初の文字としてが存在するかどうかを手動で確認し、存在する場合は削除する必要がありました。