Javascript trái pad


27

Giới thiệu

Theo sau sự sụp đổ của gói npm pad bên trái , chúng ta hãy có một golf mã để thực hiện pad trái.

Hàm pad bên trái bao gồm 2 đối số mặc định và 1 đối số bổ sung, trong chuỗi biểu mẫu , độ dài , ( padchar ). Nếu padar không được đưa ra, điều này được chuẩn hóa thành một ký tự không gian . Hãy lấy một ví dụ với hai đối số:

left_pad("abc", 6)

Đầu tiên, chúng ta quan sát độ dài của chuỗi, là 3 . Sau này, chúng ta cần đệm chuỗi này ở bên trái cho đến khi độ dài của chuỗi đầy đủ đạt đến độ dài cho trong hàm. Trong trường hợp này 6 . Vì padar không được đưa ra , chúng ta cần phải đệm cái này với khoảng trắng:

   abc

Đây là một chuỗi có 3 khoảng trắng và chuỗi ban đầu, dẫn đến một chuỗi có độ dài 6. Dưới đây là một ví dụ với chuỗi được đưa ra:

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

Chúng tôi chỉ làm tương tự như ví dụ trên, nhưng thay thế khoảng trắng bằng padchar. Trong trường hợp này, dấu gạch nối:

---abc

Nhiệm vụ

Với chuỗi , chiều dài , và có lẽ lập luận thêm padchar , sản lượng chuỗi trái độn. Bạn có thể giả sử rằng số độ dài bằng hoặc lớn hơn độ dài của chuỗi. Các padar sẽ luôn bao gồm 1 ký tự.

Các trường hợp thử nghiệm

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"

Đây là , vì vậy bài nộp có số byte nhỏ nhất sẽ thắng!


13
@ m0sa Vẫn còn một vài vấn đề. Việc hạn chế thách thức đối với javascript được khuyến khích mạnh mẽ - không có lý do gì các ngôn ngữ khác không thể tham gia vào điều này. Thông số kỹ thuật cần mô tả hành vi và phạm vi mong muốn của các đầu vào được phép có thể mà không cần phải theo liên kết. Không rõ ràng về cách xử lý tham số thứ ba.
xnor

8
Tôi chắc chắn rằng một tài liệu tham khảo liên quan đến Javascript có thể được tạo ra để tạo động lực, mà không cần phải nói "do đó không có ngôn ngữ nào khác được phép chơi". Nếu bạn đặc biệt thích xem các mục Javascript tốt nhất, bạn có thể cung cấp tiền thưởng cho nó, trong khi vẫn để thử thách mở cho các ngôn ngữ khác.
trichoplax

6
Các câu hỏi ngôn ngữ đơn lẻ đều bị cấm hoặc chúng không có. Nếu họ bị cấm, hãy đóng cái này lại. Nếu họ được phép, hãy để OP hạn chế câu hỏi theo ý muốn.
Sklivvz

10
@Sklivvz (và m0sa) Có những trường hợp hiếm hoi mà các thách thức cụ thể về ngôn ngữ có ý nghĩa, đặc biệt nếu thử thách đòi hỏi một số tính năng rất độc đáo của ngôn ngữ để có ý nghĩa hoặc thậm chí là một thách thức ở nơi đầu tiên. Đó là lý do chính được cho phép và tại sao tôi cũng phản đối việc không cho phép họ hoàn toàn. Điều đó nói rằng, đối với bất kỳ thách thức nào có ý nghĩa trong bất kỳ ngôn ngữ nào, không có lý do chính đáng để hạn chế nó trong một ngôn ngữ. Mặt khác, chúng tôi có "Sắp xếp một mảng trong JavaScript", "Sắp xếp một mảng trong Ruby", "Sắp xếp một mảng trong Python" ... và thêm 300 thử thách không có lợi ích gì cả.
Martin Ender

