Lấy mật khẩu của tôi


17

Các từ thông dụng vẫn nên tránh để được sử dụng làm mật khẩu. Thử thách này là về việc mã hóa một chương trình rất đơn giản, có một mật khẩu nhất định ( M odify U ntil N ot G uished E asily).

Đầu vào

Một từ, đó là một chuỗi được viết trong bảng chữ cái abcdefghijklmnopqrstuvwxyz. Không có vấn đề gì nếu các chữ cái là chữ thường hoặc chữ hoa.

Munging

  1. Thay đổi bất kỳ chuỗi lặp lại nào của cùng một chữ cái thành trước số lần lặp lại của chữ cái ( LLLLvới 4L)
  2. Thay đổi đầu tiên avới@
  3. Thay đổi đầu tiên bvới8
  4. Thay đổi đầu tiên cvới(
  5. Thay đổi đầu tiên dvới6
  6. Thay đổi đầu tiên evới3
  7. Thay đổi đầu tiên fvới#
  8. Thay đổi đầu tiên gvới9
  9. Thay đổi đầu tiên hvới#
  10. Thay đổi đầu tiên ivới1
  11. Thay đổi thứ hai ivới!
  12. Thay đổi đầu tiên kvới<
  13. Thay đổi đầu tiên lvới1
  14. Thay đổi thứ hai lvớii
  15. Thay đổi đầu tiên ovới0
  16. Thay đổi đầu tiên qvới9
  17. Thay đổi đầu tiên svới5
  18. Thay đổi thứ hai svới$
  19. Thay đổi đầu tiên tvới+
  20. Thay đổi đầu tiên vvới>
  21. Thay đổi thứ hai vvới<
  22. Thay đổi đầu tiên wvớiuu
  23. Thay đổi thứ hai wvới2u
  24. Thay đổi đầu tiên xvới%
  25. Thay đổi đầu tiên yvới?

Quy tắc 1 phải được áp dụng số lần cần thiết cho đến khi không thể áp dụng nó nhiều hơn. Sau đó, các quy tắc còn lại được áp dụng.

Đầu ra Từ munged

Ví dụ

  • codegolf -> (0639o1#
  • programming -> pr09r@2m1ng
  • puzzles -> pu2z135
  • passwords -> p@25uu0r6$
  • wwww -> 4uu
  • aaaaaaaaaaa -> 11a
  • lllolllolll -> 3103io3l
  • jjjmjjjj -> 3jm4j

Đây là , vì vậy hãy làm cho chương trình của bạn ngắn nhất có thể!

Không có gì trong bài viết này nên được sử dụng làm ý tưởng mật khẩu hoặc như bất kỳ phần nào của thực hành mật khẩu.


18
Thực tế là các chương trình như thế này có thể có nghĩa là kẻ tấn công có thể viết chúng và lấy mật khẩu (và thử các mung khác nhau) một cách dễ dàng (thậm chí dễ dàng hơn vì chúng thường có quyền truy cập vào phần cứng tốt hơn). Vì vậy, để đảm bảo an toàn, tôi sẽ nói: không có gì trong bài viết này nên được sử dụng làm ý tưởng mật khẩu hoặc bất kỳ phần nào trong thực hành mật khẩu.
NH.

1
Tôi khuyên bạn nên từ chối trách nhiệm đó và sao chép nó ở trên cùng. Bạn không bao giờ có thể quá cẩn thận ...
wizzwizz4

Câu trả lời:


11

Java 8, 237 321 319 280 247 241 240 237 byte

s->{for(int a[]=new int[26],i=0,l=s.length,t,x;i<l;i+=t){for(t=0;++t+i<l&&s[i]==s[t+i];);System.out.print((t>1?t+"":"")+(++a[x=s[i]-65]>2?s[i]:"@8(63#9#1J<1MN0P9R5+U>u%?ZABCDEFGH!JKiMNOPQR$TU<2XYZ".charAt(x+26*~-a[x])+(x==22?"u":"")));}}

80 byte vì các quy tắc đã thay đổi .. ( EDIT: Cuối cùng trở lại với 237 byte ban đầu của tôi. ) Việc thay thế WWWWbằng 222WJava rất dễ dàng, nhưng 4Wkhông .. Nếu chỉ Java có cách sử dụng nhóm bắt regex cho một cái gì đó. . Lấy độ dài bằng "$1".length(), thay thế chính trận đấu bằng "$1".replace(...), chuyển đổi khớp thành số nguyên bằng new Integer("$1")hoặc sử dụng một cái gì đó tương tự như Retina (tức là s.replaceAll("(?=(.)\\1)(\\1)+","$#2$1")) hoặc JavaScript (nghĩa là s.replaceAll("(.)\\1+",m->m.length()+m.charAt(0))) sẽ là điều số 1 tôi muốn thấy trong Java trong tương lai để mang lại lợi ích cho việc mã hóa ..>.> Tôi nghĩ rằng đây là lần thứ 10 tôi ghét Java không thể làm gì với trận đấu nhóm bắt giữ ..
-78 byte nhờ @ OlivierGrégoire .

I / O là chữ hoa.

Giải trình:

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

s->{                           // Method with String parameter and no return-type
  for(int a[]=new int[26],     //  Array with 26x 0
          i=0,                 //  Index-integer, starting at 0
          l=s.length,          //  Length
          t,x;                 //  Temp integers
      i<l;                     //  Loop (1) over the characters of the input
      i+=t){                   //    After every iteration: Increase `i` by `t`
    for(t=0;++                 //   Reset `t` to 1
        t+i<l                  //   Inner loop (2) from `t+i` to `l` (exclusive)
        &&s[i]==s[t+i];        //   as long as the `i`'th and `t+i`'th characters are equal
    );                         //   End of inner loop (2)
    System.out.print(          //   Print:
     (t>1?t+"":"")             //    If `t` is larger than 1: print `t`
     +(++a[x=s[i]-65]>2?       //    +If the current character occurs for the third time:
       s[i]                    //      Simply print the character
      :                        //     Else:
       "@8(63#9#1J<1MN0P9R5+U>u%?ZABCDEFGH!JKiMNOPQR$TU<2XYZ".charAt(x
                               //      Print the converted character at position `x`
        +26*~-a[x])            //       + 26 if it's the second time occurring
       +(x==22?"u":"")));      //      And also print an additional "u" if it's 'W'
  }                            //  End of loop (1)
}                              // End of method

10

JavaScript (ES6), 147 byte

s=>[[/(.)\1+/g,m=>m.length+m[0]],..."a@b8c(d6e3f#g9h#i1k<l1o0q9s5t+v>x%y?i!lis$v<".match(/../g),["w","uu"],["w","2u"]].map(r=>s=s.replace(...r))&&s

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

Giải trình

Chạy qua một loạt các thay thế trên chuỗi đầu vào s, theo thứ tự được chỉ định bởi thử thách. Mỗi mục trong chuỗi là một mảng hoặc chuỗi, với hai mục, sau đó được trải ( ...r) và được truyền cho s.replace().

s=>[
    [/(.)\1+/g, m=>m.length + m[0]],// first replacement: transform repeated letters
                                    // into run-length encoding

                                    // string split into length-2 partitions and
                                    // spread into the main array
    ..."a@b8c(d6e3f#g9h#i1k<l1o0q9s5t+v>x%y?i!lis$v<".match(/../g),
                                    // next replacements: all single-char replacements.
                                    // "second" versions are placed at the end so they
                                    //    replace the second instance of that char

    ["w","uu"],["w","2u"]           // last replacements: the two "w" replacements
]
.map(r=> s = s.replace(...r))       // run all replacements, updating s as we go
&& s                                // and return the final string

Câu trả lời rất hay
mdahmoune

6

05AB1E , 69 byte

-9 byte nhờ Emigna

γvygD≠×yÙ}J.•k®zĀÒĀ+ÎÍ=ëµι
•"@8(63#9#1<1095+>%?!i$<"ø'w„uu„2u‚â«vy`.;

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


Bạn có thể sử dụng'w„uu„2u‚â
Emigna

Xin vui lòng xác minh kết quả cho wwww là đầu vào?
mdahmoune

@mdahmoune Nó xuất ra4uu
Okx

@Emigna Cartesian sản phẩm, ý tưởng tốt.
Okx

Phần đầu tiên có thể làγvygD≠×yÙ}J
Emigna

