Bernardino identyfikuje niezmienione słowa dolara


47

Definicja

Słowo dolara to słowo, w którym gdy każdej z jego liter przypisuje się wartość centa, od a = 1 do z = 26, a litery są sumowane, wynikiem jest 100. Oto przykład na CodeReview, a oto lista słów dolara, które znalazłem online.

Wejście

Dane wejściowe będą alfabetyczne od az, w typach danych tekstowych w jednym języku (dozwolone są tablice). Nie musisz uwzględniać żadnych innych danych wejściowych - nie będzie spacji, apostrofów ani łączników. Możesz wziąć jako małe, wielkie lub kombinację. Końcowe znaki nowej linii są dozwolone.

Wynik

Podaj prawdziwą wartość, jeśli wejście jest słowem dolara, i falsey, jeśli nie jest.

Przypadki testowe

Prawda:

buzzy
boycott
identifies
adiabatically
ttttt

Falsey:

zzz
zzzzzzz
abcdefghiljjjzz
tttt
basic

To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach! Obowiązują standardowe luki i zasady. Krawat idzie do pierwszego plakatu.


20
Tytuł zawiera słowa dolara, przepraszam, jeśli cię to wyrzuciło.
Stephen

Odpowiedzi:


7

GS2 , 6 bajtów

▲1Θd←q

Dane wejściowe muszą być pisane wielkimi literami.

Wypróbuj online!

Jak to działa

  Θ       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 bajtów

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

Spróbuj

Alternatywny:

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

Spróbuj

Zauważ, że jest to ROMAN NUMERAL ONE HUNDREDU + 216D z unival… 100,
który wymaga 3 bajtów do zakodowania.

Rozszerzony:

{  # 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 bajtów

96-s100=

Wykorzystuje małe litery.

Wypróbuj online!

Wyjaśnienie

Kod jest tak czytelny, jak to tylko możliwe:

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 bajtów

Zwraca 0lub 1.

let f =

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

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


Co ciekawe, kiedy próbowałem reducei rekursja, oba wyszły 2 bajty dłużej.
Neil

@ Nee Właściwie to był używany reduce()przez pierwsze kilka minut okresu karencji, kiedy go początkowo opublikowałem.
Arnauld

7

Haskell , 32 bajty

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

Wypróbuj online!

Chodzi o to, aby utworzyć listę znaków od ado podanego znaku dla każdego znaku na liście i sprawdzić, czy całkowita długość wynosi 100.

Inne próby:

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

Szkoda, że enumFromToto tak długo.


1
Masz rację, że długość jest wstydem - (100==).length.(enumFromTo 'a' =<<)to takie czyste użycie bezcelowości
Julian Wolf

7

C, 45 43 bajtów

Dzięki @Neil za zaoszczędzenie dwóch bajtów i rozróżnienie wielkości liter w rozwiązaniu!

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

Wypróbuj online!


Wydaje się, że można zapisać bajt, ustawiając n=0globalnie, a następnie pomijając pierwszą klauzulę specyfikacji pętli, prawda? edycja: nieważne - myślę, że zadziałałoby to tylko przy pierwszym połączeniu.
Julian Wolf

3
Czy można odliczać od 100 zapisanych bajtów? Ponadto, &31może pracować, aby twoim przypadku kod niewrażliwy.
Neil

Z ciekawości, jak to n=!ndziała? Rozumiem, że sprawdza, czy nwynosi zero, ponieważ na podstawie niektórych testów widzę !0zwroty 1; !15zwraca 0; i również !-15wraca 0. Ale dlaczego? Który operand jest !w C, gdy go używasz !integer?
Kevin Cruijssen

@KevinCruijssen !to tylko logika not. W C 0oznacza średnie falsei dowolne inne wartości całkowite true. Tak !0 == 1, i !n == 0dla każdego n != 0.
Steadybox

@ Steadybox Ach, nie znałem tej części: „ każda inna liczba całkowita oznacza prawda ”, ale rzeczywiście ma to sens. Zawsze (niepoprawnie) myślałem o tym jak o 0=false; 1=truetym, stąd moje zamieszanie. Dziękuję za odpowiedź.
Kevin Cruijssen

6

Haskell , 32 bajty

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

Działa to dla małych liter. Na wielkie litery, s/96/64/. Obsługa mieszanych przypadków dodałaby kilka bajtów.


6

Mathematica, 23 bajty

100==Tr@LetterNumber@#&

Czysta funkcja pobierająca ciąg wejściowy (lub tablicę liter), bez rozróżniania wielkości liter i zwracająca Truelub False. Tutaj Trpo prostu dodaje razem litery i cyfry; wszystko inne jest oczywiste.


6

Galaretka , 9 7? * 8 bajtów

ɠO%32S⁼³

Pełny program, zwracając 1, jeśli wejście jest słowem dolara, lub 0, jeśli nie.

Wypróbuj online!

W jaki sposób?

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

* Czy może to być 7 bajtów?

Jedynym powodem miało to wejście z ɠbyło utrzymanie ³jak dosłownym 100, a nie 3 -ciej linii poleceń (1 st wejściowego programu).

Sposobem na uniknięcie tego byłoby, jak wskazał Dennis, utworzenie 100 przy użyciu surowej formy dosłownej, ȷ2którą jest 10 2 . Prowadzi to do innego 8 bajtów O%32S=ȷ2, ale teraz jest to anonimowa funkcja monadycznego (podobnie jak operacyjny jako pełnego programu z 3 rd argument).

Ponieważ w golfie można tworzyć zmienne lub funkcje pomocnicze, które ograniczają program, w którym mogą się znajdować (nie można ponownie użyć tej nazwy w zakresie bez zatrzymania funkcji przed ponownym użyciem), być może ograniczenie programu do przyjmowania tylko danych wejściowych ze STDIN może także akceptowalny, w którym to przypadku 7 bajtów O%32S=³byłoby tutaj akceptowanych jako funkcja bez nazwy.


1
Alternatywnie O%32S=ȷ2. Działa dla wprowadzania wielkich i małych liter.
Dennis

@Dennis Może to być granica, ale tak O%32S⁼³naprawdę nie byłaby poprawnym wpisem, ponieważ definiuje nienazwaną funkcję wielokrotnego użytku, o ile reszta programu, w którym się znajduje, nie używa argumentów wiersza poleceń do wprowadzania danych?
Jonathan Allan

Hm, myślę, że można to zrobić. Nie różni się to na przykład od używania globalnej zmiennej w C.
Dennis

6

Alice , 23 bajty

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

Wypróbuj online!

Dane wejściowe powinny być pisane małymi literami. Drukuje 1dla słów dolara i 0nie tylko.

Wyjaśnienie

Czas pochwalić się taśmą Alice i zaawansowanym sterowaniem. Pomimo tego, że jest dość dobra w pracy z liczbami całkowitymi i łańcuchami indywidualnie, Alice nie ma wbudowanych a) określających długość łańcucha, b) konwersji między znakami i ich punktami kodowymi. Powodem tego jest to, że wszystkie polecenia Alice albo mapują liczby całkowite na liczby całkowite, albo ciągi znaków na ciągi znaków. Ale oba z nich wymagają mapowania ciągów na liczby całkowite lub odwrotnie, więc nie pasują do żadnego z trybów Alice.

Jednak oprócz stosu Alice ma również taśmę, a tryb kardynalny i porządkowy interpretują dane na taśmie na różne sposoby

  • W trybie kardynalnym jest to zwykła taśma znana z innych języków, takich jak Brainfuck. Możesz przechowywać jedną liczbę całkowitą w każdej komórce i przesuwać głowicę taśmy. Taśma jest nieskończenie długa i początkowo mieści -1 w każdej komórce. Komórki są również indeksowane, a głowa taśmy zaczyna się od indeksu 0 .
  • Tryb porządkowy ma własną głowicę taśmy (również rozpoczynającą się od indeksu 0 ) i interpretuje taśmę jako listę ciągów znaków. Łańcuchy są zakończone komórkami niebędącymi znakami (tj. Dowolnymi wartościami, które nie są prawidłowymi punktami kodowymi Unicode), w szczególności -1 . Tak więc w trybie zwykłym taśma jest początkowo wypełniona pustymi łańcuchami.

