Orta bulmayı canlandır


10

Boş olmayan bir dize verildiğinde, bir veya iki karakter elde edene kadar ilk ve son karakterleri kaldırmaya devam edin.

Örneğin, dize buysa, abcdeprogramınız yazdırmalıdır:

abcde
 bcd
  c

Ancak, öyleyse abcdef, iki karakterle durmalıdır:

abcdef
 bcde
  cd

Her satırın sonundaki satır sonları ve sondaki boşluklar isteğe bağlıdır. İstediğiniz kadar olabilir ya da hiç olabilir.

Test senaryoları

ABCDEFGHIJKLMNOPQRSTUVWXYZ -> ABCDEFGHIJKLMNOPQRSTUVWXYZ
                               BCDEFGHIJKLMNOPQRSTUVWXY 
                                CDEFGHIJKLMNOPQRSTUVWX  
                                 DEFGHIJKLMNOPQRSTUVW   
                                  EFGHIJKLMNOPQRSTUV    
                                   FGHIJKLMNOPQRSTU     
                                    GHIJKLMNOPQRST      
                                     HIJKLMNOPQRS       
                                      IJKLMNOPQR        
                                       JKLMNOPQ         
                                        KLMNOP          
                                         LMNO           
                                          MN            

ABCDEFGHIJKLMNOPQRSTUVWXYZ! -> ABCDEFGHIJKLMNOPQRSTUVWXYZ!
                                BCDEFGHIJKLMNOPQRSTUVWXYZ 
                                 CDEFGHIJKLMNOPQRSTUVWXY  
                                  DEFGHIJKLMNOPQRSTUVWX   
                                   EFGHIJKLMNOPQRSTUVW    
                                    FGHIJKLMNOPQRSTUV     
                                     GHIJKLMNOPQRSTU      
                                      HIJKLMNOPQRST       
                                       IJKLMNOPQRS        
                                        JKLMNOPQR         
                                         KLMNOPQ          
                                          LMNOP           
                                           MNO            
                                            N             

A -> A

AB -> AB

Bu olduğunu unutmayın , bu yüzden en az bayt ile kod kazanır.


Çıktı, dizeleri yazdırmak yerine dizelerin bir listesi olabilir mi?
Greg Martin

@GregMartin Evet.
Oliver Ni

1
Her satırda önde gelen boşluklara ihtiyacımız var mı?
ETHproductions

@ETHproductions Evet.
Oliver Ni

9
@Oliver Bu önemli bilgi, metne eklemelisiniz
Luis Mendo

Yanıtlar:


11

V , 10 bayt

ò^llYpr $x

Çevrimiçi deneyin!

Açıklama:

ò^ll         " While there are at least two non-whitespace characters on the current line
    Y        " Yank this line
     p       " Paste it below
      r      " Replace the first character with a space
        $    " Move to the end of the line
         x   " Delete a character

6

Python, 45 bayt

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

Dizeyi, bir satırsonu artı bir sonraki satırın önde gelen boşluklarını ve ayrıca önekte fazladan boşluk bulunan kısaltılmış dizenin yinelemeli sonucunu özyineli olarak verir.

Öncü bir yeni satıra izin verildiyse, bir bayt kaydedebiliriz:

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

