자바 스크립트 왼쪽 패드 골프


27

소개

왼쪽 패드 npm 패키지 fallout 이후에 왼쪽 패드 를 구현하기위한 코드 골프가 있습니다.

왼쪽 패드 기능은 양식에,이 개 기본 인수 및 1 개 추가 인수로 구성 문자열 , 길이 , ( padchar ). padchar이 제공되지 않으면 공백 문자로 표준화 됩니다 . 두 가지 인수로 예를 들어 봅시다.

left_pad("abc", 6)

먼저 문자열의 길이 인 3 을 관찰합니다 . 그런 다음 전체 문자열의 길이가 함수에 지정된 길이에 도달 할 때까지 왼쪽에서이 문자열을 채워야합니다. 이 경우 6 . padchar이 주어지지 않았 으므로 공백으로 채워야 합니다.

   abc

이것은 공백이 3 개인 문자열이고 초기 문자열이며 길이가 6 인 문자열이됩니다. 다음은 padchar를 사용한 예입니다.

left_pad("abc", 6, "-")

위의 예와 동일하지만 공백을 padchar로 바꿉니다. 이 경우 하이픈은 다음과 같습니다.

---abc

작업

주어진 문자열 , 길이 , 그리고 어쩌면 추가 인수 padchar , 출력 왼쪽 패딩 문자열입니다. 길이가 문자열의 길이와 같거나 크다고 가정 할 수 있습니다. padchar은 항상 1 자로 구성됩니다.

테스트 사례

left_pad("string", length, ("padchar")) === "left-padded string"

left_pad("foo", 5) === "  foo"
left_pad("foobar", 6) === "foobar"
left_pad("1", 2, "0") === "01"
left_pad("1", 2, "-") === "-1"

이것은 이므로 바이트 수가 가장 적은 제출이 승리합니다!


13
@ m0sa 여전히 몇 가지 문제가 있습니다. 자바 스크립트에 대한 도전을 제한하는 것은 강력히 권장되지 않습니다. 다른 언어가 이에 참여할 수있는 이유는 없습니다. 사양은 링크를 따를 필요없이 원하는 동작과 허용되는 입력 범위를 설명해야합니다. 세 번째 매개 변수가 어떻게 처리되는지는 명확하지 않습니다.
— xnor

8
나는 "따라서 다른 언어를 사용할 수 없다"고 말하지 않고 자바 스크립트와 관련된 참조가 동기 부여를 위해 만들어 질 수 있다고 확신한다. 최고의 Javascript 항목을 보는 데 특히 관심이 있다면 다른 언어에 대한 도전 과제를 열어두고 현상금을 제공 할 수 있습니다.
— trichoplax

6
단일 언어 질문은 금지되거나 그렇지 않습니다. 금지 된 경우이를 닫으십시오. 허용되는 경우 OP가 원하는대로 질문을 제한하도록합니다.
— Sklivvz

10
@Sklivvz (및 m0sa) 언어 별 문제가 이해되는 경우가 드문 경우가 있습니다. 특히 문제가 처음에 이해가되거나 문제가되는 언어의 고유 한 기능이 필요한 경우에는 더욱 그렇습니다. 그것이 그것들이 허용되는 주된 이유이며, 또한 그것들을 완전히 거부하는 것에 반대하는 이유입니다. 말했다 즉, 어떤 도전을 하지 어떤 언어로 메이크업의 의미를 하나 개의 언어로 제한 할 좋은 이유가 없습니다. 그렇지 않으면 "자바 스크립트에서 배열 정렬", "루비에서 배열 정렬", "파이썬에서 배열 정렬"등의 이점을 얻을 수 있습니다.
— Martin Ender

8
@Sklivvz trichoplax가 말했듯이 이것은 도전에 대한 훌륭한 동기 부여이지만 다른 언어와 마찬가지로 매우 간단한 문자열 처리 작업으로 귀결됩니다. 이 문제는 다른 언어와 비교하여 JavaScript에서 구체적으로 어렵거나 실행 가능하지 않거나 흥미롭지 않습니다. t는 전혀 영향을받지 않았으며, "이 JS 만 아닌 이유는 무엇입니까?"
— Martin Ender

