내 가치는 어디에 있습니까?


20

My 상사는 지금 그 배열의 항목을 검색 할 수있는 메커니즘을 구현하기 위해 저를 원하고, 그에게 그 값이 발생하는 인덱스 / 색인을 제공합니다.

당신의 작업 :

배열과 값 (String, Integer, Float 또는 Boolean)을받는 프로그램이나 함수를 작성하고 값이 발생하는 배열의 인덱스를 반환합니다 (0 또는 1 색인 중 원하는 쪽). 값이 배열에 없으면 빈 배열을 반환합니다.

입력:

A에 존재하거나 존재하지 않을 수있는 어레이 A 및 값 V

산출:

V가 A에서 발생하는 지수 또는 V가 A에서 발생하지 않으면 빈 배열을 포함하는 배열입니다.

테스트 사례 :

테스트 사례는 0을 기준으로합니다.

12, [12,14,14,2,"Hello World!",3,12,12]         -> [0,6,7]
"Hello World", ["Hi", "Hi World!", 12,2,3,True] -> []
"a", ["A",True,False,"aa","a"]                  -> [4]
12, [12,"12",12]                                -> [0,2]

채점 :

이것은 이므로 바이트 단위의 최저 점수가 이깁니다.


1
많은 언어가 하나 이상의 유형을 가진 배열 또는 목록을 지원하지 않기 때문에 주어진 배열 은 그 유형 중 하나만 (즉, 혼합 유형을 가진 배열은 없음) 가정한다고 가정 할 수 있습니다.
flawr

1
물론, @flawr. 언어에 필요한 경우 배열은 확인할 값과 동일한 유형의 값으로 만 구성되어 있다고 가정 할 수 있습니다.
그리폰 (Gryphon)-Reinstate Monica

2
모든 배열은 1D입니다. 인수?
Adám

1
@KevinCruijssen 배열을 검색하는 것을 의미했습니다. 다중 D 일 수 있습니다.
Adám

1
괜찮아. 그리고 아직 1 바이트로 할 수있는 언어가 없다는 것에 놀랐습니다!
Zacharý

답변:


10

Pyth , 2 바이트

인덱스가 0입니다.

xE

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오.


설명

xEQ  - Full Program. Takes Input from standard input. Q means evaluated input and is implicit at the end of the program.

x   - Get all the indexes of x in y
 E  - Evaluated Input #2 - The value
  Q - The list - Evaluated Input #1

당신은 처음이 아닌 모든 사건을 반환해야합니다.
아웃 골퍼 Erik 11

@EriktheOutgolfer가 수정되었습니다. 그것들을 역순으로 가져 가십시오.
Mr. Xcoder

1
Pyth는 확실히 그 일을위한 최고의 도구입니다 : P
Mr. Xcoder

7

MATL , 2 바이트

mf

m인수는 두 개의 인수를 사용하고 배열의 각 요소가 다른 인수와 같은지 확인하고 배열 f의 정확한 항목의 색인을 반환합니다.

온라인으로 사용해보십시오!


제안 된 테스트 사례에서는 작동하지 않는 것으로 보이며 Octave 솔루션과 동일합니다.
Cinaski

문자열 배열을 올바르게 처리 하는 ismember대신 사용해야합니다 =. mf
Suever

@LuisMendo 우리는 혼합 입력을 고려할 필요가 없습니다. OP의 설명을 참조하십시오!
flawr

@flawr 아, 챌린지 텍스트가 아닌 주석에만 있습니까? :-/
Luis Mendo

OP가 아니라 나에게 OP를 요청해야 할 것 :)
flawr

7

파이썬 3 , 45 바이트

@EriktheOutgolfer 및 @Chris_Rands 덕분에 -3 바이트

lambda y,x:[i for i,j in enumerate(x)if j==y]

테스트 스위트.

오늘 나는 배웠다 enumerate(x) == zip(range(len(x)),x).


파이썬 3 , 47 바이트

lambda n,l:[x for x in range(len(l))if l[x]==n]

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오.


사용 enumerate()바이트의 몇 가지 아래를 가져다
Chris_Rands

@Chris_Rands 더 길어졌습니다.
Mr. Xcoder

3
lambda n,l:[x for x,y in enumerate(l)if y==n]
Outgolfer Erik

나는 @EriktheOutgolfer 말한 의미
Chris_Rands

1
@JonathanAllan 고정.
Mr. Xcoder

6

