Bernardino değiştirilmemiş dolarlık kelimeleri belirledi


47

Tanım

Dolar kelimesi, her harfine bir yüzde değeri verildiğinde, a = 1 - z = 26 arasında ve harflerin toplandığında sonucun 100 olduğu bir kelimedir. İşte CodeReview'da bir örnek ve işte burada bir liste çevrimiçi kelime buldum.

Giriş

Giriş, bir dilin metin veri tiplerinde (dizilere izin verilir), az'dan itibaren alfabetik olarak yazılacaktır. Başka herhangi bir girişi hesaba katmanıza gerek yoktur - boşluk, kesme işareti veya kısa çizgi olmayacaktır. Küçük harf, büyük harf veya bir kombinasyon olarak alabilirsiniz. İzleyen yeni satırlara izin verilir.

Çıktı

Girdi bir dolar kelimesiyse bir gerçeğe uygun değer, değilse ise bir falsey değeri girin.

Test Kılıfları

Doğru:

buzzy
boycott
identifies
adiabatically
ttttt

Falsey:

zzz
zzzzzzz
abcdefghiljjjzz
tttt
basic

Bu kod golf, yani bayt cinsinden en kısa cevap kazanır! Standart boşluklar ve kurallar geçerlidir. Kravat ilk afişe gidiyor.


20
Başlığın içinde dolar kelimeler var, eğer sizi attıysa özür dilerim.
Stephen

Yanıtlar:


7

GS2 , 6 bayt

▲1Θd←q

Giriş büyük harf olmalıdır.

Çevrimiçi deneyin!

Nasıl çalışır

  Θ       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.


12

05AB1E , 8 bayt

Kod:

Ç96-O4bQ

CP-1252 kodlamasını kullanır . Çevrimiçi deneyin!

Açıklama:

Ç          # 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

2
Tnde çalışır: P
Magic Octopus Urn

Ç4+OTn%0Qsahip olduğum başka bir fikirdi ama daha kötüsü.
Magic Octopus Urn

11

Perl 6 , 21 bayt

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

Dene

Alternatif:

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

Dene

O Not olan ROMAN NUMERAL ONE HUNDREDU + 216d arasında ... 100 bir UNIVAL ile
kodlamak için 3 bayt alır.

Expanded:

