Tiêm từ hai chuỗi thành một chuỗi


13

Thử thách

Viết chương trình áp dụng hàm tiêm trong đó lấy một cặp chuỗi theo thứ tự làm đầu vào và một chuỗi làm đầu ra. Nói cách khác, mỗi đầu vào phải ánh xạ tới một đầu ra duy nhất.

Cụ thể

  • Đầu vào có thể là bất kỳ hai chuỗi có độ dài tùy ý, nhưng sẽ chỉ bao gồm các ký tự ASCII có thể in được (mã [32,126] ).
  • Tương tự, chuỗi đầu ra không có giới hạn độ dài, nhưng nó chỉ bao gồm các ký tự ASCII có thể in được.
  • Nếu ngôn ngữ của bạn không thể xử lý các chuỗi có độ dài tùy ý, chương trình có thể chỉ hoạt động trên lý thuyết cho các chuỗi có kích thước bất kỳ.
  • Ánh xạ từ đầu vào đến đầu ra phải nhất quán giữa các lần thực hiện chương trình. Mặt khác, ánh xạ bạn sử dụng hoàn toàn phụ thuộc vào bạn, miễn là nó là một mũi tiêm.
  • Đầu vào được đặt hàng. Nếu hai chuỗi đầu vào khác nhau, chúng sẽ tạo ra một đầu ra khác với khi chúng được hoán đổi. stf(s,t)f(t,s)
  • Không phải mọi chuỗi cần phải là một đầu ra có thể.
  • Câu trả lời ngắn nhất trong mỗi ngôn ngữ chiến thắng!

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

Tất cả các đầu vào sau đây sẽ dẫn đến kết quả đầu ra khác nhau. Để tránh nhầm lẫn, các chuỗi được bao quanh bởi các máy chém («») và cách nhau bởi các khoảng trắng.

"Chào thế giới"
«Lelho» «drowl»
"khác nhau"
"không giống nhau"

«Mã» «Golf»
«Đồng» «deGolf»
«CodeGolf» «»

«» «»
«» «»
«» «»
«» «»
«» «»

«Abc", »« def »
«Abc» «," def »
«Abc '» «' def»
«Abc '» «' def»

«\» «" »
«\» «\" »

8
Hmm Tôi chỉ nhận thấy "Viết chương trình mà ..." - lưu ý rằng bằng sự đồng thuận meta (hiện 46 lên, 1 xuống) "Hạn chế chỉ các chương trình yêu cầu xác định rõ ràng" chương trình đầy đủ "thay vì chỉ" chương trình "" . Tôi hy vọng bạn không cố gắng hạn chế điều này, nhưng nếu bạn đã cần cập nhật bài đăng cho phù hợp và giải quyết những người trong chúng tôi đã gửi chức năng dưới dạng câu trả lời.
Jonathan Allan

4
@Jonathan ALLan Mục đích là cho phép các chức năng.
âm bảy

3
Một trong hai chuỗi có thể trống?
Xù xì

2
@Shaggy Có, một trong hai hoặc có thể.
âm bảy

1
Chúng tôi có thể có một số trường hợp thử nghiệm? Cảm ơn!
ngerak

Câu trả lời:


17

cân não 30 29 27 23 byte

,[-[+.>]-[>+<---]>.-.,]

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

Các đầu vào được phân tách bằng một 0x01byte.

Điều này biến ["foo", "bar"]thànhfUToUToUTUTbUTaUTrUT . Để khôi phục hai chuỗi ban đầu, lấy các nhóm gồm 3 ký tự, tìm một ký tự không có chữ cái thứ hai Uvà phân chia ở đó.


@Grimy Xin lỗi, hiểu nhầm "Các đầu vào được phân tách bằng byte 0x01."
lãng phí

15

JavaScript (ES6), 14 byte

Lấy đầu vào là một mảng gồm 2 chuỗi. Lấy cảm hứng từ câu trả lời của Luis .

JSON.stringify

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


JavaScript (ES6),  21  20 byte

Đưa đầu vào là (a)(b).

a=>b=>[a.length,a]+b

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

Trả về độ dài của a , theo sau là dấu phẩy, tiếp theo là nối của ab .


Chết tiệt! Chỉ là để sử dụng các stringifythủ thuật bản thân mình!
Xù xì

Nghỉ với a="hello","" b="world"a="hello" b="","world"
Soleil

1
@Soleil Điều đó sẽ cho ["\"hello\",\"\"","\"world\""]["\"hello\"","\"\",\"world\""].
Arnauld

1
@Arnauld bảo vệ dấu gạch chéo ngược sẽ không hiển thị. Các chức năng sẽ không tiêm.
Soleil

1
@Soleil Tôi không hiểu ý bạn. JSON.stringify()chắc chắn thoát ra ". Xem một bãi chứa hex .
Arnauld

15

jq -c, 0 byte

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

Điều này chắc chắn cảm thấy như gian lận ...? Nhưng nó dường như tuân thủ các quy tắc của thách thức.

