char値を追加する計算機


18

仕事

ファイル、stdin、その他から文字列を取得し、charsのすべての値を合計する計算機を作成します。

Input
Hello World!

Output
1085

ルール

計算機はASCIIエンコードのみを受け入れる必要があります。

最短のコードが優先されます。

ノート

m.buettnerのコメントに関して、私は言う必要があります、私はマルチバイト部分を考えていませんでした。
それで、私もそれをボーナスとして残します。
電卓は書かれたとおりに実行する必要があるため、コンパイルまたは解釈する前に修正する必要はありません。

ボーナス

Syntheticaのおかげで、もう1つのボーナスがあります。

入力が勝つときにコードを使用すると、出力が最も低いプログラムに星が付きます。

完全に変更したくありません。

UTF-8で(右)値を出力するために追加で書き込むと、星印が付きます。

私のラップトップ(Lenovo Yoga 13 Intel Core i5 3317U 1.7Ghz、8GB RAM、128GB SSD、Intel HD 4000、Windows 8)で最速で実行されるコードには星が付きます。

Webコードは、まずIE11でチャクラを使用して実行され、次にFireFox 29.0.1でSpiderMonkeyを使用して実行されます

Linuxコードは、Raspbianを搭載したRaspberry Piで実行されます。

テスト文字列は次のとおりです。

q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(

コーディングを楽しんでください:)

ボーナススコア

今週の土曜日に採点を行う予定なので、07.06.14、その日以降のすべての回答はボーナスポイントを獲得できません;)

ここでテストに使用するコードをダウンロードできますので、気軽にフォークして改善してください:)

ボーナスのために少し更新されますが、私のラップトップは部分的に壊れているので、おそらく次の週末にそれをします、それは本当に申し訳ありません:(


3
Hello World!コンピューターでASCII値に2つの異なる言語を使用すると1085になります。
カイルカノス

1
彼はおそらく '!'を追加するのを忘れていました。編集は3秒速くなりました
...-gxtaillon

1
ダウン票について説明してください。
ケナード

3
私の推測では、ダウン票はそれが本当に良い問題ではないことを示していると思います。
カイルカノス14年

5
@Knerd主に、ほとんどの言語では少し簡単すぎるため(既に取得した提出の長さからわかるように)
マーティンエンダー

回答:


10

GolfScript、4文字

{+}*

単に折り畳み演算子(*)を使用して、すべての文字を加算します。

空の文字列を処理する必要がある場合、9文字:

{{+}*}0if

空の文字列で機能する代替の6文字バージョンを提供してくれた@PeterTaylorに感謝します。

0\{+}/

空の文字列では機能しません。
ハワード

@Howard良い点; 編集しました。
ドアノブ

0\{+}/空の文字列をサポート
ピーターテイラー

1
@Doorknobバカな質問、すみません、データを入力する方法は?私が使用しgolfscript.apphb.com
Knerd

2
@immibid奇妙な形の目をしたサイクロプス。:-P(またはGolfScriptでは、「スワップアンドアドイーチ」の顔!)
ドアノブ

7

APL(8)

+/⎕UCS⍞

説明:

  • +/ の合計
  • ⎕UCS のユニコード値
  • 文字入力

結果はどうなりますHello World!か?
ケナード

@Knerd: 1085。別の出力があった場合、それは正しくありません。文字のUnicodeコードポイントの値を合計します。
マリヌス


1
@knerd:キーボードから行を読み取ることを意味する
マリナス

無料のAPLインタープリターを知っていますか?
ケナー14年

6

ハスケル36

main=interact$show.sum.map fromEnum

どこからテキストを読みますか?
ケナード14年

stdin。$ printf "Hello World!" | ./charsum
gxtaillon

[OK]を、私はそれが私のWindowsマシン上で実行することができなかった私は自宅で午前とき、私はRPIにそれを試しつもり
Knerd

コードを実行すると、「Hello World!」という文字列が表示されます。出力として。これは私のコマンドラインです:ECHO "Hello World! | ghci charsum.hs
Knerd

1
使用interactしてshowの代わりに、getContents>>=printmain=interact$show.sum.map fromEnum
Flonk

6

Shell + GNUツール、29バイト

echo `od -An -tuC`|tr \  +|bc

stdinから入力を取得します。

$ printf "%s" 'Hello World!' | ./addchars.sh 
1085
$ 

自身のスコア:2385


c、52バイト

c;main(p){while(~(p=getchar()))c+=p;printf("%d",c);}

コンパイル(いくつかの警告が生成されます):

gcc addchars.c -o addchars

stdinから入力を取得します。

$ printf "%s" 'Hello World!' | ./addchars 
1085 $ 

自身のスコア:4354


これは素晴らしい答えです。GNUコンパイラを使用するCodeBlocksは、変数が型を持たない場合、たとえばint c、main(int p)の場合、常にエラーを出します。これらはあなたの答えに含まれるべきだと思います。
バッカスビール14

@bacchusbeale編集の警告についてのメモを追加しましたが、cでゴルフをするときは、これは一般的に当然のことだと思います。コードが期待どおりにコンパイルおよび実行される限り、警告は無視できます。codegolf.stackexchange.com/a/2230/11259およびcodegolf.stackexchange.com/a/2204/11259を参照してください。もちろん、量産コードはまったく別の問題です。
デジタル外傷14

@DigitalTraumaはこれらすべてのスペースが実際に必要ですか?シェルは空白を無視せず、-を使用して新しいパラメーターをマークできますか?
アシュウィングプタ

@AshwinGupta odコマンドについて話していますか?od -AntuCと同じではありませんod -An -tuC
デジタル外傷

@DigitalTraumaそうだった。私は意味、あなたが行うことができませんでしたod-An-tuCod -An-tuC
のAshwinグプタ

6

Javascript(ES6)51

alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)