{  # 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 bayt

96-s100=

Küçük harf girişi kullanır.

Çevrimiçi deneyin!

açıklama

Kod, aldığı şekilde okunabilir:

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 bayt

0Veya döndürür 1.

let f =

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

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


İlginç bir şekilde denediğimde reduceve özyinlendiğimde ikisi de 2 byte daha uzun çıktı.
Neil

@Neil Aslında, reduce()başlangıçta gönderdiğimde ödemesiz dönemin ilk birkaç dakikasında kullanıyordu .
Arnauld

7

Haskell , 32 bayt

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

Çevrimiçi deneyin!

Buradaki amaç, listedeki aher karakter için verilen karakterden karakterlerin bir listesini yapmak ve toplam uzunluğun 100 olduğunu kontrol etmektir.

Diğer girişimler:

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

Çok kötü enumFromTo , çok uzun.


1
Uzunluğun bir utanç olduğu konusunda haklısın - puansızlığın (100==).length.(enumFromTo 'a' =<<)çok temiz bir kullanımı
Julian Wolf

7

C 45 43 bayt

İki bayt kaydetme ve çözümü büyük / küçük harf duyarlı hale getirdiği için @Neil'e teşekkürler!

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

Çevrimiçi deneyin!


Genel olarak ayarlayarak n=0ve ardından döngü özelliğinin ilk yanını atlayarak bir bayt kaydedebilir gibi görünüyorsunuz , değil mi? düzenleme: boşver - Sanırım bu sadece ilk görüşme için işe yarayacak.
Julian Wolf

3
100 tasarruf baytından geri sayım yapılabilir mi? Ayrıca, &31kod durumunuzu duyarsız hale getirmeye çalışabilir.
Neil

Meraktan nasıl n=!nçalışır? Bunun nsıfır olup olmadığını kontrol ettiğini biliyorum , çünkü bazı testlere dayanarak !0geri dönüşler görüyorum 1; !15döner 0; ve aynı zamanda !-15döner 0. Ama neden? Hangi operand !C olarak kullanıldığında !integer?
Kevin Cruijssen

@KevinCruijssen !sadece mantıklı not. C, 0anlamına gelir falseve diğer herhangi bir tamsayı değeri anlamına gelir true. Yani !0 == 1ve !n == 0her şey için n != 0.
Steadybox

@ Steadybox Ah, bu bölümü bilmiyordum: " ve diğer herhangi bir tamsayı değeri gerçek demektir ", ama gerçekten mantıklı. Her zaman (yanlış) 0=false; 1=truebunun yerine olduğunu düşündüm, bu yüzden kafam karıştı. Cevap için teşekkürler.
Kevin Cruijssen

6

Haskell , 32 bayt

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

Bu küçük harf girişi için çalışır. Büyük harf için s/96/64/. Karışık vaka desteği bir sürü bayt ekler.


6

Mathematica, 23 bayt

100==Tr@LetterNumber@#&

Girdi, büyük / küçük harfe duyarlı olmayan ve dönen Trueveya döndüren bir dize (veya bir harf dizisi) alan salt işlev False. Burada Trsadece harf sayılarını bir araya getirir; her şey kendini açıklayıcıdır.


6

Jöle , 9 7? * 8 bayt

ɠO%32S⁼³

Tam program, giriş bir dolar kelimesi ise 1, değilse 0.

Çevrimiçi deneyin!

Nasıl?

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

* 7 bayt olabilir mi?

Bununla girişi etmemin tek sebebi ɠtutmaktı ³değişmezi 100 yerine 3 olarak rd komut satırı girişi (1 st programı girişi).

Bundan kaçınmanın bir yolu, Dennis'in belirttiği gibi ȷ2, 10 2 olan ham değişmez formu kullanarak 100 oluşturmak . Bu, başka bir 8 bayta yol açar O%32S=ȷ2, ancak bu şimdi adsız bir monadik fonksiyondur ( 3. bağımsız değişkenli tam bir program olarak çalışır ).

Çünkü golfde, içinde kalabilecekleri programı kısıtlayan değişkenler veya yardımcı işlevler yaratabileceğinden (biri işlevi tekrar kullanmadan durdurmadan kapsamı kullanılamaz), programın yalnızca STDIN'den girdi almasını kısıtlamak ayrıca kabul edilebilir, bu durumda 7 bayt O%32S=³burada adsız bir işlev olarak kabul edilebilir.


1
Alternatif olarak O%32S=ȷ2,. Büyük harf ve küçük harf girişi için çalışır.
Dennis,

@Dennis Kenarlıklı olabilir ancak O%32S⁼³aslında adsız, yeniden kullanılabilir bir işlev tanımladığı için geçerli bir giriş olmaz, çünkü içinde bulunduğu programın geri kalanı giriş için komut satırı argümanları kullanmazsa?
Jonathan Allan,

Hm, sanırım bu yapılabilir. Örneğin, C de global bir değişken kullanmaktan farklı değildir.
Dennis,

6

Alice , 23 bayt

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

Çevrimiçi deneyin!

Giriş küçük harf olmalıdır. 1Dolar kelimelerini ve 0diğerlerini yazdırır .

açıklama

Alice'in kasetini ve bazı gelişmiş kontrol akışını gösterme zamanı. Tamsayılarla ve karakter dizileriyle bireysel olarak çalışmakta oldukça iyi olmasına rağmen, Alice'in a) bir dizgenin uzunluğunu belirleme, b) karakterleri ve kod noktaları arasında dönüşüm yapmalarını sağlamıştır. Bunun nedeni, Alice'in tüm komutlarının ya tamsayıları tamsayılara ya da dizeleri dizelere eşlemektir. Ancak bunların ikisi de tamsayıya eşlemek veya tam tersi için eşleme dizgileri gerektirir, bu yüzden Alice'in hiçbirine uymazlar.

