Döndürülmüş dizeleri algılama


20

Adresinden iki dizeyi okuyun stdin.
Çıktı Yesbir dize diğer bir döndürülmüş halidir ise.
Aksi takdirde çıktıNo

testcases

Giriş

CodeGolf GolfCode

Çıktı

Yes

Giriş

stackexchange changestackex

Çıktı

Yes

Giriş

stackexchange changestack

Çıktı

No

Giriş

Hello World

Çıktı

No

Yani ( abcdefAB , ABabcdef ) "EVET" midir?
Eelvex

Gerçekten bir dönüş mü olmalı yoksa bir kombinasyon da iyi mi? Örneğin. ne Stackexchange Stackchangeexdönecek?
jpjacobs

1
@Eelvex, evet. @jpjacobs, dönecekti No. Rotasyon, bu LED kaydırma işaretleri gibi bir
kaymadır

Dizeler her zaman boşluk bırakmaz ve boşlukla ayrılır mı?
Joey

Daha spesifik olarak, bu dizelerde hangi karakterlere izin verilir?
Joey

Yanıtlar:


7

APL (28)

İki satırdan girdi alır.

'No' 'Yes'[1+(⊂⍞)∊⌽∘A¨⍳⍴A←⍞]

Açıklama:

  • A←⍞: bir giriş satırını okuyun ve A'da saklayın
  • ⌽∘A¨⍳⍴A: [1. uzunluk A] 'daki her x için A'yı x ile döndürün. Bir liste verir, yaniestT stTe tTes Test
  • (⊂⍞)∊: başka bir girdi satırı okuyun ve bu listede olup olmadığına bakın.
  • 1+: buna bir tane ekleyin, dizeler döndürülmezse 1 ve öyleyse 2
  • 'No' 'Yes'[... ]: 'No' 'Yes'Dizelerin döndürülüp döndürülmemesine bağlı olarak listeden birinci veya ikinci öğeyi seçin .
  • Bu değer otomatik olarak verilir.

19

Yakut 49 41

a,b=$*;puts (a*2).sub(b,'')==a ?:yes: :no

Düzenleme: değiştirilen gets.split $ * ile değiştirildi


Bu dahice bir fikir.
Joey

Çok zeki. :)
st0le

$*sorusu belirtildiği zaman argv stdin.
Mathieu CAROFF


6

Python 70 Karakterleri

a,b=raw_input().split()
print'YNeos'[len(a)<>len(b)or a not in 2*b::2]

Dilim numarası için gnibbler'a teşekkürler.


1
GolfScript çözümü ile aynı sorun: Girerseniz nn nfn, alırsınız Yes, bu yanlıştır.
Tamara Wijsman

@TomWij Hatayı bulduğunuz için teşekkür ederiz. Düzeltildi. Şimdi çalışmalı.
fR0DDY

Sen yerini alabilecek <>tarafından -o da neden olacaktır olarak 0eşit uzunlukta olup olmadığını.
Tamara Wijsman

Peki ya eşit uzunlukta değilse? O zaman o kadar iyi çalışmıyor :-)
hallvabo

@hallvabo sonra dizeler birbirinin döndürülmüş versiyonu değildir.
fR0DDY

5

J, 47

