Twoim zadaniem jest utworzenie jednego programu typu „pieprzenie mózgu” dla każdego z następujących operatorów binarnych. Każdy program powinien pobrać jedną lub dwie liczby 8-bitowe (A i B) z danych wejściowych i obliczyć określoną operację:
A XOR B
A AND B
A OR B
A Shifted Left by 1 (circular shift)
NOT A
Nie musisz wdrażać wszystkich 5. Punktacja jest obliczana przez:
#totalCharacters + {4000 * #problemsNotCompleted}
Tak więc prawidłowe wyniki wynoszą od zera (najlepszy) do 20 000 (nic nie ukończone).
Nie dbam o to, gdzie przechowujesz wynik, ani o to, czy zachowujesz dane wejściowe. Załóżmy 8-bitowe komórki i tyle pustych komórek, ile potrzebujesz tylko w prawo.
Możesz założyć, że liczby znajdują się już w dowolnej lokalizacji pamięci, która najbardziej Ci odpowiada, więc nie musisz się martwić operacjami IO.
code-golf
binary
brainfuck
code-golf
code-golf
ascii-art
random
code-golf
code-golf
code-challenge
sorting
code-golf
code-challenge
java
code-golf
statistics
code-golf
code-challenge
fastest-code
code-golf
math
code-golf
math
kolmogorov-complexity
code-golf
code-golf
array-manipulation
combinatorics
code-golf
kolmogorov-complexity
popularity-contest
underhanded
code-golf
math
floating-point
code-golf
interpreter
code-golf
music
code-golf
code-golf
cryptography
code-challenge
scrabble
code-golf
code-challenge
popularity-contest
quine
code-golf
quine
cryptography
code-golf
kolmogorov-complexity
code-golf
printable-ascii
code-golf
chess
code-golf
math
number-theory
code-challenge
c
code-golf
random
popularity-contest
hello-world
code-shuffleboard
code-golf
compression
grammars
code-golf
tips
code-golf
sequence
code-golf
string
code-challenge
sorting
permutations
code-golf
string
code-challenge
optimization
code-golf
interpreter
code-challenge
string
code-golf
math
number
fibonacci
string
compression
c#
code-golf
chemistry
popularity-contest
math
c
c++
java
code-golf
math
function
code-golf
complex-numbers
code-golf
geometry
captncraig
źródło
źródło
Odpowiedzi:
Wynik: 275
Lepiej jest rozszerzyć je za pomocą licznika binarnego. Mniej intuicyjne części dotyczą możliwości, że A lub B wynosi 0. Nie znalazłem opłacalnego sposobu na zastosowanie nieniszczącej kontroli przepływu w rzeczywistej manipulacji bitami pierwszych trzech. Nawiasem mówiąc, wszystkie powinny działać dobrze z 16-bitowymi komórkami i powoli z 32-bitowymi.
XOR, 86
Zakłada, że A i B znajdują się w komórkach 1 i 2, przechowuje A XOR B w komórce 2, wskaźnik zaczyna się w komórce 0 i kończy w komórce 5.
ORAZ 78
Załóżmy, że A i B znajdują się w komórkach 1 i 2, przechowują A OR B w komórce 4, wskaźnik zaczyna się w komórce 0 i kończy w komórce 5.
LUB, 86
Załóżmy, że A i B znajdują się w komórkach 1 i 2, przechowują A OR B w komórce 2, wskaźnik zaczyna się w komórce 0 i kończy w komórce 5.
ROL, 18
Zakłada, że A znajduje się w komórce 0, przechowuje A ROL 1 w komórce 1, wskaźnik zaczyna się i kończy w komórce 0.
NIE 7
Zakłada, że A znajduje się w komórce 0, przechowuje NIE A w komórce 1, wskaźnik zaczyna się i kończy w komórce 0.
źródło
Wynik: 686
Wszystkie fragmenty zakładają, że liczby są już załadowane do komórek 0 i 1 oraz że wskaźnik wskazuje na komórkę 0. Mogę dodać fragment atoi później, jeśli jest to wymagane do wyzwania. Na razie możesz wypróbować następujący kod:
XOR, 221
Wynik jest zapisywany w komórce 10, wskaźnik kończy się w komórce 5
ORAZ 209
Wynik jest zapisywany w komórce 10, wskaźnik kończy się w komórce 5
LUB 211
Wynik jest zapisywany w komórce 10, wskaźnik kończy się w komórce 5
Obróć w lewo, 38
Wynik jest zapisywany w komórce 1, wskaźnik kończy się w komórce 4
NIE 7
Wynik jest zapisywany w komórce 1, wskaźnik kończy się na komórce 0
Wyjaśnienie:
XOR, AND i OR działają podobnie: Oblicz n / 2 dla każdej liczby i zapamiętaj n mod 2. Oblicz logiczne XOR / AND / OR dla pojedynczych bitów. Jeśli bit wynikowy jest ustawiony, dodaj 2 ^ n do wyniku. Powtórz to 8 razy.
Oto układ pamięci, którego użyłem:
Oto źródło XOR (liczby wskazują, gdzie w tym czasie znajduje się wskaźnik):
W przypadku obracania w lewo ponownie w komórce 2 znajduje się znacznik określający, czy 2n jest równy zero, ponieważ można jedynie ustalić, czy komórka jest niezerowa bezpośrednio. Jeśli tak, bit przeniesienia jest zapisywany w komórce 4, a później dodawany do 2n. Oto układ pamięci:
źródło
,>,<
. Zmienię pytanie.Wynik (bieżący):
12038837 / -Programy zakładają, że liczby są ładowane w dowolnej komórce, określonej
,
lub podobnej. Zakłada również, że wszystkie komórki są 8-bitowe bez znaku z zawijaniem w razie potrzeby. Na początku każdego fragmentu numery są ładowane do komórki 0 (i 1, jeśli to konieczne).Operacje bitowe - 799
Operacje bitowe mają tę samą ogólną strukturę.
Obróć w lewo A, 1-31 / -
Liczba
A
jest ładowana do komórki 0.NIE A - 7
Liczba
A
jest ładowana do komórki 0.źródło