Berechnen Sie n
Modulo 12
für eine vorzeichenlose 32-Bit-Ganzzahl.
Die Regeln:
- Muss für alle
n
zwischen 0 und 23 funktionieren . Andere Zahlen optional. - Muss nur eine der Operatoren verwenden
+-*
,~&^|
oder<<
,>>
wie sie üblicherweise auf 32 - Bit - uints definiert. - Kann eine beliebige Anzahl konstanter Einheiten verwenden.
- Darf keine Form von Zeigern, einschließlich Arrays, oder
if
Anweisungen, einschließlich Dingen, die zu if-Anweisungen wie ternären Operatoren oder Operatoren "größer als" kompiliert werden.
Die Wertung:
- Operatoren
+ -
und die bitweisen Operatoren~ & ^ | << >>
(NOT, AND, XOR, OR, Bitverschiebungen) ergeben eine Punktzahl von1
,*
ergeben eine Punktzahl von2
. - Die niedrigste Gesamtpunktzahl gewinnt.
math
number-theory
atomic-code-golf
nbubis
quelle
quelle
+-*
sind addieren, subtrahieren, multiplizieren;~&^|
sind bitweise NOT, AND, XOR, OR; und<< >>
sind Bitverschiebungen.for i in x:y:z, .dostuff
?n % 12
auf eine Multiplikation und eine Verschiebung wie beiAntworten:
4
(Sprache ist irrelevant)
Woo! Ich muss 4.
11-n
stellt sicher, dass alle höherwertigen Bits genau dann gesetzt werden, wenn n> = 12 ist.48&(11-n)
== wenn n> 11 dann 48 sonst 0(48&(11-n))>>2
== wenn n> 11 dann 12 sonst 0n-((48&(11-n))>>2)
ist die Antwortquelle
n - (((11 - n) & 0xC0000000) >> 28)
. Gut gemacht, ich glaube nicht, dass es in weniger als vier Jahren geht.4
Eine Lösung mit einer Nachschlagetabelle (sieht nach
i ^ (i % 12)
):4
Hier ist eine andere Lösung mit 4 Operationen:
Es wird angenommen, dass der Zähloperand von Bitverschiebungen implizit als mod 32 genommen wird, dh
x >> -1
derselbe ist wiex >> 31
.5
Ein anderer Ansatz unter Verwendung einer Nachschlagetabelle:
quelle
Bash - 1
z.B
quelle
stdin
undstdout
Ströme? Sicher, intern sind sie Zeiger, aber dann können wir Java genauso gut disqualifizieren, weil es dieInteger
Klasse intern für viele Dinge verwendet.C, Little-Endian - 2
Dies ist wahrscheinlich Betrug, aber ich denke, es genügt den Regeln ...
quelle
= 0
stattdessen verwenden& 0x0
, was als zusätzliche 2 Operationen gelten sollte. Aber +1 für die Kreativität :)PHP - Punktzahl 0
Ich frage mich, wie es möglich ist, dass niemand vor mir hierher gekommen ist !!!
quelle
C, Punktzahl 5
Funktioniert bis zu 23, darüber hinaus nicht garantiert.
((n+4)>>2)&4
gibt 4 für n> = 12 zurück. Addiere es zu n und du erhältst die richtige Antwort in den niedrigstwertigen 4 Bits, dann schneide die anderen Bits ab.quelle
Welche Sprache auch immer: 5
Ich werde nicht gewinnen, aber teilnehmen, weil es Spaß macht und vielleicht leichter zu verstehen ist als andere:
das ist äquivalent zu
Dies ist äquivalent, denn wenn Sie 20 zu 12 addieren, erhalten Sie 32, und das 5. Bit wird zu 1. Dies ist nur dann der Fall, wenn n> 1 ist, da 32 die kleinste Zahl ist, bei der das 5. Bit zu 1 wird.
Beachten Sie auch, dass es für einen höheren Bereich leicht erweiterbar ist, wie Sie es tun können
eine Reichweite bis 35 erreichen
quelle
Python 2.x - 4
Ist
=
ein Betreiber?In diesem Fall ist die Punktzahl 6.
Die Lösung von BTW @steveverrill kann auch direkt in Python verwendet werden.
Funktioniert für den Bereich 0 .. 23
So was ist los ? Mit 357913942 multiplizieren und durch 2 ^ 32 teilen (oder Verschiebung nach rechts 32)
quelle
C - 6
quelle
Cobra - 2 (oder 3)
Dies könnte die Regeln ein wenig biegen, aber ich habe gefragt und durfte dies verwenden.
Es funktioniert auch für eine beliebige Anzahl.
quelle
Kona - 5
Könnte ungültig sein, weil ich nicht sicher bin, ob der Floor Operator erlaubt ist, aber ich habe zwei
*
und ein Minus:Welches sollte für jede ganze Zahl funktionieren.
quelle