Ang Ikatlong String

Step Hen 09/11/2017. 21 answers, 547 views
code-golf string

Given dalawang string, output ng isang ikatlong string na hindi katumbas ng alinman sa dalawang inputs, ngunit may parehong haba (sa mga character) bilang alinman sa mga input. May katiyakan na hindi bababa sa isang wastong output.

Test Cases

Ang mga kaso ng pagsusulit ay naka-quote upang ipakita ang mga ito ay mga string. Ang mga output ay isa sa maraming posible.

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" 

Panuntunan

  • Maaari mong piliin ang iyong domain sa pag-input, ngunit dapat itong binubuo ng hindi bababa sa maipi-print na ASCII, at ang iyong output na domain ay dapat na kapareho ng iyong domain ng pag-input.
  • Ang haba ng input ay maaaring pareho o naiiba.
  • Ang output ay dapat na wasto na may probabilidad 1; iyon ay, maaari kang bumuo ng mga random na string hanggang sa isa ay wasto (at theoretically maaari mong walang katapusan na loop), ngunit hindi ka maaaring makapag-output ng isang random na string at umaasa ito ay may-bisa. Tandaan na ang ibig sabihin nito ay ang output mo ay hindi kailangang maging deterministic.
  • Pinapayagan ang mga awtomatikong sumusunod na mga bagong linya, ngunit hindi nila binibilang patungo sa haba ng output.
  • Dahil sa mga tanong tungkol sa Mga Error sa Memory, dapat itong gumana sa loob ng 60 segundo hanggang sa mga haba ng input ng 6 . Ang isang sagot na gumagana para sa mga iyon at theoretically gumagana para sa mas mahabang mga string ay OK, ngunit isang bagay na Memory Error sa modernong computer para sa input haba 4 ay hindi wasto.

Ito ay , kaya ang pinakamaikling sagot sa mga byte na panalo.

5 Comments
H.PWiz 08/18/2017
Maaari bang mabigo ang aking code para sa MaxChar sa input, ngunit ma-output ito?
8 geokavel 08/18/2017
Tila ito ay katulad ng isa pang kawili-wiling bagong kategorya ng mga tanong sa site na ito na madali para sa mga tao at mahirap para sa mga computer. Dahil ang mga computer ay hindi maganda sa divergent pag-iisip! Ito ay nagpapaalala sa akin ng episode na Spongebob kung saan siya ay buong gabi sinusubukan na magsulat ng isang sanaysay kung ano ang HINDI gawin sa isang stoplight.
1 Luis Mendo 08/18/2017
Nauunawaan ko na ang output domain ay maaaring maging isang subset ng domain ng pag-input, oo?
1 Step Hen 08/19/2017
@ kamoroso94 hindi, dahil may garantisadong isang wastong output.

21 Answers


betaveros 08/19/2017.

Haskell, 43 bytes

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

Dadalhin ang string (lexicographically mamaya) string, na alam namin ay walang bisa; pumapalit sa lahat ng mga character na may isa sa "a", "b", at "c" gamit ang <$ ; at ibabalik ang una na wala sa mga input. Sa tingin ko ito ay katulad ng sagot ni Neil's Charcoal at / o sagot ng CJam ng geokavel .

(Lurked ako ng ilang sandali ngunit ito ang aking unang pagkakataon na sumasagot sa site na ito, hi!)


Jenny_mathy 08/19/2017.

Mathematica, 111 bytes

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


subukan ito online (i-paste ang code sa ctrl + v, ilagay ang input sa dulo at pindutin ang shift + ipasok)

input

["test","me"]

thanx @Not a tree para sa pag-check at golfing -21 bytes

5 comments
Step Hen 08/18/2017
Paano ko sisubok muli ang online na ito?
Jenny_mathy 08/18/2017
Nagdagdag ng link + info
Halvard Hummel 08/18/2017
@ Jenny_mathy Tila mabibigo kung ang unang string ay ang walang laman na string
1 Jenny_mathy 08/18/2017
@HalvardHummel naayos!
1 Jenny_mathy 08/19/2017
@Notatree naayos. Kung sa tingin mo na "madaling golfing" ay isang dahilan para sa downvoting pagkatapos ay maligayang pagdating sa gawin ito

Jonathan Allan 08/18/2017.

Halaya , 8 bytes

żḟ@€ØAZḢ 

Try it online!