답변:


20

Pyth, 13 11 바이트

+*.xwd-Qlzz

여기에서 시도하십시오 .

STDIN에서 입력을 첫 번째 행의 문자열, 두 번째 행의 길이 및 선택적으로 세 번째 행의 패딩 문자로 가져옵니다.


4
이것은 자바 스크립트 일 뿐이라고 가정합니다.
— MMM

22
챌린지의 @MMM 언어 제한은 보편적으로 싫어하므로 요약을 무시할 것으로 예상됩니다. 아무도 이야기 할 좋아하지 않는다 " 당신이 참여할 수 없습니다."
— xnor


2
남자에게 붙어! 당신은 Doorknob을 간다! 당신의 꿈을 꿈꾸지 마십시오! 그냥 해!
— Mave

4
'중재자가 시민 불복종을하는 사악한 사회입니다!
— Ven

13

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

f=(s,n,p=" ",r=p)=>(r+=s+="")[n]?s:f(r,n,p)

1
당신은 세 번째 매개 변수가 없습니다
— m0sa

@ m0sa 감사합니다.
— Neil

세번째 테스트에 실패했습니다. ;-)
— Sklivvz

1
@Sklivvz Ugh, 그것이 요구 사항을 제대로 읽지 못했을 때 얻는 것입니다.
— Neil

대신에 p+=s2 바이트를 추가하여 만들면 p+=[s]작동합니다.
— Aplet123

7

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

(a,n,c=' ')=>((c+'').repeat(n)+a).substr(-n)

테스트:

> f=(a,n,c)=>((c?c:" ").repeat(n)+a).substr(-n)
< function (a,n,c)=>((c?c:" ").repeat(n)+a).substr(-n)
> f('foo', 5) === '  foo';
< true
> f('foobar', 6) === 'foobar';
< true
> f(1, 2, 0) === '01';
< true
> f(1, 2, '-') === '-1';
< true

함수 선언을 계산할지 확실하지 않으면 이것을 인라인 할 것입니다.


나는 일반적으로 질문이 함수가 아닌 전체 프로그램을 요구하지 않는 한 함수 선언을 계산하지 않는다고 생각합니다.
— Deusovi

slice보다 짧습니다 substr.
— Mama Fun Roll

@Deusovi 맞습니다. 내 말은 내가하지 않을 것입니다 console.log(f("whatever",10, "*")),하지만console.log(("*".repeat(10)+"whatever").substr(-10))
— Sklivvz

7

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

(s,l,c=' ')=>c.repeat(l-s.length)+s

시도 해봐. 나는 이것이 자바 스크립트에서 현재 가능한 가장 짧은 암시라고 생각합니다.


이것은 익명의 기능이 아닌 것을 제외하고 내가하려고했던 것입니다.
— Aplet123

@ Aplet123 컨테스트의 정의에 따르면 이것이 예상되는 것 같습니다. 그것은 단지 기능을 요구하는 것이 었습니다. 이 맥락에서 그것은 무의미하거나 적어도 다른 대답에 기초하여 생각할 것입니다.
— David

5

파이썬 3, 33 31 29 바이트

lambda a,b,x=" ":a.rjust(b,x)

매우 간단합니다. 나에게 상기시켜주는 @xnor 에게 감사한다 str.rjust. :피

동일한 길이 (xnor 덕분에) :

lambda a,b,x=" ":(x*b+a)[-b:]

이전 솔루션 :

lambda a,b,x=" ":x*(b-len(a))+a

(x*b+a)[-b:]또는 수행하는 것이 약간 짧습니다 a.rjust(b,x). 실제로, str.rjust그 자체는 틀림없이 모든 것에 효과가 있습니다.
— xnor

@ xnor 나는 rjust내장 된 것을 잊어 버렸습니다 . 감사합니다!
— 고양이

이들 중 어느 것도 스펙을 따르지 않습니다 :f(1, 2, 0) === '01';
— Valentin Lorentz

@ValentinLorentz 나는 기본적으로 숫자를 문자열로 강요하지 않고 대답을 얻지 못한 언어에 대한 설명을 OP에 요청했습니다. 이 질문에는 공식적인 사양이 없으므로 인수가 모두 문자열이라고 가정합니다.
— 고양이

