'เพิ่ม' ตัวอักษรในหนึ่งคำ


17

พ่อของฉันเป็นครูที่เกษียณอายุราชการและเขาเคยฝึกสะกดคำศัพท์และแบบทดสอบคณิตศาสตร์ร่วมกันซึ่งนักเรียนจะสะกดคำและจากนั้นให้คะแนนคำด้วยการเพิ่มตัวอักษรโดยที่ = 1, b = 2 เป็นต้น (เช่น cat = 3 + 1 + 20 = 24) สิ่งนี้ทำให้การจัดลำดับแบบทดสอบง่ายขึ้นเนื่องจากเขาเพียงแค่ต้องตรวจสอบ 'คะแนน' ไม่ถูกต้องแทนที่จะใช้คำที่สะกดผิดและได้รับประโยชน์เพิ่มเติมจากการทดสอบ 2 ทักษะในครั้งเดียว

เขาจ้างเพื่อนของฉันคนหนึ่งเขียนโปรแกรมที่จะทำคะแนนให้เขาดังนั้นเขาจึงสามารถสร้างคีย์คำตอบที่มีความยาวได้โดยไม่มีข้อผิดพลาด ปัญหานี้ได้รับแรงบันดาลใจจากโปรแกรมนั้น

ที่ต้องการ:

  1. ยอมรับคำใด ๆ ด้วยตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
  2. ส่งคืนข้อผิดพลาดสำหรับอักขระพิเศษใด ๆ เช่นช่องว่างยัติภังค์, @ ^% # ฯลฯ
  3. a = 1, b = 2, ... และ A = 1, B = 2, ...
  4. พิมพ์คะแนนของคำ
  5. (เป็นทางเลือก) ตรวจสอบว่าคำนั้นอยู่ในพจนานุกรมหลังจากให้คะแนนแล้วพิมพ์คำเตือนหากไม่ได้
  6. ไม่มีการนำเข้าพจนานุกรมตัวอักษร - ภายนอกจำนวน คุณต้องสร้างมันเอง

ภาษาใดก็ได้ที่ยอมรับได้ สิ่งนี้คล้ายกับ 'การต่อสู้รูตดิจิทัล ' แต่ง่ายกว่ามาก


2
นี่ควรจะเป็นรหัสกอล์ฟหรือไม่?
Peter Taylor

2
@ Zach ใช้code-golfแท็ก
Lowjacker

2
พ่อของคุณสนใจที่จะสอนกฎ "ฉันก่อน E ยกเว้นกฎ C" หรือไม่?
Nathan Merrill

2
ใช่แค่ตรวจสอบคะแนนเท่านั้น? aaaaaaaaaaaaaaaaaaaaaaaaฉันสะกดเป็นแมว พ่อ: คะแนนเป็น 24 หรือไม่? ถูกตัอง!
ericw31415

3
@ ericw31415 ทุกฟังก์ชั่นการแฮชมีการชนกัน ;-) จนถึงขณะนี้นักเรียนของเขาไม่ได้ลองใช้เวกเตอร์โจมตีนั่น
Zach

คำตอบ:


8

Golfscript - 23 ตัวอักษร