Paano?

żḟ@€Ø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 
3 comments
Jonathan Allan 08/19/2017
Nagbabalik ito ng B TIO
Jonathan Allan 08/19/2017
Ang algorithm ay hindi dapat pa rin, hindi sigurado kung ano ang iyong ginawa.
Erik the Outgolfer 08/19/2017
nevermind ang aking utak ay tila naglalaro ng mga trick dahil hindi ko makita ang anumang X o doon ...

Neil 08/19/2017.

Uling , 22 bytes

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

Subukan ito online! Link ay sa masalita na bersyon ng code. Binubuo ang lahat ng mga string ng mga uppercase character na paulit-ulit hanggang sa haba ng mas mahabang input at overprints sa lahat ng mga hindi lilitaw sa input. Sa ibang salita, ang output ay karaniwang ZZZ... maliban kung iyon ay isa sa mga input, kung saan ang kaso ay YYY... maliban kung ito ay ang iba pang input, kung saan ito ay XXX...


Halvard Hummel 08/19/2017.

Python 3 , 62 47 57 54 51 bytes

Edit: - 5 bytes salamat sa @ Mr.Xcoder

Edit: +10 bytes upang ayusin ang isang bug

Edit: -3 bytes salamat sa @betaveros

Edit: -3 bytes sa pamamagitan ng paggamit ng max sa halip na pop

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

Subukan ito online!

4 comments
Mr. Xcoder 08/18/2017
{"a","b","c"} ==> {*"abc"} ( 57 bytes )
betaveros 08/19/2017
(x[1:]or y[1:]) ==> max(x,y)[1:] ?
betaveros 08/19/2017
O lamang (x or y)[1:] , sa palagay ko kailangan mo lamang iwasan ang walang laman na string.
betaveros 08/19/2017
Hindi sinasadya, ito ay isang kahihiyan na si Python 2 ay hindi naka-starred set literals, dahil talagang gusto kong golf {*"abc"} {*`id`} ...

Adnan 08/18/2017.

05AB1E , 8 7 bytes

øvAyм¬? 

Gumagamit ng 05AB1E encoding. Subukan ito online!


Luis Mendo 08/18/2017.

MATL , 12 bytes

c"1Y2@X-1)&h 

Input ay isang cell array ng mga string na naglalaman ng naka-print na ASCII karakter. Ang output ay nabuo mula sa mga titik na 'ABC' , at kaya nabibilang sa domain ng pag-input.

Subukan ito online!

Paliwanag

Ang output ay hangga't ang pinakamahabang input string. Ang n -na character nito ay ang unang titik mula sa 'ABC' na naiiba mula sa n -ang karakter ng parehong string ng input.

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) 

Quelklef 08/19/2017.

Brainfuck, 65 bytes (hindi nakikipagkumpitensya)

Hindi nakikipagkumpitensya dahil hindi ito gumagana kung nagpasok ka ng isang walang laman na string: (

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

Magpatakbo ng code online (tandaan na ang "dynamic na memorya" ay dapat mapili sa ibabang kanan)

Kahanga-hanga hamon! Akala ko ito ay walang halaga ngunit natapos na talagang mahirap =]

Ang input ay str1 bilang str1 + \0 + str2 , kung saan ang mga string ay magkakasunod na di-zero 1-byte na mga character.

Output ay str2 ngunit sa halip na ang unang paggamit ng character:

  • Kung first str1 == first str2 : ((first str1 + 1) % 256) or 1
  • Iba: (first str2 - first str1) % 256

Ang algorithm ay nakasalalay sa katotohanan na ∀a ∈ (0,256) ∀b ∈ (0,256) ∄c st (for k = a - b (mod 256), k = a or k = b)

Nagkomento:

# Let F be the first string inputted
# Let S be the second string inputted
# Let A/b be the bth value of A
# Let (p) be the pointer

+>+[-
,[>>,]<<[<<]>]># Tape: S/0 (p) : F/0 : S/1 : F/1 : S/2 : F/2 :::

>[-<-<+>>]<

            Label: A                   Label: C    Label: E
              vvv                         v         vvv
# Tape: : 0 : F/0 : S/0 (minus) F/0 (p) : 0 : F/1 : S/1 :::
          V        ^^^^^^^^^^^^^^^^^^^       ^^^
    Label: Z             Label: B          Label: D

