Tulis program untuk mencetak jumlah kode ascii program

14

Tugas Anda adalah menulis program untuk mencetak jumlah kode ASCII dari karakter program itu sendiri. Anda tidak diperbolehkan membuka file apa pun (input apa pun seperti argumen baris perintah, input standar, atau file dilarang).

Program yang mencetak angka terendah (yaitu memiliki jumlah kode ASCII terendah) menang.

Berikut adalah contoh (bukan yang terpendek) dari program semacam itu yang ditulis dalam C:

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

(tidak ada baris baru setelah })

Alexandru
sumber
4
Akan menarik untuk melihat solusi quine: yang menghasilkan dan menjumlahkan byte sendiri.
Joey Adams
1
Imho tidak terlalu menantang. Ini bisa menjadi kekerasan yang sepele, terutama untuk bahasa yang hanya membuang token, seperti PowerShell, Golfscript, dll.
Joey
2
Saya downvoted dan komentarnya memberikan alasan, mengapa. Seperti yang telah saya catat sebelumnya, saya tidak menganggap jumlah jawaban sebagai indikasi kualitas . Hanya karena dapat dengan mudah diselesaikan tidak menjadikan ini tantangan yang menarik atau bahkan menantang. Pendapat saya, setidaknya.
Joey
5
Tunggu. Apa? Di satu sisi Anda mengeluh bahwa pertanyaannya mudah dan tidak menarik dan kemudian Anda menurunkan saya (-2 untuk saya). Di sisi lain Anda memposting 25% jawaban untuk pertanyaan ini (+70 untuk Anda).
Alexandru
4
Jadi Anda melihat ini sebagai pertarungan reputasi? Baik, saya dapat dengan mudah mengubah jawaban saya ke CW. Di satu sisi, sejumlah besar jawaban sedikit protes dan untuk menunjukkan bahwa itu sepele untuk menghasilkan banyak jawaban. Bandingkan ini misalnya dengan tugas yang ingin alfabet empat kali. Diri saya yang menjawab (terikat pada spesifikasi tugas) dan diri saya yang berkomentar (berharap untuk meningkatkan kualitas situs umum) seringkali cukup terpisah. Lagi pula, lebih bahagia sekarang karena saya menghapusnya? Mereka masih jawaban yang valid.
Joey

Jawaban:

10

wc, mencetak 0

Seseorang berkata "bahasa seperti kucing", jadi ...

File kosong:



Jalankan dengan wc -c file.wc. Pada 0 byte, saya pikir ini adalah pemenang dalam kategori 'tidak benar-benar bahasa pemrograman'.

Juga

kucing, mencetak 80 (basis 13)

80

Tanpa menghentikan baris baru, angka 80 13 sama dengan 104 dalam desimal. Anda bisa lebih pendek dengan 60 17 (102 Desember), tapi saya pikir "base 13" akan lebih bernilai poin geek.

EDIT: wcContoh baru , ini bisa dijalankan sebagai program.

#!/usr/bin/wc
ÿÿzw17

(Sebagaimana dikodekan dalam Latin-1 - ÿ adalah byte dengan nilai 255)

Jumlah byte adalah 2223, output adalah:

  2  2 23 ./w
Random832
sumber
Tetapi wc harus membaca file, yang mengandung 0-byte untuk menghasilkan Nomor 0, bukan yang kosong. Kosong bukan Null.
pengguna tidak diketahui
pengguna: Orang mungkin berpendapat bahwa jumlah nilai dalam set kosong masih 0. Namun demikian, wc -cdilarang dalam pertanyaan.
Joey
1
Satu-satunya klausa yang tampaknya melakukannya adalah "Setiap input seperti argumen baris perintah ... dilarang" jadi tinggalkan -c, lalu cetak 0 0 0(jika file dilewatkan sebagai file melarangnya, maka semua bahasa skrip adalah juga dilarang)
Random832
2
+1 untuk wc, -1 untuk kecurangan basis, +1 untuk membuat lelucon di basis 13.
Saya katakan wcadalah aplikasi, bukan bahasa.
Thomas Eding
14

