자바 스크립트 : 1의 10x10 배열 만들기


18

분명히이 과제는 별도의 함수와 라이브러리를 사용하는 것이 쉽지 않으므로 허용되지 않습니다.

코드는 ECMAscript 사양을 준수해야하며 (모든 사양에 따라 다름) 브라우저 별 답변이 없습니다.

어레이는 인스턴스화 한 후에 액세스 할 수 있어야합니다.

지금 당장 보류 할 답변이 있습니다.

참고 : 이 과제는 자바 스크립트에서 다차원 배열을 만드는 것이 불편하기 때문에 자바 스크립트에만 해당됩니다.


저는 57 자입니다. 이것이 좋은 점수입니까?
John Dvorak

Ok, 확실히 :-)
John Dvorak

15
이 멋진 1x1 10의 배열을 원하지 않습니까? [10]
kojiro

8
그럴까요 [[10]]?
yingted

답변:


10

자바 스크립트 ES6, 30

(x=i=>Array(10).fill(i))(x(1))

행동하는 ES6 :)


2
안녕하세요,이 질문은 2 살입니다. 더 최근의 질문에 대답하기 위해 JS 코드 골프 기술을 더 잘 사용하는 것이 좋습니다.)
George

6
@George 나는 오래된 도전에 대답하는 데 아무런 문제가 없다고 생각합니다. (어떤 도전 과제 작성자는 도전 과제의 연령에 관계없이 새로운 우승자가 함께 오면 허용 된 답변을 업데이트 할 것입니다.)
Martin Ender

2
MartinBüttner @이 답변이 문제보다 (이 : 2015 년 온) ES6가 어리다로 인정되기에 elligible하지 않고, Array.fill는 ()는 :) ES6입니다
Katenkyo

다른 ES6 답변도 보았 기 때문에 방금 답변했습니다. 나는 이것에 문제가 있다고 생각하지 않습니다. 저자는 자신의 질문을 업데이트하고 다른 사람들은 위의 문제를 해결하는 여러 가지 방법을 활용할 수 있습니다.
Afonso Matos 2016 년

ES6는 초안이 실제로 동결되기 오래 전에 (즉, 며칠 전인 2015 년) 승인되었습니다. 그것이 정확한지 확실하지 않습니다.
Optimizer

27

자바 스크립트, 34 바이트

for(r=[b=[i=10]];i--;r[i]=b)b[i]=1

행을 참조로 동일하게 만드는 것은 분명하기 때문에 그 사실에 의존하는 것이 좋습니다. 이를 통해 행과 동시에 테이블을 작성하여 하나의 for-loop를 제거 할 수 있습니다. 자, 여기 새로운 참가자가 있습니다.

루프 도중 r[0]b[0]덮어 쓰기 때문에 가비지를 포함 할 수 있습니다. 이를 통해 쉼표를 제거 할 수있는 또 다른 무료 실행 슬롯이 제공됩니다. 안타깝게도 r=b=[]그렇게하지 않을 것입니다.

또한 확장 성이 뛰어나고 (99x99는 여전히 34 바이트 임) ES5가 필요하지 않습니다 (새로운 기능은 굉장히 긴 이름을가집니다). 그리고 보너스로 읽을 수 없습니다 :-)


3
아름다운. 굉장히 아름답다.
Briguy37

1
젠장, 내가 함께 끝났다 c=[b=[i=10]];while(i--)b[i]=c,c[i]=1. 알고 있어야합니다 !!!
mowwwalker

19

ECMAScript 6 ~ 33 자

x=(y=[..."1111111111"]).map(x=>y)

"1"의 10x10 배열을 출력합니다.

이것은 문자열 "1111111111"에 모든 필수 속성이 배열 인 것처럼 취급되어야한다는 사실을 남용하므로 스프레드 연산자 ...를 사용하여 문자열을 문자 배열로 변환 한 다음 배열의 복사본에 매핑 할 수 있습니다. "원본"을 참조하는 각 요소.

또는 변수 이름이 하나만있는 경우 (35 자) :

x=(x=x=>[..."1111111111"])().map(x)

또는 추가 혼동 (45 자)

x=[];x[9]=x;x=[...x].map(y=>[...x].map(x=>1))

또는 (43 자)

y=y=>[...x].map(x=>y);x=[];x[9]=x;x=y(y(1))

...운영자 의 좋은 학대 !
nderscore

13

44 바이트

for(a=[i=10];i;)a[--i]=[1,1,1,1,1,1,1,1,1,1]

이전 버전:

for(a=i=[];i^10;)a[i++]=[1,1,1,1,1,1,1,1,1,1]

