Bernardino identifiziert unveränderte Dollarwörter


47

Definition

Ein Dollar-Wort ist ein Wort, bei dem, wenn jedem Buchstaben ein Cent-Wert von a = 1 bis z = 26 zugewiesen wird und die Buchstaben summiert werden, das Ergebnis 100 lautet. Hier ein Beispiel für CodeReview und hier eine Liste von Dollar Wörtern, die ich online gefunden habe.

Eingang

Die Eingabe erfolgt alphabetisch von az in den Textdatentypen Ihrer Sprache (Arrays sind zulässig). Sie müssen keine weiteren Eingaben berücksichtigen - Leerzeichen, Apostrophe oder Bindestriche sind nicht vorhanden. Sie können Kleinbuchstaben, Großbuchstaben oder eine Kombination daraus verwenden. Nachgestellte Zeilenumbrüche sind zulässig.

Ausgabe

Geben Sie einen Wahrheitswert aus, wenn die Eingabe ein Dollarwort ist, und einen Falschwert, wenn dies nicht der Fall ist.

Testfälle

Wahrheit:

buzzy
boycott
identifies
adiabatically
ttttt

Falsey:

zzz
zzzzzzz
abcdefghiljjjzz
tttt
basic

Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes! Es gelten Standardlücken und -regeln. Krawatte geht zum ersten Plakat.


20
Der Titel enthält Dollar-Wörter. Tut mir leid, wenn er Sie abschreckt.
Stephen

Antworten:


7

GS2 , 6 Bytes

▲1Θd←q

Die Eingabe muss in Großbuchstaben erfolgen.

Probieren Sie es online!

Wie es funktioniert

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

Code:

Ç96-O4bQ

Verwendet die CP-1252- Codierung. Probieren Sie es online!

Erläuterung:

Ç          # 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
Tnfunktioniert auch: P
Magic Octopus Urn

Ç4+OTn%0Qwar eine andere Idee, die ich hatte, aber es ist schlimmer.
Magic Octopus Urn

11

Perl 6 , 21 Bytes

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

Versuch es

Wechseln:

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

Versuch es

Beachten Sie, dass es sich um ROMAN NUMERAL ONE HUNDREDU + 216D mit einem Unival von… 100 handelt,
für dessen Codierung 3 Bytes erforderlich sind .

Erweitert:

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

96-s100=

Verwendet die Eingabe in Kleinbuchstaben.

Probieren Sie es online!

Erläuterung

Der Code ist so lesbar wie es nur geht:

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

Rückgabe 0oder 1.

let f =

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

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


Interessanterweise reducekamen beide 2 Bytes länger heraus, als ich es mit Rekursion versuchte .
Neil

@Neil Eigentlich wurde es reduce()in den ersten Minuten der Kulanzfrist verwendet, als ich es zum ersten Mal gepostet habe.
Arnauld

7

Haskell , 32 Bytes

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

Probieren Sie es online!

Die Idee ist, afür jedes Zeichen in der Liste eine Liste der Zeichen von bis zu dem angegebenen Zeichen zu erstellen und zu überprüfen, ob die Gesamtlänge 100 beträgt.

Andere Versuche:

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

Schade, enumFromToist so lang.


1
Sie haben Recht, dass die Länge eine Schande (100==).length.(enumFromTo 'a' =<<)ist - ist so eine saubere Verwendung von Punktfreiheit
Julian Wolf

7

C 45 43 Bytes

Vielen Dank an @Neil, dass Sie zwei Bytes gespart und die Lösung unabhängig von Groß- und Kleinschreibung gemacht haben!

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

Probieren Sie es online!


Scheint, Sie können ein Byte speichern, indem Sie n=0global festlegen und dann die erste Klausel der Schleifenspezifikation überspringen, nicht wahr? edit: egal - das würde wohl nur beim ersten anruf funktionieren.
Julian Wolf

3
Konnte von 100 Bytes runterzählen? Außerdem &31funktionieren könnte , um Ihren Code Fall unempfindlich zu machen.
Neil

Wie funktioniert es aus Neugier n=!n? Ich verstehe, dass überprüft wird, ob nNull ist, da ich auf der Grundlage eines Tests eine !0Rendite sehe 1. !15kehrt zurück 0; und !-15kehrt 0auch zurück. Aber wieso? Welcher Operand ist !in C, wenn er als verwendet wird !integer?
Kevin Cruijssen

