Geben Sie bei zwei gegebenen Zeichenfolgen eine dritte Zeichenfolge aus, die keiner der beiden Eingaben entspricht, jedoch dieselbe Länge (in Zeichen) wie eine der Eingaben hat. Es gibt garantiert mindestens eine gültige Ausgabe.
Testfälle
Testfälle werden zitiert, um zu zeigen, dass es sich um Zeichenfolgen handelt. Ausgänge sind einer von vielen möglichen.
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"
Regeln
- Sie können Ihre Eingabedomäne auswählen, diese muss jedoch mindestens aus druckbarem ASCII-Code bestehen und Ihre Ausgabedomäne muss mit Ihrer Eingabedomäne identisch sein.
- Die Eingabelängen können gleich oder unterschiedlich sein.
- Die Ausgabe muss mit Wahrscheinlichkeit 1 gültig sein; Das heißt, Sie können zufällige Zeichenfolgen generieren, bis eine gültig ist (und theoretisch können Sie eine Endlosschleife erstellen), aber Sie können nicht einfach eine zufällige Zeichenfolge ausgeben und hoffen, dass sie gültig ist. Beachten Sie, dass dies bedeutet, dass Ihre Ausgabe nicht deterministisch sein muss.
- Automatisch nachgestellte Zeilenumbrüche sind zulässig, werden jedoch nicht für die Länge der Ausgabe berücksichtigt.
- Aufgrund von Fragen zu Speicherfehlern muss es innerhalb von 60 Sekunden bis zu einer Eingabelänge von funktionieren
6
. Eine Antwort, die dafür funktioniert und theoretisch für längere Zeichenfolgen funktioniert, ist in Ordnung, aber etwas, das Memory Errors auf modernen Computern für die Eingabelänge4
nicht gültig ist.
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Antworten:
05AB1E ,
87 BytesVerwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
Haskell, 43 Bytes
Nimmt die maximale (später lexikografisch) Zeichenfolge, von der wir wissen, dass sie nicht leer ist. Ersetzt alle Zeichen mit "a", "b" und "c". using
<$
; und gibt die erste zurück, die keine der Eingaben ist. Ich denke, dies ähnelt Neils Charcoal-Antwort und / oder Geokavel's CJam-Antwort .(Ich habe eine Weile gelauert, aber dies ist das erste Mal, dass ich auf dieser Seite antworte; hi!)
quelle
Brainfuck, 97 Bytes
Code online ausführen (beachten Sie, dass "dynamischer Speicher" unten rechts ausgewählt sein muss)
Tolle Herausforderung! Ich dachte, es wäre trivial, aber es wurde wirklich schwierig. Ich komme immer darauf zurück , weil ich wie das Gefühl , es sollte einige elegante 20-oder-so-Byte BF Lösung sein. Zu diesem Zeitpunkt bin ich ziemlich froh, dass ich es (anscheinend) überhaupt in BF zum Laufen gebracht habe.
Die Eingabe erfolgt als
str1
+\0
+str2
, wobei Zeichenfolgen aufeinanderfolgende 1-Byte-Zeichen ungleich Null sind.Rückgabe
(first str1 + first str2) or (first str1 + 1) or 2
. Dieser Algorithmus wurde von dem brillanten @ ØrjanJohansen ausgedacht, (vermutlich) basierend auf meinem (kaputten) Original.Kommentiert:
quelle
a=2
,b=1
. Sie müssen addieren statt subtrahieren.S
leere Problem beheben, indem Sie es>
am Anfang hinzufügen und später ganz[<]>
links einfügenS
- wenn das nicht Null ist, geschieht nichts, andernfalls werden die Zeichenfolgen vertauscht.b
. Aber nichta
.!= a
nur, wenn ich drucken ,S/0, S/1, ...
anstattS/0, F/1, ...
es sollte funktionieren.Gelee , 8 Bytes
Probieren Sie es online!
Wie?
quelle
B
TIOX
oder keine darin seheẊ
...Python 3 ,
6247575451 BytesBearbeiten: - 5 Bytes dank @ Mr.Xcoder
Bearbeiten: +10 Bytes, um einen Fehler zu beheben
Edit: -3 Bytes dank @betaveros
Bearbeiten: -3 Bytes mit max anstelle von pop
Probieren Sie es online!
quelle
{"a","b","c"}
==>{*"abc"}
( 57 Bytes )(x[1:]or y[1:])
==>max(x,y)[1:]
?(x or y)[1:]
ich denke, Sie müssen nur die leere Zeichenfolge vermeiden.{*"abc"}
in{*`id`}
...*len(x or y)
statt+max(x,y)[1:]
.Holzkohle , 22 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Generiert alle Zeichenfolgen aus Großbuchstaben, die bis zur Länge der längeren Eingabe wiederholt werden, und überdruckt alle Zeichen, die nicht in der Eingabe enthalten sind. Mit anderen Worten, die Ausgabe erfolgt normalerweise,
ZZZ...
sofern es sich nicht um eine der Eingaben handelt. In diesem Fall handelt es sichYYY...
um die andere Eingabe. In diesem Fall handelt es sich um eine EingabeXXX...
.quelle
Mathematica, 111 Bytes
Online ausprobieren (Code mit Strg + V einfügen, Eingabe am Ende platzieren und Shift + Enter drücken)
Eingang
Danke @Nicht ein Baum zum Überprüfen und Golfen -21 Bytes
quelle
Perl 6 ,
3830 BytesProbieren Sie es online!
Anonymer Codeblock, der die Eingabe als Liste mit zwei Zeichenfolgen annimmt und die erste Zahl
1111...
mit einer nicht leeren Anzahl von Einsen zurückgibt, die nicht in der Eingabe enthalten ist.Erläuterung:
quelle
long long
leider verwendet.Zsh ,
51473736 Bytes-4 Bytes , die durch eingebaute Array
argv
, -10 Bytes Präfix Entfernung unter Verwendung undRC_EXPAND_PARAM
, -1 - Byte durch die Klammer Expansion inlining.Probieren Sie es online!
Zunächst war dies eine großartige Herausforderung. Ich habe eine Menge Ideen durchgearbeitet, bevor ich auf dieser landete.
@
und*
sind keine Bezeichner, also${ :|@}
und${ :|*}
funktionieren nicht, daher die Verwendung von${ :|argv}
Zsh ,
4847 Bytes *Probieren Sie es online!
Vollständig neue Methode mit freundlicher Genehmigung von JoKings Perl 6-Einreichung, funktioniert jedoch aufgrund von Beschränkungen der Ganzzahlgröße nicht für große Zeichenfolgen (n> 20).
$@[(I)$i]
Wenn die Array-Suche in umgekehrter Reihenfolge zum größten Index erfolgt, wird Null ausgegeben (falsch in der arithmetischen Erweiterung), wenn $ i nicht in den Befehlszeilenparametern gefunden wird.quelle
MATL , 12 Bytes
Die Eingabe ist ein Zellenarray von Zeichenfolgen, die druckbare ASCII-Zeichen enthalten. Die Ausgabe wird aus den Buchstaben gebildet
'ABC'
und gehört somit zur Eingabedomäne.Probieren Sie es online!
Erläuterung
Die Ausgabe ist so lang wie die längste Eingabezeichenfolge. Das n- te Zeichen ist der erste Buchstabe
'ABC'
, der sich vom n- ten Zeichen beider Eingabezeichenfolgen unterscheidet.quelle
Haskell,
565248 BytesProbieren Sie es online!
Ersetzen des erste Zeichen des Maximums der beiden Eingänge Saiten
a
,b
und ,c
und die ersten eine auswählen , die von beiden Eingabezeichenfolgen unterschiedlich ist.quelle
Ruby , 53 Bytes
Probieren Sie es online!
Generiert im Grunde die Zeichenfolgen
a...a
,b...b
undc...c
und wählt die erste nicht in der Eingabe.quelle
ES6, 54 Bytes
quelle
Pyth, 7
8Bytes1 Byte danke an Jakube
Testsuite
Wir verwenden die
.T
längenerhaltende Transponierung und nicht dasC
Abschneiden der Transponierung, sodass sie bei Eingaben funktioniert, bei denen eine Zeichenfolge leer ist.Wenn wir zwei Strings als Tupel gegeben haben, transponieren wir sie (
.T
), ordnen dann das resultierende Zeichenpaar oder einzelne Zeichen zu, indem wir die Zeichen vom Lowerase-Alphabet mit subtrahieren-LG
, transponieren dann die resultierende Liste von Strings nicht verwendeter Zeichen mitC
und kehren dann zurück die erste solche Zeichenfolge mith
. Dies besteht aus dem ersten Buchstaben in alphabetischer Reihenfolge, der für jede Position nicht in einer der beiden Zeichenfolgen enthalten ist.quelle
Java (OpenJDK 8) ,
10073 Bytes-27 Bytes dank der magischen Note von @ Nevay! :)
Probieren Sie es online!
Eingabedomäne = Druckbarer ASCII + Codepunkt 127.
quelle
Ruby, 56 Bytes
quelle
Pyth ,
2322 BytesProbieren Sie es hier aus!
Pyth , 22 Bytes
Test Suite!
Erläuterung
quelle
Perl 5,
8279 BytesNimmt Eingaben als zwei separate Argumente und gibt die dritte Zeichenfolge zurück.
Das Unterprogramm versucht, eine Zeichenfolge zu erzeugen, die der ersten Zeichenfolge sehr ähnlich ist, wobei jedoch das erste Nichtzeichen
z
durch a ersetzt wirdz
. Dann werden Eckfälle behandelt, indem das erste Zeichen durchy
oder ersetztx
wird, wenn festgestellt wird, dass es sich bei einer der Eingaben tatsächlich um eine Folge aller Zeichen handeltz
.quelle
Perl 5 , 68 Bytes
Erläuterung:
Ausgehend von "a" sollte vermieden werden, zu erhöhen, bis Perl die Zeichenfolge verlängert. Mit nur zwei Zeichenfolgen konnte es nicht überlaufen.
Ausführen mit:
quelle
C (gcc) ,
7065736761 BytesFür die Funktion müssen die bereitgestellten Zeichenfolgen veränderbar sein (dh entweder Arrays oder dynamisch zugewiesen).
Probieren Sie es online!
Funktioniert für den Standard-ASCII-Bereich
Erläuterung:
quelle
*a==255
und*b==0
?R
8967 Bytes@ Giuseppe speicherte 9 Bytes, @ user2390246 speicherte 13 Bytes
Funktion
Demo
quelle
x
undy
innerhalb des gleichensubstr
Befehls setzen. Auch geschweifte Klammern undreturn
sind unnötig:function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)
return
da dies eine Funktion ist, und die Klammern, da es ein Einzeiler ist.f("","1")
Erträge""
, die gleich der ersten Eingabe ist ... Vielleicht sollte dies als ein weiterer Testfall hinzugefügt werdenJava 8, 119 Bytes
Lambda (Curry) von
String
bis Lambda vonString
bisString
. Zuweisen zuFunction<String, Function<String, String>>
.Probieren Sie es online
Ungolfed Lambda
Diese Lösung dreht zufällige ASCII-Zeichen in die längere Zeichenfolge, bis die erforderlichen Bedingungen erfüllt sind. Eingänge sind UTF-8 und Ausgänge sind ASCII.
Ich kenne die grundlegenden Details von Unicode nicht, aber es scheint mir plausibel, dass diese Lösung fehlschlagen könnte, wenn ein angefügtes
char
Element den vorhergehenden Codepunkt verbindet, um eine einzelne Codeeinheit zu bilden. Wenn jemand, der mehr darüber weiß, dies überprüfen kann, werde ich die Eingabedomäne in ASCII ändern.Java 8, 126 Bytes
Gleicher Typ wie oben.
Probieren Sie es online
Ungolfed Lambda
Dadurch wird das erste Byte der längeren Zeichenfolge in ASCII-Zeilen erhöht, bis die erforderlichen Bedingungen erfüllt sind. Ein- und Ausgänge sind ASCII-Zeichenfolgen.
quelle
APL (Dyalog Unicode) , 11 Byte SBCS
Vollständiges Programm, Eingabe als verschachtelte Liste mit zwei Elementen.
Probieren Sie es online!
quelle
Bash,
115.. 77 BytesErsetzt das erste Zeichen der ersten (nicht leeren) Eingabezeichenfolge durch 1,2,3, bis für keine der Eingaben eine Übereinstimmung gefunden wird. Probieren Sie es online!
-9, -12, -9, -8 Bytes dank GammaFunction
(eine ziemliche Verbesserung gegenüber dem Original ... )
quelle
=
und||
in der letzten Zeile verwenden und verwenden${x:-empty_fallback}
, um das Start-Ternär zu entfernen. Außerdem benötigen Sie Anführungszeichen für das Ende-Echo für den Fall von Leerzeichen am Ende. Obligatorische TIOshift
, ich habe es meine Methode in zwei verschiedenen Methoden zu binden .@($1|$2)
MustererkennungPerl 5 , 79 + 1 (-p) = 80 Bytes
Probieren Sie es online!
quelle
Japt , 17 Bytes
Wiederholt die Buchstaben
A-Z
bis zur Länge der längeren Eingabe, entfernt die Werte in der Eingabe und ruft das erste Element im Array ab.Probieren Sie es online!
Alte Lösung, 18 Bytes
Probieren Sie es online!
Wählt ein zufälliges Zeichen aus dem Alphabet und wiederholt es bis zur Länge der längeren Eingabezeichenfolge, bis es in der Eingabe nicht mehr vorhanden ist.
quelle
["abcdefghijklmnopqrstuvwxyz", "AAAAAAAAAAAAAAAAAAAAAAAAAA"]
. Wenn es mehrmals ausgeführt wurde, kehrte es zurück"AAAAAAAAAAAAAAAAAAAAAAAAAA"
(genau wie meine Pyth-Antwort, bis ich dasÌ
sollte anstelle vong1
für eine 2-Byte-Speicherung funktionieren (in einem 2-Element-Arrayg1
=gJ
), aber es scheint einen FehlerÌ
bei der Verwendung zu geben;
.J
nicht mehr-1
wegen des;
wechselnden es,
. Deshalb habe ich1
in erster Linie verwendet.Python 3,
7473 Bytes-1 Byte dank Step Hen
Gibt die niedrigste Ganzzahl mit derselben Länge aus wie die erste der Eingaben mit einer Länge ungleich Null.
quelle
i
als Standard - Funktionsparameter:def f(x,y,i=1):
. Ich denke, Sie können ein weiteres Byte mit speichern,while10*i
aber ich bin nicht sicher.while i*10<10**len(x or y)or str(i)in x+y
mitwhile i<10**~-len(x or y)or str(i)in x+y
( 72 Bytes ) ersetzenf=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 Bytes )Python 2, 77 Bytes
Ich denke, es hat ein gewisses Potenzial. Die Idee ist, dass es dem 1. Zeichen in der 1. Zeichenfolge 1 hinzufügt und dann prüft, ob das 1. Zeichen des anderen Eingangs dasselbe ist.
** Beachten Sie, dass ^ keine Zeichenfolgen mit der Länge 0 verarbeitet und daher bei dieser Länge nicht wirklich funktioniert.
Hier ist eine super lange Lösung, die mit der Länge 0 funktioniert
146 Bytes
Verbesserungen wären willkommen!
quelle
CJam,
313023 BytesÜbernimmt druckbares ASCII als Eingabe. Gibt entweder eine Zeichenfolge mit 0, 1 oder 2 aus, die dieselbe Länge wie eine der Eingabezeichenfolgen hat. Die Logik ist, dass eine dieser Zeichenfolgen keine der Eingabezeichenfolgen sein kann!
Probieren Sie es online
quelle
:+!
.C # (Mono) , 94 Bytes
Probieren Sie es online!
quelle