매우 영리한 업데이트!
Shmiddty

for (a = [i = 9]; i;) a [i-] = [1,1,1,1,1,1,1,1,1,1]
AmericanUmlaut

1
작동하지 않는 @AmericanUmlaut
복사

1
내가 좋아 ^하는!=
John Dvorak

13

45 자

x=[a=[1,1,1,1,1,1,1,1,1,1],a,a,a,a,a,a,a,a,a]

각 요소는 동일한 배열을 가리 키지 만 사양에는 이에 대한 언급이 없습니다!


4
사양에 따르면 "인스턴스화 후 어레이에 액세스 할 수 있어야합니다." . 나는 당신이 x=처음에 여분을해야한다는 것을 의미하는 것 같아요
Cristian Lupascu

그럼에도 불구하고 아주 좋은 해결책 (+1)
Cristian Lupascu

값을 변경하면 모든 배열에 반영되지만 그렇게 실용적이지는 않습니다.
가브리엘 페트리 올리

7

자바 스크립트, 51

a=[];for(i=10;i;i--,a.push([1,1,1,1,1,1,1,1,1,1]));

또는 모든 인덱스가 동일한 배열을 가리 키도록 허용 된 경우 :

자바 스크립트, 41

a=[1,1,1,1,1,1,1,1,1,1];a=a.map(a.sort,a)

모든 지수는 이제 동일한 열을 가리키며, 이는 아마도 원치 않는 것입니다. (보십시오 a[0][1] = 5; console.log(a[1][1])).
복사

그래, 나는 그것을 보지 못했다. 내 답변을 업데이트했습니다.
grc

6

자바 스크립트, 45 44 바이트

나는 지금까지 최고입니다. (아직 시도 중).

x=[];while(x.push([1,1,1,1,1,1,1,1,1,1])-10);

더 짧습니다 (멜라 콤 감사합니다!)

for(x=[];x.push([1,1,1,1,1,1,1,1,1,1])-10;);

참고 for거의 항상하는 것이 바람직하다 while골프를 할 때. 기본 문장의 길이는 같지만 ( while()vs for(;;)) for더 유연합니다. 이 경우, x=[]의 이니셜 라이저에 넣고 for한 문자를 저장할 수 있습니다.
mellamokb

@mellamokb, 팁 주셔서 감사합니다 :-)
Brigand

5

자바 스크립트, 47

내 원래 솔루션을 이겼으므로 이제 게시하겠습니다.

for(a=[],i=10;i--;a[i]='1111111111'.split(''));

불행히도, 0x3FF.toString(2)단순히 문자열을 나열하는 것만 큼 효율적이지는 않습니다. 이는 정적으로 배열을 선언하는 것만 큼 효율적이지는 않습니다.

이런 식으로 한 캐릭터를 면도 할 수 있습니다 ( 46 ) :

for(a=[],i=10;i--;a[i]=[1,1,1,1,1,1,1,1,1,1]);

다음과 같이 2자를 더 저장할 수 있습니다. ( 44 )

for(a=[i=10];i--;)a[i]=[1,1,1,1,1,1,1,1,1,1]

JS 1.8 함수 표현식 클로저를 사용하는 또 다른 44 바이트 솔루션 (FF 만 atm) :

x=(x=[1,1,1,1,1,1,1,1,1,1]).map(function()x)

1
당신은 초기화하여 하나 개의 문자를 저장할 수 있습니다 i에서 a이 같은 :a=[i=10]
codeporn

4

자바 스크립트, 57 바이트

r=eval("["+(A=Array(11)).join("["+A.join("1,")+"],")+"]")

골프 전 :

a=Array(11).join("1,");
b=Array(11).join("["+a+"],")
c=eval("["+b+"]")

참고 : ES5가 필요하므로 IE에서 많이 기대하지 마십시오.


와! 나는 썼다 eval('a=['+(b=Array(11)).join('['+b.join("1,")+'],')+']'). 다른 인용 부호와 eval 안에 변수를 갖는 것 외에도 이것들은 정확히 같습니다
mowwwalker

2
a=eval("["+Array(11).join("[1,1,1,1,1,1,1,1,1,1],")+"]")has 56
yingted

3

54

이것은 이미 두들겨졌지만 여기 내 해결책이 있습니다.

function x(){return[1,1,1,1,1,1,1,1,1,1]}x=x().map(x)

화살표 함수는 JavaScript 골프에 흥미로운 일을합니다. 이제 나는 단지 내장을 사소하게 만드는 방법을 알아낼 수 있다면.
kojiro

접근 x=하기 전에 x().map(또는 y=등) 삽입해야 합니까?
Shmiddty