R (+ pryr), 20 바이트

pryr::f(which(a==b))

어떤 기능으로 평가

function (a, b) 
which(a == b)

하나는 어디 a를위한 모양과에 값이 될 수 있습니다 b벡터, 또는 다른 방법으로 주위. 길이가 같지 않은 두 벡터 (R의 길이 1 벡터로 계산되는 단일 값)가있는 경우 R은 더 긴 것의 길이와 일치하도록 더 짧은 것을 줄입니다. 그런 다음 평등이 확인됩니다. 논리 벡터를 생성합니다. which이 벡터가 참인 인덱스를 제공합니다.

온라인으로 사용해보십시오!


6

자바 스크립트, 39 바이트

e=>a=>[...a.keys()].filter(i=>a[i]===e)

f=
e=>a=>[...a.keys()].filter(i=>a[i]===e)

console.log(f(12)([12,14,14,2,"Hello World!",3,12,12]));
console.log(f("Hello World")(["Hi", "Hi World!", 12,2,3,true]));
console.log(f("a")(["A",true,false,"aa","a"])); 
console.log(f(12)([12,14,14,2,"Hello World!",3,12,'12']));

위의 스 니펫은 모든 브라우저에서 작동하지 않을 수 있으므로 여기에 TIO 링크가 있습니다.


6

자바 스크립트 (ES6), 44 43 바이트

44가 여전히 똑같습니다. 44; (

v=>a=>a.map((x,i)=>x===v&&++i).filter(x=>x)

@Arnauld 덕분에 1 바이트 절약

let f=
v=>a=>a.map((x,i)=>x===v&&++i).filter(x=>x)
;

console.log(f(12)([12,14,14,2,"Hello World!",3,12,12]));         // => [1,7,8]
console.log(f("Hello World")(["Hi", "Hi World!", 12,2,3,true])); // => []
console.log(f("a")(["A",true,false,"aa","a"]));                  // => [5]


당신은 만들 수 ===정상적인 ==한 바이트 이하 하시나요? 나는 문자 그대로 같은 것, 변수 이름 및 모든 haha를 생각해 냈습니다.
kamoroso94

4
===구별 할 필요가 12에서"12"
크리스토프

1
@ kamoroso94 아니오, 여기에 이유가 있습니다.
Pureferret

5

05AB1E , 4 바이트

QāsÏ

온라인으로 사용해보십시오!

1- 색인.


나는 우리 모두가 입력에 엉망이라고 생각합니다. 12그리고 [12,'12']그는 구체적 유형이 아닌 언어가 유형에 신경 쓰지 않는 것이 냉담하다고 말하지 않는 한
매직 문어 Urn

나는 실제로 05AB1E에서 12'12'다르게 행동하기 때문에 ≠ ≠ 0 이라고 생각합니다 .
아웃 골퍼 에릭 14

정수 유효성에 대해 테스트하고 싶다면 is_alpha (a)and를 사용하여 60 바이트와 같을 것입니다 is_number (d). 그러나 우리는 달리 말할 때까지 우리가 유효하다고 가정 할 수 있습니다.
매직 문어 Urn

5

C #, 88 72 바이트

using System.Linq;a=>o=>a.Select((i,n)=>o.Equals(i)?n:-1).Where(n=>n>=0)

@LiefdeWen 덕분에 16 바이트를 절약했습니다.

온라인으로 사용해보십시오!


놀랍습니다, 나는 왜 왜 효과 i==o가 없는지 알아 내려고 노력 했습니다.
LiefdeWen

3
@LiefdeWen 박스형 값 유형.
TheLethalCoder

72 바이트using System.Linq;a=>b=>a.Select((x,i)=>x.Equals(b)?i:-1).Where(x=>x>=0)
LiefdeWen

@LiefdeWen 니스 하나, 나는 그것을 바꿀 생각하지 않았을 것입니다.
TheLethalCoder

많이 절약 할 수 있습니다 :) : tio.run/…
digEmAll


3

하스켈 , 41 39 바이트

v!l=fst<$>(filter((==v).snd)$zip[1..]l)

온라인으로 사용해보십시오!

@flawr 덕분에 2 바이트 절약

Haskell은 정적으로 입력되었으므로 테스트 사례를 실행하기 위해 약간의 해결 방법을 사용해야했습니다.


더 이상 해결 방법이 필요하지 않습니다. OP 의견을 참조하십시오.
flawr

