プログラムのASCIIコードの合計を印刷するプログラムを書く


14

タスクは、プログラム自体の文字のASCIIコードの合計を印刷するプログラムを作成することです。ファイルを開くことはできません(コマンドライン引数、標準入力、ファイルなどの入力は禁止されています)。

最小の数字を出力する(つまり、ASCIIコードの合計が最小の)プログラムが勝ちます。

Cで書かれたこのようなプログラムの例(最短ではありません)は次のとおりです。

#include <stdio.h>
int main(){
printf("4950");/*i*/
return 0;
}

(後に改行なし}


4
独自のバイトを生成して合計する、すばらしいソリューションを見るのは面白いでしょう。
ジョーイアダムス

1
それほど挑戦的ではありません。特になどのPowerShell、Golfscript、単にトークンをダンプ言語のために、自明ブルート強制することができます
ジョーイ

2
私は投票し、コメントはその理由、理由を示しています。前にも述べたように、回答の数を品質の指標とは考えていません。簡単に解決できるからといって、これを面白くも挑戦的な課題とすることもできません。少なくとも私の意見は。
ジョーイ

5
待つ。何?一方では、あなたは質問が簡単で面白くないと不平を言ってから、あなたは私に賛成票を投じます(私にとっては-2)。一方、この質問に対する回答の25%(+70)を投稿します。
アレクサンドル

4
それで、あなたはこれを評判の戦いとして見ますか?結構です、CWへの答えを簡単に変更できます。ある意味では、多数の回答は少々抗議であり、多くの回答を解き放つことは簡単であることを示しています。たとえば、これを4回アルファベットを必要としたタスクと比較してください。また、自分自身に答える(タスクの仕様に拘束される)と自分自身にコメントする(一般的なサイトの品質を改善することを望んでいる)は、しばしばかなり分離されています。とにかく、私はそれらを削除したので幸せになりましたか?しかし、彼らはまだ有効な答えでした。
ジョーイ

回答:


10

wc、0を出力

誰かが「猫のような言語」と言ったので...

空のファイル:



で実行しwc -c file.wcます。0バイトでは、これが「プログラミング言語ではない」カテゴリの勝者だと思います。

また

猫、プリント80(ベース13)

80

いいえ終端改行は、数80 13進104と等価ではありません。60 17(102 dec)で短くすることもできますが、「ベース13」の方がギークポイントが多いと思います。

編集:新しいwc例、これはプログラムとして実行できます。

#!/usr/bin/wc
ÿÿzw17

(Latin-1でエンコードされた-theは値255のバイトです)

バイトの合計は2223、出力は次のとおりです。

  2  2 23 ./w

ただし、wcは、空ではなく0バイトを生成する0バイトを含むファイルを読み取る必要があります。空はヌルではありません。
ユーザー不明

ユーザー:空のセットの値の合計はまだ0であると主張するかもしれませwc -cん。それにもかかわらず、とにかく質問では禁止されています。
ジョーイ

1
そうするように見える唯一の句は「コマンドライン引数などの入力は禁止されています...」ですので、-cを省略して印刷0 0 0します(ファイルとして渡されるファイルがそれを禁止している場合、すべてのスクリプト言語は禁止)
Random832

2
+1、wcベースのチートに対して-1、ベース13でジョークを行うために+1

私が言うwcのアプリケーションではなく、言語です。
トーマスエディング

14

PHP、m4、およびその他の猫のような言語:150

150

単純なHaskellプログラムを使用してブルートフォースするこのソリューションを見つけました。

f :: String -> Bool
f s = (read s :: Int) == (sum . map fromEnum) s

main = mapM_ print [filter f $ sequence $ replicate n ['0'..'9'] | n <- [1..10]]

これが絶対最短だと思います。
アレクサンドル

2
@Alexandru:必ずしもそうではありません。5!Jのように、いくつかの組み込み関数を使用して合計を正しく印刷する1文字または2文字のプログラムがある場合があります
。– mellamokb

@mellamokbでASCII文字の合計が5!86である、ない125
ピーター・オルソン

3
@ピーター:確かに、実際の解決策ではなく、150より小さい解決策のタイプの例を示していました。まだ見つかりませんでした(ところで、5!は120ではなく、125です)
。-

12

Brainf * ck、255

-.¤

これは数値255ではなく、255番目のASCII文字を印刷します。

BFコンパイラは¤をスキップするため、これは不正行為と見なされる場合があります。


1
ティム:最短のプログラムではなく、最低の数が勝ちます。いずれにせよ、これ¤はごく普通のコメントであるため、不正行為だとは思わない。
ジョーイ

あなたはより少しsubstractingことにより、低いスコアを取得する:----␦。
ヘレナ

8

Javascript、印刷9432 6902

(function a(){b="("+a+")()";c=0;for(i=0;i<b.length;i++){c+=b.charCodeAt(i-0)}alert(c)})()

