सशर्त बयानों के बिना लुकअप


23

यह चुनौती Arduino microcontroller की प्रोग्रामिंग से प्रेरित थी। मेरे पास बोर्ड पर विभिन्न पिन से जुड़े 6 एलईडी और 6 बटन हैं। कोड में, प्रत्येक बटन और एलईडी को एक आईडी नंबर (1-6) सौंपा गया है। पिन नंबर (0-13 से लेकर) आईडी नंबर के switchअनुसार एक स्टेटमेंट का उपयोग करके देखा जाता है । मनोरंजन के लिए विशुद्ध रूप से, मैं सोच रहा था कि क्या switchभविष्य के कोड अनुरक्षकों को भयभीत करने के लिए इन es को एक अंकगणितीय / अन्य फ़ंक्शन के साथ दरकिनार किया जा सकता है।

चुनौती

फ़ंक्शन / फ़ंक्शन प्रदान करें जो एक पैरामीटर के रूप में आईडी नंबर (पूर्णांक) लेते हैं और 6 एल ई डी और / या 6 बटन के लिए पिन नंबर (पूर्णांक) लौटाते हैं, बिना सशर्त बयानों (नहीं if, नहीं switchऔर नहीं तिर्यक) का उपयोग करते हुए।

एल ई डी के लिए रिटर्न मान:

ID    Pin
1      3 
2      5
3      6
4      9
5     10
6     11

बटन के लिए मान लौटाएँ:

ID    Pin
1      2 
2      4
3      7
4      8
5     12
6     13

बोनस चुनौती

एक एकल फ़ंक्शन प्रदान करें जो एक आईडी नंबर (पूर्णांक) और दूसरा पैरामीटर (किसी भी प्रकार) को इंगित करता है कि एलईडी या बटन पिन का अनुरोध किया गया है, और संबंधित पिन (पूर्णांक) लौटाता है।

नियम

यह वह जगह है नहीं एक Arduino विशेष चुनौती। किसी भी भाषा का उपयोग करें , आप जो चाहें करें।

संपादित करें: स्टेवेवरिल के सुझाव पर , यह अब एक कोड गोल्फ चुनौती है।

सौभाग्य!

(यदि आप अभी भी पढ़ रहे हैं: यद्यपि प्रोग्रामिंग मानकों द्वारा वर्तमान में बेतुका और मनमाना है, मैपिंग अरुडिनो माइक्रो के पिनआउट पर आधारित है। पिन 0 और 1 धारावाहिक संचार के लिए आरक्षित हैं, एलइडी को 6 सबसे कम संख्या वाले PWM- सक्षम पिनों को सौंपा गया है। , बटन शेष पिंस को सौंपा गया है)


PPCG में आपका स्वागत है! मैं नीचे नहीं गया, लेकिन मुझे लगता है कि यह एक कोडगॉल्फ के रूप में बेहतर होगा। इस तरह की स्थिति में लोकप्रियता प्रतियोगिता बहुत व्यापक है। BTW, आप हमारे सैंडबॉक्स पर सवाल पोस्ट कर सकते हैं meta.codegolf.stackexchange.com/q/2140/15599 पोस्ट करने से पहले उनकी समीक्षा करने के लिए
लेवल रिवर सेंट

जब आप कहते हैं "नहीं तो", क्या मैं एक पूर्णांक के रूप में एक सशर्त अभिव्यक्ति का उपयोग कर सकता हूं? जैसे 1+(1==1)?
kirbyfan64sos 20

हां, वे ठीक हैं। केवल चुनौती (में वर्णित तीन कथन if, switchऔर त्रिगुट) सीमा बंद कर रहे हैं।


1
@steveverrill सुझाव के लिए धन्यवाद, चुनौती अब कोड गोल्फ है। अगर मैं मेटा के लिए +5 की प्रतिष्ठा की आवश्यकता को पूरा करता था, तो मैंने सैंडबॉक्स में पोस्ट किया होगा :) तो एक नीच +1 प्रतिनिधि कैजुअल को डाउनवोट न करने के लिए डबल धन्यवाद।

जवाबों:


10

सी, 28 बाइट्स प्रत्येक

p(i){return"@cefijk"[i]&15;}
b(i){return"@bdghlm"[i]&15;}

यह मूल रूप से kirbyfan64sos द्वारा उत्तर के रूप में ही है, लेकिन पूर्णांक के बजाय एक चार सरणी का उपयोग करता है, और एक डमी पहली बाइट है इसलिए फ़ंक्शन पैरामीटर से 1 को घटाने की कोई आवश्यकता नहीं है।


