Programın ASCII kodlarının toplamını yazdırmak için bir program yazın


14

Göreviniz, programın karakterlerinin ASCII kodlarının toplamını yazdırmak için bir program yazmaktır. Herhangi bir dosyayı açmanıza izin verilmez (Komut satırı bağımsız değişkenleri, standart girdi veya dosyalar gibi herhangi bir girdi yasaktır).

En düşük sayıyı (yani en düşük ASCII kodlarına sahip) yazdıran program kazanır.

C dilinde yazılmış böyle bir programın bir örneği (en kısa değil):

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

(sonra yeni satır yok })


4
Bir kine çözümü görmek ilginç olurdu: kendi baytlarını üreten ve toplayan bir çözüm.
Joey Adams

1
Çok zor değil imho. Özellikle PowerShell, Golfscript, vb.Gibi jetonları döken diller için önemsiz derecede kaba-zorlanabilir
Joey

2
Ben düşürdüm ve yorum nedenini veriyor, neden. Daha önce de belirttiğim gibi , cevap sayısını kalitenin bir göstergesi olarak görmüyorum . Kolayca çözülebilmesi, bunu ilginç veya hatta zorlu bir zorluk haline getirmez. En azından benim görüşüm.
Joey

5
Bekle. Ne? Bir yandan sorunun kolay ve ilginç olmadığını şikayet edersiniz ve sonra beni aşağı indirirsiniz (benim için -2). Öte yandan, bu soruya cevapların% 25'ini gönderiyorsunuz (sizin için +70).
Alexandru

4
Yani bunu itibar savaşı olarak mı görüyorsun? Güzel, CW'ye cevaplarımı kolayca değiştirebilirim. Bir bakıma çok sayıda cevap biraz protesto etmekti ve çok sayıda cevabı atlatmanın önemsiz olduğunu göstermekti. Örneğin, alfabeyi dört kez isteyen görevle karşılaştırın. Ayrıca, yanıtlayan benliğim (görev özelliklerine bağlı) ve yorumlu benliğim (genel site kalitesini iyileştirmeyi umuyorum) genellikle oldukça ayrıdır. Her neyse, şimdi onları sildiğim için daha mutlu musun? Yine de hala geçerli cevaplardı.
Joey

Yanıtlar:


10

wc, baskılar 0

Birisi "kedi benzeri diller" dedi, yani ...

Boş bir dosya:



İle çalıştırın wc -c file.wc. 0 bayt olarak, bunun 'gerçekten bir programlama dili' kategorisinde kazanan olduğunu düşünüyorum.

Ayrıca

kedi, baskılar 80 (taban 13)

80

Sonlu yeni satır yok, 80 13 sayısı ondalık sayıdaki 104'e eşittir. 60 17 (102 dec) ile daha kısa gidebilirsiniz , ancak "13 taban" ın daha fazla geek puan değerinde olacağını düşündüm.

EDIT: Yeni bir wcörnek, bu bir program olarak çalıştırılabilir.

#!/usr/bin/wc
ÿÿzw17

(Latin-1'de kodlandığı gibi - ÿ, 255 değerli bir bayttır)

Bayt toplamı 2223, çıktı:

  2  2 23 ./w

Ancak wc, boş bir dosya değil, 0 Sayısı üretmek için 0 bayt içeren bir dosyayı okumalıdır. Boş değil.
kullanıcı bilinmiyor

kullanıcı: Boş bir kümedeki değerlerin toplamının hala 0 olduğu iddia edilebilir. Bununla birlikte, wc -cyine de soruda yasaklanmıştır.
Joey

1
Öyle görünen tek deyim "Komut satırı argümanları gibi herhangi bir girdi ... yasaklanmıştır" yani -c'yi bırakın, ardından yazdırılır 0 0 0(bir dosya olarak iletilen dosya bunu yasaklıyorsa, tüm komut dilleri Ayrıca yasak)
Random832

2
+1 için wc, taban hile için -1, taban 13'te şaka yapmak için +1

Ben wcbir dil değil, bir uygulama olduğunu söyleyebilirim .
Thomas Eding

14

PHP, m4 ve diğer kedi benzeri diller: 150

150

Bu çözümü kaba kuvvet uygulamak için basit bir Haskell programı kullanarak buldum:

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]]

Sanırım bu en kısa olanı.
Alexandru

2
@Alexandru: Mutlaka değil. 5!J'de olduğu gibi bazı yerleşik işlevleri kullanarak toplamı doğru bir şekilde yazdıran bir veya iki karakter uzunluğunda bir program olabilir.
mellamokb

@mellamokb ASCII karakterlerinin toplamı 5!125 değil, 86'dır.
Peter Olson

3
@Peter: Gerçekten de, 150'den küçük olabilen, ancak gerçek bir çözüm olmayan bir çözüm türü örneği gösteriyordum . Henüz bir tane bulamadım (ve btw, 5! 125 değil, 125 değil) :-)
mellamokb

12

Brainf * ck, 255

-.¤

Bu 255 sayısını değil, 255. ASCII karakterini yazdırır.

Bu hile olarak kabul edilebilir, çünkü BF derleyicisi ¤ üzerinden atlar.


1
Tim: En kısa program değil en düşük sayı kazanır. Her durumda, bunun ¤normal bir yorum olduğu için hile olduğunu düşünmüyorum .
Joey

