शब्दों का मूल्य ढूँढना!


13

परिचय

[यहां कूल नाम डालें] की भूमि में, लोग पैसे से चीजें नहीं खरीदते हैं, क्योंकि सभी को कागज के लिए एक गंभीर एलर्जी है। वे शब्दों के साथ प्रत्येक भुगतान करते हैं! लेकिन वह कैसे है? खैर, वे प्रत्येक अक्षर संख्या मान देते हैं:

a=1,b=2,c=3,etc. 

(बाद में वर्णित कुछ अन्य विशेष नियमों के साथ)

इस चुनौती में, आपका कार्य वाक्यों के मूल्य की गणना करना होगा।

चुनौती

आप एक इनपुट लेंगे जो एक वाक्य होगा। आप मान सकते हैं कि इनपुट में कोई नईलाइन या अनुगामी स्थान नहीं है। इन नियमों का उपयोग करते हुए सजा के मूल्य की गणना करने की चुनौती होगी:

a=1,b=2,c=3,etc.  
  • एक कैपिटल लेटर की कीमत 1.5 गुना है, यह इसी लोअरकेस लेटर है

H=h*1.5

तो, शब्द

cab

लायक होगा c+a+b = 3+1+2 = 6

लेकिन Cabएक कैपिटल सी वाला शब्द इस लायक होगा कि (c*1.5)+a+b = 4.5+1+2 = 7.5 यदि आपका प्रोग्राम इनपुट "कैब" है तो आपका प्रोग्राम 7.5 आउटपुट करेगा

  • सभी गैर वर्णमाला वर्ण 1 के लायक हैं।

यह कोड गोल्फ है, इसलिए बाइट्स जीत में सबसे छोटा जवाब है। सौभाग्य!


4
रुको, पैसा कागज है ?? मैंने हमेशा सोचा था कि यह या तो चमकदार धातु डिस्क या पवित्र कार्ड स्वाइप करके किसी प्रकार का जादू था।
Geobits

2
यहां तक ​​कि अमेरिकी बैंकनोट भी वास्तव में कपास और लिनन से बने होते हैं..लेकिन मुझे लगता है कि [यहां कूल नाम डालें] लोगों ने अभी तक ऐसा नहीं सोचा था।
jcai

ट्रेलिंग शून्य की अनुमति है? जैसे, मुद्रण के 7.0बजाय 7?
kirbyfan64sos

@ kirbyfan64sos ट्रेलिंग 0s की अनुमति है।
निको ए

रिक्त स्थान के बारे में क्या?
जूनियर जूनियर

जवाबों:


13

पायथन 3, 71 65 61 बाइट्स

lambda z:sum((ord(s)*1.5**(s<'_')-96)**s.isalpha()for s in z)

एक असाधारण संयोग से, (ord(s)-64)*1.5के बराबर है ord(s)*1.5-96, इसलिए हमें केवल -96एक बार लिखना होगा । बाकी सब बहुत सीधा है।

संपादित करें: घातांक shenanigans का उपयोग करके कुछ बाइट्स को बंद कर दिया।


5

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

संपादित करें:

e=raw_input()
print sum([ord(l)-96for l in e if not l.isupper()]+[1.5*ord(l)-96for l in e if l.isupper()])

पहला सबमिशन, इतना गोल्फ नहीं लेकिन किसी को कहीं शुरू करना है।

def s2(p):
 c=0
 for l in p:
  if l.isupper():
   c+=(ord(l.lower())-96)*1.5
  else:
   c+=ord(l)-96
 return c
print s(raw_input())

प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! इस पोस्ट में पायथन में कोड गोल्फिंग के लिए कुछ सुझाव दिए गए हैं जो आपके स्कोर को बेहतर बनाने में आपकी मदद कर सकते हैं। आप व्हाट्सएप की मात्रा कम करके शुरू कर सकते हैं।
एलेक्स ए।

अपनी दूसरी सूची की समझ में क्यों नहीं प्रतिस्थापित (ord (l.lower ()) - 96) * 1.5 के साथ 1.5 * ord (l) -96। आप जानते हैं कि l ऊपरी है इसलिए बस उसी के साथ काम करें और parens को हटाने के लिए गुणा करें (64 * 1.5 = 96)।
शासक ५०१

