अल्फ़ान्यूमेरिक लाइन और कर्व काउंटिंग


10

एक इनपुट स्ट्रिंग को देखते हुए, एक प्रोग्राम लिखें जो कुल लाइनों की संख्या और घटता है।

चुनौती

  • इनपुट से STDIN, या किसी अन्य इनपुट विधि से लें।
  • करने के लिए उत्पादन STDOUT, या किसी अन्य उत्पादन विधि, लाइनों और घटता की कुल संख्या स्ट्रिंग में निहित, इसी क्रम में , कोड स्निपेट में नीचे दी गई तालिका के आधार पर।
  • किसी भी गैर-अल्फ़ान्यूमेरिक वर्ण को अनदेखा किया जाना चाहिए।
  • मानक खामियों को मना किया जाता है।
  • ये है , इसलिए सबसे छोटा कोड जीतता है।

स्पष्टीकरण

  • लाइनों और घटता के लिए Stackexchange पर उपयोग किए गए फ़ॉन्ट द्वारा निर्धारित किया जाता है code blocks
  • सर्कल (जैसे O, o, 0) और डॉट्स ( i, j), प्रत्येक को 1 वक्र माना जाता है।
  • इनपुट एक स्ट्रिंग, पात्रों की सूची, पात्रों की धारा, बायोटेक आदि हो सकते हैं।
  • आउटपुट पूर्णांकों की एक सरणी, पूर्णांकों, अल्पविराम से अलग स्ट्रिंग, आदि के टपल हो सकता है दो नंबर अलग होना चाहिए, इसलिए 104मान्य नहीं है, लेकिन 10,4, 10 4, 10\n4, [10,4], (10, 4), और इतने पर है।
  • हेडिंग और अनुगामी व्हाट्सएप पूरी तरह से स्वीकार्य है।

नमूना इनपुट और आउटपुट