9

हास्केल, 24 बाइट्स प्रत्येक

l 1=3
l n=n+l(div(n+2)3)

जाँच करने के लिए:

> map l [1..6]
[3,5,6,9,10,11]

b 1=2
b n=n+b(div(n+1)2)

जाँच करने के लिए:

> map b [1..6]
[2,4,7,8,12,13]

बोनस, हास्केल, 36 बाइट्स

a f 1=f+2
a f n=n+a f(n+f+1`div`f+2)

जाँच करने के लिए:

> map (a 0) [1..6]
[2,4,7,8,12,13]
> map (a 1) [1..6]
[3,5,6,9,10,11]

बटन के लिए 0, एलईडी के लिए 1।


1
बोनस में, आपको उपयोग करने में सक्षम होना चाहिए a f n=n+a f(n+f+div 1f+2)
dfeuer

नीरस मुझे पता है कि यह कोडगोल्फ की भावना में नहीं है, लेकिन इस तरह पूरी तरह से अच्छा समाधान संपादित करने के लिए बहुत देर हो चुकी है और बहुत छोटी है। ध्यान की सराहना करें (विस्तार से) हालांकि
लीफ विलर्ट

कभी इतनी देर कैसे हो जाती है?
डेफ़र

7

सी (गणित), 32 / 27 26 बाइट्स (बोनस चुनौती के लिए 45)

कई लोगों ने विभिन्न टेबल लुकअप सॉल्यूशंस पोस्ट किए हैं, लेकिन यह मुझे आसान तरीका लगता है जैसे कि .. मैं यह देखना चाहता था कि मैं विशुद्ध गणितीय कार्यों के साथ कितना अच्छा कर सकता हूं:

p(i){return~i&1|i*2^i*!(i%5-1);}
b(i){return i/5*5+1^p(i);}

यह स्पष्ट नहीं था कि एक फ़ंक्शन दूसरे को कॉल करना स्वीकार्य था या नहीं; यदि नहीं, तो b(i)इसके बजाय (33 बाइट्स) की इस वैकल्पिक परिभाषा का उपयोग कर सकते हैं :

b(i){return(i&1|i*2)+i/5-!(i/2);}

बोनस चुनौती (45 बाइट्स):

f(i,t){return(i&1|i*2)+i/5-!(i/2)^t+i/5*5*t;}

( एल ई डी के t=0लिए बटन के लिए पास t=1)


5

सी, 36 बाइट्स प्रत्येक (बोनस चुनौती के लिए 49 बाइट्स)

p(i){return 3500459>>(4*(7+~i))&15;}
b(i){return 2390221>>(4*(7+~i))&15;}

मुझे क्षमा करें ... मैं अभी मदद नहीं कर सका ... ठीक है, मैंने अब एक वास्तविक समाधान रखा।

बोनस चुनौती, 49 बाइट्स

f(i,t){return(2390221+t*1110238)>>(4*(7+~i))&15;}

का उपयोग करें f(button,0)और f(pin,1)

Ideone में लाइव डेमो।

स्क्रीनशॉट

मूल:

p(i){int a[]={3,5,6,9,10,11};return a[i-1];}
b(i){int a[]={2,4,7,8,12,13};return a[i-1];}

1
अगर मुझे समझदार उत्तर चाहिए थे, तो अब मैं पीपीसीजी में पोस्टिंग नहीं करूंगा। मैं: पी दिलचस्प बात यह है कि वास्तविक अरडूइनो प्रोग्राम में इसका उपयोग करने पर संकलित बाइनरी के लिए एक बड़े आकार में परिणाम मिलता है (जो, बोर्ड पर भंडारण स्थान का ~ 28K दिया जाता है,) बचना है)।

कैसे के बारे में p(i){return"@cefijk"[i]&15;}b(i){return"@bdghlm"[i]&15;}?
स्क्विश ओस्सिफ्रेज

@squeamishossifrage आपको उन्हें अपने उत्तर के रूप में पोस्ट करना चाहिए। वे मेरी तुलना में बेहतर हैं। :)
kirbyfan64sos

@ kirbyfan64sos ओह ठीक है तो
स्क्वीश ossifrage

4

पायथ - 12 बाइट्स प्रत्येक

आधार सरणी को एनकोड करता है।

@jC"Ý"14tQ (buttons)
@jC"\r'"12tQ (leds)

