कोडगॉल्फ - शोर # 1 पर ध्यान न दें


15

अनुदेश

बैरी एक छोटे एपीआई के प्रभारी के रूप में इतना अच्छा बैकएंड डेवलपर नहीं है जो आपको ग्राहक की दुकान में की गई खरीदारी के बारे में जानकारी दे। हालाँकि, उसने कोई बड़ा काम नहीं किया है और आपका बॉस आपको इसके बजाय क्लाइंट-साइड को ठीक करने के लिए कहता है। आदर्श रूप में आप इस तरह के रूप में अल्पविराम विभाजित मान प्राप्त करना चाहिए 927,2,45,90जो की तरह कुछ के अनुरूप item_id, item_amount, unit_price,total

इस पहली पहेली में हम केवल ध्यान रखते हैं item_idऔर item_amountसमस्या को प्रस्तुत करने के लिए हमें अन्य क्षेत्रों की आवश्यकता होती है। बैरी कभी कभी चीजों को मिलाया और रिटर्न शोर उत्पादन के हिस्से के रूप में, वह भी आदेश गलत हो जाता है, लौटने हो जाता है noise, noise, unit_price, total, item_id, item_amount

आपका कार्य

आपको एक नक्शे (या समान संरचना) में जोड़े जाने की आवश्यकता है item_idऔर इस बात की item_amountपरवाह किए बिना कि बैरी उन्हें सही ढंग से वापस करता है या नहीं और कम से कम वर्णों में प्रत्येक तत्व को एक नई पंक्ति में प्रिंट कर सकता है। (भंडारण अनिवार्य नहीं है, हम सिर्फ आउटपुट की परवाह करते हैं)

नमूना इनपुट (मिश्रित सही और गड़बड़ प्रारूप)

103,2,50,100
106,1,900,900
459,40,150,300,67,2
4,20,30,6000

दूसरे शब्दों में इनपुट a,b,x,xया तो होगा या x,x,x,x,a,bजहाँ हमें परवाह है वह है a& b। आपको यह मानकर कोड प्रदान करना होगा कि हमारे पास Gcsv की सभी लाइनों के साथ एक चर (या कोई अन्य नाम) है।

नमूना उत्पादन

103,2
106,1
67,2 //This one was messy
4,20

सहनशीलता

जवाब आने पर सहनशीलता के लिए एक निश्चित मार्जिन होता है। समान स्वरूपों में उत्तर लेकिन सही मानों का पालन करना भी स्वीकार किया जाएगा। जैसे प्रारूप [a,b], (a,b)या {a,b}मान्य हैं, लेकिन a,bपसंद किए जाते हैं।

हालांकि पहली पहेली को इस तथ्य के कारण मिश्रित स्वीकृति मिली थी कि यह आसान और हल करने के लिए तेज़ था, मुझे यह भी लगा कि कुछ लोगों को भी पसंद आया। तो मैं अब के लिए quickgolfs जारी रखने के लिए जा रहा हूँ


क्या इनपुट हमेशा फॉर्मेट का होगा x,x,x,xऔर एक नंबर x,x,x,x,x,xकहां xदर्शाता है?
स्पिकट्रिक्स

हां, इनपुट उन दो प्रारूपों में से एक का पालन करेगा, मुझे स्पष्ट करना चाहिए
जुआन कोर्टेस

क्या हमें एक कार्यक्रम या एक समारोह या कुछ और प्रस्तुत करने की आवश्यकता है? इसके अलावा, सभी इनपुट कहां से लिए जा सकते हैं?
स्पिकट्रिक्स

3
क्विक-गोल्फ अनिवार्य रूप से एक कठिनाई टैग है। सर्वसम्मति से लगता है कि हम ऐसा नहीं चाहते हैं , इसलिए मैं उस टैग को अभी के लिए हटा रहा हूं। यदि आप चाहते हैं कि कठिनाई टैग का पुनर्मूल्यांकन किया जाए, तो कृपया इसके लिए एक मेटा पोस्ट करें। लेकिन यह एक बड़े पैमाने पर फिर से शुरू करने का प्रयास होगा, जो मुझे लगता है कि समन्वित तरीके से होना चाहिए, बजाय इसके कि व्यक्तिगत उपयोगकर्ता इसके लिए नए टैग बना रहे हैं।
मार्टिन एंडर

