Bernardino mengidentifikasi kata-kata dolar yang tidak berubah

47

Definisi

Kata dolar adalah kata di mana setiap hurufnya diberi nilai sen, dari a = 1 hingga z = 26, dan huruf-hurufnya dijumlahkan, hasilnya 100. Berikut adalah contoh pada CodeReview, dan di sini adalah daftar kata dolar yang saya temukan online.

Memasukkan

Input akan berdasarkan abjad dari az, dalam tipe data teks satu bahasa Anda (array diperbolehkan). Anda tidak perlu menghitung input lain - tidak akan ada spasi, apostrof, atau tanda hubung. Anda dapat menggunakan huruf kecil, huruf besar, atau kombinasi. Trailing newlines diizinkan.

Keluaran

Keluarkan nilai yang benar jika inputnya berupa dolar, dan nilai palsu jika tidak.

Uji Kasus

Benar:

buzzy
boycott
identifies
adiabatically
ttttt

Falsey:

zzz
zzzzzzz
abcdefghiljjjzz
tttt
basic

Ini kode-golf, jadi jawaban tersingkat dalam byte menang! Celah dan aturan standar berlaku. Tie pergi ke poster pertama.

Stephen
sumber
20
Judul memiliki kata-kata dolar di dalamnya, maaf jika itu membuat Anda marah.
Stephen

Jawaban:

7

GS2 , 6 byte

▲1Θd←q

Masukan harus dalam huruf besar.

Cobalah online!

Bagaimana itu bekerja

  Θ       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.
Dennis
sumber
13

Python, 39 38 byte

lambda s:sum(ord(i)-96for i in s)==100

Cobalah online!


-1 byte terima kasih kepada @JonathanAllan

ovs
sumber
12

05AB1E , 8 byte

Kode:

Ç96-O4bQ

Menggunakan pengkodean CP-1252 . Cobalah online!

Penjelasan:

Ç          # Convert the string into a list of character codes
 96-       # Subtract 96 of each element
    O      # Take the sum
     4b    # Push 100 (4 in binary)
       Q   # Check if equal
Adnan
sumber
2
Tnberfungsi juga: P
Magic Octopus Mm
Ç4+OTn%0Qadalah ide lain yang saya miliki, tetapi itu lebih buruk.
Magic Octopus Mm
11

Perl 6 , 21 byte

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

Cobalah

Bergantian:

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

Cobalah

Perhatikan bahwa ini adalah ROMAN NUMERAL ONE HUNDREDU + 216D dengan univalitas dari ... 100
Yang membutuhkan 3 byte untuk menyandikan.

Diperluas:

{  # 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
}
Brad Gilbert b2gills
sumber
11

MATL , 8 byte

96-s100=

Menggunakan input huruf kecil.

Cobalah online!

Penjelasan

Kode ini dapat dibaca saat diterima:

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

JavaScript (ES6), 46 byte

Pengembalian 0atau 1.

let f =

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

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

Arnauld
sumber
Menariknya ketika saya mencoba reducedan rekursi mereka berdua keluar 2 byte lebih lama.
Neil
@ Neil Sebenarnya, itu menggunakan reduce()selama beberapa menit pertama dari masa tenggang ketika saya awalnya mempostingnya.
Arnauld
7

Haskell , 32 byte

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

Cobalah online!

Idenya adalah untuk membuat daftar karakter dari karakter ayang diberikan untuk setiap karakter dalam daftar, dan memeriksa bahwa total panjangnya adalah 100.

Upaya lain:

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

Sayang sekali enumFromTobegitu lama.

Tidak
sumber
1
Anda benar bahwa panjangnya memalukan— (100==).length.(enumFromTo 'a' =<<)adalah penggunaan bebas-point-ness yang bersih
Julian Wolf
7

C, 45 43 byte

Terima kasih kepada @Neil untuk menghemat dua byte dan membuat solusi case-insensitive!

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

Cobalah online!

