Dize döndürme - çıktı dizisi art arda ilk karakteri sonuna kadar hareket ettirdi


22

Buradaki zorluk, bir karakter dizisi almak ve ilk karakteri karakter dizisine karakter dizisi başına bir kez tekrar tekrar sonuna kadar hareket ettirerek, orijinal karakter dizisi ile biten tüm döndürmelerinin çıktısını almaktır:

john -> ohnj, hnjo, njoh, john

Ayrıca karakterleri baştan aşağı hareket ettirerek diğer yönde de döndürebilirsiniz:

john -> njoh, hnjo, ohnj, john

Asıl kelimeye bundan önce ulaşılsa bile, harf başına bir dönüş vermelisiniz:

heehee -> eeheeh, eheehe, heehee, eeheeh, eheehe, heehee

Sonuç yukarıda gösterildiği gibi çalıştığı sürece karakter dizilerine izin verilir.

En kısa cevap kazanır!


5
Gibi bir dize heeheeaslına, uzunluğundan daha az döngü halinde geri dönerse, orada durur muyuz? Bunun birçok cevap için büyük bir fark yaratacağını umuyorum.
xnor

Diğer yönde dönebilir miyiz?
xnor

2
Açıklamanız da dahil olmak üzere soruyu düzenledim, istediğiniz gibi değilse değiştirmekten çekinmeyin.
xnor

1
@xnor, asıl gönderimden çok daha net görünüyor, çok teşekkürler!
I_P_Edwards

1
Karakter dizileri giriş / çıkış için izin verilir mi? (Bu ayrım bazı dillerde önemli olabilir.)
LegionMammal978

Yanıtlar:


7

Jöle , 2 bayt

ṙJ

Tekli bir Bağlantı, karakter listesini içeren bir karakter listesini kabul eder

Çevrimiçi deneyin! (altbilgi bağlantıyı çağırarak ve yeni satır karakterleriyle birleştirerek güzel baskılar alır)






4

Japt, 5 3 bayt

Girdiyi karakter dizisi olarak alır, bir dizi karakter dizisi çıkarır

£=é

Burada dene

£=é     :Implicit input of character array U
£       :Map
  é     :  Rotate U one element to the right
 =      :  Reassign to U for next iteration


3

brainfuck , 59 bayt

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

Çevrimiçi deneyin!

Boş baytlarla ayrılmış her dizgeyi çıktılar.

Açıklama:

,[>,]    # Get input
<[       # Start loop over input
  >>[>]       # Go to end of the string
  +           # Set it to one to mark it
  [<]<[<]>    # Move to the beginning of input
  -[[>]>[>]<+[<]<[<]>-]   # Transfer the first character to the end
  >[.>]>[.>]  # Print the rotated string
  <[<].       # Print a nul byte
<]       # Repeat loop while input

3

MATL , 6 5 bayt

tf&+)

@Luis sayesinde 1 bayt kurtarıldı!

MATL Online'da deneyin !

Açıklama :

    # Implicitly grab input string
t   # Duplicate the input
f   # Create an array [1, ..., N] where N is the number of characters in the input
&+  # Add the transpose of this array to itself to create a 2D array of indices
    #
    #   +   1  2  3  4
    #       ----------
    #   1 | 2  3  4  5
    #   2 | 3  4  5  6
    #   3 | 4  5  6  7
    #   4 | 5  6  7  8
    #
)   # Use this 2D array to index into the original string using periodic indexing
    # Implicitly display the resulting character array

@LuisMendo Zeki! Teşekkürler!
10'da

3

Wolfram Dili (Mathematica) , 35 26 bayt

