Animieren Sie das Finden der Mitte

10

Entfernen Sie bei einer nicht leeren Zeichenfolge das erste und das letzte Zeichen, bis Sie ein oder zwei Zeichen erhalten.

Wenn die Zeichenfolge beispielsweise lautet abcde, sollte Ihr Programm Folgendes drucken:

abcde
 bcd
  c

Wenn dies jedoch der abcdefFall ist, sollte es bei zwei Zeichen enden:

abcdef
 bcde
  cd

Nachgestellte Zeilenumbrüche und Leerzeichen am Ende jeder Zeile sind optional. Sie können so viele haben, wie Sie wollen oder keine.

Testfälle

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

Denken Sie daran, dass dies , also gewinnt der Code mit der geringsten Anzahl von Bytes.

Oliver Ni
quelle
Kann die Ausgabe eine Liste von Zeichenfolgen sein, anstatt die Zeichenfolgen zu drucken?
Greg Martin
@ GregMartin Ja.
Oliver Ni
1
Müssen wir die führenden Leerzeichen in jeder Zeile haben?
ETHproductions
@ETHproductions Ja.
Oliver Ni
9
@Oliver Das sind wichtige Informationen, die Sie in den Text aufnehmen sollten
Luis Mendo

Antworten:

11

V , 10 Bytes

ò^llYpr $x

Probieren Sie es online aus!

Erläuterung:

ò^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
James
quelle
6

Python, 45 Bytes

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

Gibt rekursiv die Zeichenfolge sowie eine neue Zeile sowie die führenden Leerzeichen für die nächste Zeile und das rekursive Ergebnis für die verkürzte Zeichenfolge mit einem zusätzlichen Leerzeichen im Präfix aus.

Wenn ein führender Zeilenumbruch zulässig wäre, könnten wir ein Byte speichern:

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

Vergleichen Sie mit einem Programm (49 Bytes in Python 2):

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

ES6 (Javascript), 47, 4843 Bytes

BEARBEITEN: Ersetzter ternärer Operator durch &&, vorangestellte Auffüllzeichenfolge mit der neuen Zeile. Danke @Neil für einen exzellenten Rat!

BEARBEITEN: Enthält den Funktionsnamen für den rekursiven Aufruf, der mit einem wörtlichen Zeilenumbruch um ein Byte entfernt wurde

Golf gespielt

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

Prüfung

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
Zeppelin
quelle
1
Ich stelle fest, dass @xnor mit peinem Zeilenumbruch und einem Leerzeichen beginnt . Vielleicht könnte dir das auch helfen.
Neil
1
Oh, und Sie können auch s&&anstelle von verwenden s?...:''.
Neil
4

Python 2, 50 Bytes

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

Einfache rekursive Funktion, die die Zeichenfolge so lange verkürzt, bis sie verschwindet.

Aufruf als f ('string')

Ausgabe

string
 trin
  ri
ElPedro
quelle
4

Perl, 31 Bytes

30 Bytes Code + -pFlag.

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

Um es auszuführen:

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

Erläuterungen : Das \Sund .$entspricht dem ersten und letzten Zeichen, (.+)dem mittleren und ( *)den nachfolgenden Leerzeichen, die jedes Mal hinzugefügt werden, wenn wir ein Zeichen vom Anfang entfernen. Der Regex entfernt also ein Zeichen vom Anfang, eines vom Ende und fügt jedes Mal ein führendes Leerzeichen hinzu.

Dada
quelle
4

Brainfuck , 67 Bytes

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

Dies sollte bei allen Brainfuck-Aromen funktionieren.

Probieren Sie es online aus!

Ungolfed Code:

# 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
    >[.>]
<]

Es sollten noch einige Bytes vorhanden sein, die hier abgeschnitten werden müssen. Ich habe erst vor kurzem angefangen, Brainfuck zu verwenden, daher ist meine Zeigerbewegung wahrscheinlich sehr ineffizient.

Aedan Smith
quelle
2

MATL , 9 Bytes

tg!*YRPRc

Dies erzeugt nachgestellte Leerzeichen und Zeilenumbrüche.

Probieren Sie es online aus!

Erläuterung

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
Luis Mendo
quelle
2

Stapel, 92 Bytes

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

Nimmt Eingaben auf STDIN vor.

Neil
quelle
2

C 73 Bytes

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;
}

Verwendungszweck:

main(){
  char a[] = "abcde";
  f(a);
}
Karl Napf
quelle
2

05AB1E , 8 Bytes

Code:

ÐvNú,¦¨D

Erläuterung:

Ð          # 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

Verwendet die CP-1252- Codierung. Probieren Sie es online aus!

Adnan
quelle
2

Haskell, 47 43 Bytes

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

Probieren Sie es auf Ideone . Die Ausgabe ist eine Liste von Zeichenfolgen, die in den Kommentaren der Herausforderung zulässig waren. Führen Sie zum Drucken (putStr.unlines.f)statt nur aus f.

Bearbeiten: 4 Bytes gespeichert, nachdem festgestellt wurde, dass nachgestellte Leerzeichen zulässig sind.

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

Perl 6 , 42 Bytes

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

Erweitert:

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
}
Brad Gilbert b2gills
quelle
1

GNU sed 24 Bytes

Beinhaltet +2 für -rn

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

Druckt, ersetzt das erste Nicht-Leerzeichen durch ein Leerzeichen und löscht das letzte Zeichen, bis sich nichts mehr ändert.

Riley
quelle
0

C ++ 14, 117 Bytes

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;}

Angenommen, die Eingabe sist a std::stringund gibt den animierten Text zurück.

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;
}

Verwendungszweck:

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

Vim - 14 Tastenanschläge

qqYp^r $x@qq@q


Erläuterung:

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

Vim beendet das Makro automatisch, sobald wir keine Charaktere mehr haben

BlackCap
quelle
0

Schnapp! - 16 Blöcke

Schnapp!

Die Ausgabe ist selbstzentrierend. Das "Warten" ist für Menschen.

wyldstallyns
quelle
0

PHP, 91 Bytes

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

Verwendung: In einer Datei speichern und über den Browser aufrufen:

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             
Mario
quelle
0

Mathematica, 71 Bytes

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

animiere-finde-die-Mitte

Genisis
quelle