निर्दिष्ट सूचकांक पर स्ट्रिंग का तत्व


13

की लंबाई से कम एक स्ट्रिंग sऔर एक गैर-नकारात्मक संख्या को देखते हुए , के -th स्थिति में चरित्र का उत्पादन करता है ।nsns

0-अनुक्रमण और 1-अनुक्रमण की अनुमति है। 1-अनुक्रमण के लिए, nकी लंबाई की तुलना में सकारात्मक या कम या बराबर होगा s

s केवल मुद्रण योग्य वर्णों से मिलकर बनेगा।

किसी भी उचित इनपुट / आउटपुट की अनुमति है। मानक खामियां लागू होती हैं।

टेस्टकेस (0-अनुक्रमण):

n s        output
0 "abcde"  a
1 "abcde"  b
2 "a != b" !
3 "+-*/"   /
4 "314159" 5

टेस्टकेस (1-अनुक्रमण):

n s        output
1 "abcde"  a
2 "abcde"  b
3 "a != b" !
4 "+-*/"   /
5 "314159" 5

यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।


13
मैंने इसे नकार दिया क्योंकि यह वास्तव में एक प्रोग्रामिंग या गोल्फ चुनौती नहीं है; यह सब अनिवार्य रूप से यहां पूछा जा रहा है कि किस भाषा में नौकरी के लिए सबसे छोटा बिल्ट-इन है।
झबरा

15
@ शैगी कई अन्य सरल चुनौतियों के लिए समान है जैसे दो नंबर जोड़ना, परीक्षण करना यदि कोई नंबर प्रमुख है या "हैलो, वर्ल्ड!" प्रिंट कर रहा है। हालांकि ये कई भाषाओं में उबाऊ हैं जो उन्हें बॉक्स से बाहर कर सकते हैं, वे अधिक आदिम भाषाओं के लिए दिलचस्प चुनौतियां हो सकती हैं जिन्हें अपने स्वयं के कार्यान्वयन के लिए रोल करना होगा। इसके अलावा, अधिक जटिल कुछ भी आमतौर पर उन भाषाओं के बारे में पूछने के लिए बहुत अधिक है, इसलिए उनके लिए एक आउटलेट होना अच्छा है। यदि तुच्छ चुनौतियां आपको बोर करती हैं, तो उन्हें एक तुच्छ भाषा में करने की कोशिश करें।
मार्टिन एंडर

जवाबों:



7

ऐलिस , 5 बाइट्स

I&IO@

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

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

व्याख्या

I   Read a character and push its code point.
&I  Read that many more characters and push them.
O   Output the last one we read.
@   Terminate the program.

abysmal- मुझे लगा कि आपने इसे एक्सडी बनाया है
स्टीफन

@StephenS आपका मतलब है कि मैंने मेटा पर यह I / O प्रारूप प्रस्तावित किया है? हाँ, मैंने किया, लेकिन ज्यादातर उन भाषाओं के लिए जिन्हें अपने स्वयं के दशमलव पूर्णांक पार्सर / रेंडरर को हर बार संख्यात्मक I / O के साथ एक चुनौती में लागू करना होगा, इसलिए वे संभवतः पूरी तरह से उन लोगों को छोड़ देंगे। लेकिन इसका दुर्भाग्यपूर्ण साइड इफेक्ट है कि कुछ भाषाओं में जो दशमलव को आसानी से पढ़ और लिख सकते हैं इसके बजाय कोड पॉइंट का उपयोग करना अभी भी कम है।
मार्टिन एंडर

6

पायथन, 15 बाइट्स

str.__getitem__

या

lambda s,i:s[i]

दोनों 2 तर्क लेते हैं: स्ट्रिंग और सूचकांक। 0 अनुक्रमित।


मुझे आश्चर्य है कि दोनों विधियों की लंबाई समान है।
लीक नन

6

हास्केल, 4 बाइट्स

(!!)

0-आधारित अनुक्रमण। प्रयोग उदाहरण: (!!) "Hello" 1-> 'e'


5

ऑक्टेव, 10 बाइट्स

@(s,n)s(n)

एक स्ट्रिंग लेता है s, और nइनपुट के रूप में एक नंबर , और nवें चरित्र देता है s


5

रेटिना , 28 20 19 बाइट्स

बैलेंसिंग समूहों का उपयोग नहीं करके @MartinEnder को 8 बाइट्स का धन्यवाद