पिछले एक बाइट वास्तव में बारह बाइट्स के अलावा मैं एक गाड़ी वापसी नहीं लिख सकता तो मैं इसे से बच गया।

बटन के लिए टेस्ट सूट

एलईडी के लिए टेस्ट सूट


मुझे लगता है कि इसके लिए ओपी का उद्देश्य एक समारोह है ("फ़ंक्शन / फ़ंक्शन प्रदान करें"); इसके साथ यह बोनस प्राप्त करने के लिए तुच्छ होना चाहिए: कुछ ऐसा M@jC@"\rÝ"H+12*G2, जो पिन के लिए 0 और बटन के लिए 1 का उपयोग करना चाहिए।
kirbyfan64sos

3

पायथ, केवल बोनस: 20 बाइट्स

M@jC"5i«$xÍ"16+*6HtG

param # 2 LED के लिए 0, Buttons के लिए 1 है। LED4 के लिए पिन # प्राप्त करने के लिए,g4 0

मैंने इसे माल्टीसेन की प्रविष्टि के लिए एक टिप्पणी के रूप में पोस्ट किया होगा, लेकिन मैंने अभी शुरुआत की है, इसलिए आवश्यक प्रतिष्ठा का अभाव है। मैंने आज रात PYTH का उपयोग करना शुरू कर दिया है, और स्वीकार करता हूं कि मैंने बेशर्मी से किसी सूची को कुशलता से कूटने के उनके तरीके को अनुकूलित कर लिया है।

यदि यह अनुचित था, तो मेरी गहरी माफी, और मैं अपनी प्रविष्टि को हटा दूंगा।


1
हे ब्रायन टक! मुझे खुशी है कि आपने मेरी भाषा का उपयोग शुरू कर दिया है। माल्टीसेन के विचार का यह पुन: उपयोग संभवतः ठीक था, क्योंकि आधार एन्कोडिंग वास्तव में एक नया विचार नहीं है। हालांकि, आपने जो श्रेय दिया, वह महत्वपूर्ण है। वैसे, Pyth को सभी कैप्स में नहीं लिखा जाना चाहिए - यह एक परिचित नहीं है, यह सिर्फ एक नाम है।
isaacg

2

MIPS, 16 बाइट्स

बिट शिफ्टिंग और बिटमास्क। में इनपुट $a0, आउटपुट में $v0

sll     $t0, $a0, 2 
li      $t1, 0xba96530
srlv    $t0, $t1, $t0   
andi    $v0, $t0, 0xf

बोनस के लिए, तत्काल का उपयोग करें 0xdc87420


क्या हम गोल्फ के स्रोत के आकार को गिनना नहीं चाहते हैं? :)
नाइट्रो

2

एफ #, 28 + 28 बाइट्स

मैं लुकअप टेबल के बिना यह कोशिश करना चाहता था।

let L x=1+x*2-x%4/3-x/5-x/6
let B x=x*2+x/3-x/4+x%6/5*2

1

एसडब्ल्यूआई-प्रोलॉग, 34 बाइट्स प्रत्येक

l(I,P):-nth1(I,[3,5,6,9,10,11],P).
b(I,P):-nth1(I,[2,4,7,8,12,13],P).

l/2एल ई डी के लिए b/2है, बटन के लिए है।

बोनस, 66 बाइट्स

a(I,S,P):-nth1(I,[3:2,5:4,6:7,9:8,10:12,11:13],A:B),(S=0,P=A;P=B).

S = 0 एलईडी के लिए, बटन के लिए कुछ और।


1

क्यू / के (18 बाइट्स प्रत्येक)

बस अनुक्रमण का एक मामला:

L:0N 3 5 6 9 10 11
B:0N 2 4 1 8 12 13

उदाहरण:

q) L[2]
5
q) B[6]
13

बोनस (1 बाइट, जिसे एल एंड बी परिभाषित किया गया है)

@

उदाहरण:

q) @[`L;2]
5
q) @[`B;6]
13

यह भ्रामक रूप से प्रतीकों का चतुर उपयोग है! +1
kirbyfan64sos 15

1

CJam, 10 बाइट्स प्रत्येक

ये अनाम कार्य हैं। ऑनलाइन दुभाषिया के लिंक तब एक छोटे परीक्षण हार्नेस के भीतर होते हैं जो सभी इनपुट मानों के लिए फ़ंक्शन निष्पादित करता है।

समारोह 1 (एल ई डी):

{5*3|4+3/}