Biraz daha fazla çıkararak daha düşük bir puan elde edersiniz: ----. ␦
Helena

8

Javascript, baskılar 9432 6902

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

Haskell'i doğru anlamadığım sürece bu şimdiye kadarki ilk çözümdür .


Bu Haskell kodu sadece rakamının ASCII kodlarının toplamına eşit olacak en küçük sayıyı arıyor. Sanırım buradaki cevapların çoğu kaba kuvvet tarafından yapıldı.
Joey

(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
Aşağıdakilerle 89'dan


6

Perl, 500

say     500

Arasında iki sekme vardır sayve 500. :)

( perl -EBunu kurallar dahilinde olduğunu söyleyebildiğim kadarıyla bir astar olarak çalıştırın )


1
2 sekmeyi seviyorum
Steve P

5

Ruby, baskılar 380

p (380)

Kapanış parantezinden sonra son satır sonu yok.




5

J, 150

?!6

Uyarı sadece zamanın 1 / 720'sinde doğru olacaktır.


3
Faktöriyel 6'da rastgele? Hmmm, sanmıyorum, Tim.
MPelletier


3

Eleman, 220

Bu kendi yaratımımın bir dili ve burada başka bir soruya verdiğim cevapta belgeleniyor .

220`!

İşte nasıl çalıştığına dair bir adım: Bu 220sayıyı yığına iter. Daha sonra `` outputs the top element of the stack. The! '' Kontrol yığınında değil (ayrı bir yığın) mantıksal olarak gerçekleştirir ve 1 olarak ayarlar.


2

PHP, 4440 yazdırır

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

2

PowerShell, baskılar 3902

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

Çalışmakta olan satıra bakar ve kod noktası değerlerini toplar.


2

INTERCAL, 1572

Henüz kimsenin INTERCAL yapmadığını inanamıyorum!

DOREADOUT#1572


DOGIVEUP

(Son satır sonunu içerir.) Bu program MDLXXII'yi yazdırır.


1

Perl, baskılar 690

die 690 . $/

Veya, bir gömlek gönderebilirsek ( perl -E)

say(570)

Baskı 570.

(Sondaki satır sonu yok)


1

JavaScript, 1750 900860 790

alert(790)

( Programın ardından veya öncesinde satır başı (CR \rveya \x0D))

Bu programlar kaba zorlama ile bulunur.

Daha büyük değerler:

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

1

Java -128

Stdin okumaya izin verilmediğini biliyorum ama puanımı nasıl hesapladığımla ilgili bir örnek vermek istedim.

Kodum stdin'den geçen ASCII sayısını toplar ve -128'i yazdırır

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);}}

Sonunda yeni satır yok


Bence toplamınız taşmış.
Alpha

1

Ruby, baskılar 300

p   300

Bir uzay arasında bir sekme vardır pve 300. Sondaki satırsonu yok.


1

Toplu iş dosyaları, 500

ECHO  500

Ayrıca, "ECHO" (büyük harf) ve "500" arasındaki iki boşluğa dikkat edin.


1

C, 1700

Garip - henüz kimse C çözümü yayınlamadı (sorudaki örnek hariç).

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

Sonunda yeni satır yok.


1

K ( 923796797574513 )

Bunun kurallara uyup uymadığından emin değilim. Stdin kullanmaz, bayt ve toplamların bir vektörü olarak kendini açar.

+/1:.z.f

Kullanımı:

q scriptname.k

düzenlemek 2012.05.08 - hsym dosya tanıtıcısı gerek yok 2012.05.09 - int yerine bayt dönüştürerek 1 puan kaydetti

2012.05.17 - Dosyayı metin yerine bytestream olarak okuyarak bir sürü puan kaydedebilir:


1

J, 198

33*6

ve

6*33

Kaba kuvvetle buldu. J'de 1 veya 2 karakterlik çözelti yoktur ve sadece 3 karakterlik çözelti vardır 150. Aramamdaki herhangi bir hatayı engellediğimde, başka 4 karakterlik çözüm de yok.


#Jsoftware IRC kanalından, 429'da ve 1706'da <.%:10!20kendinden saymalı bir testimiz vardı +/a.i.2#(,{:)'+/a.i.2#(,{:)'''.


0

bc 1160

yankı ve boşluklarla çağrıldığında, 7 boşluk da dahil olmak üzere tüm String echo 1160 | bc1160'lık bir byteuma sahiptir.

echo 1160    |  bc

150 BC için de çalışır:

echo "150" > 150
bc -q 150
150

0

D, 9752

bu aslında benim quine benzer hesaplar

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

Boşluk, 369

Bu 20 karakterlik program, karakterlerinin ascii değerlerinin toplamı olan 369 sayısını yazdırır (burada sırasıyla T, S, L ile sembolize edilen Tab, Space, Linefeed karakterler):

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10, 7 Sekme, 8 Boşluk ve 5 Satır besleme var.)


0

Haskell, 7518

Benim küçük bir modifikasyon Quine :

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

0

Brainf * ck, 253 (veya 252)

Peter Olson'ın çözümünde hafif iyileşme:

---.H

Yazdırılamayan izin verilirse, ASCII kodu 26 ekleyerek -ve değiştirilerek daha da geliştirilebilir H.



0

Python, 5440

En yüksek skor kazanır, değil mi?

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

Ben sadece zaten b / c bu yarım bir quine çözüm post it düşündüm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.