कोड गोल्फ मापक © 2019


20

कोड गोल्फ मापक © 2019

Hexdumps xxdइस तरह से कुछ के साथ इस्तेमाल किया :

00000000: 666f 6f20 6261 7220 7370 616d 2065 6767  foo bar spam egg
00000010: 730a                                     s.

आपका कार्य इस रूप में हेक्सडंप को बाइट्स की संख्या में परिवर्तित करना है।

नियम:

  • सामान्य कमियां निषिद्ध हैं।
  • यह , इसलिए बाइट्स जीत में सबसे कम वैध जवाब है।
  • आप टेक्स्ट के अंत में ( 0a) को शामिल नहीं कर सकते हैं । इसका मतलब यह है कि अगर हेक्सडंप एक नई पंक्ति ( 0a) में समाप्त हो जाता है , तो हो सकता है कि इनपुट में आउटपुट एक से कम हो।
  • एक खाली इनपुट (शाब्दिक कुछ भी नहीं: खाली सूची / स्ट्रिंग / आदि।) आउटपुट 0 होना चाहिए।
  • इनपुट किसी भी रूप में लिया जा सकता है
  • इनपुट ASCII के साथ वैध होगा जिसमें कोई नियंत्रण वर्ण नहीं होगा
  • इनपुट में संपूर्ण हेक्सडंप शामिल होना चाहिए

परीक्षण के मामलों:

00000000: 4865 6c6c 6f2c 2077 6f72 6c64 2120 4865  Hello, world! He
00000010: 6c6c 6f2c 2077 6f72 6c64 210a            llo, world!.

28 या 27 देता है

00000000: 0a                                       .

1 या 0 देता है

00000000: 6368 616c 6c65 6e67 650a                 challenge.

10 या 9 देता है

00000000: 4865 6c6c 6f2c 2077 6f72 6c64 21         Hello, world!

13 देता है


रिटर्न 0 (यह सचमुच कुछ भी नहीं है: खाली सूची / स्ट्रिंग / आदि।)

गैर-मानक भाषाओं के लिए स्पष्टीकरण अच्छा होगा।


क्या हम मान सकते हैं कि इनपुट एससीआई है? क्या इसमें नियंत्रण वर्ण हो सकते हैं? इनपुट नियम क्या हैं? कुछ भाषाएं कई लाइनों पर इनपुट को संभाल नहीं सकती हैं। क्या हम अंतिम पंक्ति को पैड कर सकते हैं ताकि सभी लाइनें समान रूप से लंबी हों? रिक्त इनपुट क्यों शामिल हैं?
स्टिव ग्रिफिन

@StewieGriffin हाँ; नहीं; हाँ; क्योंकि अगर xxdएक खाली स्ट्रिंग खिलाया जाता है, तो यह कुछ भी नहीं करता है।
.०:०2 पर ०

1
@StewieGriffin जब मैंने उत्तर दिया था तब आपने अपनी टिप्पणी संपादित की थी, इसलिए यहाँ एक विस्तार है: हाँ; नहीं; यह इनपुट हो सकता है लेकिन आप चाहते हैं, बशर्ते कि पूरा डंप शामिल हो; अंतिम उत्तर देखें; हाँ; क्योंकि अगर xxd को एक खाली स्ट्रिंग खिलाया जाता है, तो यह कुछ भी नहीं करता है
gadzooks02

1
@JonathanAllan ओह हाँ, अच्छी तरह से देखा।
०३:४१ पर --०

1
एक हेक्सडंप प्रारूप की गणना करना जिसमें दाईं ओर ASCIIfied डेटा शामिल नहीं था, दिलचस्प हो सकता है। हर कोई सिर्फ हेक्स भाग को छीन रहा है और बाकी को गिन रहा है। यदि चुनौती यह करने के लिए केवल हेक्सडंप की अंतिम पंक्ति को दी गई थी, जो कि हेक्स संख्या (स्थिति) को पार्स करने के साथ-साथ उस रेखा पर हेक्स अंकों की संख्या की गणना करने के लिए मजबूर करेगी। (जैसे मैं मशीन-कोड के उत्तर के लिए objdumpडिसएस्पेशन या nasmलिस्टिंग को देखते हुए हाथ से करता हूं ।) मुझे लगता है कि मुझे सैंडबॉक्स में पोस्ट करना चाहिए ...
पीटर कॉर्ड्स

