การฉีดจากสองสายไปยังหนึ่งสาย


14

ท้าทาย

เขียนโปรแกรมที่ใช้ฟังก์ชั่นการฉีดซึ่งใช้คู่ของสตริงที่สั่งซื้อเป็นอินพุตและหนึ่งสตริงเป็นเอาต์พุต กล่าวอีกนัยหนึ่งอินพุตแต่ละรายการจะต้องจับคู่กับเอาต์พุตเฉพาะ

ข้อมูลจำเพาะ

  • การป้อนข้อมูลที่อาจจะเป็นใด ๆสองสายมีความยาวโดยพลการ แต่จะมีเพียงของตัวอักขระ ASCII (รหัส )[32,126]
  • สตริงเอาต์พุตไม่มีข้อจำกัดความยาว แต่ต้องประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เท่านั้น
  • หากภาษาของคุณไม่สามารถจัดการกับสายอักขระที่มีความยาวตามอำเภอใจโปรแกรมอาจทำงานตามหลักเหตุผลสำหรับสตริงที่มีขนาดใด
  • การแม็พจากอินพุตไปยังเอาต์พุตควรสอดคล้องกันระหว่างการเรียกใช้งานโปรแกรม มิฉะนั้นการทำแผนที่ที่คุณใช้นั้นขึ้นอยู่กับคุณอย่างสมบูรณ์ตราบใดที่มันเป็นการฉีด
  • อินพุตถูกสั่ง หากทั้งสองสายอินพุตแตกต่างกันพวกเขาควรผลิตผลลัพธ์ที่แตกต่างกว่าถ้าพวกเขาสลับ stf(s,t)f(t,s)
  • ไม่ใช่ว่าทุกสายจะต้องเป็นผลลัพธ์ที่เป็นไปได้
  • คำตอบที่สั้นที่สุดในแต่ละภาษาชนะ!

กรณีทดสอบ

อินพุตต่อไปนี้ควรเป็นผลลัพธ์ที่ต่างกัน เพื่อหลีกเลี่ยงความสับสนสตริงถูกล้อมรอบด้วย guillemets («») และคั่นด้วยช่องว่างเดียว

"สวัสดีชาวโลก"
« lelho »« drowl »
« diffe »« _rent »
"ไม่เหมือนกัน"

«รหัส»«กอล์ฟ»
« Co »« deGolf »
« CodeGolf »«»

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

« abc ", »« def »
« abc »«, "def »
« abc '»«' def »
« abc '»«' def »

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

8
อืมผมเพิ่งสังเกตเห็น "เขียนโปรแกรมที่ ..." - ทราบว่าโดยฉันทามติ meta (ปัจจุบัน 46 ขึ้น 1 ลง) "การ จำกัด การใช้งานโปรแกรมก็ต้องชัดเจนระบุ 'โปรแกรมเต็มรูปแบบ' มากกว่าแค่ 'โปรแกรม'" ฉันหวังว่าคุณไม่ได้ตั้งใจจะพยายาม จำกัด สิ่งนี้ แต่ถ้าคุณทำคุณจะต้องอัพเดทโพสต์ตามนั้นและจัดการกับพวกเราที่ได้ส่งคำตอบไปแล้ว
Jonathan Allan

4
@JanathanAllan ความตั้งใจคืออนุญาตให้ใช้งานฟังก์ชันต่างๆ
ลบเจ็ดเซ

3
สตริงใดสตริงหนึ่งว่างเปล่า?
Shaggy

2
@Shaggy ใช่ทั้งสองอย่างสามารถ
ติดลบเจ็ด

1
เรามีกรณีทดสอบได้ไหม? ขอบคุณ!
ouflak

คำตอบ:


17

brainfuck, 30 29 27 23 ไบต์

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

ลองออนไลน์!

อินพุตถูกคั่นด้วย0x01ไบต์

ผลัดกันนี้เข้าไป["foo", "bar"] fUToUToUTUTbUTaUTrUTในการกู้คืนสองสายดั้งเดิมให้นำกลุ่มที่มีอักขระ 3 ตัวค้นหาหนึ่งตัวอักษรที่ไม่อยู่Uและแยกออกจากกัน


@Grimy ขออภัยเข้าใจผิด "อินพุตถูกคั่นด้วย 0x01 ไบต์"
กำจัด

15

JavaScript (ES6), 14 ไบต์

รับอินพุตเป็นอาร์เรย์ของ 2 สตริง แรงบันดาลใจจากคำตอบของหลุยส์

JSON.stringify

ลองออนไลน์!


JavaScript (ES6),  21  20 ไบต์

(a)(b)จะเข้าเป็น

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

ลองออนไลน์!

ส่งกลับความยาวของตามด้วยเครื่องหมายจุลภาคตามด้วยการเรียงต่อกันของและขaab