0\{.31&.(.26%=@64///+}/

ตรวจสอบให้แน่ใจว่าไม่มีบรรทัดใหม่ต่อท้ายในอินพุต (เช่นใช้echo -n)


เรามีผู้ชนะคนใหม่!
ซัค

โดยทั่วไปการกรองภายนอกควรจะรวมอยู่ในตัวละครนับอย่างใด (Ctrl-f การกรองภายนอก) แต่ฉันคิดว่ามันเป็นเพียง 2 ตัวอักษรพิเศษที่ต้องทำโดยไม่ต้อง
Jesse Millikan

2
@Jesse: echo -nจริงๆไม่นับเป็นตัวกรองภายนอก - จริง ๆ แล้วคำตอบที่คุณเชื่อมโยงแสดงให้เห็นว่ามันเป็นรูปแบบที่ถูกต้องสำหรับการป้อนข้อมูล
Nabb

10

*** สมอง (100)

>+[>,---------]<[<]>>
[--------------------
---------------------
-------------->]<[[[<
]>+[>]<->]<<]>-.

ฉันต้องยอมรับว่านี่ไม่สอดคล้องกับข้อกำหนดทั้งหมดเลยทีเดียว ก่อนอื่นจะยอมรับเฉพาะอักษรตัวพิมพ์ใหญ่เท่านั้นและคำนั้นจะต้องลงท้ายด้วยแท็บ มันมีพฤติกรรมที่ไม่ได้กำหนดสำหรับตัวละครที่ไม่ถูกต้องและไม่เกิดข้อผิดพลาด มันแสดงผลรวมของตัวอักษรเป็นตัวอักษร ASCII ตัวอย่างเช่นถ้าคำว่า "HELLO", (8 + 5 + 12 + 12 + 15 = 52) มันจะแสดงตัวอักษร "4" ซึ่งเป็นตัวอักษร ASCII สำหรับ 52 ซึ่งหมายความว่าโปรแกรมจะประหลาดเมื่อ จำนวนรวมมากกว่า 255

แต่นอกจากนั้นมันใช้งานได้ดี สมองของฉันสามารถรับมือกับปริมาณเพียงเล็กน้อยของ ... เอาละคุณก็รู้


ทำไมจบคำด้วยแท็บแทนที่จะขึ้นบรรทัดใหม่
Lowjacker

@Lowjacker เพราะผมถือว่า TAB เป็นเรื่องง่ายกว่ากังวลเกี่ยวกับ\nหรือหรือ\r\n \n\rและถ้าฉันใช้การขึ้นบรรทัดใหม่ฉันจะไม่มีหมายเลขรอบที่ดีเช่น 100 ตามจำนวนตัวละคร
ปีเตอร์โอลสัน

จะเกิดอะไรขึ้นถ้าคุณได้รับปริมาณมาก
Mateen Ulhaq

8

Python ( 65 64)

print sum(['',ord(i)-64]['@'<i<'[']for i in raw_input().upper())

สิ่งนี้จะทำให้เกิดข้อผิดพลาดหากคำนั้นมีอักขระที่ไม่ใช่ตัวอักษร แต่ไม่ใช่คำที่มีประโยชน์หรือให้ข้อมูล (แก้ไข: ส่วนปลายของหมวกถึง st0le สำหรับเคล็ดลับการจัดทำดัชนี)


1
print sum(['',ord(i)-64]['@'<i<'[']for i in raw_input().upper())โกนหนวดสองสามตัว
st0le

เพียงหนึ่งถ่านจริง : - \
st0le

บันทึก 4 ตัวอักษรโดยใช้input; บังคับให้ผู้ใช้ใส่เครื่องหมายคำพูดรอบสตริงอินพุต แต่ "ใช้งานง่าย" และ "ไม่อันตราย" ไม่ได้อยู่ในข้อมูลจำเพาะ!
jscs

ก็แค่เปลี่ยนเป็น Python 3! raw_inputinput
Oleh Prypin

print sum([i,ord(i)-64]['@'<i<'[']for i in raw_input().upper()) อีกโกนแล้ว
Alexander Nigl

8

Ruby, 43 ตัวอักษร

$_=gets.upcase;p~/[^A-Z]/?_: $_.sum-64*~/$/

ข้อความแสดงข้อผิดพลาดที่สร้างขึ้นไม่เป็นประโยชน์ การแก้ปัญหาทั้งสองโพสต์ที่นี่ถือว่าการป้อนข้อมูลที่ไม่เคยมีใคร LINEBREAK echo -nต่อท้ายเพื่อที่จะทดสอบพวกเขาใช้

Ruby, 76 ตัวอักษรพร้อมการตรวจสอบพจนานุกรม

l=STDIN.gets;$_=l.upcase;p~/[^A-Z]/?_: $_.sum-64*~/$/;[*$<].index(l)||$><<?W

ข้อความเตือนประกอบด้วยตัวอักษรเดี่ยว "W" ต้องระบุเส้นทางไปยังพจนานุกรมผ่าน ARGV ตัวอย่างการใช้งาน:

$ echo -n asd | ruby addletters.rb /usr/share/dict/words
24
W
$ echo -n cat | ruby addletters.rb /usr/share/dict/words
24

2
คุณสามารถสับอักขระได้ 9 ตัวในรุ่นตรวจสอบพจนานุกรมโดยทำเครื่องหมายข้อผิดพลาดเป็นเครื่องหมายอัศเจรีย์
Peter Olson

คุณได้รับรางวัลชมเชยสำหรับรายการที่สั้นที่สุดด้วยการตรวจสอบพจนานุกรม ทางที่จะไป!
Zach

ทำไมการตรวจสอบพจนานุกรมจึงเสนอให้ถ้ามันไม่ให้ขอบที่แท้จริง (ในทางตรงกันข้ามมันแค่ทำให้โค้ดบวม)
วิธีช่วยเหลือ

5

Python 2.6 (72 ตัวอักษร) โดยไม่ตรวจสอบพจนานุกรม

print sum(map(" abcdefghijklmnopqrstuvwxyz".index, raw_input().lower()))

Python 2.6 (178 Chars *) พร้อมการตรวจสอบพจนานุกรม

w=raw_input().lower()
print sum(map(" abcdefghijklmnopqrstuvwxyz".index, w))
if w not in open('/usr/share/dict/american-english').read().split():
 print('Word not in dictionary')

* สามารถลดลงเหลือ 156 ด้วยข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์น้อยกว่า :-)

ขอขอบคุณผู้แสดงความคิดเห็นทั้งหมดที่ช่วยปรับปรุงสิ่งนี้


คุณอาจต้องการพิจารณาใช้sumbuiltin พร้อมนิพจน์ตัวสร้างแทนที่จะเป็นforลูป มันจะทำให้คุณตัดออกสองสามตัวอักษร (~ 17)

@jloy: ขอบคุณที่ชี้ให้เห็น
จอห์น

สามารถยกเลิกวงเล็บในการพิมพ์ได้
st0le

ดูเหมือนว่าคุณกำลังใช้aเพียงครั้งเดียวดังนั้นใช้ตัวอักษร ... "0abc....z".index(i)จะทำงานได้อย่างเท่าเทียมกัน
st0le

0ในอาร์เรย์เกณฑ์การให้คะแนนของคุณเป็นคนฉลาด แต่มันก็หมายความว่าcat0เป็นที่ยอมรับไม่มีข้อผิดพลาดที่ไม่ถูกต้องผมคิดว่า ซึ่งเลวร้ายเกินไปเนื่องจากจะช่วยให้คุณสามารถส่งผ่านmap(a.index,w)ไปsumแทน (แทนที่ตัวอักษรaตามที่ st0le แนะนำ)

4

Perl (52) (48)

golfedมากขึ้นขอบคุณTimwi

perl -lpe "($w=uc)=~/[^A-Z]/&&die;$w=~s/./$_-=64-ord$&/ge"


คุณไม่มี-eธงที่นั่น
Lowjacker

1
อย่างน้อยคุณควรรวมการตั้งค่าสถานะpและlล่ามไว้ในจำนวนอักขระของคุณ ดูการสนทนานี้ในเมตาดาต้า
Ventero

syntax error at -e line 1, near "(=" Execution of -e aborted due to compilation errors.ผมทำอะไรผิดหรือเปล่า?
ผู้ใช้ที่ไม่รู้จัก

หากคุณกำลังใช้งานระบบยูนิกซ์ให้เปลี่ยนเครื่องหมายคำพูดเป็นสองคำเดียว
Chinese perl goth

@Timwi: 'ยอมรับคำใด ๆ ด้วยตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก' ไปด้ายผิดขออภัย ฉันลบมันทันที @ จีน: ใช่ขอบคุณด้วยคำพูดเดียวมันก็โอเค ตราบเท่าที่ฉัน จำกัด ตัวเองให้ป้อนข้อมูล ascii :)
ผู้ใช้ที่ไม่รู้จัก

