Ін'єкція з двох рядків в одну струну


14

Виклик

Напишіть програму, яка застосовує ін'єкційну функцію, яка приймає впорядковану пару рядків як вхідну та одну рядок як вихідну. Іншими словами, кожен вхід повинен відображати унікальний вихід.

Особливості

  • Вхід може бути будь-якими двома рядками довільної довжини, але буде складатися лише з друкованих символів ASCII (коди ).[32,126]
  • Аналогічно, вихідний рядок не має обмеження по довжині, але він повинен складатися лише з друкованих символів ASCII.
  • Якщо ваша мова не може обробляти рядки довільної довжини, програма може просто теоретично працювати для рядків будь-якого розміру.
  • Відображення від входів до виходів повинно відповідати виконанню програми. Інакше відображення, яке ви використовуєте, повністю залежить від вас, якщо це ін'єкція.
  • Вхід упорядкований Якщо два вхідних рядка різні, вони повинні давати інший вихід, ніж якби вони були замінені. stf(s,t)f(t,s)
  • Не кожен рядок повинен бути можливим результатом.
  • Найкоротша відповідь на кожній мові виграє!

Тестові справи

Наведені нижче входи повинні призвести до різних результатів. Щоб уникнути плутанини, рядки оточені гільметами («») і розділені між собою проміжками.

"Привіт Світ"
«Lelho» «drowl»
"інший"
"не те ж саме"

«Код» «Гольф»
«Co» «deGolf»
«CodeGolf» «»

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

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

«\» «« »
«\\» «\» »

8
Хм, я щойно помітив "Напишіть програму, яка ..." - зауважте, що мета-консенсус (зараз 46 вгору, 1 вниз) "Обмеження лише до програм вимагає чітко вказати" повну програму ", а не просто" програму "" . Я сподіваюся, ви не хотіли намагатися обмежити це, але якщо вам це потрібно, вам потрібно буде оновити публікацію відповідно і звернутися до тих, хто вже подав функції як відповіді.
Джонатан Аллан

4
@JonathanAllan Наміром було дозволити функції.
негативна

3
Чи може будь-який з рядків бути порожнім?
Кошлатий

2
@Shaggy Так, можна або і те і інше.
негативна

1
Чи можемо ми мати кілька тестових випадків? Спасибі!
ouflak

Відповіді:


17

brainfuck, 30 29 27 23 байт

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

Спробуйте в Інтернеті!

Входи розділені 0x01байтом.

Це перетворюється ["foo", "bar"]на fUToUToUTUTbUTaUTrUT. Щоб відновити початкові два рядки, візьміть групи з 3 символів, знайдіть той, де немає другої літери U, і розділіть його.


@Grimy Вибачте, неправильно зрозуміли "Вводи розділені байтом 0x01."
wastl

15

JavaScript (ES6), 14 байт

Приймає введення як масив з 2 рядків. Натхненний відповіддю Луїса .

JSON.stringify

Спробуйте в Інтернеті!


JavaScript (ES6),  21  20 байт

Вводиться як " (a)(b).

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

Спробуйте в Інтернеті!

Повертає довжину a , а потім - кома з наступним конкатенацією a і b .


Чорт забирай! Якраз збирався використати stringifyтрюк сам!
Кошлатий

Перерви з a="hello","" b="world"іa="hello" b="","world"
Солей

1
@Soleil Це дало б ["\"hello\",\"\"","\"world\""]і ["\"hello\"","\"\",\"world\""].
Арнольд

1
@Arnauld захист від нахилу не буде видно. Функція не вводиться.
Soleil

1
@Soleil Я не розумію, що ти маєш на увазі. JSON.stringify()однозначно тікає ". Побачити шестигранний смітник .
Арнольд

15

jq -c, 0 байт

Спробуйте в Інтернеті!

Це, безумовно, відчуває себе обманом ...? Але це, здається, відповідає правилам виклику.

За замовчуванням jqбуде надсилати свої дані у читаному для людини форматі JSON. -c(Компактний) прапор , який вказує jqна вихід в «компактному» стилі, який видаляє символ нового рядка (так як виклик забороняє недрукованих ASCII).


1
OP дозволяє пустувати вхід, тому не буде a = "", b = "x" давати такий же вихід, як a = "x" b = ""
Gnudiff

3
@Gnudiff Як так? Вони дали б ["","x"]і ["x",""]відповідно
дверна ручка

1
Вибачте, ви праві.
Gnudiff


5

Japt -S , 3 байти

Я все ще відчуваю, що мені щось тут не вистачає ...

®mc

Спробуй це

Можливо 2 байти:

mq

Спробуй це

Або розтягуючи його за допомогою цього 1-байтового:

U

Спробуй це

Перша версія відображає кожен рядок у масиві в його кодових точках і виводить їх, з'єднані з пробілом.

Друга версія розбиває кожний рядок на символьний масив і виводить їх, з'єднані з пробілом.

І третя версія, яка виглядає як обман, просто видає вхід із -Qпрапором, роблячи важке підняття srringifyйого.


5

Pyth , 4 байти

jNmC

Спробуйте в Інтернеті!

Це перетворює кожну рядок до бази 256, а потім приєднує їх у порядку з a ". Оскільки результати є кожним числом, їх "однозначно відокремлюють і вихідні рядки можна відновити mCsdczN.


1
@AndersKaseorg пропонує 1-байт .
Кевін Кройсейсен