1
v#l=...대신 연산자 를 정의 f v l=...하면 2 바이트를 절약 할 수 있습니다.)
flawr

@flawr 나는의 아이디어를 가지고 v!l=...있었지만 받아 들여 지면 타협 하지 않았다. 답을 편집하겠습니다. 감사!
jferard

1
map일부 filter표현 에 사용 하는 것은 종종 목록 이해력이 더 짧을 수 있음을 나타내는 지표입니다 v!l=[i|(i,x)<-zip[1..]l,x==v].
Laikoni

거기에 내장도하지만, 불행히도입니다 이상 : Laikionis 제안보다는
flawr은

3

껍질 , 5 바이트

`fNm=

온라인으로 사용해보십시오! 1- 색인.

설명

       -- implicitly input a value v and a list L
   m=  -- map "equals v" over the list L, resulting in a list of truthy and falsy values
`fN    -- filter the natural numbers N by discarding the numbers at falsy positions 
          and keeping the ones at truthy positions

그래도 문자열이있는 배열에서 작동합니까?
officialaimm

1
@officialaimm 문자열 만 포함 된 목록에서 작동 합니다. 온라인으로 사용해보십시오! 혼합 유형 목록은 Haskell과 Husk에서 지원하지 않지만 OP는 주석에서이를 명시 적으로 허용했습니다.
Laikoni

Husk에 대한 설명서가 있습니까?
flawr

@flawr 예, github 페이지의 wiki에 있습니다 : github.com/barbuz/Husk/wiki
Laikoni

@flawr 일반적으로 Husk 문서에 대해 궁금한 점이 있으면 채팅방에 참여하십시오 !
Zgarb



3

Google 스프레드 시트, 101 바이트

=IfError(Join(",",Filter(Column(Offset(A1,0,0,1,Counta(Split(B1,",")))),Exact(Split(B1,","),A1))),"")

VA1어레이 A내의 B1각각의 엔트리와는 콤마로 분리된다. 널 전체는 허용되지 않습니다 (아래 5 행은 어떤 일이 발생하는지 보여줍니다).

결과

설명:

Offset(A1,0,0,1,Counta(Split(B1,",")))높이가 1 행이고 너비가 최대 인 범위를 반환합니다 A1.

=IfError(Join(",",Filter(Column(~),Exact(Split(B1,","),A1))),"")의 값 A1이 정확히 각 값에 속하는지 여부에 따라 해당 범위의 열 번호를 필터링하고 B1쉼표로 구분 된 목록에 모두 연결합니다.



3

APL (Dyalog Unicode) , 2 바이트 SBCS

항목을 왼쪽 인수 ( 하위 배열이 아닌 조회 배열 의 항목 을 찾으려면 스칼라 여야 함 ) 및 오른쪽 배열 로 찾는 조회 배열 을 찾습니다 (최대 15 차원 일 수 있음). 조회 배열의 각 차원 수만큼 요소를 가질 수있는 색인 목록을 리턴합니다.

⍸⍷

온라인으로 사용해보십시오!

ndi 위치

 녹이다


Pyth와 관련이 있다고 말했지만 유니 코드입니다. APL Dyalog Classic에서 SBCS를 사용하기 때문에 2 바이트가 아닙니까?
Mr. Xcoder

@ Mr.Xcoder 가 문자 세트에 없습니다. 그러나 Dyalog는 256 개 미만의 고유 문자를 사용하므로 단일 바이트 일 수 있습니다 . 새 글리프를 추가 할 때 이전 버전과의 호환성이 유지되도록 문자 집합을 변경하지 마십시오.
Adám

