Cùng độ dài, chuỗi khác nhau


53

Thử thách

Cho một chuỗi không rỗng S có độ dài L bao gồm toàn bộ các ký tự ASCII in được, đầu ra một chuỗi có độ dài L mà bao gồm toàn bộ các ký tự ASCII in được, nhưng không phải là bằng S .

Đối với mục đích của thử thách này, một char ASCII có thể in được là một trong số giữa U + 0020 và U + 007E, bao gồm; nghĩa là, từ (không gian) đến ~(dấu ngã). Dòng mới và tab không được bao gồm.

Ví dụ, được đưa ra "abcde", một số đầu ra hợp lệ có thể là:

  • "11111"
  • "abcdf"
  • "edcba"

Nhưng những điều này sẽ không hợp lệ:

  • "abcde"
  • "bcde"
  • "abcde0"

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

"asdf"
"1111"
"       "
"~~~~~"
"abcba"
"1"
" "
"~"
" ~"
"~ "
"  0"
"!@#$%^&*()ABCDEFGhijklmnop1234567890"
" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"

Quy tắc

  • Bạn có thể giả sử đầu vào bao gồm toàn bộ ký tự ASCII có thể in được.
  • Bạn không được cho rằng đầu vào không chứa tất cả 95 ký tự có thể in được.
  • Bạn có thể giả sử đầu vào chứa ít nhất một ký tự và dài ít hơn 256 ký tự.
  • Đầu ra cũng phải bao gồm toàn bộ ký tự ASCII có thể in được. Ví dụ, bạn không thể xuất byte \ x7F cho đầu vào "~".
  • Đầu ra phải khác với đầu vào có xác suất 1; nghĩa là, bạn có thể tạo các chuỗi ngẫu nhiên cho đến khi một chuỗi khác với đầu vào, nhưng bạn không thể chỉ xuất các ký tự ngẫu nhiên L và hy vọng nó khác.
  • Các dòng mới không được phép trong đầu ra, nhưng bạn có thể xuất một dòng mới không được tính vào chuỗi.

Chấm điểm

Đây là , vì vậy mã ngắn nhất tính theo byte trong mỗi ngôn ngữ sẽ thắng.


Lưu ý rằng "tích cực" không bao gồm chuỗi trống. Để rõ ràng hơn, có thể thay thế "tích cực" bằng "nonzero"?
Máy

5
@CalculatorFeline Nhưng điều đó sẽ bao gồm các chuỗi có độ dài âm / s
Sản phẩm ETH

1
... Những thứ đó không tồn tại.
Máy

@CalculatorFeline Bây giờ tốt hơn?
Sản phẩm ETH

3
Một thử thách đơn giản nhưng không tầm thường.
Weijun Zhou

Câu trả lời:


34

Python 2 , 21 byte

lambda s:`s`[:len(s)]

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

Lấy biểu diễn chuỗi của chuỗi đầu vào và cắt ngắn nó theo chiều dài của chuỗi đầu vào. Đối với một chuỗi điển hình, điều này đặt nó trong 'dấu ngoặc kép và ngắt kết thúc:

abc  ->   'abc'  ->  'ab
     rep        chop

Lưu ý rằng chuỗi mới bắt đầu bằng '. Hãy cho thấy rằng đầu ra luôn khác với đầu vào.

  • Nếu đầu vào không có ', thì đầu ra bắt đầu 'và đầu vào thì không.

  • Nếu đầu vào chứa a 'và nhưng không ", thì Python sẽ sử dụng "cho dấu ngoặc kép bên ngoài, đưa ra một ký tự đầu tiên "không có trong chuỗi đầu vào.

  • Nếu đầu vào có cả hai '", thì dấu ngoặc kép bên ngoài 'và mỗi dấu 'được thoát là \'. Bất cứ nơi nào "xuất hiện đầu tiên trong đầu vào, nó sẽ dịch chuyển sang phải bởi đầu tiên 'trong đầu ra và bởi bất kỳ khả năng thoát nào. Điều này có nghĩa là nó không thể khớp với a "ở vị trí tương ứng trong đầu ra.

Cuối cùng, lưu ý rằng việc trích dẫn đầu vào và có thể thoát các ký tự luôn làm tăng số lượng ký tự, do đó việc cắt bớt đầu ra làm cho nó có cùng độ dài với đầu vào.