Goddamnit! เป็นเพียงเกี่ยวกับการใช้stringifyเคล็ดลับตัวเอง!
Shaggy

หยุดพักกับa="hello","" b="world"และa="hello" b="","world"
โซซิล

1
@Soleil ที่จะให้และ["\"hello\",\"\"","\"world\""] ["\"hello\"","\"\",\"world\""]
Arnauld

1
@Arnauld การป้องกันแบ็กสแลชจะไม่ปรากฏให้เห็น ฟังก์ชั่นจะไม่ฉีด
Soleil

1
@Silil ฉันไม่เข้าใจว่าคุณหมายถึงอะไร แน่นอนหนีJSON.stringify() ดูการถ่ายโอนข้อมูลฐานสิบหก "
Arnauld

15

jq -c, 0 ไบต์

ลองออนไลน์!

แน่นอนว่ามันรู้สึกเหมือนโกง ... แต่ดูเหมือนว่าจะสอดคล้องกับกฎของการท้าทาย

โดยค่าเริ่มต้นjqจะส่งออกอินพุตในรูปแบบ JSON ที่มนุษย์สามารถอ่านได้ -c(ขนาดพกพา) ธงบอกว่าjqการส่งออกในรูปแบบ "เล็ก" ที่เอาการขึ้นบรรทัดใหม่ (เนื่องจากไม่มีความท้าทายห้าม ASCII ไม่พิมพ์)


1
OP ช่วยให้การป้อนว่างเปล่าดังนั้นจึงจะไม่ได้เป็น = "", B = "x" ให้การส่งออกเช่นเดียวกับ = "x" ข = ""
Gnudiff

3
@Gnudiff เหรอ? พวกเขาจะให้["","x"]และ["x",""]ตามลำดับ
ลูกบิด

1
ขออภัยคุณพูดถูก
Gnudiff


5

Japt -S , 3 ไบต์

ฉันยังรู้สึกว่าฉันต้องคิดถึงบางสิ่งบางอย่างที่นี่ ...

®mc

ลองมัน

อาจเป็น 2 ไบต์:

mq

ลองมัน

หรือยืดมันด้วยขนาด 1 ไบต์:

U

ลองมัน

เวอร์ชันแรกจะแมปสตริงแต่ละตัวในอาเรย์กับ codepoints และส่งออกไปรวมกับช่องว่าง

รุ่นที่สองจะแยกแต่ละสตริงออกเป็นอาเรย์ตัวละครและส่งออกไปรวมกับช่องว่าง

และรุ่นที่สามซึ่งให้ความรู้สึกเหมือนมีการโกงเพียงแค่เอาท์พุตด้วย-Qธงเพื่อยกของหนักsrringifyขึ้น


5

Pyth , 4 ไบต์

jNmC

ลองออนไลน์!

แปลงนี้สตริงแต่ละฐาน 256 "และจากนั้นร่วมกับพวกเขาในการสั่งซื้อด้วย เนื่องจากผลลัพธ์เป็นตัวเลขแต่ละตัวจึง"แยกพวกเขาอย่างไม่น่าเชื่อและสตริงเดิมสามารถกู้คืนmCsdczNได้


1
@AndersKaseorg แนะนำ1 byter
Kevin Cruijssen

@KevinCruijssen ฉันทราบมาตั้งแต่สองสามนาทีหลังจากที่โพสต์ข้อความนี้ฉันแค่ชอบจิตวิญญาณของการแก้ปัญหานี้ ขอบคุณที่นำมันขึ้นมาและรู้สึกอิสระที่จะโพสต์ด้วยตัวคุณเอง :)
FryAmTheEggman

ฉันชอบคำตอบของคุณมากขึ้นเช่นกัน :) และไม่ฉันไม่รู้จัก Pyth หากคุณต้องการคุณสามารถโพสต์มันด้วยตัวเองเป็นคำตอบที่แยกออกมา (หรือคำตอบที่รวมกันโดยการแก้ไขคำตอบนี้) มิฉะนั้นAnders Kaseorgสามารถโพสต์ได้เพราะเขาเป็นคนที่พูดถึงมันในความคิดเห็น
Kevin Cruijssen

4

T-SQL, 38 ไบต์

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

ivarcharab

ใช้QUOTENAMEซึ่งล้อมรอบสตริงด้วย[]และยังใช้วงเล็บภายในใด ๆ ควรแม็พกับเอาต์พุตที่ไม่ซ้ำกัน


1
ความยาวเท่ากันบน MySQL: SELECT CONCAT(QUOTE(a),QUOTE(b))FROM t ลองออนไลน์
กลางคืน 2

4

Zsh , 7 ไบต์

<<<$@:q

ลองออนไลน์!