@ KevinCruijssen !ist nur die logische not. In C 0bedeutet falseund jeder andere ganzzahlige Wert bedeutet true. Also !0 == 1und !n == 0für jeden n != 0.
Steadybox

@Steadybox Ah, ich wusste diesen Teil nicht: " und jeder andere ganzzahlige Wert bedeutet wahr ", aber es macht in der Tat Sinn. Ich habe es immer (fälschlicherweise) als 0=false; 1=truestattdessen angesehen, daher meine Verwirrung. Danke für die Antwort.
Kevin Cruijssen

6

Haskell , 32 Bytes

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

Dies funktioniert für die Eingabe in Kleinbuchstaben. Für Großbuchstaben s/96/64/. Unterstützung für gemischte Groß- und Kleinschreibung würde eine Reihe von Bytes hinzufügen.


6

Mathematica, 23 Bytes

100==Tr@LetterNumber@#&

Reine Funktion, bei der eine Zeichenfolge (oder ein Array von Buchstaben) als Eingabe verwendet wird, bei der die Groß- / Kleinschreibung nicht beachtet wird und Trueoder zurückgegeben wird False. Hier werden Trnur die Buchstaben-Zahlen addiert; alles andere ist selbsterklärend.


6

Jelly , 9 7? * 8 Bytes

ɠO%32S⁼³

Volles Programm, Ausgabe von 1, wenn die Eingabe ein Dollarwort ist, oder 0, wenn nicht.

Probieren Sie es online!

Wie?

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

* Könnten es 7 Bytes sein?

Der einzige Grund für die Eingabe ɠbestand darin, ³die Eingabe als Literal 100 und nicht als dritte Befehlszeileneingabe ( erste Programmeingabe) beizubehalten.

Eine Möglichkeit, dies zu vermeiden, besteht darin, wie Dennis darauf hingewiesen hat, 100 unter Verwendung der rohen wörtlichen Form zu erstellen, die ȷ210 2 ist . Dies führt zu weiteren 8 Byte O%32S=ȷ2, aber dies ist jetzt eine unbenannte monadische Funktion (und arbeitet auch als vollständiges Programm mit einem dritten Argument).

Da man im Golfsport Variablen oder Hilfsfunktionen erstellen kann, die das Programm, in dem sie sich befinden, einschränken (man kann den Namen im Gültigkeitsbereich nicht wiederverwenden, ohne zu verhindern, dass die Funktion wiederverwendbar ist), kann man das Programm möglicherweise darauf beschränken, nur Eingaben von STDIN zu übernehmen auch akzeptabel sein, in welchem ​​Fall das 7 Byte O%32S=³hier als unbenannte Funktion akzeptabel wäre.


1
Alternativ O%32S=ȷ2. Funktioniert für die Eingabe von Groß- und Kleinbuchstaben.
Dennis

@Dennis Es kann grenzwertig sein, wäre aber O%32S⁼³eigentlich kein gültiger Eintrag, da es eine unbenannte, wiederverwendbare Funktion definiert, solange der Rest des Programms, in dem es sich befindet, keine Befehlszeilenargumente für die Eingabe verwendet.
Jonathan Allan

Hm, ich denke das könnte gemacht werden. Das ist nicht anders als zum Beispiel die Verwendung einer globalen Variablen in C.
Dennis

6

Alice , 23 Bytes

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

Probieren Sie es online!

Die Eingabe sollte in Kleinbuchstaben erfolgen. Druckt 1für Dollar-Wörter und 0sonst.

Erläuterung

Es ist Zeit, Alices Band und einen fortgeschrittenen Kontrollfluss vorzuführen. Alice kann zwar ziemlich gut mit ganzen Zahlen und Strings individuell arbeiten, hat aber keine eingebauten Funktionen, um a) die Länge eines Strings zu bestimmen, b) zwischen Zeichen und ihren Codepunkten zu konvertieren. Der Grund dafür ist, dass alle Befehle von Alice entweder Ganzzahlen Ganzzahlen oder Zeichenfolgen Zeichenfolgen zuordnen. Für beide wäre es jedoch erforderlich, Zeichenfolgen Ganzzahlen zuzuordnen oder umgekehrt, sodass sie nicht in einen der beiden Modi von Alice passen.