Taśma może być używana do obu powyższych operacji: aby uzyskać długość łańcucha, zapisujemy ją na taśmie w trybie porządkowym, szukamy zakończenia -1 w trybie kardynalnym i wyszukujemy pozycję głowicy taśmy. Aby przekonwertować znaki na punkty kodowe, po prostu odczytujemy je z taśmy w trybie kardynalnym.

Pozostałe dwie ważne funkcje zastosowane w tym rozwiązaniu to stos zwrotny i iterator. Alicja ma stos zwrotny, który zwykle jest wypełniany podczas korzystania z polecenia skoku j, i z którego można wstawić adres, aby skoczyć z powrotem k. Możliwe jest jednak również przesunięcie bieżącego adresu na stos zwrotny bez skakania gdziekolwiek w. Jeśli połączymy to wz poleceniem powtarzania& , możemy przesunąć bieżący adres do stosu zwrotnego n razy. Teraz za każdym razem, gdy docieramy k, jedna kopia jest usuwana ze stosu zwrotnego i wykonujemy kolejną iterację w(zaczynając od komórki po niej, ponieważ adres IP przesuwa się przed wykonaniem kolejnego polecenia). Kiedy stos zwrotny staje się pusty,knic nie robi, a własność intelektualna po prostu przechodzi. Dlatego &w...kpojawia się liczba całkowita n, a następnie wykonuje ... n + 1 razy, co daje nam bardzo zwięzły sposób na wyrażenie prostej forpętli.

Do samego kodu ...

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

Miły! Dostałem 41 za pierwszym razem
Kritixi Lithos

6

R 55 55 bajtów

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

-1 bajt dzięki BLT

  • zwraca funkcję wykonującą wymagane obliczenia, która zwraca TRUEi FALSEzgodnie z oczekiwaniami.

  • przyjmuje dane jako małe litery; byłoby tylko przejściem z lettersna LETTERSna wielkie litery


1
function(x)sum(match(el(strsplit(x,"")),letters))==100zapisuje bajt.
BLT

6

Rubin, 25 bajtów

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

Działa na wielkie litery.

Widzę kilka bardziej skomplikowanych wpisów Ruby, ale to naprawdę jest takie proste. s.sumdodaje kody ASCII łańcucha wejściowego i odejmujemy 64-krotność długości łańcucha.

Przykład zastosowania

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

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

Działa to tylko w Ruby 2.4 i obecnie nie działa w TIO
GB

1
@ GB dziękuję za komentarz, ale działam w wersji 2.2.6 i działa dobrze dla mnie. Funkcja została udokumentowana od wersji 1.9.3. Działa również na TIO.run i Ideone.com.
Level River St

Masz rację, myślałem, że to samo co Array # sum, które jest nowe w 2.4
GB

W rzeczywistości nie jest to suma wartości ASCII, definicja to „Zwraca podstawową n-bitową sumę kontrolną znaków w str”. To oczywiście działa w tym przypadku.
GB


5

05AB1E , 9 bajtów

5bIvAyk>-

Wypróbuj online!

Wyjaśnienie

Ponieważ 1 jest jedyną prawdziwą wartością w 05AB1E, możemy zapisać bajt przy użyciu odejmowania w porównaniu do 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 bajtów

-1 bajt dzięki @Neil ( 31&zamiast -96+).

29 bajtów kodu + -pflaga.

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

Wypróbuj online!


Czy możesz użyć 31&ordzamiast tego?
Neil