@nderscore ...前に何ができるのか説明できますpromptか?これは新しいES6のものですか、それともES6より前のものですか?
WallyWest

1
@WallyWestこれはスプレッド演算子と呼ばれ、ES6ドラフトの一部です。
アンダースコア

@nderscoreだから私がスプレッド演算子の構文を理解しているなら、あなたの使用は[...prompt(x=0)]デフォルト値0のプロンプトを取り(これは後で合計で使用されます)、その入力を文字の配列として適用します... ?技術的には、と同じでしょうprompt(x=0).split("")か?
WallyWest

1
@WallyWest prompt(x=0)は、「xを0 promptに設定し、xを0に設定する値で呼び出します」、つまり0を意味します。これは、次のように書き込みます(x=0,prompt(x))
-Cyoce

6

gs2、1バイト

d

d0x64/ sum)は、もちろん、標準入力のすべてのバイトを合計します。


5

Python 3-28バイト

print(sum(map(ord,input())))

実行例:

$ ./sum_string.py <<< 'Hello World!'
1085

stdinから入力を取得し、mapsにord関数を入力して、各文字のASCII値を取得します。s sumおよびprints。


忍者、私はまったく同じ考えを持っていました。そのために+1。
seequ 14年

@TheRare私もPython 2.7を使っていたので、私のほうが長かったのにそうしました。さびています;)
ɐɔıʇǝɥʇuʎs14年

@Synthetica私は常にPython 2.7を使用していますが、その上で答えはprint sum(map(ord,raw_input()))
14年

1
@TheRareどちらが私の正確な答えでした;)
ɐɔıʇǝɥʇuʎs14年

ここでつべこべが、あなたはそれが変更することでパフォーマンスが向上することができますmap(ord,input())input().encode()。Bytesオブジェクトは合計できますが、同じ長さのままです。
cjfaure

5

8086アセンブリ(16ビット)-47 41バイト

test.comファイルの内容は次のとおりです。

98 01 c3 b4 01 cd 21 3c 0d 75 f5 89 c7 c6 05 24
89 d8 b1 0a 4f 31 d2 f7 f1 80 ca 30 88 15 09 c0
75 f2 89 fa b4 09 cd 21 c3

実際の作業は最初の11バイトで行われます。結果を10進表記で出力するには残りが必要です。

ソースコード(DOS debug.comアセンブラへの入力として提供):

a
; input the string; count the sum
    cbw
    add bx, ax
    mov ah, 1
    int 21
    cmp al, d
    jne 100
; Prepare for output: stuff an end-of-line marker
    mov di, ax
    mov [di], byte 24
    mov ax, bx
    mov cl, a
; 114
; Divide by 10; write digits to buffer
    dec di
    xor dx, dx
    div cx
    or  dl, 30
    mov [di], dl
    or  ax, ax
    jne 114
; Print the string
    mov dx, di
    mov ah, 9
    int 21
    ret

rcx 29
n test.com
w
q

