Lubię grać w golfa dc
, ale czasami jestem sfrustrowany, ponieważ dc
nie mam operacji bitowych.
Wyzwanie
Zapewnić cztery nazwach funkcji, które implementują odpowiednik operacji c bitowe &
, |
, ~
oraz ^
(bitowe AND, OR, NOT i XOR). Każda funkcja przyjmuje dwa operandy ( ~
zajmuje tylko jeden), które są co najmniej 32-bitowymi liczbami całkowitymi bez znaku. Każda funkcja zwróci liczbę całkowitą bez znaku o tej samej szerokości bitów co argumenty.
Ograniczenie
Możesz używać tylko operacji obsługiwanych przez dc
. To są:
+
-
*
/
Dodawanie, odejmowanie, mnożenie i dzielenie arytmetyczne~
modulo (lub divmod, jeśli Twój język to obsługuje)^
potęgowanie|
modułowe potęgowaniev
pierwiastek kwadratowy>
>=
==
!=
<=
<
standardowe operatory równości / nierówności>>
<<
operatorzy zmiany bitów.dc
nie ma ich, ale ponieważ są one trywialnie realizowane w kategoriach dzielenia / mnożenia przez potęgi 2, pozwolę na to.
Struktury kontrolne mogą dc
być niezgrabnie budowane przy użyciu (rekurencyjnych) makr i (nie) operacji równości. Możesz używać dowolnych wbudowanych struktur kontrolnych, które posiada Twój język.
Możesz także użyć operatorów logicznych &&
||
!
, nawet jeśli nie są one bezpośrednio dostępne w dc
.
Ci nie muszą stosować operatory bitowe &
, |
, ~
i ^
ani żadnych funkcji, które implementują je trywialnie.
Ponadto nie wolno używać wbudowanych operatorów lub funkcji konwersji ciągów bazowych.
Zastanów się też nad udostępnieniem programu testowego lub fragmentu kompilatora online (nieuwzględnionego w wynikach golfa), aby pomóc w weryfikacji odpowiedzi.