Es war nur ein Eingabefehler


17

Fortsetzung meiner Es war nur ein Bug Challenge:

Eingang:

Eine Zeichenfolge, die aus druckbaren ASCII-Zeichen ohne Leerzeichen oder Zeilenumbrüche besteht.

Ausgabe:

Verwandeln Sie die Eingabe zunächst in ein Palindrom, indem Sie die Eingabe zurücksetzen und vor sich selbst hinzufügen, ohne das mittlere Zeichen (dh bei einer Eingabe 1234567890wird es 0987654321234567890).

Und dann diesen Text ausgeben:

0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                                        0987654321234567890
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0

(Von der Mitte nach außen in beide Richtungen wird jedes Zeichen durch ein Leerzeichen mehr als in der vorherigen Zeile getrennt.)

Herausforderungsregeln:

  • Sie müssen die doppelte Länge der Eingabe minus 3 Zeilen drucken. Bei der Eingabe 1234567890beträgt die oben angezeigte Ausgabe 17 Zeilen (Länge 10 * 2 - 3).
  • Die Eingabe enthält nur druckbare ASCII-Zeichen (ohne Leerzeichen, Tabulatorzeichen und Zeilenumbrüche).
  • Nachgestellte Leerzeichen sind optional.
  • Eine einzelne nachgestellte neue Zeile ist optional.
  • (Zusätzliche) führende Leerzeichen oder Zeilenumbrüche sind nicht zulässig.
  • Sie können davon ausgehen, dass die Eingabe immer mindestens vier Zeichen lang ist.
  • Anders als bei mir war es nur eine Bug- Herausforderung, sowohl die Eingabe- als auch die Ausgabeformate sind flexibel. Sie können das Ergebnis also als String-Array, String-Liste usw. ausgeben.

Allgemeine Regeln:

  • Das ist , also gewinnt die kürzeste Antwort in Bytes.
    Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden.
  • Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
  • Standardlücken sind verboten.
  • Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
  • Fügen Sie ggf. auch eine Erklärung hinzu.

Testfälle:

Input: 1234567890
Output:
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                                        0987654321234567890
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0

Input: ABCD
Output:
D  C  B  A  B  C  D 
   D C B A B C D
      DCBABCD
   D C B A B C D
D  C  B  A  B  C  D

Input: =>)}]
Output:
]   }   )   >   =   >   )   }   ]
    ]  }  )  >  =  >  )  }  ]
        ] } ) > = > ) } ]
            ]})>=>)}]
        ] } ) > = > ) } ]
    ]  }  )  >  =  >  )  }  ]
]   }   )   >   =   >   )   }   ]

Input: XXxxXX
Output:
X    X    x    x    X    X    X    x    x    X    X
     X   X   x   x   X   X   X   x   x   X   X
          X  X  x  x  X  X  X  x  x  X  X
               X X x x X X X x x X X
                    XXxxXXXxxXX
               X X x x X X X x x X X
          X  X  x  x  X  X  X  x  x  X  X
     X   X   x   x   X   X   X   x   x   X   X
X    X    x    x    X    X    X    x    x    X   X

Sind in jeder Zeile gleich viele führende Leerzeichen in Ordnung?
Adám

@Adam Sorry aber nein. Beliebig viele nachgestellte Leerzeichen sind in Ordnung, führende Leerzeichen jedoch nicht. Ich werde diese Regel in der Challenge spezifizieren.
Kevin Cruijssen

2
Msgstr "Sie müssen die Länge der Eingabe minus 3 Zeilen drucken." dann "(Länge 10 * 2 - 3)". Der erste Satz sagt "no double", der zweite "double". Also was ist es?
Olivier Grégoire

@ OlivierGrégoire Hoppla, die erste Zeile sollte 2x die Länge minus 3 enthalten haben.
Behoben

Antworten:


5

Holzkohle , 14 Bytes

E⁻Lθ¹⪫θ× ι‖O←↑

Probieren Sie es online!

AST:

Program
├Print
│└E: Map
│ ├⁻: Difference
│ │├L: Length
│ ││└θ: Identifier θ
│ │└1: Number 1
│ └⪫: Join
│  ├θ: Identifier θ
│  └×: Product
│   ├' ': String ' '
│   └ι: Identifier ι
└‖O: Reflect overlap
 └Multidirectional
  ├←: Left
  └↑: Up