Lưu ý rằng điều quan trọng là Python thích nghi chuyển sang "trường hợp thứ hai. Nếu nó không làm như vậy, nó sẽ thất bại ở đầu vào ba ký tự '\'. Hoặc, bất kỳ tiền tố dài hơn của chuỗi chương trình sửa chữa bằng cách sử dụng '. Vì vậy, phương pháp này sẽ không hoạt động đối với hầu hết các ngôn ngữ.


Lý do cho chỉ mục 'là gì đến khi len(s)hơn -2?
Julian Wolf

1
@JulianWolf Đối với một đầu vào có chứa cả hai '", nhiều hơn 2 ký tự sẽ được thêm vào vì các trích dẫn cần phải được thoát.
Anders Kaseorg

Có ý nghĩa; đã không xem xét điều đó. Cảm ơn!
Julian Wolf

Bạn có thể sử dụng [2:]thay vì [:len(s)]để xuống tới 16 ký tự.
xbarbie

@xbarbie Điều đó không phải lúc nào cũng có cùng độ dài, nếu có nhân vật cần thoát.
xnor


15

JavaScript (ES6), 37 33 36 29 26 18 21 19 byte

s=>s.slice(1)+ +!+s

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

-4 byte nhờ vào ETH Productstions

-7 + -5 + -2 byte nhờ CalculatorFeline

-3 byte nhờ Rick Hitchcock

Di chuyển ký tự đầu tiên đến cuối và đặt nó thành 0 nếu đó là số và khác không, và 1 khác.

Giải trình

s=>                    anonymous function with parameter s
                 +s    convert s to a number
                !      not (converts to boolean; relevant: 0->true,1->false)
               +       convert !+s back to number (true->1, false->0)
   s.slice(1)+         prefix the rest of the string
              ␣        needed to avoid the +s combining

Bằng chứng

Bởi vì char thứ hai trở thành thứ nhất, char thứ ba trở thành thứ hai, v.v ... tất cả các ký tự sẽ phải giống hệt nhau. Char còn lại cuối cùng chỉ có thể là 0 hoặc 1, do đó char lặp lại sẽ phải là 0 hoặc 1. Nhưng bất kỳ chuỗi 0 nào cũng tạo ra 1 ở cuối và ngược lại; do đó, không thể tạo đầu vào bằng với đầu ra của nó. -Sản phẩm

Xem các chỉnh sửa cho các phiên bản cũ và giải thích.

f=
s=>s.slice(1)+ +!+s

console.log(f("000"))
console.log(f("111"))
console.log(f("001"))
console.log(f("110"))
console.log(f("~"))
console.log(f("111111111111111111111111111111111111111111111111111"))
console.log(f("Hello world!"))
console.log(f("23"))
console.log(f(" "))
console.log(f("1x"))


13

Thạch , 3 byte

~Ṿṁ

Đầu ra là một chuỗi các chữ số, dấu phẩy và ký tự dấu trừ, ký tự đầu tiên sẽ khác với ký tự đầu tiên của chuỗi đầu vào.

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

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

~Ṿṁ  Main link. Argument: s (string)

~    Map bitwise NOT over the characters c in s.
     This attempts to cast c to int and then apply bitwise NOT, mapping
     '0', ..., '9' to 0, ..., 9 (before ~), then -1, ..., -10 (after ~).
     For non-digits, the attempt fails, mapping c to 0.
 Ṿ   Uneval, yielding a comma-separated string of integers in [-10, ..., 0].
     The first character will be '-' if s starts with a digit and '0' if not.
  ṁ  Mold; truncate the result to the length of s.

6

Haskell , 20 byte

map$head.show.(<'M')

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

Chuyển đổi thành một chuỗi FT. Điều quan trọng là các nhân vật FTchuyển đổi lẫn nhau. Điều này được thực hiện bằng cách kiểm tra xem ký tự có nhỏ hơn Mđể nhận Truehoặc Falsesau đó lấy ký tự đầu tiên của biểu diễn chuỗi.


Haskell , 23 byte

q '~'=' '
q _='~'
map q

Dùng thử trực tuyến

Thay thế mọi nhân vật bằng ~, ngoại trừ ~trở thành một không gian.


Tầm quan trọng của không gian trong là q '~'gì? Tại sao nó không thể được gỡ bỏ?
Cyoce