コードに関する注意事項:

  • 1行のみを処理します(行末文字13まで)。行末がなければハングする
  • 7ビット文字のみがサポートされています(それ以外の場合、結果は正しくありません)
  • 入力が空の場合は出力0
  • 64Kを超える出力を処理できません
  • アドレス0x10dの命令はそれ自体を上書きします(純粋な一致)
  • このプログラムを組み立てて実行するには、DosBoxなどのDOSエミュレータを使用する必要があります

どうやってそれを理解できますか?オブジェクト指向
Knerd


4

Befunge98、6バイト、合計:445

2j@.~+

通訳者なら大丈夫です。CCBIを使用します

次のように使用します。

printf 'Hello World!' | ccbi calc.fg

マルチバイト文字と空の文字列で機能します。

説明

  • 2j-次の2つの指示にジャンプします(@そして. -以下を参照)
  • ~ -次の文字をスタックに配置します
  • +-新しい文字のコード値を現在の合計に追加します。命令ポインタは先頭に折り返され、サイクルが繰り返されます
  • いつ ~ EOFに遭遇したことは、ポインタの方向を反転さと二つの「隠された」命令が実行されます。
  • . -合計を印刷する
  • @ - 出口

4

ルビー、13 12バイト

p~9+gets.sum

sum文字列の文字を合計する組み込み関数です。10を引き、最後に改行を考慮しますgetsの戻り値のます。

(4年後に...の値に変更x-10するために編集されましたが、その間のスペースとその引数を削除して、バイトを節約できます。)~9+x~9-10p


私はRubyに全く精通していません、あなたのコードを説明してもらえますか?
ケナード

1
getsは、改行が読み取られるまで標準から文字列を読み取る関数で、文字列を返します。String#sumは各文字の値を追加し、Fixnumを返します。Fixnum#-は単なる減算です。pライン上の何かのデバッグ値を出力するためのメソッドです。
カイルスミス

2

PowerShell-27

[char[]]$args[0]|measure -s

> SumChars.ps1 'Hello World!'

Count    : 12
Average  : 
Sum      : 1085
Maximum  : 
Minimum  : 
Property : 

26 [char[]]"$args"|measure -s$ argエントリが1つしかない場合に使用します。
TessellatingHeckler

2

ジュリア - 11 7文字、結果の合計= 943 536

この質問では、入力を任意のソースから取得できるため、既存の変数を選択します。A評価したい文字列が含まれていると仮定します。

sum(A)1

結局のところ、文字列を直接合計することができ、評価されます...しかし、文字の合計が処理される方法のために、文字列に奇数の文字がある場合、文字を出力します、あらゆる種類の整数ではなく。そのため、1を掛けることで強制的にintにキャストします。

古いバージョン:

sum(A.data)

16進表記で出力されます(合計が256未満の場合はになり0x??、そうでない場合は8バイトになります0x????????)。結果が使用されるコードで使用される場合、他の数値と同様に動作します(Juliaが符号なし整数を表示する方法です)。

小数で結果の値を参照するために、上記で囲みint()のように、int(sum(A.data))

ジュリアを知らない人には、A他の変数への割り当てとまったく同じ方法で割り当てます。A="Hello World!"または、またはA="sum(n.data)"。あなたが置く必要がある場合"'、文字、複数のオプションがあり、そのうちの最も簡単な(それはジュリアの文字列リテラルのニュアンスの知識の必要性を回避するため)であるA=readline()、(ウォン」単にSTDINに文字列を入力して、その後tは改行を処理します)。改行のエスケープシーケンスは、通常どおり、\nですが、readline()で使用できるとは思いません。


神の賢い解決策のために+1 ^^あなたは、変数にテスト値を割り当てる方法を投稿できますnか?私はジュリアをまったく知りません;)
Knerd 14

@Knerd-編集しました。お役に立てば幸いです。
グレンO 14

よかった。ありがとう。後でテストしてみます:)
Knerd

マイナーチェンジ-からの切り替え変数nには、A988 943への加算結果削減する
グレンO

OK、はるかに大きな変更-で文字を抽出するのではなく、文字列を直接合計できることに気付きました.data; しかし、それらは文字であるため、奇数文字の文字結果を生成します。1を掛けるとそれが修正されます。
グレンO 14

2

K5、2バイト(関数)、5バイト(プログラム)

関数

+/

プログラム

