Jest to kontynuacja tego wyzwania Adnana . Jeśli podoba Ci się to wyzwanie, istnieje szansa, że spodoba ci się również drugie. Sprawdź to!
Test wielokrotnego wyboru z 8 pytań, każdy z 4 wyborów może mieć odpowiedź: BCADBADA
. Przekształcony na cztery różne tablice, z prawdą i fałszem, jeśli bieżąca litera jest odpowiedzią, będzie wyglądać tak
Q#: 1 2 3 4 5 6 7 8
B C A D B A D A
A: [0, 0, 1, 0, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 0, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
D: [0, 0, 0, 1, 0, 0, 1, 0]
Można to skompresować przy użyciu odrobiny logiki. Każdy z wyborów A
, B
, C
i D
może być reprezentowana przez dwóch prawda / fałsz wartości przedstawiono poniżej:
A: 1 0
B: 0 1
C: 0 0
D: 1 1
Korzystając z tej logiki, możemy skompresować cztery powyższe wektory do zaledwie dwóch:
1 2 3 4 5 6 7 8
B C A D B A D A
[0, 0, 1, 1, 0, 1, 1, 1]
[1, 0, 0, 1, 1, 0, 1, 0]
Oznacza to, że rozwiązaniem twojego testu jest po prostu: 00110111
, 10011010
. Łącząc je, otrzymujemy liczbę binarną
0011011110011010
lub 14234
dziesiętną. Użyj tej wartości dziesiętnej, aby oszukiwać w teście!
Wyzwanie
Weź liczbę N
z zakresu (włącznie) [0, 65535]
i wyślij ciąg z odpowiedzią na test wielokrotnego wyboru.
Przypadki testowe:
14234
BCADBADA
38513
ABBDCAAB
0
CCCCCCCC
120
CBBBBCCC
65535
DDDDDDDD
39253
ABCDABCD
Dane wyjściowe mogą być pisane dużymi lub małymi literami, ale nie można używać innych symboli.
źródło
A=10, B=01
, a następnieC=nor(A,B)
, aD=and(A,B)
inspirowana przez Adnan za wyzwanie. Z perspektywy czasu może być lepiej zrobić to na odwrót, ale cóż ... Teraz już za późno ...Odpowiedzi:
Galaretka , 14 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
05AB1E ,
191816 bajtówKod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
Wyjaśnienie:
Najpierw dodajemy
65536
do liczby (žH
jest to stała zdefiniowana dla65536
), która również jest10000000000000000
binarna. Ma to na celu uzupełnienie liczby zerami. Weźmy liczbę14234
za przykład.14234 + 65536
jest równy79770
. Który w formacie binarnym jest:Usuwamy pierwszy znak, co powoduje:
Dzielimy sznurek na dwie części za pomocą
2ä
:Następnie spakowujemy tablicę za pomocą
ø
:Przekształcenie ich z powrotem na dziesiętne (przy użyciu
C
) powoduje:Teraz musimy tylko zindeksować go ciągiem
cbad
. Skompresowana wersja tego łańcucha jest’c‰±’
, którą można również przetestować tutaj . Wreszcie otrzymujemy znaki na indeks powyższej tablicy. W powyższym przykładzie powoduje to:źródło
JavaScript (ES6),
5548 bajtówWersja nierekurencyjna (55 bajtów)
Używając wyrażenia regularnego, możemy:
źródło
Python 2, 53 bajty
Przetestuj na Ideone .
źródło
(n&257)%127
ale jest dłużej. Szkoda, że 127 jest liczbą pierwszą. Może wymyślisz sposób na jego optymalizację.Zespół CP-1610 , 24 DECLE (30 bajtów)
Ten kod jest przeznaczony do uruchamiania na Intellivision . (1)
Kod operacji CP-1610 jest kodowany za pomocą 10-bitowej wartości, zwanej „DECLE”. Rzeczywista funkcja ma 24 DECLE długości, zaczynając od
$4809
i kończąc na$4820
.Rejestry CPU są jednak 16-bitowe, więc będzie wspierać wszelkie wartości wejściowej w
0x0000
..0xFFFF
.Wydajność
(1) Przyznając, że co najmniej jeden kompilator, kilka emulatorów i zastępcze pliki ROM wolne od praw autorskich są swobodnie dostępne, myślę, że nie narusza to żadnej zasady przesyłania PPCG. Ale daj mi znać, jeśli się mylę.
źródło
CJam , 22 bajty
Wypróbuj online!
Wyjaśnienie
Napędzany magią ...
Odwzorowanie par bitów na litery w tym wyzwaniu jest nieco arbitralne. Jeśli reprezentujemy
ABCD
przez0, 1, 2, 3
(abyśmy mogli po prostu dodać je do postaciA
), chcemy następujące mapowanie:To odwzorowanie można obliczyć za pomocą magicznej małej formuły:
((i1 == i2) + 1) ^ i1
gdzie wraca kontrola równości0
lub1
. Sprawdź poniższą tabelę, w której każda kolumna odpowiada jednemu wejściu, każdy wiersz odpowiada jednej operacji, a każda komórka pokaże stos w tym punkcie:Mając to na uwadze, tutaj jest pełne rozbicie kodu źródłowego:
Alternatywne rozwiązanie z tą samą liczbą bajtów, które jest zdecydowanie mniej magiczne:
Aw przypadku jest to przydatne dla każdego, jeśli włączyć
i1
ii2
bity z powrotem do jednego numeru (czyli gdy chcesz mapowanie0 -> 2, 1 -> 1, 2 -> 0, 3 -> 3
) to można obliczyć nawet łatwiej jako(~n - 1) & 3
lub(~n - 1) % 4
jeśli język dostaje modulo o wartości ujemnych prawo. Myślę, że można to napisać zwięźle, jak3&~-~n
w wielu językach. W CJam okazuje się, że jest to bajt dłuższy ze względu na dodatkową konwersję z powrotem z podstawy 2.źródło
PHP, 57 bajtów
Wersja bez operatorów bitowych 70 bajtów
źródło
$i
zdefiniowana zmienna ?Mathematica,
75736866 bajtówDzięki @MartinEnder za zapisanie 2 bajtów.
źródło
#+##
iInfix
pracuj, ale używanieStringPart
jest nieuniknione, ponieważ głowa"C"["B","A","D"][[#+##]]
jest"C"
, nieList
;StringJoin
nie działa#
i#2
były to całe listy.Perl, 42 bajty
Obejmuje +1 dla
-n
Podaj dane wejściowe STDIN:
Tylko kod:
źródło
JavaScript,
113939088 bajtówOgromne podziękowania dla @Neil za pomoc w oszczędzaniu 20 bajtów!
-3 bajty dzięki @Cyoce
Niestety, brakuje funkcji, takich jak JavaScript
decbin
,bindec
istr_pad
że PHP ma.źródło
(65536+n).toString(2).slice(1)
i[+b[i+8]+2*b[i]]
byłoby na przykład krótsze.padStart
, gdyby został zaakceptowany w przyszłej wersji ECMAscript, spowodowałby większe oszczędności.{…;return }
użyjeval("…")
padStart
teraz istnieje w ECMAScript.MATL, 16 bajtów
Wypróbuj online!
lub Zweryfikuj wszystkie przypadki testowe
Wyjaśnienie
źródło
Julia, 73 bajty
Daje funkcję f przyjmującą N jako dane wejściowe i zwracającą odpowiedź jako ciąg znaków.
Spróbuj
W zależności od tego, czy tablica znaków liczy się jako łańcuch, można pominąć łączenie ( 67 bajtów )
Spróbuj
źródło
R, 110 bajtów
Wymyślił wektoryzowane rozwiązanie w R. To powinno być możliwe do gry w golfa poprzez wymyślenie inteligentniejszej konwersji do konwersji binarnej.
źródło