2
@CoolGuy ऐसी कोई बात नहीं है। आप Pyth को C से हरा नहीं सकते (क्योंकि आप कभी नहीं जा रहे हैं)। आनंद अन्य भाषाओं में समान भाषा या समान क्रिया-कलापों की भाषा में धड़कता है। यदि पहले से ही एक 50 बाइट सी सबमिशन था तो मैं पोस्टिंग नहीं समझ सकता था (हालांकि तब भी, मैं इसे पोस्ट कर सकता हूं यदि दृष्टिकोण अलग और दिलचस्प है)। लेकिन जब से वहाँ नहीं है, कृपया अपना उत्तर पोस्ट करें। आप जावास्क्रिप्ट और पायथन के काफी करीब हैं, इसलिए यह निश्चित रूप से सी के लिए अत्यधिक लंबा नहीं है
मार्टिन एंडर

जवाबों:


8

अजगर, 10 बाइट्स

FNG<.<N4 2

इसे ऑनलाइन आज़माएं: पायथ कंपाइलर / एक्ज़ीक्यूटर

(पहले 4 वर्ण =G.Qसभी डेटा को पढ़ते हैं और इसे स्टोर करते हैं G)

व्याख्या

FNG              for row N in G:
    .<N4            cyclic leftshift by 4
   <     2          print the first two elements

4
सुंदर, मैं पहले से ही पाइथ को पसंद करने लगा हूं
जुआन कोर्टेस

3
@ JuanCortés: यदि आप पायथ के साथ शुरुआत करना चाहते हैं तो यह एक अच्छा संसाधन हो सकता है।
एलेक्स ए


7

पायथन 3, 123 76 72 62 बाइट्स

मैं एक नवागंतुक हूँ, कहीं शुरू होगा ...

 for l in G:
  d=l.rstrip().split(',');x=[0,4][len(d)>5];print(d[x:x+2])

Xnor's और DLosc के सुझावों (62 बाइट्स) के साथ:

for l in G:d=l.rstrip().split(',');print(d[4*(len(d)>5):][:2])

8
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! चूंकि यह एक कोड-गोल्फ प्रतियोगिता है, आप अपने कोड को यथासंभव छोटा बनाना चाहते हैं। एक चीज जो आप कर सकते हैं वह है इंडेंट्स के लिए उपयोग की जाने वाली जगह की मात्रा में कमी; पायथन में एक सिंगल स्पेस पर्याप्त है। यह पोस्ट पायथन में गोल्फ के लिए युक्तियों को सूचीबद्ध करता है और एक अच्छा संदर्भ हो सकता है।
एलेक्स ए

@ एलेक्स, धन्यवाद - मैं यह पता लगाने की कोशिश कर रहा था कि सटीक नियम क्या हैं, मुझे उम्मीद थी कि मैं कुछ व्हाट्सएप को अनदेखा कर सकता हूं, लेकिन मुझे लगता है कि नहीं।
मोंगुइन

नहीं, newlines और रिक्त स्थान दोनों आपके चरित्र की गिनती में कारक हैं।
एलेक्स ए

वास्तव में, इस मामले में, आपको न्यूलाइन और इंडेंट की भी आवश्यकता नहीं है। forजब तक शरीर में एक और ब्लॉक स्टेटमेंट नहीं होता है तब तक ब्लॉक स्टेटमेंट जैसे सभी एक ही लाइन पर हो सकते हैं।
DLosc

3
एक अच्छी शुरुआत। आप रख सकते हैं एक ही लाइन पर सब कुछ के रूप में forइंडेंट से बचने के लिए। सशर्त [0,4][...] को छोटा किया जा सकता है 4*(...) , इस तथ्य का उपयोग करके कि बराबर 0/1। इसके अलावा, अगर आप लिखते हैं d[x:x+2]के रूप में d[x:][:2], हालांकि एक चरित्र अब, आप के लिए अभिव्यक्ति की बचत से बचने की सुविधा देता है xएक चर करने के लिए।
xnor