@Cyoce Haskell cho phép 'làm nhân vật trong số nhận dạng, do đó q'~'=' 'sẽ được phân tích cú pháp dưới dạng q' ~ '=' '(báo cáo lỗi từ vựng vì lần cuối 'không thể so sánh được.)
--rjan Johansen

5

Khoảng trắng, 59 byte

Đại diện hữu hình

NSSNSSSTSSSSSNSNSSNSSNSTNTSTTTTSSTNTTSNSNSTSSSNSSSNTNSSNSNN

Những gì nó làm:

Đối với mỗi ký tự, nó đọc nó in một khoảng trắng, ngoại trừ khi đó là khoảng trắng, thì nó sẽ in một @.

Tháo gỡ:

loop:
    push 32
     dup
      dup
       dup
        ichr
       get
       sub
      jn not_32
     dup
      add
not_32:
     pchr
    jmp loop

Luôn luôn tốt đẹp để xem một giải pháp trong khoảng trắng. Đặc biệt là khi bạn thường không thể thực sự nhìn thấy nó. +1
Josiah Winslow

Câu trả lời tốt đẹp! Tôi đã cố gắng đưa ra một cái gì đó ngắn hơn cho cấu trúc, nhưng không thể tìm thấy bất cứ điều gì. Nhưng bạn có thể chơi golf 2 byte bằng cách thay đổi SSSTSSSSSN (push 32)thành SSSTSSTN (push 9)TSSS (add)thành TSSN (multiply). Nó sẽ in một tab cho mỗi ký tự có giá trị unicode trên 9 và Q(9 * 9 = 81) cho mỗi ký tự có giá trị unicode là 0..9. Dùng thử trực tuyến 57 byte hoặc Thử trực tuyến với phần tô sáng và giải thích bổ sung
Kevin Cruijssen

Bỏ qua bình luận của tôi ở trên. Đối với thử thách, một tab không được coi là ký tự ASCII có thể in được ..
Kevin Cruijssen

5

MATL , 6 5 byte

Qo!V!

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

Giải trình

Q     % Implicitly input a string. Add 1 to each code point.
o     % Parity: 0 if odd, 1 if even. Note that '0' has ASCII code 48, so after
      % having added 1 it now gives 1. Similarly. '1' has ASCII code 49, so it
      % now gives 0. All other chars give 0 or 1. 
!V!   % Convert each number to the corresponding char. Implicitly display

Đó là 5 trong CJam: l'0f=(nếu nó làm như tôi nghĩ)
Martin Ender

@MartinEnder Vâng, chính xác là như vậy :-) Tôi vừa thêm một lời giải thích
Luis Mendo

5

Haskell , 19 byte

Một hàm ẩn danh nhận và trả về a String. Sử dụng như (map$(!!1).show.succ) "1111".

map$(!!1).show.succ

Hãy thử trực tuyến! (Sử dụng khai thác thử nghiệm của @ xnor.)

  • Đối với mỗi ký tự trong chuỗi đầu vào, tăng ký tự, sau đó chuyển đổi nó thành định dạng bằng ký tự, sau đó lấy ký tự thứ hai của chữ, là ký tự chỉ sau 'trích dẫn bắt đầu .
  • Đối với gần như tất cả các ký tự có thể in, điều này chỉ dẫn đến ký tự tăng dần. Các trường hợp ngoại lệ là &~, mà thay vào đó đưa ra \, bởi vì kế của họ '\DELđược thoát trong literals nhân vật.

khá chắc chắn headcó thể được sử dụng thay thế (!!1)cho một byte thêm
Julian Wolf

Không, head(!!0), không (!!1). Nó sẽ thất bại về nhân vật '.
Ørjan Johansen

À, đúng rồi. Tôi vừa đọc câu trả lời của con trăn và quên rằng trích dẫn thường cần được đối xử đặc biệt.
Julian Wolf

4

05AB1E , 5 byte

žQDÀ‡

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

Giải trình

Thay thế mỗi char bằng char ascii có thể in tiếp theo, gói từ dấu ngã sang không gian.

žQ     # push a string of printable acsii chars (space to tilde)
  D    # duplicate
   À   # rotate left
    ‡  # translate

4

V , 7 byte

íÁ/a
g?

Hãy thử trực tuyến! hoặc Xác minh tất cả các trường hợp thử nghiệm!

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

