Bernardino xác định các từ đô la không thay đổi


47

Định nghĩa

Từ đô la là một từ trong đó khi mỗi chữ cái của nó được đưa ra một giá trị cent, từ a = 1 đến z = 26 và các chữ cái được tính tổng, kết quả là 100. Dưới đây là một ví dụ về CodeReview và đây là danh sách từ đô la tôi tìm thấy trực tuyến.

Đầu vào

Đầu vào sẽ được sắp xếp theo thứ tự abc từ az, trong kiểu dữ liệu văn bản của một ngôn ngữ của bạn (mảng được cho phép). Bạn không cần phải tính đến bất kỳ đầu vào nào khác - sẽ không có dấu cách, dấu nháy đơn hoặc dấu gạch nối. Bạn có thể lấy chữ thường, chữ hoa hoặc kết hợp. Trailing newlines được cho phép.

Đầu ra

Xuất giá trị trung thực nếu đầu vào là từ đô la và giá trị falsey nếu không.

Các trường hợp thử nghiệm

Sự thật:

buzzy
boycott
identifies
adiabatically
ttttt

Falsey:

zzz
zzzzzzz
abcdefghiljjjzz
tttt
basic

Đây là môn đánh gôn, vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng! Tiêu chuẩn và quy tắc áp dụng. Tie đi đến poster đầu tiên.


20
Tiêu đề có từ đô la trong đó, xin lỗi nếu nó ném bạn đi.
Stephen

Câu trả lời:


7

GS2 , 6 byte

▲1Θd←q

Đầu vào phải được viết hoa.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

  Θ       Combine the previous two tokens into a block and map it over the input.
▲             Push 64.
 1            Subtract 64 from the character on the stack.
   d      Take the sum of the resulting character array.
    ←     Push 100.
     q    Compare the two items on the stack for equality.



11

Perl 6 , 21 byte

{100==[+] .ords X%32}

Thử nó

Luân phiên:

{Ⅽ==[+] .ords X%32}

Thử nó

Lưu ý rằng đó ROMAN NUMERAL ONE HUNDREDU + 216D với sự hợp nhất của 100, trong
đó mất 3 byte để mã hóa.

Mở rộng:

{  # bare block lambda with implicit parameter $_

  100     # is 100
  ==      # equal to
  [+]     # the sum of the following

    .ords # the ordinals of the input (implicit method call on $_)
    X[%]  # crossed using the modulus operator
    32    # with 32 to get 65..90 or 97..122 to become 1..26
}

11

MATL , 8 byte

96-s100=

Sử dụng đầu vào chữ thường.

Hãy thử trực tuyến!

Giải trình

Mã này có thể đọc được như sau:

96-   % Implicitly input string. Subtract 96 from each char interpreted as ASCII code
s     % Sum of array
100=  % Does it equal 100? Implicitly display

7

JavaScript (ES6), 46 byte

Trả về 0hoặc 1.

let f =

w=>[...w].map(c=>p-=parseInt(c,36)-9,p=100)|!p

console.log(f('buzzy'))
console.log(f('qwerty'))


Thật thú vị khi tôi đã thử reducevà đệ quy cả hai dài hơn 2 byte.
Neil

@Neil Trên thực tế, nó đã được sử dụng reduce()trong vài phút đầu tiên của thời gian ân hạn khi tôi ban đầu đăng nó.
Arnauld

7

Haskell , 32 byte

f s=sum[1|c<-s,_<-['a'..c]]==100

Hãy thử trực tuyến!

Ý tưởng là tạo một danh sách các ký tự từ ađến ký tự đã cho cho mỗi ký tự trong danh sách và kiểm tra xem tổng chiều dài là 100.

Những nỗ lực khác:

f s=sum[1|c<-s,_<-['a'..c]]==100

f s=sum[fromEnum c-96|c<-s]==100
f s=100==length((\c->['a'..c])=<<s)
(==100).length.(>>= \c->['a'..c])
(==100).length.(=<<)(\c->['a'..c])
(==100).length.(enumFromTo 'a'=<<)
f s=100==length(do c<-s;['a'..c])