आप समापन पैरेने और forसमझ के बीच के स्थान को भी हटा सकते हैं ।
एलेक्स ए।

अगर मुझसे गलती नहीं हुई है, तो आप इसे eएक पैरामीटर के रूप में केवल एक लंबोदर बनाकर और भी कम कर सकते हैं जो परिणाम देता है।
एलेक्स ए।

"समझ" में एक?
२३:१५

5

पायथ, 23 20 बाइट्स

sm|*hxGrdZ|}dG1.5 1z

लाइव डेमो और परीक्षण के मामले।

व्याख्या

 m                 z    For each input character
    hxGrdZ              Get the value of it's lowercase form, or 0 for non-alphabetic characters
   *      |}dG1.5       Multiply it by 1 if it's lowercase, 1.5 if uppercase
  |               1     If it's still zero, it's a non-alphabetic character, so use 1 as its value
s                       Sum of all the values

यहाँ पूर्णांकों के रूप में बूलियन मूल्यों के कुछ रचनात्मक उपयोगों का उल्लेख है।

23-बाइट संस्करण:

sm+*hxGJrdZ|}dG1.5!}JGz

लाइव डेमो और परीक्षण के मामले।


यह .सभी के लिए गलत चीज का उत्पादन करता है (सभी गैर-अक्षर वर्ण 1. के लायक होना चाहिए)
लिन

1
@ मौरिस तय !!
kirbyfan64sos

4

जूलिया, 63 बाइट्स

s->sum(c->isalpha(c)?(64<c<91?1.5:1)*(c-(64<c<91?'@':'`')):1,s)

यह केवल एक सरणी के माध्यम से निर्मित एक सरणी को दर्शाता है जो इनपुट स्ट्रिंग में वर्णों पर लूप करता है और अपने कोड बिंदुओं पर अंकगणित करता है।

Ungolfed:

function char_score(c::Char)
    (64 < c < 91 ? 1.5 : 1) * (c - (64 < c < 91 ? '@' : '`')) : 1
end

function sentence_value(s::String)
    sum(char_score, s)
end

दृष्टिकोण को ठीक करने के लिए ग्लेन ओ का धन्यवाद।


2

अटक , 85 43 बाइट्स

हाँ, मुझे पता है, अजगर छोटा है ..: पी मैं सबसे अधिक भाग के लिए अब Tryth के रूप में एक ही तर्क का उपयोग कर रहा हूं।

s_"str.isalpha"fgl;l-|0Gc"_91<1.5;^*96-":++

स्पष्टीकरण:

s_                                            # Take input & duplicate
  "str.isalpha"fg                             # Filter for only alpha chars, save
                 l;l-|                        # Determine number of symbols in start string
                      0Gc                     # Get saved string, convert to char array
                         "_91<1.5;^*96-":     # Logic to find score for each letter
                                         ++   # Sum the list of nums, add to # of symbols


1

सीजेएम, 30 बाइट्स

q:i91,64fm1.5f*32,5f-+1fe>f=:+

यह कैसे काम करता है (वाह, मैंने इनमें से एक भी नहीं बनाया है!):

   91,64fm1.5f*32,5f-+1fe>      Construct an array so that a[i] == score for chr(i)
q:i                             Read STDIN and convert to ASCII codes
                          f=    Index each from the array
                            :+  Sum the result

1

एफ #, 168 बाइट्स

वास्तव में अभी तक गोल्फ नहीं हुआ है, लेकिन एक शुरुआत:

fun(w:string)->w|>Seq.map(fun c->if Char.IsLetter c then (if Char.IsUpper(c) then (float)(Math.Abs(64-(int)c))*1.5 else (float)(Math.Abs(96-(int)c))) else 1.0)|>Seq.sum

यहाँ एक और अधिक पठनीय संस्करण है:

let calc (w : string) =
    w
    |> Seq.map (fun c -> if Char.IsLetter c then (if Char.IsUpper(c) then (float)(Math.Abs(64 - (int)c)) * 1.5 else (float)(Math.Abs (96 - (int)c))) else 1.0)
    |> Seq.sum