4

एसड, 32 बाइट्स

s/,/=/4
s/.*=//
s/,/:/2
s/:.*//

यह सब कुछ 4 कॉमा तक हटा देता है अगर वहाँ एक है। फिर यह 2 वें अल्पविराम (जो पहले 6 वें हो सकता था) से सब कुछ हटा देता है।

और मैं भी सही-सही ठहराने में कामयाब रहा!


डेमो देखने का कोई मौका?
जुआन कोर्टेस

मुझे यकीन नहीं है कि आप एक डेमो से क्या चाहते हैं - मैंने आपके आपूर्ति किए गए परीक्षण इनपुट को चलाया और आवश्यक आउटपुट प्राप्त किया।
टोबे स्पाइट

4

जावास्क्रिप्ट, 44 बाइट्स

चर में इनपुट मानते हुए G

संपादित करें: मुझे अभी पता चला है, यह नटकी के पर्ल समाधान की तरह दिखता है।

alert(G.replace(/(\d+,){4}|,\d+,\d+$/gm,''))

स्निपेट डेमो:

function run(){
    G = input.value;
    /* start solution */
    alert(G.replace(/(\d+,){4}|,\d+,\d+$/gm,''))
    /* end solution */
}
<textarea id="input" cols="25" rows="6">103,2,50,100
106,1,900,900
459,40,150,300,67,2
4,20,30,6000</textarea><br />
<button id="run" onclick="run();">Run</button>


4

स्काला, 68 बाइट्स

G.map(_.split(",")).map(x=>println((x++x).slice(4,6).mkString(",")))

- MrBones

स्काला, 46 70 बाइट्स

संपादित करें: परिणाम का प्रिंट आउट लें

for{l<-G;r=l.split(",");x=(r++r).slice(4,6).mkString(",")}{println(x)}

डेमो


1
1 बाइट कम, इसके बजाय मानचित्र का उपयोग करकेG.map{k=>val x=k.split(",");println((x++x).slice(4,6).mkString(","))}
स्क्वीडली

1
बाइंडिंग छोड़ने से एक और बाइट G.map(_.split(",")).map(x=>println((x++x).slice(4,6).mkString(",")))
बचती है

3

CJam, 18 15 14 बाइट्स