Zusätzlich zum Stapel verfügt Alice jedoch auch über ein Band. Im Kardinal- und Ordinal-Modus werden die Daten auf dem Band auf unterschiedliche Weise interpretiert

  • Im Kardinalmodus ist es ein normales Band, das aus anderen Sprachen wie Brainfuck bekannt ist. Sie können eine ganze Zahl in jeder Zelle speichern und einen Bandkopf bewegen. Das Band ist unendlich lang und enthält anfangs in jeder Zelle ein -1 . Die Zellen werden ebenfalls indiziert und der Bandkopf beginnt bei Index 0 .
  • Der Ordnungsmodus hat einen eigenen Bandkopf (ebenfalls beginnend mit Index 0 ) und interpretiert das Band als eine Liste von Zeichenfolgen. Zeichenfolgen werden durch Zellen abgeschlossen, die keine Zeichen sind (dh Werte, die kein gültiger Unicode-Codepunkt sind), insbesondere -1 . Im Ordinal-Modus wird das Band also zunächst mit leeren Zeichenfolgen gefüllt.

Dieses Band kann für beide der oben genannten Operationen verwendet werden: Um eine Zeichenkettenlänge zu erhalten, schreiben wir es im Ordinal-Modus auf das Band, suchen im Cardinal-Modus nach dem Abschluss -1 und rufen die Position des Bandkopfs ab. Um Zeichen in ihre Codepunkte umzuwandeln, lesen wir sie einfach im Kardinalmodus vom Band.

Die beiden anderen wichtigen Funktionen, die in dieser Lösung verwendet werden, sind der Rückgabestapel und ein Iterator. Alice hat einen Rückgabestapel, der normalerweise mit dem Sprungbefehl gefüllt jwird und von dem Sie eine Adresse abrufen können, mit der Sie zurückspringen können k. Es ist jedoch auch möglich, die aktuelle Adresse auf den Rückgabestapel zu verschieben, ohne irgendwo mit zu springen w. Wenn wir wmit dem Befehl repeat kombinieren &, können wir die aktuelle Adresse n- mal in den Rückgabestapel verschieben . Jetzt wird jedes Mal k, wenn wir ankommen , eine Kopie vom Rückgabestapel entfernt und wir führen eine weitere Iteration von aus w(beginnend mit der Zelle danach, da sich die IP bewegt, bevor ein anderer Befehl ausgeführt wird). Wenn der Rückgabestapel leer wird,ktut gar nichts und die IP geht einfach durch. Daher wird &w...keine ganze Zahl n eingefügt und dann ... n + 1- mal ausgeführt, was uns eine sehr kurze Möglichkeit gibt, eine einfache forSchleife auszudrücken .

Weiter zum Code selbst ...

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

Nett! Ich habe 41 mit meinem ersten Versuch
Kritixi Lithos

6

R, 55 54 Bytes

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

-1 Byte dank BLT

  • gibt eine Funktion, die die erforderliche Berechnung tut, die Renditen TRUEund FALSEwie man erwarten würde.

  • nimmt Eingaben als Kleinbuchstaben auf; wäre nur ein Wechsel von lettersnach LETTERSfür alle Großbuchstaben


1
function(x)sum(match(el(strsplit(x,"")),letters))==100Speichert ein Byte.
BLT

6

Ruby, 25 Bytes

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

Funktioniert für Großbuchstaben.

Ich sehe ein paar komplexere Ruby-Einträge, aber es ist wirklich so einfach. s.sumaddiert die ASCII-Codes der Eingabezeichenfolge, und davon subtrahieren wir das 64-fache der Länge der Zeichenfolge.

Anwendungsbeispiel

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

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

Dies funktioniert nur mit Ruby 2.4 und derzeit nicht mit TIO
GB,

1
@GB danke für den Kommentar, aber ich arbeite mit 2.2.6 und es funktioniert gut für mich. Das Feature ist seit 1.9.3 dokumentiert. Es funktioniert auch für mich auf TIO.run und Ideone.com.
Level River St

Sie haben Recht, ich dachte, es ist dasselbe wie Array # sum, das in 2.4
GB am

Tatsächlich handelt es sich nicht um die Summe der ASCII-Werte, sondern um die Definition "Gibt eine einfache n-Bit-Prüfsumme der Zeichen in str zurück". Das funktioniert natürlich in diesem Fall.
GB


5

05AB1E , 9 Bytes

5bIvAyk>-

Probieren Sie es online!

Erläuterung