Xem xét tất cả các chuỗi bao gồm ASCII có thể in. Mỗi chuỗi phải 1) Chứa các ký tự chữ cái hoặc 2) Không chứa các ký tự chữ cái.

Vì vậy, cách chương trình này hoạt động là trước tiên chuyển đổi một ký tự không phải là chữ cái thành 'a', sau đó thực hiện ROT13 trên chuỗi đầu vào.

í       " Substitute:
 Á      "   A non-alphabetic character ([^a-zA-Z])
  /     "   with
   a    "   the letter 'a'
g?      " Perform ROT13 on...
        "   (Implicit) the current line.

Điều này sẽ phá vỡ nếu bạn có một số giống như 9một mình, khi tăng nó sẽ thêm một ký tự khác vào chuỗi
nmjcman101

@ nmjcman101 À, đó là một điểm tốt. Tôi đã hoàn nguyên
DJMcMayhem

Mặc dù vậy, tôi thích điều ROT13, tôi không biết V (im) có thể làm điều đó
nmjcman101

4

C (gcc) , 22 byte

f(char*s){*s=65+*s%2;}

Đưa một con trỏ chuỗi và điều chỉnh char đầu tiên tại chỗ.

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


1
Ngắn hơn : *s=159-*s. Luôn thay đổi bit cuối cùng, do đó không bao giờ đưa ra cùng một ký tự. Lưu ý rằng159 = ' ' + '~'
celtschk

Tôi nghĩ bạn có nghĩa là 158 = '' + '~'. 159-32 = 127, đó sẽ là một nhân vật ngoài phạm vi. Nhưng ý kiến ​​hay.
Computronium

@celtschk Các liên kết không thể hoạt động, vì có một số lượng lẻ (95) ký tự có thể in được, do đó, ít nhất một trong số chúng sẽ ánh xạ tới chính nó.
Dennis

@Computronium: Rất tiếc, bạn đã đúng, tôi đã nhận được mã ký tự ~sai.
celtschk

4

C (gcc) , 20 byte

Câu trả lời của Saw Dennis, đã nghĩ đến một cải tiến thiết yếu 2 byte.

f(char*s){*s^=*s/3;}

Hãy thử trực tuyến! (Chân trang của Dennis.)

Giống như bản gốc, sửa đổi ký tự đầu tiên của chuỗi, nhưng xors nó với giá trị của nó chia cho 3 (số nhỏ nhất hoạt động. 2 thất bại trên ký tự đơn 'U'cho 127, không in được.)


4

Python 2 , 25 byte

lambda s:`s<'T'`[0]+s[1:]

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

Anders Kaseorg đã lưu một byte bằng cách trích xuất ký tự đầu tiên từ Truehoặc False.


Tôi khuyên bạn nên thay đổi '?'thành một mã số gồm 2 chữ số, nhưng Python không phải là một trong những ngôn ngữ mà bạn có thể làm điều đó :(
CalculatorFeline

Các biến thể lưu một byte (nhưng giảm khả năng tương thích Python 3): lambda s:`+(s<'1')`+s[1:]hoặclambda s:`s<'T'`[0]+s[1:]
Anders Kaseorg


3

Octave , 19 18 byte

@(s)['',(s<66)+65]

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

Giải trình:

@(s)                 % Anonymous function taking a string s as input
         s<66        % A boolean vector with `1` for all characters below ASCII-66.
        (s<66)+65    % Add 65 to this, so that all elements that are 32-65 are now 66.
                     % All other elements are 65 
    ['',         ]   % Implicitly convert the list of 65 and 66 to the letters A and B

3

CJam , 5 byte

l)iA%

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

Chuyển đổi ký tự cuối cùng thành điểm mã của nó và lấy modulo 10. Điều này rõ ràng khác với các ký tự không có chữ số ở vị trí cuối cùng. Nhưng các chữ số bắt đầu tại điểm mã 48, do đó, việc sử dụng các mod 10 đó sẽ dịch chuyển chúng sang trái theo chu kỳ và do đó ký tự cuối cùng luôn được thay đổi.




3

Khối , 10 byte

..@|i?2%)O

Hãy thử trực tuyến! hoặc xem nó chạy!

