Büküm Kelimeler!


34

Büküm Kelimeler!

Bir dize ve pozitif bir tamsayı verilir. İpi ileri geri çevirmeniz gerekir.

Örnek Giriş / Çıkış

Giriş

Programming Puzzles & Code Golf
4

Çıktı

Prog
mmar
ing 
zzuP
les 
oC &
de G
 flo

Giriş

Giriş, STDIN veya işlev argümanından alınabilir. Giriş bir dize ve pozitif bir tamsayıdan oluşacaktır, n . Tamsayı, her bükülmüş çizginin uzunluğunu belirleyecektir.

Dize ileri geri kıvrılır. Bir giriş HELLO, WORLD!ve 5 şöyle görünür:

SELAM DÜNYA!

Çıktı

Çıktı bükülmüş metin olacaktır. İzleyen herhangi bir boşluk olmayabilir. Giriş dizesi uzunluğu bölünemezse satır uzunluğu, satır doluncaya kadar bir boşluk ekleyin:

Buna bir örnek:

Giriş

Hello, World!
5

Çıktı (En sondaki boşluğa dikkat edin)

Hello
roW ,
ld!  


İzleyen herhangi bir boşluk olmayabilir. Bir fiilden kaçtın mı?
Adâm

Satır listesini geri verebilir miyiz?
Adâm

Yanıtlar:


10

Pyth, 19 15

VPc+z*dQQ_W~!ZN

Dizeyi önceden doldurur, sonra yazdırırken birbirini tersine çevirir. Dolgu, kutunun boyutuna eşittir, ancak girişi kestikten sonraki son satır atılır.

Burada dene


6

CJam, 19 bayt