Quá tệ enumFromTolà quá lâu.


1
Bạn nói đúng rằng chiều dài là một sự xấu hổ, (100==).length.(enumFromTo 'a' =<<)là một cách sử dụng sạch điểm không cần thiết
Julian Wolf

7

C, 45 43 byte

Cảm ơn @Neil vì đã lưu hai byte và làm cho giải pháp không phân biệt chữ hoa chữ thường!

n;f(char*s){for(n=100;*s;)n-=*s++&31;n=!n;}

Hãy thử trực tuyến!


Có vẻ như bạn có thể lưu một byte bằng cách đặt n=0toàn cục và sau đó bỏ qua mệnh đề đầu tiên của thông số vòng lặp, phải không? chỉnh sửa: đừng bận tâm, tôi đoán rằng nó sẽ chỉ hoạt động cho cuộc gọi đầu tiên.
Julian Wolf

3
Có thể đếm ngược từ 100 byte lưu? Ngoài ra, &31có thể làm việc để làm cho trường hợp mã của bạn không nhạy cảm.
Neil

Vì tò mò, làm n=!nviệc thế nào? Tôi hiểu rằng nó kiểm tra nếu nbằng không, bởi vì dựa trên một số thử nghiệm tôi thấy !0lợi nhuận 1; !15trả lại 0; và !-15trở lại 0là tốt. Nhưng tại sao? Toán hạng nào !trong C khi sử dụng nó là !integer?
Kevin Cruijssen

@KevinCruijssen !chỉ là logic not. Trong C, 0có nghĩa là false, và bất kỳ giá trị số nguyên khác có nghĩa true. Vì vậy !0 == 1, và !n == 0cho mọi n != 0.
Steadybox

@Steadybox Ah, tôi không biết phần này: " và bất kỳ giá trị nguyên nào khác có nghĩa là đúng ", nhưng nó thực sự có ý nghĩa. Tôi luôn luôn (không chính xác) nghĩ về nó như là 0=false; 1=truethay vào đó, do đó tôi bối rối. Cảm ơn câu trả lời.
Kevin Cruijssen

6

Haskell , 32 byte

f w=sum[fromEnum c-96|c<-w]==100

Điều này làm việc cho đầu vào chữ thường. Đối với chữ hoa , s/96/64/. Hỗ trợ trường hợp hỗn hợp sẽ thêm một loạt các byte.


6

Toán học, 23 byte

100==Tr@LetterNumber@#&

Hàm thuần túy lấy một chuỗi (hoặc một mảng các chữ cái) làm đầu vào, không phân biệt chữ hoa chữ thường và trả về Truehoặc False. Ở đây Trchỉ cần thêm các chữ số với nhau; mọi thứ khác là tự giải thích.


6

Jelly , 9 7? * 8 byte

ɠO%32S⁼³

Chương trình đầy đủ, xuất ra 1 nếu đầu vào là một từ đô la hoặc 0 nếu không.

Hãy thử trực tuyến!

Làm sao?

ɠO%32S⁼³ - Main link
ɠ        - read a line of input from STDIN
 O       - cast to ordinals
  %32    - mod 32 (vectorises) (-3*32=96 from lowercase; -2*32=64 from uppercase)
     S   - sum
       ³ - literal: 100
      ⁼  - equal?

* Nó có thể là 7 byte?

Lý do duy nhất khiến đầu vào ɠnày bị giữ ³là 100, thay vì đầu vào dòng lệnh thứ 3 ( đầu vào chương trình thứ 1 ).

Một cách để tránh điều đó sẽ được, như Dennis chỉ ra, để tạo ra 100 bằng cách sử dụng dạng chữ thô ȷ2là 10 2 . Điều này dẫn đến 8 byte khác O%32S=ȷ2, nhưng đây là một hàm đơn âm chưa được đặt tên (cũng như hoạt động như một chương trình đầy đủ với đối số thứ 3 ).