เข้าร่วมข้อโต้แย้งในช่องว่างโดยปริยาย โมดิqฟายเออร์บอก zsh เพื่ออ้างถึงข้อโต้แย้งซึ่งจะช่วยเว้นช่องว่างเพื่อให้แน่ใจว่าช่องว่างที่ไม่ได้มีการแยกจะแยกอาร์กิวเมนต์ทั้งสองออกมาอย่างไม่น่าสงสัย

(โดยไม่ต้องq, "a " "b"และ"a" " b"จะให้ผลผลิตทั้ง"a b".)


3

MATL , 1 ไบต์

j

รหัสใช้อาร์เรย์ของสองสายเป็นอินพุทและเอาท์พุทการแทนสตริงของอาร์เรย์นั้น

ลองออนไลน์!

คำอธิบาย

โค้ดจะอ่านอินพุตเป็นสตริงโดยไม่มีการประเมินค่า


1
สิ่งนี้ใช้สองสตริงเป็นอินพุตหรือไม่? ดูเหมือนว่านี่แค่พิมพ์อินพุตไม่ว่ามันจะเป็นอะไร ลองออนไลน์!
James

1
@DJ มันอ่านค่าที่ไม่ได้ประเมินดังนั้นมันจะอ่านอะไรก็ได้ มันเป็นช่องโหว่หรือไม่? แนวทางที่เป็นมาตรฐานมากขึ้นคือการรับอินพุตที่ประเมินแล้วเป็นอาร์เรย์แล้วแปลงเป็นการแทนสตริง แต่ผลลัพธ์จะเหมือนกับรหัสของฉันดังนั้นฉันขอยืนยันว่าความแตกต่างนั้นไม่สามารถสังเกตเห็นได้
Luis Mendo

3

เยลลี่ 2 ไบต์

ŒṘ

Monadic Link ยอมรับรายการอักขระสองรายการเป็นอาร์กิวเมนต์ซึ่งให้รายการอักขระเดียว

ลองออนไลน์!

อย่างไร?

มันมีอยู่แล้วภายในเพื่อรับการแสดงสตริงของ Python, simples



3

05AB1E , 2 ไบต์

₁ö

ลองออนไลน์! ตีความแต่ละสายเป็นฐาน-256 [1, 2]จำนวนเต็มแล้วพิมพ์สองในรูปแบบ


05AB1E, 1 ไบต์ (ไม่รู้จักความถูกต้อง)

â

ลองออนไลน์!

ใช้ผลิตภัณฑ์คาร์ทีเซียนของอินพุตด้วยตัวเอง เครื่องหมายคำพูดในอินพุตจะไม่หนีซึ่งอาจทำให้เกิดความสับสน ฉันบังคับให้ชุดค่าผสมทั้งหมดถึง 12 ", "และ"], ["ไม่พบการชนใด ๆ อย่างไรก็ตามฉันไม่สามารถพิสูจน์ได้ว่าไม่มีการชนกันของสตริงที่ยาวขึ้น หากใครสามารถหาข้อพิสูจน์หรือตัวอย่างโต้กลับได้ฉันก็ขอขอบคุณอย่างมาก!

จิ๊บจ๊อย 0 byter ล้มเหลวเนื่องจากคำพูดไม่ได้หนี: ปัจจัยการผลิต ( ", "สตริงว่างเปล่า) และ (สตริงว่าง", ") ["", "", ""]ทั้งผลผลิตที่ส่งออก

1-byter º(Mirror สายป้อนแต่ละ) นอกจากนี้ยังล้มเหลวเนื่องจากการนี้: ปัจจัยการผลิต ( ", "" ,"สตริงว่างเปล่า) และ (สตริงว่าง" ,"", ") ["", "" ,"", "" ,"", ""]อัตราผลตอบแทนทั้งการส่งออก


3

C # ขนาด 26 ไบต์ (ขอบคุณ Lukas Lang, Kevin Cruijssen และ Jo King)

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

tio.run แลมบ์ดา


1
โปรดลองใช้tio.run
Ver Nick บอกว่า Reinstate Monica

สิ่งนี้จะยังคงอยู่บน ("a <>", "b") และ ("a", "<> b") - โปรดทราบว่ามันเป็นไปไม่ได้ที่จะจัดการกับทุกกรณีหากคุณเพียงแค่ทำการต่อข้อมูลเข้าไม่ว่าคุณจะทำอะไรก็ตาม ใส่ระหว่าง / รอบพวกเขา - คุณจำเป็นต้องแก้ไขสตริงอย่างใด
ลูคัสหลัง