Bununla birlikte, yığına ek olarak, Alice'in bir kaseti de vardır ve Kardinal ve Sıra modu, kasetteki verileri farklı şekillerde yorumlar.

  • Kardinal modunda, Brainfuck gibi diğer dillerden aşina olduğunuz normal bir kasettir. Her hücrede bir tam sayı saklayabilir ve bir bant kafasını hareket ettirebilirsiniz. Bant sonsuz uzundur ve başlangıçta her hücrede -1 tutar . Hücreler de indekslenir ve teyp kafası 0 dizininde başlar .
  • Ordinal modun kendi bant başı vardır (ayrıca dizin 0'dan başlar ) ve bandı bir dizi listesi olarak yorumlar. Dizeler karakter olmayan hücreler (yani geçerli bir Unicode kod noktası olmayan değerler), özellikle de -1 ile sonlandırılır . Yani Ordinal mod için, bant başlangıçta boş dizelerle doldurulur.

Bu bant, yukarıdaki işlemlerin her ikisi için de kullanılabilir: bir dize uzunluğu elde etmek için, Ordinal modda banda yazacağız , Kardinal modda -1 sonlandırmasını arayacağız ve bant kafasının pozisyonunu alacağız . Karakterleri kod noktalarına dönüştürmek için, basitçe bunları Kardinal modda banttan okuduk.

Bu çözümde kullanılan diğer iki önemli özellik, iade yığını ve bir yineleyicidir. Alice'in genellikle jump komutunu kullanırken doldurulan jve geri atlamak için bir adres açabileceğiniz bir dönüş yığını vardır k. Bununla birlikte, geçerli adresi hiçbir yere atlamadan geri dönüş yığınına itmek de mümkündür w. Biz birleştirirseniz wile tekrar komutu &, biz dönüş yığınına güncel adres zorlayabilir n zamanlarda. Şimdi her ulaştığımızda k, bir yığın geri dönüş yığından atılıyor ve başka bir yineleme yapıyoruzw (bundan sonra hücreden başlayarak, çünkü IP başka bir komut çalıştırmadan önce hareket eder). İade yığını boşaldığında,khiçbir şey yapmaz ve IP basitçe geçer. Bu nedenle n&w...k bir tamsayı ve daha sonra çalıştırır... n + 1bize basit bir fordöngüyü ifade etmenin çok özlü bir yolunu verir .

Kodun kendisinde ...

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

Güzel! İlk
denememle

6

R, 55 54 bayt

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

BLT sayesinde -1 bayt

  • gerekli hesaplamayı yapan, döndüren TRUEve FALSEbeklendiği gibi döndüren bir işlev döndürür .

  • girişi küçük harf olarak alır; Sadece bir anahtar olacaktır lettersiçin LETTERStüm büyük harf için


1
function(x)sum(match(el(strsplit(x,"")),letters))==100bir bayt kaydeder.
BLT

6

Yakut, 25 bayt

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

Büyük harf için çalışır.

Birkaç daha karmaşık Ruby girişi gördüm, ama gerçekten bu kadar basit. s.sumgiriş dizesinin ASCII kodlarını ekler ve bu dizgenin 64 katı uzunluğunu çıkarırız.

Kullanım örneği

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

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

Bu sadece Ruby 2.4'de çalışır ve şu anda TIO'da çalışmaz
GB

1
@GB yorumunuz için teşekkürler, ancak 2.2.6'da çalışıyorum ve bu benim için iyi çalışıyor. Bu özellik 1.9.3'ten beri belgelenmiştir. Benim için de TIO.run ve Ideone.com'da çalışıyor.
Seviye River St

Haklısın, bunun Array # sum ile aynı olduğunu düşündüm, 2.4
GB

Aslında, ASCII değerlerinin toplamı değildir, tanımı "str'deki karakterlerin temel n bit sağlama toplamı" dır. Bu, elbette, bu durumda çalışır.
GB


5

05AB1E , 9 bayt

5bIvAyk>-

Çevrimiçi deneyin!

açıklama

As 1 05AB1E sadece truthy değerdir biz karşılaştırarak üzerine çıkarma kullanarak bir bayt kaydedebilirsiniz 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 bayt

@Neil ( 31&yerine -96+) sayesinde -1 bayt .

29 bayt kodu + -pbayrak.

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

Çevrimiçi deneyin!


Onun 31&ordyerine kullanabilir misin ?
Neil

@Neil Hum ... Ben hep -96+böyle şeyler için kullandım .. Bunun için çok teşekkürler! (ama şimdi eski yazılarıma geri dönüp her yerini değiştirmem gerektiğini hissediyorum -96+: x)
Dada

Soru dizilerin girdi olarak kabul edildiğini belirtir. Bu nedenle, bir alt rutin olarak daha {$@+=31&ord for@_;$@==100}
kısaltılmış olabilir

Sanırım içeriğe bağlı - burada a kullanıyorsunuz +=, ancak diğer durumlarda parantez içindeki tasarrufları boşa harcayabilirsiniz.
Neil

@ msh210 Meydan yazıyor your one language's text datatypes. Diziler (Aksi takdirde 1 bayt gerçekten kaydedilmiş olurdu) ... pek Perl'in metin veri türü vardır
Dada

5

PowerShell , 36 30 bayt

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

Çevrimiçi deneyin!

Dizi olarak giriş yapar, ancak karakterleri kullanmanın daha iyi bir yolu olup olmadığını merak ediyorum.

EDIT Kolay bir alanı kaçırdım ama @AdmBorkBork lütfen bana bildirin: P ayrıca karakterleri kullanmanın daha iyi bir yolu vardı!


Hiya - birkaç hızlı golf. Etrafa parens gerekmez [char]$_-96ve arasında boşluk gerekmez -eqve 100de yapabilirsiniz 33'e aşağı alma, "$_"[0]yerine [char]$_32'ye aşağı alma çevrimiçi deneyin!
AdmBorkBork

Are "etrafında $_gerekli? Oyuncular olmadan çalışıyor gibi görünüyor. Girişin zaten bir dize dizisi olması nedeniyle olabilir mi?
Sinusoid

Ah, gerçekten haklısın. "Bu özel durumda gerekli değildir.
AdmBorkBork

5

Alice , 28 18 bayt

10 byte golf oynamak için @MartinEnder'e teşekkürler

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

Çevrimiçi deneyin!

Bu gönderim @ MartinEnder'in cevabından farklı bir yöntem kullanıyor.

Bu gönderi 0x00, sahte ve 0x01haksızlığa yönelik çıktılar verir.

Yani burada çıktı 0veya 1bunun yerine bir sürümüdür : Deneyin!

açıklama

Aşağıdaki açıklama "görünür" versiyon içindir. Hem birinci programda hariç çok benzer, son odönüştürmez 0veya 1bir dizeye (biz kardinal modunda olduğundan), ancak bunun yerine numarası ve çıkış bu kod noktasında karakter alır.

=                 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

Bundan sonra IP, 'de sol kenarına dolanır =. Yığının en üst değeri 0ise IP, yoluna devam eder, tüm karakterlerin toplamını artırarak, girişle bir kez (yığının en üst kısmı olacaktır 1) tamamlandıktan sonra IP sağa döner (90 saat yönünde derece).

Bir şey not etmek önemlidir, ilk satırdaki döngü giriş sona erdikten sonra bir kez tekrarlanır. Bu çıkarma olacaktır 97( 96den '`ve -1toplam girişinin olmamasından).

>                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

Taksi , 1259 bayt

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.

Satır sonları ile bu gibi görünüyor:

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.

Büyük / küçük harfleri kabul eder, çünkü Auctioneer Schoolhepsini büyük harfe dönüştürür.
Chop Sueybireysel karakterlere böler.
Charboil Grillkarakterleri ASCII kodlarına dönüştürür.
Her seferinde bir karakter alıyoruz, ASCII'ye dönüştürüyoruz, 65'i çıkarıyoruz ve koşu toplamına ekliyoruz.
Başka karakter olmadığında, toplamı 100 ile karşılaştırın.

İade TRUEdolar kelimeleri ve FALSEher şey için.


1
"Sıkıcı" okunamayan kod golf armağanı dünyasında <20 baytlık cevaplar, girişinizi ve nazik yabancılığınızı kabul ediyorum.
Olivier Dulac

5

IA-32 makine kodu, 21 bayt

HexDump:

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

Montaj kodu:

    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

100'den 0'a kadar sayar. 0'a ulaşırsa true değerini döndürür (0xff); aksi halde yanlış (0x00).


5

Dyalog APL, 17 15 bayt

100=+/17-⍨⎕AV⍳⍞

Dyalog Classic karakter kümesini kullanır.

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

Varsayılan olarak, tüm gönderimler tam programlar veya işlevler olmalıdır. REPL programlarına, tanımlandıkları sürece izin verilir. Ancak, yine de kullanıcı girişi istemeniz gerekir.
Dennis,

4

Python , 38 bayt

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

Çevrimiçi deneyin!

Ovs’un çözümü ile aynı uzunluk . Her orddeğerden 96 çıkartmak yerine , ordtoplamın eşit olup olmadığını kontrol eder 100+96*len(s). Bu, 4-96*~len(s)eşittir kadar kısa bir bayt olarak ifade edilir 4-96*(-len(s)-1).


Python 3'te lambda s:sum(s.encode(),96*~len(s))==4de çalışırdı.
Dennis,


4

Retina , 47 23 bayt

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

Çevrimiçi deneyin! Not: Başlık girişi küçük harflerle yazar ve sözcükleri böler; sonuçlar ayrı satırlarda görünür. Düzenleme: @ Martininder sayesinde çok fazla bayt kaydedildi.


Harf değerlerini karakterleri eklerken yavaş yavaş düşürerek hesaplamak çok daha kısa: tio.run/nexus/…
Martin Ender

4

Octave, 18 bayt

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

Toplayıp çıkarmadan 96girdi dizesinden x(küçük harfle), harflerin sayısal değerleri alır. Alır sumve karşılaştırır 100. Mantıksal döndürür 1truthy durumlar için ve mantıklı bir 0yanlış durumlar için.

"Dolarlık kelimeler" için yanlış, "Dolar olmayan kelimeler" için doğruysa, bir bayt kurtarabilirim.


4

Japt , 13 12 10 bayt

L¥U¬x_c %H

Açıklama:

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

Çevrimiçi test edin!

12-bayt:

L¥U¬mc m%H x

Çevrimiçi deneyin!

Farklı bir teknik kullanan 12 baytlık bir başka çözüm

L¥U¬x@;CaX Ä

Çevrimiçi deneyin!


İyi iş! Sanırım birincisini bir bayttan tasarruf edersiniz, m%Hbunun yerine m-96(şimdi her iki durumda da işe L¥U¬x@;CaX Ä
yarar

@ETHproductions Teşekkürler! m%Hgüzel bir keşif oldu. x@çok iyi bir fikirdi!
Oliver

@ETHproductions 10 byte kadar aldım;)
Oliver

3

Yakut (2.4+), 38 bayt

Küçük harflerle giriş yapar. Ruby 2.4'leri gerektirir, Array#sumböylece TIO'da çalışmayacaktır.

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

2
String#bytesBunun yerine kullanın , String#charsböylece aramanıza gerek kalmaz c.ord.
Value Ink

sumDizideki yerine kullanmakmap
GB

3

/// , 564 210 189 185 bayt

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

Çevrimiçi deneyin!

"Dolar kelimesi" ise 1, aksi halde "0" yazdırarak

Giriş şudur: (Tamamen sağa kaydırın)

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

Her bir harfi tek tek değerindeki değerle değiştirip, ardından tekdüze 100'ü 0 ile değiştirerek çalışır. Sonra kelimenin değeri 1 olanı değiştirir. Sözcüğün değeri 0 ise, o zaman sonunda 1 değerini yazacaktır. Kod, 0'ın yerine geçiyor. Kelimenin değeri başka bir şeyse, sadece 0 değerini yazacaktır.

Golf, koddaki genel olayları değiştirmeler olarak kullanarak çalışır.


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.