Vì trong golf, người ta có thể tạo các biến hoặc hàm trợ giúp để hạn chế chương trình mà họ có thể cư trú (người ta không thể sử dụng lại tên trong phạm vi mà không ngăn chức năng được sử dụng lại), có thể hạn chế chương trình chỉ lấy đầu vào từ STDIN có thể cũng được chấp nhận, trong trường hợp đó, 7 byte O%32S=³sẽ được chấp nhận ở đây dưới dạng hàm không tên.


1
Ngoài ra , O%32S=ȷ2. Hoạt động cho đầu vào chữ hoa và chữ thường.
Dennis

@Dennis Nó có thể là đường biên nhưng O%32S⁼³thực sự sẽ không phải là một mục hợp lệ vì nó xác định một chức năng không tên, có thể sử dụng lại, miễn là phần còn lại của chương trình không sử dụng đối số dòng lệnh cho đầu vào?
Jonathan Allan

Hừm, tôi đoán điều đó có thể được thực hiện. Chẳng khác gì với việc sử dụng biến toàn cục trong C chẳng hạn.
Dennis

6

Alice , 23 byte

/o!
\i@/e)q&w[?'`-+k3-n

Hãy thử trực tuyến!

Đầu vào phải là chữ thường In 1cho các từ đô la và 0cách khác.

Giải trình

Đã đến lúc thể hiện băng của Alice và một số luồng điều khiển nâng cao. Mặc dù hoạt động khá tốt với các số nguyên và chuỗi riêng lẻ, Alice không tích hợp vào a) xác định độ dài của chuỗi, b) chuyển đổi giữa các ký tự và các điểm mã của chúng. Lý do cho điều này là tất cả các lệnh của Alice đều ánh xạ các số nguyên thành số nguyên hoặc chuỗi thành chuỗi. Nhưng cả hai đều yêu cầu các chuỗi ánh xạ tới các số nguyên hoặc ngược lại, vì vậy chúng không phù hợp với một trong hai chế độ của Alice.

Tuy nhiên, ngoài ngăn xếp của nó, Alice còn có một cuộn băng và chế độ Hồng y và Thông thường diễn giải dữ liệu trên băng theo những cách khác nhau

  • Ở chế độ Cardinal, đó là một cuộn băng thông thường quen thuộc với các ngôn ngữ khác như Brainfuck. Bạn có thể lưu trữ một số nguyên trong mỗi ô và bạn có thể di chuyển một đầu băng xung quanh. Băng dài vô hạn và ban đầu giữ -1 trong mỗi ô. Các ô cũng được lập chỉ mục và đầu băng bắt đầu ở chỉ số 0 .
  • Chế độ thông thường có đầu băng riêng (cũng bắt đầu từ chỉ số 0 ) và nó diễn giải băng dưới dạng danh sách các chuỗi. Các chuỗi được kết thúc bởi các ô không có ký tự (nghĩa là bất kỳ giá trị nào không phải là điểm mã Unicode hợp lệ), đặc biệt là -1 . Vì vậy, đối với chế độ Thông thường, băng ban đầu được lấp đầy bằng các chuỗi trống.

Băng này có thể được sử dụng cho cả hai thao tác trên: để có được độ dài chuỗi, chúng tôi ghi nó vào băng ở chế độ Thông thường, tìm cách kết thúc -1 ở chế độ Cardinal và lấy vị trí của đầu băng. Để chuyển đổi các ký tự thành các điểm mã của chúng, chúng ta chỉ cần đọc chúng ra khỏi băng ở chế độ Cardinal.