+/0:`

このチャレンジが投稿される前または後にK5が作成されたかどうかはわかりません。とにかく...これはすごい!!

K5では、文字列に対して算術演算を実行すると、文字がASCIIコードに変換されます。したがって、これは合計演算子を使用するだけです+/(実際には、プラス+オーバー)。


2

Matlab / Octave 4バイト(ボーナス:405)

このコードは匿名関数であり、ジョブを実行し、文字列を受け取り、必要な数を返します。

@sum

答えはわかりませんgs2が、少なくともジュリアの答えと同じアプローチで、私はまだ書く必要がありますsum(A)。私はsum単独では大丈夫ではないと思う(有効なコード=でさえないだろう)。
-flawr

2

Go(59文字)

func d(s string)(t int){for _,x:=range s{t+=int(x)};return}

Goのすべてはデフォルトでutf8です。`デリミタ内のコードテキストは、5399の出力を生成します。


私はむしろ、何があります驚いていないよと言っているmath.Sumで使用するためのmapまたは類似


2

Gol> <>、4バイト(非競合)

注:この言語はチャレンジよりも新しいです。

iEh+

「ゴルフィッシュ」と発音しますか?

@catはい、ゴルフっぽいです。
ランダラ

@randomraは「ゴルフィッシュ」または「ゴルフイッシュ」ですか?魚のゴル、またはゴルフのようなもののように?
チョイス


2

Python、24バイト

これは、これまでのPythonソリューションよりも短く、名前のない匿名関数で、文字列を引数として受け取り、合計を返します。

lambda x:sum(x.encode())

オンラインでお試しください!

最初x.encode()に、bytesオブジェクトに変換します。次に、sum文字コード値を追加します。これはラムダ関数であるため、値は暗黙的に返されます。

さらに、lambda x:sum(map(ord,x))同じバイトカウントに対しても使用できます。


2

SML、 42 36

別の言語を追加するだけです。

fun$x=foldl op+0(map ord(explode x))

文字列をchar配列に変換し、各値のASCII数値を計算し、すべてのASCII数値の合計を計算します。


1
いくつかのスペースと先頭を削除できます;。36バイト:tio.run
##DcpBCoAgEAXQq0zRQomiC7ivdYuWEWgRfB2xKby9uXzwHo

1

C 32

f(char*s){return*s?*s+f(s+1):0;}

main(int argc,char **argv){return(argc?main(0,&(argv[1])):(**argv?**argv+main(0,argv)+((*argv)++?0:0):0));}(107文字)何らかの理由で最初の文字を無視します。また、POSIX終了コードは8ビットのみです。bashでecho $?

ルールは少し広かったので、メインを使用しませんでした。私は多分短い何かにうまくいく
BEBE

@bebe必要なものを明確にするために、規則を少し変更しました;)
Knerd 14

1

D(機能:60)

絶対に勝てない

完全なプログラムである必要はないと仮定

int c(string i){int s;foreach(e;i){s+=cast(int)e;}return s;}

そう呼ばれる

void main ()
{
    import std.stdio;
    auto hw = "Hello World!";
    writefln("%s = %d", hw, c(hw));
}

出力:

Hello World! = 1085

D(プログラム:133)

改行はカウントしません。

void main(){import std.algorithm,std.stdio;stdin.byLine.map!((a){int s;foreach(e;a){s+=cast(int)e;}return s;}).reduce!"a+b".writeln;}

読みやすくするために空白を増やし、変数名を長くします

void main () {
    import std.algorithm, std.stdio;

    stdin.byLine
        .map!((line) {
                int sum;
                foreach (ch; line) {
                    sum += cast(int)ch;
                }
                return sum;
            })
        .reduce!"a+b"
        .writeln;
}

入力で改行をサポートするにbyLine(KeepTerminator.yes)は、20文字で正しい方法を使用するか'\n'、行に追加します。これは、単一行入力を中断し、CRLFによりWindowsで18文字の間違った合計を与える可能性があります。


勝てないと知っていても投稿するための+1
Knerd 14年

1

JavaScript(ES6)54 58

alert([].reduce.call(prompt(),(v,c)=>v+c.charCodeAt(0),0))

nderscoreの おかげで54バイト:

alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))

うまく機能し、今までにes6fiddle.net
Knerd

Firefoxを使用できます;)
core1024 14年

1
私はそう働いていたので:D
Knerd 14年

1
54:alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
nderscore 14

1
今51になった:) alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
nderscore 14

1

デルファイ(87 83)

function x(s:string):int64;var c:char;begin x:=0;for c in s do x:=result+ord(c)end;

非ゴルフ

function x(s:string):int64;
var
  c:char;
begin
  x:=0;
  for c in s do
    x:=result+ord(c)
