Noeud papillon alphanumérique

14

Sortez ce texte exact:

1                i
12              hi
123            ghi
1234          fghi
12345        efghi
123456      defghi
1234567    cdefghi
12345678  bcdefghi
123456789abcdefghi
12345678  bcdefghi
1234567    cdefghi
123456      defghi
12345        efghi
1234          fghi
123            ghi
12              hi
1                i

Une seule nouvelle ligne de fin est acceptable, mais aucune autre modification de mise en forme n'est autorisée.

Règles et E / S

  • Pas d'entrée
  • La sortie peut être donnée par n'importe quelle méthode pratique .
  • Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
  • Les failles standard sont interdites.
  • Il s'agit de donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
AdmBorkBork
la source
1
Pouvons-nous utiliser l'alphabet majuscule à la place?
Kritixi Lithos
3
@Cowsquack Ce serait un changement de règle. Il indique Sortie ce texte exact .
Dennis
@Cowsquack Nope - en minuscules est requis.
AdmBorkBork

Réponses:

13

C, 87 85 81 80 octets

j;main(i){for(;++i<19;)for(j=19;j--;)putchar(j?j<i^j<20-i?32:106-j-j/10*39:10);}

Essayez-le en ligne!

Explication

j; // same as int j;
main(i){ // same as int main(int i){, where i = argc (1 with no arguments)
  for(;++i<19;) // loop over rows, i = 2..18
    for(j=19;j--;) // loop over chars, j = 19..0
      putchar(j?j<i^j<20-i?32:106-j-j/10*39:10); // output characters:
      //      j?                           :10 // on last char (j=0), output \n
      //        j<i                            // check for top/left half
      //            j<20-i                     // check for bottom/left half
      //           ^                           // 1 if only one half matched
      //                  ?32:                 // if so, output space
      //                      106              // char code for j
      //                         -j            // get desired letter
      //                           -j/10*39    // subtract 39 for j>9 (numbers)
}
PurkkaKoodari
la source
Je suis étonné d' ^avoir une priorité inférieure à <… quelle jolie réponse!
Lynn
@Lynn Les opérateurs au niveau du bit en C (et même Java / JS et autres) ont tous une priorité inférieure aux comparaisons. C'est à la fois agréable pour le golf de code et une très bonne source d'erreurs (pensez if (x & 2 == 0), qui évalue toujours 0)
PurkkaKoodari
6

R , 64 octets

for(i in abs(8:-8))cat(intToUtf8(c(57-8:i,32*!!-i:i,97+i:8,13)))

Essayez-le en ligne!

  • -3 octets grâce à @Giuseppe
  • -5 octets grâce à @ J.Doe
digEmAll
la source
67 octets avecintToUtf8
J.Doe
catpour un octet?
JayCe
2
64 octets en s'appuyant sur votre solution, en utilisant le raccourci de @ Giuseppe pour en repplus la fonctionnalité d' intToUtf8un qui 0se transforme en un "".
J.Doe
@ J.Doe super truc!
JayCe
@ J.Doe: Génial, merci!
digEmAll
4

Python 2 , 80 octets

j=i=1
exec"print'123456789'[:i]+'  '*(9-i)+'abcdefghi'[-i:];i+=j;j-=2*(i>8);"*17

Essayez-le en ligne!

Barre
la source
77 octets
ovs
@ovs, cela convergerait dans la réponse de Lynn, donc je vais laisser celle-ci telle quelle
Rod
3

QBasic, 72 octets

Basé sur la soumission de Taylor Scott .

FOR y=-8TO 8
z=ABS(y)
?"123456789abcdefghi";
LOCATE,10-z
?SPC(2*z)"
NEXT

Explication de base

Sur chaque ligne, nous imprimons la chaîne complète 123456789abcdefghi. Ensuite, nous revenons et en écraser une partie avec des espaces.

Explication complète

Avec un code légèrement non golfé:

FOR y = -8 TO 8           ' Loop for 17 rows
 z = ABS(y)               ' z runs from 8 to 0 and back to 8
 ? "123456789abcdefghi";  ' Print the full string and stay on the same line (important!)
 LOCATE , 10-z            ' Go back to column 10-z on that line
 ? SPC(2*z); ""           ' Print 2*z spaces
                          ' (SPC keeps the cursor on the same line unlesss you print
                          ' something after it, so we'll use the empty string)
