C'était juste un bug d'entrée

17

Poursuivre mon C'était juste un défi de bug :

Contribution:

Une chaîne composée de caractères ASCII imprimables sans espaces blancs ni nouvelles lignes.

Production:

Transformez d'abord l'entrée en un palindrome en inversant l'entrée et en l'ajoutant avant elle-même, en excluant le caractère du milieu (c'est-à-dire avec une entrée 1234567890, elle deviendra 0987654321234567890).

Et puis affichez ce texte:

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

(Du milieu vers l'extérieur dans les deux directions, chaque caractère est séparé par un espace de plus que la ligne précédente.)

Règles du défi:

  • Vous devez imprimer deux fois la longueur de l'entrée, moins 3 lignes. Ainsi, avec l'entrée 1234567890, la sortie affichée ci-dessus est de 17 lignes (longueur 10 * 2 - 3).
  • L'entrée ne contiendra que de l'ASCII imprimable (hors espace, tabulation et nouvelle ligne).
  • Les espaces de fin sont facultatifs.
  • Une seule nouvelle ligne de fin est facultative.
  • Les espaces de début (supplémentaires) ou les nouvelles lignes de début ne sont pas autorisés.
  • Vous pouvez supposer que l'entrée comportera toujours au moins quatre caractères.
  • Contrairement à mon C'était juste un défi de bogue , les formats d'entrée et de sortie sont flexibles. Vous êtes donc autorisé à générer le résultat sous forme de tableau de chaînes, de liste de chaînes, etc.

Règles générales:

  • C'est le , donc la réponse la plus courte en octets l'emporte.
    Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation.
  • Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
  • Les failles par défaut sont interdites.
  • Si possible, veuillez ajouter un lien avec un test pour votre code.
  • Veuillez également ajouter une explication si nécessaire.

Cas de test:

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
Kevin Cruijssen
la source
Un nombre égal d'espaces de tête sur chaque ligne est-il OK?
Adám
@ Adám Désolé mais non. Tout nombre d'espaces de fin est correct, mais pas les espaces de début. Je préciserai cette règle dans le défi.
Kevin Cruijssen
2
"Vous devez imprimer la longueur de l'entrée moins 3 lignes." puis "(longueur 10 * 2 - 3)". La première phrase dit "pas de double", la seconde dit "double". Alors c'est quoi?
Olivier Grégoire
@ OlivierGrégoire Oups, la première ligne aurait dû contenir 2x la longueur moins 3. Corrigé
Kevin Cruijssen

Réponses:

5

Fusain , 14 octets

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

Essayez-le en ligne!

AST:

Program
├Print
│└E: Map
│ ├⁻: Difference
│ │├L: Length
│ ││└θ: Identifier θ
│ │└1: Number 1
│ └⪫: Join
│  ├θ: Identifier θ
│  └×: Product
│   ├' ': String ' '
│   └ι: Identifier ι
└‖O: Reflect overlap
 └Multidirectional
  ├←: Left
  └↑: Up
Erik le Outgolfer
la source
Peut-être 16 points de code, mais comme UTF-8 Python 3 indique qu'il est de 41 octets. Quel jeu de caractères utilisez-vous pour faire 16 octets?
Janus Troelsen
@JanusTroelsen C'est un jeu de caractères personnalisé.
Erik the Outgolfer le
Huh, ⪫ travaille sur les cordes? Il faut se souvenir que pour la prochaine fois ...
Neil
@Neil Ouais c'est logique non?
Erik the Outgolfer
Techniquement, votre modification n'est pas concurrente, car la validation pertinente est postérieure au défi.
Neil
7

Japt , 22 21 octets

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

Testez-le en ligne!

Explication

Les 8 premiers octets génèrent le quadrant inférieur droit du motif:

 ¬ Å  £    ¬ 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.

À ce stade, nous avons un tableau d'ex ["ABCD", "A B C D", "A B C D"]. Malheureusement, il faut 13 octets pour mettre cela au carré:

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
ETHproductions
la source
J'aimerais avoir pensé à utiliser la transposition - bien fait :)
Shaggy
Puis-je poser une question à laquelle j'ai peur de connaître la réponse? Êtes-vous et les autres ici en train de coder cela dans sa version minifiée?
gdbj
Si tu ose. Probablement pas.
CalculatorFeline
1
@gdbj je fais d'habitude ... est-ce un mauvais signe? : P
ETHproductions
@ETHproductions Je disais simplement à un copain que cela ressemble au vrai golf: frustrant d'apprendre, étrangement addictif et démontrant des compétences dans ce domaine, il mérite le respect.
gdbj
5

05AB1E , 17 octets

g<F¹RSðN×ýû})Rû.c

Essayez-le en ligne!

-1 grâce à kalsowerus .

Erik le Outgolfer
la source
Vous pouvez enregistrer un octet en le remplaçant .c.∊parû.c
kalsowerus
@kalsowerus Et je savais qu'il y aurait un moyen d'utiliser û... merci!
Erik the Outgolfer
5

JavaScript (ES6) , 159 136 129 127 octets

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):''

Essayez-le en ligne!Explication ci-dessous

// 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)
  : ''

Première entrée sur codegolf, je m'excuse à l'avance pour toute erreur évidente.

Merci à Justin Mariner pour avoir économisé 23 octets! Merci à Craig Ayre pour avoir économisé 11 octets et pour le rapport de bogue.