@KevinCruijssen Я знав про це, оскільки через кілька хвилин після публікації цього тексту я просто віддаю перевагу духу цього рішення. Дякуємо за те, що ви все-таки
виклали

Мені дуже подобається і ваша відповідь. :) І ні, я навіть Піта не знаю. Якщо ви хочете, ви можете опублікувати його самостійно як окрему відповідь (або комбіновану відповідь, відредагувавши цю), інакше Андерс Касеорг може опублікувати її, оскільки саме він згадував її у коментарі.
Кевін Кройсейсен

4

T-SQL, 38 байт

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

ivarcharab

Використовує QUOTENAME, що оточує струни, []а також уникає будь-яких внутрішніх дужок. Слід відобразити унікальний вихід.


1
SELECT CONCAT(QUOTE(a),QUOTE(b))FROM t
Така

4

Zsh , 7 байт

<<<$@:q

Спробуйте в Інтернеті!

Безслідно приєднується до аргументів пробілів. qМодифікатор говорить ЗШ цитувати аргументи, які кардинально вислизають простору, забезпечуючи Неекранований простір однозначно розділяє два аргументи.

(Без q, "a " "b"і "a" " b"обох би приносив "a b".)


3

MATL , 1 байт

j

Код приймає масив з двох рядків як вхідний і виводить рядкове представлення цього масиву.

Спробуйте в Інтернеті!

Пояснення

Код просто зчитує введення як рядок, без оцінки.


1
Чи справді це бере два рядки як вхідні дані? Схоже, що це просто друкує вхід, яким би він не був. Спробуйте в Інтернеті!
Джеймс

1
@DJ Він просто читає неоцінене введення, тому читає що завгодно. Це лазівка? Більш стандартним підходом було б взяти оцінений вхід як масив, а потім перетворити на представлення рядків. Але результат був би таким же, як і мій код, тому я заперечую, що відмінність непомітна
Луїс Мендо



3

05AB1E , 2 байти

₁ö

Спробуйте в Інтернеті! Інтерпретує кожний рядок як ціле число базового 256, а потім друкує два у формі [1, 2].


05AB1E, 1 байт (невідома дійсність)

â

Спробуйте в Інтернеті!

Приймає декартовий добуток входу з собою. Цитати на вводі не уникаються, що може спричинити плутанину. Я жорстоко змусив всі комбінації до 12 ", "і "], ["не зіткнувся; однак я не можу довести, що немає довгих рядків зіткнень. Якщо хтось може придумати доказ чи зустрічний приклад, я дуже вдячний!

Тривіальний 0-байт виходить з ладу через те, що цитати не виходять: обидва входи ( ", ", порожній рядок) і (порожній рядок, ", ") дають вихід ["", "", ""].

1-байт º(дзеркальний кожен рядок вводу) також не працює через це: обидва входи ( ", "" ,", порожня рядок) і (порожня рядок, " ,"", ") дають вихід ["", "" ,"", "" ,"", ""].


3

C # з 26 байтами (спасибі Лукашу Лангу, Кевіну Крейссену та Джо Кінгу)

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

tio.run лямбда


1
Будь ласка, подумайте про використання tio.run
Вер Нік каже, що

Це все-таки порушується на ("a <>", "b") і ("a", "<> b") - зауважте, що неможливо обробити всі випадки, якщо ви просто об'єднуєте входи, незалежно від того, що ви ставити між / навколо них - вам потрібно якось змінити рядки
Лукас Ленг,

1
Вибачте, досі немає: ("1", "11111111111") і ("11111111111", "1") - що працює з іншого боку (і навіть коротше) - це $"{a.Length}.{a}{b}"ви завжди можете витягти aі bз цього без жодного неоднозначність (просто читайте до першого, .щоб отримати тривалість a, bпотім решта
Лукас Ленг,

1
@LukasLang Чудовий. Дякуємо за подальші дії.
Soleil

1
Велике спасибі @JoKing!
Soleil





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 - як би ви ввели сюди рядок, що містить пробіли?
негативна

2
@negativeseven like this
Grimmy

@negativeseven Так вибачте, я просто використовував синтаксис швидкого доступу для списків рядків. Це можна зробити типово, як-от["Hello, ", "World!"]
Джо Кінг,

1

Луа , 27 байт

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

Спробуйте в Інтернеті!

Повна програма, прийміть дані як аргументи.

Натхненний відповіддю zsh, оскільки він також використовує %qмодифікатор для використання внутрішнього безпечного двигуна.

Також я можу подумати просто

('%q%q'):format

але я не впевнений, чи це прийнятна відповідь.


Я не думаю, що другий є дійсним, оскільки ('%q%q'):formatне призводить до об'єкта, який, наприклад, може бути призначений змінній. Це просто викликає синтаксичну помилку самостійно. Синтаксис товстої кишки - це лише ярлик, '%q%q'.format('%q%q', ...)і Lua не дозволяє часткове застосування функцій
Jo King

@JoKing Так, я думаю, ти маєш рацію.
Валь каже:



1

C (gcc) , 59 байт

Дякую Гримі за пропозицію.

Бере масив вхідних рядків (з яких "2" - це правильне число для цього завдання) і друкує їхні символьні значення, включаючи кінцевий NUL. Технічно %pформат, який використовується, printfпризначений для покажчиків, але він чудово працює для відображення шістнадцяткових значень довільних цілих чисел, якщо ви не вимогливі до того, як вони виглядають!

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

Спробуйте в Інтернеті!


Приємно! Ось 59 .
Grimmy




Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.