이제 사양이 있고 솔루션 1이 유효하지 않습니다 (Python 2.7.10에서 테스트 됨)
— CalculatorFeline

5

05AB1E , 11 9 바이트

암호:

g-ð³0@×¹«

설명:

g          # Implicit first input, take the length.
 -         # Substract the length with the second input.
  ð³       # Push a space and if the third input exists, also the third input.         
    0@     # Reposition the first element of the stack to the top (zero-indexed).
      ×    # Multiply the character with the difference in length.
       ¹«  # Concatenate the first input to the string.

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오 .


1
이 모든 문자는 젤리 코드 페이지에 맞습니다 (0x672D188330401181FA)
— CalculatorFeline

5

자바 스크립트 (ES5), 70 바이트

재귀 사용 ...

function f(s,c,p,u){return(s+'').length<c?f((p==u?' ':p+'')+s,c,p):s}

내 초기 이동은 57 바이트였습니다.

function f(s,c,p){return s.length<c?f((p||" ")+s,c,p):s}

그러나 처음 두 가지 테스트 만 통과했습니다.

> f('foo', 5) === '  foo';
true
> f('foobar', 6) === 'foobar';
true
> f(1, 2, 0) === '01';
false
> f(1, 2, '-') === '-1';
false

연습에서 숫자를 문자열 조작 함수에 전달하는 것이 필요한 기능이 아니기 때문에 여전히 짧은 것을 좋아합니다.


4

Mathematica, 13 바이트

StringPadLeft

내장 전용 답변 # 3 (첫 번째는 Range, 두 번째는 Surd) 또는 적은 내장 : (35 바이트)

##2~StringRepeat~(#3-Length@#2)<>#&

조용히 downvote 할 수 있습니까?
— edc65

2
...왜? 이것이 단지 내장이기 때문입니까? 41 바이트 Python 답변 # 1 (더 이상 유효하지 않음)은 내장 용 래퍼 일뿐입니다.
— CalculatorFeline

It's common practice to disallow built-ins that exactly implement what the challenge asks if that's a concern.(권한에 대한 이의 제기 : Martin) (그러나 상식도)
— edc65

@ edc65 관련 메타 포스트 . 기본적으로 내장 기능이 일반적으로 허용되므로 허용됩니다. 관련 내장 기능을 알기 위해서는 사용자의 창의성과 지식이 필요합니다.
— mbomb007

1
@ mbomb007 허용됨-광고 소재 번호 나는이 답변을 유효하지 않은 것으로 표시하지는 않았지만
— 다운 보트를 관리하라

3

줄리아, 4 바이트

lpad

모든 테스트 사례를 통과합니다.

julia> lpad("foo", 5)
"  foo"

julia> lpad("foobar", 6)
"foobar"

julia> lpad(1, 2, 0)
"01"

julia> lpad(1, 2, '-')
"-1"

그것은 작동합니까 rect 7 cor?
— CalculatorFeline

예. lpad("rect", 7, "cor") => "correct"
— Fengyang Wang

3

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

(a,n,c=' ',s=a+'')=>(new Array(++n-s.length).join(c)+s)

빈 값 배열을 만들고 버전을 조인합니다.

(a,n,c=' ')=>{a+=''; return new Array(++n-a.length).join(c)+a}

더 읽기 쉽지만 return몇 개의 문자 가 추가됩니다.


질문이 보류 중이므로 내 답변과 가장 비슷한 JS 답변 아래에 답변을 드리겠습니다. 43 바이트 (s, n, c = '') => (배열 (n) .join (c) + s) .slice (-n)
— Charlie Wynn