8
@Sklivvz Như trichoplax đã nói, đây là một động lực tốt cho một thách thức, nhưng nó thực hiện một nhiệm vụ xử lý chuỗi rất đơn giản, có ý nghĩa tương tự trong bất kỳ ngôn ngữ nào khác. Thách thức không đặc biệt khó, có thể thực hiện được hoặc thú vị trong JavaScript so với bất kỳ ngôn ngữ nào khác (cụ thể là ai đó có thể chưa biết về gói bên trái và vẫn hỏi câu hỏi này mà không hạn chế ngôn ngữ và câu trả lời trong JavaScript sẽ không ' Tôi đã không bị ảnh hưởng gì cả, và không ai có thể nghĩ rằng "tại sao đây không phải là chỉ dành cho JS?").
Martin Ender

Câu trả lời:


20

Bình thường, 13 11 byte

+*.xwd-Qlzz

Hãy thử nó ở đây .

Lấy đầu vào từ STDIN làm chuỗi trên dòng đầu tiên, độ dài trên dòng thứ hai và đệm char tùy ý trên dòng thứ ba.


4
Điều này được cho là chỉ có javascript
MMM

22
@MMM Giới hạn ngôn ngữ trong các thử thách rất không thích đến nỗi tôi hy vọng nó sẽ bị bỏ qua. Không ai thích được nói " bạn không thể tham gia."
xnor


2
Dán nó vào người đàn ông! Bạn đi Doorknob! Đừng để giấc mơ của bạn là giấc mơ! CỨ LÀM ĐI!
Mave

4
'Đây là một xã hội xấu xa, nơi những người điều hành là những người làm trái ý dân sự!
Ven

13

JavaScript (ES6), 43 byte

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

1
bạn đang thiếu tham số thứ 3
m0sa

@ m0sa Cảm ơn, đã sửa.
Neil

Nó thất bại trong bài kiểm tra thứ ba, ngay bây giờ ;-)
Sklivvz

1
@Sklivvz Ugh, đó là những gì tôi nhận được khi không đọc đúng yêu cầu.
Neil

Thay vì p+=s, bạn có thể thêm 2 byte để tạo ra nó p+=[s]và nó sẽ hoạt động.
Aplet123

7

JavaScript (ES6), 37 43 44 byte

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

Kiểm tra:

> 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

Không chắc chắn nếu bạn muốn đếm khai báo hàm, tôi sẽ nội tuyến này.


Tôi nghĩ rằng nói chung, chúng tôi không tính khai báo hàm trừ khi câu hỏi đặc biệt yêu cầu một chương trình đầy đủ hơn là một hàm.
Deusovi

slicengắn hơn substr.
Mama Fun Roll

@Deusovi đúng. ý tôi là tôi sẽ không làm console.log(f("whatever",10, "*")), nhưngconsole.log(("*".repeat(10)+"whatever").substr(-10))
Sklivvz

7

Javascript ES6, 35 byte

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

Thử nó. Tôi tin rằng đây là ý nghĩa ngắn nhất có thể có trong Javascript.


Đây là những gì tôi sẽ làm, ngoại trừ nó không phải là một chức năng ẩn danh.
Aplet123

@ Aplet123 Tôi nghĩ theo định nghĩa của cuộc thi về những gì được mong đợi thì điều này là ổn. Nó chỉ yêu cầu chức năng; Đặt tên cho nó là không liên quan trong bối cảnh này hoặc ít nhất đó là những gì tôi sẽ nghĩ dựa trên các câu trả lời khác.
David

5

Python 3, 33 31 29 byte

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

Khá đơn giản. Cảm ơn @xnor đã nhắc nhở tôi str.rjustlà một điều. : P

Đối với cùng độ dài (cũng nhờ xnor):

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

Giải pháp trước đây:

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

Nó ngắn hơn một chút để làm (x*b+a)[-b:]hoặc a.rjust(b,x). Trên thực tế, str.rjustchính nó được cho là làm việc cho toàn bộ.
xnor

@xnor Tôi quên rjustlà dựng sẵn, cảm ơn bạn!
con mèo

Không ai trong số này làm theo thông số kỹ thuật:f(1, 2, 0) === '01';
Valentin Lorentz

@ValentinLorentz Tôi đã yêu cầu OP làm rõ về các ngôn ngữ không ép buộc số thành chuỗi theo mặc định và không nhận được câu trả lời. Vì câu hỏi này không có đặc điểm kỹ thuật chính thức, tôi sẽ giả sử các đối số là tất cả các chuỗi.
mèo

Bây giờ có thông số kỹ thuật và giải pháp 1 không hợp lệ (được thử nghiệm trên Python 2.7.10)
CalculatorFeline

5

05AB1E , 11 9 byte

Mã số:

g-ð³0@×¹«

Giải trình:

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.

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến .


1
Tất cả các ký tự này phù hợp với bảng mã Jelly (0x672D188330401181FA)
CalculatorFeline

5

JavaScript (ES5), 70 byte

Sử dụng đệ quy ...

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

Lượt đi ban đầu của tôi chỉ là 57 byte:

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