के ^.+बजाय का उपयोग करके @ mbomb007 के लिए 1 बाइट धन्यवाद बचा लिया^\d+

^.+
$*
+`1¶.
¶
!1`.

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

कार्यक्रम 0-अनुक्रमित है।


एक बाइट को बचाने के \dलिए बदलें .
mbomb007

@ mbomb007 टिप के लिए धन्यवाद :)
user41805


3

ऐलिस , 10 बाइट्स

/@!O?]&
 I

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

पहली लाइन पर स्ट्रिंग और दूसरी लाइन पर 0-आधारित इंडेक्स की अपेक्षा करता है।

व्याख्या

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

सामान्य तौर पर, पूर्णांक में आवश्यकता या परिणाम वाले स्ट्रिंग्स पर किसी भी ऑपरेशन को करने का मुख्य तरीका टेप पर स्ट्रिंग को ऑर्डिनल मोड में संग्रहीत करना है, जिसे आप कार्डिनल मोड में पूर्णांकों के साथ हेरफेर कर सकते हैं।

/    Reflect to SE. Switch to Ordinal. While in Ordinal mode, the IP bounces
     diagonally up and down through the program.
I    Read one line from STDIN and push it.
!    Store the string on the tape. This writes the character codes into consecutive
     tape cells starting at the tape head. (It also writes a -1 at the end as a
     terminator, but the tape is initialised to -1s anyway).

     The next few commands are junk that luckily doesn't affect the program:

?      Load the string from the tape and push it to the stack again.
&      Fold the next command over this string. That is, for each character
       in the string, push that character, then execute the command.
?      So we're folding "load" over the string itself. So if the string is "abc"
       we'll end up with "a" "abc" "b" "abc" "c" "abc" on the stack.
!      Store the top copy of "abc" on the tape (does nothing, because it's
       already there).

     Now the relevant part of the program continues.

I    Read another line from STDIN, i.e. the string representation of the index.
/    Reflect to W. Switch to Cardinal. The IP wraps to the last column.
&    Implicitly convert the string to the integer value it represents and
     repeat the next command that many times.
]    Move the tape head right that many cells. Note that Ordinal and Cardinal
     mode have separate tape heads, but they are initialised to the same cell.
?    Load the value from that cell, which is the code point of the character
     at the given index.
O    Print the corresponding character.
!    This discards or converts some of the strings on the stack and writes some
     value back to the tape, but it's irrelevant.
@    Terminate the program.

1
"बिल्ट-इन की संपत्ति के बावजूद, ऐलिस में स्ट्रिंग इंडेक्सिंग मौजूद नहीं है।" > _>
लीक नन

1
@LeakyNun यदि आपको लगता है कि यह बुरा है, तो स्ट्रिंग की लंबाई पाने के लिए कोई बिल्ट-इन भी नहीं है। ;)
मार्टिन एंडर



3

ब्रेकीलॉग , 2 बाइट्स

∋₎

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

व्याख्या

इनपुट के एक तत्व के साथ अपने आउटपुट को एकीकृत करता है। साथ के रूप में सबस्क्रिप्ट, इसके साथ इसके उत्पादन को एकजुट करेंगे Iकी वें तत्व Sके साथ, [S,I]इनपुट के रूप में।





2

एसआईओएस , 43 बाइट्स

loadLine
readIO
a=256+i
a=get a
printChar a

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

काफी सरल।


एसआईओएस बैक \ _ /
लीकी नून

1
हाँ, मैं संभव के रूप में कई callenges के रूप में जवाब देने की कोशिश कर रहा हूँ, जिसमें विंडोज़ लोडिंग स्क्रीन एक भी शामिल है। मुझे यह पसंद है कि यह ग्राफिकल आउटपुट, और पुस्तकालयों के संदर्भ में है, लेकिन मैं अभी भी इसे प्रतिस्पर्धा में लाने और इसे प्राप्त करने के लिए एक संपीड़न योजना विकसित करना चाहूंगा। अनिवार्य रूप से int [] यह एक बाइट स्ट्रीम पढ़ने के माध्यम से उत्पन्न किया जा सकता है संकलन करता है। @LeakyNun
रोहन झुनझुनवाला

2

बीएफ , 9 बाइट्स

,[->,<]>.

सूचकांक को एक वर्ण के वर्ण कोड (जैसे ऐलिस सबमिशन) के माध्यम से लिया जाता है। उसके बाद, हमारे पास स्ट्रिंग है।

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