4

Python (80)

w=raw_input().lower()
s=0
for l in w:s+=range(97,123).index(ord(l))+1
print s

Python v2 (65 แต่จะได้รับการยอมรับ char)

print sum(map(range(96,123).index,map(ord,raw_input().lower())))

v3 (60 ตัวอักษร @ จะได้รับการยอมรับ แต่ไม่นับขอบคุณ jloy)

print sum(map(range(64,91).index,map(ord,input().upper())))

คำแนะนำ: มีวิธีที่จะลบค่าใช้จ่ายเพิ่มเติมจากโซลูชันของคุณ :)

2
@jloy 'คำใบ้' ที่เป็นประโยชน์คืออะไร ;)
Mateen Ulhaq

4

สกาล่า: 59 ตัวอักษร, 7 ในปริมาณทั้งหมดไม่มี dict:

(0/:"Payload".map(c=>if(c.isLetter)(c-'A')%32 else-999))(_+_)
67

ไม่มีพจนานุกรมจนถึงตอนนี้ ผลลบหมายถึง: ติดลบ!

(0/:"Pay!wall?".map(c=>if(c.isLetter)(c-'A')%32 else-999))(_+_)   
-1915

จัดการ Umlaute เยอรมันอย่างสง่างามโดยวิธีการ:

(0/:"Müllrößchen".map(c=>if(c.isLetter)(c-'A')%32 else-999))(_+_)
155

ว้าวมีตัวอักษรน้อยกว่ารุ่น Perl (และยังสามารถอ่านได้มากขึ้น)
วิธีใช้ผู้ช่วย

ฉันลอง SHiNKiROUs และ chinesis-Perl-solution แต่พวกเขาก็ไม่ได้ผลสำหรับฉัน ช่วยให้พวกเขาเป็นและเริ่มพวกเขาโดยalpha.pl perl alpha.plพวกเขาเพิ่งจัดการกับ Ascii หรือไม่? ดี - ที่ Perl เป็นสัตว์ร้ายตัวเก่า ... :)
ผู้ใช้ที่ไม่รู้จัก

Perl และ Unicode เป็นระเบียบใหญ่ คุณอาจต้องเรียกใช้พวกเขาในฐานะperl -M5.010 alpha.plหรืออะไรทำนองนั้น
Peter Taylor

ฉันได้ยินมาว่าฉันต้องการใบเสนอราคาเดียวแทนที่จะเป็นเครื่องหมายคำพูดคู่บน Linux และสิ่งนี้ใช้ได้ผลขอบคุณ
ผู้ใช้ที่ไม่รู้จัก

4

Java + Google Guava ไลบรารี 347 ตัวอักษรพร้อมการตรวจสอบพจนานุกรม

รุ่นสตริงที่มีความยาวไม่สามารถอ่านได้ 1 :-)

import java.io.*;import com.google.common.base.*;import com.google.common.io.*;class C{public static void main(String[]a)throws Exception{int s=0;for(int c:a[0].toUpperCase().toCharArray()){assert(c>64&&c<91);s+=c-64;}String d=Files.toString(new File(a[1]),Charsets.UTF_8);if(StringUtils.containsIgnoreCase(d,a[0]))System.out.println("w");System.out.println(s);}}

รุ่นที่มนุษย์อ่านได้ (เรียงจาก :-))

import java.io.*;