Steadybox
sumber
Sepertinya Anda dapat menyimpan byte dengan mengatur n=0secara global dan kemudian melewatkan klausa pertama dari spesifikasi loop, bukan? sunting: sudahlah — saya kira itu hanya akan berfungsi untuk panggilan pertama.
Julian Wolf
3
Bisakah menghitung mundur dari 100 menghemat byte? Juga, &31mungkin berfungsi untuk membuat case case Anda tidak sensitif.
Neil
Karena penasaran, bagaimana cara n=!nkerjanya? Saya mengerti memeriksa apakah nnol, karena berdasarkan beberapa tes saya melihat !0kembali 1; !15pengembalian 0; dan !-15kembali 0juga. Tapi kenapa? Operan mana yang ada !di C saat menggunakannya !integer?
Kevin Cruijssen
@KevinCruijssen !hanya logis not. Dalam C, 0berarti false, dan nilai integer lainnya berarti true. Jadi !0 == 1, dan !n == 0untuk setiap n != 0.
Steadybox
@Steadybox Ah, saya tidak tahu bagian ini: " dan nilai integer lainnya berarti benar ", tetapi itu memang masuk akal. Saya selalu (salah) menganggapnya sebagai 0=false; 1=truegantinya, karenanya kebingungan saya. Terima kasih atas jawabannya.
Kevin Cruijssen
6

Haskell , 32 byte

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

Ini berfungsi untuk input huruf kecil. Untuk huruf besar s/96/64/,. Dukungan kasus campuran akan menambah banyak byte.

Julian Wolf
sumber
6

Mathematica, 23 byte

100==Tr@LetterNumber@#&

Fungsi murni mengambil string (atau array huruf) sebagai input, case-insensitive, dan return Trueatau False. Di sini Trhanya menambahkan nomor-nomor surat bersama; segala sesuatu yang lain sudah jelas.

Greg Martin
sumber
6

Jelly , 9 7? * 8 byte

ɠO%32S⁼³

Program penuh, menghasilkan 1 jika input adalah kata dolar, atau 0 jika tidak.

Cobalah online!

Bagaimana?

ɠ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?

* Mungkinkah 7 byte?

Satu-satunya alasan ini mengambil input dengan ɠitu untuk menjaga ³sebagai literal 100 daripada 3 rd masukan command line (1 st masukan program).

Cara untuk menghindarinya adalah, seperti yang ditunjukkan oleh Dennis, untuk membuat 100 menggunakan bentuk literal mentah ȷ2yaitu 10 2 . Ini mengarah ke 8 byte lain O%32S=ȷ2, tapi ini sekarang fungsi monadik yang tidak disebutkan namanya (serta operasi sebagai program penuh dengan 3 rd argumen).

Karena, dalam golf, seseorang dapat membuat variabel atau fungsi pembantu yang membatasi program tempat mereka berada (seseorang tidak dapat menggunakan kembali nama dalam lingkup tanpa menghentikan fungsi agar tidak dapat digunakan kembali), mungkin membatasi program untuk hanya mengambil input dari STDIN dapat juga dapat diterima, dalam hal ini byte 7 O%32S=³akan diterima di sini sebagai fungsi yang tidak disebutkan namanya.

Jonathan Allan
sumber
1
Atau O%32S=ȷ2,. Berfungsi untuk input huruf besar dan kecil.
Dennis
@ Dennis Ini mungkin garis batas tetapi tidak O%32S⁼³benar-benar menjadi entri yang valid karena tidak mendefinisikan fungsi yang tidak disebutkan namanya, dapat digunakan kembali, selama sisa program tidak menggunakan argumen baris perintah untuk input?
Jonathan Allan
Hm, saya kira itu bisa dilakukan. Tidak jauh berbeda dengan menggunakan variabel global dalam C, misalnya.
Dennis
6

Alice , 23 byte

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

Cobalah online!

Input harus huruf kecil. Mencetak 1untuk kata-kata dolar dan 0sebaliknya.

Penjelasan

Saatnya memamerkan kaset Alice dan beberapa aliran kontrol lanjutan. Meskipun cukup baik dalam bekerja dengan bilangan bulat dan string secara individual, Alice tidak memiliki built-in untuk a) menentukan panjang string, b) mengkonversi antara karakter dan poin kode mereka. Alasan untuk ini adalah bahwa semua perintah Alice memetakan bilangan bulat ke bilangan bulat atau string ke string. Tetapi keduanya membutuhkan pemetaan string ke integer atau sebaliknya, sehingga mereka tidak cocok dengan salah satu mode Alice.

