Trzeci ciąg

45

Biorąc pod uwagę dwa ciągi, wypisz trzeci ciąg, który nie jest równy jednemu z dwóch wejść, ale ma taką samą długość (w znakach) jak jedno z wejść. Gwarantowane jest co najmniej jedno prawidłowe wyjście.

Przypadki testowe

Przypadki testowe są cytowane, aby pokazać, że są łańcuchami. Wyjścia są jednymi z wielu możliwych.

input, input -> output

"test", "test" -> "tttt"
"do", "don't" -> "dnut_"
"ye s", "yes" -> "fals"
"yes", "yes" -> "noo"
"maybe", "mayue" -> "false"
"false", "false" -> "truee"
"false", "true" -> "fatr"
"1", "" -> "0"
"", "t" -> "s"
"", "abcabc" -> "testst"
"abcdefghijklmnopqrstuvwxyz", "aaaaaaaaaaaaaaaaaaaaaaaaaa" -> "zbcdefghijklmnopqrstuvwxya"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" -> "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"

Zasady

  • Możesz wybrać domenę wejściową, ale musi ona składać się przynajmniej z drukowalnego ASCII, a twoja domena wyjściowa musi być taka sama jak domena wejściowa.
  • Długości wejściowe mogą być takie same lub różne.
  • Dane wyjściowe muszą być prawidłowe z prawdopodobieństwem 1; to znaczy, możesz generować losowe ciągi, dopóki jeden nie będzie poprawny (i teoretycznie możesz nieskończoną pętlę), ale nie możesz po prostu wyprowadzić losowego ciągu i mieć nadzieję, że jest on poprawny. Pamiętaj, że oznacza to, że dane wyjściowe nie muszą być deterministyczne.
  • Automatyczne końcowe znaki nowej linii są dozwolone, ale nie liczą się do długości wyniku.
  • Ze względu na pytania dotyczące błędów pamięci musi działać w ciągu 60 sekund do długości wejściowej wynoszącej 6. Odpowiedź, która działa na to i teoretycznie działa na dłuższe ciągi, jest OK, ale coś, co Błędy pamięci na nowoczesnym komputerze dla długości wejściowej 4są nieprawidłowe.

To jest , więc wygrywa najkrótsza odpowiedź w bajtach.

Stephen
źródło
14
To wydaje się kolejną z interesujących nowych kategorii pytań na tej stronie, które są łatwe dla ludzi, a trudne dla komputerów. Ponieważ komputery nie są dobre w rozbieżnym myśleniu! Przypomina mi to odcinek Spongebob, w którym nie spał całą noc, próbując napisać esej o tym, czego NIE robić w świetle reflektorów.
geokavel
2
Rozumiem, że domena wyjściowa może być podzbiorem domeny wejściowej, tak?
Luis Mendo,
2
Miłe pytanie! Lubię to.
isaacg,
2
@Quelklef Nie, to nie różni się od obu wejść.
Ørjan Johansen
3
Proponuję dodać „”, „1” jako przypadek testowy, ponieważ właśnie zdałem sobie sprawę, że moja odpowiedź na to się nie udaje, mimo że działa na wszystkie dostarczone przypadki testowe
Slow loris

Odpowiedzi:

3

05AB1E , 8 7 bajtów

øvAyм¬?

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!

Adnan
źródło
1
Czy to działa, gdy jedno wejście jest pustym ciągiem?
betaveros
3
Nie działa, jeśli pierwszy ciąg jest pusty. TIO
Jo King
14

Haskell, 43 bajty

x!y=[s|s<-(<$max x y)<$>"abc",s/=x,s/=y]!!0

Bierze ciąg max (leksykograficznie później), który, jak wiemy, jest niepusty; zamienia wszystkie znaki na „a”, „b” i „c” przy użyciu <$; i zwraca pierwszą, która nie jest żadnym z danych wejściowych. Myślę, że jest to podobne do odpowiedzi Neila na węgiel drzewny i / lub odpowiedzi CJam geokavela .

