指定されたインデックスの文字列の要素


13

文字列snの長さよりも負でない数sを指定すると、のn-番目の位置にある文字を出力しsます。

0インデックスと1インデックスが許可されます。1-indexingの場合、n正で、の長さ以下ですs

s 印刷可能な文字のみで構成されます。

合理的な入力/出力が許可されます。標準の抜け穴が適用されます。

テストケース(0インデックス付け):

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

テストケース(1-indexing):

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

これはであるため、バイト単位の最短回答が優先されます。


13
これは実際にはプログラミングやゴルフの課題ではないため、これを支持しました。ここで本質的に問われているのは、どの言語が仕事に最も短い組み込み機能を持っているかだけです。
シャギー

15
@Shaggy 2つの数字の追加、数字の素数のテスト、「Hello、World!」の印刷など、他の多くの簡単な課題でも同じです。これらはすぐに使える多くの言語では退屈ですが、独自の実装を展開しなければならないより原始的な言語にとって興味深い課題になる可能性があります。加えて、より複雑なものは通常、これらの言語について尋ねるには多すぎるので、それらのためのアウトレットがあるのは良いことです。些細な挑戦があなたを退屈させたなら、自明でない言語でそれらをやってみてください。
マーティンエンダー

回答:



7

アリス、5バイト

I&IO@

オンラインでお試しください!

通常どおり、順序モードを避けて、ひどい入力形式を使用すると、はるかに短くなります。ここでは、最初の文字のコードポイントが整数入力として使用されます。入力の残りは文字列です。インデックスは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-あなたはそれをxDにしたと思った
スティーブン

@StephenSメタでこのI / O形式を提案したということですか?ええ、私はやりましたが、数値I / Oとのチャレンジで競合するたびに独自の10進整数パーサー/レンダラーを実装しなければならない言語のために、それらを完全にスキップする可能性があります。しかし、10進数を非常に簡単に読み書きできる一部の言語で、代わりにコードポイントを使用する方が短いという不幸な副作用があります。
マーティンエンダー

6

Python、15バイト

str.__getitem__

または

lambda s,i:s[i]

どちらも2つの引数を取ります。文字列とインデックスです。0インデックス付き。


私は両方の方法が同じ長さを持っていることに驚いています。
リーキー修道女

6

Haskell、4バイト

(!!)

0ベースのインデックス付け。使用例:(!!) "Hello" 1-> 'e'





3

アリス、10バイト

/@!O?]&
 I

オンラインでお試しください!

1行目に文字列が、2行目に0から始まるインデックスが必要です。

説明

ビルトインが豊富にあるにもかかわらず、Aliceには文字列インデックスが存在しません。理由は、整数と文字列パラメーターの両方が必要であり、Aliceのすべてのコマンドは厳密に整数から整数または文字列から文字列であるためです。

一般に、整数を必要とする、または結果となる文字列で操作を実行する主な方法は、順序モードでテープに文字列を保存することです。その後、カーディナルモードで整数で操作できます。

/    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
「ビルトインが豊富にあるにもかかわらず、Aliceには文字列のインデックスは存在しません。」> _>
リーキーヌン

1
@LeakyNunそれが悪いと思う場合、文字列の長さを取得する組み込み機能もありません。;)
マーティン・エンダー







2

SILOS、43バイト

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

オンラインでお試しください!

簡単です。


SILOSが帰ってきた
漏れた修道女

1
ええ、私は、ウィンドウの読み込み画面1を含めて、できるだけ多くの呼び出しに答えようとしています。グラフィカルな出力とライブラリの点で私はポイントが好きですが、圧縮スキームを開発して競争力を高めたいと思っています。基本的に、コンパイルするint []は、バイトストリームを読み取ることで生成できます。@LeakyNun
ローハン・ジュンジュンワラ

2

BF、9バイト

,[->,<]>.

インデックスは、charの文字コードを介して取得されます(Aliceの送信など)。それに続いて、文字列があります。

オンラインでお試しください!

TIOリンクはBashラッパーを使用し、ヘッダーファイルで入力を変更できます(ラッパーの理由は、バイトを確認できるようにするためです)。


合法的なTIOハッキング:p
リーキー修道女

@LeakyNun BFラッパーを使用しました。
KritixiのLithos

1
私はそれが合法だと言いました。
リーキー修道女

そのような他のTIO言語への入力を行う方法はありますか?SMBFが好きですか?
mbomb007

@ mbomb007ラッパーを使用することで、他の言語でもこれを行うことができるはずです。ここでのラッパーだSMBFは
KritixiのLithos

2

JavaScript、11 10バイト

s=>n=>s[n]

0ベースのインデックスを使用します。

@Leaky Nunのおかげで-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
このような回答が表示されるたびに、C#バージョンがセミコロンの最後に常に1バイト長くなることがわかっているため、イライラさせられます。そして、それはまさにここです
-TheLethalCoder

2

> <>、13 + 1 = 14バイト

+1を-v入力するフラグ

:?!\i~1-
io;\

フラグについて通知し、3バイト節約してくれた@steenberghに感謝し-vます!

コマンドライン引数でインデックスを入力します -v [index](0-indexed)を使用してインデックスを入力し、stdinを介して文字列を入力します。

オンラインでお試しください!

説明

スタックは、先頭のインデックスから始まります。
:それを複製します。
?インデックスが0の場合、次の文字を無視します。(スタックからポップする)
ゼロの場合、\下に向かう方向を反映します。次に、次で右に反映され\ます。i文字をラップして実行し、文字をo入力して出力し、;実行を停止します。
そうでない場合!は、次の命令をスキップするため、ダウンしません。
i~文字を入力し、すぐに破棄します。
11をプッシュします。インデックスから
-減算1するため、入力の1文字が消費され、インデックスがデクリメントされます。プログラムはに戻ります:


1
-v <x>コマンドラインパラメータがあり、<x>プログラムの起動時にスタックを初期化します。オンラインで試してください
-steenbergh

2

ニンジン、16バイト

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

オンラインでお試しください!

入力形式は次のとおりです。

string
index

また、プログラムは1からインデックス付けされています。

説明

ニンジンには、文字列、浮動小数点数、配列(他はまもなく実装される予定)ごとに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"]

これにより、長さ1の文字列を含む1つの要素の配列が返されますが、Webサイトでは文字列として表示されます。

結果を文字列として提供したい場合はS","、最後に簡単に実行できますが、インタプリタでは出力が同じように見えるため、問題ではありません。


1

バッチ、32バイト

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

sSTDINから読み取りn、コマンドラインパラメーターとして受け取ります。


1

GolfScript7 4バイト

~1/=

オンラインでお試しください!

私はGolfScriptを吸い込むので、Martin Enderの助けを大事にします。


の必要はありません[
マーティンエンダー

あなたは、文字列から文字をしたい場合でも、一般的に、あなただけの代わりに、コードポイントバックの変換の最初の文字列を分割:~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

Clojure、3

nth

:Pこれが組み込まれている場合、何ができますか?これは、リスト、ベクター、ストリング、およびシーケンスで機能します。使用されるデータ型に応じて、O(1)またはO(n)のいずれかです。



1

Dyvil、4バイト

_[_]

Stringとを取り、intを返す匿名関数を作成しますchar

使用法:

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





弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.