Namun, selain tumpukan itu, Alice juga memiliki kaset dan mode Kardinal dan Ordinal menginterpretasikan data pada rekaman dengan cara yang berbeda.

  • Dalam mode Kardinal, ini adalah rekaman biasa yang akrab dari bahasa lain seperti Brainfuck. Anda dapat menyimpan satu bilangan bulat di setiap sel dan Anda bisa memindahkan kepala kaset. Rekaman itu panjang tak terhingga dan awalnya memegang -1 di setiap sel. Sel-sel juga diindeks dan kepala pita dimulai pada indeks 0 .
  • Mode ordinal memiliki head tape sendiri (juga mulai dari indeks 0 ) dan menafsirkan tape sebagai daftar string. String diakhiri oleh sel non-karakter (yaitu nilai apa pun yang bukan titik kode Unicode yang valid), khususnya -1 . Jadi untuk mode Ordinal, rekaman itu awalnya diisi dengan string kosong.

Rekaman ini dapat digunakan untuk kedua operasi di atas: untuk mendapatkan panjang string, kita menulisnya ke rekaman dalam mode Ordinal, mencari terminating -1 dalam mode Kardinal dan mengambil posisi kepala tape. Untuk mengonversi karakter ke titik kode mereka, kami cukup membacanya dari rekaman dalam mode Kardinal.

Dua fitur penting lainnya yang digunakan dalam solusi ini adalah return stack dan iterator. Alice memiliki tumpukan kembali yang biasanya diisi saat menggunakan perintah lompat j, dan Anda dapat memunculkan alamat untuk melompat kembali k. Namun, juga memungkinkan untuk mendorong alamat saat ini ke tumpukan kembali tanpa melompat ke mana pun w. Jika kita gabungkan wdengan perintah repeat& , kita bisa mendorong alamat saat ini ke stack kembali n kali. Sekarang setiap kali kami mencapai k, satu salinan muncul dari tumpukan kembali dan kami melakukan iterasi lain dari w(mulai di sel setelah itu, karena IP bergerak sebelum menjalankan perintah lain). Ketika tumpukan kembali menjadi kosong,ktidak melakukan apa-apa dan IP hanya melewatinya. Karenanya &w...kmuncul bilangan bulat n dan kemudian jalankan ... n + 1 kali, yang memberi kita cara yang sangat ringkas untuk mengekspresikan forloop sederhana .

Ke kode itu sendiri ...

/     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.
Martin Ender
sumber
Bagus! Saya mendapat 41 dengan percobaan pertama saya
Kritixi Lithos
6

R, 55 54 byte

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

-1 byte terima kasih kepada BLT

  • mengembalikan fungsi yang melakukan perhitungan yang diperlukan, yang mengembalikan TRUEdan FALSEseperti yang diharapkan.

  • mengambil input dalam huruf kecil; hanya akan beralih dari letterske LETTERSuntuk semua huruf besar

Giuseppe
sumber
1
function(x)sum(match(el(strsplit(x,"")),letters))==100menghemat satu byte.
BLT
6

Ruby, 25 byte

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

Bekerja untuk huruf besar.

Saya melihat beberapa entri Ruby yang lebih kompleks, tetapi ini benar-benar sederhana. s.summenambahkan kode ASCII dari string input, dan dari sini kita kurangi 64 kali panjang string.

Contoh penggunaan

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

puts f["ADIABATICALLY"]
puts f["ZZZ"]
Level River St
sumber
Ini hanya berfungsi pada Ruby 2.4 dan saat ini tidak berfungsi pada TIO
GB
1
@ GB terima kasih atas komentarnya tetapi saya menjalankan 2.2.6 dan berfungsi dengan baik untuk saya. Fitur ini telah didokumentasikan sejak 1.9.3. Ini berfungsi di TIO.run dan Ideone.com untuk saya juga.
Level River St
Anda benar, saya pikir itu sama dengan Array # sum, yang baru dalam 2,4
GB
Sebenarnya, ini bukan jumlah nilai ASCII, definisi ini adalah "Mengembalikan checksum n-bit dasar dari karakter dalam str". Ini berfungsi dalam kasus ini, tentu saja.
GB
6

Java 8, 36 byte

s->s.chars().map(c->c%32).sum()==100

Cobalah online!

Catatan: case independent.

David Conrad
sumber
5

05AB1E , 9 byte

5bIvAyk>-

Cobalah online!

Penjelasan

Karena 1 adalah satu-satunya nilai kebenaran di 05AB1E kita dapat menyimpan byte menggunakan pengurangan dibandingkan dengan 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
Emigna
sumber
5

