Seit einiger Zeit stoße ich beim Zählen auf meinen Fingern auf ein Problem, nämlich dass ich nur bis zehn zählen kann. Meine Lösung für dieses Problem bestand darin, binär auf meinen Fingern zu zählen, meinen Daumen für einen, meinen Zeigefinger für zwei, sowohl Daumen als auch Zeigefinger für drei, usw. Allerdings stoßen wir auf ein kleines Problem, wenn wir dazu kommen die Nummer vier. Insbesondere müssen wir unseren Mittelfinger hochhalten, was zu einer eher unglücklichen Geste führt, die in der Gesellschaft normalerweise nicht akzeptiert wird. Diese Art von Nummer ist eine unhöfliche Nummer . Wir kommen mit 36 zur nächsten unhöflichen Nummer, wenn wir den Daumen auf unserer zweiten Hand und den Mittelfinger unserer ersten Hand heben. Die Definition einer unhöflichen Zahl ist jede Zahl, die unter diesem Zählsystem dazu führt, dass wir nur setzender Mittelfinger einer Hand. Sobald wir 1023 erreicht haben (die maximale Anzahl, die bei einer Person mit zwei Händen zu je fünf Fingern erreicht werden kann), nehmen wir an, dass wir mit einer dritten Hand fortfahren und bei Bedarf weitere Hände hinzufügen.
Deine Aufgabe:
Schreiben Sie ein Programm oder eine Funktion, die eine Eingabe empfängt und einen Wahrheits- / Falschwert ausgibt, basierend darauf, ob die Eingabe eine unhöfliche Zahl ist.
Eingang:
Eine ganze Zahl zwischen 0 und 10 9 (einschließlich).
Ausgabe:
Ein wahrer / falscher Wert, der angibt, ob die Eingabe eine unhöfliche Zahl ist.
Testfälle:
Input: Output:
0 ---> falsy
3 ---> falsy
4 ---> truthy
25 ---> falsy
36 ---> truthy
127 ---> falsy
131 ---> truthy
Wertung:
Das ist Code-Golf , also gewinnt die niedrigste Punktzahl in Bytes.
assume we continue with a third hand
Wenn es darum geht, unhöflich zu sein, lässt Teamwork den Traum wahr werden.Antworten:
APL (dzaima / APL) , 5 Bytes
Probieren Sie es online!
4∊
ist 4 ein Mitglied von32⊤
zur Basis-32?quelle
Regex (ECMAScript), 37 Bytes
Die Eingabe ist als Länge einer Zeichenfolge von
x
s unär.^((?=(x+)(\2{31}x*))\3)*(x{32})*x{4}$
Probieren Sie es online!
quelle
JavaScript (SpiderMonkey) , 23 Byte
Probieren Sie es online!
Dies ist eine triviale Lösung, Sie möchten nur zur Basis 32 konvertieren und prüfen, ob eine 4 darin enthalten ist.
JavaScript (SpiderMonkey) , 26 Byte
Probieren Sie es online!
Interessanterweise
/4/.test(...)
kostet das ein Byte mehr als....match(4)
.quelle
Japt , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ruby,
3619 BytesProbieren Sie es online!
17 Bytes mit @tshs Methode gespeichert .
quelle
100010011111
00100
.->n{n.to_s(32)=~/4/}
?10001
, die zweite00111
und die dritte11
? Keiner von ihnen hat nur den Mittelfinger nach obenAPL + WIN, 10 Bytes
Fordert zur Eingabe einer Ganzzahl auf
Zur Darstellung von 10 ^ 9-Konvertierungen von 6 Elementen der Basis-32-Darstellung in einen Vektor sind sechs Hände erforderlich, und es wird geprüft, ob in einem Element eine 4 vorhanden ist.
quelle
Perl 6 , 16 Bytes
Probieren Sie es online!
Überprüft, ob
4
in der Basis 32 eine Darstellung der Nummer vorhanden ist. Gibt entweder Nil als false oder eine Übereinstimmung mit a zurück4
.Sie können dies durch die Tatsache beweisen, dass so dass jede Ziffer der Zustand jeder Hand ist.25= 32
quelle
Python 2 ,
3432 BytesProbieren Sie es online!
2 bytes dank tsh
quelle
x86-Maschinencode, 17 Byte
Das obige Bytes definiert eine Funktion, die die Zahl als Eingabe in den Takes
EAX
Registern und gibt das Ergebnis als einen Booleschen Wert in demEAX
Register (EAX
== 0 , wenn der Eingang nicht eine grobe Zahl;EAX
! = 0 , wenn der Eingang ist eine grobe Zahl ).In lesbaren Assembler-Mnemoniken:
Probieren Sie es online!
quelle
idiv
. Ich sehe keine inkrementellen Verbesserungen. Aber siehe meine Antwort : 14 Bytes für eine Schiebeschleife, die MOV / AND / SUB / JZ verwendet, um die niedrigen 5 Bits auf Grobheit zu prüfen.Julia 1.0 , 25 Bytes
Probieren Sie es online!
Julia 1.0 , 26 Bytes
Alternativ ist dies 1 Zeichen kürzer, aber 1 Byte länger. Schade, dass
∈
Unicode 3 Byte benötigt.Probieren Sie es online!
quelle
n->n%32...
für Ihre erste Antwort 2 Bytes kürzer verwenden?05AB1E , 5 Bytes
Port von @ Adáms APL (dzaima / APL) Antwort .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
₆
ist 36, nicht 32.Katholikon , 4 Bytes
Nimmt eine Zahl als Basis-256-Zeichenfolge.
Probieren Sie es online!
Testsuite
quelle
<<
und einschließen>>
und es können Zahlen größer als 255 eingegeben werden , wie in der Testsuite gezeigt.C # (Visual C # Interactive Compiler) , 31 Byte
Ausgabe durch Auslösen einer Ausnahme. Die Art und Weise, wie Sie eine Zahl von einer Dezimalzahl in eine andere Basis umwandeln, besteht darin, die Dezimalzahl wiederholt durch diese Basis zu teilen und den Rest als Ziffer zu nehmen. Das ist, was wir tun, und wir prüfen, ob eine der Ziffern einen Wert von 4 in Basis 32 hat;
Probieren Sie es online!
quelle
n>31
->n>0
J , 12 Bytes
Probieren Sie es online!
quelle
R ,
5048 BytesProbieren Sie es online!
Verwendet jetzt einen ordentlichen matrixbasierten Ansatz (mit freundlicher Genehmigung von @Giueseppe). Es generiert eine 5x7-Bitmatrix, konvertiert diese in eine Reihe von Basis-32-Ganzzahlen und prüft, ob 4s vorliegen.
quelle
intToBits
aber dann können wir damit arbeiten,ints
anstattraw
ein Byte zu speichern - siehe zum Beispiel dies mitintToBits
4
beträgt die Portierung einer der vielen Antworten, die auf das Vorhandensein einer Ziffer in einer Basis-32-Zahl prüfen, 29 Byte .Python 3 , 43 Bytes
Überprüft jeden 5-Bit-Block, um festzustellen, ob er unhöflich ist (gleich 4).
Probieren Sie es online!
quelle
C (gcc) , 34 Bytes
Probieren Sie es online!
quelle
Holzkohle , 6 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Gibt
-
s entsprechend der Unhöflichkeit der Nummer aus. Erläuterung:Ich verwende die String-Basisumwandlung, um zu vermeiden, dass die numerischen Literale für
32
und getrennt werden müssen4
.quelle
Ordentlich , 18 Bytes
Probieren Sie es online! Prüft, ob
4
ein Element vonbase(32,x)
(Basisumwandlung) ist.quelle
Haskell , 31 Bytes
Probieren Sie es online!
quelle
Cubix , 26 Bytes
Probieren Sie es online!
Wickelt sich wie folgt auf einen Würfel mit Kantenlänge 3
Schau es dir an
Eine ziemlich einfache Implementierung ohne alle Weiterleitungen:
IS
startet das Programm durch Drücken der Eingabe und 32 auf den Stapel%4-!
Ruft den Rest ab und überprüft durch Subtraktion, ob es 4 ist1O@
Ausgabe 1 wenn es 4 war und halt;;,
Bereinigen Sie den Stapel und führen Sie eine Ganzzahlenteilung durchp;?
Bereinigen Sie den Boden des Stapels und überprüfen Sie das Div-Ergebnis auf 0O@
Wenn Div Ergebnis Null Ausgabe und Halts
Tauschen Sie die Oberseite des Stapels aus und beginnen Sie mit Schritt 2 obenquelle
MATL , 8 Bytes
Probieren Sie es online!
quelle
G
(nicht sicher, warum ich es überhaupt aufgenommen habe), aber das ist nur ein Byte (danke, dass du das entdeckt hast !). Ändern32YA52
auf32_YA4
ist die gleiche Anzahl von Bytes richtig?'32_YA4'n'32YA52'n-
Batch,
7745 BytesBasierend auf diesen kleinen Drehereien . Erläuterung: Aufgrund des begrenzten Bereichs (30 Bit) der Eingabe, die unterstützt werden muss, müssen nur 6 Hände überprüft werden. Die magische Zahl
m
entspricht der111111
Basis 32, sodass die erste Operation die unhöflichen Bits in der eingegebenen Zahl umschaltet. Es bleibt dann zu finden, welche der 6 Hände jetzt Null ist.quelle
x86-Maschinencode, 14 Byte
(Derselbe Maschinencode funktioniert in 16-Bit, 32-Bit und 64-Bit. Im 16-Bit-Modus werden AX und DI anstelle von EAX und EDI im 32- und 64-Bit-Modus verwendet.)
Algorithmus: Überprüfen Sie die niedrigen 5 Bits mit
x & 31 == 4
, und verschieben Sie sie dann nach rechts um 5 Bits. Wiederholen Sie den Vorgang, wenn das Ergebnis der Verschiebung nicht Null ist.Aufrufbar von C
char isrude(unsigned n);
gemäß der x86-64-System-V-Aufrufkonvention. 0 ist wahr, nicht 0 ist falsch (dies ist asm, nicht C 1 ).Dies nutzt die
op al, imm8
Kurzkodierung für AND und SUB. Ich hätteXOR al,4
0 auf Gleichheit erzeugen können, aber SUB ist schneller, weil es mit JZ in einem einzigen Unter- und Zweig-UOP auf der Sandybridge-Familie makrofusionieren kann.Tolles Faktum: Die Verwendung des Flaggenergebnisses einer Schicht um mehr als 1 ist in der P6-Familie langsam (Front-End-Verzögerungen bis die Schicht ausfällt), aber das ist in Ordnung.
Fußnote 1: Dies ist eine Assemblersprachenfunktion, und x86 asm verfügt über beides,
jz
undjnz
daher kann ich gemäß Meta eine der beiden Möglichkeiten wählen. Ich habe nicht vor, dass dies mit C wahrheitsgemäß / falsch übereinstimmt.Es war praktisch, AL anstelle von EFLAGS zurückzugeben, damit wir die Funktion einem C-Compiler ohne Wrapper beschreiben können, aber meine Wahl von truthy / falsy ist nicht durch die Verwendung eines C-Aufrufers zum Testen eingeschränkt.
quelle
ES6,
313026 BytesSie können gerne Vorschläge machen, wie Sie dies gegebenenfalls weiter reduzieren können.
quelle
test
, können Sie tatsächlich zwei Bytes speichern, indem Sie gegen4
eine Zahl abgleichen undmatch
diese in einen String und dann einen RegExp für Sie konvertieren lassen .Retina 0.8.2 , 31 Bytes
Probieren Sie es online! Link enthält Testfälle. Gibt Null aus, sofern die Nummer nicht unhöflich ist. Wandelt die Eingabe in eine unäre und dann in eine unärkodierte Basis 32 um und zählt die Anzahl der
4
s im Ergebnis.quelle
Java 8,
4033 BytesPort von @ Adáms APL (dzaima / APL) Antwort .
Probieren Sie es online aus.
Erläuterung:
quelle
> <> 28 Bytes
Ausgabe 4 für unhöfliche Zahlen löst eine Ausnahme für nicht unhöfliche Zahlen aus.
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) ,
37 Bytes36 Bytes29 Bytes-2 Bytes von Jonathan Frech
Probieren Sie es online!
31-Byte-Lösung:
Probieren Sie es online!
quelle
...#...&
wird in Mathematica häufig verwendet).[n]
am Ende nicht, sondern nur das&
. Da die Beiträge einen Bearbeitungsverlauf haben, ist es in Ordnung, vorherige Einträge wegzulassen, und die Konvention für alte Partituren lautet<s>40</s> <s>36</s>
Java 8,
282221 BytesInspiriert von der Antwort von @ kevin-cruijssen . Funktioniert nur für 2 Hände.
Probieren Sie es online!
Erläuterung:
quelle