NEXT                      ' Go to the next y value
DLosc
la source
C'est une utilisation vraiment intelligente de la Locatecommande
Taylor Scott
2

T-SQL, 108 octets

DECLARE @ INT=8a:
PRINT STUFF('123456789abcdefghi',10-abs(@),2*abs(@),SPACE(2*abs(@)))
SET @-=1IF @>-9GOTO a

Les retours sont uniquement pour la lisibilité.

J'ai essayé beaucoup d'autres variantes, y compris des tableaux de nombres, c'était la plus courte.

BradC
la source
2

Japt , 20 octets

9Æ9Ç>YÃê1 Ë?S:°EsH
ê

Interprète Japt

Sortie sous forme de tableau de tableaux de caractères. Le -Rdrapeau n'est pas nécessaire pour fonctionner, il rend simplement la sortie plus agréable.

Explication:

9Æ9Ç                    create a 9x9 2D array 
    >YÃ                 fill bottom left triangle with "false", upper right with "true"
       ê1               mirror horizontally
          Ë?S           replaces "true" with a space
             :°EsH      replaces "false" with the horizontal index + 1 converted to base 32
                  \n    Store the result in U (saves bytes by not closing braces)
                    ê   palindromize vertically
Kamil Drakari
la source
1

Stax , 18 octets

â4+╤jo♂▐▀3bkWíæß╝╖

Exécuter et déboguer

Explication:

9R$|[|<Va17T|]r|>\|pm Full program
9R$                   Produce "123456789"
   |[|<               Left-aligned prefixes (["1        ", "12       ", ...])
       Va17T          Produce "abcdefghi"
            |]        Suffixes (["abcdefghi", "bcdefghi", ...])
              r|>     Reverse and left-align (["        i", "       hi", ...])
                 \    Zip both arrays (["1                i", "12              hi", ...])
                  |p  Palindromize array
                    m Map over array, printing each with a newline                        
wastl
la source
1

APL (Dyalog Unicode) , 30 octets

(⊢⍪1↓⊖)(↑,\1↓⎕d),⌽↑,\⌽8199↑⎕a

Essayez-le en ligne!

convertir en matrice (pads automatiques avec espaces)

  • ,\ les préfixes de

  • 1↓ le premier élément est tombé de

  • ⎕d cette chaîne '0123456789'

  • Cela donne la matrice de caractères

1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

, concaténé avec

  • l'inverse

  • matricifié

  • ,\ préfixes de

  • l'inverse

  • 819⌶ et en minuscules

  • 9↑ 9 premiers éléments de

  • ⎕a cette chaîne 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • Cela donne la matrice de caractères

        je
       salut
      ghi
     fghi
    efghi
   defghi
  cdefghi
 bcdefghi
abcdefghi

et sur ce résultat

1 i
12 salut
123 ghi
1234 fghi
12345 efghi
123456 defghi
1234567 cdefghi
12345678 bcdefghi
123456789abcdefghi

effectuer le train suivant (⊢⍪1↓⊖)

le bon argument

concaténé verticalement avec

1↓ la première ligne a été supprimée (cela évite la répétition de la ligne du milieu)

le bon argument inversé verticalement


Autres solutions

33 octets

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⎕ucs 106-q←⍳9

Essayez-le en ligne!

33 octets

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⌽ucs 96+q←⍳9

Essayez-le en ligne!

Kritixi Lithos
la source
1

Fusain , 22 17 octets

G↗↓←⁹β←G↖↓⁹⭆χι‖O↓

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

G↗↓←⁹β

Dessinez un triangle inférieur droit et remplissez-le à l'aide de l'alphabet minuscule. (Le remplissage est basé sur la mosaïque du plan avec l'alphabet, puis sur la copie de la zone dessinée.)

Déplacez-vous vers la gauche pour dessiner le triangle numérique.

G↖↓⁹⭆χι

Tracez un triangle inférieur gauche et remplissez-le à l'aide des chiffres. (Étant donné que le triangle est dessiné à gauche de l'origine, les chiffres sont pris justifiés à droite, donc seuls les chiffres 1 à 9 sont utilisés.)

‖O↓

Réfléchissez pour terminer la moitié inférieure.

