違いは変わらないはず


40

あなたの会社は最近、非常に熱心な新しいシステム管理者を雇いました。彼らは、コンピューターの画面を見るだけではかなり制限があると感じているので(つまり、60Hzのリフレッシュレートでは不十分です)、CPUデータバスをDACに接続し、サーバールームを介してスピーカーで再生して聞くことができます20kHzまで。1つの問題:彼らは電気技師ではなく、システム管理者であり、スピーカーのセットアップが壊れ続ける。ソフトウェアエンジニアがメインフレームでコンパイルするコードのバイト値の急激な変化が原因であると彼らは考えた。システム管理者は、スピーカーのセットアップに最も優しいコードを誰が作成できるかを確認するために、少し競争を行っています。

チャレンジ

あなたの使命は、連続するバイト間で可能な限り差のない、選択した言語でプログラムまたは関数を作成することです(計算セクションを参照)。このプログラムには、独自のスコアを計算するタスクがあります。

入力

ASCII文字列、stdinまたは言語に最も近いもの、または関数を作成する場合は関数入力として。プログラムはスコアを計算するための入力として自分自身を取得する必要があるため、プログラムにUnicodeが含まれている場合は、Unicodeをサポートする必要があります。それ以外の場合は、ASCIIで十分です。入力は少なくとも2バイト長であると想定できます。

計算

文字列の各文字は、ASCII標準を使用して、同等の数値に変換されます。次に、すべての文字の差が最初に2乗されてから合計されます。たとえば、文字列abdはのスコアを取得し1²+2²=5ます。

出力

出力はエントリのタイトルになります。つまり、先頭に#改行を付けるか、改行と-ダッシュ(ダッシュ)を追加する必要があります。次に、プログラミング言語の名前を出力し、その後にコンマ、スペース、計算結果を表す整数を出力します。例えば

#C++, 98

有効な出力になります。出力はstdout、言語または同等の最も近い言語で、または関数の戻り値として提供する必要があります。

得点

スコアは、プログラムによって計算された値になり、プログラム自体が入力になります。

編集:今すぐ改行を処理する必要があります。

ここではスコア計算を検証するPythスクリプトです。


1
プログラムは、独自のコード以外のものを解釈する必要がありますか?そして、明確にするために、2つの連続した等しい文字の値は0ですか?
ダニエルM.


1
@bopjesvlaいいね。任意の文字列ですが、それらが宇宙に収まると仮定することもできます。または、コンピューター上で、そのことについて。
-Sanchises

11
単項勝利で有効な回答を作成した最初の人!
-ETHproductions

3
今では遅すぎますが、単項式の回答を防ぐための1つのオプションは、等しい文字の違いを1として定義することです。また、ロジックが少し面白くなります。
レトコラディ

回答:


19

CJam、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バイトの実際のソースコードを生成します。

テスト中

Javaインタープリターを使用して、ソースコードを次のように生成およびテストできます。

$ 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{}~~~

このバージョンは、CJamインタープリターでオンラインで試すことができます。

アイディア

コードを実行したい

'#'C'J'a'm',' qYew::-Yf#:+

スコアをできるだけ低く保ちます。これを達成するために、文字列を文字ごとに(前後にいくつかのノーオペレーションを使用して)構築し、結果を評価します。