Könnten 16 Codepunkte sein, aber als UTF-8 meldet Python 3, dass es 41 Bytes sind. Welchen Zeichensatz verwenden Sie, um es 16 Bytes zu machen?
Janus Troelsen

@JanusTroelsen Es ist ein benutzerdefinierter Zeichensatz.
Erik der Outgolfer

Huh, arbeitet an Streichern? Muss mich für das nächste Mal daran erinnern ...
Neil

@Neil Ja, es macht Sinn, nicht wahr?
Erik der Outgolfer

Technisch gesehen ist Ihre Bearbeitung nicht konkurrierend, da das entsprechende Commit die Herausforderung nachdatiert.
Neil

7

Japt , 22 21 Bytes

¬Å£¬qYîÃy w ê y w ê ·

Online testen!

Erläuterung

Die ersten 8 Bytes erzeugen den rechten unteren Quadranten des Musters:

 ¬ Å  £    ¬ qYîÃ
Uq s1 mXY{Uq qYî} 

Uq                 : Split the input into characters.
   s1              : Slice off the first.
      mXY{      }  : Map each item X and index Y to
          Uq       :   the input split into chars,
             q     :   joined with
              Yî   :     Y spaces.

An dieser Stelle haben wir eine Reihe von z ["ABCD", "A B C D", "A B C D"]. Leider dauert es 13 Bytes, um dies zu quadrieren:

y w ê y w ê ·
y w ê y w ê qR
y                : Pad each line to the same length with spaces and transpose.
  w              : Reverse the array, and
    ê            : palindromize. Now we have the bottom half of the output transposed.
      y          : Transpose back.
        w ê      : Reverse and palindromize again, giving the full output.
            qR   : Join with newlines.
                 : Implicit: output result of last expression

Ich wünschte, ich hätte gedacht, Transponieren zu verwenden - gut gemacht :)
Shaggy

Kann ich eine Frage stellen, für die ich Angst habe, die Antwort zu wissen? Kodieren Sie und der Rest hier dies tatsächlich in der verkleinerten Version?
GDBJ

Wenn Sie sich trauen. Wahrscheinlich nicht.
CalculatorFeline

1
@gdbj mache ich normalerweise ... ist das ein schlechtes Zeichen? : P
ETHproductions

@ETHproductions hat gerade einem Kumpel gesagt, dass dies echtem Golf ähnelt: Es ist frustrierend zu lernen, seltsamerweise süchtig zu machen und seine Fähigkeiten unter Beweis zu stellen, erfordert Respekt.
GDBJ


5

JavaScript (ES6) , 159 136 129 127 Byte

f=(i,x=1-(l=i.length-1),y=x<0?-x:x,[,...b]=i)=>l>x?''.padEnd(l*(l+~y))+[...b.reverse(),...i].join(''.padEnd(y))+`
`+f(i,x+1):''

Probieren Sie es online! Erklärung unten

// This is a recursive function
// First, inputs and various variable initializations
// by using defaults
let func = (
  // Text input, will not be modified through recursion
  input,

  // Current line, for the first function call we start from -lines to +lines
  // It's roughly equivalent to lines*2 but this helps us computing the spacing
  // Also computing the total amount of lines
  currentLine = 1 - (totalLines = input.length - 1),

  // Getting the absolute value of the current line (like Math.floor)
  absCurrentLine = currentLine < 0 ? -currentLine : currentLine,

  // Getting the input without it's first letter, useful for the palidrome of the input
  [,...slicedInput] = input

// Base case, stopping the recursion if the current line
// is still below the total amount of lines
) => totalLines > currentLine

  // Leading spacing
  ? ''.padEnd(totalLines * (totalLines + ~absCurrentLine)) + 

  // Putting together the palindrome version and adding spaces between the chars
    [...slicedInput.reverse(), ...input].join(''.padEnd(absCurrentLine)) + `

  // Line return + recursion call
` + f(input, currentLine + 1)
  : ''

Bei der ersten Teilnahme am Codegolf entschuldige ich mich im Voraus für offensichtliche Fehler.

Vielen Dank an Justin Mariner für das Speichern von 23 Bytes! Vielen Dank an Craig Ayre für das Speichern von 11 Bytes und für den Fehlerbericht.


