Einführung:
Eine niederländische BSN (BurgerServiceNummer) ist gültig, wenn sie die folgenden Regeln erfüllt:
- Es enthält nur Ziffern.
- Die Länge sollte entweder 8 oder 9 betragen.
- Wenn die Ziffern als
A
durch indiziert sindI
, sollte das Ergebnis der folgenden Summe9xA + 8xB + 7xC + 6xD + 5xE + 4xF + 3xG + 2xH + -1xI
(HINWEIS: -1 statt 1!) Durch 11 teilbar und nicht 0 sein.
Herausforderung:
Eingabe: Ein String oder ein Char-Array, das die BSN darstellt.
Ausgabe: Ein wahres oder falsches Ergebnis, unabhängig davon, ob die Eingabe eine gültige BSN ist.
Herausforderungsregeln:
- Das Eingabeformat sollte ein String oder ein Char-Array sein. Sie dürfen kein Int-Array von Ziffern oder eine (möglicherweise oktale) Zahl verwenden. (Sie können es jedoch selbst in ein Int-Array von Ziffern konvertieren, jedoch nicht direkt als Argument.)
- Trotz der oben genannten Einschränkung der Eingabe können Sie davon ausgehen, dass alle Testfälle eine oder mehrere Ziffern enthalten (
[0-9]+
). - In Bezug auf die BSN mit der Länge 8 anstelle von 9 gibt die niederländische Wikipedia Folgendes an: " Für den Elftest und für andere praktische Zwecke wird eine führende Null hinzugefügt, um die Nummer der Länge 9 zu bilden. " ( Quelle )
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
// Truthy test cases:
111222333
123456782
232262536
010464554
10464554
44016773
// Falsey test cases:
000000000
192837465
247594057
88888888
73
3112223342
000000012
code-golf
string
arithmetic
decision-problem
Kevin Cruijssen
quelle
quelle
A
die angegebene Formel weggelassen wird?A
der Formel0
weggelassen (oder es wird im Grunde genommen ein Anführungszeichen hinzugefügt , um es auf Länge 9 zu bringen, was dasselbe Ergebnis ergibt wie das WeglassenA
).Antworten:
05AB1E ,
2321 BytesProbieren Sie es online! oder als Testsuite
Erläuterung
quelle
DgL
zuā
und0Ê
zu wechselnĀ
. Probieren Sie es online aus.JavaScript (ES6) 57
Eingabe als Array von Zeichen.
reduceRight
rettet den Tag!Prüfung
quelle
reduceRight
Antwort zu sehen !map()
, nur um zu erkennen, dass Ihre Antwort tatsächlich 57 Bytes lang ist :-)R
8667 BytesEdit: Vielen Dank an Jarko Dubbeldam, der das Dot-Produkt vorgeschlagen hat!
Liest die Eingabe von stdin und speichert sie als Array / Vektor von Zeichen. Anschließend in numerisch konvertieren, mit dem Vektor multiplizieren
9...2,-1
und alle Bedingungen prüfen.quelle
x
als Vektor teilen .if(l<9)x=c(0,x);s=sum(as.double(x)*c(9:2,-1))
kann in verwandelt werdens=sum(as.double(x)*c(l:2,-1))
. Auch ist die Summe des paarweisen Produkts zweier Vektoren die gleiche wie ihre Punktmultiplikation%*%
.JavaScript (ES6),
61605958 ByteNimmt ein Array von Zeichen als Eingabe. Rückgabe
false
/true
.Testfälle
Code-Snippet anzeigen
quelle
C
1121019698104 BytesVielen Dank an @MartinEnder für das Speichern von
5 bis3 BytesbeimReparierenmeines Codes!Gibt 0 zurück, wenn ungültig, 1, wenn gültig. Probieren Sie es online!
quelle
61
, obwohl es nicht die richtige Länge hat.R
957993 BytesUnbenannte Funktion, die eine Zeichenfolge als Argument nimmt. Zuerst habe ich die Anforderung, einen String anstelle einer Zahl als Eingabe zu haben, überlesen, aber das ist gut so, weil es bei der Konvertierung einige Bytes einspart.
Ich bin mir nicht sicher, wie ich das Array von Zeichen interpretieren soll, aber wenn das bedeutet, dass Sie einen Vektor mit Zeichenfolgen
"1" "2" "3" "4" etc
als Eingabe verwenden können, wird es sogar ein bisschen kürzer:Teilt x in einen numerischen Vektor, fügt eine 0 hinzu, wenn die Länge 8 ist, und berechnet dann das Punktprodukt von Vektor y und
c(9,8,7,6,5,4,3,2,-1)
. Prüft, ob das Ergebnis sowohl ungleich Null als auch durch 11 teilbar ist.Dank der Logik von @Enigma wurden 16 Bytes gespart und implizit die 0 bei der Erstellung des Vektors angehängt
c(length(x):2,-1)
.Ich habe vergessen, einen Check für die Länge 8/9 hinzuzufügen, also +14 Bytes :(
quelle
Perl, 58 Bytes (52 + 6)
Laufen Sie mit
Eingabe übergeben durch
STDIN
:Verwendung
Ausgaben
1
für als Wahrheitswert0
oder nichts für falsche Werte.quelle
$r+=$_*(-1,2..9)[$i++]for reverse@F
. Auch-F -pe
(und die Eingabe, die zum Beispiel ohne die letzte Zeile geliefert wirdecho -n
) ist ausreichend (es sei denn, Ihr Perl ist zu alt. In diesem Fall benötigen Sie-a
(aber auf neueren Perls impliziert dies-F
). Schließlich war Ihr Code 70 Byte lang , nicht 52;)C ++ 14,
107106 Bytes-1 Byte für
int
stattauto
für Schleife.Als unbenanntes Lambda, das über den Referenzparameter zurückkehrt. Benötigt Eingabe, um
std::string
oder ein Container mit Zeichen, wievector<char>
.Ungolfed und Nutzung:
quelle
Befunge, 72 Bytes
Probieren Sie es online!
Erläuterung
quelle
MATL, 36 Bytes
Nicht das längste MATL-Programm, das ich je geschrieben habe , aber ich mag es, wie
if
/else
Anweisungen in Golfsprachen sehr schnell sehr lang werden. Ich bin der Meinung, dass diese Lösung in MATL möglicherweise nicht optimal ist, aber ich kann sie noch nicht weiter optimieren. Ich denke darüber nach, irgendwo die doppelte 0 zu verwenden und vielleichtt
überall die zu reduzieren .Probieren Sie es online! Erläuterung:
quelle
!U
statt48-
[a2:9]*
führt zu einer nicht elementweisen Multiplikation, so dass ein anderer!
benötigt würde, der die anfängliche Verstärkung ausgleichen würde.MATL , 26 Bytes
Das Ergebnis ist ein nicht leerer Spaltenvektor, der wahr ist, wenn alle seine Einträge ungleich Null sind .
Probieren Sie es online!
Oder überprüfen Sie alle Testfälle mit jedem Ergebnis in einer anderen Zeile.
Erläuterung
Dies testet die drei Bedingungen in der folgenden Reihenfolge:
Betrachten Sie die Eingabe
'8925'
für die Erklärung.;
ist das Zeilentrennzeichen für Matrizen.quelle
?
wäre wahrscheinlich effizienter, aber ich konnte nicht herausfinden, wie man die Länge 8 oder 9 verkürzt. Ihr seidGn8-tg=
sehr schlau.!
?G
ein Spaltenvektor verschoben wird und ich ihn transponieren muss, um die Wiederholung mitg*
Haskell,
116112102 Bytesg
zählt die Summe, die im elf-Proef von verwendet wirdh
, währendf
auch die korrekte Länge überprüft wird und das elf-Proef nicht 0 ist. Insbesondere die Überprüfungen vonf
nehmen eine Menge Bytes in Anspruch.BEARBEITEN: Dank Lynn und
div
Abrunden 10 Bytes gespart .quelle
f x=div(length x)2==4&&g x>0&&h x
?Jelly , 21 Bytes
TryItOnline! oder führen Sie alle Testfälle aus
Rückgabewerte für Wahrheiten sind ungleich Null (und tatsächlich das Vielfache von 11).
Wie?
quelle
Python 2, 102 Bytes
quelle
Python 2, 96 bytes
Takes a string as input. The function adds a
'0'
to the front of the string whether it needs it or not, and uses Python's negative indices to add elements, starting from the end of the string and working back-to-front.The
-1xI
is handled separately, using a second call toint()
. I couldn't figure out how to avoid this without costing more bytes than I saved.def g(s):u=7<len(s)<10and sum(x*int(('0'+s)[-x])for x in range(10))-2*int(s[-1]);print(u%11<1)*u
would work just as well, since it would add1
timess[-1]
but then subtract it twice, and it would also add0
times (something) which of course wouldn't affect the sum.quelle
Brain-Flak , 345 Bytes
Beinhaltet +3 für
-a
Die Wahrheit ist 1, Falsy hat eine 0 oben auf dem Stapel.
Probieren Sie es online!
Ich bin mir ziemlich sicher, dass es einen kürzeren Weg gibt, die Multiplikation in einer Schleife durchzuführen, aber ich habe ihn noch nicht gefunden.
quelle
PowerShell v2 +, 96 Byte
OK, ich gebe zu, das sieht nach einem völligen Durcheinander aus. Und das ist es auch. Aber ertrage es mit mir und wir werden es schaffen.
Wir nehmen Eingaben
$n
(alschar
-array) und setzen sie$i
auf8
minus einen Booleschen Wert, um festzustellen, ob 8 Elemente enthalten sind$n
. Das heißt, wenn es 8 Elemente gibt, dann$i
wäre7
.Der nächste Abschnitt kombiniert die Berechnung mit unserer Ausgabe. Arbeiten von innen, durchlaufen wir
$n
mit$n|%{...}
. Bei jeder Iteration verwenden wir ein Pseudoternäres, um eines von zwei Ergebnissen zu erhalten - entweder-"$_"
oder(($i+1)*+"$_")
. Der Index basiert darauf, ob dies der Fall$i
ist0
oder nicht (dh wir haben den-1xI
Fall aus der Herausforderungsgleichung getroffen), der für die nächste Runde nachher dekrementiert wird. Diese sind alle in Parens versammelt und-join
zusammen mit+
. Zum Beispiel mit Eingaben111222333
zu diesem Zeitpunkt hätten wir9+8+7+12+10+8+9+6+-3
. Das wird zuiex
(kurz fürInvoke-Expression
und ähnlich zueval
) geleitet, bevor es in gespeichert wird$b
. Dann nehmen wir das%11
und führen ein Boolesches Nicht durch!(...)
auf das (dh, wenn es durch 11 teilbar ist, ist dieser Teil$true
). Dies ist gekoppelt mit,-and$b
um sicherzustellen, dass der$b
Wert ungleich Null ist. Dieses boolesche Ergebnis verbleibt in der Pipeline und die Ausgabe ist implizit.Beispiele
quelle
PHP
139128 BytesDie CLI konnte nicht dazu gebracht werden, nur das Wahre oder das Falsche wiederzugeben. Musste es so machen. Irgendwelche Ideen?
128 Bytes: "true" und "false" auf 1 und 0 gesetzt.
quelle
C #,
120115 BytesDies durchläuft die
char[]
als Eingabe empfangenen und gibt true oder false zurück:Geige: https://dotnetfiddle.net/3Kaxrt
Ich bin sicher, ich kann ein paar Bytes herauskratzen, besonders in den chaotischen
return
. Irgendwelche Ideen willkommen!Bearbeiten: 5 Bytes dank Kevin gespeichert. Ich hatte keine Ahnung, was ich
&
statt dessen gebrauchen könnte&&
!quelle
r>0&&r%11==0&&l<10&&l>7
kann zur>0&r%11<1&l<10&l>7
(&&
zu&
undr%11==0
zur%11<1
) golfen werden . Und-'0'
kann zu Golf gespielt werden-48
.PHP,
868584838279 BytesHinweis: Verwendet PHP 7.1 für negative String-Indizes.
Laufen Sie wie folgt:
Version für PHP <7.1 (+10 Bytes)
Erläuterung
Optimierungen
"0"
, ein Byte gespeichert10000000
ungültig ist, keine Notwendigkeit , mit zu Vergleichengreater than or equals
,greater than
genügt, um ein Byte Speicher-R
, um$argn
verfügbar zu machenquelle
Java 8,
11598 BytesIch bin überrascht, dass noch niemand eine Java-Antwort gepostet hat. Hier ist eine.
Erläuterung:
Probieren Sie es hier aus.
quelle
Clojure, 114 Bytes
Nun, das ist etwas,
-
das den Rest der Argumente vom ersten abzieht, um den speziellen Fall des Gewichts zu behandeln-1
. Diese Funktion gibtnil
für Eingaben mit ungültiger Länge zurück, aber fürif
Klauseln funktionieren sie genauso wiefalse
.(#{8 9}(count v))
Gibt zurück,nil
wenn length ofv
nicht 8 oder 9 ist.Testfälle:
quelle
Perl 5 , 63 + 2 (
-F
) = 65 BytesProbieren Sie es online!
quelle
Stax , 23 Bytes
Online ausführen und debuggen!
Erläuterung
Verwendet die entpackte Version, um zu erklären.
quelle