y=:>2{ARGV
(>1{ARGV e.1|.^:(i.#y)y){'No',:'Yes'

Neden iki J cevap veriyor?
JB

@JB: çünkü bu buildin döndürmeyi kullanıyor. Her iki cevap da su ^ H ^ H o kadar iyi değil btw. Bir yoktur sürü golf için oda.
Eelvex

öyleyse neden diğeri sormaya cazipim? :-)
JB

@JB: çünkü bunun zar zor yasal olduğunu düşündüm (: p) [diğeri ise lisp'e güzel uzanıyor. ]
Eelvex

errr ... diğeri de komut satırından girdi okuyor gibi görünüyor
JB

5

Spesifikasyonlara göre (aynı dize uzunlukları):

Perl, 42 43 karakter

$.=pop;$_=(pop)x2;print+(qw'yes no')[!/$./]

Farklı boyutlu dizelere izin verilirse çözüm şöyle olur:

Perl, 47 karakter

$.=(pop)x8;$_=(pop)x9;print+(qw'yes no')[!/$./]

rbo


GolfScript çözümü ile aynı sorun: Girerseniz nn nfn, alırsınız Yes, bu yanlıştır.
Tamara Wijsman

1
Tamam görünüyor (ilk sürümde '!' kaçırdım) "nn nfn " => hayır "CodeGolf GolfCode" => evet
lastik çizme

5

Golf Yazıları, 31

' '/:)~,\,=)~.+\/,(&'Yes''No'if

Bu, önce uzunluğu kontrol eder, bu nedenle beklendiği gibi çalışmalıdır.


:)ve =)+1 çok mutlu kodlar için
TuxCrafting

4

J, 57

{&('No';'Yes')@-:/@:((/:~@(|."0 _~i.&$))&.>)&.(;:&stdin)_

Örnek kullanım:

$ echo -n CodeGolf GolfCode | jconsole rotate.ijs
Yes
$ echo -n stackexchange changestackex | jconsole rotate.ijs
Yes
$ echo -n stackexchange changestack | jconsole rotate.ijs
No
$ echo -n Hello World | jconsole rotate.ijs
No

3

Windows PowerShell, 76

$a,$b=-split$input
('No','Yes')[+!($a.length-$b.length)*"$b$b".contains($a)]

3

JavaScript, 51

function f(a,b)a&&(a+a).replace(b,"")==a?"Yes":"No"

JavaScript'in kurallı bir ana bilgisayarı yoktur, bu nedenle bu cevap iki argümanın bir işlevi olarak yazılmıştır. JS 1.7 özelliklerine (ifade kapanışları) izin vermezsek puan 60'a kadar çıkar.

SpiderMonkey kabuğunda bu (71 puan için) olurdu:

[a,b]=readline().split(" ");print(a&&(a+a).replace(b,"")==a?"Yes":"No")

5 yıl sonra ve şimdi =>işlev gösterimini kullanabilirsiniz ;)
J Atkin

3

Python, 66 63

a, b = raw_input (). bölme ()
print'YNeos' [a! = (2 * a) .Kapağı (b, "") :: 2]

69 karakterlik bir çözüm daha

a, b = raw_input (). bölme ()
baskı ['Hayır', 'Evet'] [b * 2'de ve a (a) == len (b)]

2
print'YNeos'[a!=(2*a).replace(b,"")::2]
gnibbler

@gnibbler güzel hile, öneri için teşekkürler. Kodu güncelledim
Kodlama adam

2

J, 84

y=:(>1{ARGV),:(>2{ARGV)
((0{y)e.(y&((]$0{[),(]-~[:}.[:$[)$1{[)/.i.}.$y)){'No',:'Yes'

2

JavaScript (120 karakter)

function f(a,b) {for (i=0,A=a.split("");A.join("")!=b&&i++<a.length;A.push(A.shift()));return A.join("")==b?'Yes':'No';}

Çıktı:

f('CodeGolf','GolfCode'); //Yes
f('stackexchange','changestackex'); //Yes
f('stackexchange','changestack'); //No
f('Hello','World'); //No
f('nn','nBn'); //No

2

Ruby, 58 (62) karakter

a,b=gets.split;$><<(a.size==b.size&&/#{a}/=~b*2?:Yes: :No)

Bu çözüm, girdinin yalnızca alfasayısal karakterler içerdiğini varsayar (aslında normal bir ifade içinde özel bir anlamı olmayan her şey yolundadır).

Bu kısıtlamaya sahip olmayan bir çözüm 4 karakter daha uzundur

a,b=gets.split;$><<(a.size==b.size&&(b*2).index(a)?:Yes: :No)

2

Python, 71

a,b=raw_input().split()
print'Yes'if a in b*2and len(a)==len(b)else'No'

GolfScript çözümü ile aynı sorun: Girerseniz nn nfn, alırsınız Yes, bu yanlıştır.
Timwi

Sorun çözüldü, düşük kaldı ... :-)
Tamara Wijsman

Belirtildiği gibi stdin'den okuma yapmaz.
Wooble

Şimdi öyle ... :-)
Tamara Wijsman

2

PHP, 61

<?echo preg_match('/^(.+)(.*) \\2\\1$/',fgets(STDIN))?Yes:No;

2

Ruby, 41

puts gets =~ /^(.+)(.*) \2\1$/ ?:Yes: :No

Hiçbir şey yazdırmaz, 'aaa aaa' girişi için ': Hayır' ile sonuçlanır (makinemde). Normal ifade yaklaşımı iyi bir fikir olabilir.
steenslag

Args yerine stdin'den gerçekten yazdırmak ve girmek için düzeltme: puts gets =~ /^(.+)(.*) \2\1$/ ?:Yes: :No- 41 karaktere yükseltir.
Nemo157

2

Haskell ( 98 96 karakter)

g x y@(t:r)(z:w)|x==y="Yes"|1>0=g x(r++[t])w
g _ _[]="No"
f(x:y:_)=g x y y
main=interact$f.words

2

Q ( 50 43 karakter)

{`No`Yes x in((!)(#)y)rotate\:y}." "vs(0:)0

2

Scala 78

val b=readLine split " "
print(b(0).size==b(1).size&&(b(0)+b(0)contains b(1)))

Boyut kontrolü hakkında bir utanç, onsuz sayı 54'e düşüyor

val a=readLine split " "
print(a(0)+a(0)contains a(1))

"""val b=readLine split " " print(b(0).sorted==b(1).sorted)""".lengthverim 56
kullanıcı bilinmiyor


2

GolfScript, 25 bayt

' '/~.2*@/''+='Yes''No'if

Nasıl çalışır

             # STACK: "CodeGolf GolfCode"
' '/         # Split input string by spaces.
             # STACK: [ "CodeGolf" "GolfCode" ]
~            # Dump the array.
             # STACK: "CodeGolf" "GolfCode"
.            # Duplicate the topmost string.
             # STACK: "CodeGolf" "GolfCode" "GolfCode"
2*           # Repeat the topmost string.
             # STACK: "CodeGolf" "GolfCode" "GolfCodeGolfCode"
@            # Rotate the three topmost strings.
             # STACK: "GolfCode" "GolfCodeGolfCode" "CodeGolf"
/            # Split the second topmost string around the topmost one.
             # STACK: "GolfCode" [ "Golf" "Code" ]
''+          # Flatten the array of strings.
             # STACK: "GolfCode" "GolfCode"
=            # Check for equality.
             # STACK: 1
'Yes''No'if  # Push 'Yes' for 1, 'No' for 0.
             # STACK: "Yes"


1

Lua 115 karakter

a,b=io.read():match"(%w+) (%w+)"c=b repeat c=c:sub(2,-1)..c:sub(1,1) s=s or a==c until b==c print(s and"Yes"or"No")

1

C programı - 146

char b[99],c[99],*p,*q;main(n){q=(p=b+(n=strlen(gets(c))))+n;sprintf(b,"%s%s"
,c,c);for(gets(c);p>b&&strcmp(p,c);--p,*--q=0);puts(p>b?"Yes":"No");}

1

PHP, 82 karakter

<?$s=split(" ",fgets(STDIN));echo str_replace($s[1],"",$s[0].$s[0])==$s[0]?Yes:No;

1

perl, 123 karakter

@s1=split(//,shift);
$s2=shift;
$i=0;
while($i<=@s1){
    if(join("",@s1) eq $s2){die "yes";}
    unshift @s1,pop @s1;
    $i++;
}
die "no";

1

Yakut, 30 37

gets
puts~/^(.+)(.*) \2\1$/?:Yes: :No

"Evet" ve "hayır" yerine "doğru" ve "yanlış" yazdıran bir sürüm:

gets
p !! ~/^(.+)(.*) \2\1$/

Bunların her ikisi de farklı uzunluktaki dizelerle çalışır (eskisinden farklı olarak)


İki dizginin uzunluğu aynı ise, ancak 'golfcode golf' gibi girdilerde başarısız olur.
steenslag

1

Python 2, 86 Karakterler

a,b=raw_input().split()
print"Yes"if any(a==b[n:]+b[:n]for n in range(len(a)))else"No"

1

Perl (sadece hızlı bir düzeltme)

Lastik çizmeler çözümüne bir düzeltme, yeni bir kullanıcı olduğum için henüz yorum yapamıyorum, bu yüzden sadece yeni bir cevap göndereceğim.

Bahsedilen yöntem, kullanıcı girişinden oluşturulmuş düzenli bir ifade kullandığından, aşağıdaki gibi küçük bir regex enjeksiyonu yapmak mümkündür:

> perl -le '$. = pop; $ _ = (pop) x2; baskı + (qw / evet hayır /)[!/$./]' her şey '. *'
Evet

Düzeltme \ Q (quotemeta olarak da bilinir) kullanmaktır:

> perl -le '$. = pop; $ _ = (pop) x2; baskı + (qw / evet hayır /) [! / \ Q $. /]' her şey '. *'
Hayır

Kodun kendisi 'say' kullanılarak daha da kısaltılabilir, ancak bu okuyucuya bir alıştırma olarak bırakılır :)


Ayrıca, bunun yerine print+(qw/yes no/)[muhtemelen print qw(yes no)[iki karakter daha kısa yazabilirsiniz .
Timwi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.