Diese Herausforderung wurde durch die Programmierung eines Arduino-Mikrocontrollers inspiriert. Ich habe 6 LEDs und 6 Tasten mit verschiedenen Pins auf der Platine verbunden. Im Code ist jeder Taste und LED eine ID-Nummer (1-6) zugeordnet. PIN-Nummern (von 0-13), die den ID-Nummern entsprechen, werden mit einer switch
Anweisung gesucht . Nur zur Unterhaltung habe ich mich gefragt, ob diese switch
mit einer arithmetischen / anderen Funktion umgangen werden können, um zukünftige Codewartende zu schrecken.
Die Herausforderung
Geben Sie die Funktion (en) an, für die die ID-Nummer (Ganzzahl) als Parameter verwendet wird, und geben Sie die PIN-Nummer (Ganzzahl) für die 6 LEDs und / oder die 6 Tasten zurück, ohne bedingte Anweisungen (nein if
, nein switch
und ternär) zu verwenden.
Rückgabewerte für LEDs:
ID Pin
1 3
2 5
3 6
4 9
5 10
6 11
Rückgabewerte für Schaltflächen:
ID Pin
1 2
2 4
3 7
4 8
5 12
6 13
Bonus Herausforderung
Stellen Sie eine einzelne Funktion bereit, die eine ID-Nummer (Ganzzahl) und einen zweiten Parameter (beliebiger Typ) verwendet, die angeben, ob LED- oder Tastenstifte angefordert werden, und den entsprechenden Stift (Ganzzahl) zurückgibt.
Regeln
Dies ist keine Arduino-spezifische Herausforderung. Verwenden Sie eine beliebige Sprache und machen Sie , was Sie wollen.
Edit: Auf Anregung von Steveverril ist dies nun eine Code-Golf- Herausforderung.
Viel Glück!
(Wenn Sie noch lesen: Obwohl die Zuordnungen nach Programmierstandards offensichtlich absurd und willkürlich sind, basieren sie auf der Pinbelegung des Arduino Micro. Die Pins 0 und 1 sind für die serielle Kommunikation reserviert, die LEDs sind den 6 PWM-fähigen Pins mit der niedrigsten Nummer zugeordnet , Tasten sind den verbleibenden Pins zugeordnet)
1+(1==1)
?if
,switch
und ternäre) sind tabu.Antworten:
C jeweils 28 Bytes
Dies ist im Grunde das Gleiche wie die Antwort von kirbyfan64sos, verwendet jedoch ein Zeichen-Array anstelle von Ganzzahlen und hat ein Dummy-erstes Byte, sodass vom Funktionsparameter keine 1 subtrahiert werden muss.
quelle
Haskell, jeweils 24 Bytes
überprüfen:
.
überprüfen:
Bonus, Haskell, 36 Bytes
überprüfen:
0 für Tasten, 1 für LEDs.
quelle
a f n=n+a f(n+f+div 1f+2)
.C (Mathe), 32 /
2726 Bytes (45 für Bonus Challenge)Einige Leute haben verschiedene Tabellen-Lookup-Lösungen veröffentlicht, aber das schien mir ein einfacher Ausweg zu sein. Ich wollte sehen, wie gut ich mit rein mathematischen Operationen umgehen kann:
Es war nicht klar, ob eine Funktion, die die andere aufruft, akzeptabel war oder nicht. Wenn nicht, kann
b(i)
stattdessen diese alternative Definition von (33 Byte) verwendet werden:Bonus Challenge (45 Bytes):
(Pass
t=0
für Tasten,t=1
für LEDs)quelle
C, je 36 Bytes (49 Bytes für die Bonus-Challenge)
Es tut mir leid ... ich konnte einfach nicht anders ...Ok, ich habe jetzt eine echte Lösung gefunden.Bonus Challenge, 49 Bytes
Verwenden Sie
f(button,0)
undf(pin,1)
.Live-Demo bei Ideone.
Originale:
quelle
p(i){return"@cefijk"[i]&15;}b(i){return"@bdghlm"[i]&15;}
?Pyth - jeweils 12 Bytes
Base codiert das Array.
Das letzte ist tatsächlich zwölf Bytes, außer ich kann keinen Wagenrücklauf schreiben, so dass ich es geschafft habe.
Test Suite für Buttons .
Testsuite für LEDS .
quelle
M@jC@"\rÝ"H+12*G2
, das 0 für pins und 1 für buttons verwendet, sollte funktionieren.Pyth, nur Bonus: 20 Bytes
Parameter 2 ist 0 für LEDs, 1 für Tasten. Pin # für LED4 erhalten,
g4 0
Ich hätte dies als Kommentar zu Maltysens Eintrag gepostet, aber ich habe gerade erst angefangen, daher fehlt mir der erforderliche Ruf. Ich habe heute Abend gerade angefangen, PYTH zu verwenden, und gebe zu, dass ich seine Methode zum effizienten Codieren einer Liste schamlos angepasst habe.
Wenn dies unangemessen war, entschuldige ich mich zutiefst und werde meinen Eintrag entfernen.
quelle
MIPS, 16 Bytes
Bitverschiebung und Bitmaske. Eingabe in
$a0
, Ausgabe in$v0
.Für Bonus sofort verwenden
0xdc87420
quelle
F #, 28 + 28 Bytes
Ich wollte dies ohne eine Nachschlagetabelle versuchen.
quelle
SWI-Prolog mit jeweils 34 Bytes
l/2
ist für LEDs,b/2
ist für Tasten.Bonus, 66 Bytes
S = 0
für LEDs, alles andere für Buttons.quelle
q / k (jeweils 18 Bytes)
Einfach ein Indizierungsfall:
Beispiel:
Bonus (1 Byte, gegebenes L & B definiert)
Beispiel:
quelle
CJam, jeweils 10 Bytes
Dies sind anonyme Funktionen. Die Links zum Online-Interpreter zeigen dann innerhalb eines kleinen Testgeschirrs, dass die Funktion für alle Eingabewerte ausführt.
Funktion 1 (LEDs):
Probieren Sie es online aus
Funktion 2 (Tasten):
Probieren Sie es online aus
Ich habe ein kleines Programm geschrieben, das diese Ausdrücke generiert und auswertet. Für beide wurden eine Reihe von Lösungen mit 8 Zeichen gefunden (der Ausdruck wird nur ohne geschweifte Klammern gezählt), jedoch keine mit weniger.
quelle
Javascript (ES6), 26/27 Bytes
LEDs:
Tasten:
Wenn das obige nicht läuft (was wahrscheinlich ist), ist hier ein Hexdump:
Ich konnte den zweiten nicht dazu bringen, mit einem rohen CR zu arbeiten, also musste ich verwenden
\r
Bonus, 41 Bytes
Hexdump
Der zweite Parameter ist 0 für LEDs und 1 für Tasten.
quelle
Brainf ** k, 107 Bytes
Da dies mein erstes handcodiertes BF-Programm ist, bezweifle ich nicht, dass mehrere Optimierungen vorgenommen werden müssen. Aber es ist trotzdem großartig. :)
Ich bin mir nicht sicher, ob dies
[]
als Bedingung gilt ...: /quelle
POWERSHELL - 27-27-72
LED verwenden 1..6 als Argumente
button benutze 1..6 als Argumente
LED oder TASTE verwenden b 1; l 2; b 6; L 5 usw. als Argumente
quelle
Oktave, 40 Bytes (Bonus Challenge)
Verwendung einer anonymen Funktion:
Rufen Sie nach dem Definieren dieser Funktion diese Funktion auf als
ans(x,y)
, wobeix
die Pin- / Tastennummer ist undy
Pin oder Taste mit Werten1
bzw.2
bezeichnet.Probieren Sie es online aus
quelle
JavaScript
1137466595233 (eine Funktion)Verwenden der Bitverschiebung zum Abrufen von 4-Bit-Werten. Muss mit p (n, 195650864 oder 231240736) aufgerufen werden.
Wechseln.
quelle
Perl 4 (37 und 31 Bytes)
LEDs (37 Byte):
... aber es wird eine Nachschlagetabelle verwendet.
Schaltflächen (31 Byte, keine Suche):
quelle
JavaScript (ES6) 18,22,44
Bearbeiten Kürzer aber langweilig
quelle
Python, jeweils 31 Bytes
Nicht gerade kreativ oder so, aber es funktioniert!
Bonus, 44 Bytes
y
sollte 0 für LEDs und 1 für Tasten sein.quelle
Python, 60 + 58 = 118 Bytes
Diese sind schrecklich. Ich weiß nicht mal, was ich hier mache ...
Aber sie sind trotzdem ziemlich interessant! : D
quelle
Rubin, 45 Bytes
Testeingänge:
quelle
Viertens jeweils 26 Bytes, 34 als Bonus
Ähnlich wie die C-Version von Squeamish.
Bonus:
Verwenden Sie 0 für LEDs und 6 für Tasten. Und die Reihenfolge der Parameter spielt keine Rolle
quelle
Pyth, jeweils 19 Bytes
Für Stifte bzw. Knöpfe.
quelle