Da in 05AB1E 1 der einzige Wahrheitswert ist, können wir ein Byte durch Subtraktion über den Vergleich mit 100 speichern .

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 Bytes

-1 Byte dank @Neil ( 31&anstelle von -96+).

29 Byte Code + -pFlag.

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

Probieren Sie es online!


Können Sie 31&ordstattdessen verwenden?
Neil

@ Neil Hum ... Ich habe immer -96+für solche Dinge verwendet .. Vielen Dank dafür! (aber jetzt habe ich das Gefühl, ich sollte meine alten Beiträge durchgehen und alle ersetzen -96+: x)
Dada

Die Frage gibt an, dass Arrays als Eingabe zulässig sind. Dies kann daher als Unterprogramm kürzer sein: {$@+=31&ord for@_;$@==100}(ungetestet)
msh210

Ich denke, es hängt vom Kontext ab - hier verwenden Sie es in einer +=, aber in anderen Fällen könnten Sie die Einsparung von Klammern verschwenden.
Neil

@ msh210 Die Herausforderung lautet your one language's text datatypes. Arrays sind kaum Perls Textdatentyp ... (Sonst hätte es tatsächlich 1 Byte gespart)
Dada

5

PowerShell , 36 - 30 Byte

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

Probieren Sie es online!

Eingaben als Array, aber ich frage mich, ob es eine bessere Möglichkeit gibt, mit Zeichen umzugehen.

BEARBEITEN Verpasste ein einfaches Leerzeichen, aber @AdmBorkBork ließ mich freundlich wissen: P außerdem gab es tatsächlich eine bessere Möglichkeit, mit den Zeichen umzugehen!


Hiya - ein paar schnelle Golfer. Sie brauchen keine Parens [char]$_-96, und Sie brauchen kein Leerzeichen zwischen -eqund 100, um auf 33 zu kommen. Sie können es auch tun, "$_"[0]anstatt [char]$_auf 32 zu kommen. Probieren Sie es online aus!
AdmBorkBork

Sind die "um $_nötig? Es scheint ohne die Besetzung zu funktionieren. Könnte es daran liegen, dass die Eingabe bereits ein String-Array ist?
Sinusoid

Ah, in der Tat hast du recht. Sie "werden in diesem speziellen Fall nicht benötigt.
AdmBorkBork

5

Alice , 28 18 Bytes

Vielen Dank an @MartinEnder für das Golfen mit 10 Bytes

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

Probieren Sie es online!

Diese Einreichung verwendet eine andere Methode als die Antwort von @ MartinEnder.

Diese Vorlage gibt 0x00für falsch und 0x01für wahrheitsgemäß aus.

Also hier ist eine Version, die ausgibt 0oder 1stattdessen: Probieren Sie es aus!

Erläuterung

Die folgende Erklärung gilt für die "sichtbare" Version. Beide sind sich sehr ähnlich, außer dass das letzte Programm odas 0oder nicht 1in eine Zeichenfolge konvertiert (da wir uns im Kardinalmodus befinden), sondern stattdessen die Zahl übernimmt und das Zeichen an diesem Codepunkt ausgibt.

=                 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

Danach wickelt sich die IP am linken Rand um =. Wenn der oberste Wert des Stapels ist 0, setzt die IP ihren Pfad fort und erhöht die Gesamtsumme aller Zeichen. Sobald die Eingabe abgeschlossen ist ( der oberste Wert des Stapels ist 1), dreht sich die IP nach rechts (90) Grad im Uhrzeigersinn).