Perl 5 , 30 byte

-1 byte terima kasih kepada @Neil ( 31&bukan -96+).

29 byte kode + -pbendera.

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

Cobalah online!

Dada
sumber
Bisakah Anda menggunakannya 31&ord?
Neil
@Neil Hum ... Saya selalu menggunakan -96+untuk hal-hal seperti itu .. Terima kasih banyak untuk itu! (tapi sekarang saya merasa harus kembali melalui posting lama saya dan mengganti setiap -96+: x)
Dada
Pertanyaan menentukan array diizinkan sebagai input. Ini dengan demikian dapat lebih singkat sebagai subrutin: {$@+=31&ord for@_;$@==100}(tidak teruji)
msh210
Saya kira itu tergantung pada konteks - di sini Anda menggunakannya dalam +=, tetapi dalam kasus lain Anda mungkin membuang penghematan pada tanda kurung.
Neil
@ msh210 Tantangannya mengatakan your one language's text datatypes. Array bukan tipe data teks Perl ... (Jika tidak, akan menghemat 1 byte)
Dada
5

PowerShell , 36 30 byte

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

Cobalah online!

Input sebagai array, tetapi saya ingin tahu apakah ada cara yang lebih baik untuk menangani karakter.

EDIT Kehilangan ruang yang mudah tetapi @AdmBorkBork dengan ramah memberi tahu saya: P juga, sebenarnya ada cara yang lebih baik untuk menangani karakter!

Sinusoid
sumber
Hiya - beberapa golf cepat. Anda tidak memerlukan parens di sekitarnya [char]$_-96, dan Anda tidak perlu jarak di antara -eqdan 100, membuat Anda turun ke 33. Anda juga dapat melakukan "$_"[0]alih - alih [char]$_, membuat Anda turun ke 32. Cobalah online!
AdmBorkBork
Apakah "sekelilingnya $_perlu? Tampaknya berfungsi tanpa gips. Mungkinkah karena input sudah menjadi string array?
Sinusoid
Ah, memang kamu benar. Tidak "diperlukan dalam contoh khusus ini.
AdmBorkBork
5

Alice , 28 18 byte

Terima kasih kepada @MartinEnder untuk bermain golf 10 byte

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

Cobalah online!

Kiriman ini menggunakan metode yang berbeda dari jawaban @ MartinEnder.

Pengajuan ini menghasilkan 0x00untuk kepalsuan dan 0x01kebenaran.

Jadi di sini adalah versi yang menghasilkan 0atau 1sebaliknya: Cobalah!

Penjelasan

Penjelasan di bawah ini untuk versi "terlihat". Keduanya sangat mirip, kecuali dalam program pertama, yang terakhir otidak mengubah 0atau 1menjadi string (karena kita dalam mode kardinal), tetapi sebaliknya mengambil nomor dan menampilkan karakter pada titik kode itu.

=                 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

Setelah ini IP membungkus sekitar ke tepi kiri di =. Jika nilai teratas tumpukan adalah 0, IP melanjutkan jalurnya, meningkatkan jumlah total semua karakter, setelah selesai dengan input (bagian atas tumpukan akan menjadi 1), maka IP berbelok ke kanan (90 derajat searah jarum jam).

