Ihr Ziel ist es, zu bestimmen, ob eine Zahl ohne Verwendung von Bedingungen durch 3 teilbar ist. Der Eingang ist eine vorzeichenlose 8-Bit-Zahl von 0 bis 255. Kreativität wird gefördert!
Du darfst NUR benutzen
Gleichheit / Ungleichheit (
==
,!=
,>
,<
,>=
,<=
)Arithmetic (
+
,-
,x
)Logische Operatoren (
!
nicht&&
und||
oder)Bitweise Operatoren (
~
nicht,&
und,|
oder,^
xor,<<
,>>
,>>>
arithmetische und logische linke und rechte Verschiebungen)Konstanten (es wäre besser, wenn Sie diese klein halten)
Variablenzuordnung
Ausgabe 0
wenn falsch, 1
wenn wahr.
Standard Atomic Code-Golf-Regeln gelten. Wenn Sie Fragen haben, hinterlassen Sie diese bitte in den Kommentaren. Beispielmethoden hier . Ein Token ist eines der oben genannten, ausgenommen Konstanten und Variablen.
Antworten:
C - 2 Token
Scheint bis zu 2 31 -1 zu arbeiten.
Danksagung
zalgo("nhahtdh")
für die multiplikative inverse Idee.quelle
<=
funktioniert, und erinnerte sich, dass 0xAAAAAAAB alsunsigned int
Typ angenommen wird, daher ist das Ergebnis der Multiplikation vorzeichenlos.Python,
32 TokenBrute-Force-Lösung, aber es funktioniert.
Vielen Dank an Howard für die Reduzierung um 1 Token.
quelle
0x9......>>x&1
.C -
54 (?) TokenFunktioniert für alle vorzeichenlosen 32-Bit-Nummern .
Dieser Code verwendet das multiplikative inverse Modulo 2 32 eines Divisors, um die Divisionsoperation in eine Multiplikationsoperation umzuwandeln.
Bearbeiten
Meine Lösung (2 Minuten später veröffentlicht) entspricht der Lösung von aditsu. Gutschrift an ihn für die Verwendung von
==
verbessert sich meine Lösung um 1 Token.Referenz
quelle
Bull
: PC - 15 (?) Token
Seit 4 ≡ 1 (mod 3) haben wir 4 n ≡ 1 (mod 3). Die Ziffernsummierungsregel beschränkt sich nicht nur auf die Summierung der Ziffern, sondern ermöglicht es uns auch, die Zahl willkürlich in Ziffernfolgen zu unterteilen und alle Ziffern unter Wahrung der Kongruenz zu summieren.
Ein Beispiel in Basis 10, Divisor = 9:
1234 ≡ 12 + 34 ≡ 1 + 2 + 3 + 4 ≡ 123 + 4 ≡ 1 (Mod 9)
Alle Anweisungen im Programm nutzen diese Eigenschaft. Es kann tatsächlich zu einer Schleife vereinfacht werden, die die Anweisung
n = (n & 0x3) + (n >> 2);
bis ausführtn < 4
, da die Anweisung einfach die Zahl in der Basis 4 an der niedrigstwertigen Stelle aufbricht und die 2 Teile aufaddiert.quelle
n = (n & 0x3) + (n >> 2);
das Ergebnis auf 3 Bit reduziert und die Wiederholung bewirkt, dass nur 2 Bit übrigPython (2 Token?)
Oder
Oder
quelle
JavaScript - 3 Token
Dies missbraucht die Tatsache, dass die Verwendung von bitweisen Operatoren für eine Zahl diese in JavaScript auf eine Ganzzahl abschneidet.
quelle
=
,*
,|
,==
C - 4 Token
Funktioniert bis zu 383.
Vorherige Version (größere Konstanten):
Funktioniert bis 1535
quelle
Bash - ???
Ich bin mir nicht sicher, wie ich das bewerten soll.
z.B
quelle
Befunge 93 - 5 Token
Behoben - Division entfernt.
Ruft die Eingabe ab, subtrahiert 3 so lange, bis sie kleiner als 0 ist, richtet den Zeiger nach oben ('|') und addiert 3. Wenn der Wert 0 ist, bewegt sich der Zeiger nach rechts (" 1. @" gibt '1' aus), sonst bewegt er sich nach links ("@ " gibt "0" aus). '@' beendet das Programm.
quelle
Batch - 7 Token
Ich glaube
Gibt zurück,
1
ob die angegebene Zahl (als stdin) durch drei teilbar ist.quelle
Rubin, 6 (?) Marken
Ich bin mir wirklich nicht sicher, wie ich Token zählen soll. OP, können Sie mich punkten?
Ich denke , es ist 6 ...
1
,0
,0
,*
,255
,x
Beachten Sie, dass dies
*
keine ganzzahlige Multiplikation ist.quelle
Python 0
Ich gab eariler bekannt, aber ich benutzte conditionals. Hier geht es darum, keine Bedingungen und keine Token zu verwenden, nur Schlüsselwörter
Wendet den Trick an, dass ein Vielfaches von 3 Ziffern hat, die zu 3 addieren
Bearbeiten: Unnötiges Lambda entfernt
Bearbeiten: Golf weiter (117 Zeichen) noch keine Token
Gekillter direkter Zugriff für Pythons raffiniertes Getitem Länger bei 132 Zeichen
http://www.codeskulptor.org/#user34_uUl7SwOBJb_0.py
quelle
[]
ist jedoch nicht zulässig.only
.Python - 25 Token
Um die Dinge in Gang zu bringen, habe ich eine langwierige Lösung, die eine der Antworten aus dem Link in meinem ersten Beitrag enthält.
n
eingegeben wird.or
ist äquivalent zu||
.quelle
JavaScript - 3 Token
Testen Sie es auf der Konsole Ihres Browsers:
quelle
JavaScript
nicht sicher über das Token #
function mod3 (i) { return {'undefined':'100','0':'0'}[[0][i]][i.toString (3).split('').pop ()]}
oder wenn der Ausgang für 0 1 sein darf;
function mod3 (i) { return '100'[i.toString (3).split('').pop ()]}
quelle
Tcl , 83 Bytes
Probieren Sie es online!
quelle
proc T n {set n [expr [join [split [expr [join [split $n ""] +]] ""] +]];expr {$n in {0 3 6 9}}}
Online !proc T n {expr {[expr [join [split [expr [join [split $n ""] +]] ""] +]] in {0 3 6 9}}}
Probieren Sie es online!