(Czaiłem się już przez jakiś czas, ale po raz pierwszy odpowiadam na tej stronie; cześć!)

betaveros
źródło
9

Brainfuck, 97 bajtów

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

Uruchom kod online (zwróć uwagę, że „pamięć dynamiczna” musi być wybrana w prawym dolnym rogu)

Niesamowite wyzwanie! Pomyślałem, że to będzie trywialne, ale ostatecznie bardzo trudne. Ciągle do niego wracam, ponieważ wydaje mi się, że powinno być jakieś eleganckie 20-bajtowe rozwiązanie BF. W tym momencie jestem całkiem szczęśliwy, że (pozornie) udało mi się w ogóle pracować w BF.

Dane wejściowe są traktowane jako str1+ \0+ str2, gdzie ciągi znaków to kolejne niezerowe znaki 1-bajtowe.

Powraca (first str1 + first str2) or (first str1 + 1) or 2. Algorytm ten wymyślił genialny @ ØrjanJohansen (przypuszczalnie) oparty na moim (zepsutym) oryginalnym.

Skomentowano:

# Let (Kn) be the nth character of K
# Let (^) designate the pointer
# Let F be the first string inputted
# Let S be the second string inputted

+>+[-  # Twice do
,[>>,]  # Input string (characters separated by 1)
<<[<<]>  # Go to left of beginning of string
]>  # End on first character of second string
# If second string is null we will end one too far to the left
>[>]<<<[<]>  # If first string is null we will end there too
# We will use this to do flow control

[  # Only run if both strings were non null

# Tape:    S0 ' F0 ' S1 ' F1 ' S2 ' F2 ' etc
#          ^

<+>>  # Let F0* = F0 (plus) 1  (is 1 as of now; F0 will be added later)
[-<+<+>>] # Let A = S0 (plus) F0
# A may or may not be zero
# F0* may or may not be zero
# Tape:    F0* ' A ' 0  ' S1 ' F1 ' etc
#                ^

[>]<[->+<]  # Let B = A or F0*
# B may or may not be zero
<[-]>>  # Clear F0*
# Tape:     0 ' B ' 0 ' S1 ' F1 ' etc    (if A was zero)
#               ^
# OR        0 ' 0 ' B ' s1 ' F1 ' etc    (if A was nonzero)
#                   ^

# Let C = B or 2
# C will be guaranteed nonzero and unique from S0 and F0
>++<[<]>  # Create C
[.>>]  # Print (using S or F; does not matter)

>[>>]  # End on a zero cells with zero cells all to the right
# This is necessary for the coming functionality
# also as to not loop
]  # End non null block

# Now we consider if one of the strings was null
# Tape:    0 ' E0 ' 0 ' E1 ' etc    (if one string was null)
#          ^
# Tape:    0 '  0 ' 0 '  0 ' etc    (if neither string was null)
#          ^
# Where E is F or S (we don't care)

>[  # Execute only if one string was null

+  # Let A = E0 (plus) 1
# A may or many not be zero
# Tape: 0 ' A ' 0 ' E1 ' etc
#           ^

[>]+[<]>  # Let B = A or 1
# B is guaranteed nonzero and != E0
# Tape: 0 ' B ' ? ' E1 ' 0 ' E2 ' etc
#           ^

[.>>]  # Print

# End on zero cell as not to loop
]  # End null block
Quelklef
źródło
Twój „Fakt” jest źle, na przykład a=2, b=1. Musisz dodać zamiast odejmować.
Ørjan Johansen
Myślę, że możesz rozwiązać Spusty problem, dodając >na początku, a później robiąc [<]>lewy bajt S- jeśli to niezerowe, to nic nie robi, w przeciwnym razie zmienia łańcuchy.
Ørjan Johansen
@ ØrjanJohansen Oh masz rację, może być równy b. Ale nie a.
Quelklef
@ ØrjanJohansen Ah, to wydaje się działać! Dobre myślenie!
Quelklef
@ ØrjanJohansen Śledź ten fakt: Ponieważ to != atylko, jeśli wydrukuję S/0, S/1, ...zamiast S/0, F/1, ...tego powinno działać.
Quelklef
6