Partition[#,Tr[1^#],1,-1]&

Çevrimiçi deneyin!

Girdi olarak bir karakter listesi alır.

Partition (ama değişken değil StringPartition aşağıda kullanılan ) girişini döngüsel olarak ele almak (ve tam olarak nasıl yapılacağını belirlemek için) için isteğe bağlı dördüncü bir argümana sahiptir, bu, 15 karakterli herhangi bir yapıya sahip olmamasına ek olarak bu çözümü dizgiden daha basit hale getirir -İşlevlerde.

Wolfram Dili (Mathematica) , 44 bayt

Rest@StringPartition[#<>#,StringLength@#,1]&

Çevrimiçi deneyin!

Aynı, ancak girdi olarak bir dize alır.

Dönüşler "john"içine "johnjohn", o zaman tüm uzunluk- alır StringLength["john"]üreten ofset 1'den bu dizenin alt dizelerini {"john","ohnj","hnjo","njoh","john"}sonra bu ilk damlaları, Rest.


Karakter dizilerine izin verildiğinden, Rest@Partition[#~Join~#,Length@#,1]&36 bayt olur.
LegionMammal978

@ LegionMammal978 Teşekkürler! Henüz bir şey düşünmedim ama muhtemelen karakter dizileri ile daha kısa bir yaklaşım var.
Misha Lavrov

2

Ataşesi , 13 bayt

Rotate#{1:#_}

Çevrimiçi deneyin!

açıklama

Rotate#{1:#_}
      #          fork(f, g) = ${ f[x, g[x]] }; this forks:
Rotate               rotate's the input by
       {1:#_}        each number from 1 to the length of the input

Alternatifler

15 bayt :{_&Rotate!1:#_}

16 bayt :{Rotate[_,1:#_]}

16 bayt :Rotate@Rotations

16 bayt :Rotate#(1&`:@`#)

17 bayt :Rotate#{1+Iota@_}

18 bayt :Rotate#(1&`+@Iota)

19 bayt :Rotate#(Succ=>Iota)


2

J , 7 bayt

#\|."{]

Çevrimiçi deneyin!

Açıklama:

  |."{    - rotate ( "{ is short for "0 1 - rank 0 1 ) 
      ]   - the input
#\        - lenght of the successive prefixes of the input 

2
"Böyle kullanmak çok zekice ve dilin sözlük bilgisini gerektiriyor. Ayrıca rütbeli bir fiil var mı 1 0?
24’de

@ Adám sanırım "#:. Bunu burada Frownyfrog
Galen



2

C (32 bit), 58 5150 bayt

Ceilingcat sayesinde hoş bir tur sayısı için -1 byte

i;f(s){for(i=0;i++<printf("%s%.*s\n",s+i,i,s)-2;);}

Çevrimiçi deneyin!

Degolf

i;           // "Global" i.
f(s){   // s is pointer to string, which conveniently fits in a 32 bit integer.
    for(i=0; // Initialize i.
        // Increment i and take its complement, and add it to the
        // return value of printf(); which just happens to be strlen(s)+1.
        // ~i + strlen(s) + 1 == strlen(s) + 1 - i - 1, so the last printed
        // string is the original string.
        ~++i + printf("%s%.*s\n",s+i,i,s);
        // The printf prints two strings: first until the terminating \0,
        // the second until a \0 or until i chars have been printed. It also
        // prints a linefeed.
}

Öner ~++i+printf("%s%.*s\n",s+i,i,s)yerinei++<printf("%s%.*s\n",s+i,i,s)-2
ceilingcat

@ceilingcat Her zaman olduğu gibi teşekkürler!

@ceilingcat Gerçekten aranmalısın flooringcat.

1

Kömür , 10 bayt

⮌Eθ⭆θ§θ⁻μκ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

  θ         Input string
 E         Map over characters
    θ       Input string
   ⭆        Map over characters and join
      θ     Input string
     §      Circularly indexed by
       ⁻    Difference between
        μ   Inner index
         κ  Outer index
⮌           Reversed
            Implicitly print each string on its own line

Ters yönde döndürmek için, yerine Minusile Plus.




1

Perl 6 , 32 bayt

{m:ex/^(.*)(.+)$/».&{[R~] @$_}}

Çevrimiçi deneyin!

m:ex/^(.*)(.+)$/ exmgirilen dizgeyi, girilen dizgenin çıktıda iki kez görünmesini engelleyen en az bir karaktere sahip olması haricinde, giriş dizesini mümkün olan her yere bölerek, verilen regex'e dokunma . Sonra ortaya çıkan Matchnesnelerin yakalama gruplarının her biri ( []) R~, ters dizge birleştirme işleci olan tek bir dizgiye indirgenir .




1

Powershell, 44 bayt

($s=$args|% t*y)|%{$h,$t=$s;-join($s=$t+$h)}

Test komut dosyası:

$f = {

($s=$args|% t*y)|%{$h,$t=$s;-join($s=$t+$h)}

}

@(
    ,('john', 'ohnj', 'hnjo', 'njoh', 'john')
    ,('heehee', 'eeheeh', 'eheehe', 'heehee', 'eeheeh', 'eheehe', 'heehee')
) | % {
    $s,$expected = $_
    $result = &$f $s
    "$result"-eq"$expected"
    $result
}

çıktı:

True
ohnj
hnjo
njoh
john
True
eeheeh
eheehe
heehee
eeheeh
eheehe
heehee

1

Tcl , 80 91 bayt

proc P s {time {puts [set s [string ra $s 1 e][string in $s 0]]} [string le $s]}

Çevrimiçi deneyin!


Her seferinde metni yeniden atama bazı baytları kurtarırproc R t {time {puts [set t [string ra $t 1 end][string in $t 0]]} [string len $t]}
david

@David
sergiol


1

Lua , 61 bayt

function(s)for i=1,#s do print(s:sub(i+1)..s:sub(1,i))end end

Çevrimiçi deneyin!

Dizeyi bir dizeden uzunluğa (tek tabanlı dizinleme) kadar art arda indeksler halinde bölün, parçaları ters sırada birleştirin, yazdırın.


1

Ruby , 39 bayt

->s{a=s.chars.to_a;a.map{a.rotate!*''}}

Çevrimiçi deneyin!


1
Siteye Hoşgeldiniz! TIO bağlantınız cevabınıza karşılık geliyor gibi görünmüyor. Ayrıca cevabınız girdi / çıktı gereksinimlerimize uymuyor gibi görünüyor. Bir işlevi veya STDIN / STDOUT öğesini kullanabilirsiniz, ancak değişken atamasına izin vermeyiz.
Buğday Sihirbazı,

Sağol Garf. İkisini de nasıl mahvettiğime emin değilim. Şimdi her şey yolunda olmalı.
acornellier

1

JavaScript, 48 43 36 bayt

-5 bayt @Bubbler'ın izniyle * -7 bayt @Shaggy'nin izniyle

Giriş bir karakter dizisidir ve çıktı bir karakter dizileri dizisidir.

s=>s.map(_=>([a,...b]=s,s=[...b,a]))

Çevrimiçi deneyin!




@Shaggy Geçerli bir bayt sayısı ve girişi mi? [..."john"]İşlev çağrısından önce giriş dizesinin bir diziye manipülasyonu sayılmaz mı ?
guest271314

@ guest271314, giriş bir karakterdir ve çıkış, meydan okuma belirtimi ve G / Ç varsayılan ayarlarımızın izin verdiği bir dizi karakter dizisidir.
Shaggy,

@Shaggy Güncelleme. Lütfen yukarıdaki yorumunuzu bırakabilir misiniz? Yoksa karışıklığı önlemek için yorumunuz cevabınıza eklenmeli midir? Ya da gerekli değil mi?
guest271314


1

MBASIC , 69 66 bayt

Ørjan Johansen sayesinde -3 bayt

1 INPUT S$:L=LEN(S$):FOR I=1 TO L:S$=MID$(S$+S$,2,L):PRINT S$:NEXT

Bunu kısaltabileceğinden şüpheleniyorum 1 INPUT S$:L=LEN(S$):FOR I=1 TO L:S$=MID$(S$+S$,2,L):PRINT S$:NEXT.
Ørjan Johansen

@ Ørjan Johansen Çok hoş, teşekkür ederim.
wooshinyobject 14:17

1

brainfuck , 38 bayt

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

Çevrimiçi deneyin!

JoKing'in fikrine dayanarak, boş karakterleri boşluk sembolleri olarak kullanmak. Bu kod, yazdırılacak geçerli harfleri işaretler ve sol uca ulaşana kadar döngüler.

,[>>,]<<    input string with empty cells in between
<+>         set first marker
[           main loop
  [.>>]     print remaining characters
  <<[<<]    return to start
  >-[+>.>-] print until marker (remove marker)
  .         print null
  <<+       set new marker
  >         restart loop with next character to the left
]           stop if there's no character to the left
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.