# It is known that B = S/0 (minus) F/0 and B != S/0 and B != F/0
# If B = 0 then S/0 = F/0 and replacing B with (F/0 (plus) 1) or 1 is good
# If B != 0 then replacing B with B (ie doing nothing) is good
# The logic behind these statements is left as an exercise to the reader

# (p) on B

[<<]>  # If B is 0 then (p) on C else (p) on A<[-]<+[->+<]>>  # If B was 0 then replace B with A else do nothing; do not move (p)
[>]  # Guarantee (p) on C

# Now we have to make sure B is not 0 if it is add 1<[<]+[>]  # Do so and guarantee (p) on C<[.>>]  # Print 

Mr. Xcoder 08/19/2017.

Pyth , 23 22 bytes

+.)-.{ 

Try it here!

Pyth , 22 bytes

+eS-.{ 

Test Suite!


Paliwanag

+.)-.{ 

m-chrzan 08/18/2017.

Ruby, 56 bytes

->a,b{a,b=b,a if a 

nimi 08/19/2017.

Haskell, 56 52 48 bytes

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

Subukan ito online!

Palitan ang unang char ng maximum ng dalawang input string na may a , b at c at piliin ang unang isa na naiiba mula sa parehong mga input string.


Conor O'Brien 08/20/2017.

Ruby , 53 bytes

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

Subukan ito online!

Karaniwang bumubuo ang mga string a...a , b...b , at c...c at pinipili ang unang hindi sa input.

2 comments
Silvio Mayolo 08/20/2017
Nabigo kung ang unang input ay ang walang laman na string.
Conor O'Brien 08/20/2017
Naayos ang @ SilvioMayolo

Leif Willerts 08/18/2017.

Haskell, 41 bytes

n[]_=[]
n _[]=[]
n(i:c)(h:t)=succ i:n c t 
2 comments
2 betaveros 08/19/2017
Ang walang laman na string ay hindi wastong output kung ang isa sa mga input ay isang walang laman na string ...
1 nimi 08/19/2017
Nabigo ito kung ang string ay nagsisimula sa '\1114111' .

Justin Mariner 08/19/2017.

Japt , 17 bytes

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

Sinusulit ang mga titik A-Z sa haba ng mas mahabang input, inaalis ang mga halaga sa input, at makuha ang unang item sa array.

Subukan ito online!

Lumang solusyon, 18 bytes

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

Subukan ito online!

Pinipili ang isang random na character mula sa alpabeto at inuulit ito sa haba ng mas mahabang input string, hanggang hindi ito naroroon sa input.

3 comments
Mr. Xcoder 08/18/2017
Nabigo para sa ["abcdefghijklmnopqrstuvwxyz", "AAAAAAAAAAAAAAAAAAAAAAAAAA"] . Kapag tumatakbo ito nang maraming beses, ibinalik nito ang "AAAAAAAAAAAAAAAAAAAAAAAAAA" (tulad ng ginawa ng aking Pyth, hanggang naayos ko iyon)
Jenny_mathy 08/18/2017
Nabigo ito para sa ["D", ""]. kung patakbuhin mo ito nang maraming beses makakakuha ka ng "D"
Justin Mariner 08/18/2017
Salamat, may korte akong may mga kaso na hindi ko nasubukan. Naayos para lamang sa 1 byte.

benzene 08/19/2017.

Python 3, 74 73 bytes

-1 byte salamat sa 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) 

Naka-print ang pinakamababang integer na may parehong haba bilang unang ng mga input na may haba ng nonzero.

1 comments
Step Hen 08/19/2017
I-save ang isang byte na may bilang isang default na function na parameter: def f(x,y,i=1): Sa tingin ko maaari mong i-save ang isa pang byte sa while10*i ngunit hindi ako sigurado.

Jakob 08/19/2017.

Java 8, 119 bytes

Lambda (curried) mula sa String hanggang lambda mula sa String hanggang String . Magtalaga sa Function> .

 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;} 

Subukan Ito Online

Ungolfed 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;
    } 

Ang solusyon na ito ay umiikot sa random na mga karakter sa ASCII sa mas mahabang string hanggang ang mga kinakailangang kondisyon ay nasiyahan. Ang mga input ay UTF-16 at mga output ay ASCII.