# Format: str -> line, curve
hi -> 4, 2
HELLO WORLD -> 20, 4
l33+ 5pEak -> 13, 8
+=-_!...?~`g@#$%^ -> 1, 2
9001 -> 5, 3
O o O o O o -> 0, 6

चरित्र तालिका

Char | Lines | Curves
0    | 1     | 1
1    | 3     | 0
2    | 1     | 1
3    | 0     | 2
4    | 3     | 0
5    | 2     | 1
6    | 0     | 1
7    | 2     | 0
8    | 0     | 2
9    | 0     | 1
A    | 3     | 0
B    | 1     | 2
C    | 0     | 1
D    | 1     | 1
E    | 4     | 0
F    | 3     | 0
G    | 2     | 1
H    | 3     | 0
I    | 3     | 0
J    | 1     | 1
K    | 3     | 0
L    | 2     | 0
M    | 4     | 0
N    | 3     | 0
O    | 0     | 1
P    | 1     | 1
Q    | 0     | 2
R    | 2     | 1
S    | 0     | 1
T    | 2     | 0
U    | 0     | 1
V    | 2     | 0
W    | 4     | 0
X    | 4     | 0
Y    | 3     | 0
Z    | 3     | 0
a    | 0     | 2
b    | 1     | 1
c    | 0     | 1
d    | 1     | 1
e    | 1     | 1
f    | 1     | 1
g    | 1     | 2
h    | 1     | 1
i    | 3     | 1
j    | 1     | 2
k    | 3     | 0
l    | 3     | 0
m    | 3     | 2
n    | 2     | 1
o    | 0     | 1
p    | 1     | 1
q    | 1     | 1
r    | 1     | 1
s    | 0     | 1
t    | 1     | 1
u    | 1     | 1
v    | 2     | 0
w    | 4     | 0
x    | 4     | 0
y    | 1     | 1
z    | 3     | 0

2
रेखा और वक्र के रूप में क्या मायने रखता है? है s2 घटता या 1? क्या स्टेम jएक लाइन और वक्र दोनों में है? यह सबसे अच्छा होगा यदि आप सभी अक्षरों के लिए आवश्यक मूल्यों को सूचीबद्ध कर सकते हैं।
तदर्थ गार्फ हंटर

4
मैं वास्तव में इस पर गिरावट को नहीं समझता। मेरे लिए यह अच्छे परीक्षण के मामलों के साथ एक अच्छी तरह से निर्दिष्ट चुनौती है, एक संदर्भ कार्यान्वयन और मूल्यों की एक तालिका है (क्या वे तकनीकी सही हैं या वर्जन व्यक्तिगत राय का विषय है लेकिन चुनौती से कोई लेना देना नहीं है) .. इनपुट और उत्पादन लचीला है। अगर कोई समझा सकता है कि इसमें गलत क्या है तो मैं सबसे आभारी रहूंगा।
एलपेड्रो

3
क्या आप कृपया प्रत्येक चरित्र के लिए एक प्रारूप में मूल्य प्रदान कर सकते हैं जिसे हम और आसानी से कॉपी कर सकते हैं; स्निपेट पूरी तरह से अनावश्यक है।
झबरा

4
o0 लाइनों, 1 वक्र
Giuseppe

2
ऊपर से जारी ... बिना किसी प्रतिक्रिया के डाउनवोट्स ओपी को भविष्य में अपनी चुनौतियों में सुधार करने का बहुत कम मौका देते हैं।
एल्प्रेड्रो

जवाबों:


8

हास्केल, 214 199 188 175 बाइट्स

 g 0=[]
 g n=mod n 5:g(div n 5)
 d#s=sum[n|c<-d,(i,n)<-zip['0'..]$g s,c==i]
 f s=(s#0x300BBD37F30B5C234DE4A308D077AC8EF7FB328355A6,s#0x2D5E73A8E3D345386593A829D63104FED5552D080CA)

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

लाइनों और वक्रों की संख्या आधार -5 संख्याओं के अंक हैं और इन्हें आधार -16 संख्याओं के रूप में संग्रहीत किया जाता है। फंक्शन gवापस बेस -5 में तब्दील हो जाता है।

संपादित करें: -13 बाइट्स @cole के लिए धन्यवाद।


1
169 बाइट्स यदि आप चारकोड की सूची ले सकते हैं। स्ट्रिंग वैरिएंट में इसे पोर्ट करने के लिए जा रहे हैं ...
कोल

1
175 बाइट्स यदि आपको स्ट्रिंग्स का उपयोग करना है (मेरी पिछली टिप्पणी को हटा दिया गया है क्योंकि मैंने एक तुच्छ 3 बाइट्स को बंद कर दिया है)।
कोल

@ कोट: सुधार के लिए धन्यवाद। पूर्णांक की सूची के साथ जाने पर धोखा देने जैसा महसूस होता है, क्योंकि चुनौती को "स्ट्रिंग" के रूप में चिह्नित किया गया है। दूसरी ओर, नियम "बाईटकोड" को एक वैध इनपुट प्रारूप के रूप में अनुमति देते हैं। हालाँकि, कई अन्य उत्तर भी किसी प्रकार के चार -> पूर्णांक रूपांतरण का उपयोग करते हैं। पता नहीं क्या करना है।
नीमी

6

05AB1E , 78 69 65 बाइट्स

-4 बाइट्स केविन क्रूज़सेन के लिए धन्यवाद, जाओ और अपने बेहतर 05AB1E जवाब की जाँच करें

žKÃÇ48-©•7ć_qýÊΣŸßαŽ_ì¡vFÛ–ÄÔ™”súyån!₁ζB?òrβÂ@µk₆¼×¬°•5в2ä`®èrè‚O

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

आउटपुट [कर्व, लाइन] के रूप में

मैं 05AB1E पर वास्तव में बुरा हूं मुझे अभी पता चला है। अगर मैं अपनी èसूचियों की सूची में करने के लिए 05AB1E प्राप्त कर सकता हूं तो निश्चित रूप से अधिक बाइट बचा सकता हूं


व्याख्या