Theo mặc định, jqsẽ xuất đầu vào của nó ở định dạng JSON có thể đọc được. Các -c(compact) cờ nói jqđến đầu ra theo kiểu "nhỏ gọn", mà loại bỏ các dòng mới (kể từ thách thức cấm ASCII không thể in được).


1
OP cho phép đầu vào trống, vì vậy a = "", b = "x" sẽ cung cấp đầu ra tương tự như a = "x" b = ""
Gnudiff

3
@Gnudiff Làm sao vậy? Họ sẽ cho ["","x"]["x",""]tương ứng
Doorknob

1
Xin lỗi, bạn nói đúng.
Gnudiff


5

Japt -S , 3 byte

Tôi vẫn cảm thấy mình phải thiếu thứ gì đó ở đây ...

®mc

Thử nó

Có thể là 2 byte:

mq

Thử nó

Hoặc kéo dài nó với 1-byter này:

U

Thử nó

Phiên bản đầu tiên ánh xạ từng chuỗi trong mảng thành các điểm mã của nó và xuất ra chúng được nối với một khoảng trắng.

Phiên bản thứ hai phân tách từng chuỗi thành một mảng ký tự và xuất ra chúng được nối với một khoảng trắng.

Và phiên bản thứ ba, có cảm giác như gian lận, chỉ xuất ra đầu vào với -Qcờ thực hiện công việc nặng nhọc srringify.


5

Bình thường , 4 byte

jNmC

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

Điều này chuyển đổi từng chuỗi thành cơ sở 256 và sau đó nối chúng theo thứ tự với a ". Vì các kết quả là mỗi số nên "phân tách rõ ràng chúng và các chuỗi gốc có thể được phục hồi mCsdczN.


1
@AndersKaseorg đề xuất 1-byter .
Kevin Cruijssen

@KevinCruijssen Tôi đã nhận thức được điều đó vì một vài phút sau khi tôi đăng bài này, tôi chỉ thích tinh thần của giải pháp này. Dù sao cũng cảm ơn bạn đã mang nó lên và chắc chắn cảm thấy thoải mái khi tự đăng nó :)
FryAmTheEggman

Tôi thực sự thích câu trả lời của bạn là tốt hơn. :) Và không, tôi thậm chí không biết Pyth. Nếu bạn muốn bạn có thể tự đăng nó dưới dạng một câu trả lời riêng biệt (hoặc một câu trả lời kết hợp bằng cách chỉnh sửa câu trả lời này), nếu không thì Anders Kaseorg có thể đăng nó, vì anh ấy là người đã đề cập đến nó trong bình luận.
Kevin Cruijssen

4

T-SQL, 38 byte

SELECT QUOTENAME(a)+QUOTENAME(b)FROM i

Tôivarcharmộtb

Sử dụng QUOTENAME, bao quanh các chuỗi với []và cũng thoát khỏi bất kỳ dấu ngoặc nội bộ nào. Nên ánh xạ tới một đầu ra duy nhất.


1
Cùng độ dài trên MySQL: SELECT CONCAT(QUOTE(a),QUOTE(b))FROM t Dùng thử trực tuyến
Night2

4

Zsh , 7 byte

<<<$@:q

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

Ngẫu nhiên tham gia các đối số trên không gian. Cácq sửa đổi yêu cầu zsh trích dẫn các đối số, trong đó chủ yếu thoát khỏi các không gian, đảm bảo một không gian không bị che khuất tách biệt rõ ràng giữa hai đối số.

(Không có q, "a " "b""a" " b"cả hai sẽ mang lại "a b".)


3

MATL , 1 byte

j

Mã này lấy một mảng gồm hai chuỗi làm đầu vào và xuất ra một chuỗi đại diện cho mảng đó.

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

Giải trình

Mã chỉ đơn giản là đọc đầu vào dưới dạng một chuỗi, không được đánh giá.


1
Điều này thực sự có hai chuỗi làm đầu vào? Có vẻ như điều này chỉ in đầu vào bất cứ điều gì. Hãy thử trực tuyến!
DJMcMayhem

1
@DJ Nó chỉ đọc đầu vào không được đánh giá, vì vậy nó đọc bất cứ thứ gì. Có phải là một lỗ hổng? Một cách tiếp cận tiêu chuẩn hơn sẽ là lấy đầu vào được đánh giá thành một mảng và sau đó chuyển đổi thành biểu diễn chuỗi. Nhưng kết quả sẽ giống như mã của tôi, vì vậy tôi sẽ lập luận rằng sự khác biệt là không thể quan sát được
Luis Mendo

3

Thạch , 2 byte

ŒṘ

Một liên kết đơn thể chấp nhận một danh sách hai danh sách các ký tự làm đối số của nó tạo ra một danh sách các ký tự.

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

Làm sao?

Nó được tích hợp sẵn để có các biểu diễn chuỗi, mô phỏng của Python.



3

05AB1E , 2 byte

₁ö

