Wyzwanie to zostało zainspirowane zaprogramowaniem mikrokontrolera Arduino. Mam 6 diod LED i 6 przycisków podłączonych do różnych pinów na płycie. W kodzie każdemu przyciskowi i diodzie LED przypisany jest numer identyfikacyjny (1-6). Numery pinów (od 0–13) odpowiadające numerom identyfikacyjnym są wyszukiwane za pomocą switch
instrukcji. Czysto dla rozrywki zastanawiałem się, czy toswitch
można je ominąć za pomocą funkcji arytmetycznej / innej, aby przerazić przyszłych opiekunów kodu.
Wyzwanie
Podaj funkcję / funkcje, które przyjmują numer identyfikacyjny (liczba całkowita) jako parametr i zwracają numer pinu (liczba całkowita) dla 6 diod LED i / lub 6 przycisków, bez użycia instrukcji warunkowych (nie if
, nie switch
i brak trójki).
Zwracane wartości dla diod LED:
ID Pin
1 3
2 5
3 6
4 9
5 10
6 11
Zwróć wartości dla przycisków:
ID Pin
1 2
2 4
3 7
4 8
5 12
6 13
Wyzwanie premiowe
Podaj jedną funkcję, która pobiera numer identyfikacyjny (liczba całkowita) i drugi parametr (dowolny typ) wskazujący, czy wymagane są styki diody LED lub przycisku, i zwraca odpowiedni pin (liczba całkowita).
Zasady
To nie Arduino specyficzne wyzwanie. Używaj dowolnego języka i rób co chcesz.
Edycja: na sugestię Steveverril , jest to teraz wyzwanie golfa kodu .
Powodzenia!
(Jeśli nadal czytasz: chociaż ewidentnie absurdalne i arbitralne według standardów programowania, mapowania są oparte na pinout Arduino Micro. Piny 0 i 1 są zarezerwowane do komunikacji szeregowej, diody LED są przypisane do 6 pinów o najniższym numerze PWM , przyciski są przypisane do pozostałych pinów)
1+(1==1)
?if
,switch
i trójskładnikowych) są poza granice.Odpowiedzi:
C, po 28 bajtów
Jest to w zasadzie to samo co odpowiedź kirbyfan64sos, ale używa tablicy char zamiast liczb całkowitych i ma fikcyjny pierwszy bajt, więc nie ma potrzeby odejmowania 1 od parametru funkcji.
źródło
Haskell, 24 bajty każdy
sprawdzić:
.
sprawdzić:
bonus, Haskell, 36 bajtów
sprawdzić:
0 dla przycisków, 1 dla diod LED.
źródło
a f n=n+a f(n+f+div 1f+2)
.C (matematyka), 32 /
2726 bajtów (45 na wyzwanie premiowe)Kilka osób opublikowało różne rozwiązania wyszukiwania tabel, ale wydawało mi się, że to łatwe wyjście. Chciałem zobaczyć, jak dobrze sobie radzę z operacjami czysto matematycznymi:
Nie było jasne, czy jedna funkcja wywołująca drugą była akceptowalna, czy nie; jeśli nie, zamiast tego można użyć tej alternatywnej definicji
b(i)
(33 bajtów):Wyzwanie bonusowe (45 bajtów):
(podać
t=0
dla przycisków,t=1
dla diod LED)źródło
C, 36 bajtów każdy (49 bajtów na wyzwanie premiowe)
Przepraszam ... Po prostu nie mogłem nic na toporadzić...Ok, teraz umieściłem prawdziwe rozwiązanie.Wyzwanie bonusowe, 49 bajtów
Użyj
f(button,0)
if(pin,1)
.Demo na żywo w Ideone.
Oryginały:
źródło
p(i){return"@cefijk"[i]&15;}b(i){return"@bdghlm"[i]&15;}
?Pyth - 12 bajtów każdy
Baza koduje tablicę.
Ostatni ma w rzeczywistości dwanaście bajtów, tyle że nie mogę napisać powrotu karetki, więc go uniknąłem.
Pakiet testowy dla przycisków .
Pakiet testowy dla diod LED .
źródło
M@jC@"\rÝ"H+12*G2
, które używa 0 dla pinów i 1 dla przycisków powinno działać.Pyth, tylko bonus: 20 bajtów
parametr nr 2 wynosi 0 dla diod LED, 1 dla przycisków. Aby uzyskać numer PIN dla LED4,
g4 0
Zamieściłbym to jako komentarz do wpisu Maltysena, ale dopiero zacząłem, więc brakuje mi wymaganej reputacji. Właśnie zacząłem dziś korzystać z PYTH i przyznaję, że bezwstydnie dostosowałem jego metodę skutecznego kodowania listy.
Jeśli to było nieodpowiednie, przepraszam i usunę mój wpis.
źródło
MIPS, 16 bajtów
Przesunięcie i maska bitowa. Wejście
$a0
, wyjście$v0
.Aby uzyskać bonus, użyj natychmiast
0xdc87420
źródło
F #, 28 + 28 bajtów
Chciałem tego spróbować bez tabeli odnośników.
źródło
SWI-Prolog, 34 bajty każdy
l/2
dotyczy diod LED,b/2
dotyczy przycisków.Bonus, 66 bajtów
S = 0
w przypadku diod LED, wszystko inne w przypadku przycisków.źródło
q / k (każdy 18 bajtów)
Po prostu przypadek indeksowania:
Przykład:
Premia (1 bajt, podane zdefiniowane L i B)
Przykład:
źródło
CJam, 10 bajtów każdy
To są anonimowe funkcje. Łącza do interpretera online pokazują następnie w małej wiązce testowej, która wykonuje funkcję dla wszystkich wartości wejściowych.
Funkcja 1 (diody LED):
Wypróbuj online
Funkcja 2 (przyciski):
Wypróbuj online
Napisałem mały program, który generuje i ocenia te wyrażenia. Dla obu z nich znaleziono szereg rozwiązań z 8 znakami (licząc wyrażenie tylko bez nawiasów klamrowych), ale żadne z mniejszym.
źródło
JavaScript (ES6), 26/27 bajtów
Diody LED:
Guziki:
Jeśli powyższe nie działa (co jest prawdopodobne), oto zrzut heksowy:
Nie mogłem zmusić drugiego do pracy z surowym CR, więc musiałem go użyć
\r
Bonus, 41 bajtów
Hexdump
Drugi parametr to 0 dla diod LED i 1 dla przycisków.
źródło
Brainf ** k, 107 bajtów
Jest to mój pierwszy ręcznie kodowany program BF, nie mam wątpliwości, że należy wprowadzić kilka optymalizacji. Ale wciąż jest niesamowity. :)
Nie jestem jednak pewien, czy
[]
liczy się jako warunkowe ...: /źródło
POWERSHELL - 27-27-72
Diody LED używają 1..6 jako argumentów
przycisk użyj 1..6 jako argumentów
LED lub PRZYCISK używają b 1; 1 2; b 6; 5 itd. jako argumenty
źródło
Oktawa, 40 bajtów (wyzwanie premiowe)
Korzystanie z funkcji premiowej:
Po zdefiniowaniu tej funkcji, wywołaj tę funkcję jako
ans(x,y)
, gdziex
jest numerem pin / przycisku iy
wskazuje pin lub przycisk z wartościami1
i2
odpowiednio.Wypróbuj online
źródło
JavaScript
1137466595233 (jedna funkcja)Korzystanie z przesunięcia bitowego w celu uzyskania wartości 4-bitowych. Należy wywołać za pomocą p (n, 195650864 lub 231240736).
Alternatywny.
źródło
Perl 4 (37 i 31 bajtów)
Diody LED (37 bajtów):
... ale używa tabeli odnośników.
Przyciski (31 bajtów, bez wyszukiwania):
źródło
JavaScript (ES6) 18,22,44
Edytuj Krótszy, ale nudny
źródło
Python, 31 bajtów każdy
Nie do końca kreatywne czy coś, ale działa!
Bonus, 44 bajtów
y
powinno wynosić 0 dla diod LED i 1 dla przycisków.źródło
Python, 60 + 58 = 118 bajtów
Te są okropne. nawet nie wiem co tu robię ...
Ale mimo to są całkiem interesujące! :RE
źródło
Ruby, 45 bajtów
Wejścia testowe:
źródło
Dalej, po 26 bajtów, 34 za bonus
Podobne do wersji C przez squeamish.
Premia:
Użyj 0 dla diod LED i 6 dla przycisków. Kolejność parametrów nie ma znaczenia
źródło
Pyth, 19 bajtów każdy
Odpowiednio do szpilek i przycisków.
źródło