Wyzwanie
Napisz program, który zastosuje funkcję iniekcyjną, która przyjmuje uporządkowaną parę łańcuchów jako dane wejściowe i jeden łańcuch jako dane wyjściowe. Innymi słowy, każde wejście musi być odwzorowane na unikalne wyjście.
Specyfika
- Dane wejściowe mogą być dowolnymi dwoma łańcuchami o dowolnej długości, ale będą składały się wyłącznie z drukowalnych znaków ASCII (kody ).
- Podobnie łańcuch wyjściowy nie ma ograniczenia długości, ale musi składać się wyłącznie z drukowalnych znaków ASCII.
- Jeśli twój język nie obsługuje łańcuchów o dowolnej długości, program może jedynie teoretycznie działać na łańcuchy dowolnej wielkości.
- Odwzorowanie wejść na wyjścia powinno być spójne między uruchomieniami programu. W przeciwnym razie mapowanie, którego używasz, zależy wyłącznie od Ciebie, o ile jest to zastrzyk.
- Dane wejściowe są uporządkowane. Jeśli dwa ciągi wejściowe są różne, powinny generować inny wynik niż w przypadku zamiany.
- Nie każdy ciąg musi być możliwym wyjściem.
- Najkrótsza odpowiedź w każdym języku wygrywa!
Przypadki testowe
Wszystkie poniższe dane wejściowe powinny dawać różne wyniki. Aby uniknąć pomyłek, ciągi znaków są otoczone przez gilety («») i oddzielone pojedynczymi spacjami.
"Witaj świecie" «Lelho» «drowl» "różne" "nie ten sam" «Kod» «Golf» «Co» «deGolf» «CodeGolf» «» «» «» «» «» «» «» «» «» «» «» "Alfabet" "Alfabet" "Alfabet" "Alfabet" «\» «" » «\\» «\" »
Odpowiedzi:
pieprzenie mózgu,
30292723 bajtówWypróbuj online!
Wejścia są oddzielone
0x01
bajtem.To zamienia się
["foo", "bar"]
wfUToUToUTUTbUTaUTrUT
. Aby odzyskać oryginalne dwa ciągi, weź grupy 3 znaków, znajdź ten, w którym nie ma drugiej literyU
, i podziel go tam.źródło
JavaScript (ES6), 14 bajtów
Pobiera dane wejściowe jako tablicę 2 ciągów znaków. Zainspirowany odpowiedzią Luisa .
Wypróbuj online!
JavaScript (ES6),
2120 bajtówPobiera dane wejściowe jako
(a)(b)
.Wypróbuj online!
Zwraca długośćza , po której następuje przecinek, a następnie konkatenację za i b .
źródło
stringify
sztuczki!a="hello",""
b="world"
ia="hello"
b="","world"
["\"hello\",\"\"","\"world\""]
i["\"hello\"","\"\",\"world\""]
.JSON.stringify()
zdecydowanie ucieka"
. Zobacz zrzut heksowy .jq -c, 0 bajtów
Wypróbuj online!
To zdecydowanie czuje się jak oszukiwanie ...? Ale wydaje się być zgodny z zasadami wyzwania.
Domyślnie
jq
wyświetla dane wejściowe w formacie JSON czytelnym dla człowieka. Flaga-c
(kompaktowa) informujejq
o wyjściu w stylu „kompaktowym”, co usuwa znaki nowej linii (ponieważ wyzwanie zabrania drukowania ASCII bez możliwości drukowania).źródło
["","x"]
i["x",""]
odpowiednioPython 3 , 3 bajty
(Wbudowana) funkcja, która, biorąc pod uwagę listę dwóch ciągów, daje ciąg reprezentujący listę
Wypróbuj online!
źródło
Japt
-S
, 3 bajtyI nadal czuję, że musi być brakuje czegoś tutaj ...
Spróbuj
Prawdopodobnie 2 bajty:
Spróbuj
Lub rozciąganie za pomocą tego 1-bajtowego:
Spróbuj
Pierwsza wersja mapuje każdy ciąg znaków w tablicy na punkty kodowe i wyświetla je połączone spacją.
Druga wersja dzieli każdy ciąg znaków na tablicę znaków i wyświetla je połączone spacją.
A trzecia wersja, która wydaje się oszustwem, po prostu wysyła sygnał wejściowy z
-Q
flagą wykonującą ciężkie podnoszeniesrringify
.źródło
Pyth , 4 bajty
Wypróbuj online!
Konwertuje każdy ciąg na bazę 256, a następnie łączy je w kolejności za pomocą
"
. Ponieważ wyniki są liczbami,"
jednoznacznie je rozdzielają, a oryginalne ciągi znaków można odzyskaćmCsdczN
.źródło
T-SQL, 38 bajtów
varchar
Używa
QUOTENAME
, który otacza ciągi znaków,[]
a także unika wewnętrznych nawiasów klamrowych. Powinny mapować do unikalnego wyniku.źródło
SELECT CONCAT(QUOTE(a),QUOTE(b))FROM t
wypróbuj onlineZsh , 7 bajtów
Wypróbuj online!
Niejawnie łączy argumenty na spacje.
q
Modyfikator mówi zsh przytoczyć argumenty, który w zasadniczy sposób ucieka przestrzenie, zapewniając Niecytowany przestrzeń jednoznacznie oddziela dwa argumenty.(Nie
q
,"a " "b"
i"a" " b"
będzie zarówno wydajność"a b"
).źródło
MATL , 1 bajt
Kod pobiera tablicę dwóch ciągów jako dane wejściowe i generuje ciąg reprezentujący tę tablicę.
Wypróbuj online!
Wyjaśnienie
Kod po prostu odczytuje dane wejściowe jako ciąg znaków, bez wartości.
źródło
Galaretka , 2 bajty
Monadyczny link akceptujący listę dwóch list znaków jako argument, który daje pojedynczą listę znaków.
Wypróbuj online!
W jaki sposób?
Jest to wbudowane, aby uzyskać reprezentację ciągu Python, po prostu.
źródło
Haskell, 4 bajty
Wbudowany Haskell, aby zmienić rzeczy w łańcuchy. Dane wejściowe są traktowane jako para ciągów.
Wypróbuj online!
źródło
05AB1E , 2 bajty
Wypróbuj online! Interpretuje każdy ciąg jako liczbę całkowitą 256, a następnie drukuje dwa w formie
[1, 2]
.05AB1E, 1 bajt (nieznana ważność)
Wypróbuj online!
Bierze kartezjański produkt wkładu ze sobą. Cytaty w danych wejściowych nie są poprzedzane znakami ucieczki, co może powodować zamieszanie. Brutalnie zmusiłem wszystkie kombinacje do 12
", "
i"], ["
nie znalazłem żadnej kolizji; nie mogę jednak udowodnić, że nie ma żadnych kolizji dla dłuższych łańcuchów. Jeśli ktokolwiek może wymyślić dowód lub kontrprzykład, byłbym bardzo wdzięczny!Trywialny bajt 0 nie powiedzie się, ponieważ nie są poprzedzane cudzysłowami: dane wejściowe (
", "
pusty ciąg) i (pusty ciąg", "
) dają wynik["", "", ""]
.1-bajtowy
º
(odbicie każdego ciągu wejściowego) również się nie udaje z tego powodu: dane wejściowe (", "" ,"
pusty ciąg) i (pusty ciąg" ,"", "
) dają wynik["", "" ,"", "" ,"", ""]
.źródło
C # z 26 bajtami (dzięki Lukas Lang, Kevin Cruijssen i Jo King)
tio.run lambda
źródło
$"{a.Length}.{a}{b}"
- zawsze możesz wyodrębnića
ib
z tego bez żadnych dwuznaczność (wystarczy przeczytać do pierwszego,.
aby uzyskać długośća
,b
to jest resztaWęgiel drzewny , 12 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
PowerShell , 22 bajty
Wiele poprawek dzięki mazzy
Wypróbuj online!
Weź pięć, o mój.
źródło
"ab" "c"
i"a" "bc"
oba wytwarzają tę samą wydajność.R , 4 bajty
Wypróbuj online!
Wbudowana funkcja, która zwraca ciąg wejściowy (zainspirowany odpowiedzią Jonathana Allana )
źródło
Wolfram Language (Mathematica) , 8 bajtów
Wypróbuj online!
źródło
{"Hello, ","World"}
i{"Hello",", World"}
czy nie podają tego samego ciągu?Compress
to jest wtedyCSS + HTML, 55 + 20 = 75 bajtów
Podaj dane wejściowe w
<code>
tagach HTML po . Wizualnie wstrzykuje litery jeden po drugim z każdego wejścia do wyjścia. Gdy dane wejściowe są dłuższe od innych, wyświetlane są wizualne spacje dla brakującej litery (liter) krótszej litery. Do HTML dodano także przecinek, aby wymusić wyjątkowość wyników wizualnych (mam nadzieję).źródło
C # (interaktywny kompilator Visual C #) , 5 bajtów
Wypróbuj online!
źródło
Perl 6 ,
63 bajtyWypróbuj online!
Wysyła reprezentację obiektu do STDERR.
źródło
["Hello, ", "World!"]
Lua , 27 bajtów
Wypróbuj online!
Pełny program, weź dane jako argumenty.
Zainspirowany odpowiedzią zsh, ponieważ używa również
%q
modyfikatora do korzystania z wewnętrznego silnika bezpiecznego ciągu.Mogę też wymyślić tylko
ale nie jestem pewien, czy jest to akceptowalna odpowiedź.
źródło
('%q%q'):format
nie skutkuje obiektem, który można na przykład przypisać do zmiennej. Po prostu sam powoduje błąd składniowy. Składnia dwukropka jest tylko skrótem,'%q%q'.format('%q%q', ...)
a Lua nie zezwala na częściowe stosowanie funkcjised , 19 bajtów
Wypróbuj online!
źródło
JavaScript (SpiderMonkey) , 6 bajtów
Wypróbuj online!
Wprowadź tablicę ciągów, wypisz pojedynczy ciąg.
Zainspirowany odpowiedzią JSON.stringify Arnaulda .
źródło
C (gcc) , 59 bajtów
Dzięki Grimy za sugestię.
Pobiera tablicę ciągów wejściowych (z których „2” jest poprawną liczbą dla tego wyzwania) i wypisuje ich wartości znaków, w tym końcowe
NUL
. Technicznie rzecz biorąc,%p
używany przez formatyzatorprintf
jest do wskazywania, ale działa dobrze do wyświetlania wartości szesnastkowych dowolnych liczb całkowitych, jeśli nie jesteś wybredny, jak wyglądają!Wypróbuj online!
źródło
Brachylog , 0 bajtów
Dane wejściowe jako tablica 2 ciągów, dane wyjściowe w formacie:
Z = ["{{string 1 stringified}}","{{string 2 stringified}}"]
Zainspirowany odpowiedzią JSON.stringify Arnaulda i pustą odpowiedzią Jq Doorknoba
Wypróbuj online!
źródło
PHP , 9 bajtów
Wypróbuj online!
Wejście jest tablicą 2 strun jak ten:
['abc', 'def']
. Używa serializacji PHP do serializacji danych wejściowych do łańcucha.źródło
Bash , 11 bajtów
Wypróbuj online!
${parameter@Q}
podaje parametr do ponownego użycia jako dane wejściowe. W przypadku tablicy cytuje każdy element.źródło
Rubinowy , 12 bajtów
Wypróbuj online!
źródło