Bir programla karşılaştırın (Python 2'de 49 bayt):

s=input();p=''
while s:print p+s;s=s[1:-1];p+=' '

6

ES6 (Javascript), 47, 48, 43 bayt

DÜZENLEME: Üçlü işleç, &&, ön ekli doldurma dizgisi ile satırsonu işaretiyle değiştirildi. Mükemmel bir tavsiye için @Neil teşekkürler!

EDIT: özyinelemeli çağırma için işlev adı dahil, değişmez bir satırsonu kullanarak bir bayt çıkarıldı

golfed

R=(s,p=`
 `)=>s&&s+p+R(s.slice(1,-1),p+' ')

Ölçek

R=(s,p=`
 `)=>s&&s+p+R(s.slice(1,-1),p+' ')

console.log(R("ABCDEFGHIJKLMNOPQRSTUVWXYZ"))

ABCDEFGHIJKLMNOPQRSTUVWXYZ
 BCDEFGHIJKLMNOPQRSTUVWXY
  CDEFGHIJKLMNOPQRSTUVWX
   DEFGHIJKLMNOPQRSTUVW
    EFGHIJKLMNOPQRSTUV
     FGHIJKLMNOPQRSTU
      GHIJKLMNOPQRST
       HIJKLMNOPQRS
        IJKLMNOPQR
         JKLMNOPQ
          KLMNOP
           LMNO
            MN

console.log(R("ABCDEFGHIJKLMNOPQRSTUVWXYZ!"))

ABCDEFGHIJKLMNOPQRSTUVWXYZ!
 BCDEFGHIJKLMNOPQRSTUVWXYZ
  CDEFGHIJKLMNOPQRSTUVWXY
   DEFGHIJKLMNOPQRSTUVWX
    EFGHIJKLMNOPQRSTUVW
     FGHIJKLMNOPQRSTUV
      GHIJKLMNOPQRSTU
       HIJKLMNOPQRST
        IJKLMNOPQRS
         JKLMNOPQR
          KLMNOPQ
           LMNOP
            MNO
             N

1
@Xnor'ın pbir satırsonuna ve bir alana eşit olarak başladığını fark ettim ; belki bu da sana yardımcı olabilir.
Neil

1
Oh, s&&bunun yerine kullanabilirsiniz s?...:''.
Neil

4

Python 2, 50 bayt

def f(i,j=0):
 print' '*j+i
 if i:f(i[1:-1],j+1)

Dizeyi yok olana kadar kısaltmaya devam eden basit özyinelemeli işlev.

F ('dize') olarak çağır

Çıktı

string
 trin
  ri

4

Perl, 31 bayt

30 bayt kod + -pbayrak.

s/( *)\S(.+).$/$& 
 $1$2/&&redo

Çalıştırmak için:

perl -pE 's/( *)\S(.+).$/$&
 $1$2/&&redo' <<< "abcdef"

Açıklamalar : \Sve bir karakteri en baştan her kaldırdığımızda eklenen .$ilk ve son karakter, (.+)orta ve ( *)sondaki boşluklara karşılık gelir. Böylece normal ifade bir karakteri baştan, diğerini sondan kaldırır ve her seferinde bir satır aralığı ekler.


4

Brainfuck , 67 bayt

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

Bu, tüm beyin sapı lezzetleri üzerinde çalışmalıdır.

Çevrimiçi deneyin!

Kod çözülmemiş kod:

# Print and read input_string into memory
>>,[.>,]<
while input_string is not empty [
    # Print newline
    >+++++ +++++.<
    # Remove last character
    [-]
    # GOTO start of input_string
    <[<]>
    # Remove first character
    [-]
    # Add space to space_buffer
    +++++ +++[-<++++>]
    # GOTO start of space_buffer
    <[<]>
    # Print space_buffer
    [.>]
    # Print input_string
    >[.>]
<]

Burada kesmek için hala bazı baytlar olmalı; Yakın zamanda brainfuck kullanmaya başladım, bu yüzden işaretçi hareketim muhtemelen çok verimsiz.


2

MATL , 9 bayt

tg!*YRPRc

Bu, sondaki boşluklar ve yeni satırlar üretir.

Çevrimiçi deneyin!

açıklama

t      % Input string implicitly. Duplicate
g!     % Convert to logical and transpose: gives a column vector of ones
*      % Multiply with broadcast. This gives a square matrix with the string's
       % ASCII codes on each row
YR     % Lower triangular part: make elements above the diagonal 0
P      % Flip vertically
R      % Upper triangular part: make elements below the diagonal 0
c      % Convert to char. Implicitly display, with char 0 shown as space

2

Toplu, 92 bayt

@set/ps=
@set t=
:g
@echo %t%%s%
@set t= %t%
@set s=%s:~1,-1%
@if not "%s%"=="" goto g

STDIN üzerine girdi alır.


2

C, 73 bayt

f(char*s){char*b=s,*e=s+strlen(s)-1;while(e-b>-1)puts(s),*b++=32,*e--=0;}

Ungolfed:

f(char*s) {
  char *b=s,
       *e=s+strlen(s)-1;
  while (e-b>-1)
    puts(s),
    *b++=32,
    *e--=0;
}

Kullanımı:

main(){
  char a[] = "abcde";
  f(a);
}

2

05AB1E , 8 bayt

Kod:

ÐvNú,¦¨D

Açıklama:

Ð          # Triplicate the input
 v         # Length times do...
  Nú,      # Prepend N spaces and print with a newline
     ¦¨    # Remove the first and the last character
       D   # Duplicate that string

CP-1252 kodlamasını kullanır . Çevrimiçi deneyin!



2

Haskell, 47 43 bayt

f s@(a:b:c)=s:map(' ':)(f.init$b:c)
f s=[s]

Ideone üzerinde deneyin . Çıktı, meydan okuma yorumlarında izin verilen dizelerin bir listesidir. Yazdırmak için (putStr.unlines.f)sadece yerine çalıştırın f.

Düzenleme: Sondaki boşluğa izin verildiğini fark ettikten sonra 4 bayt kaydedildi.

Prelude> (putStr.unlines.f)"codegolf"
codegolf
 odegol
  dego
   eg
               --(trailing whitespace)

2

Perl 6 , 42 bayt

for get,{S/\w(.*)./ $0/}.../\s..?$/ {.put}

Expanded:

for

  # generate the sequence
  get,       # get a line from the input

  {          # bare block lambda with implicit parameter 「$_」
             # used to produce the rest of the sequence

    S/       # replace
      \w     # a word character ( to be removed )
      (      # set 「$0」
        .*   # any number of any characters
      )
      .      # any character ( to be removed )
    / $0/    # append a space

  }

  ...        # repeat that until

  /          # match
    \s       # whitespace
    .        # any character
    .?       # optional any character
    $        # end of string
  /

{
  .put       # print $_ with trailing newline
}

1

GNU sed 24 Bayt

İçin +2 içerir -rn

:
p
s/[^ ](.+)./ \1/
t

Yazdırır, boşluk olmayan ilk karakteri bir boşlukla değiştirir ve hiçbir şey değişmeyene kadar son karakteri siler.



0

C ++ 14, 117 bayt

auto f(auto s){decltype(s)r;auto b=s.begin();auto e=s.rbegin();while(e.base()-b>0)r+=s+"\n",*b++=32,*e++=0;return r;}

Girdinin sa olduğunu std::stringve animasyonlu metni döndürdüğünü varsayar .

Ungolfed:

auto f(auto s){
  decltype(s)r;
  auto b=s.begin();
  auto e=s.rbegin();
  while(e.base()-b>0){
    r+=s+"\n";
    *b++=32;
    *e++=0;
  }
  return r;
}

Kullanımı:

main(){
  std::string a{"abcdef"};
  std::cout << f(a);
  std::string b{"abcde"};
  std::cout << f(b);
}

0

Vim - 14 tuş vuruşu

qqYp^r $x@qq@q


Açıklama:

qq  -- record a macro named 'q'
Y   -- Copy current line
p   -- Paste it
^r  -- Replace the first non-space character on the new line with a space
$x  -- Delete the last character on the line
@q  -- Recursively call the 'q' macro
q   -- Stop recording the 'q' macro
@q  -- Run the 'q' macro

Karakterler bittikten sonra Vim makroyu otomatik olarak öldürür


0

Aksi! - 16 blok

Aksi!

Çıktı kendinden merkezlemelidir. 'Bekleme' insanlar içindir.


0

PHP, 91 bayt

<?for(;$i<.5*$l=strlen($s=$_GET[s]);$i++)echo str_pad(substr($s,$i,$l-$i*2),$l," ",2)."\n";

Kullanımı: bir dosyaya kaydedin ve tarayıcıdan arayın:

http://localhost/codegolf/string-middle.php?s=ABCDEFGHIJKLMNOPQRSTUVWXYZ

Raw output:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
 BCDEFGHIJKLMNOPQRSTUVWXY 
  CDEFGHIJKLMNOPQRSTUVWX  
   DEFGHIJKLMNOPQRSTUVW   
    EFGHIJKLMNOPQRSTUV    
     FGHIJKLMNOPQRSTU     
      GHIJKLMNOPQRST      
       HIJKLMNOPQRS       
        IJKLMNOPQR        
         JKLMNOPQ         
          KLMNOP          
           LMNO           
            MN            


http://localhost/codegolf/string-middle.php?s=1ABCDEFGHIJKLMNOPQRSTUVWXYZ

Raw output:
1ABCDEFGHIJKLMNOPQRSTUVWXYZ
 ABCDEFGHIJKLMNOPQRSTUVWXY 
  BCDEFGHIJKLMNOPQRSTUVWX  
   CDEFGHIJKLMNOPQRSTUVW   
    DEFGHIJKLMNOPQRSTUV    
     EFGHIJKLMNOPQRSTU     
      FGHIJKLMNOPQRST      
       GHIJKLMNOPQRS       
        HIJKLMNOPQR        
         IJKLMNOPQ         
          JKLMNOP          
           KLMNO           
            LMN            
             M             

0

Mathematica, 71 bayt

Table[#~StringTake~{i,-i},{i,Ceiling[StringLength@#/2]}]~Column~Center&

animasyon bulma ortadaki

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.