जवाबों:


12

रेटिना 0.8.2 , 8 बाइट्स

.{51}

.

इसे ऑनलाइन आज़माएं! स्पष्टीकरण:

.{51}

प्रत्येक पंक्ति के पहले ५१ अक्षर हटाएं। (लाइनें केवल 52 और 67 वर्णों के बीच हो सकती हैं, इसलिए यह हमेशा प्रति पंक्ति एक बार मेल खाता है।)

.

शेष गैर-न्यूलाइन वर्णों की गणना करें।

7 बाइट्स यदि खाली इनपुट का समर्थन नहीं करना है:

.{52}


इसे ऑनलाइन आज़माएं! स्पष्टीकरण:

.{52}

प्रत्येक पंक्ति के पहले 52 अक्षर हटाएं। (लाइनें केवल 52 और 67 वर्णों के बीच हो सकती हैं, इसलिए यह हमेशा प्रति पंक्ति एक बार मेल खाता है।)


शेष वर्णों की संख्या (न्यूलाइन्स सहित) से 1 अधिक की गणना करें।


7 के साथ &`.{52}
ग्रिमैनी

@Grimy यह सिर्फ ... कमाल है ... आपको अपने जवाब के रूप में पोस्ट करना चाहिए।
नील

मैं इसे पहली बार में नोटिस नहीं किया था, लेकिन वास्तव में पहले से ही लगभग समान जवाब है
ग्रिमि



6

रेटिना , 7 बाइट्स

यह 52 की लंबाई वाली सिंगल-लाइन स्ट्रिंग्स की कुल संख्या को गिनाता है। हो सकता है कि ऐसा ही कुछ करना संभव हो %52,`., लेकिन मैं इसे ठीक करने का तरीका खोजने में विफल रहा।

w`.{52}

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


1
इसके अलावा: &`.{52}रेटिना 0.8.2 के लिए।
ग्रिम्मी

5

एपीएल (डायलॉग एक्सटेंडेड) , 18 बाइट्स

पूरा कार्यक्रम। तार की सूची के लिए संकेत (वर्णों की सूची)।

2÷⍨≢∊(1↓≠⊆⊢)¨49↑¨⎕

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

 प्रेरित करना

49↑¨ प्रत्येक से पहले 49 अक्षर लें

(प्रत्येक के लिए निम्नलिखित tacit फ़ंक्शन लागू करें:

 बहस

 पात्रों के रनों में काट लें

 पैडिंग कैरेक्टर (स्पेस) से अलग

1↓ पहला "शब्द" छोड़ें

ϵ nlist (समतल)

 गणना

2÷⍨ दो से विभाजित करें


4

जेली , 5 बाइट्स

Ẉ_51S

एक मोनडिक लिंक जो लाइनों की एक सूची को स्वीकार करता है जो पूर्णांक बाइट काउंट प्राप्त करता है।

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

कैसे?

Ẉ_51S - Link: list of lists of characters, H
Ẉ     - length of each (line in H)
  51  - literal fifty-one
 _    - subtract (vectorises)
    S - sum

आप लाइनों की एक सूची स्वीकार कर सकते हैं। इसके अलावा, क्या आप एक स्पष्टीकरण जोड़ना चाहेंगे?
१०:२० पर --०

आह अच्छा है, तो खाली इनपुट एक खाली सूची है या एक खाली लाइन वाली सूची है? (यह पोस्ट में स्पष्ट किया जाना चाहिए क्योंकि यह एक धार-मामला है।)
जोनाथन एलन

यह और खाली सूची / स्ट्रिंग / आदि है। मैंने अभी यह स्पष्ट किया है।
०३:३१ पर --०

धन्यवाद, स्पष्टीकरण अब भी जोड़ा गया।
जोनाथन एलन

3

सी (जीसीसी) , 64 55 बाइट्स

r;s[];f(l){while(*s=0,gets(s),l=strlen(s))r+=l-51;l=r;}

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

9 बाइट्स ने YSC को धन्यवाद दिया!

यहाँ एक अधिक नाजुक संस्करण है जो अर्नुल्ड के जावास्क्रिप्ट समाधान से प्रेरित है जो संभवतः लंबे इनपुट के लिए विफल रहता है:

सी (जीसीसी) , 50 बाइट्स

s[];f(l){l=read(0,s,1<<31);l=l?l/68*16+l%68-51:0;}

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


1
बदलकर 59 बाइट्स return rके लिएl=r
girobuz

2
@JonathanFrech अपरिभाषित व्यवहार कोड गोल्फ के लिए पूरी तरह से ठीक है!
जी। स्लीपेन

1
@ वाईएससी हम्म, लेकिन मुझे लगता है कि आर ग्लोबल बनाने से इस नियम का उल्लंघन होता है कि यदि आप किसी कार्य को करने के लिए फ़ंक्शन को परिभाषित करते हैं (और यह नहीं है main), तो इसे कई बार कॉल करना संभव है।
जी। स्लाईपेन

1
वैसे भी r;s[];f(l){while(*s=0,gets(s),l=strlen(s))r+=l-51;l=r;}: 55 बाइट्स :)
YSC