Hai tính năng quan trọng khác được sử dụng trong giải pháp này là stack return và iterator. Alice có một ngăn xếp trả về thường được lấp đầy khi sử dụng lệnh nhảy jvà bạn có thể bật một địa chỉ để nhảy trở lại k. Tuy nhiên, cũng có thể đẩy địa chỉ hiện tại vào ngăn xếp trả lại mà không cần nhảy ở bất cứ đâu w. Nếu chúng ta kết hợp wvới lệnh lặp lại& , chúng ta có thể đẩy địa chỉ hiện tại đến ngăn xếp trở lại n lần. Bây giờ mỗi lần chúng tôi đạt được k, một bản sao được bật ra khỏi ngăn xếp trả về và chúng tôi thực hiện một lần lặp khác từ w(bắt đầu từ ô sau nó, bởi vì IP di chuyển trước khi thực hiện lệnh khác). Khi ngăn xếp trở lại trống rỗng,kkhông có gì cả và IP chỉ đơn giản là đi qua. Do đó &w...kbật một số nguyên n và sau đó thực hiện ... n + 1 lần, điều này cho chúng ta một cách rất ngắn gọn để diễn tả một forvòng lặp đơn giản .

Tự mã ...

/     Reflect to SE. Switch to Ordinal.
i     Read the input word as a string.
      Bounce off bottom boundary, move NE.
!     Store the input word on the tape.
      Bounce off top boundary, move SE.
/     Reflect to E. Switch to Cardinal.
e     Push -1.
)     Seek right on the tape for a -1, which finds the -1 terminating
      the input word.