Haskellの1つを正しく理解していない限り、これはこれまでの最初の素晴らしい解決策です。


そのHaskellコードは、その数字のASCIIコードの合計に等しい最小数を検索しているだけです。ここでの答えのほとんどは、ブルートフォースによって行われたと思います。
ジョーイ

で89〜86バイトから更に低減することができる:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest


6

Perl、500

say     500

sayとの間に2つのタブがあります500ます。:)

perl -Eこれがルールの範囲内であるとわかる限り、でワンライナーとして実行します)


1
2つのタブが好き
スティーブP

5

ルビー、プリント380

p (380)

閉じ括弧の後に末尾の改行はありません。




5

J、150

?!6

ただし、正しいのは1/720の時間だけであることに注意してください。


3
階乗6でランダム?うーん、私はそうは思わない、ティム。
MPelletier


3

エレメント、220

これは私自身が作成した言語であり、ここで別の質問への回答に記載されています

220`!

これがどのように機能するかのチュートリアルです:220その数をスタックにプッシュします。次に、「outputs the top element of the stack. The!」は、コントロールスタック(別のスタック)で論理的でないものを実行し、1に設定します。



2

PowerShell、印刷3902

&{[char[]]$myinvocation.Line|%{$s+=+$_};$s}

現在実行されている行を調べて、コードポイント値を合計します。


2

インターカル、1572

まだ誰もINTERCALを行っていないとは信じられません!

DOREADOUT#1572


DOGIVEUP

(改行の終了を含む。)このプログラムはMDLXXIIを出力します。


1

Perl、690を印刷

die 690 . $/

または、ワンライナー(perl -E)を投稿できる場合

say(570)

570を印刷します。

(末尾の改行はありません)


1

JavaScript、 1750 900 860 790

alert(790)

(プログラムの前後のキャリッジリターン(CR、\rまたは\x0D))

これらのプログラムは、総当たり攻撃によって発見されます。

大きな値:

alert(860)%0
alert(900)&&6
document.write(1750)

1

Java -128

stdinの読み取りは許可されていませんが、スコアの計算方法の例を示したいと思います。

私のコードは、stdinに渡された自身のASCIIカウントを合計し、-128を出力します

class P{public static void main(String[]z)throws Exception{byte v=0;int b=0;while((b=System.in.read())!=-1){v+=(byte)b;}System.out.println(v);}}

末尾の改行なし


あなたの合計があふれていると思います。
アルファ


1

バッチファイル、500

ECHO  500

同様に、「ECHO」(意図的に大文字)と「500」の間に2つのスペースがあることに注意してください。


1

C、1700

奇妙な-誰もまだCソリューションを投稿していません(質問の例を除く)。

main(R){puts("1700");}

最後に改行はありません。


1

K(923 796 795 746 513)

これがルールに違反するかどうかはわかりません。標準入力を使用せず、バイトと合計のベクトルとして自身を開きます。

+/1:.z.f

使用法:

q scriptname.k

編集2012.05.08-ファイルハンドル2012.05.09をhsymする必要はありません-intではなくbyteに変換することで1ポイントを保存しました

2012.05.17-ファイルをテキストではなくバイトストリームとして読み込むことにより、ポイントの負荷を節約できます。


1

J、198

33*6

そして

6*33

総当たりで見つけました。Jには1文字または2文字のソリューションはなく、3文字のソリューションは150。私の検索でバグがなければ、他の4文字ソリューションもありません。


#jsoftware IRCチャンネルからは<.%:10!20、429で、+/a.i.2#(,{:)'+/a.i.2#(,{:)'''1706で自己カウントのクインもありました。


0

bc 1160

エコーと空白で呼び出された場合、7つの空白を含む文字列全体echo 1160 | bcのバイト数は1160です。

echo 1160    |  bc

150はbcでも動作します:

echo "150" > 150
bc -q 150
150

0

D、9752

これは実際に私のと同様に計算します

enum c=q{import std.stdio;void main(){int s;foreach(d;"enum c=q{"~c~"};mixin(c);")s+=d;write(s);}};mixin(c);

0

ホワイトスペース、369

この20文字のプログラムは、その文字(ここではT、S、Lでそれぞれ記号化されているTab、Space、Linefeed文字)のASCII値の合計である数値369を出力します。

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10、7つのタブ、8つのスペース、および5つの改行があります。)


0

ハスケル、7518

私の馬の小さな変更:

main=print.sum.map fromEnum$q++show q;q="main=print.sum.map fromEnum$q++show q;q="

0

Brainf*ck, 253 (or 252)

Slight improvement on Peter Olson's solution:

---.H

Provided non-printables are allowed, it can be improved further by adding a - and replacing H by ASCII code 26.



0

Python, 5440

Highest score wins, right?

import sys
print sum(ord(i)for i in open(sys.argv[0]).read())

I just thought I'd post it anyway b/c it's a halfway quine solution.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.