PHP, m4, dan bahasa seperti kucing lainnya: 150

150

Menemukan solusi ini menggunakan program Haskell sederhana untuk memaksakannya:

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]]
Joey Adams
sumber
Saya kira ini yang paling pendek.
Alexandru
2
@Alexandru: Tidak harus. Mungkin ada program yang panjangnya satu atau dua karakter yang mencetak jumlah dengan benar menggunakan beberapa fungsi 5!
bawaan
@mellamokb Jumlah karakter ASCII 5!adalah 86, bukan 125.
Peter Olson
3
@ Peter: Memang, saya menunjukkan contoh jenis solusi yang mungkin lebih kecil dari 150, tetapi bukan solusi yang sebenarnya. Saya belum menemukan satu (dan btw, 5! Adalah 120, bukan 125) :-)
mellamokb
12

Brainf * ck, 255

-.¤

Ini tidak akan mencetak angka 255, melainkan karakter ASCII 255.

Ini mungkin dianggap curang karena kompiler BF melompati ¤.

Peter Olson
sumber
1
Tim: Angka terendah menang, bukan program terpendek. Bagaimanapun, saya tidak berpikir ¤itu curang, karena itu hanya komentar normal.
Joey
Anda mendapatkan skor yang lebih rendah dengan mengurangi sedikit lebih banyak: ----.
Helena
8

Javascript, mencetak 9432 6902

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

Ini adalah solusi quine pertama sejauh ini, kecuali saya tidak memahami yang Haskell dengan benar.

Peter Olson
sumber
Kode Haskell itu hanya mencari angka terkecil yang akan sama dengan jumlah kode ASCII digitnya. Saya kira sebagian besar jawaban di sini dilakukan dengan kekerasan.
Joey
Dapat dikurangi lebih jauh dari 89 menjadi 86 byte dengan:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest
7

PowerShell

((310))

mencetak 310.

Joey
sumber
6

Perl, 500

say     500

Ada dua tab di antara saydan 500. :)

(Jalankan sebagai one-liner dengan perl -E, sejauh yang saya tahu ini sesuai aturan)

swilliams
sumber
1
Saya suka 2 tab
Steve P
5

Ruby, mencetak 380

p (380)

Tidak ada baris baru setelah tanda kurung tutup.

Ventero
sumber
5

PowerShell

(230)

mencetak 230, jelas.

Joey
sumber
5

PowerShell

-(-320)

mencetak 320.

Joey
sumber
5

J, 150

?!6

Dengan peringatan bahwa itu akan benar hanya 1/720 waktu.

mellamokb
sumber
3
Acak pada faktorial 6? Hmmm, kurasa tidak, Tim.
MPelletier
4

Python, mencetak 781

print  781

Dua ruang.

FogleBird
sumber
1
Saya terutama menyukai 2 ruang.
Steve P
3

Elemen, 220

Ini adalah bahasa ciptaan saya sendiri, dan didokumentasikan pada jawaban saya untuk pertanyaan lain di sini .

220`!

Berikut ini adalah langkah-langkah bagaimana cara kerjanya: 220Mendorong nomor itu ke tumpukan. Kemudian `` outputs the top element of the stack. The! `Kemudian melakukan logis bukan pada tumpukan kontrol (tumpukan terpisah), mengaturnya ke 1.

PhiNotPi
sumber
2

PHP, mencetak 4440

<?php
for($x=0;$x<15000;$x++)if($x==4440){printf($x);exit;}
rintaun
sumber
2

PowerShell, mencetak 3902

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

Lihat ke baris yang saat ini dijalankan dan jumlah nilai-nilai titik kode

Joey
sumber
2

INTERCAL, 1572

Saya tidak percaya belum ada yang melakukan INTERCAL!

DOREADOUT#1572


DOGIVEUP

(Termasuk mengakhiri baris baru.) Program ini mencetak MDLXXII.

