Wortlängen-Summen-Vielfache
Ein Port meiner anderen Frage: Double Prime Words
Betrachten Sie ein Wort / eine Zeichenfolge aus nalphanumerischen Zeichen mit der Summe der Zeichen unter sVerwendung ihrer numerischen Position im Alphabet ( a=1, B=2, c=3,usw.) oder des numerischen Werts (0,1, 2, 3 - 9). Numerische Zeichen sollten zum individuellen Wert genommen werden. ( 66ist zwei 6Zeichen für eine Summe von 12)
Ein Wort ist genau dann ein Längen-Summen-Vielfaches, wenn ses ein Vielfaches von ist n, insbesondere s/neine positive ganze Zahl {1,2,3,4...}. Im Fall von s=0und n={0,00,000,...}ist 0 ein Vielfaches von any n, ergibt jedoch keine positive ganze Zahl. Daher ist eine Eingabe von {0,00,000,...}False.
Die Eingabe kann eine beliebige Kombination aus Zahlen und alphabetischen Groß- oder Kleinbuchstaben sein, da zwischen aoder kein numerischer Unterschied besteht A. Die Verarbeitung leerer Eingaben n=s=0ist nicht erforderlich.
Die Ausgabe ist ein geeignetes logisches Format für Ihre Sprache. dh Richtig oder Falsch, T oder F, 1 oder 0, positiv für wahr und 0 für falsch usw. Die Angabe, in welchem Format Ihre Ausgabe angezeigt wird, wird sehr geschätzt, ist jedoch nicht erforderlich. (Die Ausgabe muss nicht n oder s enthalten, aber ich füge sie unten als Demonstration und Beispiel hinzu.)
Gewinnbedingung: Schreiben Sie in so wenigen Bytes wie möglich eine Funktion, mit der festgestellt werden kann, ob eine Zeichenfolge ein Längen-Summen-Vielfaches ist.
Beispiele
Input -> Output (n,s)
hello -> False (5, 52)
MuLtIpLe -> False (8, 108)
Junct10n -> False (8, 83)
Order66 -> False (7, 72)
CodeGolf -> False (8, 67)
SUM -> False (3, 53)
ID -> False (2, 13)
25 -> False (2, 7)
0 -> False (1, 0) 0/1 = 0 which is not a positive integer
10 -> False (2, 1)
hello2 -> True (6, 54)
5um -> True (3, 39)
length -> True (6, 66)
Order64 -> True (7, 70)
Covid19 -> True (7, 63)
Word -> True (4, 60)
APPLE -> True (5, 50)
lawYER -> True (6, 84)
abc123 -> True (6, 12)
is -> True (2, 28)
television -> True (10, 130)
19 -> True (2, 10)
234 -> True (3, 9)
a -> True (1, 1)
b -> True (1, 2)
C -> True (1, 3)
Z -> True (1, 26)
1 -> True (1, 1)
9 -> True (1, 9)
Antworten
05AB1E , 16 15 Bytes
þIáÇ32%«ODXgÖ*Ā
Eingabe als Liste von Zeichen.
-1 Byte implizit dank @ovs .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
þ # Only leave the digits of the (implicit) input-list
Iá # Push the input-list again, and only leave its letters
Ç # Convert each letter to its codepoint integer
32% # Take modulo-32 on each codepoint
« # Merge it to the list of digits
O # Sum this list
D # Duplicate this sum
Ig # Push the input-list again, and pop and push its length
Ö # Check if the sum is divisible by this length
* # Multiply it by the duplicated sum
Ā # And check that this is NOT 0
# (after which the result is output implicitly)
3 Bytes ( D*Ā) werden für Randfälle 0/ 00/ 000/ etc. Verwendet .
Gelee , 12 11 Bytes
ŒlO%48Sȯ.%L
Ein monadischer Link, der eine Liste von Zeichen akzeptiert, die Null ergibt (Falsey), wenn die Zeichenfolge ein Längen-Summen-Vielfaches ist, oder eine Nicht-Null-Zahl (wahr), wenn nicht.
Probieren Sie es online aus! Oder sehen Sie sich die Testsuite an .
Wie?
ŒlO%48Sȯ.%L - Link: list of characters, w e.g. "ID" "10" "19" "0...0"
Œl - lower-case (w) "id" "10" "19" "0...0"
O - ordinals [105,100] [49,48] [49,57] [48,...,48]
48 - forty-eight 48 48 48 48
% - modulo [9,4] [1,0] [1,9] [0,...,0]
S - sum 13 1 10 0
. - a half 0.5 0.5 0.5 0.5
ȯ - logical OR 13 1 10 0.5
L - length (w) 2 2 2 length(w)
% - modulo 1 1 0 0.5
(nope nope yep! nope)
C (gcc) , 73 \$\cdots\$ 63 61 Bytes
Gespeichert ein 3 Bytes dank ceilingcat !!!
n;u;f(char*s){for(n=u=0;*s;++n)u+=*s&15+*s++/64*16;u*=u%n<1;}
Probieren Sie es online aus!
Gibt eine Zeichenfolge ein und gibt eine Wahrheit zurück, wenn es sich um ein Längen-Summen-Vielfaches oder eine False handelt.
J , 29 24 Bytes
#(|=0=])1#.48|64|96|3&u:
Probieren Sie es online aus!
-5 Bytes dank xash
Inspiriert von Neils Antwort - stimmen Sie ihn unbedingt ab.
3&u:wandelt den String in ASCII-Codes um96|modifiziert die Kleinbuchstaben in den Bereich 1-2664|modifiziert die Großbuchstaben in den Bereich 1-2648|modifiziert die Ziffern in den Bereich 0-91#.Summe aller umgerechneten Ziffern#(ganz links) Länge der Saite(|=0=])Zuerst prüfen wir, ob die Summe Null ist0=]- dies wird zurückgegeben,1wenn es ist und0ansonsten. Dann überprüfen wir , ob Summe mod die Länge|gleich , dass . Damit die gesamte Phrase true zurückgibt, muss die Summe sowohl gleichmäßig teilbar als auch ungleich Null sein.
Warum kannst du nicht einfach einen einzelnen 32 Mod verwenden, anstatt einen 96 gefolgt von einem 64 zu machen?
Mit 32 würden Sie auch die Werte 0-9 beeinflussen. Mit 96/64 korrigieren Sie die Buchstaben, ohne die Ziffern zu berühren, und da die Buchstaben alle 26 und darunter sind, bleiben die bereits festgelegten Buchstaben beim Fixieren der Ziffern unberührt.
Python 3 , 54 Bytes
lambda s:(sum(ord(c)%48for c in s.lower())or.5)%len(s)
Eine unbenannte Funktion, die eine Zeichenfolge akzeptiert, die Null (Falsey) zurückgibt, wenn die Zeichenfolge ein Längen-Summen-Vielfaches ist, oder eine Nicht-Null-Zahl (wahr), wenn nicht.
Probieren Sie es online aus! Oder sehen Sie sich die Testsuite an .
R , 63 62 57 56 Bytes
Bearbeiten: 1 Byte dank Jonah gespeichert
function(s)!sum(i<-utf8ToInt(s)%%96%%64%%48)%%nchar(s)&i
Probieren Sie es online aus!
Die Ausgabe ist eine Wahrheitsliste von einem oder mehreren WAHREN oder eine Falschliste von einem oder mehreren FALSCHEN.
Scala, 71 62 46 Bytes
- Feste Antwort dank @Mr Redstoner
- 9 Bytes dank @Dominic Van Essen gespart
- 16 Bytes gespeichert! dank des tipps , den @xash auf Jonahs Antwort gab , den Dominic Van Essen vorschlug.
s=>{val x=(0/:s)(_+_%96%64%48);x>0&x%s.size<1}
Probieren Sie es online aus
32 Bytes, wenn Null nicht falsch wäre
s=>(0/:s)(_+_%96%64%48)%s.size<1
Probieren Sie es online aus
Java 79 77 68 66 64 Bytes
s->{int u=0;for(int c:s)u+=c%96%64%48;return u>0&u%s.length<1;};
Probieren Sie es hier aus!
Meine allererste Antwort! Der "0" -Testfall hat mich durcheinander gebracht, ohne ihn hätte ich 51 haben können (ich wollte versuchen, die C-Antwort herauszufordern, von der ich die Umwandlung von Zeichen in Zahlen ausgeliehen habe). Jetzt so ziemlich ein Port der C-Antwort.
s->s.chars().map(c->c%96%64%48).sum()%s.length()<1;
Immer noch ziemlich stolz darauf, einige der aktuellen Antworten in Sprachen wie Python und JavaScript mit dem "ach so wortreichen" Java zu übertreffen.
Vielen Dank an @user für ein paar zusätzliche gespeicherte Bytes
@ceilingcat für ein paar mehr
@ dominic-van-essen für 2 weitere mit @ xashs Idee
Python 3.8 , 59 Bytes
lambda d:1>(x:=sum(int(c,36)-9*(c>'9')for c in d))%len(d)<x
Probieren Sie es online aus!
Holzkohle , 18 Bytes
≔ΣE↧θ﹪℅ι⁴⁸η∧η¬﹪ηLθ
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Die Ausgabe ist ein Holzkohle-Boolescher Wert, dh -für ein Vielfaches, nichts, wenn nicht. Erläuterung:
≔ΣE↧θ﹪℅ι⁴⁸η
Konvertieren Sie die Zeichenfolge in Kleinbuchstaben, nehmen Sie die Codepunkte aller Zeichen, reduzieren Sie sie auf Modulo 48 und nehmen Sie dann die Summe.
∧η¬﹪ηLθ
Überprüfen Sie, ob die Summe ein Vielfaches ungleich Null der Länge der Zeichenfolge ist.
Perl 5 + -plF, 32 Bytes
-7 Bytes dank @Nahuel Fouilleul !
$s+=ord(lc)%48for@F;$_&&=1>$s%@F
Probieren Sie es online aus!
Python 3 , 101 96 Bytes
def f(s):x=sum([i-[48,96][i>96]for i in map(ord,s.lower())]);return not(x%len(s))and x//len(s)>0
Probieren Sie es online aus!
Gelee , 23 Bytes
ØWiⱮ_³e€ØD¤%26Sµ;ọ³L¤$Ȧ
Probieren Sie es online aus!
1 Byte Golf gespielt und auch das Programm tatsächlich zum Laufen gebracht (das dritte Mal ist ein Zauber? Es war immer noch kaputt)
Erläuterung
ØWiⱮ_³e€ØD¤%26Sµ;ọ³L¤$Ȧ Main Link
Ɱ For each character in the input
i find its index in
ØW "ABC...XYZabc...xyz0123456789_"
_ and subtract from each element
³e€ØD¤ the corresponding value, which is
³ if the original character
e€ is a member of
ØD the digits (this is to fix the one-off offset of the digits)
(the above nilad gets a list of 0 and 1 for if each character is a digit, and since Jelly's subtraction `_` is vectorized, this works as subtracting the corresponding element)
%26 modulo 26
Sµ take the sum; begin a new link with this value
; $ append
ọ the number of times the sum is divisible by (just plain "divisible by?" has the arguments in the opposite order which would take 1 extra byte to flip)
³L¤ the length of the input
Ȧ any and all - are both values truthy; that is, is the sum divisible and non-zero?
Japt , 22 17 15 Bytes
Die Eingabe besteht aus einer Reihe von Zeichen.
Oder 13 Bytes , ohne Sonderfall 0.
xÈv c u48
©vNÎl
Versuch es
;x@ÒBbXu)ªX\n©vNÎl :Implicit input of character array U
x :Reduce by addition
@ :After passing each X through the following function
Ò : Negate the bitwise NOT of
; B : Uppercase alphabet
b : 0-based index of
Xu : Uppercase X
) : End indexing
ªX : Logical OR with X, which gets coerced to an integer
\n :Reassign to U
© :Logical AND with
v : Is divisible by
N : Array of all inputs
Î : First element (i.e., the original U)
l : Length
JavaScript (Node.js) , 54 53 Byte
Gibt 0 oder 1 zurück .
s=>Buffer(s).map(c=>t+=++k&&c%96%64%48,k=t=0)|t%k<!!t
Probieren Sie es online aus!
Python 2 & Python 3 - 69 Bytes
lambda a:0==sum(ord(s.upper())-[64,48][s.isdigit()]for s in a)%len(a)
Wenn man die Eingabe als Zeichenfolge für die Variable a annimmt, kann man bis zu 60 Bytes erreichen
0==sum(ord(s.upper())-[64,48][s.isdigit()]for s in a)%len(a)
JavaScript, 107 Bytes
a=>(b=a.toLowerCase().split('').reduce((c,d)=>c+(+(isNaN(d)?d.charCodeAt(0)-96:d)),0)/a.length,!(b?b%1:!b))
Probieren Sie es online aus!
Retina 0,8,2 , 63 Bytes
^
$.'$*1;
T`L`l
[j-z]
55$& [t-z] 55$&
T`_l`ddd
\d
$* ^(1+);\1+$
Probieren Sie es online aus! Link enthält Testfälle. Erläuterung:
^
$.'$*1;
Stellen Sie der Eingabe eine unäre Kopie von sich selbst voran.
T`L`l
Konvertieren Sie es in Kleinbuchstaben.
[j-z]
55$& [t-z] 55$&
T`_l`ddd
Konvertieren Sie die Buchstaben in Ziffern mit derselben digitalen Summe.
\d
$*
Nehmen Sie die digitale Summe.
^(1+);\1+$
Stellen Sie sicher, dass es sich um ein Vielfaches ungleich Null der Länge handelt.
MAWP , 78 Bytes
%|0/[!843WWP843WWWA/]~[!88WP88WWA/]~[!86WP86WWA/]_1A![1A~M~]%!~!~/P\WA{0:.}?1:
Versuch es!
Warten auf Antwort in 1 + ...
Verwendet die Modulmethode aus Jonahs J-Antwort.
MATL , 12 11 Bytes
k48\stGn\~*
Die Ausgabe erfolgt, 0wenn die Eingabe ein Längen-Summen-Vielfaches oder eine positive Zahl ist.
Probieren Sie es online aus! Oder überprüfen Sie alle Testfälle .
Wie es funktioniert
k % Implicit input. Convert to lowercase
48 % Push 48
\ % Modulus. Each character is first converted to its code-point
s % Sum. This gives "s"
t % Duplicate (*)
G % Push input again
n % Number of elements. This gives "n"
\ % Modulus
~ % Negate. This gives true if s mod n equals 0, or false otherwise (**)
* % Multiply (*) and (**)
% Implicit display. True and false are displayed as 1 and 0 respectively
Wolfram Language (Mathematica) , 54 Bytes
Tr[a=FromDigits/@#/.a_/;a>9:>a-9]~Mod~Tr[1^#]==0<Tr@a&
Probieren Sie es online aus! Reine Funktion. Nimmt eine Liste von Zeichen als Eingabe und gibt sie zurück Trueoder Falseals Ausgabe. Der Großteil der Arbeit wird von erledigt FromDigits, wodurch die Zeichen 0-9, AZ in die Zahlen 0-35 konvertiert werden.