1
ขออภัยยังไม่: ("1", "11111111111") และ ("11111111111", "1") - สิ่งใดที่ใช้งานได้ในทางกลับกัน (และสั้นกว่า) คือสิ่งนี้$"{a.Length}.{a}{b}"- คุณสามารถแยกaและbออกจากสิ่งนี้ได้โดยไม่ต้อง ความคลุมเครือ (เพียงแค่อ่านจนเป็นครั้งแรก.ที่จะได้รับความยาวของa, bเป็นแล้วส่วนที่เหลือ
ลูคัสแลง

1
@ LukasLang สุดยอด ขอบคุณสำหรับการติดตาม
Soleil

1
ขอบคุณมาก @JoKing!
Soleil

2

ถ่าน 12 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

 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

2

PowerShellขนาด 22 ไบต์

การแก้ไขหลายครั้งต้องขอบคุณเขาวงกต

"$($args|% le*)"+$args

ลองออนไลน์!

ใช้เวลาห้าโอว


"ab" "c"และ"a" "bc"ทั้งสองผลิตผลลัพธ์เดียวกัน
BradC

@ โจกิ้งสิ่งที่ควรได้รับการแก้ไข หวังว่า.
Veskah




1

CSS + HTML, 55 + 20 = 75 ไบต์

ระบุอินพุตใน HTML หลัง<code>แท็ก มองเห็นตัวอักษรทีละตัวจากแต่ละอินพุตลงในเอาต์พุต เมื่ออินพุตยาวกว่าอีกช่องหนึ่งพื้นที่แสดงภาพจะปรากฏขึ้นสำหรับตัวอักษรที่ขาดหายไปของอินพุตที่สั้นกว่า นอกจากนี้ยังเพิ่มคอมม่าหนึ่งตัวใน HTML เพื่อบังคับให้มีลักษณะเฉพาะของเอาต์พุตภาพ (ฉันหวังว่า)

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



1

Perl 6 , 6 3 ไบต์

&dd

ลองออนไลน์!

เอาต์พุตการแทนค่าวัตถุไปยัง STDERR


ฉันไม่คุ้นเคยกับ Perl มากแค่ไหน - คุณจะใส่สตริงที่มีช่องว่างได้อย่างไร?
ลบเจ็ด


@negativeseven ใช่แล้วฉันเพิ่งใช้ซินแทกซ์ทางลัดสำหรับรายการสตริง คุณสามารถทำได้ในแบบปกติเช่น["Hello, ", "World!"]
King King

1

Lua , 27 ไบต์

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

ลองออนไลน์!

โปรแกรมเต็มรูปแบบรับอินพุตเป็นอาร์กิวเมนต์

แรงบันดาลใจจากคำตอบ zsh เพราะมันยังใช้%qปรับปรุงเพื่อใช้เอ็นจิ้น safe-string ภายใน

นอกจากนี้ฉันสามารถคิดเพียง

('%q%q'):format

แต่ฉันไม่แน่ใจว่านี่เป็นคำตอบที่ยอมรับได้หรือไม่


ฉันไม่คิดว่าสิ่งที่สองนั้นถูกต้องเนื่องจาก('%q%q'):formatจะไม่ส่งผลให้วัตถุที่สามารถกำหนดให้กับตัวแปรได้ มันเพียงแค่ทำให้เกิดข้อผิดพลาดทางไวยากรณ์ด้วยตัวเอง ไวยากรณ์ลำไส้ใหญ่เป็นเพียงทางลัด'%q%q'.format('%q%q', ...)และ Lua ไม่อนุญาตให้แอปพลิเคชั่นบางส่วนใช้งานได้
Jo King

@ โจกิ้งใช่คุณพูดถูกฉันคิดว่า
พูดว่า Reinstate Monica



1

C (gcc) , 59 ไบต์

ขอบคุณ Grimy สำหรับคำแนะนำ

ใช้เวลาอาร์เรย์ของสตริงการป้อนข้อมูล (ซึ่ง "2" เป็นจำนวนที่ถูกต้องสำหรับความท้าทายนี้) NULและพิมพ์ค่าตัวของพวกเขารวมทั้งต่อท้าย ในทางเทคนิคแล้วตัว%pจัดรูปแบบที่ใช้โดยprintfเป็นตัวชี้ แต่ก็ใช้งานได้ดีสำหรับการแสดงค่าฐานสิบหกของจำนวนเต็มโดยพลการหากคุณไม่จู้จี้จุกจิกเกี่ยวกับลักษณะที่ปรากฏ!

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

ลองออนไลน์!


ดี! นี่คือ59
Grimmy



0

Bashขนาด 11 ไบต์

echo ${@@Q}

ลองออนไลน์!

${parameter@Q}คำพูดพารามิเตอร์สำหรับนำมาใช้ใหม่เป็นอินพุต ในกรณีของอาเรย์มันจะอ้างอิงแต่ละองค์ประกอบ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.