q     Push the tape head's position, which gives us the string length N.
&w    Repeat this loop n+1 times (see above for an explanation)...
  [     Move the tape head left by one cell.
  ?     Retrieve the code point of the character in that cell.
  '`    Push 96.
  -     Subtract it from the code point to convert the letters to 1...26.
  +     Add the result to a running total. This total is initialised to 
        zero, because in Cardinal mode, the stack is implicitly filled with
        an infinite amount of zeros at the bottom.
k    End of loop.
     Note that the above loop ran once more than we have characters in the
     string. This is actually really convenient, because it means that we've
     added a "-1 character" to the running total. After subtracting 96 to
     convert it to its "letter value" this gives 97. So dollar words will
     actually result in 100 - 97 = 3, which we can check against for one
     byte less than for equality with 100.
3-   Subtract 3 to give 0 for dollar words.
n    Logical NOT. Turns 0 (dollar words) into 1 and everything else into 0.
     The IP wraps around to the beginning of the first line.
\    Reflect to NE. Switch to Ordinal.
o    Implicitly convert the result to a string and print it.
     Bounce off top boundary, move SE.
@    Terminate the program.

Đẹp! Tôi đã nhận được 41 với lần thử đầu tiên
Kritixi Lithos

6

R, 55 54 byte

function(x)sum(match(el(strsplit(x,"")),letters))==100

-1 byte nhờ BLT

  • trả về một hàm thực hiện tính toán cần thiết, trả về TRUEFALSEnhư người ta mong đợi.

  • lấy đầu vào là chữ thường; sẽ chỉ là một chuyển đổi từ letterssang LETTERScho tất cả chữ hoa


1
function(x)sum(match(el(strsplit(x,"")),letters))==100tiết kiệm một byte.
BLT

6

Ruby, 25 byte

->s{s.sum-s.size*64==100}

Hoạt động cho chữ hoa.

Tôi thấy một vài mục Ruby phức tạp hơn, nhưng nó thực sự đơn giản. s.sumthêm mã ASCII của chuỗi đầu vào và từ đó, chúng tôi trừ đi 64 lần độ dài của chuỗi.

Ví dụ sử dụng

f=->s{s.sum-s.size*64==100}

puts f["ADIABATICALLY"]
puts f["ZZZ"]

Điều này chỉ hoạt động trên Ruby 2.4 và hiện không hoạt động trên TIO
GB

1
@GB cảm ơn vì nhận xét nhưng tôi đang chạy trên 2.2.6 và nó hoạt động tốt với tôi. Tính năng này đã được ghi nhận từ 1.9.3. Nó cũng hoạt động trên TIO.run và Ideone.com.
Cấp sông St

Bạn nói đúng, tôi nghĩ nó giống với Array # sum, mới ở 2,4
GB

Trên thực tế, đó không phải là tổng của các giá trị ASCII, định nghĩa là "Trả về tổng kiểm tra n-bit cơ bản của các ký tự trong str". Điều này hoạt động trong trường hợp này, tất nhiên.
GB


5

05AB1E , 9 byte

5bIvAyk>-

Hãy thử trực tuyến!

Giải trình

1 là giá trị trung thực duy nhất trong 05AB1E, chúng ta có thể lưu một byte bằng phép trừ so với 100 .

5b         # convert 5 to binary (results in 101)
  Iv       # for each letter in input word
    Ayk    # get the index of the letter in the alphabet
       >   # increment
        -  # subtract from total

5

Perl 5 , 30 byte

-1 byte nhờ @Neil ( 31&thay vì -96+).

29 byte mã + -pcờ.

$@+=31&ord for/./g;$_=$@==100

Hãy thử trực tuyến!


Bạn có thể sử dụng 31&ordthay thế?
Neil

@Neil Hum ... Tôi đã luôn sử dụng -96+cho những thứ như vậy .. Cảm ơn rất nhiều vì điều đó! (nhưng bây giờ tôi cảm thấy mình nên quay lại các bài viết cũ của mình và thay thế mọi -96+: x)
Dada

Câu hỏi chỉ định mảng được phép làm đầu vào. Do đó, điều này có thể được coi là một chương trình con: {$@+=31&ord for@_;$@==100}(chưa được kiểm tra)
msh210

Tôi đoán nó phụ thuộc vào ngữ cảnh - ở đây bạn đang sử dụng nó trong một +=, nhưng trong các trường hợp khác, bạn có thể lãng phí việc tiết kiệm cho dấu ngoặc đơn.
Neil

@ msh210 Thử thách nói your one language's text datatypes. Mảng hầu như không phải là kiểu dữ liệu văn bản của Perl ... (Nếu không thì nó thực sự đã lưu 1 byte)
Dada

5

PowerShell , 36 30 byte

$args|%{$s+=$_[0]-96};$s-eq100

Hãy thử trực tuyến!

Đầu vào dưới dạng một mảng, nhưng tôi tự hỏi liệu có cách nào tốt hơn để xử lý các ký tự không.

EDIT Bỏ lỡ một không gian dễ dàng nhưng @AdmBorkBork vui lòng cho tôi biết: P cũng vậy, trên thực tế có một cách tốt hơn để xử lý các nhân vật!


Hiya - một vài golf nhanh. Bạn không cần các parens xung quanh [char]$_-96và bạn không cần khoảng trống giữa -eq100, đưa bạn xuống 33. Bạn cũng có thể làm "$_"[0]thay vì [char]$_, đưa bạn xuống 32. Hãy thử trực tuyến!
admBorkBork

"xung quanh $_cần thiết? Nó xuất hiện để làm việc mà không có diễn viên. Có thể là do đầu vào là một chuỗi chuỗi?
Sinusoid

Ah, thực sự bạn là chính xác. Các "không cần thiết trong trường hợp đặc biệt này.
admBorkBork

5

Alice , 28 18 byte

Cảm ơn @MartinEnder đã chơi golf 10 byte

=I.!'`-+?hn
>3-nO@

Hãy thử trực tuyến!

Nội dung này sử dụng một phương pháp khác với câu trả lời của @ MartinEnder.

Trình này đầu ra 0x00cho giả và 0x01cho sự thật.

Vì vậy, đây là một phiên bản đầu ra 0hoặc 1thay vào đó: Hãy thử nó!

Giải trình

Giải thích dưới đây dành cho phiên bản "hiển thị". Cả hai đều rất giống nhau, ngoại trừ trong chương trình đầu tiên, lần cuối cùng okhông chuyển đổi 0hoặc 1thành một chuỗi (vì chúng ta đang ở chế độ chính), nhưng thay vào đó lấy số và xuất ký tự tại điểm mã đó.

=                 Does nothing, but will be useful later on
I                 Read a character and push its code point onto the stack
                  If there is no more input, -1 is pushed instead
.                 Duplicate it
!                 Store it on the tape
#                 Skip the next command
o                 Gets skipped
'`                Push 96
-                 Subtract it from the character
+                 And add it to the total
?                 Load the number on the tape
h                 Increment it
n                 And negate it
                  For all characters that are read, ?hn results in 0,
                  but if -1 is pushed, then the result becomes 1

Sau đó, IP kết thúc xung quanh cạnh trái tại =. Nếu giá trị trên cùng của ngăn xếp là 0, IP sẽ tiếp tục với đường dẫn của nó, tăng tổng tổng của tất cả các ký tự, một khi nó được thực hiện với đầu vào (đỉnh của ngăn xếp sẽ là 1), thì IP sẽ rẽ phải (90 độ theo chiều kim đồng hồ).

Một điều quan trọng cần lưu ý, vòng lặp trên dòng đầu tiên sẽ lặp lại một lần sau khi đầu vào kết thúc. Điều này sẽ trừ 97( 96từ '`-1thiếu đầu vào) khỏi tổng số.

>                Set the direction of the IP to East
3-               Subtract 3 from it (yields 0 if sum is 100, something else otherwise)
n                Negate it; Zero becomes 1, non-zero numbers become 0
/                Mirror; the IP gets redirected South-East
                 The IP reflects off the bottom and goes North-East
                 Now the program is in Ordinal mode, where numbers are automatically converted into strings when being used
o                Output the top of the stack as a string
                 IP reflects off the top and heads South-East
@                End the program

5

Taxi , 1259 byte

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to Auctioneer School.Go to Auctioneer School:s 1 r 1 l 1 l.Pickup a passenger going to Chop Suey.0 is waiting at Starchild Numerology.Go to Starchild Numerology:s 1 l.Pickup a passenger going to Addition Alley.Go to Chop Suey:e 1 l 2 r 3 r 3 r.[a]Switch to plan "b" if no one is waiting.Pickup a passenger going to Charboil Grill.Go to Charboil Grill:n 1 l 3 l 3 l.Pickup a passenger going to What's The Difference.Go to Go More:e.64 is waiting at Starchild Numerology.Go to Starchild Numerology:e 2 r.Pickup a passenger going to What's The Difference.Go to What's The Difference:e 1 l 2 r 1 l.Pickup a passenger going to Addition Alley.Go to Addition Alley:e 2 r.Pickup a passenger going to Addition Alley.Go to Chop Suey:n 1 r 2 r.Switch to plan "a".[b]Go to Addition Alley:n 1 l 2 l.Pickup a passenger going to Equal's Corner.100 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 l 1 l 3 l 2 r.Pickup a passenger going to Equal's Corner.Go to Equal's Corner:w 1 l.Switch to plan "c" if no one is waiting."TRUE" is waiting at Writer's Depot.[c]"FALSE" is waiting at Writer's Depot.Go to Writer's Depot:n 1 l 1 r.Pickup a passenger going to Post Office.Go to Post Office:n 1 r 2 r 1 l.

Với ngắt dòng, nó trông như thế này:

Go to Post Office:w 1 l 1 r 1 l.
Pickup a passenger going to Auctioneer School.
Go to Auctioneer School:s 1 r 1 l 1 l.
Pickup a passenger going to Chop Suey.
0 is waiting at Starchild Numerology.
Go to Starchild Numerology:s 1 l.
Pickup a passenger going to Addition Alley.
Go to Chop Suey:e 1 l 2 r 3 r 3 r.
[a]
Switch to plan "b" if no one is waiting.
Pickup a passenger going to Charboil Grill.
Go to Charboil Grill:n 1 l 3 l 3 l.
Pickup a passenger going to What's The Difference.
Go to Go More:e.
64 is waiting at Starchild Numerology.
Go to Starchild Numerology:e 2 r.
Pickup a passenger going to What's The Difference.
Go to What's The Difference:e 1 l 2 r 1 l.
Pickup a passenger going to Addition Alley.
Go to Addition Alley:e 2 r.
Pickup a passenger going to Addition Alley.
Go to Chop Suey:n 1 r 2 r.
Switch to plan "a".
[b]
Go to Addition Alley:n 1 l 2 l.
Pickup a passenger going to Equal's Corner.
100 is waiting at Starchild Numerology.
Go to Starchild Numerology:n 1 l 1 l 3 l 2 r.
Pickup a passenger going to Equal's Corner.
Go to Equal's Corner:w 1 l.
Switch to plan "c" if no one is waiting.
TRUE is waiting at Writer's Depot.
[c]
FALSE is waiting at Writer's Depot.
Go to Writer's Depot:n 1 l 1 r.
Pickup a passenger going to Post Office.
Go to Post Office:n 1 r 2 r 1 l.

Nó chấp nhận chữ hoa hoặc chữ thường vì Auctioneer Schoolchuyển đổi tất cả thành chữ hoa.
Chop Sueyphá vỡ nó thành các nhân vật cá nhân.
Charboil Grillchuyển đổi các ký tự thành mã ASCII của chúng.
Chúng tôi chọn một ký tự một lần, chuyển đổi nó thành ASCII, trừ 65 và thêm nó vào tổng số đang chạy.
Khi không còn ký tự nào nữa, hãy so sánh tổng số với 100.

Trả về TRUEcho từ đô la và FALSEcho tất cả mọi thứ khác.


1
Trong một thế giới của những câu lạc bộ golf không thể đọc được "nhàm chán" <20byte, tôi hoan nghênh mục nhập của bạn, người lạ mặt tốt bụng.
Olivier Dulac

5

Mã máy IA-32, 21 byte

Hexdump:

33 c0 6a 64 5a 8a 01 41 24 1f 75 05 83 ea 01 d6
c3 2b d0 eb f0

Mã hội:

    xor eax, eax;   initialize eax to 0
    push 100;       initialize edx
    pop edx;            to 100
myloop:
    mov al, [ecx];  load a byte
    inc ecx;        go to next byte
    and al, 31;     convert from letter to number
    jnz cont;       not done? continue

    ;               done:
    sub edx, 1;     check whether edx got to 0; result is in CF
    __emit(0xd6);   aka SALC - set al to CF
    ret
cont:
    sub edx, eax
    jmp myloop

Đếm từ 100 đến 0. Nếu đến 0, trả về true (0xff); nếu không thì sai (0x00).


5

APL Dyalog, 17 15 byte

100=+/17-⍨⎕AV⍳⍞

Sử dụng bộ ký tự Dyalog Classic.

              ⍞  ⍝ string input
          ⎕AV⍳   ⍝ index in the character map
      17-⍨       ⍝ subtract 17 from each ('a' = 18)
    +/           ⍝ sum
100=             ⍝ equal to 100?

Theo mặc định, tất cả các đệ trình phải là chương trình hoặc chức năng đầy đủ. Các chương trình REPL được cho phép miễn là chúng được xác định như vậy. Tuy nhiên, bạn vẫn phải yêu cầu người dùng nhập liệu.
Dennis

4

Python , 38 byte

lambda s:sum(map(ord,s))==4-96*~len(s)

Hãy thử trực tuyến!

Cùng chiều dài với dung dịch trứng . Thay vì trừ 96 từ mỗi ordgiá trị, điều này sẽ kiểm tra nếu ordtổng bằng 100+96*len(s). Điều này được thể hiện ngắn hơn một byte là 4-96*~len(s), bằng 4-96*(-len(s)-1).


Trong Python 3, lambda s:sum(s.encode(),96*~len(s))==4cũng sẽ hoạt động.
Dennis


4

Võng mạc , 47 23 byte

\w
!$&
}T`l`_l
^!{100}$

Hãy thử trực tuyến! Lưu ý: Tiêu đề chữ thường đầu vào và chia nó thành các từ; kết quả xuất hiện trên các dòng riêng biệt. Chỉnh sửa: Đã lưu quá nhiều byte nhờ @MartinEnder.


Nó ngắn hơn rất nhiều để tính toán các giá trị chữ cái bằng cách giảm dần chúng trong khi chèn các ký tự: tio.run/nexus/ mẹo
Martin Ender

4

Octave, 18 byte

@(x)sum(x-96)==100

Trừ 96các chuỗi đầu vào x(chữ thường), để lấy các giá trị số của các chữ cái. Đưa sumvà so sánh nó với 100. Trả về một logic 1cho các trường hợp trung thực và một logic 0cho các trường hợp sai.

Tôi có thể lưu một byte nếu chấp nhận sai cho "từ đô la" và đúng với "từ không đô la".


4

Japt , 13 12 10 byte

L¥U¬x_c %H

Giải trình:

L¥ U¬x _c %H
L¥(U¬x(_c %H))
L¥(          )   // 100==
   U¬            //   Input split into a char array
     x(     )    //   The sum of:
       _         //     At each char:
        c        //       Get the char-code and
          %H     //       Mod 32

Kiểm tra nó trực tuyến!

12 byte:

L¥U¬mc m%H x

Hãy thử trực tuyến!

Một giải pháp 12 byte khác sử dụng một kỹ thuật khác

L¥U¬x@;CaX Ä

Hãy thử trực tuyến!


Bạn đã làm rất tốt! Tôi nghĩ rằng bạn có thể lưu một byte trên cái đầu tiên m%Hthay vì m-96(nó sẽ hoạt động trên cả hai trường hợp, tiền thưởng!) Và một L¥U¬x@;CaX Ä
byte

@ETHproductions Cảm ơn! m%Hlà một phát hiện tốt đẹp x@cũng là một ý tưởng tuyệt vời
Oliver

@ETHproductions Đã giảm xuống còn 10 byte;)
Oliver