TIO लिंक एक बैश रैपर का उपयोग करता है और इनपुट को हेडर फ़ाइल में बदला जा सकता है (आवरण का कारण इतना है कि हम बाइट्स देख सकते हैं)।


लेगिट टीआईओ हैकिंग: पी
लीक

@LeakyNun मैंने BF के लिए रैपर का उपयोग किया ।
user41805

1
मैंने कहा कि यह वैध है।
लीक नून

क्या इस तरह से अन्य TIO भाषाओं में इनपुट करने का कोई तरीका है? SMBF की तरह?
mbomb007

@ mbomb007 आप अपने रैपर का उपयोग करके अन्य भाषाओं के लिए कर सकते हैं। यहाँ SMBF
user41805

2

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

s=>n=>s[n]

0-आधारित अनुक्रमण का उपयोग करता है।

-1 बाईट थैंक्स टू @ लीकी नन

f=
s=>n=>s[n]
console.log(f("abcde")(0));
console.log(f("abcde")(1));
console.log(f("a != b")(2));
console.log(f("+-*/")(3));
console.log(f("314159")(4));


1
आप s=>i=>s[i]एक बाइट को बचाने के लिए करी का उपयोग कर सकते हैं
लीक नून

1
हर बार जब मैं इस तरह से उत्तर देखता हूं तो यह मुझे गुस्सा दिलाता है क्योंकि मुझे पता है कि सी # संस्करण हमेशा अंत में अर्ध उपनिवेश के लिए एक बाइट लंबा होता है। और यह वास्तव में यहाँ मामला है
TheLethalCoder

2

> <> , 13 + 1 = 14 बाइट्स

-vइनपुट लेने के लिए ध्वज के लिए +1

:?!\i~1-
io;\

मेरे बारे में मुझे सूचित करने के लिए @steenbergh को धन्यवाद-vझंडे के और मुझे 3 बाइट्स बचाने !

कमांड लाइन तर्क के साथ सूचकांक को इनपुट करें -v [index] (0-अनुक्रमित) के इनपुट करें और स्टड के माध्यम से स्ट्रिंग इनपुट करें।

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

व्याख्या

स्टैक शीर्ष पर सूचकांक के साथ शुरू होता है।
:इसकी नकल करता है।
?यदि सूचकांक 0. है तो अगले वर्ण को अनदेखा करता है (इसे स्टैक से रोकना)
यदि यह शून्य है, तो \नीचे जाने की दिशा को दर्शाता है। फिर, यह अगले के साथ दाईं ओर परिलक्षित होता है \। यह चारों ओर लपेटता है और iएक चरित्र को निष्पादित करता है , oइसे निष्पादित करता है और ;निष्पादन को रोक देता है।
यदि नहीं, !तो अगले निर्देश को छोड़ देता है, इसलिए यह नीचे नहीं जाता है।
i~एक चरित्र इनपुट और फिर तुरंत इसे त्याग देता है।
1धक्का 1. सूचकांक से
-घटाता 1है, इसलिए इनपुट में एक चरित्र का उपभोग किया जाता है और सूचकांक को घटा दिया जाता है। कार्यक्रम वापस करने के लिए चारों ओर छोरों :


1
नहीं है -v <x>कमांड लाइन पैरामीटर, जो पकड़ करने के लिए ढेर initialises <x>कार्यक्रम प्रारंभ पर। इसे ऑनलाइन
आजमाएं

2

गाजर , 16 बाइट्स

$^//.{#}/S1//.$/

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

इनपुट प्रारूप इस प्रकार है:

string
index

और कार्यक्रम 1-अनुक्रमित है।

व्याख्या

गाजर के कई वैश्विक चर हैं, प्रत्येक प्रकार के लिए एक: स्ट्रिंग, फ्लोट और सरणी (जल्द ही लागू होने वाले अन्य)। कार्यक्रम स्ट्रिंग-मोड में शुरू होता है, जहां सभी ऑपरेटर वैश्विक स्ट्रिंग चर को प्रभावित करेंगे। और मैं इन चर को "स्टैक" कहता हूं।

(उदाहरण इनपुट: abcdef\n3)

$                          Get the first line of the input and set the stack-string to this value
^                          Exit caret-mode
                           stack-string = "abcdef"