Hãy thử trực tuyến! Giải thích mỗi chuỗi dưới dạng một số nguyên cơ sở 256, sau đó in hai chuỗi dưới dạng [1, 2].


05AB1E, 1 byte (không hợp lệ)

â

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

Đưa sản phẩm cartesian của đầu vào với chính nó. Báo giá trong đầu vào không được thoát, có thể gây nhầm lẫn. Tôi buộc phải kết hợp tất cả các kết hợp lên đến 12 ", ""], ["không tìm thấy bất kỳ va chạm nào; tuy nhiên, tôi không thể chứng minh rằng không có bất kỳ va chạm nào cho chuỗi dài hơn. Nếu bất cứ ai có thể đưa ra một bằng chứng hoặc ví dụ phản biện, tôi sẽ đánh giá cao điều đó!

Cả 0-byter tầm thường đều thất bại vì các trích dẫn không được thoát: các đầu vào ( ", ", chuỗi rỗng) và (chuỗi trống, ", ") đều mang lại đầu ra ["", "", ""].

1-byter º(phản chiếu từng chuỗi đầu vào) cũng không thành công vì điều này: đầu vào ( ", "" ,", chuỗi trống) và (chuỗi trống, " ,"", ") đều mang lại đầu ra ["", "" ,"", "" ,"", ""].


3

C # với 26 byte (nhờ Lukas Lang, Kevin Cruijssen và Jo King)

a=>b=>$"{a.Length}.{a}{b}"

tio.run lambda


1
Vui lòng xem xét việc sử dụng tio.run
Ver Nick cho biết Phục hồi lại

Điều này vẫn phá vỡ ("a <>", "b") và ("a", "<> b") - lưu ý rằng không thể xử lý tất cả các trường hợp nếu bạn chỉ nối các đầu vào, bất kể bạn là gì đặt giữa / xung quanh chúng - bạn cần sửa đổi các chuỗi bằng cách nào đó
Lukas Lang

1
Xin lỗi, vẫn không phải: ("1", "11111111111") và ("11111111111", "1") - mặt khác hoạt động (và thậm chí ngắn hơn) là thế này $"{a.Length}.{a}{b}"- bạn luôn có thể trích xuất abtừ đây mà không cần bất kỳ sự mơ hồ (chỉ cần đọc cho đến lần đầu tiên .để có được độ dài a, bsau đó là phần còn lại
Lukas Lang

1
@LukasLang Tuyệt vời. Cảm ơn đã theo dõi.
Soleil

1
Rất cám ơn @JoKing!
Soleil

2

Than , 12 byte

⪫E²⭆⪪S"⪫""λ,

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

 E²             Repeat twice
     S          Input a string
    ⪪ "         Split it on `"`s
   ⭆            Map over each piece and join
       ⪫""λ     Wrap each piece in `"`s
⪫          ,    Join the two results with a `,`
                Implicitly print




1

CSS + HTML, 55 + 20 = 75 bytes

Provide the inputs in the HTML after <code> tags. Visually injects letters one by one from each input into the output. When an input is longer than the other one, visual spaces are shown for missing letter(s) of the shorter input. Also one comma is added in HTML to force visual output uniqueness (I hope).

*{position:absolute;letter-spacing:9px}code>code{left:9px
<code>abcdefg<code>hijklmn</code>,



1

Perl 6, 6 3 bytes

&dd

Try it online!

Outputs the object representation to STDERR.


I'm not familiar enough with Perl - how would you input a string containing spaces here?
negative seven

2
@negativeseven like this
Grimmy

@negativeseven Yeah sorry, I was just using a shortcut syntax for lists of strings. You can do that in a typical fashion like ["Hello, ", "World!"]
Jo King

1

Lua, 27 bytes

print(('%q%q'):format(...))

Try it online!

Full program, take input as arguments.

Inspired by zsh answer, as it also use %q modifier to use internal safe-string engine.

Also, I can think of just

('%q%q'):format

but I'm not sure if this is acceptable answer.


I don't think the second is valid since ('%q%q'):format doesn't result in an object that can, for example, be assigned to a variable. It just causes a syntax error on its own. The colon syntax is just a shortcut for '%q%q'.format('%q%q', ...) and Lua doesn't allow partial application for functions
Jo King

@JoKing Yeah, you are right, I think.
val says Reinstate Monica

1

sed, 19 bytes

N
s/ /. /g
s/\n/: /

Try it online!

N          # append the second string into the pattern space
s/ /. /g   # prefix all spaces with ".". Now ": " will not occur in the stiring
s/\n/: /   # replace the newline with ": "


1

C (gcc), 59 bytes

Thanks to Grimy for the suggestion.

Takes an array of input strings (of which "2" is the correct number for this challenge) and prints their character values, including the trailing NUL. Technically, the %p formatter used by printf is for pointers, but it works fine for displaying hex values of arbitrary integers if you're not picky about how they look!

f(s,t)char**s,*t;{for(;t=*s++;)for(;printf("%p",*t++)^5;);}

Try it online!


Nice! Here’s a 59.
Grimmy




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.