幸いなことに、'(プッシュリテラル)、((デクリメント)、)(インクリメント)は連続したASCII文字なので、任意の文字をプッシュするのは比較的安価です。

  • 後のASCII文字'はとしてプッシュできます'()…)(。ここでの数は)コードポイントに依存します。

    たとえば、+としてプッシュできます'())))(。間の距離'(、と()末尾が1である)(、互いに相殺 それらの唯一の機能は'、連続する文字で次の文字(次の文字に対応する)への道を開くことです。

    この方法でプッシュされたキャラクターは、スコアを4ポイント上げます。

  • 前のASCII文字'はとしてプッシュできます''(…(。ここで、の数は(コードポイントに依存します。

    たとえば、#としてプッシュできます''((((。間の距離'とは、(1です。

    この方法でプッシュされたキャラクターは、スコアを2ポイント上げます。

  • ''(…(Characterは16ビット幅でラップアラウンドするため実際にはすべての ASCII文字に対して機能します。たとえば、としてプッシュでき、その後に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.

6
...........ワット
DLosc

この言語は、まさにこの挑戦のために構築されたように見えます。いいね!
ドミノ

3
くそー。CJamはしばしば「初期の」記号と「後期の」文字が混在しているため、CJamを不利な状態に陥れるような挑戦をしたと思いました。しかし、nooooo、あなたは再び現れ、それを台無しにします...乾杯!
-Sanchises

7

ハスケル、152827 95742 91196 83921 77447 71742

a=(.);_ZYXWVUTSRQPONMLKJIHGFEDCBA=("#Haskell, "++)`a`show`a`sum`a`fmap(^2)`a`(tail>>=zipWith(-))`a`fmap fromEnum`a`(""++)

使用法(注:"エスケープする必要があります):

_ZYXWVUTSRQPONMLKJIHGFEDCBA   "a=(.);_ZYXWVUTSRQPONMLKJIHGFEDCBA=(\"#Haskell, \"++)`a`show`a`sum`a`fmap(^2)`a`(tail>>=zipWith(-))`a`fmap fromEnum`a`(\"\"++)"

"#Haskell, 71742"

""Haskellインタープリターが型を理解するのを助けるために、入力文字列に空の文字列を追加します。それなしでは型推論は失敗し、コードは多態的です。残りはいつものようにビジネスです:各文字をASCIIにマップし、隣人の違いのリストを作成し、言語名を平方し、合計し、追加します。


6

> <>、30227

0&ii:0(?v:@-:*&+&20.
'#><>, '<;n&oooooo

ああ、タイトルは私のスコアを2倍にしました。私のプログラムの言葉で言えば、n&oooooo!これを改善するためにしばらく時間がかかります。また、オンラインインタープリターに改行を入力することは実際にはできないため、このスコアがオフになる可能性があることも知っています。

決して完全に最適化されたが、かかるフル > <>内のコマンドの(少なくともASCII文字の面で)相対的な近接のいくつかの利点を。改行を入力として簡単に送信できなかったため、Pythスコアチェッカーを使用しましたが、使用した一連のランダムテストケースに一致するため、それに関しては問題ありません。

これは、スコアが30353であるものです(1行なので正しいはずです):

0&l1=66+*77++0.$:@-:*&+&10.' ,><>#'oooooo&n;

ニース、> <>の競争力のあるエントリー!
Sanchises

5

Java、66465 65506 62434

驚くほど短い。文字列の代わりにchar配列を受け入れます。

ABCD->{int A98=0,GFEDCBA=1,A987;for(;GFEDCBA<ABCD.length;A98=A98+(A987=ABCD[GFEDCBA]-ABCD[GFEDCBA++-1])*A987-0);return"#Java, "+A98;}

プログラムを使用して、最適な変数名を生成しました。


これをプログラムでどのように使用しますか?(私はまだJavaの8の機能を備えた完全に慣れていないよ)
aditsu


ああ、だからあなたはそれのためにターゲット機能インターフェースを定義しなければならない...正確にファーストクラスのオブジェクトではない。
-aditsu

@aditsu必要に応じてFunction <char []、String>も使用できます。
TheNumberOne

なるほど… ((Function<char[],String>) ABCD->{…}).apply(…)、ありがとう。これらのラムダは、型コンテキストなしでは非常に不完全なようです。
-aditsu

4

K5、25478

"#K5, ",$+/1_{x*x}'-':

非常にシンプルなソリューション。これは、文字列を介して入力を受け取る関数です。


1
@TimmyD修正!!
kirbyfan64sos

4

Windows PowerShell ISEホスト、62978 63894 67960 77050

PARAM($4)($4.LENGTH-2)..0|foreach{$9=+$4[$_]-$4[$_+1];$0+=$9*$9};'#'+$HOST.NAME+', '+$0

編集- $A変数を取り除き、代わりに文字列を逆方向にカウントし、いくつかのキーワードをCAPSに変換することにより、いくつかのポイントを保存しました

Edit2- $($HOST.NAME)代わりにPowerShell

Edit3-変数名を交換することでさらにポイントを節約し、出力の生成方法を変更しました。

数字で名前が付けられた変数を使用します。変数は「近い」$ため、ペナルティは少なくなります。

通常のゴルフ技術を使用しないのは興味深いことです。例えば、|%{$一方で、22534で|foreach{$唯一の8718です。

これはおそらく、テクニックを変えずに最適に近いでしょう。


1
これはまさに私が望んでいたことでした。乾杯!
Sanchises

4

MATLAB、19214 39748 39444 38785 37593

@(A9876543210)sprintf('#MATLAB, %d',diff(A9876543210)*diff(A9876543210'))

差異カウントをさらに削減してくれたLuis Mendoに感謝します!

入力変数名を変更してノイズカウントを削減してくれたNumberOneに感謝します!

仕組み

  1. ansMATLABの既定の変数に格納されている匿名関数を宣言します
  2. この関数は、格納されている文字列を受け取り、文字列のA9876543210隣接する平方差の合計を出力します。
  3. diff配列内のペアワイズ隣接差分を検出し、の配列を生成しlength(A9876543210)-1ます。diff文字列配列で使用することにより、これは配列にキャストされ、double各文字のASCIIコードが生成され、連続するペアの差が別の配列になります。
  4. 差の二乗和を見つけるには、この差の配列と転置した内積を単純に取得します。diff(A9876543210)'実際に行うとノイズが発生しますA9876543210.'(Luis Mendoに感謝!)
  5. 結果は画面に出力されます。

PPCGでは、名前のない関数を許可するのが普通です。削除できますA=
ルイスメンドー

また、norm(diff(B))^2短いです
ルイスメンドー

@LuisMendo-試しました。それは科学的記法を印刷し、を尊重しません%d
rayryeng-モニカを復元15年

なぜB変数名として使用するのですか?A=@(A)...は有効なMATLABですA
-Sanchises

3
A-> A9876543210
TheNumberOne

4

QBasic、38140

叫び声のシンタックス

LINE INPUT A9876543210$:AAA=ASC(A9876543210$):WHILE A<LEN(A9876543210$):AA9876543210=AAA:A=1+A:AAA=ASC(MID$(A9876543210$,A)):A98765432100=A98765432100+(AA9876543210-AAA)*(AA9876543210-AAA):WEND:?"QBasic,";A98765432100

QB64でテスト済み。)

これは、文字列を入力し、答えを出力する完全なプログラムです。ここでの唯一の制限は、プログラムが複数行の入力を受け付けないことです(LINE INPUT1行であれば何でも処理できます)。

難読化解除:

LINE INPUT line$
b=ASC(line$)
WHILE i<LEN(line$)
    a=b
    i=i+1
    b=ASC(MID$(line$,i))
    score=score+(a-b)*(a-b)
WEND
PRINT "#QBasic,"; score

便利なことに、複数文字の文字列をASC渡して最初の文字のASCII値を提供します。また、便利なことに、数値変数はゼロに自動初期化されます。


QBasicでコーディングしたことがないので、間違っていても許してくれますが、変数を大文字に置き換えて余分なポイントを節約することは可能でしょうか?
ASCIIThenANSI

@DLoscああ、OK。難読化を解除したバージョンを実際のプログラムとして読んでいた。:|
ASCIIThenANSI

3

Python 2、91026

lambda A:"#Python 2, "+`sum((ord(A9876543210)-ord(A98765432100))**2for A9876543210,A98765432100 in zip(A,A[1:]))`

文字列を取り、スコアを返す匿名関数を定義します。オンラインでお試しください

このほとんどは非常に簡単な機能実装です。zipを使用AA[1:]て文字ペアのリストを取得し、ords、square、およびsumをジェネレーター式で減算します。

ジェネレータ式内部の二つの変数がしか次の文字が続いていることを確認します),とスペース。これらの3つはすべて非常に低いASCII値を持っているため、可能な限り低いASCII値の文字で各変数を終了する必要があります。Pythonで変数を終了できる最小の文字は0です。さらに、1つの大きなジャンプを2つの小さなジャンプに分割する必要があるすべての機会はスコアを下げA0ます。コストは289 ですが、わずかA90145でA9876543210あり、わずか73です。

(このアプローチラムダ変数を助けませんでしたA。おそらく[、1回の出現でその後に続くためです。


3

JSFuck、144420642

ビルド元:

t=arguments[0];n=0;for(u=1;u<t.length;++u)n+=(f=t.charCodeAt(u)-t.charCodeAt(u-1))*f;return'#JSFuck, '+n

これをJSFuck.comの小さな入力ボックスに貼り付けて、JSFuckにコンパイルします。結果は112701文字の長さのスクリプトなので、ここに置くことはできません。このスクリプトの最後の2文字は括弧で、入力を間に入れます。

...)[+!+[]])('abd')

コンピューター上でプログラムを評価するには、プログラムがほぼ20秒かかります。


説明

これに取り組む時間が増えたので、座って変数名を最適化しようとしました。使用する価値のある変数名をスコア順に示します。

u     ([][[]]+[])[+[]]                    17237
n     ([][[]]+[])[+!+[]]                  17437
f     (![]+[])[+[]]                       18041
t     (!![]+[])[+[]]                      18041
a     (![]+[])[+!+[]]                     18241
r     (!![]+[])[+!+[]]                    18241
d     ([][[]]+[])[!+[]+!+[]]              23405
N     (+[![]]+[])[+[]]                    23669
e     (!![]+[])[!+[]+!+[]+!+[]]           29217
i     ([![]]+[][[]])[+!+[]+[+[]]]         33581
l     (![]+[])[!+[]+!+[]]                 24209
s     (![]+[])[!+[]+!+[]+!+[]]            29217
uu    ([][[]]+[])[+[]]+([][[]]+[])[+[]]   36983

JSFuckに翻訳したJavaScriptは次のとおりです。

score = 0;
for (u = 1; u < input.length; ++u)
  score += (difference = input.charCodeAt(u) - input.charCodeAt(u-1)) * difference;
return '#JSFuck, ' + score;

JSFuck.comの翻訳者を詳しく見て、その評価機能がどのように機能するかを考えました。[ソースの評価]をオンにすると、コードは自己実行型のJSFuck関数になります。ただし、入力を取得するには、関数内からarguments [0]にアクセスする必要があります。これにより、最終的なJSコードが...

t=arguments[0];n=0;for(u=1;u<t.length;++u)n+=(f=t.charCodeAt(u)-t.charCodeAt(u-1))*f;return'#JSFuck, '+n

(以前のバージョンのスコアがこれよりも低いのはなぜかと思っているのですが、これはJSとして評価する必要のある文字列を返すJSFuckプログラムであったためです。これも投稿に残しなかった理由です)


あなたabsは不要です。私はそれが違いを生むかもしれないと思う... :)
Sanchises

6
スコアが混乱していることがわかりました。スペースを削除する必要があります。特にあなたのプログラムの出力はJSFuck, 102280181
mbomb007

@sanchisesは確かに、私は実際に最初に正方形2を置くことを忘れていました。それがMath.absがあった理由です。修正します。
ドミノ

@ mbomb007ああ、それでは大丈夫、それも修正します。
ドミノ

3

CJam、23663 19389 11547

"#CJam,"32A;clYew[]ULC;;;;::- 0$.*:+

オンラインで試す

これは、キャラクターを戦略的に追加することでほぼ無限にプッシュできるように感じ始めています。しかし、私はここでリターンが減少するポイントに到達し始めていると思うので、今のところ停止します。たとえば、私が持っているULC;;;場合、アルファベット全体を後方に使用してから26を使用できます;が、ゲインはますます小さくなります。

私が残した最大のギャップは、最初の文字列mとの間,です。私はそれを取り除くために合理的なものを見つけていません。方法があると確信しています。しかし、限界までプッシュすると、デニスのソリューションのように見えるかもしれません...


3

JAVASCRIPT、33911

$0123456789ABCDEFGHIJKLMNOPQRS=>/**/('#')+('JAVASCRIPT,')+(" ")+(($)/**/=0,($0123456789ABCDEFGHIJKLMNOPQRS[`split`]``[`map`]/**/(($$,$$$)/**/=>/**/($)/**/=Math[`pow`]/**/($0123456789ABCDEFGHIJKLMNOPQRS[T=`charCodeAt`]/**/($$$)+-($0123456789ABCDEFGHIJKLMNOPQRS[T]/**/(($$$)/**/>=6-5?/**/($$$)+-1:0.)),2)+($))),($))

これは、私がこれまでコードゴルフで行った中で最も愚かな最適化の1つです...

「コメントスパム」の提案に対するニールの小道具= P


/**/適切な場所に挿入するだけで5180を節約できると思います。
ニール

3

JAVASCRIPT、31520

この解決策は、他の解決策とは大きく異なり、非常にばかげていたので、それが自分自身の答えに値すると感じました。

A=>/**/(($)/**/=/**/(''),('000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000100000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010/-,+*)(')/**/[`split`]``[`reduce`]/**/(($$,$$$,$$$$)/**/=>/**/($$$)/**/>7.-07?/**/(($)+=/**/((/**/String[`fromCharCode`]/**/)(($$$$)+-($$))),($$$$))/**/:/**/($$)),/**/eval/**/($))

これは7306文字で、そのほとんどはその0/1文字列にエンコードされた実際のプログラムであり、残りは単にそれをデコードするためのものです。各「1」から前の「1」のインデックスを引いたインデックスを取得して、必要な文字値を取得します。次に、結果の文字列を実際の関数に評価します。実際の関数は、本質的に問題を解決するための標準的なゴルフプログラムです(約105文字だけです)。


2

R、68911 57183 53816 52224

STDINから文字列を取得し、それをraw経由で整数に変換します。結果のベクトルを差分、二乗、合計します。結果は文字列として返されます。変数名のヒントをくれた@nimiに感謝します。

'&&'=sum;'&&&'=diff;'&&&&'=as.integer;'&&&&&'=charToRaw;'&&&&&&'=readline;'&&&&&&&'=paste;'&&&&&&&'('#R,','&&'((A='&&&'('&&&&'('&&&&&'('&&&&&&'()))))*A))

@nimiそれをありがとう、それを短く保つためにそれを2つ立ち往生しました:)
MickyT

2

Mathematica、33552

A=ToExpression;A@ExportString[A@Characters@(**)"001000100010001101001101011000010111010001101000011001010110110101100001011101000110100101100011011000010010110000100000001000100011110000111110010101000110111101010011011101000111001001101001011011100110011101011011001000110010111000100011001001100100000001000100011010010110011001100110011001010111001001100101011011100110001101100101011100110100000001010100011011110100001101101000011000010111001001100001011000110111010001100101011100100100001101101111011001000110010101000000001000110101110100100110"(**),(**)"Bit"(**)]

このコードは、入力文字列の「ノイズ」を計算する名前のない関数に評価されます。バイナリデータのASCII表現が本質的に「ノイズレス」であるという事実を利用します。表示されるバイナリデータは文字列です

"#Mathematica, "<>ToString[#.#&@Differences@ToCharacterCode@#]&

これは、それ自体で有効な答えであり、37848を獲得しました。

ほかのすべて

A=ToExpression;A@ExportString[A@Characters@(**)"001..110"(**),(**)"Bit"(**)]

バイナリ文字列をデコードしてMathematicaコードとして解釈するだけです。Mathematicaの空のコメント(**)は非常に「低ノイズ」であり、実際に"s からノイズを除去することに注意してください。


2

Java8:117170 100508 99062 98890

ラムダ式と変数のインライン割り当てにより、このコードを少し短くすることができます。

A->{int B=0,D=0,E=0;char[] C=A.toCharArray();for(;D<C.length-1;)B+=(E=C[D]-C[++D])*E;return"#java, "+B;}

A-> A9876543210; B-> 0123456; C-> A; D-> AA; E-> 0123456789
TheNumberOne

2

Java、129300 128400 110930 106581 105101

B->{int A=0,C=A;char[]Z=B.toCharArray();for(;++C<Z.length;A=A+(Z[C]-Z[C-1])*(Z[C]-Z[C-1]));return\"#Java, \"+A;}

この課題により、実際には、最短の解決策を見つけるよりも、使用するキャラクターと最適化について深く考えるようになりました。私は番号を下げるために働き続けます。

これはラムダ関数でありB、関数を表す文字列です。"これを文字列として渡すときは、引用符()をエスケープすることを忘れないでください。


2

ピス、16391

++C38828542027820dsm^-ChdCed2,Vztz

ここで使用される唯一の注意点#Pyth,は、文字列自体よりもはるかに安いbase-256エンコーディングです。

++C38828542027820dsm^-ChdCed2,Vztz    Implicit: d=' ', z=input()
                             ,Vztz    Pair each char in the input with its neighbour
                   m                  Map d in the above to:
                      Chd               ASCII code of 1st char
                         Ced            ASCII code of 2nd char
                     -                  Difference between the two
                    ^       2           Squared
                  s                   Take the sum
  C38828542027820                     '#Pyth,'
++               d                    '#Pyth,' + ' ' + result, implicit print

2

M、47033 52798

A9876543210(A9876543210) F AA9876543210=2:1:$L(A9876543210) S AAA9876543210=$A($E(A9876543210,AA9876543210-1))-$A($E(A9876543210,AA9876543210))**2+AAA9876543210
    Q "#M, "_AAA9876543210

これを使用するには、次のように引用符と「エスケープ」空白文字(MUMPSで重要です!)をエスケープする必要があります。

>$$A9876543210^MYROUTINE("A9876543210(A9876543210)"_$C(9)_"F AA9876543210=2:1:$L(A9876543210) S AAA9876543210=$A($E(A9876543210,AA9876543210-1))-$A($E(A9876543210,AA9876543210))**2+AAA9876543210"_$C(10,9)_"Q ""#M, ""_AAA9876543210")
#M, 47033

「M」は「MUMPS」の別名であることに注意してください。実務家の間ではどちらが正しいかについて意見の相違があります。当然、ここでは短いオプションを選択しました。


AAAAを初期化してはいけませんか?
SSH

また、オペレーターの優先順位がないため、S AAA = $ A($ E(A、AA-1))-$ A($ E(A、AA))** 2 + AAAだけで、より低い値を与えることができますスコア
SSH

@SSH関数を呼び出す前に、きれいなシンボルテーブルを想定しています(つまり、NEW詰め込む必要はありません)。そのため、AAAA(今AAA9876543210)で算術を開始すると、強制されます0(Caché実装の詳細にすぎないのでしょうか?テストするGT.Mのインストールがありません)。オペレーターの優先事項に関する適切な呼びかけ。私は、純粋に左から右への操作という観点から考えることは常に難しいと感じています。(Mにはべき乗演算子があることも忘れていました
。CRUD

いいね!また、左から右への実行のため、** 2の前に括弧は必要ありません
SSH

@SSHどうもありがとう。実際に測定したバージョンにはないため、スコアは同じです。
戦神

1

ルビー、118402

puts "#Ruby, #{a=0;aa=nil;File.read(ARGV[0]).each_byte{|aaa| aa||=aaa;a+=(aaa-aa)**2;aa=aaa};a}"

などのコマンドラインを介してファイルを読み込みますruby diff.rb /path/to/file。改善する余地があり、それは私が現在取り組んでいるものです。


1

C ++ 166345

void n(){int b=0,c,d;string a;cin >>a;for(c=1;c<a.length();++c){d=(a[c]-a[c-1]);b+=d*d;}cout<<"#C++, "<<b;}

1

Perl、93556

chomp($A=<>);$AAA=$AAAA=0;foreach$AAAAA(split'',$A){$AA=ord($AAAAA);$AAA+=($AAAA-$AA)**2 if($AAAA!=0);$AAAA=$AA}print'#Perl, '.$AAA

これをもう少し減らしてみます。

これは、中括弧(ことが判明した{}、ASCII 123および125)とアンダースコア(_他のすべての文字が、私はフォーマットされた理由である、範囲30-70の周りにあることから、ASCII 95)は非常に高価でありif、私が行った方法を、そして$AAAAAPerlの最愛の人の代わりに使用している理由$_

悲しいことに、シンボルを含むすべての変数は読み取り専用であるため、$#やなどの組み合わせを利用することはできません$$


1

F#、136718 130303

let(A)=Seq.map;
(stdout.Write(Seq.sum(A(fun(AA)->AA*AA)(A((<||)(-))(((Seq.pairwise(A(int)(stdin.ReadToEnd())))))))))

\n後にあり;ます。


1

POSIXシェル、172026

{ while IFS= read -N 1 A; do A1=$(printf %d \'"$A");test "$A1" -eq 0 && break;case $A11 in "")A111=0;;*)A111=$((A1-A11));;esac;A11="$A1";A1111=$((A111**2+A1111));done;echo "# POSIX Shell, $A1111";}

残念なことに、Pythチェッカーと同じ結果を得ることができません(178386)...


1.「シェル」はプログラミング言語ではありません。これはBashのように見えます。2. STDINから簡単に読み取ることができます。ソースコード自体を読む必要はありません。
デニス

@Dennis Thanks、edited ...同じ結果は得られませんが、バグがあるかもしれません(少なくとも一度は同じ結果が得られましたが、「圧縮」バージョンではありません)...
Alois Mahdal

1

ルア、171078 117896

ゴルフ:

A=string AA=A.sub AAA=io.read()AAAA=#AAA AAA=AAA..AA(AAA,AAAA,AAAA)AAAAA=0 AAAAAA=A.byte for AAAAAAA=1,AAAA do AAAAAAAA=AAAAAA(AA(AAA,AAAAAAA,AAAAAAA))-AAAAAA(AA(AAA,AAAAAAA+1,AAAAAAA+1))AAAAA=AAAAA+AAAAAAAA*AAAAAAAA end print(AAAAA)

ゴルフをしていない:

A=string 
AA=A.sub 
AAA=io.read()
AAAA=#AAA 
AAA=AAA..AA(AAA,AAAA,AAAA)
AAAAA=0 
AAAAAA=A.byte 
for AAAAAAA=1,AAAA do 
    AAAAAAAA=AAAAAA(AA(AAA,AAAAAAA,AAAAAAA))-AAAAAA(AA(AAA,AAAAAAA+1,AAAAAAA+1))
    AAAAA=AAAAA+AAAAAAAA*AAAAAAAA 
end 

print(AAAAA)


-3

C ++、5

    #include <iostream>
    #include <string>
    #include <cmath>
    using namespace std;

    void convertToASCII(string letter)
    {
        int count = 0;
        int ans = 0;
        int *diff = new int[]; //dynamic array

        for(int i=0; i<letter.length(); i++)
        {
            char x = letter[i]; //letter.at(i);

            if(i!=0){
                diff[i-1] = int(x)- int(letter[i-1]);
                count++;
            }
        }

        for(int j=0; j<count; j++){
            ans += pow(diff[j], 2.0);
        }

        cout << "#C++, " << ans << endl;
    }

    int main()
    {
        string plainText;
        cout << "Enter text: ";
        getline(cin, plainText);
        convertToASCII(plainText);
        system ("pause");
        return 0;
    }

7
プログラミングパズルとコードゴルフへようこそ!これは有効な答えですが、このチャレンジのスコアは、プログラムのテキストがプログラムで実行された結果でなければなりません。また、できるだけそのスコアを最小化するようにしてください。これらの ページのヒントを参照して、コードを短縮してスコアを下げる方法を確認してください。
ETHproductions
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.