Faire un projecteur de l'alphabet!


66

Inspiré par un bug dans une solution à ce défi , votre défi est de produire ce texte exact:

                         ZYXWVUTSRQPONMLKJIHGFEDCBA
                        YXWVUTSRQPONMLKJIHGFEDCBA
                       XWVUTSRQPONMLKJIHGFEDCBA
                      WVUTSRQPONMLKJIHGFEDCBA
                     VUTSRQPONMLKJIHGFEDCBA
                    UTSRQPONMLKJIHGFEDCBA
                   TSRQPONMLKJIHGFEDCBA
                  SRQPONMLKJIHGFEDCBA
                 RQPONMLKJIHGFEDCBA
                QPONMLKJIHGFEDCBA
               PONMLKJIHGFEDCBA
              ONMLKJIHGFEDCBA
             NMLKJIHGFEDCBA
            MLKJIHGFEDCBA
           LKJIHGFEDCBA
          KJIHGFEDCBA
         JIHGFEDCBA
        IHGFEDCBA
       HGFEDCBA
      GFEDCBA
     FEDCBA
    EDCBA
   DCBA
  CBA
 BA
A
  • La première ligne aura 25 espaces, puis l'alphabet à l'envers à partir de la 26ème lettre ( ZYXWVUTSRQPONMLKJIHGFEDCBA), puis une nouvelle ligne.
  • La deuxième ligne aura 24 espaces, puis l’alphabet en arrière à partir de la 25ème lettre ( YXWVUTSRQPONMLKJIHGFEDCBA), puis une nouvelle ligne.
  • ...
  • La dernière ligne (26ème) n'aura pas d'espace, puis l'alphabet en arrière à partir de la 1ère lettre ( A), puis une nouvelle ligne.

Règles supplémentaires:

  • Votre programme peut utiliser n'importe quelle méthode de sortie autorisée.
  • Une nouvelle ligne et / ou une nouvelle ligne est autorisée.
  • Il doit y avoir une nouvelle ligne entre les lignes contenant les lettres, pas plus.
  • Les lettres doivent être toutes majuscules.

Comme pour le , la soumission la plus courte gagne. Bonne chance!

Classement:


3
Pour moi, cela ressemble à la lumière projetée par le signal de la chauve-souris
scottinet


Chaque ligne peut-elle avoir un espace supplémentaire devant elle?
HyperNeutrino

3
Chaque ligne pourrait-elle avoir des espaces de fin après la dernière lettre?
miles

1
@miles oui, c'est bien.
MD XF

Réponses:


19

05AB1E , 7 octets

Code:

₂žp.s1Λ

Utilise le codage 05AB1E . Essayez-le en ligne!

Explication

 žp.s      # Get the suffixes of ZYX...CBA
      Λ    # Using the canvas mode, print the
₂          # first 26 elements of the array
     1     # into the upper-right direction

2
@MDXF IMO, c'est une règle vraiment stupide
DJMcMayhem

3
Hmm ... Je suppose que je vais supprimer la règle, alors. statut-terminé
MD XF

2
Je pourrais proposer un PR documentant cette caractéristique lorsque je trouverai le temps. Cela semble être un bon moyen d'apprendre un peu de python à partir d'un code bien écrit et facile à lire
scottinet

6
Pourquoi žpexiste- t- il quand Auest d'or? BADUM tissss
Urne Octopus Magique

5
En utilisant 05AB1E, créez un fichier décrivant toutes ses caractéristiques, gagnez le code abrégé: P
Christian le

22

R , 67 55 octets