6

Perl 5 , 152 + 1 ( -p) = 153 byte

s/(.)\1+/(length$&).$1/ge;%k='a@b8c(d6e3f#g9h#i1j!k<l1mio0q9r5s$t+u>v<x%y?'=~/./g;for$i(sort keys%k){$r=$k{$i};$i=~y/jmru/ilsv/;s/$i/$r/}s/w/uu/;s/w/2u/

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


Xin hỏi ý của bạn là gì (-p)?
mdahmoune

1
@mdahmoune -pđược sử dụng làm đối số cho perldòng lệnh tự động đọc đầu vào từ STDINprints nội dung $_ở cuối tập lệnh. TIO cho phép tùy chọn đó và vì perl -pe<code>nó nhiều hơn 1 byte so với perl -e<code>nó được tính là một byte bổ sung.
Dom Hastings

Tôi nghĩ rằng bạn đã thực hiện một lỗi đánh máy, nên không phải là ~giữa j~klà một !thay thế? Hiện tại nó đã thay thế lần xuất hiện thứ hai ibằng một ~thay vì a !.
Kevin Cruijssen

@Xcali #testingonproduction
NieDzejkob

2
@NieDzejkob Không có nơi nào tốt hơn. Đó là cách duy nhất bạn biết nó sẽ hoạt động trong sản xuất.
Xcali