Đối với mỗi char, in 1nếu char có điểm mã chẵn, 2nếu không; 1có một điểm mã lẻ và 2chẵn, vì vậy đầu ra sẽ không bao giờ bằng đầu vào.

Giải trình

Mã này tương ứng với mạng khối sau:

    . .
    @ |
i ? 2 % ) O . .
. . . . . . . .
    . .
    . .

IP (con trỏ lệnh) bắt đầu ở góc trên bên trái của mặt xa bên trái, hướng về phía đông. Nó tuân theo loạt hướng dẫn này:

i     Grab a char-code from STDIN and push it to the stack (-1 if there is no more input).
?     If the top item is negative, turn left and hit @ which ends the program.
      If it's positive (any printable ASCII char), turn right. The IP runs through a bunch
        of no-ops, then hits:
)     Increment the top item.
|     Mirror the IP's direction horizontally (turns it around).
)     Increment the top item again. The IP then wraps around again until it hits:
?     The top item is positive, so turn right.
2     Push a 2 to the stack.
%     Push the modulus of the top two items (0 for even char-code, 1 for odd).
)     Increment the result (now 1 for even char-code, 2 for odd).
O     Output as a number. The IP wraps back around to the i and the process starts again.

3

Alice , 9 byte

#oi/
t i@

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

Giải trình

Ý tưởng được lấy từ đệ trình CJam của Martin Ender. Ký tự đầu tiên được lấy làm điểm mã, giảm mod 10 và được chuyển đến cuối đầu ra. Vì chính xác một ký tự đã được thay đổi, việc hoán vị các ký tự không thể dẫn đến việc lấy lại cùng một chuỗi.

#   skip next command
o   (skipped)
i   push first byte onto stack
    STACK: [97]
/   reflect to SE, switch to ordinal mode (implicit reflect to SW)
i   push remaining input onto stack as string (implicit reflect to NW)
    STACK: [97, "sdf"]
o   output top of stack (implicit reflect to SW)
    STACK: [97]
t   implicitly convert code point to decimal string, and extract last character
    (implicit reflect to NE)
    STACK: ["9", "7"]
o   output this last digit (implicit reflect to SE)
i   push empty string, since there is no more input to take (implicit reflect to NE)
/   reflect to S, switch to cardinal mode
@   terminate

Sử dụng tcho mod 10 thực sự thông minh, tốt đẹp. :)
Martin Ender

3

Đẩy , 1 byte

Q

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

Điều này chuyển đổi chuỗi đã cho thành danh sách mã ký tự ASCII, lập chỉ mục chúng (lập chỉ mục mô-đun) thành bảng chữ cái in hoa, sau đó in kết quả. Về cơ bản, mỗi nhân vật nđược ánh xạ tới chr(ord(n) % 26 + 65). Bạn có thể sử dụng chương trình này để xem cách ánh xạ hoạt động.

Đầu ra:

  • Sẽ luôn có cùng độ dài với đầu vào, vì các ký tự được ánh xạ trực tiếp vào các ký tự mới.
  • Sẽ luôn chỉ bao gồm các ký tự ASCII có thể in (vì nó chỉ chứa các chữ cái viết hoa)
  • Sẽ luôn khác với đầu vào, vì không có ký tự đầu vào khả dĩ nnào chr(ord(n) % 26 + 65) == n, vì điều này là đúng, phải có một số nguyên xsao 26x = 65cho không có giải pháp.

1 byte

q

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

Câu trả lời này hoàn toàn giống nhau, ngoại trừ việc nó ánh xạ tới các tự chữ cái viết thường thay vì các tự chữ cái in hoa . Điều này vẫn còn hiệu lực vì không có ký tự đầu vào nào có thể nnhư vậy chr(ord(n) % 26 + 97) == n.


2

Brain-Flak , 53 byte

Bao gồm +1 cho -c

([(((()()()()){}){}){}()]({}())){{}(<({}[()()])>)}{}

Điều này sẽ làm giảm ký tự đầu tiên trừ khi nó là khoảng trắng, trong trường hợp đó, nó sẽ tăng ký tự đầu tiên.

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

([(((()()()()){}){}){}()]      )                     # Push: input + 1 != 33 on top of...
                         ({}())                      #    input + 1
                                {{}(<          >)}{} # If (input + 1 != 33)
                                     ({}[()()])      #   Push: (input + 1) - 2

2

Thạch , 4 byte

^1Ṿ€