for(i in 26:1)cat(rep(" ",i-1),LETTERS[i:1],"
",sep="")

Essayez-le en ligne!


4
R bat Python sur un défi de chaîne? Agréable. +1 pour LETTERS
CriminallyVulgar

1
@CiminalVulgar c'est un défi très étrange; Haskell bat la cravate entre PHP et R, qui battent tous les deux Python ... au moins, Perl est en avance sur tous, comme on peut s'y attendre.
CR Drost

-2 octets si vous passez sepà s. Les fonctions rempliront automatiquement les arguments nommés s'il n'y a pas de collision
Punintended

1
@Punintended cela ne fonctionnera pas à cause de l' ...argument; les arguments qui viennent avant ...(généralement) ont une correspondance partielle, et ceux qui suivent ne le font pas. Je crois qu'il y a quelques exceptions, mais catn'en est pas une
Giuseppe

@ Giuseppe Je ne vois pas de...
MilkyWay90


15

V , 13 , 11 octets

¬ZAòY>HGpxl

Essayez-le en ligne!

Hexdump:

00000000: ac5a 41f2 593e 4847 7078 6c              .ZA.Y>HGpxl

Écrit depuis mon téléphone: P.

¬ZA         " Insert the alphabet backwards
   ò        " Recursively:
    Y       "   Yank this current line
     >H     "   Add one space to every line
       G    "   Move to the last line in the buffer
        p   "   Paste the line we yanked
         x  "   Delete one character
          l "   Move one character to the right, which will throw an error on 
            "   the last time through, breaking the loop

1
Je les fais aussi sur mon téléphone, +1
Stan Strum

12

PowerShell , 42 octets

25..0|%{' '*$_+-join[char[]]((65+$_)..65)}

Essayez-le en ligne!

Explication:

25..0|%{                                 } # Loop from 25 to 0
                             (65+$_)..65   # Construct a range of the specific ASCII codes
                    [char[]](           )  # Cast that as a character array
               -join                       # that has been joined together into a string
        ' '*$_+                            # Prepended with the correct amount of spaces


10

/// , 105 97 octets

/:/\\\\*//#/:Z:Y:X:W:V:U:T:S:R:Q:P:O:N:M:L:K:J:I:H:G:F:E:D:C:B:A//\\*/\/\/_____#
\/ //_/     //*#

Essayez-le en ligne!

Explication

/// ne connait qu'une commande, /<pattern>/<substitution>/<text>remplace toutes les occurrences de <pattern>in <text>avec <substitution>. En outre, \peut être utilisé pour échapper des caractères.

Code raccourci pour plus de simplicité:

/:/\\\\*//#/:E:D:C:B:A//\\*/\/\/__#
\/ //_/  //*#

La première commande /:/\\\\*/remplace :par \\*dans le code suivant. Cela donne:

/#/\\*E\\*D\\*C\\*B\\*A//\\*/\/\/__#
\/ //_/  //*#

Puis /#/\\*E\\*D\\*C\\*B\\*A/remplace #par \*E\*D\*C\*B\*A:

/\\*/\/\/__\*E\*D\*C\*B\*A
\/ //_/  //*\*E\*D\*C\*B\*A

Puis /\\*/\/\/__\*E\*D\*C\*B\*A<newline>\/ /remplace \*par //__*E*D*C*B*A<newline>/:

/_/  //*//__*E*D*C*B*A
/ E//__*E*D*C*B*A
/ D//__*E*D*C*B*A
/ C//__*E*D*C*B*A
/ B//__*E*D*C*B*A
/ A

Remarque: je devais utiliser \*pour le remplacement. Comme *fait également partie de la substitution, cela générerait une boucle infinie si je ne fais que remplacer *.

Ensuite, la commande /_/ /remplace _par des espaces et /*//supprime tous les éléments suivants *:

EDCBA
/ E//    EDCBA
/ D//    EDCBA
/ C//    EDCBA
/ B//    EDCBA
/ A

La commande suivante ne /#//remplace #rien. Comme il n'y a pas #de code, cela ne fait rien. Ceci est juste ici pour supprimer les deux lignes //de début du code. Cela laisse

EDCBA
/ E//    EDCBA
/ D//    EDCBA
/ C//    EDCBA
/ B//    EDCBA
/ 

Ensuite, la commande / E//supprime <space>E, donc cela laissera le code

    EDCBA
   DCBA
/ D//   DCBA
/ C//   DCBA
/ B//   DCBA
/ 

Similaire / D//supprime <space>D:

    EDCBA
   DCBA
  CBA
/ C//  CBA
/ B//  CBA
/ 

/ C//:

    EDCBA
   DCBA
  CBA
 BA
/ B// BA
/ 

/ B//:

    EDCBA
   DCBA
  CBA
 BA
A
/ 

Et la dernière commande est incomplète, donc elle ne fait rien:

    EDCBA
   DCBA
  CBA
 BA
A

Mêmes longueurs que le C # et les réponses de brainfuck: D
Conor O'Brien

9

Haskell, 53 52 octets

f(a:b)=(b>>" ")++a:b++'\n':f b
f x=x
f['Z','Y'..'A']

Essayez-le en ligne!

Comment ça fonctionne

f['Z','Y'..'A']        -- call f with the full backwards alphabet

f(a:b)=                -- let `a` be the first char and `b` the rest. Return
   (b>>" ") ++         -- replace each char in b with a space, followed by
   a:b ++              -- the input string, followed by
   '\n' :              -- a newline, followed by
   f b                 -- a recursive call of `f` with `b`
f x=x                  -- stop on an empty input string

Pourquoi ne f['Z'..'A']fonctionne pas ?
Conor O'Brien

1
@ ConorO'Brien: [a..b]commence par aet collecte tous les successeurs ( +1pour les entiers, le prochain caractère pour les caractères, etc.) jusqu'à b. Si a > bc'est une liste vide. Cependant, vous pouvez également spécifier la deuxième valeur (qui peut être plus petite) à partir de laquelle un incrément / décrément est calculé. [1,3..8]-> [1,3,5,7], [15,10..0]-> [15,10,5,0], ou ['Z','Y'..'A']qui est l'alphabet majuscule arrière.
nimi

Ah, je vois maintenant. Merci!
Conor O'Brien


7

JavaScript (ES6), 83 77 76 octets

f=(n=0,p='')=>n<26?f(++n,p+' ')+p+`ZYXWVUTSRQPONMLKJIHGFEDCBA
`.slice(~n):''

o.innerText = f()
<pre id=o>


Je voulais vous suggérer une amélioration, mais j'ai ensuite réalisé que nos approches étaient très différentes. J'espère que ça ne vous dérange pas.

@ThePirateBay Pas de problème!
Arnauld

7

Gelée , 12 octets

ØAµ⁶ṁḊ;ṚµƤṚY

Essayez-le en ligne!

ØAµ⁶ṁḊ;ṚµƤṚY  Main Link
ØA            "ABC...XYZ"
         Ƥ    For each prefix,
  µ⁶ṁḊ;Ṛµ     Monadic Link
   ⁶          ' '
    ṁ         (with automatic repetition) molded to the shape of
     Ḋ        All but the first letter of the input (repeat - 1)
      ;       With the input          appended to it
       Ṛ                     reversed
           Y  Join on newlines

-3 octets grâce aux miles



@ LeakyNun Oh juste cool merci!
HyperNeutrino

Oui, autre utilisation du préfixe rapide. 12 octets puisque le moule se remodellera ici en utilisant implicitement la longueur.
miles

@LeakyNun En fait, malheureusement, cela invaliderait ce fichier car il ne pourrait pas y avoir d'espace supplémentaire (il faudrait 2 octets pour le réparer)
HyperNeutrino

7

brainfuck , 105 octets

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

Essayez-le en ligne!

Minified et formaté:

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

Version lisible:

[
  pre-initialize the tape with the values 10 90 32 >26<
  C_NEWLINE: 10
  V_ALPHA: 90
  C_SPACE: 32
  V_COUNTER: 26

AS:

  10 = 8 *  1 + 2
  90 = 8 * 11 + 2
  32 = 8 *  4 + 0
  26 = 8 *  3 + 2
]

8 ++++++++ [
  *  1 >+
  * 11 >+++++++++++
  *  4 >++++
  *  3 >+++
<<<<-]
PLUS 2 >++
PLUS 2 >++
PLUS 0 >
PLUS 2 >++

UNTIL V_COUNTER == 0 [
  COPY V_COUNTER to RIGHT and RIGHT_RIGHT
  [->+>+<<]
  TAPE: 10 V_ALPHA 32 >0< V_COUNTER_R V_COUNTER_RR
  V_COUNTER_R SUB 1 TIMES: >-[-
     PRINT C_SPACE <<.
  >>]
  TAPE: 10 V_ALPHA 32 0 >0< V_COUNTER_RR
  V_COUNTER_RR TIMES: >[-
    PRINT V_ALPHA <<<<.
    DECREMENT V_ALPHA -
    INCREMENT V_COUNTER_R >>>+
  >]
  TAPE: 10 V_ALPHA 32 0 V_COUNTER_R(26) >0<
  V_COUNTER_R SUB 1 TIMES: <-[-
    INCREMENT V_COUNTER <+
    INCREMENT V_ALPHA <<+
  >>>]
  PRINT C_NEWLINE <<<<.
>>>]


6

Poétique , 601 octets

one night i camped a bit
throughout all the forest now
the sweet sights
i saw giant things
i saw little small things
here i am
seated around all my trees i saw
i sleep
i sle-e-p
sleep in a cabin
i am sleep-y
i sleep a bit
i awaken in bed
i stand
i walk
i am ready
i saw a vision of a dragon
i am fooled
i know i am
should i f-ight
i f-light
i did f-light
i did a flight
go away,i do imply
i*m afraid
i run
i leave
i flee
i am timid
i*m just a person,not toughie-tough-guy
no,never
i*m waste
i am stupid
a quitter i was
i am stupid
i*m turning around
i do not appreciate camping
i cry
i am crying
no
no

Poetic est un esolang que j'ai créé en 2018 pour un projet de classe. Il s'agit d'un dérivé du brainfuck dans lequel les longueurs de mots correspondent aux commandes brainfuck (et les commandes +, -,> et <ont chacune un argument à 1 chiffre).

Le fait que seule la longueur du mot dicte les commandes signifie que techniquement, j’aurais pu créer un programme entièrement composé de non-mots (c.-à-d. La lettre X autant de fois que nécessaire, avec des espaces entre les mots), mais j’ai voulu créer un programme intéressant. un poème en vers libre qui n’ajoute pas d’octets inutiles.

Si vous voulez l'essayer en ligne (ce qui est la moitié du projet de classe en premier lieu), consultez mon interprète en ligne !


Pourquoi est-ce non-concurrent?
pppery

La langue a été créée après le défi.
JosiahRyanW


Hm, alors je suppose que cela me motive davantage à utiliser Poetic comme langage de programmation! Il h.
JosiahRyanW

5

05AB1E , 10 octets

žpDvÐg<ú,¦

Essayez-le en ligne!

Explications:

žpDvÐg<ú,¦
žp           Push the uppercased alphabet, reversed
  D          Duplicate
   v         For each letter (we just want to loop 26 times, so we use the 
                already pushed alphabet for that purpose)
    Ð        Triplicate
     g<      Length of the string - 1
       ú     Add that number of spaces at the beginning of the string
        ,    Print with newline
         ¦   Remove the 1st element of the remaining copy of the string

5

Perl 6 , 37 octets

Sauvegardé 9 octets grâce à @Massa.

say " "x$_,chrs $_+65...65 for 25...0

Essayez-le en ligne!

Explication: 25...0 est une plage de 25 à 0 (comme prévu). Nous parcourons cette plage en disant (= en imprimant avec une nouvelle ligne) que de nombreux espaces et la chaîne de caractères contenant des codes ASCII ( chrs) à partir de 65 + ce nombre ( $_+65...65).


1
25...0 est le moyen le plus court :-)
Massa

essayez say " "x$_,chrs $_+65...65 for 25...0:-)
Massa

Merci beaucoup! Je n'ai jamais su à ce sujet! Et la forme sous est meilleure aussi (dommage que j'ai fait celle-ci du haut de ma tête). (C'est pourquoi j'aime utiliser Perl 6 pour codegolf, je découvre toujours quelque chose de nouveau.)
Ramillies

4

Charbon de bois , 19 à 11 octets

-8 octets grâce à ASCII uniquement.

F²⁶«P⮌…α⊕ι↗

Essayez-le en ligne! Le lien est vers la version commentée.



Attendez noooooo, il y a un espace de premier plan
ASCII uniquement

Fils de ... J'ai besoin de regarder à travers chaque commande et opérateur que Charcoal a. > _> Merci!
totalement humain


1
@ ASCII-only CycleChop... mais vous avez oublié Increment(ou peu importe
comment

4

Perl 5 , 36 octets

Code de 35 octets + 1 pour -p.

$\=$"x$-++.($a=$_.$a).$/.$\for A..Z

Remarque : TIO ne prend pas en charge les entrées vides . Une nouvelle ligne est fournie. Il en résulte une nouvelle ligne, mais si vous utilisez une ligne de commande avec une entrée vide, cela n'apparaît pas .

Essayez-le en ligne!



4

Cubix , 43 46 octets

$/\;u:\s/':(!$u;:'@^!@Wu;oSU;o+<u(;;oN;(!|

Essayez-le en ligne!

Cubifié

      $ / \
      ; u :
      \ s /
'  : ( ! $ u ; : ' @ ^
! @ W u ; o S U ; o + <
u ( ; ; o N ; ( ! | . .
      . . .
      . . .
      . . .

Regarde le courir

J'ai réussi à en réduire un peu plus, mais c'était un peu plus difficile que je ne le pensais. Il y a un personnage de remplacement après la première citation pour me donner 26.

  • '<sub> poussez 26 sur la pile comme numéro de base
  • :(! dupliquer la base comme un compteur, décrémenter, tester la vérité
  • usur true, passez la $commande et tournez à droite
    • So;u poussez 32, affichez le caractère, sautez 32 et tournez à droite sur le décrément
  • $sur faux saut la ucommande suivante
  • ;:'@^ pop, dupliquez le numéro de base, mettez 64 sur la pile et redirigez-vous vers un itinéraire tortueux
  • $\s/:\/u;$c'est l'ordre des étapes sur la face supérieure. Cela revient à échanger le compteur avec le 64. Se termine par un saut sur la redirection qui le met ici.
  • <+o;U rediriger pour ajouter, caractère de sortie, pop, demi-tour à gauche
  • (!décrémentez, testez la vérité. Si true commence sur un chemin qui fait demi-tour et revient à la redirection.
  • |(;No sur false, reflect, test redondant, décrément redondant, pop, push 10 et caractère de sortie
  • ;;(u!@Wsautez jusqu'au nombre de base, décrémentez, tournez à droite sur le test de vérité, arrêtez-vous si false sinon changez de voie sur la copie au début. Rincer et répéter.

4

Python, 83 octets

[print(' '*i+''.join([chr(64+i)for i in range(i+1,0,-1)]))for i in range(25,-1,-1)]

Ma première réponse sur codegolf :)


1
Bienvenue à PPCG! Bonne réponse!
Conor O'Brien



3

JavaScript, 75 74 octets

1 octet économisé grâce à Rick Hitchcock

f=(a=65,b='',c)=>a>90?'':f(a+1,b+' ',c=String.fromCharCode(a)+[c])+`
`+b+c

Essayez-le en ligne!


Enregistrez un octet en initialisant b( b=''), puis en bsupprimant les crochets.
Rick Hitchcock

@ RickHitchcock. Merci.

3

Perl 5 , 49 octets

$_=$"x26 .join'',reverse A..Z,Z;say while s/ \S//

Essayez-le en ligne!


On dirait que vous manquez le premier A, mais semble que cela puisse être corrigé en passant $"x25à $"x26!
Dom Hastings

Quand j'ai ajouté le supplément Z, j'ai oublié de rendre compte de cela.
Xcali

3

Pyke , 8 octets

G_.<XFo}h-

Essayez-le ici!

           -  o = 0
G_         -    reversed(alphabet)
  .<       -   suffixes(^)
    XF     -  for i in ^:
      o    -      o++
       }   -     ^ * 2
        h  -    ^ + 1
         - -   i.lpad(" ", ^)
           - for i in reversed(^):
           -  print i

Je peux voir le bon langage faire cela dans 6 octets si ils avaient un construit pour prepend n spaces to stringainsi que ce que fait Pyke


3

PHP ( 63 58 55 octets)

C'est peut-être mon étrange coin préféré de PHP, un coin hérité de Perl:

for($c=A;$c!=AA;$q="$s$z 
$q",$s.=" ")$z=$c++.$z;echo$q;

Ceci sort la nouvelle ligne de fin, comme cela est explicitement autorisé. Ceci peut être exécuté php -rpour sauvegarder l’ouverture <?phpnécessaire pour le mettre dans un fichier.

Explication: lorsqu'une variable contenant la chaîne 'A'est incrémentée en PHP, elle devient 'B', puis, 'C'et ainsi de suite jusqu'à ce que le 'Z'devienne 'AA'. Il n'y a aucun chiffre avant 'A'de commencer dans cette algèbre écervelée, et l'opérateur de décrémentation ne permet pas d' annuler, donc nous gagnons l'inverser progressivement alphabet $z(qui par défaut NULLqui quand il est concaténé avec une chaîne se comporte comme la chaîne vide - la il en va de même avec $set $q). Les espaces sont accumulés dans $set la chaîne entière est accumulée dans la variable, $qce qui signifie que nous devons y faire écho à la fin.

Merci à Titus pour avoir joué au golf avec mes accolades et m'avoir dit que je n'avais pas besoin de prendre de pénalité pour les drapeaux d'évaluation en ligne comme -r.


1
C’est 57 octets, si vous utilisez un saut de ligne sous Linux. -rest libre. Deux octets plus courts:for($c=A;$c!=AA;$q="$s$z\n$q",$s.=" ")$z=$c++.$z;echo$q;
Titus le

@Titus merci, vous a félicité pour sa réponse.
CR Drost

nm. Notez juste que -Ret ne-F sont pas libres. Voir codegolf.meta.stackexchange.com/questions/2424/…
Titus le

Je crois que vous pouvez enregistrer un octet si vous utilisez $c<AA.
Ismael Miguel

1
@ IsmaelMiguel désolé, j'étais trop concis. Je pensais en écrivant que "peut-être qu’il ya un moyen de remuer les choses sans gagner d’octets pour que le cas A se produise en premier et que nous puissions ensuite détecter AA contre B mais je ne pense pas que je sois suffisamment intelligent pour le voir. " Je ne voulais pas être désinvolte et je vais essayer de faire attention à cela à l'avenir.
CR Drost

3

SOGL V0.12 , 10 8 octets

Z±{Xf}⁰¼

Essayez-le ici!


Juste curieux, combien de temps dure la version compressée?
Caird coinheringaahing

@cairdcoinheringaahing TL; DR beaucoup trop longtemps. La compression SOGL aspire (et n'est pas spécialement conçue pour) les tâches répétitives. Ce serait très difficile à dire car la compression n’est pas automatisée (l’automatisation obligerait à prendre des 701 choose xtentatives pour tout nombre entier x) mais une tentative approximative était de 450 octets: P
dzaima


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.