@Schmiddty 네, 업데이트되었습니다.
kojiro

3

39 바이트

ECMAScript 7에서 배열 이해 사용 :

x=[x for(y in x=[1,1,1,1,1,1,1,1,1,1])]

ES6에는 배열 이해가 없으며 ES7 제안입니다.
Afonso Matos 2016 년

이 대답을 할 당시 @afonsomatos는 여전히 ES6 초안의 일부였습니다. 그것은 지금 업데이트됩니다 :)
nderscore

교체 [1,1,1,1,1,1,1,1,1,1]Array(10).fill(1)면도 4 개 문자.
Shmiddty 2016 년

2

56 자

오히려 긴 대답이지만 100x100 등에 더 좋습니다.

for(a=[[i=k=0]];++i<100;m?0:a[k=i/10]=[1])a[k][m=i%10]=1

2

자바 스크립트, 36 자 (ECMA 6)

(a=[b=[]]).fill(b.fill(a[9]=b[9]=1))

브라우저 (Ubuntu의 Firefox)와 Codecademy Javascript 인터프리터에서 테스트되었습니다.


2

ES6, 54

가장 짧지는 않지만 이미 존재하는 것에 대해 다른 접근 방식으로 갈 것이라고 생각했습니다.

a=(''+{}).split('').slice(0,10).map(_=>a.map(_=>1))

"[object Object]"
문자열로 객체 캐스트 문자열을 문자로 분할 [ "[", "o", "b", ... "]"]
10의 슬라이스 만 가져 오기 1의 슬라이스
결과를 초기 슬라이스에 맵핑하십시오.


어디서 테스트 할 수 있습니까? 내 FF에서 제대로 작동하지 않습니다.
Qwertiy

그러나 a이미 존재하는 버전 이기 때문에 일부 parens을 놓쳤습니다 . 업데이트 된 버전은 FF 및 노드에서 --harmony 플래그와 함께 작동해야합니다.
Dan Prince

이제 올바른 배열을 반환하지만 변수에 할당되지 않았습니다.
Qwertiy

1

재미를 위해 61

eval("r=["+("["+(Array(11).join("1,"))+"],").repeat(11)+"]")

0

자바 스크립트 -64 63 59 자

for(var a=b=[],i=100;i-->0;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}

for(var a=b=[i=100];i-->0;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}

배열에서 반복자를 숨겨서 하나의 문자가 저장되었습니다.

for(a=b=[1],i=100;i--;b[i%10]=1)if(i%10==0){a[i/10]=b;b=[]}

Jans 제안으로 일부 문자를 저장했습니다.

읽을 수있는 버전 :

for(var a = b = [i = 100]; i-- > 0; b[i % 10] = 1) {
  if(i % 10 == 0) {
    a[i / 10] = b;
    b = [];
  }
}

예, 가장 짧은 솔루션은 아니지만 기성품 [1,1,1,1,1,1,1,1,1,1]배열 을 사용하지 않는 또 다른 방법 입니다.


1
변경 i-->0i--. "downto"연산자는 훌륭하지만 실제로 필요한 것은 아닙니다. ==0두 비트로 깎을 수도 있습니다. 또한 제외하십시오 var. 일반적으로 유용하지만 여기서 4 개의 쓸모없는 바이트는 받아 들일 수 없습니다.
John Dvorak

0

자바 스크립트 69 자 (현재)

b=[]
a=[]
for(i=100;i-->0;){
a.push(1)
if(i%10===0){b.push(a);a=[]}
}

0

자바 스크립트 73

function h(){s="1111111111",r=[10],i=-1;while(++i<10){r[i]=s.split("");}}

1
r=[10],즉시 덮어 쓰는대로 아무 작업도 수행하지 않습니다 r[0]. 선언 할 필요는없고 s그냥 할 수 "1111111111".split("")있지만 22 자이지만 [1,1,1,1,1,1,1,1,1,1]21 자입니다.
MT0

0

자바 스크립트 ES6, 53

x="1".repeat(100).match(/.{10}/g).map(s=>s.split(""))

그러나 배열의 것은 문자열입니다 :)


0

자바 스크립트 ES6, 53

x=eval("["+("["+"1,".repeat(10)+"],").repeat(10)+"]")

0

자바 스크립트 (ES6), 35 바이트

A=Array(10).fill(Array(10).fill(1))

1
변수 설정은 승인 된 출력 방법이 아닙니다. 그러나 f=>Array(10).fill(Array(10).fill(1))36 바이트 (익명 함수 정의)를 수행 할 수 있습니다 .
Rɪᴋᴇʀ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.