Neil
la source
1

V , 25 , 21 octets

¬19¬ai8ñHÄ/á
r ge.YGp

Essayez-le en ligne!

2-4 octets enregistrés grâce à nmjcman101!

Hexdump:

00000000: ac31 39ac 6169 38f1 48c4 2fe1 0a72 2067  .19.ai8.H./..r g
00000010: 652e 5947 70                             e.YGp
James
la source
Je sais que tout ce que je fais, c'est traquer vos réponses aujourd'hui, mais je pense que cela fonctionne pour 23: Essayez-le en ligne!
nmjcman101
@ nmjcman101 Pour une raison quelconque, je ne peux pas comprendre comment cette version fonctionne. Mais j'en ai trouvé une encore plus courte, alors merci!
James
Il est allé à la fin d'une /\d*recherche
nmjcman101
1

J , 44 octets

(m]\u:49+i.9),.(m=.,}.@|.)]\&.(|."1)u:97+i.9

Essayez-le en ligne!

J'ai essayé de générer numériquement un masque de 1 et zéro à utiliser pour l'indexation, mais le coût de se débarrasser de la ligne supplémentaire était élevé et j'ai abandonné:

   (9-.~i.18){0<:-/~(,|.)i.9
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Galen Ivanov
la source
1

Japt, 24 octets

Renvoie un tableau de lignes

9Æ´AçXÄ
c¡A°îYd#a
Vù y ê

Essaye-le


Explication

9Æ            :Map each X in the range [0,9)
  ´A          :  Prefix decrement A (initially 10)
    ç         :  Repeat
     XÄ       :  X+1
\n            :Assign to variable U
 ¡            :Map each element at index Y in U
  A°          :  Postfix increment A
    î         :  Repeat
      d       :  The character at codepoint
     Y #a     :  Y+97
c             :Concatenate with U
\n            :Assign to variable V
Vù            :Left pad each element in V to the length of the longest element
   y          :Transpose
     ê        :Palindromise

Alternatives

9õÈîZqÃú Ë+EòdEn#i)¬ù9Ãê

Essaye-le

9ÇòdZn#i)cZòÄ)¬Ãú ®éJ´Ãê

Essaye-le

Hirsute
la source
Je me demande maintenant si la construction horizontale n'aurait pas pu conduire à une solution plus courte! : \
Shaggy
1

QBasic , 87 octets

Une fonction anonyme qui ne prend aucune entrée et sortie sur la console.

For y=-8To 8:z=Abs(y):a$="123456789abcdefghi":?Mid$(a$,1,9-z)Spc(2*z)Mid$(a$,10+z):Next

Cette réponse est techniquement un polyglotte, et fonctionnera en VBA

Taylor Scott
la source
1

Befunge-93 , 314 308 octets

<p0+3*67p0+4*77p0+3*77p0-7*88p0-6*88"#v#v>"
"i        "11g1-21p56+1g1+56+1p28*1g1+28*1p  ^       >25*
"        1"92g1+82p56+2g1-56+2p28*2g1-28*2p91g00g`#v_^   >
"ihgfedcba "93p26*3g1-26*3p">^"88*7-0p88*7-4pv     >25*
"987654321 "14p26*4g1+26*4p26*4g12g`#v_            ^
                             >:#,_@#:<

Essayez-le en ligne!

Golfé 6 octets en plaçant un >avec l' pinstruction

ItsJ0el
la source
1

Matlab, 122 octets

function[r]=f,s=[49:57,'a':'i'];r=[];for i=1:9,r=[r;s(1:i),repmat(' ',[1,18-2*i]),s(19-i:18)];end,r=[r;flip(r(1:8,:))];end

Essayez-le en ligne!

DimChtz
la source
1

PowerShell 5.1, 70 69 64 57 octets

Merci Mazzy pour -7 octets

1..9+8..1|%{-join(1..$_+'  '*(9-$_)+' ihgfedcba'[$_..1])}

Il s'avère que le coller ensemble enregistre manuellement un octet. En faisant tout cela une méga-jointure, vous économisez également 5 autres. Fonctionne également en transformant une plage d'ints en char [] pour obtenir l'IA. Utiliser une plage sur les lettres réelles est de 5 octets de mieux.

Veskah
la source
1
essayez ceci: 1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}. La note ' '*(9-$_)contient 2 symboles d'espace
mazzy
1
@mazzy ooof, il manque cette double astuce spatiale. Je pensais à une variété d'énoncés mathématiques, mais la solution évidente ne m'est jamais venue à l'esprit.
Veskah
1

C (gcc) ,143 142 127 + 10 = 137 136 + 10 = 146 (drapeaux du compilateur) octets

-1 octet en remplaçant OU logique par opérateur au niveau du bit.

-5 octets grâce à Logern.

+9 octets pour corriger la ligne médiane, qui a été sortie deux fois.

char*s="123456789abcdefghi";G{for(;j<18;++j)putchar(i>j|j>17-i?s[j]:32);puts("");}f(){int i=0,j=0;for(;i++<8;)G;g(i+1,j);for(;i-->1;)G;}

Drapeau du compilateur:

-DG=g(i,j)

Cette macro factorise les occurrences de g(i,j): déclaration de fonction et appels.

Essayez-le en ligne!

Approche différente de la grande réponse de Pietu1998, score plus simple (et lisible), mais plus élevé.

Le point d'entrée est fonction f(); La fonction g()gère l'impression de chaque ligne consécutive.

Faisable un programme complet en renommant fàmain , mais il augmenterait encore le score.

Jolie version, macro Gdéveloppée:

char *s = "123456789abcdefghi";
int g(int i, int j) {
    for(; j < 18; ++j)
        putchar((i > j | j > 17 - i) ? s[j] : 32);
    puts(""); // Break the line -- shorter than putchar(10) or printf("\n")
}
int f() {
    int i = 0, j = 0; // j is constant, declared here to not have to declare and init it inside g()
    for(; i++ < 8;) // Upper half of the tie
        g(i, j);
    g(i + 1, j); // Median line
    for(; i-- > 1;) // Lower half; --i > 0 would also work for the condition
        g(i, j);
}
joH1
la source
137 mais +10 pour les drapeaux du compilateur
joH1
137 est le total, 127 octets de code et 10 octets d'indicateurs de compilation.
Logern
Oups désolé, ma mauvaise. Mise à jour maintenant!
joH1
@Logern J'ai pris la liberté de renommer la macro Gpour correspondre au nom de la fonction.
joH1
0

JavaScript (ES6), 76 octets

f=(x=y=0)=>y<17?(x>y^x++<17-y?x.toString(36)+[`
`[x%=18]]:' ')+f(x||!++y):''

Essayez-le en ligne!

Arnauld
la source
0

VBA, 75 octets

Une fonction de fenêtre immédiate VBE anonyme qui ne prend aucune entrée et sortie sur la console.

For y=-8To 8:z=Abs(y):a="123456789abcdefghi":Mid(a,10-z)=Space(2*z):?a:Next
Taylor Scott
la source
0

Gelée , 22 21 octets

9R€z⁶Zµạ106Ọ$Ṡ¡€Uṭ)ŒḄ

Essayez-le en ligne!

S'appuie sur le comportement involontaire (probable) selon lequel lorsque (signe) agit sur un personnage, il produit Python None. Pour cette raison, est une vérification d'un octet pour savoir si son argument est un entier différent de zéro puisqueNone Falsey est en Python. Si ce comportement est modifié, cela fonctionne également pour un octet de plus.

Fonction qui renvoie une liste de lignes.

dylnan
la source
0

Java 8, 107 octets

v->{for(int i=1,j;++i<19;)for(j=19;j-->0;)System.out.printf("%c",j>0?(j<i)!=(j<20-i)?32:106-j-j/10*39:10);}

Port de la réponse C de @ Pietu1998 , alors assurez-vous de lui donner un vote positif!

Essayez-le en ligne.

Kevin Cruijssen
la source
0

Python 2 , 97 94 octets

i=o="123456789abcdefghi";c=8
while c:i=i[:c]+' '*(9-c)*2+i[-c:];o=i+'\n'+o+'\n'+i;c-=1
print o

Essayez-le en ligne!

Publié uniquement comme alternative à l'utilisation eval()et parce que je l'ai finalement obtenu en dessous de 100. Commence essentiellement par la rangée du milieu, puis monte et descend en même temps.

ElPedro
la source