import com.google.common.base.*;
import com.google.common.io.*;

class C {
    public static void main(String[] a) throws Exception {
        int s=0;

        for(int c : a[0].toUpperCase().toCharArray()) {
            System.out.println(c);
            assert(c > 64 && c < 91);
            s += c - 64;
        }

        String d = Files.toString(new File(a[1]), Charsets.UTF_8);

        if (d.contains(a[0])) System.out.println("w");

        System.out.println(s);
    }
}

ขณะนี้พา ธ พจนานุกรมถูกส่งผ่านทางa[1]เพื่อยืนยันว่าคุณจะต้องใช้-eaแฟล็ก (+3 ตัวอักษรเพิ่มเติม) สำหรับพจนานุกรมนั้นใช้ dict /usr/share/dict/words(ควรมีในระบบ * nix ส่วนใหญ่)


จนถึงตอนนี้คุณเป็นคนเดียวที่มีการตรวจสอบพจนานุกรมดังนั้น +1
Zach

บรรทัดเดียว วิธีนี้ไม่สามารถอ่านได้โดยเฉพาะอย่างยิ่งถึงแม้ว่าฉันคิดว่ามันจะช่วยประหยัดตัวอักษร
เนท Koppenhaver

ฉันจะเพิ่มโซลูชันที่อ่านได้มากขึ้น (และอีกวิธีที่สั้นกว่าโดยใช้ Google Guava เพื่อลดรหัสสำเร็จรูป)
วิธีช่วยเหลือ

คุณอนุญาตให้ใช้ ascii แต่ใช้ Charset.UTF-8 หรือไม่
ผู้ใช้ที่ไม่รู้จัก

1
เนื่องจากสตริงUTF-8สั้นกว่าชุดอักขระอื่น :-)
วิธีใช้ผู้ช่วย

4

Python 3, 95 ตัวอักษรพร้อมพจนานุกรม

d=input().lower()
print(d in open("d").read()and sum(['',ord(c)-96]['`'<c<'{']for c in d)or'f')

พจนานุกรมจะต้องอยู่ในไฟล์ชื่อ d

Python 3, 61 ที่ไม่มีพจนานุกรม แต่มีแนวคิดที่ถูกขโมย

print(sum(['',ord(c)-96]['`'<c<'{']for c in input().lower()))


3

VB.NET, 84 82 73 71

Console.Write(Console.ReadLine.Sum(Function(c)Asc(Char.ToUpper(c))-64))


แก้ไข:ด้วยการตรวจสอบคือ:

Dim r=Console.ReadLine
Console.Write(If(r.All(AddressOf Char.IsLetter),r.Sum(Function(c)Asc(Char.ToUpper(c))-64),"Invalid input."))

129 ตัวอักษร ในกรณีนี้:

C #, 118

var r=Console.ReadLine();Console.Write(r.All(char.IsLetter)?r.Sum(c=>char.ToUpper(c)-64).ToString():"Invalid input.");

1
สิ่งนี้ไม่ได้ตรวจสอบอินพุต
Lowjacker

อ๊ะ! รอสัก
ครู่

3
ฉันคิดว่าคุณควรจัดทำโปรแกรมที่สมบูรณ์ โซลูชัน C # ของคุณไม่ได้รวบรวม คุณต้องวางมันในเมธอด Main ภายในการประกาศคลาสและนับจำนวนตัวอักษรทั้งหมด
Timwi

1
ไม่เพราะรหัสนั้นไม่ได้ทำอะไรเลยและมันไม่ยุติธรรมเลยที่จะทำให้ผู้ใช้เสียเปรียบภาษาเชิงวัตถุ นี่คือ C # / VB.NET ที่ถูกต้องอยู่แล้ว
Ry-

3

ปรับปรุงคำตอบของ John เล็กน้อย: Python (90)

s=0
for i in raw_input().lower():
 s+=("abcdefghijklmnopqrstuvwxyz".index(i)+1)
