}vg0aa@@*45,eQ.:?}0AaG0`NdE`;:?}1;bI%10sB%nM2np`*`%.*#NaBna!*+#@~%@0nG\]:.;:;bI~0-NdEnMtSsP" "sP.tSsP
STDIN üzerinde giriş, STDOUT üzerinde boşlukla ayrılmış çıkış.
Bu, isaacg'nin cevabı ile aynı yöntemi kullanır.
"Okunabilirlik" için yeni satırlı yorumlu sürüm:
}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'deki ilk Snowman çözümü hakkında yorum: Bence dilimi mümkün olduğunca kafa karıştırıcı hale getirme tasarım hedefime ulaşıldı.
Bu aslında çok daha kısa olabilirdi, ama ben bir aptalım ve string -> sayı ayrıştırma için negatif sayılar uygulamayı unuttum. Bu yüzden -
ilk karakter olarak bir olup olmadığını elle kontrol etmek ve varsa kaldırmak zorunda kaldı.