Satu hal yang penting untuk dicatat, loop pada baris pertama akan beralih sekali setelah input berakhir. Ini akan mengurangi 97( 96dari '`dan -1dari kurangnya input) dari total.

>                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
Kritixi Lithos
sumber
5

Taksi , 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.

Dengan jeda baris, terlihat seperti ini:

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.

Ia menerima huruf besar atau kecil karena Auctioneer Schoolmengubah semuanya menjadi huruf besar.
Chop Sueymemecahnya menjadi karakter individu.
Charboil Grillmengkonversi karakter ke kode ASCII mereka.
Kami mengambil satu karakter setiap kali, mengonversinya menjadi ASCII, mengurangi 65, dan menambahkannya ke total berjalan.
Setelah tidak ada lagi karakter, bandingkan total menjadi 100.

Pengembalian TRUEuntuk kata-kata dolar dan FALSEuntuk yang lainnya.

Toast insinyur
sumber
1
Dalam dunia "membosankan" kode-golf tidak terbaca, <20bytes jawaban, saya menyambut entri Anda, orang asing yang baik hati.
Olivier Dulac
5

Kode mesin 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

Kode perakitan:

    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

Dihitung dari 100 hingga 0. Jika sampai ke 0, mengembalikan true (0xff); jika tidak salah (0x00).

anatolyg
sumber
5

Dyalog APL, 17 15 byte

100=+/17-⍨⎕AV⍳⍞

Menggunakan set karakter Dyalog Classic.

              ⍞  ⍝ string input
          ⎕AV⍳   ⍝ index in the character map
      17-⍨       ⍝ subtract 17 from each ('a' = 18)
    +/           ⍝ sum
100=             ⍝ equal to 100?
Uriel
sumber
Secara default semua pengajuan harus berupa program atau fungsi lengkap. Program REPL diizinkan selama mereka diidentifikasi. Namun, Anda masih harus meminta input pengguna.
Dennis
4

Python , 38 byte

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

Cobalah online!

Panjangnya sama dengan solusi ovs . Alih-alih mengurangi 96 dari setiap ordnilai, ini memeriksa apakah ordtotal sama 100+96*len(s). Ini dinyatakan satu byte lebih pendek dari 4-96*~len(s), yang sama dengan 4-96*(-len(s)-1).

Tidak
sumber
Dalam Python 3, lambda s:sum(s.encode(),96*~len(s))==4juga akan berfungsi.
Dennis
4

Retina , 47 23 byte

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

Cobalah online! Catatan: Header menurunkan input dan membaginya menjadi kata-kata; hasilnya muncul di baris terpisah. Sunting: Disimpan terlalu banyak byte berkat @MartinEnder.

Neil
sumber
Jauh lebih singkat untuk menghitung nilai huruf dengan menurunkannya secara bertahap sambil memasukkan karakter: tio.run/nexus/…
Martin Ender
4

Oktaf, 18 byte

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

Kurangi 96dari string input x(huruf kecil), untuk mendapatkan nilai numerik huruf. Mengambil sumdan membandingkannya dengan 100. Mengembalikan logika 1untuk kasus yang benar, dan logis 0untuk kasus yang salah.

Saya bisa menghemat satu byte jika OK untuk memberikan false untuk "kata-kata dolar" dan berlaku untuk "kata-kata non-dolar".

Stewie Griffin
sumber
4

Japt , 13 12 10 byte

L¥U¬x_c %H

Penjelasan:

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

Uji secara online!

12-byte:

L¥U¬mc m%H x

Cobalah online!

Solusi 12 byte lainnya menggunakan teknik yang berbeda

L¥U¬x@;CaX Ä

Cobalah online!

Oliver
sumber
Kerja bagus! Saya pikir Anda dapat menyimpan satu byte pada yang pertama dengan m%Halih - alih m-96(itu akan bekerja pada kedua kasus sekarang, bonus!), Dan satu pada yang kedua denganL¥U¬x@;CaX Ä
ETHproductions
@ ETHproduk Terima kasih! m%Hadalah penemuan yang bagus. x@juga merupakan ide bagus!
Oliver
@ETHproductions Mendapatnya hingga 10 byte;)
Oliver
3

Ruby (2.4+), 38 byte

Mengambil input dalam huruf kecil. Membutuhkan Ruby 2.4's Array#sumagar tidak dapat berjalan di TIO.

->a{a.chars.map{|c|c.ord-96}.sum==100}
siput_
sumber
2
Gunakan String#bytesalih-alih String#charsagar Anda tidak perlu menelepon c.ord.
Value Ink
Dan gunakan sumpada array bukanmap
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

Cobalah online!

Mencetak 1 jika itu adalah "kata dolar", jika tidak mencetak "0"

Inputnya adalah sebagai berikut: (Gulir terus ke kanan)

/~/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

Berfungsi dengan mengganti setiap huruf dengan nilainya dalam unary, lalu mengganti unary 100 dengan nilai 0. Kemudian mengganti apa pun nilai kata dengan 1. Jika nilai kata adalah 0, maka akan mencetak 1 karena pada akhir kode, itu menggantikan 0. Jika nilai kata adalah hal lain, itu hanya akan mencetak 0.

Golf bekerja dengan menggunakan kejadian umum dalam kode sebagai pengganti.

Kamerad SparklePony
sumber
3

Utilitas Bash + GNU, 47

od -An -td1 -vw1|sed 's/^/a+=-96+/;$a!a-100'|bc

Cobalah online .

Trauma Digital
sumber