print(s)

2
เพิ่มถ่านหุ่นในการเริ่มต้นสตริงจะสั้น ... วงเล็บสามารถถอดออกได้
st0le


3

Golfscript - 39 ตัวอักษร

n%~{.96>{96}{64}if-..26>\0<|{0/}*}%{+}*

ข้อผิดพลาดที่มันพ่นไม่ได้เป็นสิ่งที่ดีที่สุด แต่มันก็ยกเลิกการทำงานได้


ฉันไม่รู้อะไรเลยเกี่ยวกับ golfscript ดังนั้นฉันจะถือว่านี่เป็นไปตามข้อกำหนดและประกาศว่าคุณเป็นผู้ชนะ!
Zach

อ๊ะคุณชนะแล้ว! ฉันเดา 2 วันไม่นานพอที่จะรอคำถามกอล์ฟรหัส?
ซัค

3

PYTHON 62 68 * ตัวละคร

print sum(map(chr,range(65,91)).index(c)+1 for c in input().upper())

ต้องการให้ผู้ใช้ป้อนสตริงโดยใช้เครื่องหมายคำพูดและไม่ปลอดภัย ( inputเรียกใช้โค้ด) แต่อย่างที่ฉันได้กล่าวไว้ในความคิดเห็นในโพสต์อื่นว่า "เป็นมิตรกับผู้ใช้" และ "ไม่เสี่ยงต่อความปลอดภัย" ไม่ใช่ข้อมูลจำเพาะ!


* ฉันลืมไปprintแล้ว dammit


คำตอบของ jloyยังสั้นกว่าจริง ๆ เพราะinput/ raw_inputความแตกต่าง
jscs

2

ทับทิม 1.9, 69

w=gets.chop.upcase
w[/[^A-Z]/]&&fail
p w.bytes.inject(0){|s,b|s+b-64}

จัดการกับอักขระ ascii เท่านั้น ฉันคิดว่าทับทิมมาจากศตวรรษของเราหรือไม่ :)
ผู้ใช้ที่ไม่รู้จัก

@ ผู้ใช้ที่ไม่รู้จัก: ข้อมูลจำเพาะไม่ได้บอกว่าต้องทำ การทำมันค่อนข้างซับซ้อน ...
Lowjacker

2

GolfScript, 50 (53)

ให้ข้อผิดพลาดกับตัวละครที่ไม่ดี แต่ไม่ใช่ตัวที่ดีมาก (50 ตัวอักษร):

);[{""123,97>+91,65>+?}/].-1?0<{{26%1+}%{+}*}{@}if

ให้ข้อผิดพลาด "E" แทน (53 ตัวอักษร):

);[{""123,97>+91,65>+?}/].-1?0<{{26%1+}%{+}*}{;"E"}if

ตัวอย่างข้อมูลที่สร้างตัวอักษร123,97>+ถูกขโมยจาก Ventero


2

J (55)