2
@girobuz के while()रूप में बाइट्स की एक ही संख्या है for(;;)। इस प्रकार ;while()से एक लंबे समय तक बाइट है for(;;)
जोनाथन फ्रेच

3

पायथन 3, 48 46 बाइट्स

lambda s:(len(s)or 51)+1-52*len(s.split('\n'))

इनपुट फ़ंक्शन के लिए एक स्ट्रिंग के रूप में पारित किया गया है। फ़ंक्शन इनपुट की लंबाई बढ़ाता है (न्यूलाइन सहित), फिर प्रत्येक पंक्ति के लिए 52 घटाता है।

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


2
मैंने जो देखा है, उसे f=हेडर में `f =` के रूप में स्थानांतरित किया जा सकता है, कोड के रूप में सिर्फ लैम्ब्डा को छोड़कर दो बाइट्स बचा सकता है: इसे ऑनलाइन आज़माएं!
१६:०२ पर --०

@ gadzooks02 धन्यवाद, संपादित करेंगे। f=एक आदत मैं अजगर कलह सर्वर से उठाया है।
IFcoltransG



2

05AB1E , 8 6 बाइट्स

€g51-O

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

तार की सूची के रूप में इनपुट।

€g     get lengths of each line
51-    subtract 51 from each
O      push the sum of the resulting list
       implicitly print