1

के, ३०

+/1^(,/1 1.5*(.Q`a`A)!\:1+!26)

k)+/1^(,/1 1.5*(.Q`a`A)!\:1+!26)"Programming Puzzles & Code Golf"
349f

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

.Q`a`A लोअरकेस और अपरकेस अक्षरों की दो सूची बनाता है

k).Q`a`A
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

!:1+til 26प्रत्येक सूची में प्रत्येक अक्षर को 1 से 26 तक मैप करता है

k)(.Q`a`A)!\:1+!26
"abcdefghijklmnopqrstuvwxyz"!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

पहली सूची को 1 से गुणा करें, अंतिम को 1.5 से

k)1 1.5*(.Q`a`A)!\:1+!26
"abcdefghijklmnopqrstuvwxyz"!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26f
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"!1.5 3 4.5 6 7.5 9 10.5 12 13.5 15 16.5 18 19.5 21 22.5 24 25.5 27 28.5 30 31.5 33 34.5 36 37.5 39

का उपयोग कर एक शब्दकोश में टकटकी ,/

k)(,/1 1.5*(.Q`a`A)!\:1+!26)
a| 1
b| 2
c| 3
d| 4
..

इनपुट स्ट्रिंग के पात्रों को संबंधित स्कोर में मैप करें

k)(,/1 1.5*(.Q`a`A)!\:1+!26)"Programming Puzzles & Code Golf"
24 18 15 7 18 1 13 13 9 14 7 0n 24 21 26 26 12 5 19 0n 0n 0n 4.5 15 4 5 0n 10.5 15 12 6

1 के साथ किसी भी शून्य मान को भरें

k)1^(,/1 1.5*(.Q`a`A)!\:1+!26)"Programming Puzzles & Code Golf"
24 18 15 7 18 1 13 13 9 14 7 1 24 21 26 26 12 5 19 1 1 1 4.5 15 4 5 1 10.5 15 12 6

योग

k)+/1^(,/1 1.5*(.Q`a`A)!\:1+!26)"Programming Puzzles & Code Golf"
349f


1

MATLAB, 68 बाइट्स

यह इस तथ्य का लाभ उठाता है कि वर्ण स्वचालित रूप से पूर्णांकों के लिए डाले जाते हैं, और बूलियन मूल्यों को पूर्णांकों के रूप में अभिव्यक्त किया जा सकता है।

sum([t(t>96&t<132)-96,(t(t>64&t<91)-64)*1.5,t<65|(t>90&t<97)|t>122])

1

पर्ल 5, 77 बाइट्स

@_=split//,$ARGV[0];$i+=(ord)*(/[a-z]/||/[A-Z]/*1.5||96/ord)-96for@_;print$i

पर परीक्षण किया गया v5.20.2


1

जावास्क्रिप्ट (ईएस 6), 85 82 80 67 बाइट्स

मुझे इस तरह की त्वरित और आसान चुनौतियाँ पसंद हैं। :)

t=>[...t].map(c=>u+=(v=parseInt(c,36)-9)>0?v*(c>'Z'||1.5):1,u=0)&&u

यह एक बेस -36 नंबर के रूप में प्रत्येक चार की व्याख्या करके काम करता है, इसे 1 या 1.5 से गुणा करता है यदि यह 9 ( a-zया A-Z) से अधिक है , और यदि नहीं तो 1 दे। हमेशा की तरह, सुझावों का स्वागत है!


1
CharCodeAt में 0 बॉट आवश्यक है
डाउगोएट

@vihan नहीं जानता था कि; पारितोषिक के लिए धन्यवाद!
ETHproductions

क्यों नहींtoString(36)
l4m2

@ l4m2 मुझे यकीन नहीं है कि .toString(36)यहाँ कैसे लागू होता है। क्या आपका मतलब कुछ ऐसा है parseInt(c,36)? दरअसल, यह कम हो सकता है ...
ETHproductions