Wichtig ist, dass die Schleife in der ersten Zeile einmal wiederholt wird, nachdem die Eingabe beendet wurde. Dies subtrahiert 97( 96vom '`und -1vom Fehlen von Eingaben) von der Gesamtsumme.

>                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 Bytes

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.

Mit Zeilenumbrüchen sieht es so aus:

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.

Es akzeptiert Groß- oder Kleinbuchstaben, da das Auctioneer Schoolalles in Großbuchstaben konvertiert.
Chop Sueyzerlegt es in einzelne Zeichen.
Charboil Grillkonvertiert Zeichen in ihren ASCII-Code.
Wir nehmen jeweils ein Zeichen auf, konvertieren es in ASCII, subtrahieren 65 und addieren es zur laufenden Summe.
Wenn keine weiteren Zeichen mehr vorhanden sind, vergleichen Sie die Summe mit 100.

Rückkehr TRUEfür Dollarwörter und FALSEfür alles andere.


1
In einer Welt von "langweiligen" unlesbaren Code-Golf-Sprachen <20 Bytes, begrüße ich Ihren Eintritt, gütiger Fremder.
Olivier Dulac

5

IA-32 Maschinencode, 21 Bytes

Hexdump:

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

Assembler-Code:

    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

Zählt von 100 bis 0. Bei Ankunft auf 0 wird true (0xff) zurückgegeben. ansonsten false (0x00).


5

Dyalog APL, 17 15 Bytes

100=+/17-⍨⎕AV⍳⍞

Verwendet den Dyalog Classic-Zeichensatz.

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

Standardmäßig müssen alle Einsendungen vollständige Programme oder Funktionen sein. REPL-Programme sind erlaubt, solange sie als solche gekennzeichnet sind. Sie müssen jedoch noch Benutzereingaben anfordern.
Dennis

4

Python , 38 Bytes

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

Probieren Sie es online!

Gleiche Länge wie die Lösung von ovs . Anstatt 96 von jedem ordWert zu subtrahieren , wird geprüft, ob die ordSumme gleich ist 100+96*len(s). Dies wird um ein Byte kürzer ausgedrückt als 4-96*~len(s), was gleich ist 4-96*(-len(s)-1).


In Python 3 lambda s:sum(s.encode(),96*~len(s))==4würde das auch funktionieren.
Dennis


4

Retina , 47 23 Bytes

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

Probieren Sie es online! Hinweis: Der Header setzt die Eingabe in Kleinbuchstaben und teilt sie in Wörter auf. Die Ergebnisse werden in separaten Zeilen angezeigt. Bearbeiten: Dank @MartinEnder viel zu viele Bytes gespeichert.


Es ist viel kürzer, die Buchstabenwerte durch schrittweises Verringern beim Einfügen von Zeichen zu berechnen: tio.run/nexus/…
Martin Ender

4

Oktave, 18 Bytes

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

Subtrahiert 96von der Eingabezeichenfolge x(Kleinbuchstaben), um die numerischen Werte der Buchstaben zu erhalten. Nimmt das sumund vergleicht es mit 100. Gibt eine Logik 1für wahrheitsgemäße Fälle und eine Logik 0für falsche Fälle zurück.

Ich könnte ein Byte sparen, wenn es in Ordnung wäre, für "Dollarwörter" false und für "Nicht-Dollarwörter" true anzugeben.


4

Japt , 13 12 10 Bytes

L¥U¬x_c %H

Erläuterung:

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

Online testen!

12 Bytes:

L¥U¬mc m%H x

Probieren Sie es online!

Eine weitere 12-Byte-Lösung mit einer anderen Technik

L¥U¬x@;CaX Ä

Probieren Sie es online!


Gut gemacht! Ich denke, Sie können ein Byte für das erste mit m%Hanstelle von m-96(es funktioniert jetzt in beiden Fällen, Bonus!) Und eines für das zweite mitL¥U¬x@;CaX Ä
ETHproductions

@ETHproductions Danke! m%Hwar ein schöner Fund. x@war auch eine tolle idee!
Oliver

@ETHproductions Bekam es auf 10 Bytes;)
Oliver

3

Ruby (2.4+), 38 Bytes

Nimmt Eingaben in Kleinbuchstaben vor. Benötigt Ruby 2.4, Array#sumdamit es nicht mit TIO läuft.

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

2
Verwenden Sie String#bytesstattdessen, String#charsdamit Sie nicht anrufen müssen c.ord.
Value Ink

Und verwenden Sie sumauf dem Array stattmap
GB

3

/// , 564 210 189 185 Bytes

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

Probieren Sie es online!

Gibt eine 1 aus, wenn es sich um ein "Dollar-Wort" handelt, andernfalls eine "0".

Die Eingabe ist wie folgt: (Scrollen Sie ganz nach rechts)

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

Ersetzt jeden Buchstaben durch seinen Wert in Unary und ersetzt dann einen Unary 100 durch eine 0. Ersetzt dann den Wert des Wortes durch eine 1. Wenn der Wert des Wortes 0 ist, wird am Ende von eine 1 ausgegeben Der Code ersetzt eine 0. Wenn der Wert des Wortes etwas anderes ist, wird nur diese 0 ausgegeben.

Der Golf funktioniert, indem im Code übliche Vorkommen als Ersatz verwendet werden.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.