Xuất ra một chuỗi chữ số. Không có ký tự đầu ra sẽ bằng ký tự đầu vào tương ứng.

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

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

^1Ṿ€  Main link. Argument: s (string)

^1    XOR each character c in with 1.
      This attempts to cast c to int, mapping '0', ..., '9' to 0, ..., 9.
      For non-digits, the attempt fails, mapping c to 0.
      After XORing with 1, we get 1, 0, 3, 2, 5, 4, 7, 6, 9, 8 for '0', ..., '9', 
      and 1 for all non-digits.
  Ṿ€  Uneval each; mapping 0, ..., 9 to '0', ..., '9'. This yields a character
      array, which is Jelly's string type.
      Note that no character is mapped to itself.


2

PHP, 30 27

<?=strtr($a=$argn,$a,$a^1);

Thay đổi mỗi char bằng với char đầu tiên với char có ít bit đáng kể nhất được lật.


"~" Có hoạt động không?
Máy

Nó không thực sự lật một chút quan trọng nhất của char đầu tiên; nó chuyển đổi nó thành một số nguyên và lật đi phần nhỏ nhất của . Vì vậy, có, @CalculatorFeline, ~không hoạt động, xuất ra 1.
Sản phẩm ETH

Oh. Có !$ahay ~$alàm việc không?
Máy

@ETHproductions Tôi đã thực hiện chỉnh sửa cuối cùng ngay trước khi đi ngủ và không có thời gian để cập nhật nó. Tất nhiên, quyền của bạn trước tiên chuyển đổi thành số nguyên và do đó thậm chí có thể không thay đổi char đầu tiên nhưng có thể thứ hai, ví dụ "12" trở thành "13".
Christoph

@CalculatorFeline buồn bã cả thất bại !$alần lượt "12"vào "12"falseđược chuyển thành một chuỗi rỗng để không có gì được thay thế và ~$abiến tất cả mọi thứ vào unprintables vì ~"12"không chuyển đổi sang int đầu tiên nhưng theo nghĩa đen flips tất cả các bit trong chuỗi.
Christoph


2

Brachylog , 9 byte

{¬Ṣ|∧Ịh}ᵐ

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

Giải trình

Điều này thay thế tất cả các ký tự bằng một khoảng trắng, ngoại trừ khoảng trắng mà nó thay thế bằng "0".

{      }ᵐ      Map on each char of the Input
 ¬Ṣ              The Input char is not " ", and the Output char is " "
   |             Or
    ∧Ịh          The Output char is "0"

2

PHP <7.1, 31 byte

for(;~$c=$argn[$i++];)echo$c^1;

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


Vui lòng xóa giải pháp 66 byte vì nó không hợp lệ.
Máy

Thất bại cho đầu vào "1", "10", "101", v.v. Bạn không thể chỉ phụ thuộc vào độ dài chuỗi.
Máy

@CalculatorFeline "1" xuất ra "0", "10" đầu ra "01", "101" đầu ra "010". Vấn đề ở đâu?
Christoph

@CalculatorFeline "1" => 0, "10" => 01, "101" => 010 Trường hợp không thành công?
Jörg Hülsermann

1
Sản lượng PHP 7.1 A non-numeric value encountered. Và bạn có thể sử dụng ~thay vì a&.
Tít

2

Golf, 3 byte

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

)5%

Lấy giá trị ASCII của ký tự cuối modulo 5 và thay thế ký tự cuối cùng bằng kết quả. Điều này rõ ràng hoạt động đối với các ký tự không có chữ số, nhưng nếu ký tự cuối cùng là một chữ số, nó cũng thay đổi ("0" mod 5 = 3, "1" mod 5 = 4, v.v.).

Điều này cũng sẽ làm việc với 7 hoặc 9 trong khi vẫn giữ nguyên chiều dài.

Ngoài ra, yay! Tôi có một giải pháp Golfscript tốt như các giải pháp tốt nhất ở đây!


2

Vui nhộn , 26 22 byte

s=>s::gsub("."a=>1&~a)

Tính toán ~acho các chữ số không trả về NaN. Sau đó 1&giới hạn ở mức 0 hoặc 1, đối với chữ số 0, điều này sẽ là 1, và đối với 1điều này sẽ là 0. Vì vậy, chuỗi này luôn luôn là duy nhất.

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

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.