아 고마워! (APL / Dyalog의 작동 방식을
모르겠습니다

@ Mr.Xcoder APL은 상용 언어 (골프 언어가 아님)이므로 Dyalog는 기존 가입자에게 특정 의무를가집니다.
Adám

APL은 골프 언어는 아니지만 오픈 소스 APL 구현 (ngn 및 GNU)이 있습니다.
Zacharý

2

배치, 86 바이트

@set i=0
:g
@if "%~2"=="" exit/b
@if %1==%2 echo %i%
@set/ai+=1
@shift/2
@goto g

입력을 명령 행 매개 변수 (값 다음 배열 요소를 개별 매개 변수로)로 사용합니다. 참고 : 문자열 인용은 일치 "1"하지 않는 부분으로 간주됩니다 (예 : 16 바이트).



2

펄 5 , 28 바이트

sub{grep$_[$_]eq$_[0],1..@_}

온라인으로 사용해보십시오!

출력은 1- 색인입니다.
익명의 기능은 Perl에게는 매우 드문 일이지만 생각할 수있는 가장 짧은 것입니다. grep ..., 1 .. @_입력 배열의 인덱스를 반복합니다 (실제로는 마지막 셀을 넘어 한 셀로 이동하지만 중요하지는 않습니다) $_[$_]eq$_[0]. 요소 (의 값이 것들 $_[$_]) 우리는 계속해야 값과 동일합니다 ( $_[0]).


약간 더 길지만 (31 바이트 (30 + -l플래그)), 전체 프로그램 :

$@=<>;$@eq$_&&print$.-1while<>

온라인으로 사용해보십시오!



2

자바 (8) 146 113 112 111 110 108 바이트

import java.util.*;l->o->{List r=new Stack();for(int i;(i=l.indexOf(o))>-1;l.set(i,null))r.add(i);return r;}

대신을 사용하여 @TAsk 덕분에 -2 바이트 . 대신에 -1 바이트를 사용하십시오 . 배열 대신 에 입력 하여 @Jakob 덕분에 -2 바이트 .VectorArrayList
StackVector
ArrayList

0 인덱스

설명:

여기에서 시도하십시오.

import java.util.*;    // Required import for Vector and Vector
l->o->{                // Method with List and Object parameters
  List r=new Stack();  //  Result-list
  for(int i;(i=l.indexOf(o))>=-1;
                       //  Loop as long as we can find the object in the list
    l.set(i,null))     //   After every iteration, remove the found item from the list
      r.add(i);        //    Add the index to the result-list
                       //  End of loop (implicit / single-line body)
  return r;            //  Return the result-List
}                      // End of method

1
시원한! 내가 틀리지 않으면 Vector몇 바이트를 절약 할 수 있습니다. :)
CoderCroc

1
감사합니다! 그 하나를 기억해야합니다. 나는 List+를 ArrayList자주 사용합니다.
Kevin Cruijssen

1
List r=new Vector();작동합니다.
CoderCroc

1
대신 목록을 가져와 1 바이트를 절약 할 수 있습니다. TIO . 별도의 답변을받을 가치가없는 작은 변화처럼 보입니다.
Jakob

변경으로 인해 검색이 중단 null되었지만 괜찮습니다.
Jakob


1

수학, 12 바이트

Position@##&

1- 색인

입력 [배열, 값]

[{12, 14, 14, 2, "Hello World!", 3, 12, 12}, 12]

산출

{{1}, {7}, {8}}


왜 안돼 Position?
hftf

1

하스켈, 29 바이트

e#l=[i|(i,h)<-zip[0..]l,h==e]    

온라인으로 사용해보십시오!


이기종 입력 사례에서 작동합니까? (정수, 문자열, "true"값 등의 혼합).
Kaz

@Kaz : 아뇨. 다형성이며 평등이 정의 된 모든 유형에 대해 작동하지만 모든 목록 요소는 동일한 유형이어야합니다. OP의 의견에 따르면 충분합니다.
nimi

1

Japt , 9 바이트

mȶV©YÄÃf

1- 색인.

그들이로 대체되었습니다 있도록 JAPT 입력은 논리 값을 지원하지 않습니다 01테스트 케이스에서.

온라인으로 사용해보십시오! -Q배열 출력을 형식화 하는 플래그 와 함께 .

인덱스가없는 0 바이트, 11 바이트

l o f@gX ¶V

온라인으로 사용해보십시오!


몇 번 중 하나 가 아니라이 ¥편리 : PI는의 라인을 따라 뭔가를하고 생각했다 m@Y*(X¶V} f,하지만 난 그 인덱스 작동하지 않을 실현하지 않았다 0. 1 인덱싱은 영리합니다.
ETHproductions

1

펄 6 , 21 바이트

{grep :k,*===$^v,@^z}

온라인으로 사용해보십시오!

:k에 부사 grep술어 일치하는 입력 시퀀스의 매칭 키 (인덱스)를 호출하도록 지시 * === $^v.

문자열과 숫자가 동등한 것으로 간주되면 $^v대신 grep 술어를 사용할 수 있습니다 * === $^v.


eqv===동등한 가치를 고려하고자하는 것에 따라 보다 낫습니다 .
Brad Gilbert b2gills


1

TXR 리스프 , 26 바이트