आप कुछ बाइट्स को पुनरावर्ती जाकर 2/3 का उपयोग करके बचा सकते हैं जब parseInt NaN लौटाता है: ([c,...t])=>c?(parseInt(c,36)-9||2/3)*(c>'Z'||1.5)+f(t):0
रिक हिचकॉक



0

PHP, 102 बाइट्स

foreach(str_split($argv[1])as$c){$v=ord($c)-64;$s+=A<=$c&&$c<=Z?1.5*$v:(a<=$c&&$c<=z?$v-32:1);}echo$s;

उपयोग उदाहरण:

$ php -d error_reporting=0 value.php cab
6
$ php -d error_reporting=0 value.php Cab
7.5
$ php -d error_reporting=0 value.php 'Programming Puzzles & Code Golf'
349

एल्गोरिथ्म में कुछ खास नहीं। पहला कार्यक्रम के तर्क से प्रत्येक चरित्र ( $argv[1]) के खिलाफ चेक किया गया है Aऔर Zतो aऔर zऔर उसके अनुसार गिना।


0

पॉवरशेल, 108 बाइट्स

ध्यान से प्रतिस्पर्धी, मैं थोड़े हैरान हूं। कॉम्पैक्ट टर्नेरी संचालक न होने के लिए भी जर्जर नहीं।

कोड:

$a=[char[]]$args[0];$a|%{$b=$_-64;If($b-in(1..26)){$c+=$b*1.5}ElseIf($b-in(33..58)){$c+=$b-32}Else{$c++}};$c

व्याख्या की:

$a=[char[]]$args[0]                # Take command-line input, cast as char array
$a|%{                              # For each letter in the array
  $b=$_-64                         # Set $b as the int value of the letter (implicit casting), minus offset
  If($b-in(1..26)){$c+=$b*1.5}     # If it's a capital, multiply by 1.5.
                         # Note that $c implicitly starts at 0 the first time through
  ElseIf($b-in(33..58)){$c+=$b-32} # Not a capital
  Else{$c++}                       # Not a letter
  }
$c                                 # Print out the sum

0

सी, 85 बाइट्स

float f(char*s){return(*s-96)*!!islower(*s)+1.5*(*s-64)*!!isupper(*s)+(*++s?f(s):0);}

!!पहले islowerऔर isupperजरूरी हैं, क्योंकि इन कार्यों द्वारा दिया बूलियन मूल्यों होने की गारंटी नहीं कर रहे हैं 0और 1, सही मूल्य था 1024वास्तव में अपने सिस्टम पर!


0

कैंडी , 26 22 बाइट्स

(~ "एक" <{A # 64-2 / ​​3 * | एक # 96-} ज) जेड

@ के लिए धन्यवाद कारक चाल के लिए!

(~"a"<{A2/3*|A}#96-h)Z

इनवोकेशन -I ध्वज के साथ है, जैसे कि candy -I "Cab" -e $prg

इसमें कोड लंबा रूप है:

while     # loop while able to consume characters from stack
  peekA   # A gets stack to
  "a"
  less    # is pop() < "a"
  if
    pushA   # capitalized
    digit2
    div
    digit3
    mult
  else
    pushA   # lower case
  endif
  number
  digit9
  digit6
  sub
  popAddZ   # add pop() to counter register Z
endwhile
pushZ       # push Z onto stack as answer

0

प्रोलोग (एसडब्ल्यूआई), 101 बाइट्स

कोड:

X*Y:-X>64,X<91,Y is X*1.5-96;X>96,X<123,Y is X-96.
_*1.
p(L):-maplist(*,L,A),sumlist(A,B),write(B).

व्याख्या की:

X*Y:-X>64,X<91,       % When X is upper case
     Y is X*1.5-96    %      Y is 1.5 times charvalue starting at 1
     ;X>96,X<123,     % OR when X is lower case
     Y is X-96.       %      Y is charvalue starting at 1
_*1.                  % ELSE Y is 1
p(L):-maplist(*,L,A), % Get list of charvalues for all chars in string
      sumlist(A,B),   % Take sum of list
      write(B).       % Print

उदाहरण:

p(`Cab`).
7.5

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