end;

char Sord値を結果に追加してループします。ここで、x == result

編集:

int64に切り替えて合計の加算を変更することにより、4文字を保存しました。


Delphiの無料バージョン(ここにバージョンを挿入)はありますか?
ケナード

うーん。本当に申し訳ありません。しかし、私はゴルフ場ではない場所で何が起こるかを説明し、必要に応じていくつかのテストケースを行うことができます。Free Pascalの構文はほぼ同じであるため、それを行うことができます。
テウンプロンク

わかりました、確認します。
ケナー14

1

k(8文字)

+/6h$0:0

Q翻訳

sum `int$read0 0

ボーナス値:

k)+/6h$0:0
+/6h$0:0
438i

1

J(7)

とても近いが、これまでのところ...まあ、この答えは空の文字列も受け入れるので、7は十分だと思います。(私はフレーズの入力としての変数の使用法に基づいていますfrom a file, stdin or whatever

+/a.i.b

説明:

a.

┌┬┐├┼┤└┴┘│─ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������

a. すべてのASCII文字が含まれます。

   'people' i. 'pow'
0 2 6

x i. ypythonに似てい[x.index(i) for i in y]ます。

   a. i. 'Hello World!'
72 101 108 108 111 32 87 111 114 108 100 33

そのため、ASCII値の配列にa. i. y変換yします

   +/1 2 3 4 5 6
21

+/のようなsum:を+/1 2 3 4 5 6意味します1+2+3+4+5+6

   +/ a. i. 'Hello World!'
1085

動作中のすべて

ボーナスの場合:

   b=:'+/a.i.b'
   +/a.i.b
482

悪くないね。

   b=:'0\{+}/'
   +/a.i.b
478

まあ、くそ。

   A=:'+/a.i.A'
   +/a.i.A
449

ありがとう@algorithmshark

    A=:'+/3 u:A'
    +/3 u:A
413

ありがとう@marinus


素晴らしい説明のために+1。ちょっとした質問ですが、Jを実行するのに最適な場所はどこですか?
ケナード14年

1
@Knerd製造元(jsoftware.com)からは、オンライン通訳を知らないようです。(楽しいファクト:。彼らはAndroid向け公式コンソールを持っている)jsoftware.com/download/j801
ɐɔıʇǝɥʇuʎs

@Synthecticaそれはクールです:D今、Androidスマートフォンが必要です:P
Knerd 14年

名前の変更bA449のスコアで結果
algorithmshark

@algorithmsharkああ、そうだ!私は今のところその星を主張します;)
ɐɔıʇǝɥʇuʎs14年

1

R、35文字(3086の合計) 26バイト(2305の合計)

sum(utf8ToInt(readline()))

readline()1つの文字よりも長いですscan(,"")が、scanデフォルトではスペースの入力を分割します。

使用法:

> sum(utf8ToInt(readline()))
Hello World!
[1] 1085
> sum(utf8ToInt(readline()))
sum(utf8ToInt(readline()))
[1] 2305
> sum(utf8ToInt(readline()))
q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(
[1] 14835

1

ジャプト、6バイト(非競合)

Japtはこのチャレンジが投稿された後に作成されたため、この回答は競合しません。

U¬mc x

ものすごく単純。オンラインでお試しください!

使い方

U¬mc x  // Implicit: U = input string
U¬      // Split U into chars.
  mc    // Map each item to its char code.
     x  // Sum.
        // Implicit: output last expression

好奇心¬から、なんらかの否定を割り当てなかったのはなぜですか?
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ私は急いでいたので、前もって計画することなく、必要に応じて割り当てました。1行のコードを変更することでロールアウトする準備ができているセットがありますが、既存のほぼすべての回答が無効になるため、それについては不安です。
-ETHproductions

それは簡単な修正です。ヘッダーに条件を追加します(例:)url/interpreter.html#new=1。それがないものは古い文字セットを使用し、それがあるものは新しい文字セットを使用します。
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴありがとう、私はそれを考慮します。
ETHproductions

1

PlatyPar、2バイト(非競合)

us

オンラインでお試しください

u 入力文字列にすべての文字コード値の配列を生成し、そして sそれらの合計見つけます。

自分自身で実行すると、戻ります 232

これはConorのJolfの回答に似ていますが、バイトを使用して文字列を文字コードの配列(Jolfで暗黙的)に変換しますが、彼はバイトを使用して入力(PlatyParで暗黙的)を取得します。

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