Nhưng chỉ vượt qua 2 bài kiểm tra đầu tiên:

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

Tôi vẫn thích cái ngắn hơn, vì trong thực tế, việc chuyển số cho hàm thao tác chuỗi không phải là một tính năng tôi cần.


4

Toán học, 13 byte

StringPadLeft

Câu trả lời chỉ có sẵn số 3 (thứ nhất là Range, thứ hai là Surd) Hoặc ít tích hợp hơn: (35 byte)

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

Tôi có thể lặng lẽ downvote?
edc65

2
...Tại sao? Có phải vì đây chỉ là một nội dung? Câu trả lời Python 41byte # 1 (không còn giá trị) chỉ là một trình bao bọc cho nội dung.
Máy

It's common practice to disallow built-ins that exactly implement what the challenge asks if that's a concern.(Kháng cáo lên chính quyền: Martin) (nhưng cũng là lẽ thường)
edc65

@ edc65 Bài meta liên quan . Tôi khá chắc chắn rằng nó được cho phép, vì các phần mềm dựng sẵn thường được cho phép theo mặc định. Nó đòi hỏi sự sáng tạo và kiến ​​thức về phần người dùng để biết chức năng tích hợp có liên quan.
mbomb007

1
@ mbomb007 cho phép có thể - sáng tạo không. Tôi đã không gắn cờ câu trả lời này là không hợp lệ nhưng bảo đảm downvote của tôi
edc65

3

Julia, 4 byte

lpad

Vượt qua tất cả các trường hợp thử nghiệm:

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

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

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

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

Nó làm việc cho rect 7 cor?
Máy

Vâng. lpad("rect", 7, "cor") => "correct"
Fengyang Wang

3

Javascript (ES6), 55 byte

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

Tạo một mảng trống của các giá trị và tham gia phiên bản.

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

Dễ đọc hơn nhưng returnthêm một vài ký tự.


Vì câu hỏi đang bị hoãn nên tôi sẽ đặt câu trả lời của mình dưới câu trả lời JS giống như của tôi. 43 byte (s, n, c = '') => (Mảng (n) .join (c) + s) .slice (-n)
Charlie Wynn