q~1$S*+/W<{(N@Wf%}h

Giriş örneği:

5 "Hello, World!"

açıklamalar

q~         e# Input n and the string.
1$S*+      e# Append n spaces to the string.
/W<        e# Split by each n characters, and remove the last chunk.
{          e# While the array of chunks isn't empty:
    (N     e# Extract the first chunk and push a newline.
    @Wf%   e# Reverse every chunk left in the array.
}h

5

Kardan adam 1.0.1 , 91 bayt

{vg10vg|sB*#.'aGal'NdE'aaAaL|al!*+#5nS" "'aR'!#aCwR|.aC2aG:0aa|sP"
"sP'NdE|1aA.aNsP"
"sP;aE

Veya tümü tek bir hatta (estetik veya daha özel olarak anti-estetik için) 2 bayt karşılığında

{vg10vg|sB*#.'aGal'NdE'aaAaL|al!*+#5nS" "'aR'!#aCwR|.aC2aG:0aa|sP10wRsP'NdE|1aA.aNsP10wRsP;aE

Snowman için bu çok kısa. (Muhtemelen alabileceği en kısa sürede olsa da; Bunu uzun süre golf oynamak için çalıştım.)

Bu, bir ihtar sahiptir: bir hata ile çıkış (ama yine de doğru çıktı üretir) son satır zaman zaman% 50 olacak değil tersine dönmüştür. (Bunun nedeni ag, dizi öğelerini iki kişilik gruplar halinde gruplandırmam ve böylece diğerlerini tersine çevirebilmem, ancak son öğenin beklenen öğelerin her ikisinin de olup olmadığını kontrol etmem, bu nedenle var olmayan bir öğeye erişmeye çalışacak. Tek sayıda satır var.)

Ungolfed / açıklama:

{vg10vg|sB*#      // get input, convert second string to number and store
.'aG              // split string into groups of n chars
al'NdE'aaAaL      // take out the last element of the array
|al!*+#5nS" "'aR  // subtract its length from 5, repeat that many spaces
'!#aCwR|.aC       // concat spaces to last el. and that back to the array
2aG               // split in groups of 2, so we can reverse every other string
// for each sub-group in the array of groups...
:
    0aa|sP10wRsP         // print the first element as is
    'NdE|1aA.aNsP10wRsP  // print the second element, reversed
;aE

5

Python 2, 60

s,n=input()
d=1
while s:print(s+n*' ')[:n][::d];s=s[n:];d=-d

Her nseferinde karakterleri alır, ve arasında değişen sbir yönle dbasar . Son satırdaki boşluklar için, kıyılmadan önce sonunda boşluk bırakılarak doldurulur , bu sadece karakterden daha az karakter bulunduğunda etkiler .1-1snn

Özyinelemeli bir çözüm, izin verilmeyen takip eden bir yeni hat bırakması dışında bir karakter (59) kazandıracaktır.

f=lambda s,n,d=1:s and(s+n*' ')[:n][::d]+"\n"+f(s[n:],n,-d) 


3

Sıkışmış , 42 41 40 38 Bayt

Bu çok uzun bir çiş, muhtemelen daha çok golf oynamaya çalışacak!

tg;_lu_@%u;-_0G<*' *+0GKE"];2%;Y_Y?p":

Giriş gibi olmalıdır "string"|n.

Açıklama:

tg                 # Take input, place each item on stack, save the int to variable stack                                        
;_l                # Swap the top two items, duplicate the string and obtain length
u_@%               # Rotate to the left, duplicate, rotate right and take mod
u;-                # Rotate left, swap the top two and subtract from each other
_0G<*              # duplicate this value, check if less than stored int and multiply
' *+               # Push space onto stack n times, append to starting string
0GKE               # Split this string into segments, and enumerate
"];2%;Y_Y?p":      # For each segment, determine if should be reversed, and print

2

Haskell, 108 bayt

(#)=splitAt
s!n=let(a,t)=n#s;(b,u)=n#t in a:reverse b:(u!n)
s%n=unlines$takeWhile(any(>' '))$(s++cycle" ")!n

Bu çok uzun, Tanrım. İşte eylemde:

*Main> putStrLn $ "Programming Puzzles & Code Golf" % 4
Prog
mmar
ing
zzuP
les
oC &
de G
 flo

letİfadeyi bağlama nasıl çalışır?
xnor

Bu let, noktalı virgülle ayrılmış, ikisi bir arada bir ifadedir - normalde yeni satırları ve girintileri kullanırsınız, ancak Haskell de yazmanıza izin verir let a=b; c=d in expr.
Lynn,

Bunun izin verildiğini bilmiyordum, programın dışına StrLn'i alarak!
Leif Willerts,

1
@LeifWillerts, son zamanlarda, buradaki zorluklar, işlev argümanları / sonuçları veya stdin / stdout üzerinden I / O gerçekleştirmenize izin verme eğilimindedir - burada benim çözümüm (%) :: String -> String -> Stringyerine bir işlevdir IO ().
Lynn

2

Python 2, 109 bayt

Doğru olması için son satır için boşluk içeren bir dolgu eklemek zorunda kaldım.

Burada dene

I,c=input()
I+=(c-len(I)%c)*" "
L=[]
i=0
while I:s=I[:c];L+=[[s,s[::-1]][i%2]];i+=1;I=I[c:]
print"\n".join(L)

2

Lua, 91 88 88 84 83 82 bayt

Eski versiyon:

a=arg for i=1,#a[1],a[2]do s=a[1]:sub(i,i+a[2]-1)print(d and s:reverse()or s)d=not d end

Yeni sürüm:

arg[1]:gsub((".?"):rep(arg[2]),function(s)print(d and s:reverse()or s)d=not d end)

2

O, 60 bayt

z""/rlJ(Q/{n:x;Q({+}dxe{`}{}?p}drQJQ%-{' }dJQ/e{r}{}?Q({o}dp

Benim ilk O programım ve bu konuda uzun bir program!

Canlı demo.


2

Perl, 87 bayt

sub f{$_=@_[0].$"x(@_[1]-1);$a.=(($i++&1?reverse$1:$1).$/)while/(.{@_[1]})/g;chop$a;$a}

Eski sürüm (izleyen bir yeni satır yazdırır):

sub f{$_=@_[0].$"x(@_[1]-1);print(($i++&1?reverse$1:$1).$/)while/(.{@_[1]})/g}

Dize, izleyen yeni satır olmadan bir işlev argümanı olarak iletilir. Böyle ara:

$_=<>;chomp;print f($_,5);

2

Kabakulak, 86 bayt

R I,S,! S P=$L(I),$P(I," ",P)=P F Q=1:S:P S F=$E(I,Q,Q+S-1),P='P W $S('P:F,1:$RE(F)),!

İlk ',!' İşaretini kaldırırsanız 2 bayt daha kısa olsa da R ifadesindeki karakterler (STDIN'den okunan); giriş ve çıkış arasında bir satır başı ekler. Eğer orada olmasaydı, çıktı teknik olarak doğruydu, ancak ilk satır girdi dizgisine eklenmişti. [[Kullandığım standart Mumps terminalinde yerel bir eko yok. ]]   Oturduğu gibi, işte test:

R I,S,! S P=$L(I),$P(I," ",P)=P F Q=1:S:P S F=$E(I,Q,Q+S-1),P='P W $S('P:F,1:$RE(F)),!
ABCDEFGHIJKLMNOPQRSTUVWXYZ1236
ABCDEF
LKJIHG
MNOPQR
XWVUTS
YZ123 

Ayrıca, giriş sonunda '123' ile '6' arasında bir satır başı / Enter tuşuna basılması gerektiğini unutmayın. [[Yerel yankı şey tekrar. ]]

Eğer ilgilenen varsa, kodda neler olduğunu açıklayabilirim; ama orada bir ton Mumps meraklısı olmadığını fark ediyorum ... :-)


2

PowerShell, 102 Bayt

param($s,$i)$l=$s.Length;$s+' '*($i%$l)-split"(.{$i})"|?{$_}|%{$r=-not$r;@($_,($_[$l..0]-join''))[$r]}

Aşağıdaki gibi çağrıldı (eğer dosyaya kaydedilmişse CodeGolf55051.ps1)

.\CodeGolf55051.ps1 -s '1234567890' -i 4

Önceki girişimler

(daha uzun veya geçersiz)

PowerShell, 110 Bayt

param($s,$i)$l=$s.Length;$s+' '*(($i-$l%$i)%$i)-split"(.{$i})"|?{$_}|%{$r=-not$r;@($_,($_[$l..0]-join''))[$r]}

PowerShell, 111 Bayt

param($s,$i)$s+' '*(($i-$s.Length%$i)%$i)-split"(.{$i})"|?{$_}|%{$r=-not$r;@($_,($_[$_.length..0]-join''))[$r]}

açıklama

param($s,$i)                         #Take input text (s) and column width (i)
$s                                   #take the user entered string
+ ' ' * (($i - $s.Length % $i) % $i) #add the least number of spaces required to make its length divisible by i
-split"(.{$i})"                      #break it into chunks of i characters in length
| ?{$_}                              #skip any blank lines created in the process
| %{                                 #for each line
    $r = -not $r;                    #    toggle a boolean value
    @(                               #    define an array
        $_                           #    index 0 = the string going forwards
        ,($_[$_.length..0] -join '') #    index 1 = the string reversed (by taking each character from the last to the first, then joining them)
    )[$r]                            #    if our boolean value is false take the forward string (index 0), if true take the backwards one (index 1)
}                                    #next

PowerShell, 180 Bayt

param($s,$i)$x="`${0}|{1}|`${2}";$w=$x;1..$i|%{$w=$w-f$_,$x,($i+$_)};$w=$w-replace'\||\${.*}';$r=$w-replace'\$\d+','(.)?';$s+' '*($i-$s.Length%$i)-replace$r,$w-split"(.{$i})"|?{$_}

PowerShell, 196 Bayt

param($s,$i)$x="{0}|{1}|{2}";$w=$x;1..$i|%{$w=$w-f$_,$x,($i+$_)};$w=$w-replace'(\d+)','$$$1'-replace'\||{.*}';$r=$w-replace'\$\d+','(.)?';$s+' '*($i-$s.Length%$i)-replace$r,$w-split"(.{$i})"|?{$_}

açıklama

param ($s, $i)                      #Take input text (s) and column width (i)

$x = "{0}|{1}|{2}"                  #Define string format which takes 3 entries and pipe delimits them

$w = $x                             #initialise our replacement regex with this format
1..$i | %{                          #for 1 to the specified column width
    $w = $w -f $_, $x, ($i + $_)    #update the regex 1|{...}|5, 1|2|{...}|6|5, etc
}                                   #resulting in w = 1|2|3|4|{...}|8|7|6|5
$w = $w -replace '(\d+)', '$$$1'    #now prefix the numbers with a dollar (so they're regex replacement variables)
        -replace '\||{.*}'          #and remove the delimiters and superfluous `{...}` left from our middle insertion routine

$r = $w -replace '\$\d+', '(.)?'    #then create the match pattern by replacing the variables with optional single character captures

$s                                  #now take the user entered string
    + ' ' * ($i - $s.Length % $i)   #add the least number of spaces required to make its length divisible by i
    -replace $r, $w                 #perform a replacement using the regex match and replace patterns created above
    -split "(.{$i})"                #then split the string into blocks of length i
    | ?{$_}                         #removing any blank lines created in the process

( {...}Yukarıdaki yorumlarda aslında {0}|{1}|{2}; {...}Okunabilirliği arttırmak için koydum .

Powershell, 120 Bayt (geçersiz)

param($s,$i)$s + ' ' * ($i-$s.Length%$i) -replace '(.{4})?(.)(.)(.)(.)',"`$1`n`$5`$4`$3`$2`n" -split "`n" | ?{$_ -ne ""}

1
Başka bir PowerShell askısını görmek harika! Kolay bir başlangıç, param($s,$i)$s+' '*($i-$s.Length%$i)-replace'(.{4})?(.)(.)(.)(.)',"`$1`n`$5`$4`$3`$2`n"-split"`n"|?{$_-ne""}sizi 108'e indirecek olan her alanın yakınında
tehlikeden

@TimmyD teşekkürler; sadece senaryomla ilgili birkaç temel hata gördüm (Gereksinimleri karşılamıyor / sadece 4 için çalışmak için kodlanmış ... şimdi düzeltmek)
JohnLBevan

Test ederken akışı doğru yönde başlatmak için ileri geri gitmek için, son [$r]dizini değiştirmem gerekiyordu [-not$r]... aksi halde ilk satır, verilen örneklerde olduğundan ziyade (yani, sağdan sola) okunuyordu. Aksi takdirde, gerçekten kaygan yürütme!
AdmBorkBork

1
Biz giriş numarası verilen konum beri Ayrıca, nolumludur ve biz dize uzunluğu (tanım gereği) negatif olmayan olduğunu garanti olsun, anlama geldiğini (($i-$l%$i)%i)eşdeğerdir ($i-$l%$i), dört karakter tasarrufu.
AdmBorkBork

1
Hata! Bir şekilde bunu yazdım, aslında demek istedim (-$l)%$i. Nereden geldiğini bilmiyorum. İlginç, ancak olması gerektiği gibi eşdeğer olmaması. Görünüşe göre, PowerShell (diğer dillerin yanı sıra) modulo işlevini nasıl uyguladığının bir tutamıdır; Anlaşılan, daha uzun sürüme sadık kalman gerekiyor. Referans Kanıtı ->((y-x%y)%y) ==> ((y%y)-(x%y%y))%y ==> ((0)-(x%y))%y ==> (-x%y)%y ==> (-x)%y
AdmBorkBork

2

Clojure, 83 bayt, 87 bayt , 79 bayt

(fn[n s](map #(apply str(% %2))(cycle[#(or %)reverse])(partition n n(repeat\ )s))))

Birkaç düzeltmeler aşağıda açıklamaların ardından, teşekkür ederim Ørjan .

Çevrimiçi deneyin!

Clojure genellikle ne yazık ki kod golf cevaplarından yoksun görünüyor. Bayt boyu kesinlikle golf dilleriyle rekabet edemez, ancak toplam yokluğun bir miktar sakıncalı olmadığını düşünüyorum.

Açıklama:

  • veri içi, iki argüman bir sayı ve bir dize
  • clojure yerleşik işlev bölümünüs , listelerin uzunluğa sahip olduğu bir karakter listesi dizisine dönüştüren dizede çalıştırarak başlayın n. Son yığın, sonsuz bir tembel boşluk sırası dizisi döndüren n"ped koleksiyonu" kullanılarak boşluklarla doldurulur (repeat " ").
  • Daha sonra haritayı üç argümanla çağırıyoruz :
    • isimsiz fonksiyonu ( #(..))
    • kimlik işlevi #(or %)gibi işlev gören sonsuz bir değişken tembel işlev dizisi ve döngü tarafından döndürüldüğü gibi ters (yani ) .[#(or %) reverse #(or %) reverse ...]
    • bölümleme tarafından döndürülen listelerin tembel dizisi yığınlandı.
  • Sonunda anonim işlev #(apply ...) :
    • ya identityda reversedönüşümlü olarak bir öbek üzerinde çağırır . Bu, (% %2)anonim fonksiyona ilk argüman olarak gönderilen fonksiyonu çağıran ifade [yani identityveya reverse] ikinci argümanı [yani yığın] kullanarak anonim fonksiyona çağrı argümanı olarak kullanan ifade ile yapılır.
    • (apply str ...)karakter listesini bir dizeye dönüştürme çağrıları
  • dış işlev tembel bir dizge dizisi döndürür

Burada kullandığımız bir püf noktası, argüman olarak maprastgele sayıda koleksiyon almak gibi birçok clojure işlevinin , yani (map f coll1 coll2 coll3 ...)f işlevinin, koleksiyonlar kadar çok argümanı kabul etmesi gerektiğidir. Bu durumda, iki farklı koleksiyon göndeririz, alternatif fonksiyon referansları topluluğu ve topaklı dize.


1
Bu güzel ama sonunda gerekli boşluk var gibi görünmüyor ld! .
Ørjan Johansen

Sen en haklısın Sorunu
çözmesi

Golf kuralları hakkında bir sorum var: bir içe aktarma veya benzer bir ifade gerektiren yerleşik bir işlev kullanıyorsanız (clojure gerektirir, java'da içe aktarma, vb.), Bu yerleşikin içe aktarılmasının bir parçası olması gerekir mi? golf çözümü bayt sayısı? Evet, sanırım biraz gri bir alan gibi geliyor.
Matias Bjarland

Evet, ithalat sayılır.
Ørjan Johansen

Oh ama kırdığınız başka bir kural daha var: Önceden tanımlanmış değişkenlerde girdi alamazsınız, çözümü bir bütün program veya işlev olarak yapmanız gerekir. (Her ikisini de kullanın fnveya defnsorun yok.) Kapak tarafında, işlevin yazdırmak yerine sadece sonucu döndürmesine izin verilir.
Ørjan Johansen


2

Python 3, 110 108 107 103 bayt

def a(s,n):l=len(s)//n+1;s+=' '*(len(s)-l);print('\n'.join([s[x*n:n*x+n][::(-1)**x]for x in range(l)]))

(diğer cevaplara bakarak) rjust:95 93 92 90 bayt

def a(s,n):print('\n'.join([s[x*n:n*x+n][::(-1)**x].rjust(n)for x in range(len(s)//n+1)]))

Çıktınızın son satırı yanlıştır. Burada çalıştır. Harika bir ilk gönderi ve bir keresinde bazı baytları kapatmanın bir yolunu önereceğim, ilk önce tüm boşlukları / sekmeleri cevabınızdan kaldırabileceğiniz.
mbomb007

haha, çok haklısın. bunu düzeltmek çok pahalıya mal olacak, ama ben varım. teşekkürler
bobrobbob


Ayrıca, uzun zaman önce cevabımı
yendin

ipuçlarını okumak. tekrar teşekkürler
bobrobbob

1

PHP, 135 bayt

İle gösterildiği gibi iki komut satırı argümanı alır $argv.

<? foreach($a=str_split($s=$argv[1],$n=$argv[2])as$k=>&$v)$v=$k%2?$v:strrev($v);echo implode("\n",$a).str_repeat(' ',$n-strlen($s)%$n);

1

CoffeeScript, 131 bayt

Bu çok uzun görünüyor.

f=(s,n,r=l=s.length,i=0,z='')->(t=s[i...i+=n].split '';t=t.reverse()if r=!r;z+=t.join('')+(i<l&&'\n'||' '.repeat n-l%n))while i<l;z

1

Julia, 104 bayt

f(s,n)=(L=length(s);L+=L÷n;j=0;for i=1:n:L-n+1 x=rpad(s,L)[i:i+n-1];println(j%2<1?x:reverse(x));j+=1end)

Ungolfed:

function f(s::String, n::Int)
    L = length(s) + length(s) ÷ n
    j = 0
    for i = 1:n:L-n+1
        x = rpad(s, L)[i:i+n-1]
        println(j % 2 == 0 ? x : reverse(x))
        j += 1
    end
end


1

q, 46

{-1@neg[y]$@[a;(&)(til(#)a:y cut x)mod 2;|:];}

.

q){-1@neg[y]$@[a;(&)(til(#)a:y cut x)mod 2;|:];}["Programming Puzzles & Code Golf";4]
Prog
mmar
ing
zzuP
les
oC &
de G
 flo

Bu, son satır daha kısa ve bükülmediğinde yanlıştır, cevabımdaki hatayı düzeltmek istedim ancak sizinkini güncelleyebilseniz daha iyi olacağını düşünüyorum: {-1@[l;(&)(til(#)l:y cut x)mod 2;'[neg[y]$;|:]];}(49 bayt). İlham için teşekkürler! :)
Ağustos'ta

1

Q, 64 56 bayt

{c::neg y;-1(til(#)l){$[x mod 2;c$(|:)y;y]}'l:y cut x;}
  • {}çağırılması gereken bir işlevdir {}[x;y].
    • x dize olacak.
    • y sonuçta ortaya çıkan çizgilerin uzunluğu olacaktır.

Ölçek:

{c::neg y;-1(til(#)l){$[x mod 2;c$(|:)y;y]}'l:y cut x;}["Programming Puzzles & Code Golf";4]
Prog
mmar
ing
zzuP
les
oC &
de G
 flo

düzenleme : kullanılan diğer kısa cevap @ tmartin


1

Python 2, 82 75 bayt

s,n=input()
k=0
while k<=len(s):print s[k:k+n].ljust(n)[::1-2*(k/n%2)];k+=n

@ Willem hakkında yorum yapamadım ama kodunu daha küçük yaptım.

Burada dene Burada dene


Merhaba AlexN, iyi olan. 'Burada deneyin' örneğindeki son satırınızın doğru olmadığını düşünüyorum. Haklı olmalı. Ayrıca 86 karakter sayıyorum? Güncelleme girişime bakın .
Willem,

Merhaba willem, haklısın, kodu düzelttim ve senin bir hata olduğunu öğrendim: ideone.com/GOmMrE Sağ tarafta olmalı.
Alexander Nigl

1

Perl, 72 bayt

perl -p0e's/\n(.*)/$"x($1-$-[0]%$1)/e;s/.{$1}/($i++%2?reverse$&:$&)."\n"/ge;chop'

70 bayt, artı 2 bayt -p0.

Demo:

$ echo -en 'Hello, World!\n5' | perl -p0e's/\n(.*)/$"x($1-$-[0]%$1)/e;s/.{$1}/($i++%2?reverse$&:$&)."\n"/ge;chop'
Hello
roW ,
ld!  $

STDIN'den okunan girişin yeni bir satırla bitemeyeceğini unutmayın (2 ekstra bayta mal olur).

Açıklama:

perl -p0e'  # Read from STDIN, splitting on null bytes,
            # and print $_ automatically at the end

    s/
        \n(.*)  # Replace everything after first newline,
                # capturing wrap length in $1...
     /
        $"x($1-$-[0]%$1)  # ...with spaces until the total length of $_ is
                          # a multiple of $1 (i.e. right-pad with spaces)
     /e;

    s/
        .{$1}  # Replace series of $1 contiguous chars...
     /
        ($i++%2?reverse$&:$&)."\n"  # ...alternately with themselves or in
                                    # reverse, with a trailing newline
     /ge;

    chop'  # Remove final newline

1

JavaScript ES6, 123 bayt

var t=(s,n)=>{for(var d=1,i=0,o='',l=s.length;i<l;i++){o+=d?s[i]:s[i-i%n+n-1-i%n]||' ';if(i%n==n-1){d=!d;o+='\n'}}return o}

İle Çağrı t(input_string, twist_length)çıkış dizesini döndüren.


1
Üzgünüz, çok hızlı bir şekilde gönderildi. Sabitlendi.
DankMemes



0

Kahve metni, 151 bayt

f=(s,n)->r="";d=n;i=0;_="\n";u=" ";l=s.length;(d--and(r+=s[i]or u;++i)or(r+=_;r+=s[c]or u for c in[i+n-1..i];i+=d=n;r+=_ if i<l))while i<(l/n+1>>0)*n;r

Çok fazla = (


0

Bash, 83 74

for((i=0;i<${#1};i+=$2));do b=cat;((i/$2%2))&&b=rev;echo ${1:i:$2}|$b;done

Bu , ikinci argümanın uzunluğu olan birinci argümanın alt dizileri arasında catve arasında değişir rev.

Kullanılan özel değişkenler

  • ${#1}(dizginin uzunluğu $1)
  • ((i/$2%2))(aritmetik bir ekspresyon arttırma birimini arttırmaktan bölünmesi $iile $2ve daha sonra olup kullanılmadığı dikte olan, hatta karşı tek belirlemek üzere modulo alarakrev )
  • ${1:i:$2}( uzunluğu ile $1başlayan yerden başlayan altböcek ).$i$2

Hm, daha bashyeni gördüğüm diğer cevaplardan bağımsız olarak bunu yaptım . Etkili bir şekilde aynı mantığa sahibiz. ... aslında, viktorahlström'ün cevabı sadece 9 karakter daha tıraş etmeme izin verdi.
Adam Katz

0

JavaScript ES6, 113 bayt

Sadece kendi sorumla kendi çatlağım. Boşluk katacak, böylelikle bölünebilir n, bu şekilde basitçe bölünmüş ve ters çevrilmiş olacaktır .

(s,n)=>(s+' '.repeat(n-s.length%n)).match(eval(`/.{1,${n}}/g`)).map((l,i)=>i%2?[...l].reverse().join``:l).join`
`
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.