팁 : `대한 inline code blocks..
— CalculatorFeline

+=왼쪽 피연산자의 값을 반환하므로 두 번째 버전이 더 짧아집니다. (a,n,c=' ')=>(new Array(++n-(a+='').length).join(c)+a)그러나 다중 문자 패딩 문자열을 추가하면 더 길어집니다.
— CalculatorFeline

3

배쉬, 57 바이트

매개 변수 : 문자열 너비 padchar

printf -vX %$2s;Y="${X// /${3- }}$1";echo -n "${Y:${#1}}"

너비 공백 문자열을 만듭니다 .

각 공백 문자를 padchar 로 변환하십시오 .

패딩을 쓴 다음 string을 작성하십시오 .


2

파이썬, 41 바이트

lambda a,b,x=' ':str(a).rjust(b,str(x))

내장 된 조정이 없으면 43 바이트 :

lambda a,b,x=' ':str(x)*int(b/2%3)+str(a)

(예상하지는 않지만 테스트 스위트를 통과합니다)


당신은 제거 할 수 있습니다 s=str및 교체 s와 str같은 바이트 카운트합니다.
— CalculatorFeline

2

젤리 , 12 바이트

L⁴_ẋ@⁵⁵⁶<?¤³

너무 많은 변수 참조. 젤리는 암묵적인 언어 가 아니 었습니까 ?

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

작동 원리

L⁴_ẋ@⁵⁵⁶<?¤³  Main link
              Arguments: string (³), length (⁴), padchar (⁵, defaults to 10)

L             Compute the length of ³.
 ⁴_           Subtract the length from ⁴.
          ¤   Combine the two links to the left into a niladic chain:
     ⁵          Yield ⁵.
      ⁵⁶<?      Yield ⁵ if ⁵ < ⁵, else ⁶.
              Comparing a number with itself gives 0 (falsy), but comparing a
              string / character list with itself gives [0] (truthy).
   ẋ@         Repeat the result to the right as many times as specified in the
              result to the left.
           ³  Print the previous return value and return ³.

padchar (⁵, defaults to 10)기본값이 아니 20거나 32?
— cat

1
위첨자 3 ~ 9는 인수 (있는 경우) 또는 유용한 기본값으로 초기화되는 상수입니다. 조건부 ?에는 기본값 10이 있는지 확인하고이 경우 공백이 생깁니다.
— Dennis

2

자바 스크립트 ES7, 16 바이트

''.padStart.bind

내장 ftw! Firefox 48 이상에서만 작동합니다. 이 기능은 3 월 12 일에 추가되었으므로 유효합니다.

다음과 같은 입력이 필요합니다.

(''.padStart.bind)(arg1)(arg2,arg3)

1

파이크 , 67 바이트

mixed n(mixed a,int b,mixed x){return x!=""?x:" "*(b-strlen(a))+a;}

한숨 . 빈 문자열은로 ""평가됩니다 true. 왜!?

혼합 혼합 혼합 혼합 혼합 파이크 수프 ...


바보 같은 진리를 가진 또 다른 언어.
— CalculatorFeline

@CatsAreFluffy 네, Pike는 다소 이상하지만 멋진 문자열 처리 유틸리티가 있습니다.
— 고양이

1

파이크 , 12 바이트 (비경쟁)

입력 노드 추가, len 노드의 버그 수정, 챌린지 게시 후 할당 노드의 기본 결과 변경.

\ =zzjl-z*j+

설명:

\ =z         - assign default input for `z` to be " " (Will still prompt but no input will return a space instead)
    zj       -     j = input()
      l      -    len(j)
       -     -   eval_or_not_input() - ^
        z*   -  ^*input()
          j+ - ^+j

+1 언어로 응답하면 언어를 개선하는 데 도움이되기 때문에 : 1
— cat

사용자 스크립트 등을 쉽게 읽고 분석 할 수 있도록 헤더 형식을 편집했습니다. 동의하지 않으면 롤백하십시오.
— 고양이

왜 공감해야합니까?
— Blue

1
@ muddyfish 여기에있는 모든 비 Javascript 답변은 downvoted 된 것 같습니다.
— Adnan

@AandN 그게 좋지 않아 ... 또한 왜 내가 상위 6 답변에서 패턴을 볼 수 없었는가
— Blue


1

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

재귀 솔루션을 사용했습니다.

f=(s,l,c=' ')=>s[l-1]?s:f(c+s,l,c)

0

루비, 42 바이트

def left_pad(s,t,p=" ");p*(t-s.size)+s;end

매개 변수 : 문자열, 크기, padchar

아래 테스트 스위트; 모든 "true"를 인쇄해야합니다. 모든 것을 동일한 파일에 넣으십시오.

puts left_pad("foo", 5) == "  foo"
puts left_pad("foobar", 6) == "foobar"
puts left_pad("1", 2, "0") == "01"
puts left_pad("1", 2, "-") == "-1"

그 메소드 이름을 사용할 필요가 없습니다 ... 아마도 람다로 만들 수도 있습니다. (다른 모든 예는 비슷합니다.)
— Charles Charles

0

자바 8, 86 88 바이트

이것은 기능입니다. 세 번째 인수는 varargs선택적 패드 문자를 허용하는 것입니다 (기본값은 ' ').

String p(String s,int l,char...p){return s.length()<l?p((p.length>0?p[0]:' ')+s,l,p):s;}

재귀! +2 바이트 (호환되지 않는 유형 오류로 인해 대괄호가 추가됨)


이 TypeErrors. 항상 Ideone을 테스트 할 수 있습니다 (Java 7이지만 Java 8에서도 동일한 오류가 발생합니다) ideone.com/B7gTA5
— cat

0

PHP, 54 48 바이트

Windows-1252 인코딩을 사용합니다.

function(&$s,$l,$p=~ß){$s=str_pad($s,$l,$p,0);};

다음과 같이 실행하십시오 ( -d동독에만 추가됨).

php -r '$f = function(&$s,$l,$p=~ß){$s=str_pad($s,$l,$p,0);}; $s="foo";$f($s,5);echo"$s\n";' 2>/dev/null

이전 버전 (내장없이) :

function(&$s,$l,$p=~ß){for(;strlen($s)<$l;)$s=$p.$s;};

조정

  • str_pad루프 대신 사용하여 6 바이트를 절약했습니다 . 내장이 눈살을 찌푸 리면서 오래된 것을 참조로 남겨 두십시오.

0

R, 50 바이트

다시 파티에 늦었지만 여기에 간다.

function(s,n,p=" ")cat(rep(p,n-nchar(s)),s,sep="")

이것은 단순히 출력을 stdout으로 인쇄하지만 실제로 채워진 문자열을 반환하지는 않습니다 (이것이 챌린지의 요구 사항인지 확실하지 않음). 이것이 필요한 경우 솔루션은 61 바이트에서 약간 더 깁니다.

function(s,n,p=" ")paste0(c(rep(p,n-nchar(s)),s),collapse="")

-3

C, 64 바이트

f(s,n,c,p){return memset(p,c,asprintf(&p,"%*s",n,s)-strlen(s));}

여기에서 시도 하십시오 .


2
문자가 제공되지 않은 경우 공백으로 기본 설정되지 않으므로 사양을 준수하지 않습니다.
— Doorknob

이 코드는 주어진대로 실행되지 않습니다. gcc할 수 없습니다 undefined reference to function printf패스를하고 등 printf자체 만에 그런 행운 memset, asprintf그리고 strlen. #include<string.h>이것을 유효하게 하려면 ... etc 정의 를 추가해야 합니다.
— 고양이

@tac Hmmm ... 아이디 온 내에서 내 대답을 완전히 작성하고 테스트했습니다. 이 플랫폼은을 사용한다고 명시하지만 해당 플랫폼에서 성공적으로 컴파일 및 실행됩니다 gcc-5.1. 그들이 모르는 장면 뒤에서 컴파일러 플래그를 사용하는지 또는 무엇을 가지고 있는지 잘 모르겠습니다. 나는 처음에 이것을 당신의 환경에서 실행되지 않는 것에 대한 정당화로 사용 했지만 지금은 확실하지 않습니다 ...
— Cole Cameron

글쎄, 이것은 gcc 5.2.1Linux에 있기 때문에 말하는 것을 피할 Ideone C, 64 bytes수는 있지만 C라고 주장한다면 컴파일하십시오. : p
— 고양이

나는 C의 초보자입니다. 왜 f3이 아닌 4 개의 매개 변수를 사용합니까? 문자열의 주소가 필요합니까, 아니면 ...? 어느 쪽이든, f최대 3 개의 인수를 취해야합니다.
— 고양이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.