इसे ऑनलाइन आज़माएं

समारोह 2 (बटन):

{_6|5+*5/}

इसे ऑनलाइन आज़माएं

मैंने एक छोटा सा कार्यक्रम लिखा जो इन भावों को उत्पन्न करता है और उनका मूल्यांकन करता है। उन दोनों के लिए, इसमें 8 वर्णों के साथ कई समाधान पाए गए (केवल ब्रेसिज़ के बिना अभिव्यक्ति की गिनती), लेकिन कम के साथ कोई नहीं।


0

जावास्क्रिप्ट (ईएस 6), 26/27 बाइट्स

एल ई डी:

a=>`0   
`.charCodeAt(a)

बटन:

a=>`0\r`.charCodeAt(a)

यदि ऊपर नहीं चलता है (जो की संभावना है), यहाँ एक हेक्सडम्प है:

00000000: 6C 3D 61 3D 3E 60 30 03 - 05 06 09 0A 0B 60 2E 63 |l=a=>`0      `.c|
00000010: 68 61 72 43 6F 64 65 41 - 74 28 61 29 0A 62 3D 61 |harCodeAt(a) b=a|
00000020: 3D 3E 60 30 02 04 07 08 - 0C 5C 72 60 2E 63 68 61 |=>`0     \r`.cha|
00000030: 72 43 6F 64 65 41 74 28 - 61 29                   |rCodeAt(a)|

मुझे कच्चे सीआर के साथ काम करने के लिए दूसरा नहीं मिला, इसलिए मुझे इसका उपयोग करना पड़ा \r

बोनस, 41 बाइट्स

(a,b)=>`0   
\r`.charCodeAt(a+b*6)

Hexdump

00000000: 28 61 2C 62 29 3D 3E 60 - 30 03 05 06 09 0A 0B 02 |(a,b)=>`0       |
00000010: 04 07 08 0C 5C 72 60 2E - 63 68 61 72 43 6F 64 65 |    \r`.charCode|
00000020: 41 74 28 61 2B 62 2A 36 - 29                      |At(a+b*6)|

दूसरा पैरामीटर एल ई डी के लिए 0 है, और 1 बटन के लिए है।


0

ब्रेनफ ** के, 107 बाइट्स

,>++++++++[>+>++++++<<-<------>]<[>+++<-[>++<-[>+<-[>+++<-[>>>+>+<<<[-]+<-]]]]]>>[<++++++>-]<.>>>[-[-]<-.>]

यह मेरा पहला हाथ-कोडेड BF प्रोग्राम है, मुझे संदेह नहीं है कि कई अनुकूलन किए जाने हैं। लेकिन यह अभी भी कमाल है। :)

मुझे यकीन नहीं है कि []एक सशर्त के रूप में गिना जाता है, हालांकि ...: /


यदि आपके पास एक का उपयोग करना चाहते हैं तो हमारे पास बीएफ आशावादियों से भरी एक चुनौती है ;)
बीटा डेके

@BetaDecay वे बहुत अच्छे लगते हैं, लेकिन उनमें से कोई भी वास्तव में मेरे कोड को कोई छोटा नहीं
बनाता

हम्म, यह शर्म की बात है: पी
बीटा डेके

0

पॉवर्सहेल - 27-27-72

एलईडी का उपयोग 1..6 आर्ग के रूप में

:\>wc -c LED.PS1 & cat LED.PS1 & echo.& powershell -nologo -f LED.PS1 1
27 LED.PS1
(0,3,5,6,9,10,11)[$args[0]]
3

बटन का उपयोग 1..6 आर्ग के रूप में

:\>wc -c button.PS1 & cat button.PS1 & echo.& powershell -nologo -f button.PS1 6    
27 button.PS1
(0,2,4,7,8,12,13)[$args[0]]
13

एलईडी या बटन उपयोग बी 1; एल 2; बी 6; एल 5 आदि args के रूप में

:\>wc -c ledbutt.PS1 & cat ledbutt.PS1 & echo.& powershell -nologo -f ledbutt.PS1 b 5
72 ledbutt.PS1
$a=@{"b"=(0,3,5,6,9,10,11);"l"=(0,2,4,7,8,12,13)};$a[$args[0]][$args[1]]
10
:\>powershell -nologo -f ledbutt.PS1 l 5
12    
:\>powershell -nologo -f ledbutt.PS1 b 3
6    
:\>powershell -nologo -f ledbutt.PS1 l 2
4

0