+/64-~-&32`]@.(<&97)`_:@.(<&65)`_:@.(>&122)"0,I.a.&e."0

สิ่งนี้สอดคล้องกับเงื่อนไขทั้งหมดยกเว้นพจนานุกรมหนึ่งข้อ ในฐานะที่เป็นเงื่อนไขข้อผิดพลาดมันจะส่งกลับ "อนันต์" (สัญลักษณ์ขีดล่างใน J) สำหรับคำที่มีอะไร แต่ตัวอักษร


2

Haskell (127)

(ทำให้เกิดข้อผิดพลาดกับตัวอักษรแปลก ๆ )
(เช่น: ช่องว่างระหว่างtoUpper.และ\xจำเป็นต้องใช้มิฉะนั้นจะแยกเป็น(toUpper) .\ (x))

import Char
main=getLine>>=putStrLn.show.sum.(map$(-65+).ord.toUpper. \x->if x`elem`['A'..'Z']++['a'..'z']then x else error"")

Haskell (70)

(ไม่เพิ่มข้อผิดพลาด แต่สั้นกว่า 45%)

import Char
main=getLine>>=putStrLn.show.sum.(map$(-65+).ord.toUpper)

2

C ++ ( 111 107)

void main(){int a=0;s8*b=new s8[99];for(cin>>b;*b;)if(isalpha(*b))a+=tolower(*b++)-96;else return;cout<<a;}

"ตั้งค่า" / etc:

#include <iostream>
#include <cstdio>
#include <cctype>

#ifdef _MSC_VER
    typedef __int8 s8;
#else
    typedef signed char s8;
#endif

พฤติกรรม "ไม่ได้กำหนด" (เป็น "การปฏิบัติที่ไม่เหมาะสม" มากกว่า "ไม่ได้กำหนด" แต่ทำได้ดีมาก):

  • void main() ที่บอกว่ามันทั้งหมด
  • ฉันใช้โดยไม่ต้องnewdelete

1

JavaScript 1.8, 80 ตัวอักษร

อ่านแล้วน่าประหลาดใจ!

alert(Array.reduce(prompt().toLowerCase(),function(a,b)a+b.charCodeAt(0)-96,0))

สำหรับการใช้ใน Chrome ฉันต้องแปลงนิดหน่อย: alert(prompt().toLowerCase().split("").reduce(function(a,b){return a+b.charCodeAt(0)-96},0)). ฉันยังคงเหมือนการแก้ปัญหา JavaScript ที่สุด :)
pimvdb

มันจะไม่ส่งคืนข้อผิดพลาดเมื่อคุณใช้อักขระที่ไม่ถูกต้อง ???
ericw31415

1

APL (34)

+/{⍵∊⍳26:⍵}¨{64-⍨A-32×96<A←⎕UCS⍵}⍞

ให้คะแนนหรือVALUE ERRORถ้ามีอักขระที่ไม่ใช่ตัวอักษรในอินพุต

คำอธิบาย:

  • : อ่านบรรทัดอินพุต
  • {... }: ฟังก์ชั่นที่ใช้กับอักขระทุกตัวของอินพุต
  • A←⎕UCS⍵: เก็บค่า ASCII ของอักขระปัจจุบันใน A
  • A-32×96<A: make ตัวอักษรตัวพิมพ์ใหญ่: จากAถูกลบ 32 ถ้า96<A(ดังนั้นถ้าเป็นตัวพิมพ์ใหญ่) มิฉะนั้น 0
  • 64-⍨: ลบ 64 จากสิ่งนี้โดยให้ A = 1, B = 2 ...
  • ¨: ใช้ฟังก์ชันนี้กับตัวละครทุกตัว:
  • ⍵∊⍳26: ถ้าตัวละครอยู่ระหว่าง 1 และ 26 ...
  • :⍵: แล้วส่งคืน⍵ (และเนื่องจากไม่มีส่วนอื่นจะมีVALUE ERRORถ้าหากไม่ใช่ระหว่าง 1 ถึง 26)
  • +/: รวมค่าทั้งหมดเข้าด้วยกัน (และค่านี้จะถูกส่งออกโดยอัตโนมัติเนื่องจากเป็นผลลัพธ์สุดท้าย)

1

JavaScript ขนาด 60 ไบต์

s=>[...s.toUpperCase()].reduce((a,b)=>a+b.charCodeAt()-64,0)

หากโปรแกรมต้องส่งคืนข้อผิดพลาดในอินพุตที่ไม่ถูกต้องดังนั้น 80 ไบต์:

s=>/[^a-z]/i.test(s)?_:[...s.toUpperCase()].reduce((a,b)=>a+b.charCodeAt()-64,0)

หากอินพุตไม่ถูกต้องคอนโซลจะบอก_ว่าไม่ได้กำหนดไว้ (จะต้องไม่มีตัวแปรที่กำหนดไว้เรียกว่า_)


1

Python 3, 58 55

print(sum(ord(x)%32for x in input()if x.isalpha()or z))

ไม่มีพจนานุกรมหรือแนวคิดที่ถูกขโมย แต่ยังมีข้อผิดพลาดไม่ช่วยเหลือ;)

ขอบคุณ @ Eᴀsᴛᴇʀʟʏ

ทดสอบที่นี่


ฉันคิดว่าคุณสามารถบันทึก byte ได้โดยเปลี่ยนไปใช้ python 2 และทำprint<SPACE>sum(ord(.......ลบวงเล็บ 2 ตัวรอบนิพจน์
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋที่ถูกต้อง แต่การป้อนข้อมูลจะต้องอยู่ในวงเล็บและฉันไม่ต้องการที่จะส่งเสริมงูหลาม 2;)
อเล็กซานเดอร์ Nigl

PYTHON 2 คือชีวิต !! และฉันไม่คิดว่ามันจะต้องใส่วงเล็บหรือไม่
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ sry ฉันหมายถึงอ้าง input()ใน python3 อยู่raw_input()ใน python2
Alexander Nigl

โอ้ฉันลืมไปแล้ว ฮึ่ม
Rɪᴋᴇʀ



1

C # พร้อมการตรวจสอบความถูกต้อง: 108 ตัวอักษร (พร้อมข้อผิดพลาด 12 ข้อ):

var s=Console.ReadLine();Console.Write(s.All(Char.IsLetter)?s.Sum(x=>x&'_'-'@').ToString():"Invalid input");

C # ไม่มีการตรวจสอบ: 60 53 ตัวอักษร:

Console.Write(Console.ReadLine().Sum(x=>x&'_'-'@'));

1
ในตัวที่สองที่ไม่มีการตรวจสอบคุณสามารถลดอักขระได้มากขึ้นโดยการลบการประกาศตัวแปร s และใช้ Console.ReadLine () แบบอินไลน์
hermiod

1

Perl (42 31)

perl -F -pale '$c+=ord(uc$_)-64for@F;$_=$c'

ฉันหวังว่าการนับ F, p, a และ l เป็น 1 ตัวละครที่ถูกต้อง


1

JavaScript, 68 ไบต์

นี้สามารถตีกอล์ฟได้มากกว่าแน่นอน

w=>[...w.toLowerCase()].map(v=>v.charCodeAt()-96).reduce((a,b)=>a+b)

ด้วยการตรวจสอบพจนานุกรม (Node.js และลูกหลาน Unix เท่านั้น) 195 ไบต์

ใช้/usr/share/dict/wordsและสามารถย่อให้สั้นได้ (ดูข้อความเตือน)

w=>(require("fs").readFile("/usr/share/dict/words",(e,t)=>!(t+"").split`
`.includes(w=w.toLowerCase())&&console.warn(w+" not found in dict")),[...w].map(v=>v.charCodeAt()-96).reduce((a,b)=>a+b))

สำหรับข้อความแสดงข้อผิดพลาดคุณทำconsole.error()ไม่ได้console.warn()ไม่ได้
ericw31415

แต่ความท้าทายที่กล่าวถึงการเตือน (5. (เลือกได้) ให้ตรวจสอบว่าคำนั้นอยู่ในพจนานุกรมหลังจากให้คะแนนแล้วพิมพ์คำเตือนหากไม่ได้) ไม่ได้หมายถึงความ
เชื่องช้า

@SpeedyNinja ฉันคิดว่ามันยังคงนับว่าไม่ได้เป็นจุดที่ท้าทาย ...
R

@ EᴀsᴛᴇʀʟʏIʀᴋมันสั้นกว่า 1 ตัวอักษร;)
MayorMonty

@SpeedyNinja คุณพูดถูกฉันอ่านผิด
ericw31415
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.