(op where(op equal @@1)@2)

다시 말해서, "인수 2는 어디에서 인수 1과 같은가?"

운영:

1> (op where(op equal @@1) @2)
#<interpreted fun: lambda (#:arg-01-0166 #:arg-02-0167 . #:rest-0165)>
2> [*1 12 #(12 14 14 2 "Hello world!" 3 12 12)]
(0 6 7)
3> [*1 "Hello World" #("Hi" "Hi world!" 12 2 3 t)]
nil

1

클로저, 39 38 바이트

#(filter(comp #{%2}%)(range(count %)))

조금 불분명 한 :) 첫 번째 입력 인수는 vec값 중 하나이고 두 번째 입력 인수는 검색된 값입니다. %인덱스를 값에 매핑하고 세트 #{%2}는 해당 값에 대해 참 (입력 인수 %2) 또는 거짓 nil을 반환 합니다. comp는 이것들을 함께 구성합니다.


1

C 340 362 166 115 바이트

여러분 안녕하세요. 여기 처음입니다. 최적화 된 코드를 작성하려고 시도한 이후로 시도해 보았습니다.

@Rodney-포함시 ~ 39 바이트

@ Zacharý-암시 적 타이핑이있는 7 바이트

0- 인덱싱 .

실행하는 방법 :

@Arnolds 제안에 따라 프로그램은 훨씬 C 친화적 인 방식으로 인수를 취합니다. 이를 통해 파일 크기를 절반 이상 줄입니다.

value [element1 ...] 중괄호는 선택적 인수를 나타내는 다음 순서 로 인수를 전달해야합니다.

의 조건을 충족시키기 위해 제공된 문자열에 이스케이프 된 따옴표를 추가하거나 추가하지 않아도됩니다 12 != "12". 내 시스템에서 이것은 다음과 같은 방식으로 수행 할 수 있습니다

prog-name.exe 12 3 "Hello" 12 4 "12"
Returns [2,4]     < This is incorrect

prog-name.exe 12 3 "\"Hello\"" 12 4 "\"12\""
Returns [2]       < Correct

골프

#define P printf(
b=0;main(int c,char**v){P"[");for(--c;c-1;c--)b|=strcmp(v[1],v[c])?0:P b?",%i":"%i",c-2);P"]");}

언 골프

#define P printf(

//Implicit only works in global(I totally knew this after almost 4 years of C :P)
b = 0;
main(int c,char**v)
{

    P"[");

    //match loop
    //b is used to determine if this is the first iteration. it can be assumed that printf will always return >0
    //subract two from c to get correct index number of match
    for(--c; c-1; c--)
        b |= strcmp(v[1], v[c]) ? 0 : P b ? ",%i" : "%i", c-2);

    P"]");

    return 0;
}

1
사이트에 오신 것을 환영합니다. 여분의 공백이 많이 있습니다. 특히 운영자 주위 i = 0. 이들은 제거 할 수 있습니다. 공백으로 약간 놀아 보는 것이 좋습니다.
밀 마법사

목록을 처리하는 방식 ,12에 따라 [12,14,14,2,"Hello World!",3,12,12]인쇄물 의 첫 번째 인수 와 두 번째 인수 [5,6]는 기술적으로 올바르지 않습니다.
아놀드 파머

@ArnoldPalmer 데이터 유형을 감지하는 데 조금 더 장황하게 보이도록 코드를 업데이트했습니다. 그러나 C에는 JavaScript와 같은 멋진 형식 변환이 모두 없으므로 '숫자'형식의 쉼표가 여전히 취약합니다. 올바른 형식의 입력을 가정하고 방금 떠났습니다.
Marcos

@Marcos 배열의 각 값을 자체 명령 줄 인수로 사용할 수 있습니다. 나는 C에서 골프를 타지 않으므로 규칙이 무엇인지 확실하지 않지만 당신이 그렇게 할 수 있다는 것은 부당하지 않은 것 같습니다. 특히 배열을 목록으로 받아들이면이 문제에 취약 해집니다. 또한 골프 코드에는 여전히 약간의 공백이 있습니다. #include명령문에 공백이 필요하지 않고 strstr(h+i,n)-h ==i추가 공백이 있으며 return-1대신 대신 할 수 있습니다 return -1.
아놀드 팔머

암시 적 선언이 허용됩니까? 나는 당신이 #include진술을 버릴 수 있다고 생각합니다
Rodney
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.