@Neil Hum ... Zawsze używałem -96+do takich rzeczy .. Wielkie dzięki za to! (ale teraz czuję, że powinienem wrócić do moich starych postów i wymienić co -96+: x)
Dada

Pytanie określa, że ​​tablice są dozwolone jako dane wejściowe. Może to być zatem krótsze jako podprogram: {$@+=31&ord for@_;$@==100}(niesprawdzony)
msh210

Myślę, że to zależy od kontekstu - tutaj używasz go w +=, ale w innych przypadkach możesz zmarnować oszczędności na nawiasy.
Neil,

@ msh210 Wyzwanie mówi your one language's text datatypes. Tablice prawie nie są tekstowym typem danych Perla ... (W przeciwnym razie rzeczywiście zaoszczędziłby 1 bajt)
Dada

5

PowerShell , 36 30 bajtów

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

Wypróbuj online!

Dane wejściowe jako tablica, ale zastanawiam się, czy istnieje lepszy sposób obsługi znaków.

EDYCJA Brakowało łatwej spacji, ale @AdmBorkBork uprzejmie daj mi znać: P również, istniał lepszy sposób na obsługę postaci!


Hiya - kilka szybkich golfów. Nie potrzebujesz dookoła parenów [char]$_-96i nie potrzebujesz odstępu pomiędzy -eqi 100, obniżając Cię do 33. Możesz również zrobić "$_"[0]zamiast [char]$_, obniżając do 32. Wypróbuj online!
AdmBorkBork

Czy "okolica jest $_konieczna? Wygląda na to, że działa bez obsady. Czy może to być spowodowane tym, że dane wejściowe są już tablicą łańcuchów?
Sinusoid

Ach, rzeczywiście masz rację. Nie "są potrzebne w tym konkretnym przypadku.
AdmBorkBork

5

Alice , 28 18 bajtów

Dzięki @MartinEnder za grę w golfa 10 bajtów

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

Wypróbuj online!

To przesłanie używa innej metody niż odpowiedź @ MartinEnder.

To przesłanie 0x00jest wynikiem fałszu i 0x01prawdy.

Oto wersja, która wyświetla 0lub 1zamiast tego: Wypróbuj!

Wyjaśnienie

Wyjaśnienie poniżej dotyczy wersji „widocznej”. Oba są bardzo podobne, z wyjątkiem pierwszego programu, ostatni onie konwertuje ciągu 0lub 1na ciąg znaków (ponieważ jesteśmy w trybie kardynalnym), ale zamiast tego przyjmuje liczbę i wypisuje znak w tym punkcie kodu.

=                 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

Następnie IP zawija się do lewej krawędzi na =. Jeśli najwyższą wartością stosu jest 0, IP kontynuuje swoją ścieżkę, zwiększając całkowitą sumę wszystkich znaków, po zakończeniu wprowadzania (górna część stosu będzie 1), wówczas IP skręca w prawo (90 stopni zgodnie z ruchem wskazówek zegara).