/                          Operator (behaves differently depending on the argument)
 /.{#}/                     And the argument to this operator is a regex, so this program gets the matches of this regex into the stack-array
  .                          Any character
   {#}                       Pops a line from the input. So now this evaluates to # of any character where # is the second line of the input (in this case, 3)
                           stack-array = ["abc"]
                           And now we just need to get the last character in this string, but first
S1                         Join the array on the number 1 and set this to the stack-string. Because the array only contains one element, the number 1 does not appear in the stack-string.
                           stack-string = "abc"
/                          Operator; because the argument is a regex, this retrieves the matches of the regex:
 /.$/                       Get the last character in the string
                           stack-array = ["c"]

अब यह एक तत्व सरणी देता है जिसमें लंबाई एक की स्ट्रिंग होती है, लेकिन इसे वेबसाइट में एक स्ट्रिंग के रूप में दिखाया गया है।

अगर हम वास्तव में एक स्ट्रिंग के रूप में परिणाम देना चाहते थे, तो हम S","अंत में आसानी से कर सकते थे , लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि आउटपुट अभी भी दुभाषिया पर समान दिखता है।


1

बैच, 32 बाइट्स

@set/ps=
@call echo(%%s:~%1,1%%

एसटीडीआईएन sसे पढ़ता है और nकमांड-लाइन पैरामीटर के रूप में लेता है ।


1

GolfScript , 7 4 बाइट्स

~1/=

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

मैं गोल्फस्क्रिप्ट में चूसता हूं, इसलिए मैं मार्टिन एंडर की मदद को महत्व देता हूं ।


की कोई आवश्यकता नहीं है [
मार्टिन एंडर

लेकिन सामान्य तौर पर यदि आप स्ट्रिंग्स से वर्ण चाहते हैं, तो आप कोड बिंदु को वापस बदलने के बजाय पहले स्ट्रिंग को विभाजित करेंगे:~1/=
मार्टिन एंडर

@MartinEnder और वह कैसे आप ऐलिस मारा ...
एरिक Outgolfer

1

टर्टल , 9 बाइट्स

!?:[*l+].

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

स्पष्टीकरण:

सबसे पहले, टर्टलर्ड ग्रिड आधारित है, कछुए की चीज के साथ। ग्रिड कोशिकाएं हैं कछुआ बाएं, ऊपर, नीचे और दाएं घूम सकता है, और ग्रिड कोशिकाओं पर चीजें लिख सकता है।

[the first grid cell the turtle starts on is marked with a *]
!         input the string into the string variable

 ?        input the number into the number variable

  :       this command takes the number variable and moves right that many.
          hence this moves right by the amount inputted

   [*  ]  this is an `until` loop. the * there means that `until` the turtle ends the loop
          on a grid cell with * written on it (that is, the first cell), it will execute
          the code inside again and again

     l+   the code inside the while loop. the `l` moves the turtle left, and the +
          increments the string pointer. the string pointer is used with the string var;
          when you want to write something from the string, you use `.`, which writes
          the pointed char. the pointed char is the n-th character of the string, n being
          the value of the string pointer. this code will execute until the l moves
          the turtle back on to the origin cell. since we moved right by the number
          inputted, this will increase the string pointer (which starts at 1)
          by the amount inputted.

       .  write the pointed char, which was dealt with in the previous comment.
          if 0 is inputted, turtle stayed on the origin square, and executed none
          of the loop, and turtle writes the first char of string input.
          if 1 is inputted, turtle moved one right, moved one left and incremented
          string pointer once, which means the second char is written. and so on.


          [the char of input has been written over the origin square]
          [implicitly the grid is outputted, which has spaces and blank lines taken out]
          [this is the requested char outputted, plus an unavoidable trailing newline
          due to how I made the interpreter. sue me]

1

लौंग, ३

nth

: P जब आप इसके लिए बिल्ट-इन कर सकते हैं तो आप क्या कर सकते हैं ? यह सूची, वैक्टर, तार और अनुक्रम पर काम करता है। उपयोग किए गए डेटाटाइप के आधार पर यह या तो O (1) या O (n) है।



1

डायविल , 4 बाइट्स

_[_]

एक अनाम फ़ंक्शन बनाता है जो एक लेता है Stringऔर एक intरिटर्न देता हैchar

उपयोग:

let f: (String, int) -> char = _[_]
print f("abc", 1) // b




1

गणितज्ञ, 18 बाइट्स

#~StringTake~{#2}&

बुनियादी समाधान, लेकिन दुर्भाग्य से फ़ंक्शन का नाम काफी लंबा है।


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