žKÃ                                    #Filter out non alpha-nums
    Ç48-                               #Convert to ascii and subtract 48 so "0" is 0 etc.
        ©                              #Store that for later
          •...•5в                      #De-compress compressed list 
                 2ä                    #Split into 2 chunks (lines + curves)
                   `                   #Separate them onto the stack 
                    ®                  #Get the value that we stored 
                     èrè               #Apply indexing to both lists
                        ‚              #Put our indexed values back into a list
                         O             #Sum our lists

1
आपका आउटपुट उल्टा है। यह होना चाहिए line curve, नहीं curve line
४an में

1
आउटपुट एक पूर्णांक, पूर्णांक का पूर्णांक, अल्पविराम से अलग स्ट्रिंग आदि का एक सरणी हो सकता है। दो संख्याओं को अलग होना चाहिए @bigyihsuan वे अलग हैं, मुझे नहीं लगता कि मुद्दा क्या है
डेटा

1
नियम कहते हैं Output to STDOUT, or any other output method, the total number of lines and curves contained in the string, in that order। ध्यान दें in that order, तो line curve
बिगइह्यूसन

2
मैं इस पर @ExpiredData से सहमत हूँ। शायद चुनौती में निर्दिष्ट करें कि आदेश को उत्तर में कहा जाना चाहिए। इससे प्राप्त करने के लिए पर्याप्त होगा।
एलपेड्रो

1
53 बाइट्स (और [Line, Curve]आउटपुट-ऑर्डर के साथ, हालांकि यह एक संयोग है और जानबूझकर नहीं)।
केविन क्रूज़सेन

5

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

ØBċþSḋ“yƘ.ṪñF[)µṡṭɗḌyė$Ṫk“¢⁶KɱzV$QḂḥỵṙu’b5,3¤

एक मोनडिक लिंक वर्णों की एक सूची को स्वीकार करता है जो (दो) पूर्णांकों की सूची देता है।

इसे ऑनलाइन आज़माएं! या परीक्षण-सूट देखें

कैसे?

ØBċþSḋ“...“...’b5,3¤ - Link: list of characters, T
ØB                   - base-chars = "01...9A...Za...z'
   þ                 - outer product with T using:
  ċ                  -   count occurrences
    S                - sum -> [n(0), n(1), ..., n(9), n(A), ..., n(Z), n(a), ..., n(z)]'
                   ¤ - nilad followed by link(s) as a nilad:
      “...“...’      -   list of two large integers (encoded in base 250)
                5,3  -   five paired with three = [5,3]
               b     -   to base  -> [[Lines(0), Lines(1), ...], Curves(0), Curves(1), ...]
     ḋ               - dot-product

5

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

val a=('0'to'9')++('A'to'Z')++('a'to'z')
def f(s:String)=s.filter(a.contains(_)).map(c=>"gdgkdhfckfdlfgedhddgdcedfgkhfcfceeddkgfggglgilddnhfgggfggceegd"(a.indexOf(c))-'a').map(x=>(x%5,x/5)).foldLeft((0,0))((x,y)=>(x._1+y._1,x._2+y._2))

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

इतना छोटा नहीं, शायद आगे गोल्फ हो सकता है।
नोट: 52-वर्ण स्ट्रिंग शाब्दिक एक शब्दकोश की तरह है जो एक चरित्र को किसी अन्य चरित्र में मैप करता है जो निम्न तालिका के अनुसार लाइनों और घटता की संख्या को दर्शाता है:

Curves|Lines
      |0 1 2 3 4
----------------
     0|a b c d e
     1|f g h i j
     2|k l m n o

5

पायथन 2 , 159 154 बाइट्स

किसी भी वर्ण के लिए lines*4 + curves0 से 16 तक का मान दिया जाता है। इन मूल्यों (1 वर्ण = 1 मान) को एनकोड करने के लिए बेस -36 का उपयोग किया जाता है।

-5 बाइट्स @ चास ब्राउन को धन्यवाद

lambda s:map(sum,zip(*(divmod(int("5c52c918210000000c615gc9cc5c8gc15291818ggcc00000025155565d6cce915551558gg5c"[ord(x)-48],36),4)for x in s if'/'<x<'{')))

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

पायथन 2 , 141 बाइट्स

यह मेरे पायथन 3 समाधान का एक बंदरगाह है। यह संस्करण लंबी किलों की सूची को आउटपुट करता है, इसलिए यह [4L, 2L]इसके बजाय जैसा दिखता है [4, 2]

lambda s:map(sum,zip(*(divmod(int("8BK5NLC8RS10XWUX12BG408C2UELUAFEOVARZKCHEEDDMXG09L48ZG",36)/13**(ord(x)-48)%13,3)for x in s if'/'<x<'{')))

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


2
154 बाइट्स base36 का उपयोग कर और '/'<x<'{'इसके बजाय x.isalnum()
चास ब्राउन

1
@ चास ब्राउन धन्यवाद! मैं भी इसके बारे में सोच रहा था '/'<x<'{', लेकिन ifसाथ ही साथ छुटकारा पाने के लिए मैंने इसे अभिव्यक्ति में डालने की कोशिश की ।
डेनियल टूटुबलिन


4

जावास्क्रिप्ट (Node.js) , 251 219 217 बाइट्स

-34 बाइट्स @ एक्सपीडर्ड डेटा से : ओ

_=>_.map(a=>(p+=~~"13103202003101432331324301020202443301011111313332011101124413"[(x=a.charCodeAt()-48)>16?(x-=7)>41?x-=6:x:x])&(o+=~~"10120110210211001001000011211010000021111121120021111111100010"[x]),p=o=0)&&[p,o]

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



4

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

$
¶$`
T`dLl`13103202003101432331324301020202443301011111313332011101124413`^.*
T`dLl`10120110210211001001000011211010000021111121120021111111100010`.*$
.
$*
%`1

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

$
¶$`