4

Có lẽ nó không phải là môn đánh gôn nhất có thể, nhưng nó hoạt động.

-6 byte nhờ vào ovs

-77 Byte nhờ NieDzejkob và Jonathan French

Python 3 , 329 323 byte 246 byte

import re;n=input()
for a in re.finditer('(\w)\\1+',n):b=a.group();n=n.replace(b,str(len(b))+b[0],1)
for A,B,C in[('abcdefghikloqstvxyw','@8(63#9#1<1095+>%?','uu'),('ilsvw','!i$<','2u')]:
	for a,b in zip(A,list(B)+[C]):n=n.replace(a,b,1)
print(n)

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


1
Tôi nghĩ bạn có thể giảm.lower()
mdahmoune

Điều đó có ý nghĩa, tôi không chắc mình có cần xử lý chữ hoa hay không.
thiệu lại vào



2
Trên thực tế, câu trả lời của bạn không hoạt động. jjjmjjjjnên đầu ra 3jm4jnhưng đầu ra 3jm3jj. Chỉnh sửa: Đã sửa lỗi 258 byte với vấn đề này
NieDzejkob

3

Võng mạc , 166 124 byte

(.)\1+
$.&$1
([a-y])(?<!\1.+)
¶$&
¶w
uu
T`l¶`@8(63#9#1j<\1mn0\p9r5+u>\w%?_`¶.
([ilsvw])(?<!\1.+)
¶$&
¶w
2u
T`i\lsv¶`!i$<_`¶.

Hãy thử trực tuyến! Giải trình:

(.)\1+
$.&$1

Thay thế một loạt các chữ cái lặp đi lặp lại với chiều dài và chữ cái.

([a-y])(?<!\1.+)
¶$&

Phù hợp với sự xuất hiện đầu tiên của các chữ cái ađể yvà đánh dấu chúng bằng trình giữ chỗ.

¶w
uu

Sửa lỗi xuất hiện đầu tiên của w.

T`l¶`@8(63#9#1j<\1mn0\p9r5+u>\w%?_`¶.

Khắc phục sự xuất hiện đầu tiên của tất cả các chữ cái khác từ ađến yvà xóa chỗ dành sẵn.

([ilsvw])(?<!\1.+)
¶$&

Đánh dấu (ban đầu) xuất hiện thứ hai của các chữ cái i, l, s, v, hoặc wvới một placeholder.

¶w
2u

Khắc phục sự xuất hiện thứ hai của w.

T`i\lsv¶`!i$<_`¶.

Sửa lỗi xuất hiện thứ hai của bốn chữ cái khác.


Bạn có nghĩ rằng nó có thể chơi golf hơn nữa?
mdahmoune

@mdahmoune Vâng, tôi nghĩ rằng tôi có thể lưu 33 byte.
Neil

Tôi đã bình chọn câu trả lời của bạn :) sẽ rất tuyệt nếu bạn lưu 33 byte;)
mdahmoune

@mdahmoune Tin vui, tôi thực sự đã lưu 42 byte!
Neil

Tuyệt vời, mã của bạn ngắn nhất thứ hai;)
mdahmoune

3

Haskell , 221 218 213 byte

($(f<$>words"w2u li i! s$ v< a@ b8 c( d6 e3 f# g9 h# i1 k< l1 o0 q9 s5 t+ v> wuu x% y?")++[r]).foldr($)
f(a:b)(h:t)|a==h=b++t|1>0=h:f(a:b)t
f _ s=s
r(a:b)|(p,q)<-span(==a)b=[c|c<-show$1+length p,p>[]]++a:r q
r s=s

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

Lạm dụng foldrđể chạy chuỗi thông qua một chuỗi các biến đổi chuỗi ngược. Chuỗi "bắt đầu" rthay thế số đếm lặp lại bằng cách sử dụng spanđể phá vỡ đuôi của chuỗi khi nó dừng bằng đầu. Nếu phần đầu tiên không trống thì đó là phần lặp lại vì vậy chúng tôi sẽ in độ dài +1. Tiếp theo, chúng tôi đưa ra một đối số fcho mỗi thay thế ký tự theo thứ tự (đảo ngược). Các thay thế được mã hóa dưới dạng một chuỗi với ký tự đầu tiên là ký tự được thay thế và phần còn lại là chuỗi (vì các thay thế w là nhiều ký tự) đi vào vị trí của nó. Tôi đặt các chuỗi được mã hóa này thành một chuỗi lớn được phân tách bằng khoảng trắng để wordscó thể chia nó thành một danh sách cho tôi.

EDIT: Cảm ơn @Laikoni vì đã tiết kiệm cho tôi 5 byte! Đó là một cách sử dụng thông minh $mà tôi đã không nghĩ đến. Tôi cũng không biết <-mẹo đó .


Thanx để giải thích chi tiết;)
mdahmoune

1
Bạn có thể sử dụng (p,q)<-span(==a)bthay vì let(p,q)=span(==a)bp>[] thay vì p/=[].
Laikoni

2
Lưu thêm hai byte bằng cách tạo mpointfree: ($(f<$>words"w2u ... y?")++[r]).foldr($) Hãy thử trực tuyến!
Laikoni

2

Lua , 173 byte

s=...for c,r in("uua@b8c(d6e3f#g9h#i1i!jjk<l1limmnno0ppq9rrs5s$t+v>v<wuuw2ux%y?zz"):gmatch"(.)(.u?)"do s=s:gsub(c..c.."+",function(p)return#p..c end):gsub(c,r,1)end print(s)

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

Ungolfed và giải thích:

s = ...


--This string contains every character to replace, followed by
--the character(s) it should be replaced with.
--
--It also contains all characters for which repeated sequences
--of them should be replaced by "<number><character>". That is,
--all letters in the alphabet. This way, a single loop can do
--both the "replace repeated characters" and "encode characters"
--operations, saving a for loop iterating over the alphabet.
--
--Characters that shouldn't be replaced will be replaced with
--themselves.
--
--In order to avoid matching half of the "replace u with u"
--command as the replace part of another command, "uu" is placed
--at the beginning of the string. This ensures that only the
--2-character replacements for "w" get an extra "u".

cmdstring = "uua@b8c(d6e3f#g9h#i1i!jjk<l1limmnno0ppq9rrs5s$t+v>v<wuuw2ux%y?zz"


--Iterate over all the search/replace commands.
--The character to replace is in the "c" variable, the string to
--replace it with is in "r".
--
--Due to the dummy search/replace commands (i.e. "mm") placed
--in the string, this loop will also iterate over all letters
--of the alphabet.

for c,r in cmdstring:gmatch("(.)(.u?)") do
	
	--First, replace any occurences of the current letter
	--multiple times in a row with "<number><letter>".
	s = s:gsub(c..c.."+", function(p)
		return #p .. c
	end)
	
	--Then, replace the first occurence of the letter
	--with the replacement from the command string.
	s = s:gsub(c, r, 1)
end

print(s)

Lol lua :) công việc tốt
mdahmoune

2

C # (.NET Core), 317 , 289 , 279 byte

p=>{string r="",l=r,h=r,c="a@b8c(d6e3f#g9h#i1i!k<l1lio0q9s5s$t+v>v<wuw2x%y?";int i=0,n=p.Length,d,a=1;for(;i<n;i++){h=p[i]+"";if(h==p[(i==n-1?i:i+1)]+""&&i!=n-1)a++;else{d=c.IndexOf(h);if(d>=0&&d%2<1){l=c[d+1]+"";h=l=="u"?"uu":l;c=c.Remove(d,2);}r+=a>1?a+""+h:h;a=1;}}return r;};

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

Tôi hy vọng sẽ ổn khi nhận được một mảng char làm đầu vào chứ không phải là một chuỗi.

Ung dung :

string result = "", casesCharReplacement = result, currentChar = result, cases = "a@b8c(d6e3f#g9h#i1i!k<l1lio0q9s5s$t+v>v<wuw2x%y?";
int i = 0, n = pas.Length, casesIndex, charAmounts = 1;

// For every char in the pass.
for (; i < n; i++)
{
    currentChar = pas[i] + "";
    // if the next char is equal to the current and its not the end of the string then add a +1 to the repeated letter.
    if (currentChar == (pas[(i == n - 1 ? i : i + 1)] + "") && i != n - 1)
        charAmounts++;
    else
    {
        // Finished reading repeated chars (N+Char).
        casesIndex = cases.IndexOf(currentChar);
        // Look for the replacement character: only if the index is an even position, otherwise I could mess up with letters like 'i'.
        if (casesIndex >= 0 && casesIndex % 2 < 1)
        {
            casesCharReplacement = cases[casesIndex + 1]+"";
            // Add the **** +u
            currentChar = casesCharReplacement == "u"?"uu": casesCharReplacement;
            // Remove the 2 replacement characters (ex: a@) as I won't need them anymore.
            cases = cases.Remove(casesIndex, 2);
        }
        // if the amount of letters founded is =1 then only the letter, otherwise number and the letter already replaced with the cases.
        result += charAmounts > 1 ? charAmounts + ""+currentChar : currentChar;
        charAmounts = 1;
    }
}
return result;

1
Vâng, nó ổn :) cho đầu vào
mdahmoune

2

C ++, 571 495 478 444 byte

-127 byte nhờ Zacharý

#include<string>
#define F r.find(
#define U(S,n)p=F s(S)+b[i]);if(p-size_t(-1)){b.replace(i,1,r.substr(p+n+1,F'/',n+p)-p-2));r.replace(p+1,F'/',p+1)-p,"");}
#define V(A)i<A.size();++i,c
using s=std::string;s m(s a){s b,r="/a@/b8/c(/d6/e3/f#/g9/h#/i1//i!/k</l1//li/o0/q9/s5//s$/t+/v>/wuu//w2u/x%/y?/";int c=1,i=0;for(;V(a)=1){for(;a[i]==a[i+1]&&1+V(a)++);b+=(c-1?std::to_string(c):"")+a[i];}for(i=0;V(b)){auto U("/",1)else{U("//",2)}}return b;}

các "/a@/b8/c(/d6/e3/f#/g9/h#/i1//i!/k</l1//li/o0/q9/s5//s$/t+/v>/wuu//w2u/x%/y?/"chuỗi được sử dụng để chuyển đổi từ một nhân vật cho người khác. 1 /có nghĩa là "char tiếp theo" đầu tiên nên được thay thế bằng cái tiếp theo /, 2 có nghĩa là "char tiếp theo" thứ hai nên được thay thế bằng cái tiếp theo.

Dùng thử trực tuyến


Tuyệt vời, bạn có thể vui lòng thêm một liên kết tio.run không?
mdahmoune

@mdahmoune Liên kết TIO được thêm vào, với mã để kiểm tra các trường hợp thử nghiệm của bạn :)
HatsuPulumKun

494 byte và cập nhật liên kết TIO tương ứng nếu bạn thay đổi nó.
Zacharý

@ Zacharý Bạn cần đặt một khoảng trắng giữa tên macro và nội dung macro, nếu không, nó sẽ gây ra lỗi khi biên dịch với C ++ 17. Ngoài ra, bạn có biết cách xóa liên kết TIO không? (vì cái cũ là vô dụng)
HatsuPulumKun


2

R , 224 219 byte

function(s,K=function(x)el(strsplit(x,"")),u=rle(K(s)))
Reduce(function(x,y)sub(K('abcdefghiiklloqsstvvwwxy')[y],c(K('@8(63#9#1!<1i095$+><'),'uu','2u',K('%?'))[y],x),1:24,paste0(gsub("1","",paste(u$l)),u$v,collapse=""))

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

Khó chịu, nhưng phần chính là sự thay thế lặp đi lặp lại trong Reduce. subchỉ thay đổi lần xuất hiện đầu tiên của trận đấu.

Cảm ơn JayCe vì đã chỉ ra một sân golf đẹp!


Làm tốt lắm :)))))
mdahmoune

tiết kiệm 1 byte bằng cách sắp xếp lại args. Tôi không tạo ra sự khác biệt lớn mà tôi biết;)
JayCe

@JayCe Tôi tìm thấy thêm một số byte :-)
Giuseppe


1

Python 2 , 220 216 194 190 188 byte

import re
S=re.sub(r'(.)\1+',lambda m:`len(m.group(0))`+m.group(1),input())
for a,b in zip('abcdefghiiklloqsstvvxyww',list('@8(63#9#1!<1i095$+><%?')+['uu','2u']):S=S.replace(a,b,1)
print S

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

Python 3 , 187 byte

import re
S=re.sub(r'(.)\1+',lambda m:str(len(m.group(0)))+m.group(1),input())
for a,b in zip('abcdefghiiklloqsstvvxyww',[*'@8(63#9#1!<1i095$+><%?','uu','2u']):S=S.replace(a,b,1)
print(S)

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


Thanx Tfeld 192 byte tio.run/ Kẻ
mdahmoune


186 byte . Bạn cũng có thể dễ dàng chuyển cái này sang Python 3 bằng 192 byte , nhưng tôi không nghĩ nó nên là một câu trả lời riêng.
NieDzejkob

@NieDzejkob Có vẻ như phiên bản Python 2 được đánh gôn của bạn tạo ra một đầu ra khác với phiên bản hiện tại của OP hoặc phiên bản Python 3 của bạn.
Jonathan Frech

@JomathanFrech xin lỗi, vì luôn kiểm tra sản xuất. 188 byte
NieDzejkob

1

Pip , 103 102 byte

aR:`(.)\1+`#_.B
Fm"abcdefghiiklloqsstvvwwxy"Z"@8(63#9#1!<1i095$+><WU%?"I#Ya@?@maRA:ym@1aR'W"uu"R'U"2u"

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

Giải trình

Mã này thực hiện ba bước chuyển đổi:

aR:`(.)\1+`#_.B  Process runs of identical letters

a                1st cmdline argument
 R:              Do this replacement and assign back to a:
   `(.)\1+`       This regex (matches 2 or more of same character in a row)
           #_.B   Replace with callback function: concatenate (length of full match) and
                  (first capture group)
                  Note: #_.B is a shortcut form for {#a.b}

Fm"..."Z"..."I#Ya@?@maRA:ym@1  Do the bulk of rules 2-25

  "..."                        String of letters to replace
       Z"..."                  Zip with string of characters to replace with
Fm                             For each m in the zipped list:
                   @m           First item of m is letter to replace
                a@?             Find its index in a, or nil if it isn't in a
               Y                Yank that into y
             I#                 If len of that is truthy:*
                     aRA:        Replace character in a at...
                         y        index y...
                          m@1     with second item of m

aR'W"uu"R'U"2u"  Clean up substitution
                 In the previous step, the replacements each had to be a single character.
                 This doesn't work for uu and 2u, so we use W and U instead (safe, since
                 uppercase letters won't be in the input) and replace them here with the
                 correct substitutions.
aR'W"uu"         In a, replace W with uu
        R'U"2u"  and U with 2u
                 and print the result (implicit)

* Chúng ta cần kiểm tra xem có phải a@?m@0không. Nó không đủ để kiểm tra rằng đó là sự thật, vì 0 là một chỉ số hợp pháp là falsey. Pip không có cách dựng sẵn ngắn để kiểm tra xem giá trị có phải không, nhưng kiểm tra độ dài của nó hoạt động đủ tốt trong trường hợp này: bất kỳ số nào cũng sẽ có độ dài ít nhất là 1 (trung thực) và không có độ dài bằng 0 (falsey).

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.