3

Ruby (2.4+), 38 byte

Đưa đầu vào bằng chữ thường. Yêu cầu Ruby 2.4 Array#sumvì vậy nó sẽ không chạy trên TIO.

->a{a.chars.map{|c|c.ord-96}.sum==100}

2
Sử dụng String#bytesthay vì String#charsvậy bạn không phải gọi c.ord.
Mực giá trị

Và sử dụng sumtrên mảng thay vìmap
GB

3

/// , 564 210 189 185 byte

/~/1\/\///4/11~3/41//6/33//2/66//5/22~a/~b/1~c/4~d/3~e/31~f/34~g/6~h/16~i/46~j/36~k/316~l/346~m/2~n/12~o/42~p/32~q/312~r/342~s/62~t/162~u/462~v/362~w/3162~x/3462~y/22~z/122~5555/0///1/0

Hãy thử trực tuyến!

In 1 nếu đó là "từ đô la", nếu không thì in "0"

Đầu vào là như sau: (Di chuyển sang bên phải)

/~/1\/\///4/11~3/41//6/33//2/66//5/22~a/~b/1~c/4~d/3~e/31~f/34~g/6~h/16~i/46~j/36~k/316~l/346~m/2~n/12~o/42~p/32~q/312~r/342~s/62~t/162~u/462~v/362~w/3162~x/3462~y/22~z/122~5555/0//INPUT WORD HERE/1/0

Hoạt động bằng cách thay thế mỗi chữ cái bằng giá trị của nó bằng unary, sau đó thay thế một ký tự 100 bằng 0. Nó thay thế bất cứ giá trị nào của từ bằng 1. Nếu giá trị của từ là 0, thì nó sẽ in 1 vì ở cuối mã, nó đang thay thế bằng 0. Nếu giá trị của từ là bất cứ thứ gì khác, nó sẽ chỉ in 0 đó.

Golf hoạt động bằng cách sử dụng các lần xuất hiện phổ biến trong mã để thay thế.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.