इनपुट स्ट्रिंग को डुप्लिकेट करें।

T`dLl`13103202003101432331324301020202443301011111313332011101124413`^.*

पहली पंक्ति पर प्रत्येक वर्ण की पंक्तियों को गिनें।

T`dLl`10120110210211001001000011211010000021111121120021111111100010`.*$

प्रत्येक वर्ण के घटता को दूसरी पंक्ति पर गिनें।

.
$*
%`1

प्रत्येक पंक्ति पर अलग से अंक योग।


4

आर , 164 153 बाइट्स

function(s,`!`=utf8ToInt,x=(!"




")[match(!s,c(48:57,65:90,97:122),0)])c(sum(x%%5),sum(x%/%5))

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

मुझे नीमी के उत्तर का आधार 5 एन्कोडिंग का उपयोग करने के रूप में एक ही विचार था, लेकिन आधार 16 के बजाय ASCII वर्णों के रूप में एन्कोड करता है nomatch = 0। उपयोग मेंmatch । गैर-अल्फ़ान्यूमेरिक वर्णों को समाप्त करने के लिए ।

लौटता है curves lines


4

चारकोल , 60 बाइट्स

IE⟦”)⊞∧cⅉ→ÞYγμ◧⊞¶u№¶⊘¶∕«⁸””)∨⧴|υ;↷dLτIüO¦:”⟧Σ⭆Φθ№⭆ι⍘ξφλ§ι⍘λφ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

E⟦”)⊞∧cⅉ→ÞYγμ◧⊞¶u№¶⊘¶∕«⁸””)∨⧴|υ;↷dLτIüO¦:”⟧

यह दो तारों की एक सरणी है 13103202000101111131333201110112441331014323313243010202024433और 10120110212111112112002111111110001002110010010000112110100000। तार फिर से मैप किए जाते हैं।

Φθ№⭆ι⍘ξφλ

इनपुट के तत्वों को फ़िल्टर किया जाता है कि क्या वे डिफ़ॉल्ट आधार रूपांतरण वर्णमाला के (62) वर्णों के भीतर समाहित हैं।

⭆...§ι⍘λφ

फिर जो तत्व बने हुए हैं उन्हें आधार (62) से परिवर्तित किया जाता है और फिर इसे मैप्ड स्ट्रिंग में अनुक्रमित किया जाता है।

I...Σ...

अंक को संक्षेपित किया जाता है और अंतर्निहित प्रिंट के लिए वापस स्ट्रिंग में डाल दिया जाता है।


4

पायथन 3 , 165 159 148 146 बाइट्स

किसी भी वर्ण के लिए (गैर-अल्फ़ान्यूमेरिक सहित) lines*3 + curves0 से 12 तक मान देता है, इसलिए हम डेटा को एन्कोड करने के लिए लंबे आधार -13 नंबर का उपयोग कर सकते हैं। इसे छोटा करने के लिए इसे बेस -36 में बदल दिया जाता है।

महान सलाह के लिए @ चास ब्राउन को धन्यवाद।

लैम्डा को प्रोग्राम में परिवर्तित करके -2 बाइट्स।

print(*map(sum,zip(*(divmod(int("8BK5NLC8RS10XWUX12BG408C2UELUAFEOVARZKCHEEDDMXG09L48ZG",36)//13**(ord(x)-48)%13,3)for x in input()if'/'<x<'{'))))

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



3

पायथन 2 , 525 बाइट्स

l=c=0;e=[(1,1),(3,0),(1,2),(0,2),(3,0),(2,1),(0,1),(2,0),(0,2),(0,1),(3,0),(1,2),(0,1),(1,1),(4,0),(3,0),(2,1),(3,0),(3,0),(1,1),(3,0),(2,0),(4,0),(3,0),(0,1),(1,1),(0,2),(2,1),(0,1),(2,0),(0,1),(2,0),(4,0),(4,0),(3,0),(3,0),(0,2),(1,1),(0,1),(1,1),(1,1),(1,1),(1,2),(1,1),(3,1),(1,2),(3,0),(3,0),(3,2),(2,1),(0,1),(1,1),(1,1),(1,1),(0,1),(1,1),(1,1),(2,0),(4,0),(4,0),(1,1),(3,0)]
d='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
for i in input():
 if i in d:
  p=d.find(i);l+=e[p][0];c+=e[p][1];
print l,c

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

संदर्भ कार्यान्वयन के लिए समान दृष्टिकोण लेकिन कुछ हद तक कम।



2
इस बारे में सोचा कि जब मुझे काम के बाद Biergarten में बीयर की बहुत ज़रूरत थी, लेकिन यह मेरे काम पर सुधार करने के लिए बहुत काम था :)
ElPedro

1
@HermanL अपने स्वयं के उत्तर के रूप में पोस्ट करने के लिए स्वतंत्र महसूस करें। मेरे पास इस पूर्व संध्या को अपडेट करने का कोई समय नहीं है।
एलपेड्रो

2
265 बाइट्स थोड़ा और गोल्फ के साथ ...
चेस ब्राउन



2

05AB1E , 53 बाइट्स

•xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ5вR2ôžKISk®KèøO

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ
                 '# Compressed integer 101629259357674935528492544214548347273909568347978482331029666966024823518105773925160
 5в               # Converted to base-5 as list: [1,0,2,0,0,2,1,0,1,2,0,3,2,0,1,1,0,3,1,1,0,3,0,3,0,4,0,4,0,2,1,0,0,2,1,0,1,2,2,0,1,1,1,0,0,3,0,4,0,2,0,3,1,1,0,3,0,3,1,2,0,3,0,4,1,1,1,0,2,1,0,3,0,3,1,1,0,4,0,4,0,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,2,2,3,0,3,0,3,2,1,1,3,1,1,2,1,1,1,1,1,1,1,1,0,1,1,2,0]
   R              # Reverse this list (due to the leading 0)
    2ô            # Split it into pairs: [[0,2],[1,1],[0,1],[1,1],[1,1],[1,1],[1,2],[1,1],[3,1],[1,2],[3,0],[3,0],[3,2],[2,1],[0,1],[1,1],[1,1],[1,1],[0,1],[1,1],[1,1],[2,0],[4,0],[4,0],[1,1],[3,0],[3,0],[1,2],[0,1],[1,1],[4,0],[3,0],[2,1],[3,0],[3,0],[1,1],[3,0],[2,0],[4,0],[3,0],[0,1],[1,1],[0,2],[2,1],[0,1],[2,0],[0,1],[2,0],[4,0],[4,0],[3,0],[3,0],[1,1],[3,0],[1,1],[0,2],[3,0],[2,1],[0,1],[2,0],[0,2],[0,1]]
      žK          # Push builtin string "abc...xyzABC...XYZ012...789"
        IS        # Push the input, split into characters
          k       # Get the index of each of these characters in the builtin-string
           ®K     # Remove all -1 for non-alphanumeric characters that were present
             è    # Use these indices to index into the earlier created pair-list
              ø   # Zip/transpose; swapping rows/columns
               O  # Sum both inner lists
                  # (after which the result is output implicitly)

(वर्गों मेरा यह 05AB1E टिप देखें कितना बड़ा पूर्णांक संपीड़ित करने के लिए? और कैसे संपीड़ित पूर्णांक सूचियों के लिए? ) को समझने के लिए क्यों •xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕहै 101629259357674935528492544214548347273909568347978482331029666966024823518105773925160और •xþ¢*>ÌŸÑå#÷AUI'@æýXÁи<¥èå–ΘηžÎà₅åǚĕ5вहै [1,0,2,0,0,2,1,0,1,2,0,3,2,0,1,1,0,3,1,1,0,3,0,3,0,4,0,4,0,2,1,0,0,2,1,0,1,2,2,0,1,1,1,0,0,3,0,4,0,2,0,3,1,1,0,3,0,3,1,2,0,3,0,4,1,1,1,0,2,1,0,3,0,3,1,1,0,4,0,4,0,2,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,2,2,3,0,3,0,3,2,1,1,3,1,1,2,1,1,1,1,1,1,1,1,0,1,1,2,0]


1

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

def f(s):
    l=0;c=0;d={'0':(1,1),'1':(3,0),'2':(1,2),'3':(0,2),'4':(3,0),'5':(2,1),'6':(0,1),'7':(2,0),'8':(0,2),'9':(0,1),'A':(3,0),'B':(1,2),'C':(0,1),'D':(1,1),'E':(4,0),'F':(3,0),'G':(2,1),'H':(3,0),'J':(1,1),'K':(3,0),'L':(2,0),'M':(4,0),'N':(3,0),'O':(0,1),'P':(1,1),'Q':(0,2),'R':(2,1),'S':(0,1),'T':(2,0),'U':(0,1),'V':(2,0),'W':(4,0),'X':(4,0),'Y':(3,0),'Z':(3,0),'a':(0,2),'b':(1,1),'c':(0,1),'d':(1,1),'e':(1,1),'f':(1,1),'g':(1,2),'h':(1,1),'i':(3,1),'j':(1,2),'k':(3,0),'l':(3,0),'m':(3,2),'n':(2,1),'o':(0,1),'p':(1,1),'q':(1,1),'r':(1,1),'s':(0,1),'t':(1,1),'u':(1,1),'v':(2,0),'w':(4,0),'x':(4,0),'y':(1,1),'z':(3,0)};
    for i in s:
        if i in d:
            l+=d[i][0];c+=d[i][1];
    return l,c

एक सरल पहला प्रयास। मैंने तालिका को एक शब्दकोष में रखा, स्ट्रिंग के माध्यम से लूप किया, कुछ काउंटरों को बढ़ाया, और एक टपल लौटा। इनपुट एक स्ट्रिंग है।

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


1
गैर प्रतिस्पर्धा क्यों? मुझे ठीक लगता है।
एलपेड्रो

1
बिना टिप्पणी के गिरावट क्यों?
ElPedro

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