Galaretka , 8 bajtów

żḟ@€ØAZḢ

Wypróbuj online!

W jaki sposób?

żḟ@€ØAZḢ - Link: list of characters, a; list of characters, b
ż        - zip a and b
    ØA   - uppercase alphabet
 ḟ@€     - filter discard for €ach (swap @rguments)
      Z  - transpose the result
       Ḣ - head
Jonathan Allan
źródło
Zwraca B TIO
Jonathan Allan
Algorytm nie powinien i tak nie być pewien, co zrobiłeś.
Jonathan Allan,
nie myśl, że mój mózg najwyraźniej gra sztuczki, ponieważ nie widzę żadnych Xani tam ...
Erik the Outgolfer
5

Python 3 , 62 47 57 54 51 bajtów

Edycja: - 5 bajtów dzięki @ Mr.Xcoder

Edycja: +10 bajtów, aby naprawić błąd

Edycja: -3 bajty dzięki @betaveros

Edycja: -3 bajty przy użyciu max zamiast pop

lambda x,y:max({*"abc"}-{x[:1],y[:1]})+max(x,y)[1:]

Wypróbuj online!

Halvard Hummel
źródło
{"a","b","c"}==> {*"abc"}( 57 bajtów )
Mr. Xcoder,
(x[1:]or y[1:])==> max(x,y)[1:]?
betaveros
Lub po prostu (x or y)[1:]uważam, że wystarczy uniknąć pustego łańcucha.
betaveros
Nawiasem mówiąc, szkoda, że ​​Python 2 nie grał {*"abc"}{*`id`}
literackimi gwiazdami
Zapisz 1 za pomocą *len(x or y)zamiast +max(x,y)[1:].
Chas Brown
4

Węgiel drzewny , 22 bajty

FEα×ι⌈⟦LθLη⟧¿¬№⟦θη⟧ιPι

Wypróbuj online! Link jest do pełnej wersji kodu. Generuje wszystkie ciągi wielkich liter powtarzane do długości dłuższego wejścia i drukuje wszystkie te, które nie pojawiają się na wejściu. Innymi słowy, dane wyjściowe są normalnie, ZZZ...chyba że jest to jedno z danych wejściowych, w którym to przypadku nie jest YYY...to dane wejściowe, w którym to przypadku są XXX....

Neil
źródło
4

Mathematica, 111 bajtów

