सीजाम, 1051 827 643 569 545 407 327 279 235 233 229
''"','#'C'J'a'm',' qYew::-Yf#:+e#'''''''''"
f{-ci'(*''2*\}'^,40>"*/:N"-"][ZZ[\^__`bcdgimpstsz{}~~~"
उपरोक्त कार्यक्रम वास्तविक स्रोत कोड उत्पन्न करता है, जो 1,179,112 बाइट्स लंबा है।
परिक्षण
जावा दुभाषिया का उपयोग करते हुए , स्रोत कोड को उत्पन्न और परीक्षण किया जा सकता है:
$ alias cjam='java -jar cjam-0.6.5.jar'
$ cjam gen.cjam > diff.cjam
$ cksum diff.cjam
896860245 1179112 diff.cjam
$ cjam diff.cjam < diff.cjam
#CJam, 229
वैकल्पिक संस्करण
36 अंकों की लागत पर - 265 के अंतिम स्कोर के लिए - हम स्रोत कोड को 99.92% कम कर सकते हैं:
'''()))))(''''(((('''())))))))))))))))))))))))))))('''()))))))))))))))))))))))))))))))))))('''())))))))))))))))))))))))))))))))))))))))))))))))))))))))))('''())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('''()))))(''''((((((('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))('()))))))))))))))))))('()))))))))))))))))))('())))))('())))))))))))))))))))))))))))))))))))))))))))))))))('()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(''(((('()))))))))))))))))))('())))('())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(''((((''''''''''''''''''()+,-.0123456789;<=>?@ABCDEFGHIJKLMOPQRSTUVWXYZ[\]][ZZ[\^__`bcdgimpstsz{}~~~
आप सीजेएम दुभाषिया में इस संस्करण को ऑनलाइन आज़मा सकते हैं ।
विचार
हम कोड निष्पादित करना चाहते हैं
'#'C'J'a'm',' qYew::-Yf#:+
स्कोर को यथासंभव कम रखना। इसे प्राप्त करने के लिए, हम उस स्ट्रिंग कैरेक्टर को कैरेक्टर द्वारा बनाने जा रहे हैं (रिजल्ट से पहले और बाद में कुछ ऑप्सन)।
सौभाग्य से, '
(पुश वर्ण शाब्दिक), (
(घटाना) और )
(वृद्धि) लगातार ASCII वर्ण हैं, इसलिए मनमाने पात्रों को धकेलना अपेक्षाकृत सस्ता है।
ASCII वर्णों को बाद में '
धकेला जा सकता है '()…)(
, जहां )
कोड बिंदु पर निर्भर करता है।
उदाहरण के लिए, के +
रूप में धकेल दिया जा सकता है '())))(
। के बीच की दूरी '
और (
, और (
और )
1. अनुगामी है )(
एक दूसरे को रद्द; उनका एकमात्र कार्य '
लगातार पात्रों के साथ निम्नलिखित (अगले चरित्र के अनुरूप) के लिए मार्ग प्रशस्त करना है ।
इस तरह से धकेल दिए गए वर्ण 4 अंकों से स्कोर बढ़ाएंगे।
ASCII वर्णों को पहले '
धक्का दिया जा सकता है ''(…(
, जहां (
कोड बिंदु पर निर्भर करता है।
उदाहरण के लिए, के #
रूप में धकेल दिया जा सकता है ''((((
। के बीच की दूरी '
और (
1 है।
इस तरह से धकेल दिए गए वर्ण 2 अंकों से बढ़ाएंगे।
''(…(
वास्तव में सभी ASCII पात्रों के लिए काम करता है , क्योंकि चरित्र 16 बिट चौड़ा है और चारों ओर लपेटता है। उदाहरण के लिए, 65,532 के बाद के +
रूप में धकेल दिया जा सकता है ।''
(
इस तकनीक का उपयोग कोड के 1.2 मेगाबाइट संस्करण में किया जाता है।
चरित्र '
को धक्का दिया जा सकता है ''
, जिससे स्कोर अप्रभावित रहता है।
कोड
e# Push these characters on the stack: ','#'C'J'a'm',' qYew::-Yf#:+e#'''''''''
''
'()))))(
''
''((((
''
'())))))))))))))))))))))))))))(
''
'()))))))))))))))))))))))))))))))))))(
''
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''
'()))))(
''
''(((((((
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
'()))))))))))))))))))(
'()))))))))))))))))))(
'())))))(
'())))))))))))))))))))))))))))))))))))))))))))))))))(
'()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''((((
'()))))))))))))))))))(
'())))(
'())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(
''((((
''
''
''
''
''
''
''
''
''()
+ e# Concatenate the two topmost single quotes.
, e# Push the length of the resulting string (2).
-.0123456789 e# Push that number.
; e# Discard it from the stack.
< e# Compare a single quote with 2. Pushes 0.
= e# Compare a single quote with 0. Pushes 0.
> e# Compare a single quote with 0. Pushes 1.
? e# Ternary if. Discards a single quote and 1.
@ e# Rotate the remaining three single quotes.
ABCDEFGHIJKLMOPQRSTUVWXYZ e# Push 25 items on the stack.
[\] e# Swap the last two and wrap them in an array.
e# So far, we've pushed the elements of "','#'C'J'a'm',' qYew::-Yf#:+e#'''"
e# followed by the elements of [10 11 12 13 14 15 16 17 18 19 20]
e# and ["" "" "" 3.141592653589793 "" "" " " 0 0 0 -1 1 [3 2]].
] e# Wrap the entire stack in an array.
[ e# Begin an array. Does nothing.
ZZ e# Push 3 twice.
[ e# Begin an array. Does nothing.
\^ e# Swap both 3s and push the bitwise XOR. Pushes 0.
__ e# Push two copies.
` e# Inspect the last copy. Pushes the string "0".
b e# Convert "0" from base 0 to integer. Pushes 48.
cd e# Cast 48 to Character, then Double. Pushes 48.0.
gi e# Apply the sign function, then cast to integer. Pushes 1.
mp e# Check 1 for primality. Pushes 0.
s e# Cast the result to string. Pushes the string "0".
e# We now have three elements on the stack: an array, 0, and "0"
t e# Set the element at index 0 of the array to the string "0".
s e# Cast the array to string.
e# This pushes the string consisting of the characters
e# 0,'#'C'J'a'm',' qYew::-Yf#:+
e# and
e# e#'''10111213141516171819203.141592653589793 000-1132
e#
e# When evaluated this does the following:
e# 0, Push an empty array. Does not affect output.
e# '#'C'J'a'm',' Push the characters of "#CJam, ".
e# q Read all input from STDIN.
e# Yew Push the overlapping slices of length 2.
e# ::- Reduce each pair of characters to their difference.
e# Yf# Square each difference.
e# :+ Add the results.
e# e#… Comment. Does nothing.
z e# Zip. This wraps the string on the stack in an array.
{}~ e# Execute an empty block.
~ e# Unwrap the array.
~ e# Evaluate the string.