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.
Antworten:
GS2 , 6 Bytes
Die Eingabe muss in Großbuchstaben erfolgen.
Probieren Sie es online!
Wie es funktioniert
quelle
Python,
3938 BytesProbieren Sie es online!
-1 Byte danke an @JonathanAllan
quelle
05AB1E , 8 Bytes
Code:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
Erläuterung:
quelle
Tn
funktioniert auch: PÇ4+OTn%0Q
war eine andere Idee, die ich hatte, aber es ist schlimmer.Perl 6 , 21 Bytes
Versuch es
Wechseln:
Versuch es
Beachten Sie, dass
Ⅽ
es sich umROMAN NUMERAL ONE HUNDRED
U + 216D mit einem Unival von… 100 handelt,für dessen Codierung 3 Bytes erforderlich sind .
Erweitert:
quelle
MATL , 8 Bytes
Verwendet die Eingabe in Kleinbuchstaben.
Probieren Sie es online!
Erläuterung
Der Code ist so lesbar wie es nur geht:
quelle
JavaScript (ES6), 46 Byte
Rückgabe
0
oder1
.quelle
reduce
kamen beide 2 Bytes länger heraus, als ich es mit Rekursion versuchte .reduce()
in den ersten Minuten der Kulanzfrist verwendet, als ich es zum ersten Mal gepostet habe.Haskell , 32 Bytes
Probieren Sie es online!
Die Idee ist,
a
fü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:
Schade,
enumFromTo
ist so lang.quelle
(100==).length.(enumFromTo 'a' =<<)
ist - ist so eine saubere Verwendung von PunktfreiheitC
4543 BytesVielen Dank an @Neil, dass Sie zwei Bytes gespart und die Lösung unabhängig von Groß- und Kleinschreibung gemacht haben!
Probieren Sie es online!
quelle
n=0
global festlegen und dann die erste Klausel der Schleifenspezifikation überspringen, nicht wahr? edit: egal - das würde wohl nur beim ersten anruf funktionieren.&31
funktionieren könnte , um Ihren Code Fall unempfindlich zu machen.n=!n
? Ich verstehe, dass überprüft wird, obn
Null ist, da ich auf der Grundlage eines Tests eine!0
Rendite sehe1
.!15
kehrt zurück0
; und!-15
kehrt0
auch zurück. Aber wieso? Welcher Operand ist!
in C, wenn er als verwendet wird!integer
?!
ist nur die logischenot
. In C0
bedeutetfalse
und jeder andere ganzzahlige Wert bedeutettrue
. Also!0 == 1
und!n == 0
für jedenn != 0
.0=false; 1=true
stattdessen angesehen, daher meine Verwirrung. Danke für die Antwort.Haskell , 32 Bytes
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.quelle
Mathematica, 23 Bytes
Reine Funktion, bei der eine Zeichenfolge (oder ein Array von Buchstaben) als Eingabe verwendet wird, bei der die Groß- / Kleinschreibung nicht beachtet wird und
True
oder zurückgegeben wirdFalse
. Hier werdenTr
nur die Buchstaben-Zahlen addiert; alles andere ist selbsterklärend.quelle
Jelly ,
97? * 8 BytesVolles Programm, Ausgabe von 1, wenn die Eingabe ein Dollarwort ist, oder 0, wenn nicht.
Probieren Sie es online!
Wie?
* 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
ȷ2
10 2 ist . Dies führt zu weiteren 8 ByteO%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.quelle
O%32S=ȷ2
. Funktioniert für die Eingabe von Groß- und Kleinbuchstaben.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.Alice , 23 Bytes
Probieren Sie es online!
Die Eingabe sollte in Kleinbuchstaben erfolgen. Druckt
1
für Dollar-Wörter und0
sonst.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
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
j
wird und von dem Sie eine Adresse abrufen können, mit der Sie zurückspringen könnenk
. Es ist jedoch auch möglich, die aktuelle Adresse auf den Rückgabestapel zu verschieben, ohne irgendwo mit zu springenw
. Wenn wirw
mit dem Befehl repeat kombinieren&
, können wir die aktuelle Adresse n- mal in den Rückgabestapel verschieben . Jetzt wird jedes Malk
, wenn wir ankommen , eine Kopie vom Rückgabestapel entfernt und wir führen eine weitere Iteration von ausw
(beginnend mit der Zelle danach, da sich die IP bewegt, bevor ein anderer Befehl ausgeführt wird). Wenn der Rückgabestapel leer wird,k
tut gar nichts und die IP geht einfach durch. Daher wird&w...k
eine ganze Zahl n eingefügt und dann...
n + 1- mal ausgeführt, was uns eine sehr kurze Möglichkeit gibt, eine einfachefor
Schleife auszudrücken .Weiter zum Code selbst ...
quelle
R,
5554 Bytes-1 Byte dank BLT
gibt eine Funktion, die die erforderliche Berechnung tut, die Renditen
TRUE
undFALSE
wie man erwarten würde.nimmt Eingaben als Kleinbuchstaben auf; wäre nur ein Wechsel von
letters
nachLETTERS
für alle Großbuchstabenquelle
function(x)sum(match(el(strsplit(x,"")),letters))==100
Speichert ein Byte.Ruby, 25 Bytes
Funktioniert für Großbuchstaben.
Ich sehe ein paar komplexere Ruby-Einträge, aber es ist wirklich so einfach.
s.sum
addiert die ASCII-Codes der Eingabezeichenfolge, und davon subtrahieren wir das 64-fache der Länge der Zeichenfolge.Anwendungsbeispiel
quelle
Java 8, 36 Bytes
Probieren Sie es online!
Hinweis: case independent.
quelle
05AB1E , 9 Bytes
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 .
quelle
Perl 5 , 30 Bytes
-1 Byte dank @Neil (
31&
anstelle von-96+
).29 Byte Code +
-p
Flag.Probieren Sie es online!
quelle
31&ord
stattdessen verwenden?-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){$@+=31&ord for@_;$@==100}
(ungetestet)+=
, aber in anderen Fällen könnten Sie die Einsparung von Klammern verschwenden.your one language's text datatypes
. Arrays sind kaum Perls Textdatentyp ... (Sonst hätte es tatsächlich 1 Byte gespart)PowerShell ,
36 -30 ByteProbieren 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!
quelle
[char]$_-96
, und Sie brauchen kein Leerzeichen zwischen-eq
und100
, um auf 33 zu kommen. Sie können es auch tun,"$_"[0]
anstatt[char]$_
auf 32 zu kommen. Probieren Sie es online aus!"
um$_
nötig? Es scheint ohne die Besetzung zu funktionieren. Könnte es daran liegen, dass die Eingabe bereits ein String-Array ist?"
werden in diesem speziellen Fall nicht benötigt.Alice ,
2818 BytesVielen Dank an @MartinEnder für das Golfen mit 10 Bytes
Probieren Sie es online!
Diese Einreichung verwendet eine andere Methode als die Antwort von @ MartinEnder.
Diese Vorlage gibt
0x00
für falsch und0x01
für wahrheitsgemäß aus.Also hier ist eine Version, die ausgibt
0
oder1
stattdessen: 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
o
das0
oder nicht1
in eine Zeichenfolge konvertiert (da wir uns im Kardinalmodus befinden), sondern stattdessen die Zahl übernimmt und das Zeichen an diesem Codepunkt ausgibt.Danach wickelt sich die IP am linken Rand um
=
. Wenn der oberste Wert des Stapels ist0
, setzt die IP ihren Pfad fort und erhöht die Gesamtsumme aller Zeichen. Sobald die Eingabe abgeschlossen ist ( der oberste Wert des Stapels ist1
), 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
(96
vom'`
und-1
vom Fehlen von Eingaben) von der Gesamtsumme.quelle
Taxi , 1259 Bytes
Mit Zeilenumbrüchen sieht es so aus:
Es akzeptiert Groß- oder Kleinbuchstaben, da das
Auctioneer School
alles in Großbuchstaben konvertiert.Chop Suey
zerlegt es in einzelne Zeichen.Charboil Grill
konvertiert 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
TRUE
für Dollarwörter undFALSE
für alles andere.quelle
IA-32 Maschinencode, 21 Bytes
Hexdump:
Assembler-Code:
Zählt von 100 bis 0. Bei Ankunft auf 0 wird true (0xff) zurückgegeben. ansonsten false (0x00).
quelle
Dyalog APL,
1715 BytesVerwendet den Dyalog Classic-Zeichensatz.
quelle
Python , 38 Bytes
Probieren Sie es online!
Gleiche Länge wie die Lösung von ovs . Anstatt 96 von jedem
ord
Wert zu subtrahieren , wird geprüft, ob dieord
Summe gleich ist100+96*len(s)
. Dies wird um ein Byte kürzer ausgedrückt als4-96*~len(s)
, was gleich ist4-96*(-len(s)-1)
.quelle
lambda s:sum(s.encode(),96*~len(s))==4
würde das auch funktionieren.Ruby ,
35-30BytesProbieren Sie es online!
quelle
Retina ,
4723 BytesProbieren 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.
quelle
Oktave, 18 Bytes
Subtrahiert
96
von der Eingabezeichenfolgex
(Kleinbuchstaben), um die numerischen Werte der Buchstaben zu erhalten. Nimmt dassum
und vergleicht es mit100
. Gibt eine Logik1
für wahrheitsgemäße Fälle und eine Logik0
fü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.
quelle
Japt ,
13 1210 BytesErläuterung:
Online testen!
12 Bytes:
Probieren Sie es online!
Eine weitere 12-Byte-Lösung mit einer anderen Technik
Probieren Sie es online!
quelle
m%H
anstelle vonm-96
(es funktioniert jetzt in beiden Fällen, Bonus!) Und eines für das zweite mitL¥U¬x@;CaX Ä
m%H
war ein schöner Fund.x@
war auch eine tolle idee!Ruby (2.4+), 38 Bytes
Nimmt Eingaben in Kleinbuchstaben vor. Benötigt Ruby 2.4,
Array#sum
damit es nicht mit TIO läuft.quelle
String#bytes
stattdessen,String#chars
damit Sie nicht anrufen müssenc.ord
.sum
auf dem Array stattmap
/// ,
564210189185 BytesProbieren 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)
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.
quelle
Bash + GNU-Utils, 47
Probieren Sie es online aus .
quelle