Otrzymasz ciąg i dwa znaki. Musisz wydrukować ciąg między tymi znakami z ciągu.
Wejście
Dane wejściowe będą najpierw zawierać ciąg znaków (nie pusty lub null
). W następnym wierszu będą dwa znaki oddzielone spacją.
Wyzwanie
Zwraca ciąg między dwoma znakami
Przykład
Hello! What's your name?
! ?
powinien dać wynik:
" What's your name"
Zasady
- Ciąg nie będzie dłuższy niż 100 znaków i będzie zawierać tylko znaki ASCII w zakresie
(spacja) do
~
(tylda) (kody znaków od 0x20 do 0x7E włącznie). Zobacz tabelę ASCII w celach informacyjnych. - Musisz wziąć dane wejściowe z
stdin
(lub najbliższej alternatywy). - Dane wyjściowe powinny być otoczone cudzysłowami (
"
). - Możesz napisać pełny program lub funkcję, która pobiera dane wejściowe i generuje końcowy ciąg znaków
- Dwa znaki będą zawierać tylko znaki ASCII w zakresie
(spacja) do
~
(tylda) (kody znaków od 0x20 do 0x7E włącznie). Zobacz tabelę ASCII w celach informacyjnych. - Nie ma gwarancji, że oba znaki będą w ciągu.
- Jeśli któryś ze znaków nie zostanie znaleziony w ciągu, wydrukuj
"null"
. - Jeśli którykolwiek ze znaków zostanie znaleziony więcej niż jeden raz (chyba że oba znaki są takie same) w ciągu, wydrukuj
"null"
. - Jeśli oba znaki są tym samym znakiem, wydrukuj ciąg
"null"
.
Przypadki testowe
1)
<HTML>code</HTML>
> < --> "null"
2)
What's what?
' ' --> "null"
3)
abcdefghijklmnopqrstuvwxyz
n k --> "lm"
4)
Testing...
e T --> ""
5)
Last test-case
- --> "test"
Punktacja
To jest kod golfowy, więc wygrywa najkrótsze przesłanie (w bajtach).
"
? Czy powinniśmy otoczyć go inną parą cytatów i nie przejmować się tym?one"two-three \n" -
wynik:"two"
(\n
jestOdpowiedzi:
CJam,
343332 bajtyWypróbuj online w interpretatorze CJam .
Pomysł
Usuń drugi znak z wiersza 2.
Utwórz ciąg składający się z pojedynczej kopii wszystkich znaków, które łączą obie linie.
Powtórz powstały ciąg dwa razy i odrzuć pierwsze dwa znaki.
W wyniku tego powstaje dwuznakowy ciąg (jeśli znaki z wiersza 2 są różne i oba występują w wierszu 1) lub pusty ciąg.
Zastąp znaki wynikowego ciągu w wierszu 1 wierszami wiersza.
Podziel linię 1 przy liniach.
Drugim elementem tablicy wynikowej będzie pożądany ciąg, jeśli tablica zawiera dokładnie trzy porcje.
Zastąp pierwszy element tablicy ciągiem pustym .
Pobierz drugi element tablicy, jeśli jego długość wynosi 3, a pierwszy w przeciwnym razie.
Dołącz i dołącz podwójny cytat.
Kod
źródło
CJam, 38 bajtów
Za długo...
Wyjaśnienie
źródło
Pyth,
373634 bajtówDzięki @isaacg za dwa bajty oszczędzania.
Wypróbuj online: Pyth Compiler / Executor
Wyjaśnienie:
źródło
*2]1
jest krótszy niż[1 1)
i- ... 1
jest jeszcze krótszy.-...1
nie działa, ponieważ muszę również sprawdzić, czy są dokładnie dwie liczby.[1 1)
:jT9
.Python 3, 149 bajtów
Wersja bez golfa:
To jest moja pierwsza odpowiedź tutaj, więc wskazówki i krytyka są bardzo mile widziane.
źródło
Ruby,
1089594I dla wersji bez golfa
źródło
->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>",?>,?<]
Na[...]
końcu jest to, co wywołuje funkcję.->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
, możesz zastąpićraise
niezdefiniowaną zmienną, taką jak_
luby
. To wywołuje błąd NameError. Myślę też, że można zaoszczędzić jeszcze kilka bajtów bez wyraźnego ratowania:->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 bajty
Nieskluczony kod:
Sprawdź to tutaj
źródło
Python 3, 172 bajty
źródło
JavaScript ( ES6 ),
125123 bajtówPomysł skradziony mocno z rozwiązania @ edc65.
źródło
[a,,b]=
mi się, użyję go następnym razem. Ponieważ wyrażenia regularne są kłopotliwe, oto rozwiązanie wolne od[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 bajtów
Rozwiązanie w większości używa po prostu wyrażenia regularnego do wyodrębnienia ciągu. Aby uwzględnić to, że litery mogą być dopasowane w obu kierunkach, początek i koniec dopasowanej części pozwala na dowolną literę. Sprawdzanie, czy litery, które faktycznie pasują do różnych, wyklucza, że ta sama litera jest dopasowywana dwukrotnie, a także dwie litery na wejściu są takie same.
To moja pierwsza próba użycia Pythona do uzyskania odpowiedzi tutaj. Informacje zwrotne dotyczące możliwych ulepszeń są więc bardzo mile widziane. W szczególności mam wrażenie, że musi istnieć sposób, aby warunek w wyciągu drukowanym był krótszy.
źródło
Python 3, 155 bajtów
Wypróbuj online
źródło
golflua, 132 bajty
Całkiem brzydka odpowiedź. Bit wejściowy jest nieco zgrubny (i wymaga dwóch linii, pierwsza z łańcuchem i druga ze znakami plastra). Znalezienie lokalizacji flag jest proste, ale po prostu zbyt długie, aby konkurować z innymi odpowiedziami. Wyjście jest dość łatwe. Równoważny byłby program Lua
źródło
Perl, 65
Wymaga to, że w drugim wierszu wejścia nie ma znaku nowej linii.
źródło
null
sprawy.