Hindi ko alam ang mga makintab na detalye ng Unicode, ngunit tila makatwiran sa akin na ang solusyon na ito ay maaaring mabigo kapag ang isang appended na char sumali sa naunang code point upang bumuo ng isang yunit ng code. Kung ang isang taong nakakaalam ng higit pa tungkol sa ito ay maaaring i-verify ito, babaguhin ko ang input domain sa ASCII.

Java 8, 126 bytes

Parehong uri tulad ng nasa itaas.

 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;} 

Subukan Ito Online

Ungolfed 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;
    } 

Pinapalaki nito ang unang byte ng mas mahabang string, wrapping sa loob ng ASCII, hanggang sa matugunan ang mga kinakailangang kondisyon. Ang mga input at output ay mga string ng ASCII.

2 comments
1 Step Hen 08/19/2017
Given ang output ng iyong ikatlong kaso ng pagsubok, ito outputs isang string ng haba ng tatlong: Subukan ito sa online!
Jakob 08/19/2017
Ah, crap. Ngayon pupuntahan ko na upang malaman kung paano gumagana ang Unicode upang ayusin ito nang walang sumasabog ang bilang ng byte ...

Braeden Smith 08/19/2017.

Python 2, 77 bytes

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

Sa tingin ko ito ay may ilang potensyal. Ang ideya ay na ito ay nagdadagdag ng 1 sa ika-1 char sa 1st string, pagkatapos ay i-tsek kung ang 1st char iba pang input ay pareho.

** Tandaan, ^ ay hindi nagtataglay ng 0 haba ng mga string, kaya hindi ito talagang gumagana sa haba na ito.

Narito ang isang sobrang mahabang solusyon na gumagana sa 0 haba

146 Bytes

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:] 

Anumang mga pagpapabuti ay pinapahalagahan!


geokavel 08/19/2017.

CJam, 31 30 23 bytes

q~:A:e>,3,sf*NO 

Tumatagal printable ASCII bilang input. Ang mga output ay alinman sa isang string ng 0, 1, o 2 na ang parehong haba bilang isa sa mga string ng input. Ang lohika ay ang isa sa mga hindi maaaring maging alinman sa mga string ng input!

Subukan ito 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. 
1 comments
geokavel 08/19/2017
Sinuman ay may anumang mga ideya sa kung paano bumalik tunay na lamang kung ang parehong mga bits sa array ay false (OO)? Sa kasalukuyan, ginagawa ko ang :+! .

w0lf 08/19/2017.

Haskell, 81 74 bytes

 import Data.List
[]![]=[]
(a:b)!(x:y)=("abc"\\[a,x])!!0:b!y
x!y=(x++y)!" " 

Ito ang parehong "abc" set approach na naroroon din sa sagot ni G. XCoder . Ang resulta ay palaging ang haba ng mas mahabang input string.

Naka-save na 7 bytes salamat sa betaveros!

Subukan ito online.

2 comments
betaveros 08/19/2017
Dahil ang []![] At (a:b)!(x:y) ay kapwa hindi makatutugma lamang kung eksaktong isa sa mga input ay walang laman, sa palagay ko maaari mong palitan ang dalawang mga kaso x![]=x!" " at []!x=x!" " may isang pangwakas na kaso x!y=(x++y)!" " upang mag-ahit ng ilang bytes.
w0lf 08/19/2017
@betaveros Na-edit, salamat! BTW: Ang iyong sagot ay kahanga-hanga! :)

Xcali 08/18/2017.

Perl 5 , 79 + 1 (-p) = 80 bytes

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

Subukan ito online!

2 comments
Halvard Hummel 08/18/2017
Nabigo kung ang dalawang string ay may iba't ibang haba
Xcali 08/18/2017
Napansin ko iyon. Pagbabago lamang ito.

Silvio Mayolo 08/20/2017.

Perl 5, 82 79 bytes

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

Dadalhin ang pag-input bilang dalawang hiwalay na argumento at ibabalik ang pangatlong string.

Ang subroutine ay nagtatangkang gumawa ng isang string na halos katulad sa unang string ngunit sa unang non- z character na pinalitan ng isang z . Pagkatapos ay nakikitungo ito sa mga sulok ng mga sulok sa pamamagitan ng pagpapalit ng unang karakter na may y o x , kung kinakailangan, kung nakita nito na ang isa sa mga input ay sa katunayan ay isang pagkakasunud-sunod ng lahat ng z 's.

Related questions

Hot questions

Language

Popular Tags