(c=Characters;a=#2;While[f=Alphabet[]~RandomChoice~Length@#;f==#||f==c@a]&[#&@@c@{##}~MaximalBy~Length];""<>f)&


wypróbuj online (wklej kod za pomocą Ctrl + V, umieść dane wejściowe na końcu i naciśnij Shift + Enter)

Wejście

["Przetestuj mnie"]

thanx @Nie drzewo do sprawdzania i gry w golfa -21 bajtów

J42161217
źródło
Jak ponownie przetestować to online?
Stephen
dodano link + informacje
J42161217,
@Jenny_mathy Wygląda na porażkę, jeśli pierwszy ciąg jest pustym ciągiem
Halvard Hummel
2
@HalvardHummel naprawiony!
J42161217,
1
@Notatree naprawione. Jeśli uważasz, że „łatwe granie w golfa” jest powodem do przegłosowania, możesz to zrobić
J42161217,
4

Perl 6 , 38 30 bajtów

{(1 x.max.comb...*∉$_).tail}

Wypróbuj online!

Anonimowy blok kodu, który pobiera dane wejściowe jako listę dwóch ciągów znaków i zwraca pierwszą liczbę z 1111...niepustą liczbą 1 sekund, których nie ma na wejściu.

Wyjaśnienie:

{                          }   # Anonymous code block
  1 x.max.comb                 # String multiply 1 by the size of the non-empty string
              ...              # Create a sequence increasing by 1
                 *∉$_          # Until the number is not in the input
 (                   ).tail    # And take the last number
Jo King
źródło
Czy inkrementor jest typem bigint, czy może to przepełnienie dla wystarczająco dużych ciągów?
GammaFunction
1
@ GammaFunction W Perlu 6 domyślnym typem liczb jest Int, który ma nieskończoną precyzję
Jo King
Och, miło. Zamierzałem dostosować to do Zsh, ale long longniestety używa .
GammaFunction
Możesz skrócić 6 bajtów, biorąc pierwszy z 00 .., 111 .., 22 .. zamiast zliczania i sekwencji: tio.run/…
Phil H
@PhilH Dobry pomysł! Trochę go skróciłem, utrzymując ideę sekwencji
Jo King
4

Zsh , 51 47 37 36 bajtów

-4 bajtów za pomocą wbudowanego tablicy argv, -10 bajtów za pomocą usuwania prefiksu i RC_EXPAND_PARAM, -1 bajt przez inline ekspansję nawiasów.

<<<${${${:-{1..3}${^@#?}}:|argv}[1]}

Wypróbuj online!

Po pierwsze, było to niesamowite wyzwanie. Zanim wylądowałem na tym, wpadłem na mnóstwo pomysłów.

<<<${${${:-{1..3}${^@#?}}:|argv}[1]}
       ${:-             }            # empty fallback
                 ${ @#?}             # remove first character from each parameter
                 ${^@  }             # enable brace expansion (set -P)
           {1..3}${^@#?}             # expand to 1foo 2foo 3foo 1bar 2bar 3bar
     ${                  :|argv}     # Set difference with 'argv'
   ${                           [1]} # The first found element
<<<                                  # print to stdout

@i *nie są identyfikatory, tak ${ :|@}i ${ :|*}nie działa, stąd wykorzystanie${ :|argv}

Ta metoda zadziała do 93 danych wejściowych i znajdzie 94., która jest unikalna. Wystarczy wymienić na {1..3}maksymalny możliwy zasięg {~..!}.

Zsh , 48 47 bajtów *

for ((;$#i<${#${1:-$2}}||$@[(I)$i];i++)):
<<<$i

Wypróbuj online!

Zupełnie nowa metoda dzięki uprzejmości JoLinga w Perlu 6, ale nie działa na dużych ciągach (n> 20) z powodu ograniczeń wielkości całkowitych. $@[(I)$i]jest odwrotnym wyszukiwaniem tablicy do największego indeksu, wyświetli zero (fałsz w interpretacji arytmetycznej), jeśli $ i nie zostanie znalezione w parametrach wiersza poleceń.

Funkcja Gamma
źródło
3

MATL , 12 bajtów

c"1Y2@X-1)&h

Dane wejściowe to tablica komórek zawierająca ciągi znaków drukowalnych ASCII. Dane wyjściowe są tworzone z liter 'ABC', a zatem należą do domeny wejściowej.

Wypróbuj online!

Wyjaśnienie

Dane wyjściowe są tak długie, jak najdłuższy ciąg wejściowy. Jego n- ty znak jest pierwszą literą, 'ABC'która różni się od n-tego znaku obu ciągów wejściowych.

c        % Concatenate the two strings vertically. If one is shorter it is
         % right-padded with spaces. Gives a 2-row character matrix
"        % For each column
  1Y2    %   Push the string 'ABC...Z' (the upper-case letters)
  @      %   Push current column
  X-     %   Set difference
  1)     %   Get first character
  &h     %   Horizontally concatenate the results so far
         % End (implicit). Display stack (implicit)
Luis Mendo
źródło
3

Haskell, 56 52 48 bajtów

x#y|_:t<-max x y=[c:t|c<-"abc",c:t/=x,c:t/=y]!!0

Wypróbuj online!

Wymień pierwszy char z maksymalnie dwóch ciągów wejściowych z a, ba ci wybrać pierwszy z nich, który różni się od obu ciągów wejściowych.

nimi
źródło
3

Rubin , 53 bajty

->a,b{([?a,?b,?c].map{|e|e*[a,b].max.size}-[a,b])[0]}

Wypróbuj online!

Zasadniczo generuje ciągi a...a, b...boraz c...ci wybiera pierwszy nie na wejściu.

Conor O'Brien
źródło
1
Nie działa, jeśli pierwszym wejściem jest pusty ciąg.
Silvio Mayolo,
@SilvioMayolo naprawiono
Conor O'Brien
42 bajty
iamnotmaynard
3

ES6, 54 bajty

a=>b=>(a[0]+b[0]|0?'a':9-(a[0]^b[0]))+(a||b).substr(1)
Fermyon
źródło
Witamy w PPCG :)
Shaggy
3

Pyth, 7 8 bajtów

hC-LG.T

1 bajt dzięki Jakube

Zestaw testowy

Używamy .Ttranspozycji zachowującej długość, zamiast Cobcięcia transpozycji, dzięki czemu działa ona na wejściach, w których jeden ciąg jest pusty.

Biorąc pod uwagę dwa ciągi jako krotkę, transponujemy je ( .T), następnie odwzorowujemy wynikową parę znaków lub pojedynczy znak, odejmując znak (i) od alfabetu niższego za pomocą -LG, a następnie transponujemy wynikową listę ciągów nieużywanych znaków za pomocą C, a następnie zwracamy pierwszy taki ciąg z h. Składa się z pierwszej litery alfabetycznie, która nie jest w żadnym ciągu, dla każdej pozycji.

isaacg
źródło
3

Java (OpenJDK 8) , 100 73 bajtów

-27 bajtów dzięki magicznemu dotykowi @ Nevay! :)

a->b->{b=b.length<1?a:b;if(a.length<1||(b[0]^=2)==a[0])b[0]^=1;return b;}

Wypróbuj online!

Domena wejściowa = kod ASCII do wydruku + punkt kodowy 127.

Olivier Grégoire
źródło
2
73 bajty
Nevay
2

Rubinowy, 56 bajtów

->a,b{a,b=b,a if a<b;a[0]=([?a,?b,?c]-[a[0],b[0]])[0];a}
m-chrzan
źródło
2

Pyth , 23 22 bajtów

+.)-.{<G3.{,<Q1<KE1t|K

Wypróbuj tutaj!

Pyth , 22 bajty

+eS-.{<G3.{,<Q1<KE1t|K

Pakiet testowy!


Wyjaśnienie

+.)-.{<G3.{,<Q1<KE1t|K  - Full program.
      <G3               - Yields the String "abc"; Alphabet[:3].
    .{                  - Set formed by the above.
         .{,<Q1<KE1     - Set formed by input_1[:1] and input_2[:1]
   -                    - Set subtraction.
 .)                     - Pop the last element.
+                       - Append.
                   t|K  - input_1[1:] or input_2[1:], relying on the result of Logical OR.
Pan Xcoder
źródło
2

Perl 5, 82 79 bajtów

sub{$_=$_[0];$_=$_[1]||$_ if/^(xz*)?$/;s/[^z]/z/||s/./y/;$_ eq$_[1]&&s/./x/;$_}

Pobiera dane wejściowe jako dwa osobne argumenty i zwraca trzeci ciąg.

Podprogram próbuje utworzyć łańcuch bardzo podobny do pierwszego łańcucha, ale z pierwszym nie- zznakiem zastąpionym przez z. Następnie zajmuje się przypadkami narożnymi, zamieniając pierwszy znak na ylub x, w razie potrzeby, jeśli stwierdzi, że jedno z danych wejściowych było w rzeczywistości sekwencją wszystkich z.

Silvio Mayolo
źródło
2

Perl 5 , 68 bajtów

sub{$_="a"x length $_[0]||$_[1];$_++while $_ eq$_[0]||$_ eq$_[1];$_}

Wyjaśnienie:

  • zaczyna się od (ciąg litery „a” tak długi jak pierwszy ciąg) lub drugi ciąg, jeśli jest to fałsz, tzn. zero długości
  • ciągle to zwiększa, dopóki nie różni się od pierwszej i drugiej

Zaczynając od „a” s unikano zwiększania do punktu, w którym Perl wydłuża ciąg; z tylko dwoma ciągami znaków, aby uniknąć bycia tym samym, nie mógł się przepełnić.

Wykonaj z:

perl -e '$s = ' -E 'sub{$_="a"x length $_[0]||$_[1];$_++while $_ eq$_[0]||$_ eq$_[1];$_}' -E ';say $s->("z", "true")'
Ed.
źródło
1
Myślę, że to się nie powiedzie, jeśli pierwszy ciąg jest pusty.
Ørjan Johansen,
Całkiem dobrze! Naprawiony.
Ed.
2

C (gcc) ,70 65 73 67 61 bajtów

Funkcja wymaga, aby dostarczone ciągi były modyfikowalne (tj. Albo tablice, albo dynamicznie przydzielane).

f(a,b)char*a,*b;{a=*a?a:b;*a=*a>70?33:99;*a+=*a==*b;puts(a);}

Wypróbuj online!

Działa dla standardowego zakresu ASCII

Wyjaśnienie:

a=*a?a:b           // If a is empty, point to b instead
*a=*a>70?33:99     // Choose a different value for the 1st character of a,
                   // while giving enough space to increment it without 
                   // going back to its previous value
*a+=*a==*b         // Increment the 1st character of a if the arbitrary
                   // chosen value is equal to the value of the 1st 
                   // character of b
puts(a)            // Outputs a
szkocki
źródło
1
Nie jestem pewien, czy można uzyskać spójną domenę wejściową spełniającą reguły. Co jeśli *a==255i *b==0?
Ørjan Johansen
Masz rację. Naprawiono, kosztem 8 bajtów.
scottinet
Tam. Nie mogłem pozwolić, aby to rozwiązanie miało tę samą liczbę bajtów, co Java! :-)
scottinet
Jeśli nie ograniczasz się do ASCII do wydruku, możesz użyć liczb jednocyfrowych.
Ørjan Johansen
Chyba że źle zrozumiałem, byłoby to sprzeczne z tymi regułami wyzwań.
scottinet
2

R, 89 67 bajtów

@Giuseppe zapisał 9 bajtów, @ user2390246 zapisał 13 bajtów

funkcjonować

function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)

próbny

# define function
f <- function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)

# test cases
f("test","test")
[1] "aest"
f("do","don't")
[1] "ao"
f("ye s","yes")
[1] "ae s"
f("maybe","mayue")
[1] "aaybe"
f("false","false")
[1] "aalse"
f("false","true")
[1] "aalse"
f("1","")
[1] "a"
f("art","bug")
[1] "crt"
Wolne loris
źródło
1
Możesz umieścić xi yw ramach tego samego substrpolecenia. Również nawiasy klamrowe i returnsą niepotrzebne:function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)
user2390246
1
Możesz się go pozbyć, returnponieważ jest to funkcja, a nawiasy klamrowe, ponieważ jest to jedna wkładka.
Giuseppe,
Strzelaj, właśnie zdałem sobie sprawę, że f("","1")plony ""są równe pierwszemu wejściowi ... może to powinno być dodane jako kolejny przypadek testowy
Slow loris
2

Java 8, 119 bajtów

Lambda (curry) od Stringdo lambda od Stringdo String. Przypisz do Function<String, Function<String, String>>.

s->t->{String r=s.length()>t.length()?s:t;while((s+t).contains(r))r=r.substring(1)+(char)(Math.random()*128);return r;}

Wypróbuj online

Niegolfowana lambda

s ->
    t -> {
        String r = s.length() > t.length() ? s : t;
        while ((s + t).contains(r))
            r = r.substring(1) + (char) (Math.random() * 128);
        return r;
    }

To rozwiązanie obraca losowe znaki ASCII na dłuższy ciąg, dopóki nie zostaną spełnione wymagane warunki. Wejściami są UTF-8, a wyjściami ASCII.

Nie znam drobnych szczegółów Unicode, ale wydaje mi się prawdopodobne, że to rozwiązanie może się nie powieść, gdy dołączony chardołączy poprzedni punkt kodowy, tworząc jedną jednostkę kodu. Jeśli ktoś, kto wie więcej na ten temat, może to zweryfikować, zmienię domenę wejściową na ASCII.

Java 8, 126 bajtów

Taki sam typ jak powyżej.

s->t->{String r;for(byte[]o=(s.length()>t.length()?s:t).getBytes();(s+t).contains(r=new String(o));o[0]%=128)o[0]++;return r;}

Wypróbuj online

Niegolfowana lambda

s ->
    t -> {
        String r;
        for (
            byte[] o = (s.length() > t.length() ? s : t).getBytes();
            (s + t).contains(r = new String(o));
            o[0] %= 128
        )
            o[0]++;
        return r;
    }

To zwiększa pierwszy bajt dłuższego łańcucha, zawijając w ASCII, dopóki nie zostaną spełnione wymagane warunki. Wejścia i wyjścia są ciągami ASCII.

Jakob
źródło
1
Biorąc pod uwagę wynik trzeciego przypadku testowego, generuje ciąg długości trzy: Wypróbuj online!
Stephen
Cholera. Teraz muszę się nauczyć, jak działa Unicode, aby to naprawić bez zwiększania liczby bajtów ...
Jakob
2

Bash, 115 .. 77 bajtów

Zamienia pierwszy znak pierwszego (niepustego) ciągu wejściowego na 1,2,3, dopóki nie zostanie znalezione dopasowanie do żadnego z danych wejściowych. Wypróbuj online!

-9, -12, -9, -8 bajtów wszystko dzięki GammaFunction

x="${1:-$2}"
for s in {1..3}"${x:1}"
{ [[ $s = @($1|$2) ]]||break;}
echo "$s"

(całkiem poprawa w stosunku do oryginału ... )

roblogic
źródło
1
Dobra metoda! Możesz użyć =iw ||ostatnim wierszu, i użyj, ${x:-empty_fallback}aby usunąć początkową trójkę. Potrzebujesz także cudzysłowu na końcowym echu w przypadku spacji końcowych. Obowiązkowe TIO
GammaFunction
1
Oto link TIO , 94 bajty
GammaFunction
1
I jak to, co masz zamiar z shift, mam go związać moją metodę w dwóch różnych metod .
GammaFunction
1

Perl 5 , 79 + 1 (-p) = 80 bajtów

$"=<>;chop;$_=length($,=$_)>length$"?$_:$";s/./chr$&+65+$i++/e while/^($"|$,)$/

Wypróbuj online!

Xcali
źródło
1
Nie powiedzie się, jeśli dwa struny mają różną długość
Halvard Hummel
Zauważyłem to. Właśnie to poprawiłem.
Xcali,
1

Japt , 17 bajtów

;B¬£ñl g1 çXÃkU v

Powtarza litery A-Zna długości dłuższego wejścia, usuwa wartości na wejściu i pobiera pierwszy element z tablicy.

Wypróbuj online!

Stare rozwiązanie, 18 bajtów

;@!UøX}a@ñl g1 çBö

Wypróbuj online!

Wybiera losowy znak z alfabetu i powtarza go do długości dłuższego ciągu wejściowego, dopóki nie będzie obecny na wejściu.

Justin Mariner
źródło
Nie udało się ["abcdefghijklmnopqrstuvwxyz", "AAAAAAAAAAAAAAAAAAAAAAAAAA"]. Gdy uruchomiłem go wiele razy, wrócił "AAAAAAAAAAAAAAAAAAAAAAAAAA"(tak jak moja odpowiedź w Pyth, dopóki tego nie naprawiłem)
Mr. Xcoder
Nie działa w przypadku [„D”, „”]. jeśli uruchomisz go kilka razy, otrzymasz „D”
J42161217,
Dzięki, pomyślałem, że były przypadki, których nie testowałem. Naprawiono tylko dla bajtu +1.
Justin Mariner,
Ìpowinien działać zamiast g1 2-bajtowego zapisywania (w tablicy 2-elementowej g1= gJ), ale wydaje się, że występuje błąd Ìpodczas używania ;.
Kudłaty
@Shaggy Tak, myślę, że Jto nie jest już powód -1z powodu ;zmiany na ,. Właśnie dlatego użyłem 1w pierwszej kolejności.
Justin Mariner
1

Python 3, 74 73 bajty

-1 bajt dzięki Step Hen

def f(x,y,i=1):
 while i*10<10**len(x or y)or str(i)in x+y:i*=2
 print(i)

Wyświetla najniższą liczbę całkowitą o tej samej długości co pierwsze z wejść o niezerowej długości.

benzen
źródło
Zapisać bajt ze ijako domyślny parametr funkcji: def f(x,y,i=1):. Myślę, że możesz zaoszczędzić kolejny bajt, while10*iale nie jestem pewien.
Stephen
Można wymienić while i*10<10**len(x or y)or str(i)in x+yz while i<10**~-len(x or y)or str(i)in x+y ( 72 bajtów )
Panu Xcoder
Możesz także użyć rekurencji, aby zapisać bajty: f=lambda x,y,i=1:(i<10**~-len(x or y)or str(i)in x+y)and f(x,y,i*2)or i( 71 bajtów )
Mr. Xcoder,
1

Python 2, 77 bajtów

a=input()
b=ord(a[0][0])+1
if b==ord(a[1][0]):b+=1
print unichr(b)+a[0][1:-1]

Myślę, że ma pewien potencjał. Chodzi o to, że dodaje 1 do 1. znaku w 1. ciągu, a następnie sprawdza, czy 1. znak drugiego wejścia jest taki sam.

** Uwaga, ^ nie obsługuje ciągów o długości 0, więc tak naprawdę nie działa na tej długości.

Oto bardzo długie rozwiązanie, które działa z zerową długością

146 bajtów

a=input()
def c(i):print unichr(ord(a[i][0])+1)+a[i][1:];exit();
for x in range(2):if len(a[x-1])<1:c(x)
if a[0]==a[1]:c(1)
print a[1][0]+a[0][1:]

Wszelkie ulepszenia będą mile widziane!

Braeden Smith
źródło
1

CJam, 31 30 23 bajtów

q~:A:e>,3,sf*{A\f=:+!}=

Pobiera ASCII do wydruku jako dane wejściowe. Zwraca ciąg zer, 1 lub 2 o tej samej długości, co jeden z ciągów wejściowych. Logika jest taka, że ​​jednym z nich nie może być żaden z ciągów wejściowych!

Wypróbuj online

q~:A    e# Store input array as var 'A'
:e>,    e# Take the length of the lexicographically greater string in the input array
3,s     e# Generate "012"
f*      e# Repeat each number as many times as the longer string length, yielding something like ["000","111","222"]
{       e# Search array of number strings for first that returns true for this function
A\f=    e# Map each string in the input array to whether it equals the current number string (0,1)
:+!     e# Add up the array of bits and take the logical not. This returns true iff both array values were not equal to the current number string.
}=      e# Return the first number string that returns true.
geokavel
źródło
Czy ktoś ma jakieś pomysły, jak zwrócić true, tylko jeśli oba bity w tablicy są false (NOR)? Obecnie robię :+!.
geokavel