r{',/4m<2<pr}h

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

r      e# Read a whitespace separated token from STDIN.
{      e# Do-while loop:
  ',/  e#    Split at commas.
  4m<  e#    Rotate the resulting array 4 units to the left.
  2<   e#    Discard everything but the first 2 elements.
  p    e#    Print the array.
  r    e#    Read a whitespace separated token from STDIN.
}h     e# If the token is a nonempty string, repeat the loop.

3

POSIX खोल, 30 बाइट्स

POSIX को मानते हुए sedऔर cutमौजूद हैं:

sed 's/.*/&,&/'|cut -d, -f5,6

फ़ील्ड 5 और 6 से निकाले जाने के लिए तैयार ब्याज के डेटा को छोड़कर, लाइन को डुप्लिकेट करता है।


3

जावास्क्रिप्ट, 117 112 99 95 95 84 76 71 बाइट्स

for(r of G.split('\n'))s=r.split(','),console.log(s[t=s[4]?4:0],s[t+1])

जेएस फिडल


1
कृपया फिडेल, या डेमो पोस्ट करें
जुआन कोर्टेस

आप की जगह दो ख को दूर कर सकते हैं ;के साथ ,पाश शरीर में है और इसलिए ब्रेसिज़ को हटाने {और}
जुआन कोर्टेस

@ JuanCortés - धन्यवाद, यह नहीं पता था। उसके पीछे क्या सिद्धांत है?
रिचीअह

यदि कोई ब्रेसिज़ नहीं जोड़ा जाता है तो बंद कोष्ठक के बाद लूप का शरीर पहली अभिव्यक्ति होगा। एक अभिव्यक्ति अर्धविराम के साथ समाप्त होती है। कॉमा के साथ अलग-अलग भाव उन्हें एक अभिव्यक्ति समूह की तरह बनाते हैं यदि आप, उनके बाद अभिव्यक्ति को समाप्त कर सकते हैं
जुआन कोर्टेस

1
का उपयोग करके for ofआप 3 बाइट्स बचा सकते हैं। यह किसी भी आधुनिक ब्राउज़र में काम करता है। for(r of q=G.split('\n'))s=r.split(','),console.log(s[t=s[4]?4:0],s[t+1])
edc65

2

पिप , 12 + 1 = 13 बाइट्स

-lध्वज का उपयोग करता है , जो आउटपुट को प्रत्येक पंक्ति पर संख्याओं की अंतरिक्ष-पृथक सूचियों के रूप में देता है। *

_@[4 5]Mg^',

स्पष्टीकरण:

  • संख्या की सूची में अपेक्षित है g । जबसेg सामान्य रूप से कमांड-लाइन तर्कों से आरंभ किया जाता है, आप उसी परिणाम के लिए इनपुट भी डाल सकते हैं।
  • ^', विभाजन (प्रत्येक स्ट्रिंग) अल्पविराम पर सूची।
  • M परिणाम में प्रत्येक तत्व के लिए एक फ़ंक्शन मैप करता है।
  • _@[4 5]एक लैम्ब्डा फ़ंक्शन को परिभाषित करता है। फ़ंक्शन के तर्क द्वारा दर्शाया गया है _;@[4 5]इसके 4 वें और 5 वें तत्वों की सूची देता है। यदि सूची में छह तत्व हैं, तो ये अंतिम दो होंगे। यदि इसमें चार होते हैं, तो सूचक चारों ओर लिपटते हैं, और इसलिए परिणाम पहले दो हैं। (उदा "abcd"@4 == "abcd"@0 == "a"।)
  • अब हमारे पास सूचियों की एक सूची है, जैसे [[103 2] [106 1] [67 2]], जो कार्यक्रम के अंत में ऑटो-मुद्रित है। -lइसलिए परिणाम के रूप में इस प्रकार है झंडा, अंतरिक्ष पर प्रत्येक उप-सूची और उसके बाद न्यू लाइन पर पूरी बात मिलती है:
C: \> pip.py -le "_ @ [[4 5] Mg ^ '," 103,2,50,100 106,1,900,900 459,40,150,300,67,2
१०३ २
१०६ १
६। २

* वर्तमान में। मैं इस व्यवहार को बदल सकता हूं, लेकिन मैं अभी भी कुछ झंडा रखने की योजना बना रहा हूं जो एक ही काम करता है।


1

पर्ल, ३,

@c=/(\d+,\d+)/g;$_=@c>2?$c[2]:$c[0]

35पात्रों +2के लिए -pऔर -l। मुझे यकीन नहीं है कि अगर पर्ल में एक दृष्टिकोण है जो @ नटकी के समाधान को हरा देगा , लेकिन मुझे लगा कि मैं इस विचार को पोस्ट करूंगा, वैसे भी मेरे पास था।

साथ दौड़ो:

cat input.txt | perl -ple'@c=/(\d+,\d+)/g;$_=@c>2?$c[2]:$c[0]'


0

सी, 95 बाइट्स

f(a,b,c,d){scanf("%d,%d,%*d,%*d,%d,%d",&a,&b,&c,&d)>2?printf("%d,%d",c,d):printf("%d,%d",a,b);}

कोड सरल है। यहाँ ungolfed संस्करण है:

f(a,b,c,d){                                    //Four int variables
    scanf("%d,%d,%*d,%*d,%d,%d",&a,&b,&c,&d)>2 //Scan input
        ?                                      //If scanf returned a value > 2
        printf("%d,%d",c,d)                    //Print last two values
        :                                      //else 
        printf("%d,%d",a,b);                   //Print first two values
}

इसका परीक्षण यहां करें


0

रूबी, ५३

G.each_line{|x|g=x.split',';p[g[4]||g[0],g[5]||g[1]]}

या अच्छा है।

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