ऑक्टेव, 40 बाइट्स (बोनस चुनौती)

एनोन्यूमस फ़ंक्शन का उपयोग करना:

@(x,y)[3 2;5 4;6 7;9 8;10 12;11 13](x,y)

इस फ़ंक्शन को परिभाषित करने के बाद, इस फ़ंक्शन को कॉल करें ans(x,y), जहां xपिन / बटन संख्या है और yमूल्यों के साथ पिन या बटन इंगित करता है 1और2 क्रमशः है।

इसे ऑनलाइन आज़माएं


0

जावास्क्रिप्ट 113 74 66 59 52 33 (एक समारोह)

4bit मान प्राप्त करने के लिए बिट शिफ्ट का उपयोग करना। पी (एन, 195650864 या 231240736) के साथ बुलाया जाना चाहिए।

/*
  11   10    9    6    5    3
1011 1010 1001 0110 0101 0011 0000 = 195650864

  13   12    8    7    4    2
1101 1100 1000 0111 0100 0010 0000 = 231240736

                   b >> i * 4 xxxx
                         & 15 1111
                              yyyy (matching 1s)
*/
// Where b = 195650864 for pins and 231240736 for buttons.
function p(i,b){return b>>i*4&15}

वैकल्पिक।

/*
Using bitwise * 4 for bitwise only.    
function p(i,b){return b>>(i<<2)&15}
*/

0

पर्ल 4 (37 और 31 बाइट्स)

एल ई डी (37 बाइट्स):

$c=pop;$c*2+($c~~[1,2,4,6]&&5.5<=>$c)

... लेकिन यह लुकअप टेबल का उपयोग करता है।

बटन (31 बाइट्स, कोई खोज नहीं):

$c=pop;2*($c+($c==5))+($c%3==0)

0

जावास्क्रिप्ट (ईएस 6) 18,22,44

कम लेकिन उबाऊ संपादित करें

// LED 
l=i=>1-~' 134789'[i]
// Buttons
b=i=>[,2,4,7,8,12,13][i]

// bonus
f=(i,t)=>1-~[' 134789',[,0,2,5,6,10,11]][t][i]

//Test

out=x=>O.innerHTML+=x+'\n'

for(i=1;i<=6;i++) out(i +' -> '+l(i) + ' '+b(i) +' '+f(i,0)+' '+f(i,1))
<pre id=O></pre>


0

पायथन, 31 बाइट्स प्रत्येक

बिल्कुल रचनात्मक या कुछ भी नहीं, लेकिन यह काम करता है!

l=lambda x:int(" 3569AB"[x],16)
b=lambda x:int(" 2478CD"[x],16)

बोनस, 44 बाइट्स

k=lambda x,y:int("3569AB2478CD"[x-1+6*y],16)

y एलईडी के लिए 0 और बटनों के लिए 1 होना चाहिए।


0

पायथन, 60 + 58 = 118 बाइट्स

p=lambda i:(2**i)*(i<3)+1+(i>2)*(5+3*(i-3))-(i>4)*(i-3+~i%2)
b=lambda i:2**i-(i>2)-(i>3)*(2**(i-1)-1)-4*(i>4)-15*(i==6)

ये भयानक हैं। मैं यह भी नहीं जानता कि मैं यहाँ क्या कर रहा हूँ ...

लेकिन वे बहुत दिलचस्प फिर भी कर रहे हैं! : डी


0

रूबी, 45 बाइट्स

->i,t{[3,5,6,9,10,11,2,4,7,8,12,13][t*6+i-1]}

टेस्ट इनपुट:

->i,t{[3,5,6,9,10,11,2,4,7,8,12,13][t*6+i-1]}.call 1,0
=> 3

->i,t{[3,5,6,9,10,11,2,4,7,8,12,13][t*6+i-1]}.call 3,1
=> 7

0

फोर्थ, 26 बाइट्स प्रत्येक, 34 बोनस के लिए

स्क्विश द्वारा सी संस्करण के समान।

: P " CEFIJK" + C@ F AND ;
: B " BDGHLM" + C@ F AND ;

बोनस:

: A " CEFIJKBDGHLM" + + C@ F AND ;

एलईडी के लिए 0 और बटन के लिए 6 का उपयोग करें। और पैरामीटर आदेश कोई फर्क नहीं पड़ता


-1

पायथ, 19 बाइट्स प्रत्येक

L.&.>3500459*4-6b15
L.&.>2390221*4-6b15

क्रमशः पिन और बटन के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.