Saming
la source
Belle première réponse, +1 de ma part et bienvenue sur PPCG. Je ne suis pas trop familier avec Js, mais est-il possible de commencer xà -2 au lieu de -1, et de changer x<=lpour ++x<=lque vous puissiez supprimer le x++et enregistrer un octet?
Kevin Cruijssen
J'ai essayé mais je n'y suis pas parvenu car il linesest également enchevêtré avec l'espacement, donc cela finit par coûter plus d'octets pour que tout fonctionne à nouveau. Mais je suis assez certain qu'il existe à la fois une meilleure façon d'organiser le code et d'ajouter votre suggestion.
Saming
1
Bienvenue sur PPCG, joli premier post et explication! Golfé jusqu'à 133 octets ici . Comprend une explication de ce qui a été changé.
Justin Mariner
Malheureusement, votre sortie ne semble pas tout à fait correspondre à la sortie attendue: voir ici
Craig Ayre
1
C'est super, j'ai ajouté votre nouvelle fonction et mis à jour l'explication
Saming
4

SOGL V0.12 , 22 18 octets

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

Essayez-le ici!

Explication:

ā                   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
dzaima
la source
La ╬-commande de palindromisation quadridirectionnelle est-elle? J'étais juste ici pour souhaiter que Japt ait quelque chose comme ça ...: P
ETHproductions
@ETHproductions FWIW, c'est beaucoup de choses
dzaima
Je sais, d'où la raison pour laquelle j'ai précisé ╬-. Mais merci, je n'ai pas pu trouver cette page pour une raison quelconque
ETHproductions
@ETHproductions Oh. Il n'existe que dans la copie SOGLOnline de l'interpréteur: / À un moment donné, je dois joindre les deux ensemble: |
dzaima
Hmm ... vous devriez mettre en œuvre automatique Fpour si elle est nécessaire.
Erik the Outgolfer
4

Python 3 , 149 141 95 95 octets

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)]

Essayez-le en ligne!

Merci à @KevinCruijssen et @ETHproductions pour avoir économisé quelques octets

Un merci spécial à @notjagan pour avoir économisé 46 octets!

M. Xcoder
la source
1
Passer l=len(s);à l=len(s)-1;puis changer toutes les valeurs impliquant l(c'est-à l-1- dire -> l; -l+2-> -l+1; etc.) est 8 octets plus court. Essayez-le ici.
Kevin Cruijssen
1
-l+2-> 2-l:)
ETHproductions
Merci @KevinCruijssen, malheureusement je ne peux pas éditer maintenant, pouvez-vous éditer?
M. Xcoder
@KevinCruijssen Merci beaucoup!
M. Xcoder
3
Jusqu'à 95 octets en utilisant centerau lieu de la forboucle!
notjagan
4

PHP, 145 131 octets

Il a fallu un peu de réflexion pour jouer au golf cet octet supplémentaire; mais ça en valait la peine.

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

imprime une nouvelle ligne de premier plan. Exécuter en tant que pipe avec -nRou l' essayer en ligne .

panne

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

solution alternative , même longueur:

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));
Titus
la source
1
Vous pouvez économiser 13 octets avec Essayez-le en ligne!
Jörg Hülsermann
3

APL (Dyalog) , 37 octets

Requiert ⎕IO←0ce qui est par défaut sur de nombreux systèmes.

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

{} Fonction anonyme où l'argument est représenté par

()↑¨¨⊂⍵ Pour chacun ( ¨) des nombres suivants, prenez ( ) autant de caractères de chacun ( ¨) de l' argument entier ( ), en remplissant avec des espaces si nécessaire:

  ≢w le nombre de caractères dans l'argument

  d← stocker cela en d

   autant de ɩ ndices (0… d - 1)

  1↓ déposer un (le zéro)

∊¨ε nlist (aplatir) chaque

 augmenter le rang (convertir la liste des listes en matrice)

(m←) Appliquer la fonction tacite m suivante , définie comme:

   l'argument à l'envers

   au dessus de

  1 une rangée]

   est tombé de

   l'argument

 transposer

()↓ Baisse:

  2-d = - ( d - 2), c'est-à-dire d - 2 rangées à partir du bas

m appliquer m

 transposer

Essayez-le en ligne!

Adam
la source
3

Java (OpenJDK 8) , 201 196 octets

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","");}

Essayez-le en ligne!

C'est la même idée que celle que j'ai utilisée pour le défi précédent , sauf que la chaîne du générateur est maintenant un peu plus longue et avec des cas plus difficiles à gérer.

%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
Olivier Grégoire
la source
3

Python 3 , 134 124 octets

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)])

Essayez-le en ligne!

Premier message sur PPCG après avoir été tapi pendant un moment. Vous cherchez des suggestions / conseils!


Merci à @LyricLy et @ Łukasz Rogalski pour les améliorations!

Chase Vogeli
la source
1
Vous n'avez pas besoin d'imprimer la sortie à l'intérieur de la fonction, la sortie peut être donnée dans une valeur de retour. De plus, vous n'avez pas à compter le f=bytecount, il suffit de fournir une fonction anonyme.
LyricLy
1
En outre, -len(s)+2c'est juste 2-len(s)un octet de moins.
Łukasz Rogalski
Merci @ Łukasz Rogalski et @LyricLy; vous m'avez sauvé 10 octets!
Chase Vogeli
3

Haskell, 177 163 octets

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]

La fonction f est la fonction de défi et renvoie une liste de chaînes ( [String]), en utilisant unlinessur elle devrait fournir la même sortie visuelle que les cas de test (main = putStr $ unlines $ f "test string" pour la compiler).

Essayez-le en ligne!

-14 octets grâce à @nimi

Mephy
la source
1
kpeut être défini au fur k n=[1..n]>>" "et à pmesure p=(++)=<<reverse.tail(vous pouvez même intégrer cette définition).
nimi
2

Mathematica, 141 octets

Column[Join[Reverse@(s=Row/@Table[Riffle[Reverse@Rest@b~Join~b,""<>Table[" ",i]],{i,0,Length[b=Characters@#]-1}]),Rest@s],Alignment->Center]&
J42161217
la source