1
क्षमा करें, इनपुट में संपूर्ण हेक्सडंप होना चाहिए। (आपकी रेखा प्रत्येक पंक्ति के अंत में अक्षरों को
छोड़ती है

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

2

आईबीएम / लोटस नोट्स फॉर्मूला भाषा, 53 बाइट्स

@Sum(@Length(@Explode(@Right(@Left(i;"  ");": ")))/2)

फॉर्मूला के लिए कोई TIO नहीं है, इसलिए यहां परीक्षण मामलों के स्क्रीनशॉट हैं:

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

सूत्र गणना क्षेत्र में है जो "रिटर्न" के बाद मूल्य प्रदान करता है।

व्याख्या

यह उस तरीके का एक अच्छा प्रदर्शन है जिस तरह से फॉर्मूला एक लूप की आवश्यकता के बिना किसी सूची में फ़ंक्शन को पुन: लागू करेगा। सूत्र उसी रूप में परिकलित फ़ील्ड में है जो संपादन योग्य इनपुट फ़ील्ड `i 'के रूप में है।

  1. बीच में शुरू करो। @Leftऔर @Rightएक स्ट्रिंग सीमांकक या कई वर्णों का उपयोग करने की अनुमति दें। इसलिए हम :दो स्थानों की पहली घटना के बाईं ओर दाईं ओर और फिर खोज करते हैं । चूंकि फॉर्मूला न्यूलाइन को एक सूची विभाजक के रूप में देखता है इसलिए यह इनपुट में प्रत्येक पंक्ति पर लागू होगा।
  2. @Explodeएक फॉर्मूला के एक splitफ़ंक्शन के बराबर है और अंतरिक्ष के लिए चूक है, ,या ;। फिर से इसे क्षेत्र में प्रत्येक पंक्ति पर लागू किया जाता है लेकिन इस बार परिणामों को एक सूची में जोड़ दिया जाता है।
  3. @Lengthफिर सूची के प्रत्येक सदस्य पर लागू किया जाएगा। प्रत्येक मामले में हम विभाजित करते हैं यह 2 से वापसी मूल्य है।
  4. @Sum पूरी सूची और परिणाम का उत्पादन।

1
क्या आपके पास दुभाषिया का लिंक है (या तो ऑनलाइन या डाउनलोड किया हुआ)?
१६:०४ पर --०z ०२

दुर्भाग्य से नहीं। फॉर्मूला एक मालिकाना भाषा है जो आईबीएम उत्पाद से जुड़ी है (मैंने कुछ समय पहले मेटा से पूछा था कि क्या इस साइट पर इसकी अनुमति है और जवाब "हां" था, लेकिन पुलिस और लुटेरों की चुनौतियों के लिए नहीं)। पिछली बार मैंने देखा, डोमिनोज़ डिजाइनर (जो फॉर्मूला का समर्थन करता है) अभी भी आईबीएम से मुफ्त डाउनलोड के रूप में उपलब्ध था। दुर्भाग्य से केवल विंडोज और जैसा कि मैं घर पर लिनक्स चलाता हूं मैं पुष्टि नहीं कर सकता। यह उत्तर मेरे लंच ब्रेक के दौरान लिखा गया था क्योंकि मैं अभी भी कुछ विरासत नोट्स एप्लिकेशन का समर्थन करने के लिए काफी दुर्भाग्यशाली हूं और अभी भी काम पर मेरी मशीन पर नोट्स हैं :-)
एलपेड्रो

1
BTW, यदि आप इस साइट पर लोटस नोट्स खोजते हैं, तो आप पाएंगे कि मैं अकेला लड़का हूं जो इस भाषा में गोल्फ के लिए प्रयास करने के लिए काफी बेवकूफ है :-)
ElPedro

1

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

s=>(n=s.length)&&(n/68<<4)+n%68-51

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

टिप्पणी की गई

s =>                // s = input string
  (n = s.length) && // n = length of s; return 0 right away if n = 0 (special case)
  (n / 68 << 4) +   // otherwise compute the number of full lines and multiply it by 16
  n % 68 - 51       // add the length of the last line minus 51





0

Zsh , 36 बाइट्स

Zsh के डिफ़ॉल्ट झंडे के साथ:

for l (${(f)1})((c+=$#l-52))
<<<$[c]

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

${(f)1}$1नई लाइनों पर विभाजन करता है, और खाली लाइनों को डिस्कस करता है। $[ arithmetic expansion ]खाली मामले में, जब पाश कभी नहीं सेट के खिलाफ गार्ड $c

Zsh , 28 बाइट्स

के साथ -o extendedglob:

<<<${#${(F)${(f)1}#?(#c52)}}

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

(f)नई कथानकों पर विभाजित करें, ${ #?(#c52)}प्रमुख 52 वर्णों को हटा दें, (F)नई सूचियों में शामिल हो जाएं ताकि सूची के बजाय ${# }गिनती वर्णवार हो, वर्णों की गणना करें।


0

asm2bf , 135 बाइट्स

गोल्फ संस्करण:

lbl 3
mov r2,51
lbl 1
in_ r1
dec r2
jz_ r1,4
jnz r2,1
lbl 2
in_ r1
jz_ r1,4
sub r1,10
jz_ r1,3
inc r3
jmp 2
lbl 4
out r3

टिप्पणी संस्करण:

lbl 3               ; Main loop - the kinda entry point

    mov r2, 51      ; Loop 51 times.
    lbl 1           ; Loop start.
        in_ r1      ; Read character
        dec r2      ; Decrement the loop accumulator.
        jz_ r1, 4   ; If zero was read, end.
        jnz r2, 1   ; If we still loop, loop again.

    lbl 2           ; Second loop, accumulating the result.
        in_ r1      ; Read a character.
        jz_ r1, 4   ; If character is zero, end the loop and print result.
        sub r1, 10  ; Decrement r1 by 10 for next check.
        jz_ r1, 3   ; If the character - 10 (the newline) is zero, jump to 3
        inc r3      ; Increment character read amount.
        jmp 2
lbl 4
    out r3          ; Print out the result as an ASCII character.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.