Schöne erste Antwort, +1 von mir und willkommen bei PPCG. Ich bin nicht sehr vertraut mit Js, aber ist es möglich, xbei -2 statt -1 zu beginnen und zu wechseln x<=l, ++x<=ldamit Sie das entfernen x++und ein Byte speichern können?
Kevin Cruijssen

Ich habe es versucht, habe es aber nicht geschafft, weil lineses auch mit dem Abstand verwickelt ist, so dass es mehr Bytes kostet, damit alles wieder funktioniert. Aber ich bin mir ziemlich sicher, dass es eine bessere Möglichkeit gibt, den Code zu organisieren und Ihren Vorschlag hinzuzufügen.
Saming

1
Willkommen bei PPCG, schöner erster Beitrag und Erklärung! Golf bis zu 133 Bytes hier . Beinhaltet eine Erläuterung der Änderungen.
Justin Mariner

Leider scheint Ihre Ausgabe nicht ganz der erwarteten Ausgabe zu entsprechen: siehe hier
Craig Ayre

1
Das ist großartig, ich habe deine neue Funktion hinzugefügt und die Erklärung aktualisiert
Saming

4

SOGL V0.12 , 22 18 Bytes

ā,⁄H{,čFH@*∑Κ}▓±╬-

Probieren Sie es hier aus!

Erläuterung:

ā                   push an empty array - canvas
 ,⁄H{        }      input length-1 times do
     ,                push the input
      č               chop it into chars
       FH@*           get the current iteration-1 amount of spaces
           ∑          join the chopped input with the spaces
            Κ         prepend it to the array
              ▓     space to a square
               ±    reverse each string in that list
                ╬-  quad-palindromize with 1 X and 1 Y overlap and without swapping characters

Ist ╬-der Vier-Wege-Befehl palindromize? Ich war gerade hier und wünschte, Japt hätte so etwas ...: P
ETHproductions

@ ETHproductions FWIW, ist viele Dinge
Dzaima

Ich weiß, deshalb habe ich angegeben ╬-. Aber danke, ich konnte diese Seite aus irgendeinem Grund nicht finden
ETHproductions

@ETHproductions Oh. Es existiert nur in der SOGLOnline-Kopie des Interpreters: / Irgendwann muss ich die beiden zusammenfügen: |
Dzaima

Hmm ... Sie sollten die automatische Umsetzung Ffür , wenn es gebraucht wird .
Erik der Outgolfer

4

Python 3 , 149 141 95 Bytes

def f(s):l=len(s)-1;[print((' '*abs(i)).join(s[:0:-1]+s).center(2*l*l+1))for i in range(1-l,l)]

Probieren Sie es online!

Vielen Dank an @KevinCruijssen und @ETHproductions für das Speichern einiger Bytes

Besonderer Dank geht an @notjagan für die Einsparung von 46 Bytes!


1
Das Ändern l=len(s);auf l=len(s)-1;und dann das Ändern aller beteiligten Werte l(dh l-1-> l; -l+2-> -l+1; usw.) ist 8 Byte kürzer. Probieren Sie es hier aus.
Kevin Cruijssen

1
-l+2-> 2-l:)
ETHproductions

Danke @KevinCruijssen, ich kann momentan leider nicht bearbeiten. Kannst du das bitte bearbeiten?
Mr. Xcoder

@ KevinCruijssen Vielen Dank!
Mr. Xcoder

3
Bis zu 95 Bytes mit centeranstelle der forSchleife!
Notjagan

4

PHP, 145 131 Bytes

Es bedurfte einiger Überlegungen, um dieses zusätzliche Byte zu spielen. aber das war es wert.

