Tantangan ini diinspirasi oleh pemrograman mikrokontroler Arduino. Saya memiliki 6 LED dan 6 tombol yang terhubung ke berbagai pin di papan tulis. Dalam kode tersebut, setiap tombol dan LED diberi nomor ID (1-6). Nomor pin (mulai dari 0-13) yang sesuai dengan nomor ID dilihat dengan menggunakan switch
pernyataan. Murni untuk hiburan, saya bertanya-tanya apakah switch
es ini bisa dielakkan dengan fungsi aritmatika / lainnya hanya untuk menakuti pemelihara kode masa depan.
Tantangan
Berikan fungsi / fungsi yang mengambil nomor ID (integer) sebagai parameter dan mengembalikan nomor pin (integer) untuk 6 LED dan / atau 6 tombol, tanpa menggunakan pernyataan kondisional (tidak if
, tidak, switch
dan tidak ada ternary).
Nilai pengembalian untuk LED:
ID Pin
1 3
2 5
3 6
4 9
5 10
6 11
Kembalikan nilai untuk tombol:
ID Pin
1 2
2 4
3 7
4 8
5 12
6 13
Tantangan bonus
Berikan fungsi tunggal yang mengambil nomor ID (integer) dan parameter kedua (tipe apa pun) yang menunjukkan apakah pin LED atau tombol diminta, dan mengembalikan pin yang sesuai (integer).
Aturan
Ini bukan tantangan khusus Arduino. Gunakan bahasa apa pun , lakukan apa pun yang Anda inginkan.
Sunting: atas saran steveverril , ini sekarang menjadi tantangan kode golf .
Semoga berhasil!
(Jika Anda masih membaca: meskipun jelas absurd dan sewenang-wenang oleh standar pemrograman, pemetaan didasarkan pada pinout Arduino Micro. Pin 0 dan 1 dicadangkan untuk komunikasi serial, LED ditugaskan ke 6 pin berkemampuan PWM dengan jumlah terendah , tombol ditetapkan untuk pin yang tersisa)
1+(1==1)
?if
,switch
dan ternary) yang terlarang.Jawaban:
C, masing-masing 28 byte
Ini pada dasarnya sama dengan jawaban oleh kirbyfan64sos, tetapi menggunakan array char bukan bilangan bulat, dan memiliki byte pertama dummy sehingga tidak perlu mengurangi 1 dari parameter fungsi.
sumber
Haskell, masing-masing 24 byte
untuk memeriksa:
.
untuk memeriksa:
bonus, Haskell, 36 byte
untuk memeriksa:
0 untuk tombol, 1 untuk LED.
sumber
a f n=n+a f(n+f+div 1f+2)
.C (matematika), 32 /
2726 byte (45 untuk tantangan bonus)Beberapa orang telah memposting berbagai solusi pencarian tabel, tetapi bagi saya sepertinya mengambil jalan keluar yang mudah .. Saya ingin melihat seberapa baik yang dapat saya lakukan dengan operasi matematika murni:
Tidak jelas apakah satu fungsi memanggil yang lain dapat diterima atau tidak; jika tidak, seseorang dapat menggunakan definisi alternatif ini
b(i)
(33 byte) sebagai gantinya:Tantangan Bonus (45 byte):
(lulus
t=0
untuk tombol,t=1
untuk LED)sumber
C, masing-masing 36 byte (49 byte untuk tantangan bonus)
Maaf ... saya tidak bisa menahannya ...Ok, saya memberikan solusi nyata sekarang.Tantangan bonus, 49 byte
Gunakan
f(button,0)
danf(pin,1)
.Demo langsung di Ideone.
Aslinya:
sumber
p(i){return"@cefijk"[i]&15;}b(i){return"@bdghlm"[i]&15;}
?Pyth - masing-masing 12 byte
Basis mengkodekan array.
Yang terakhir sebenarnya dua belas byte kecuali saya tidak bisa menulis carriage return jadi saya menghindarinya.
Suite Uji untuk Tombol .
Test Suite untuk LED .
sumber
M@jC@"\rÝ"H+12*G2
, yang menggunakan 0 untuk pin dan 1 untuk tombol harus berfungsi.Pyth, Bonus saja: 20 byte
param # 2 adalah 0 untuk LED, 1 untuk Tombol. Untuk mendapatkan Pin # untuk LED4,
g4 0
Saya akan memposting ini sebagai komentar untuk entri Maltysen, tapi saya baru saja mulai, jadi tidak memiliki reputasi yang diperlukan. Saya baru saja mulai menggunakan PYTH malam ini, dan mengakui bahwa saya tanpa malu-malu menyesuaikan metode penyandian daftar secara efisien.
Jika ini tidak pantas, permintaan maaf terdalam saya, dan saya akan menghapus entri saya.
sumber
MIPS, 16 byte
Sedikit bergeser dan bitmask. Input masuk
$a0
, keluaran masuk$v0
.Untuk bonus, gunakan segera
0xdc87420
sumber
F #, 28 + 28 byte
Saya ingin mencoba ini tanpa tabel pencarian.
sumber
SWI-Prolog, masing-masing 34 byte
l/2
untuk LED,b/2
untuk tombol.Bonus, 66 byte
S = 0
untuk LED, apa pun untuk Buttons.sumber
q / k (masing-masing 18 byte)
Cukup kasus pengindeksan:
Contoh:
Bonus (1 byte, diberikan L & B ditentukan)
Contoh:
sumber
CJam, masing-masing 10 byte
Ini adalah fungsi anonim. Tautan ke juru bahasa online menunjukkan kemudian di dalam test harness kecil yang menjalankan fungsi untuk semua nilai input.
Fungsi 1 (LED):
Cobalah online
Fungsi 2 (tombol):
Cobalah online
Saya menulis sebuah program kecil yang menghasilkan dan mengevaluasi ungkapan-ungkapan ini. Untuk keduanya, ia menemukan sejumlah solusi dengan 8 karakter (menghitung ekspresi hanya tanpa kawat gigi), tetapi tidak ada yang kurang.
sumber
Javascript (ES6), 26/27 byte
LED:
Tombol:
Jika hal di atas tidak berjalan (yang kemungkinan), inilah hexdump:
Saya tidak bisa mendapatkan yang kedua untuk bekerja dengan CR mentah sehingga saya harus menggunakannya
\r
Bonus, 41 byte
Hexdump
Parameter kedua adalah 0 untuk LED, dan 1 untuk tombol.
sumber
Brainf ** k, 107 byte
Ini adalah program BF kode tangan pertama saya, saya tidak ragu bahwa ada beberapa optimasi yang harus dilakukan. Tapi ini masih mengagumkan. :)
Saya tidak yakin apakah
[]
dianggap sebagai persyaratan, ...: /sumber
POWERSHELL - 27-27-72
LED menggunakan 1..6 sebagai args
tombol gunakan 1..6 sebagai args
LED atau TOMBOL gunakan b 1; l 2; b 6; 5 dll sebagai args
sumber
Oktaf, 40 byte (tantangan bonus)
Menggunakan fungsi anonuymous:
Setelah mendefinisikan fungsi ini, panggil fungsi ini sebagai
ans(x,y)
, di manax
nomor pin / tombol dany
menunjukkan pin atau tombol dengan nilai1
dan2
masing - masing.Cobalah online
sumber
JavaScript
1137466595233 (satu fungsi)Menggunakan bit shift untuk mendapatkan nilai 4bit. Harus dipanggil dengan p (n, 195650864 atau 231240736).
Bergantian.
sumber
Perl 4 (37 dan 31 byte)
LED (37 byte):
... tetapi menggunakan tabel pencarian.
Tombol (31 byte, tidak ada pencarian):
sumber
JavaScript (ES6) 18,22,44
Sunting Lebih pendek tapi membosankan
sumber
Python, 31 Bytes Masing-masing
Tidak sepenuhnya kreatif atau apa pun, tetapi berhasil!
Bonus, 44 Bytes
y
harus 0 untuk LED, dan 1 untuk tombol.sumber
Python, 60 + 58 = 118 byte
Ini mengerikan. Saya bahkan tidak tahu apa yang saya lakukan di sini ...
Tapi mereka tetap sangat menarik! : D
sumber
Ruby, 45 Bytes
Input Tes:
sumber
Keempat, masing-masing 26 byte, 34 untuk bonus
Mirip dengan versi C oleh squeamish.
Bonus:
Gunakan 0 untuk LED dan 6 untuk tombol. Dan urutan parameter tidak masalah
sumber
Pyth, masing-masing 19 byte
Untuk pin dan tombol, masing-masing.
sumber