kotak roti
sumber
1

Perl, mencetak 690

die 690 . $/

Atau, jika kita dapat memposting satu kalimat ( perl -E)

say(570)

Cetakan 570.

(Tidak ada baris baru)

swilliams
sumber
1

JavaScript, 1750 900 860 790

alert(790)

(Pengembalian kereta (CR, \ratau \x0D) setelah atau sebelum program)

Program-program ini ditemukan dengan kekerasan.

Nilai yang lebih besar:

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

Java -128

Saya tahu membaca stdin tidak diperbolehkan tetapi saya ingin memberikan contoh bagaimana saya menghitung skor saya.

Kode saya menjumlahkan jumlah ASCII yang diteruskan pada stdin dan mencetak -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);}}

Tidak membuntuti baris baru

Steve P.
sumber
Saya pikir jumlah Anda melimpah.
Alpha
1

Ruby, mencetak 300

p   300

Ada spasi dan tab antara pdan 300. Tidak ada baris baru.

Lowjacker
sumber
1

File kumpulan, 500

ECHO  500

Juga, perhatikan dua ruang antara "ECHO" (huruf besar dengan sengaja) dan "500".

Alfa
sumber
1

C, 1700

Aneh - belum ada yang memposting solusi C (tidak termasuk contoh dalam pertanyaan).

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

Tidak ada baris baru di akhir.

ugoren
sumber
1

K ( 923 796 795 746 513)

Saya tidak yakin apakah ini melanggar aturan atau tidak. Itu tidak menggunakan stdin, itu membuka dirinya sebagai vektor byte dan jumlah.

+/1:.z.f

Pemakaian:

q scriptname.k

sunting 2012.05.08 - tidak perlu hsym pegangan file 2012.05.09 - menyelamatkan 1 poin dengan mengonversi ke byte alih-alih int

2012.05.17 - Dapat menyimpan banyak poin dengan membaca file sebagai bytestream daripada teks:

skeevey
sumber
1

J, 198

33*6

dan

6*33

Ditemukan dengan kekuatan kasar. Di J tidak ada solusi char 1 atau 2, dan satu-satunya solusi char 3 adalah 150. Kecuali ada bug dalam pencarian saya, tidak ada solusi 4-char lainnya.


Dari saluran IRC #jsoftware, kami juga memiliki <.%:10!20429 dan quine yang menghitung sendiri +/a.i.2#(,{:)'+/a.i.2#(,{:)'''pada 1706.

AlliedEnvy
sumber
0

SM 1160

dipanggil dengan gema dan blank, seluruh String, termasuk 7 blank, echo 1160 | bcmemiliki bytesum 1160.

echo 1160    |  bc

150 bekerja untuk bc juga:

echo "150" > 150
bc -q 150
150
Pengguna tidak diketahui
sumber
0

D, 9752

yang ini sebenarnya menghitungnya mirip dengan quine saya

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

Spasi, 369

Program 20 karakter ini mencetak angka 369, yang merupakan jumlah nilai ascii dari karakternya (yaitu Tab, Spasi, karakter Linefeed, di sini dilambangkan dengan T, S, L, masing-masing):

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10, terdapat 7 Tab, 8 Spaces, dan 5 Linefeeds.)

res
sumber
0

Haskell, 7518

Modifikasi kecil dari quine saya :

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

Brainf * ck, 253 (atau 252)

Perbaikan sedikit pada solusi Peter Olson:

---.H

Asalkan tidak dapat dicetak diperbolehkan, itu dapat ditingkatkan lebih lanjut dengan menambahkan -dan mengganti Hdengan kode ASCII 26.

Pontus von Brömssen
sumber
0

Scala 1090

println (1090)

Pengguna tidak diketahui
sumber
0

Python, 5440

Kemenangan skor tertinggi, bukan?

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

Saya hanya berpikir saya akan tetap mempostingnya tapi itu solusi setengah jadi.

Joel Cornett
sumber