while($y<=2*$e=strlen($a=$argn)-1)echo($p=str_pad)("
",$e*($e-$d=abs($y++-$e))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$d));

druckt eine führende Newline. Laufen Sie als Pipe mit -nRoder probieren Sie es online aus .

Nervenzusammenbruch

while($y<=2*$e=strlen($a=$argn)-1)  # $e=length-1, loop through rows
                                        # 1. print linebreak and left padding
    echo($p=str_pad)("\n",$e*($e-$d=abs($y++-$e))+1),
        chunk_split(
            $a.substr(strrev($a),1)     # 2. palindromize input
            ,1,$p("",$d));              # 3. insert $e..0..$e spaces between characters

Alternativlösung , gleiche Länge:

for($d=-$e=strlen($a=$argn)-1;$d<$e;)echo($p=str_pad)("
",$e*($e-$b=abs($d++))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$b));

1
Sie können mit Try it online
Jörg Hülsermann

3

APL (Dyalog) , 37 Bytes

Benötigt, ⎕IO←0was auf vielen Systemen Standard ist.

{⍉m(2-d)↓⍉(m←⊖⍪1↓⊢)↑∊¨(1↓⍳d←≢⍵)↑¨¨⊂⍵}

{} Anonyme Funktion, bei der das Argument durch ⍵ dargestellt wird

()↑¨¨⊂⍵ Für jede ( ¨) der folgenden Zahlen nehmen ( ) so viele Zeichen aus jedem ( ¨) des gesamten ( ) Arguments, wie erforderlich mit Leerzeichen aufgefüllt:

  ≢w die Anzahl der Zeichen im Argument

  d← Speichern Sie das in d

   so viele Indexe (0… d - 1)

  1↓ fall eins (die null)

∊¨ϵ jeweils nlisten (abflachen)

 Erhöhen Sie den Rang (konvertieren Sie die Liste der Listen in eine Matrix)

(m←) Wenden die folgende implizite Funktion m an , definiert als:

   das verkehrte Argument

   auf

  1 eine Reihe]

   heruntergefallen von

   das Argument

 transponieren

()↓ Fallen lassen:

  2-d = - ( d - 2), dh d - 2 Zeilen von unten

mm  anwenden

 transponieren

Probieren Sie es online!


3

Java (OpenJDK 8) , 201 196 Bytes

s->{for(int l=s.length()-1,i=-l,x=0;++i<l;x+=i<0?l:-l)System.out.printf("%1$"+(x<1?"":x)+"s"+s.join("%1$"+(i<0?-i:i>0?i:"")+"s",(new StringBuffer(s.substring(1)).reverse()+s).split(""))+"%n","");}

Probieren Sie es online!

Es ist die gleiche Idee wie bei der vorherigen Herausforderung , nur dass der Generatorstring jetzt ein bisschen länger und schwieriger zu handhaben ist.

%1$Ns0%1$Ns9%1$Ns8%1$Ns7%1$Ns6%1$Ns5%1$Ns4%1$Ns3%1$Ns2%1$Ns1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n

3

Python 3 , 134 124 Bytes

f=lambda s:'\n'.join([' '*(len(s)-1)*abs(len(s)-abs(i)-2)+(' '*abs(i)).join(s[::-1]+s[1:]) for i in range(2-len(s),len(s)-1)])

Probieren Sie es online!

Erster Beitrag zu PPCG nach einer Weile lauern. Suche nach Anregungen / Ratschlägen!


Vielen Dank an @LyricLy und @ Łukasz Rogalski für die Verbesserungen!


1
Sie müssen die Ausgabe nicht innerhalb der Funktion drucken, die Ausgabe kann in einem Rückgabewert erfolgen. Außerdem müssen Sie das f=in dem bytecount nicht zählen, es ist in Ordnung, einfach eine anonyme Funktion bereitzustellen.
Text

1
Ist auch -len(s)+2nur 2-len(s)ein Byte weniger.
Łukasz Rogalski

Vielen Dank an Łukasz Rogalski und @LyricLy; Du hast mir 10 Bytes gerettet!
Chase Vogeli

3

Haskell, 177 163 Bytes

import Data.List
k n=[1..n]>>" "
f s=let n=length s in map(\x->(k(((n-1)*(n-(abs x)))))++(intercalate (k(abs x))$map(\z->[z])$((++)=<<reverse.tail) s))[n,n-1.. -n]

Die Funktion fist die Challenge-Funktion und gibt eine Liste von Strings ( [String]) mit zurückunlines die gleiche visuelle Ausgabe liefern sollte wie die Testfälle (main = putStr $ unlines $ f "test string" um sie zu kompilieren).

Probieren Sie es online!

-14 Bytes dank @nimi


1
kkann als k n=[1..n]>>" "und pals definiert werden p=(++)=<<reverse.tail(Sie können diese Definition sogar inline einfügen).
Nimi

2

Mathematica, 141 Bytes

Column[Join[Reverse@(s=Row/@Table[Riffle[Reverse@Rest@b~Join~b,""<>Table[" ",i]],{i,0,Length[b=Characters@#]-1}]),Rest@s],Alignment->Center]&
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.