Mẹo: `cho inline code blocks..
Máy

+=trả về giá trị của toán hạng bên trái của nó, vì vậy phiên bản thứ hai trở nên ngắn hơn: (a,n,c=' ')=>(new Array(++n-(a+='').length).join(c)+a)Nhưng nó sẽ trở nên dài hơn khi bạn thêm các chuỗi đệm đa biến.
Máy

3

Bash, 57 byte

Các tham số: chuỗi chiều rộng chuỗi

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

Tạo một chuỗi các không gian chiều rộng .

Chuyển đổi từng nhân vật không gian thành padar .

Viết đệm rồi chuỗi .


2

Python, 41 byte

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

Nếu không có nội dung dựng sẵn, 43 byte:

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

(không phải những gì người ta mong đợi nó làm, nhưng nó vượt qua bộ thử nghiệm)


Bạn có thể loại bỏ s=strvà thay thế sbằng strsố byte tương tự.
Máy

2

Thạch , 12 byte

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

Vì vậy, nhiều tài liệu tham khảo biến. Không phải Jelly được coi là một ngôn ngữ ngầm ?

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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)Nó không nên mặc định 20hay 32?
con mèo

1
Superscript 3 đến 9 là các hằng số được khởi tạo cho các đối số (nếu có) hoặc một số giá trị mặc định hữu ích. Các điều kiện ?kiểm tra nếu nó có giá trị mặc định 10 và mang lại một khoảng trắng trong trường hợp đó.
Dennis

2

JavaScript ES7, 16 byte

''.padStart.bind

ftw tích hợp! Chỉ hoạt động trên Firefox 48 trở lên. Hợp lệ vì tính năng này đã được thêm vào ngày 12 tháng 3.

Điều này có đầu vào như:

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

1

Pike , 67 byte

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

thở dài . Chuỗi rỗng ""ước tính true. Tại sao!?

hỗn hợp hỗn hợp trộn hỗn hợp súp Pike ...


Một ngôn ngữ khác với sự thật ngu ngốc.
Máy

@CatsAreFluffy yeah, Pike hơi lạ, nhưng nó có các tiện ích xử lý chuỗi đẹp.
mèo

1

Pyke , 12 byte (không biên dịch)

thêm nút đầu vào, sửa lỗi trên nút len, thay đổi kết quả mặc định trên nút gán sau khi thử thách được đăng.

\ =zzjl-z*j+

Giải trình:

\ =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 vì trả lời bằng ngôn ngữ sẽ giúp bạn tinh chỉnh nó :)
mèo

Tôi đã chỉnh sửa định dạng của tiêu đề của bạn để giúp dễ đọc hơn và dễ dàng hơn cho các bản mô tả người dùng, v.v. để phân tích - cuộn lại nếu bạn không đồng ý.
mèo

Tại sao các downvote?
Blue

1
@muddyfish Dường như mọi câu trả lời không phải là Javascript ở đây đều bị hạ cấp.
Ad Nam

@AandN thật không đẹp ... Ngoài ra, tại sao tôi không thể nhìn thấy một mẫu từ 6 câu trả lời hàng đầu
Blue

1

JavaScript ES6, 38 byte

(s,l,c=" ")=>(c.repeat(l)+s).slice(-l)

Một giải pháp thay thế.


1

JavaScript (ES6), 34 byte

Tôi đã sử dụng một giải pháp đệ quy.

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

0

Ruby, 42 byte

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

Các thông số: chuỗi, kích thước, thóc.

Bộ thử nghiệm dưới đây; nên in tất cả các chữ "true", chỉ cần đặt mọi thứ vào cùng một tệp.

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"

Bạn không cần sử dụng tên phương thức đó ... và có lẽ bạn cũng có thể biến nó thành lambda. (Tất cả các ví dụ khác làm tương tự)
Không phải Charles

0

Java 8, 86 88 byte

Đây là một chức năng. Đối số thứ ba là varargsđể cho phép char char tùy chọn (mặc định là ' ')

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

Đệ quy! +2 byte (thêm dấu ngoặc vì lỗi loại không tương thích)


TypeErrors này. Luôn có thể kiểm tra Ideone (Java 7, nhưng tôi gặp lỗi chính xác tương tự trong Java 8 trên hộp của tôi) ideone.com/B7gTA5
cat

0

PHP, 54 48 byte

Sử dụng mã hóa Windows-1252.

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

Chạy như thế này (chỉ -dthêm cho hướng đông):

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

Phiên bản cũ (không có nội dung):

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

Tinh chỉnh

  • Đã lưu 6 byte bằng cách sử dụng str_padthay vì một vòng lặp. Để lại cái cũ để tham khảo, vì các nội dung được tán thành

0

R, 50 byte

Đến bữa tiệc muộn một lần nữa nhưng rồi đây:

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

Điều này chỉ đơn giản là in đầu ra ra thiết bị xuất chuẩn nhưng không thực sự trả về chuỗi được đệm (không chắc đây có phải là yêu cầu cho thử thách không). Nếu điều này là cần thiết, giải pháp dài hơn một chút ở 61 byte:

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

-3

C, 64 byte

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

Hãy thử nó ở đây .


2
Điều này không tuân thủ đặc điểm kỹ thuật, vì nó không mặc định cho không gian khi một ký tự không được cung cấp.
tay nắm cửa

Mã này không chạy như được đưa ra. gccsẽ cho phép undefined reference to function printfvượt qua và bao gồm printfchính nó, nhưng không may mắn như vậy cho memset, asprintfstrlen. Bạn cần thêm các #include<string.h>định nghĩa ... vv để làm cho điều này hợp lệ.
mèo

@tac Hmmm ... Tôi đã viết và kiểm tra câu trả lời của mình hoàn toàn trong ideone. Nó biên dịch và chạy thành công trên nền tảng đó, mặc dù nó nói rằng nó sử dụng gcc-5.1. Tôi không chắc họ đang sử dụng cờ trình biên dịch hay những gì bạn có đằng sau hậu trường mà tôi không biết. Ban đầu tôi đã sử dụng điều này như là sự biện minh của mình cho việc nó không chạy trong môi trường của bạn, nhưng bây giờ tôi không chắc chắn ...
Cole Cameron

tốt, đây là gcc 5.2.1trên Linux, vì vậy bạn có thể thoát khỏi việc nói Ideone C, 64 bytesnhưng nếu bạn sẽ yêu cầu nó là C, hãy biên dịch nó. : p
mèo

Tôi chỉ là người mới bắt đầu tại C: Tại sao fphải mất bốn tham số chứ không phải 3? Bạn đang yêu cầu địa chỉ của chuỗi, hay ...? một trong hai cách, fnên lấy tối đa 3 đối số.
con mèo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.