Należy zwrócić uwagę na jedną rzecz: pętla w pierwszym wierszu wykona iterację po zakończeniu wprowadzania. To odejmie 97( 96od '`i -1od braku danych wejściowych) od sumy.

>                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 bajtów

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.

Z podziałem linii wygląda to tak:

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.

Akceptuje wielkie lub małe litery, ponieważ Auctioneer Schoolkonwertuje to wszystko na wielkie litery.
Chop Sueydzieli go na pojedyncze postacie.
Charboil Grillkonwertuje znaki na ich kod ASCII.
Zbieramy jeden znak na raz, konwertujemy go na ASCII, odejmujemy 65 i dodajemy do bieżącej sumy.
Gdy nie będzie już więcej znaków, porównaj całość do 100.

Zwraca TRUEza słowa dolara i FALSEza wszystko inne.


1
W świecie „nudnych”, nieczytelnych języków gry w golfa <20 bajtów odpowiedzi, witam twoje wejście, miły nieznajomy.
Olivier Dulac

5

Kod maszynowy IA-32, 21 bajtów

Hexdump:

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

Kod zestawu:

    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

Zlicza od 100 do 0. Po osiągnięciu 0 zwraca true (0xff); w przeciwnym razie false (0x00).


5

Dyalog APL, 17 15 bajtów

100=+/17-⍨⎕AV⍳⍞

Wykorzystuje zestaw znaków Dyalog Classic.

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

Domyślnie wszystkie zgłoszenia muszą być pełnymi programami lub funkcjami. Programy REPL są dozwolone, o ile są jako takie zidentyfikowane. Jednak nadal musisz poprosić użytkownika o dane wejściowe.
Dennis,

4

Python , 38 bajtów

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

Wypróbuj online!

Ta sama długość co rozwiązanie ovs . Zamiast odjąć 96 od każdej ordwartości, sprawdza, czy ordsuma jest równa 100+96*len(s). Jest to wyrażone o jeden bajt krócej 4-96*~len(s), co jest równe 4-96*(-len(s)-1).


W Pythonie 3 lambda s:sum(s.encode(),96*~len(s))==4również będzie działać.
Dennis


4

Retina , 47 23 bajtów

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

Wypróbuj online! Uwaga: Nagłówek wpisuje małe litery i dzieli je na słowa; wyniki pojawiają się w osobnych wierszach. Edycja: Zaoszczędź o wiele za dużo bajtów dzięki @MartinEnder.


O wiele krótsze jest obliczanie wartości literowych poprzez stopniowe obniżanie ich podczas wstawiania znaków: tio.run/nexus/...
Martin Ender

4

Oktawa, 18 bajtów

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

Odejmuje 96od ciągu wejściowego x(małe litery), aby uzyskać wartości liczbowe liter. Bierze sumi porównuje to 100. Zwraca wartość logiczną 1dla przypadków prawdziwych i logiczną 0dla przypadków fałszywych.

Mógłbym zaoszczędzić jeden bajt, gdyby można było podać fałsz dla „słów dolara” i prawda dla „słów bez dolara”.


4

Japt , 13 12 10 bajtów

L¥U¬x_c %H

Wyjaśnienie:

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

Przetestuj online!

12 bajtów:

L¥U¬mc m%H x

Wypróbuj online!

Kolejne 12-bajtowe rozwiązanie wykorzystujące inną technikę

L¥U¬x@;CaX Ä

Wypróbuj online!


Dobra robota! Myślę, że możesz zaoszczędzić bajt na pierwszym z m%Hzamiast zamiast m-96(będzie działać teraz w obu przypadkach, bonus!), A jeden na drugim zL¥U¬x@;CaX Ä
ETHproductions

@ETHproductions Dzięki! m%Hbyło miłym znaleziskiem. x@też był świetny pomysł!
Oliver,

@ETHproductions Sprowadził to do 10 bajtów;)
Oliver

3

Rubinowy (2.4+), 38 bajtów

Pobiera dane pisane małymi literami. Wymaga Ruby 2.4, Array#sumaby nie działał na TIO.

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

2
Użyj String#byteszamiast String#chars, abyś nie musiał dzwonić c.ord.
Wartość tuszu

I użyj sumna tablicy zamiastmap
GB

3

/// , 564 210 189 185 bajtów

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

Wypróbuj online!

Drukuje 1, jeśli jest to „słowo dolara”, w przeciwnym razie drukuje „0”

Dane wejściowe są następujące: (Przewiń do końca w prawo)

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

Działa, zastępując każdą literę jej wartością w unarnym, a następnie zastępując unarną 100 na 0. Następnie zastępuje dowolną wartością słowa 1. Jeśli wartość słowa wynosi 0, to wypisze 1, ponieważ na końcu kod zastępuje 0. Jeśli wartość słowa to cokolwiek innego, wypisze to 0.

Gra w golfa polega na wykorzystaniu typowych wystąpień w kodzie jako zamienników.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.