Sie erhalten eine Zeichenfolge und zwei Zeichen. Sie müssen die Zeichenfolge zwischen diesen Zeichen aus der Zeichenfolge drucken.
Eingang
Die Eingabe enthält zunächst eine Zeichenfolge (nicht leer oder null
). In der nächsten Zeile werden zwei Zeichen durch ein Leerzeichen getrennt.
Herausforderung
Gibt die Zeichenfolge zwischen den beiden Zeichen zurück
Beispiel
Hello! What's your name?
! ?
sollte die Ausgabe ergeben:
" What's your name"
Regeln
- Die Zeichenfolge darf nicht länger als 100 Zeichen sein und enthält nur ASCII-Zeichen im Bereich
(Leerzeichen) bis
~
(Tilde) (Zeichencodes 0x20 bis 0x7E, einschließlich). Siehe ASCII-Tabelle als Referenz. - Sie müssen Eingaben von der
stdin
(oder nächstgelegenen) Alternative nehmen. - Die Ausgabe sollte mit Anführungszeichen (
"
) umgeben sein. - Sie können ein vollständiges Programm oder eine Funktion schreiben, die Eingaben entgegennimmt und die endgültige Zeichenfolge ausgibt
- Die beiden Zeichen enthalten nur ASCII-Zeichen im Bereich
(Leerzeichen) bis
~
(Tilde) (Zeichencodes 0x20 bis 0x7E, einschließlich). Siehe ASCII-Tabelle als Referenz. - Es kann nicht garantiert werden, dass beide Zeichen in der Zeichenfolge enthalten sind.
- Wenn eines der Zeichen in der Zeichenfolge nicht gefunden wird, drucken Sie
"null"
. - Wenn eines der Zeichen mehrmals in einer Zeichenfolge gefunden wird (es sei denn, beide Zeichen sind identisch), drucken Sie
"null"
. - Wenn beide Zeichen dasselbe Zeichen sind, drucken Sie die Zeichenfolge
"null"
.
Testfälle
1)
<HTML>code</HTML>
> < --> "null"
2)
What's what?
' ' --> "null"
3)
abcdefghijklmnopqrstuvwxyz
n k --> "lm"
4)
Testing...
e T --> ""
5)
Last test-case
- --> "test"
Wertung
Dies ist Codegolf, daher gewinnt die kürzeste Übermittlung (in Byte).
"
? Sollen wir es einfach mit einem anderen Paar Anführungszeichen umgeben und uns nicht darum kümmern?one"two-three \n" -
Ausgabe:"two"
(\n
ist eine neue Zeile)Antworten:
CJam,
343332 BytesProbieren Sie es online im CJam-Interpreter aus .
Idee
Entfernen Sie das zweite Zeichen aus Zeile 2.
Bilden Sie eine Zeichenfolge, die aus einer einzigen Kopie aller Zeichen besteht, die beide Zeilen gemeinsam haben.
Wiederholen Sie die resultierende Zeichenfolge zweimal und verwerfen Sie die ersten beiden Zeichen.
Dies führt zu einer zweistelligen Zeichenfolge (wenn die Zeichen in Zeile 2 unterschiedlich sind und beide in Zeile 1 vorkommen) oder zu einer leeren Zeichenfolge.
Ersetzen Sie die Zeichen der resultierenden Zeichenfolge in Zeile 1 durch Zeilenvorschübe.
Teilen Sie die Linie 1 bei Zeilenvorschüben.
Das zweite Element des resultierenden Arrays ist die gewünschte Zeichenfolge, wenn das Array genau drei Blöcke enthält.
Ersetzen Sie das erste Element des Arrays durch die Zeichenfolge null .
Rufen Sie das zweite Element des Arrays ab, wenn seine Länge 3 beträgt, und das erste, wenn dies nicht der Fall ist.
Stellen Sie ein doppeltes Anführungszeichen voran und hängen Sie es an.
Code
quelle
CJam, 38 Bytes
Zu lang...
Erläuterung
quelle
Pyth,
373634 BytesDanke an @isaacg für die zwei Bytes sparen.
Probieren Sie es online aus: Pyth Compiler / Executor
Erläuterung:
quelle
*2]1
ist kürzer als[1 1)
und- ... 1
ist noch kürzer.-...1
funktioniert nicht, da ich auch überprüfen muss, ob es genau zwei Zahlen gibt.[1 1)
:jT9
.Python 3, 149 Bytes
Ungolfed Version:
Dies ist meine erste Antwort hier, daher sind Tipps und Kritik sehr willkommen.
quelle
Ruby,
1089594Und für die ungolfed version
quelle
->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["<html>test</html>",?>,?<]
Am[...]
Ende wird die Funktion aufgerufen .->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["Last test-case"," ","-"]
raise
auszulösen, können Sie ihn durchraise
eine undefinierte Variable wie_
oder ersetzeny
. Dies löst einen NameError aus. Außerdem denke ich, dass Sie ohne eine explizite Rettung ein paar weitere Bytes sparen könnten:->s,f,l{a,b=[f,l].map{|u|(f==l||s.count(u)!=1)&&p('null')&&exit;s.index u}.minmax;p s[a+1...b]}
C 192 Bytes
Ungolfed-Code:
Teste es hier
quelle
Python 3, 172 Bytes
quelle
Javascript ( ES6 ),
125123 BytesDie Idee wurde schwer von der @ edc65-Lösung gestohlen.
quelle
[a,,b]=
, ich werde es beim nächsten Mal verwenden. Da reguläre Ausdrücke ein Ärger sind, gibt es hier eine Lösung ohne[a,,b]=(P=prompt)(s=P()), P((s=s.split(a)).length==2& (s=[].concat(...s.map(s=>s.split(b)))).length==3 ?``"${s[1]}"``:null)
Python, 161 Bytes
Die Lösung verwendet meist nur einen regulären Ausdruck, um die Zeichenfolge zu extrahieren. Um zu berücksichtigen, dass die Buchstaben in beide Richtungen übereinstimmen können, lassen Anfang und Ende des übereinstimmenden Teils beide Buchstaben zu. Wenn Sie überprüfen, ob die tatsächlich übereinstimmenden Buchstaben unterschiedlich sind, wird ausgeschlossen, dass derselbe Buchstabe zweimal übereinstimmt und dass die beiden Buchstaben in der Eingabe identisch sind.
Dies ist mein erster Versuch, hier mit Python eine Antwort zu finden. Feedback zu möglichen Verbesserungen ist daher sehr willkommen. Ich habe insbesondere das Gefühl, dass es eine Möglichkeit geben muss, die Bedingung in der print-Anweisung zu verkürzen.
quelle
Python 3, 155 Bytes
Probieren Sie es online aus
quelle
Golflua, 132 Bytes
Ziemlich hässliche Antwort. Das Eingabebit ist etwas grob (und erfordert zwei Zeilen, erstens mit der Zeichenfolge und zweitens mit den Slice-Zeichen). Das Auffinden der Positionen der Flaggen ist einfach, aber zu lang, um mit anderen Antworten mithalten zu können. Die Ausgabe ist ziemlich einfach. Ein gleichwertiges Lua-Programm wäre
quelle
Perl, 65
Dies setzt voraus, dass sich in der zweiten Zeile der Eingabe kein Zeilenumbruchzeichen befindet.
quelle
null
Fall.