Il m'a fallu beaucoup de temps pour faire cela, pls like. (Commentaires YouTube # 1)

84

Hold up ..... ce n'est pas la traîne.


Contexte

Ces jours-ci sur YouTube, les sections de commentaires sont jonchées de tels modèles:

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

Stringest un simple espace réservé et fait référence à toute combinaison de caractères. Ces schémas sont généralement accompagnés d’un It took me a lot of time to make this, pls likeou de quelque chose, et souvent le PO réussit à accumuler un certain nombre de goûts.


La tâche

Bien que vous ayez le talent pour accumuler des votes positifs sur PPCG grâce à vos talents de golfeurs charmants, vous n’êtes certainement pas le premier choix pour faire des remarques spirituelles ou faire référence aux memes dans les sections de commentaires de YouTube. Ainsi, vos commentaires constructifs faits en pensant délibérément ne rapportent que peu ou pas de «j'aime» sur YouTube. Vous voulez que cela change. Vous avez donc recours aux schémas clichés susmentionnés pour atteindre votre ultime ambition, mais sans perdre de temps à essayer de les écrire manuellement.

En termes simples, votre tâche consiste à prendre une chaîne, disons s, et des 2*s.length - 1sous-chaînes de sortie de s, délimitées par une nouvelle ligne, de manière à respecter le modèle suivant:

(pour s= "Bonjour")

H
He
Hel
Hell
Hello
Hell
Hel
He
H

Contribution

Une seule corde s. Les valeurs par défaut de la communauté s’appliquent. Vous pouvez supposer que la chaîne d'entrée ne contiendra que des caractères ASCII imprimables.


Sortie

Plusieurs lignes séparées par une nouvelle ligne, constituant un motif approprié, comme expliqué ci-dessus. Les valeurs par défaut en sortie de la communauté s’appliquent. Les lignes vides de début et de fin (ne contenant ni caractères ni caractères ne pouvant être vus, comme un espace) dans la sortie sont autorisées.


Cas de test

Un cas de test multi-mots:

Input => "Oh yeah yeah"

Output =>

O
Oh
Oh 
Oh y
Oh ye
Oh yea
Oh yeah
Oh yeah 
Oh yeah y
Oh yeah ye
Oh yeah yea
Oh yeah yeah
Oh yeah yea
Oh yeah ye
Oh yeah y
Oh yeah 
Oh yeah
Oh yea
Oh ye
Oh y
Oh 
Oh
O

Notez qu'il existe des distorsions apparentes dans la forme de la sortie du cas de test ci-dessus (par exemple, la ligne deux et la ligne trois de la sortie semblent identiques). Ce sont parce que nous ne pouvons pas voir les espaces blancs de fuite. Votre programme n'a PAS besoin d'essayer de réparer ces distorsions.


Critère gagnant

C'est du , donc le code le plus court en octets dans chaque langue gagne!

Arjun
la source
19
Je prévois de faire quelques commentaires supplémentaires sur YouTube à l’avenir; d'où le YouTube Comments #1dans le titre.
Arjun
1
Est-il permis de retourner un tableau de lignes?
quelqu'un
2
Pouvons-nous prendre les entrées comme un tableau de caractères et renvoyer un tableau de tableaux de caractères?
Shaggy
3
En lien étroit
Giuseppe le
3
L'entrée peut ""-elle être ? Qu'en est-il d'un seul personnage comme "H"? Si oui, quel devrait être le résultat pour ces deux cas?
AdmBorkBork

Réponses:

103

brainfuck , 32 octets

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

Essayez-le en ligne!

La même boucle est utilisée pour les deux moitiés du motif.

Explication:

,             Take first input character as initial line
[             Until line to output is empty:
  [<]>        Move to beginning of line
  [.>]        Output all characters in line
  ++++++++++. Output newline
  ,           Input next character
  [>>]        Move two cells right if input character nonzero
  <[-]        Otherwise remove last character in line
  <           Move to new last character in line
]
Nitrodon
la source
2
C'est tout simplement génial. J'essayais de faire quelque chose dans le brainfuck, mais il est sorti environ 10 fois plus longtemps et ne fonctionne toujours pas correctement.
ElPedro
34
Jamais pensé que je verrais un défi où la réponse de brainfuck était en fait de marquer un travail compétitif, génial!
Points d'interrogation
54

JavaScript (ES6), 36 octets

f=([c,...r],s=`
`)=>c?s+f(r,s+c)+s:s

Essayez-le en ligne!

Commenté

f = (             // f is a recursive function taking:
                  //   the input string split into:
  [c,             //     c   = next character (may be undefined if we've reached the end)
      ...r],      //     r[] = array of remaining characters
  s = `\n`        //   the output string s, initialized to a linefeed
) =>              // 
  c ?             // if c is defined:
    s +           //   append s (top of the ASCII art)
    f(r, s + c) + //   append the result of a recursive call to f, using r[] and s + c
    s             //   append s again (bottom of the ASCII art)
  :               // else:
    s             //   append s just once (this is the final middle row) and stop recursion
Arnauld
la source
3
très belle réponse: D
lois6b
10
@MartinBarker Sous Windows, j'utilise Notepad ++ avec la fin de ligne par défaut Unix (LF). Problème résolu une fois pour toutes. :)
Arnauld
3
Impressionnant! Pouvez-vous écrire une explication pour ceci pour ceux qui sont des débutants complets à JS?
Akhoy
3
@Akhoy J'ai ajouté une version commentée.
Arnauld
3
Je vous remercie. Beaucoup plus clair maintenant.
Akhoy
47

05AB1E (ancien) ,  4  3 octets

Barré &nbsp;4&nbsp;n'est plus 4 :)

η.∊

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

η     # Get the prefixes of the (implicit) input-string
 .∊   # Vertically mirror everything with the last line overlapping
      # (which implicitly joins by newlines in the legacy version of 05AB1E)
      # (and output the result implicitly)

Dans la nouvelle version de 05AB1E, et explicit »est requis après le η, c’est pourquoi j’utilise la version héritée de 05AB1E ici pour enregistrer un octet.

Kevin Cruijssen
la source
7
Hmm, cela semble être 6 octets en UTF8:\xce\xb7\x2e\xe2\x88\x8a
rubenvb
10
@rubenvb En UTF-8, c'est bien plus. 05AB1E utilise, tout comme certains langages de programmation utilisés dans d’autres réponses (comme Jelly; Japt; Charcoal) son propre code source (qui est CP-1252 dans le cas de 05AB1E), où chacun des 256 caractères qu’il connaît est un octet unique.
Kevin Cruijssen le
Très bien, ça va :).
rubenvb
@KevinCruijssen PHP semble penser que ces caractères ne sont pas valides pour le CP-1252, mais pourraient tout simplement être un bogue PHP: 3v4l.org/UC1QE
hanshenrik
7
@hanshenrik Bonne question. Ce n'est en effet pas le CP-1252, mais bien l' encodage 05AB1E , qui est l'encodage personnalisé qu'il utilise. Les octets de ce code en hex sont 08 2e 17, vous pouvez les exécuter et les vérifier avec l’ --osabieindicateur: tio.run/…
Adnan
21

IBM PC DOS, assemblage 8088,  44  43

d1ee ad8b d6b4 0948 8af8 8ac8 d0e1 49b3 243a cf7d 024e
4e46 861c cd21 861c 52ba 2901 cd21 5ae2 eac3 0d0a 24

Non assemblé:

    SHR  SI, 1              ; point SI to DOS PSP at 80H (SI intialized at 100H)
    LODSW                   ; load arg length into AL, advance SI to 82H
    MOV  DX, SI             ; save start of string pointer
    MOV  AH, 9              ; DOS API display string function
    DEC  AX                 ; remove leading space from string length
    MOV  BH, AL             ; save string len in BH (AL gets mangled by INT 21H,9)
    MOV  CL, AL             ; set up loop counter in CL
    SHL  CL, 1              ; number of lines = 2 * string length - 1
    DEC  CX
    MOV  BL, '$'            ; end of string marker
LINE_LOOP:
    CMP  CL, BH             ; if CL >= string length, ascend
    JGE  ASCEND
    DEC  SI                 ; descend by backing up two places (always increments)
    DEC  SI                 ; (this is fewer bytes than 'SUB SI, 2' or two branches)
ASCEND:
    INC  SI                 ; increment current string position
    XCHG BL, [SI]           ; swap current string byte with end of string delimiter
    INT  21H                ; write substring to console
    XCHG BL, [SI]           ; restore string byte
    PUSH DX                 ; save output string pointer
    MOV  DX, OFFSET CRLF    ; load CRLF string
    INT  21H                ; write to console
    POP  DX                 ; restore output string pointer
    LOOP LINE_LOOP          ; move to next line
    RET
CRLF DB 0DH,0AH,'$'

Explication

Boucle 2 * input length - 1pour chaque ligne. La fonction d'affichage de chaîne de l'API DOS ( INT 21H,9) écrit une $chaîne -terminée à l'écran. Ainsi, à chaque boucle, le caractère situé après la dernière affichée est échangé avec le terminateur de fin de chaîne.

Le compteur de boucle est comparé à la longueur de la chaîne. Si elle est supérieure (ce qui correspond à la partie ascendante de la sortie), la position chaîne / échange est incrémentée, sinon elle est décrémentée (en fait, il -1-1+1s'agit d'octets moins qu'une structure de branchement if / else).

Programme exécutable autonome, prend la chaîne d'entrée à partir de la ligne de commande.

Sortie

enter image description here

Télécharger YT2.COM (43 bytes)

640 Ko
la source
1
La plupart des versions DOS ont SI = 100h lors du chargement d’un fichier COM. Cela peut vous faire économiser un octet en remplaçant la première instruction par SHR SI, 1.
gastropner
@gastropner très intelligent! De toute façon, l'original ne fonctionnera pas sous DOS 1.0, car il compte 0 comme valeur de CH (l'initialisation coûterait +2 octets, ce qui ne vaut pas la peine pour DOS 1). Mis à jour avec la nouvelle version!
640KB
Devez-vous entrer la date à chaque fois que vous ouvrez le terminal?
user14492 le
1
@ user14492 ha, non! J'ai juste oublié de recadrer cette partie de la capture d'écran DOS!
640 Ko le
19

Python 2 , 60 52 octets

f=lambda s,n=1:s[n:]and[s[:n]]+f(s,n+1)+[s[:n]]or[s]

Essayez-le en ligne!

Python 3.8 (pré-version) , 50 octets

f=lambda s,n=1:s>(x:=s[:n])and[x,*f(s,n+1),x]or[s]

Essayez-le en ligne!

TFeld
la source
2
Cela dépend-il d'une prochaine fonctionnalité de 3.8? Quelle caractéristique?
Alexis
7
Ce @alexis utilise une expression d'affectation : x:=s[:n].
Arnauld
1
Ah, je le vois maintenant merci :-) J'ai déjà lu cette fonctionnalité avec impatience. Ça me manque toujours de ma journée C ...
alexis
1
Ceux-ci n'impriment cependant pas la sortie. Ils font juste le tableau, non?
Jaden Travnik
@JadenTravnik Python copie automatiquement le dernier résultat d'expression s'il s'exécute de manière interactive via une console
Xeverous
18

MATL , 8 octets

nZv"G@:)

Essayez-le en ligne!

S'il vous plaît, comme cet article pour le smiley :)dans le code, cela m'a pris beaucoup de temps pour faire.

n  % Length of the input string
Zv % Symmetric range ([1 2 ... n ... 1])
"  % For each k in above range
G  % Push input
@: % Push [1 2 ... k]
)  % Index
Sanchises
la source
17

J , 11 octets

Fonction de préfixe tacite anonyme. Retourne une matrice de caractères complétée par des espaces.

[:(}:,|.)]\

Essayez-le en ligne!

]\ la liste des préfixes

[:() Appliquer la fonction suivante à cette liste

|. la liste inverse

, préfixé avec

}: la liste restreinte (sans dernier élément)

Adam
la source
18
[:(et l' }:,|air si triste…
Adám le
Mais c'est (}: qui est une personne heureuse avec une moustache
élégante
13

Perl 6 , 31 octets

{[\~](@_)[0...@_-1...0]}o*.comb

Essayez-le en ligne!

Bloc de code anonyme qui prend une chaîne et retourne une liste de lignes.

Explication:

{                      }o*.comb   # Pass the list of characters into the codeblock
 [\~](@_)                 # Triangular reduce by concatenation
                          # e.g. The list [1,2,3,4] turns into [1,12,123,1234]
         [0...@_-1        # Return the elements from 0 to length of string minus 1
                  ...0]   # And back down to 0
Jo King
la source
5
Il est amusant de voir que Perl, même golfé, figure parmi les concurrents les plus lisibles.
cessé de tourner à l'envers
7
@ceasedtoturncounterclockwis Eh bien, c'est Perl 6. La réponse à Perl 5 est toujours illisible
Jo King,
12

Japt -R , 4 octets

å+ ê

Cumulative réduire sur une chaîne.

-1 octet grâce à @Shaggy

Essayez-le en ligne!

Quintec
la source
Sceptique sur le "-R" qui doit être inclus dans la chaîne (sans cela, la sortie ne fonctionne pas)
Flying Thunder
3
@FlyingThunder Ne soyez plus sceptique :) voir ici
Quintec
@Quintec, j'ai commencé à relier les drapeaux de mes en-têtes de solution à cette méta-publication pour essayer de préempter ce genre de commentaires.
Shaggy
1
Assez sûr convention est <langue> + -flagou <langue> -flag. Aussi: | J'avais oublié que la réduction cumulative était une chose, je jure que j'ai sauté dessus chaque fois que je l'ai vue
ASCII uniquement
@ ASCII-only Pareillement, je ne m'en suis souvenu que parce que je pensais comment résoudre ce problème dans APL et que je me demandais si Japt avait cette fonctionnalité intégrée. De plus, n’ai-je pas utilisé <langue> -flag?
Quintec
11

Japt -R , 9 7 octets

-2 octets grâce à Shaggy

Êõ@¯XÃê

Essayez-le en ligne!

ASCII seulement
la source
7 octets
Shaggy le
1
@Shaggy oh, attends ... Ãest une chose
ASCII seulement
Un autre 300 représentants sur son chemin dès que cette question est éligible pour une prime.
Shaggy
1
@Quintec, la réduction cumulative fonctionne également sur les chaînes, vous n'avez donc pas besoin de vous séparer au début. Je dirais aussi que c'est assez différent pour justifier de le poster vous-même.
Shaggy
10

Perl 5 ( -p), 26 octets

s,.,$\=$`.$/.$\;"$`$&
",ge

TIO

Nahuel Fouilleul
la source
10

Haskell, 52 50 44 octets

f x=unlines$init<>reverse$scanr(\_->init)x x

Essayez-le en ligne!

Joseph Sible
la source
Bienvenue sur le site. initsnécessite une importation pour que vous ayez besoin d'ajouter import Data.Listou quelque chose de similaire.
Wheat Wizard
@ SriotchilismO'Zaic Je ne savais pas s'il était nécessaire de compter ou non. Ajouté, merci!
Joseph Sible
4
De plus, je devrais mentionner que nous avons une salle de discussion pour discuter du golf avec Haskell. Si vous avez des idées ou des questions, c'est un endroit formidable.
Wheat Wizard
1
Je n'arrive pas à croire que tu import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
aies dit
9

R , 79 65 62 58 octets

write(substring(s<-scan(,""),1,c(1:(r=nchar(s)),r-1:r)),1)

Essayez-le en ligne!

-14 par la connaissance des fonctions supérieures de Giuseppe

-3 avec indexation plus propre

-4 grâce à Nick Kennedy et au déménagement de Giuseppe vers scanetwrite

Éviter les boucles (et substr) est bien.

Criminellement vulgaire
la source
2
boucles sont complètement inutiles, comme cela est sapply- substringfera ce que vous voulez (avec une ligne supplémentaire vide arrière), et pour 65 octets ! Je n'aurais certainement pas pensé à substringsi je n'avais pas vu votre bon usage d' substrici.
Giuseppe
1
Haha, bonne prise! Je pense que vos modifications vous en ont appris davantage sur les fonctions de remplacement pour le même travail que nulle part ailleurs à ce stade.
CriminallyVulgar
2
Haha, R a une quantité stupide de synonymes avec des différences subtiles. Chaque fois que je sens que je connais le meilleur outil pour le poste, je trouve autre chose de légèrement meilleur dans un cas bizarre ...
Giuseppe
3
Que diriez-vous d' essayer en ligne! en utilisant scanet write? Seulement 59 octets!
Nick Kennedy
1
@ NickKennedy 58 octets si vous remplacez ""par 1.
Giuseppe
7

Gelée , 5 à 4 octets

-1 octet grâce à @JonathanAllan !

¹ƤŒḄ

Essayez-le en ligne! Je pense que ceci est ma deuxième réponse de gelée? Je ne sais pas si c'est optimal. Je suis plus convaincu que c'est optimal. Retourne un tableau de lignes.

Explication

¹ƤŒḄ     input: "Hi!"
¹Ƥ       prefixes of the input: [["H"], ["H", "i"], ["H", "i", "!"]]
  ŒḄ     bounce, using each array: [["H"], ["H", "i"], ["H", "i", "!"], ["H", "i"], ["H"]]

Une autre approche, proposée par @JonathanAllan, consiste à ;\ŒḄréduire cumulativement ( \) la concaténation ( ;), ce qui constitue un autre moyen de générer des préfixes.

Conor O'Brien
la source
Nous sommes autorisés à produire un tableau de lignes, de sorte que vous pouvez cogner Ysur le code (je fais le pied de page soit ÇYou ÇŒṘd'éviter l' impression fracassant implicite d'un programme complet). Ceci est également implémenté ;\ŒḄde la même manière que pour le même nombre d'octets (vous pouvez également transmettre l'argument comme "blah"si Jelly l'interprétait comme une liste de caractères - le vôtre est en fait une liste de listes de caractères, comme vous le verrez si vous faites le pied de page ÇŒṘ)
Jonathan Allan
@ JonathanAllan merci! très intéressant :)
Conor O'Brien le
7

Python 3.8 (pré-version) , 48 octets

lambda s,r='':(l:=[r:=r+c for c in s])+l[-2::-1]

Essayez-le en ligne!

Utilise des expressions d’affectation avec :=pour accumuler une liste de préfixes , puis de nouveau pour sauvegarder le résultat afin de concaténer son inverse (sans le premier caractère).

Python 2 , 51 octets

f=lambda s,l=[]:s and f(s[:-1],[s]+l)or l+l[-2::-1]

Essayez-le en ligne!

Nous avons presque la bonne solution suivante de 45 octets, mais elle contient la chaîne d'origine deux fois et je ne vois pas de moyen court pour résoudre ce problème.

f=lambda s,l=[]:s and f(s[:-1],[s]+l+[s])or l

Essayez-le en ligne!

Xnor
la source
Ne devriez-vous pas ajouter de nouvelles lignes et imprimer pour obtenir le résultat souhaité?
Jaden Travnik
Quelque chose comme print('\n'.join(f(s))) ?
Jaden Travnik
@JadenTravnik Les valeurs par défaut de la communauté (que ce défi suit) permettent des fonctions en plus des programmes. Et l’auteur du défi a déclaré dans les commentaires qu’il acceptait une liste de chaînes incluses dans la jointure, comme autorisé par défaut , bien que je n’apprécie pas moi-même cette option par défaut et l’ai rétrogradé. Voir aussi le résumé des règles Python .
xnor
Huh. Ok, merci de le signaler. Im new ¯_ (ツ) _ / ¯. Si c'est le cas, voici une solution concurrente à 45 octets:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Travnik
@JadenTravnik Pas de problème, les règles sont malheureusement dispersées. Votre exemple est cependant un extrait qui n'est pas autorisé. Il doit faire des entrées et des sorties comme s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]. Voir les exemples en haut ici .
Xnor
6

Charbon de bois , 5 octets

G^Lθθ

Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication: dessine un polygone rempli, ^spécifie que les côtés sont en bas à droite et en bas à gauche (le polygone se ferme alors automatiquement), Lθspécifie la longueur de ces côtés comme étant la longueur de l'entrée d'origine et la fin θspécifie la chaîne de remplissage.

Neil
la source
6

C # (compilateur interactif Visual C #) , 123 109 94 84 74 octets

Suppose que nous pouvons renvoyer un tableau de caractères (je crois que nous pouvons le faire, car un tableau de caractères est une représentation valide pour une chaîne et un tableau de chaînes est une représentation valide pour plusieurs lignes)

a=>new int[a.Length*2-1].Select((b,i)=>a.SkipLast(Math.Abs(a.Length-i-1)))

Essayez-le en ligne!

Quelqu'un
la source
5

Attaché , 15 octets

Bounce@Prefixes

Essayez-le en ligne!

Assez simple. Bounces (ajoute l'inverse sans le centre) le Prefixesde l'entrée.

Alternativement, 21 octets: Bounce@{_[0..0:~-#_]} réimplémentation du préfixe.

Conor O'Brien
la source
5

Brachylog (v2), 6 octets

a₀ᶠ⊆.↔

Essayez-le en ligne!

Fonction de soumission, renvoyant un tableau de lignes. Librement basé sur @ réponse de Fatalize .

Explication

a₀ᶠ⊆.↔
    .↔  Find a palindrome
   ⊆      that contains, in order,
  ᶠ       all
a₀        prefixes of {the input}

L'ordre de départage est défini ici par le , qui, lorsqu'il est utilisé avec ce modèle d'écoulement, préfère la sortie la plus courte possible, lié au départ en plaçant les éléments donnés le plus tôt possible . Le résultat le plus court possible correspond à ce que nous voulons ici (car il n’est pas possible d’avoir des préfixes en double), et placer les éléments donnés (c’est-à-dire les préfixes) le plus tôt possible les placera dans la première moitié (arrondi) du sortie. Etant donné que nous exigeons également qu'ils soient placés dans le même ordre, nous obtenons exactement le modèle dont nous avons besoin même si la description que nous avons donnée à Brachylog est très générale. les égalités se passent exactement comme prévu, ce qui amène Brachylog à choisir le résultat souhaité plutôt qu’un autre résultat conforme à la description.

ais523
la source
5

PowerShell, 89 ans 87 66 octets

-2 octets grâce à @AdmBorkBork

param($a)0..($d=$a.Length-1)|%{$b+=,-join$a[0..$_]};$b+$b[--$d..0]

Essayez-le en ligne!

En fait, cela n'a pas fonctionné comme spécifié auparavant, désolé pour ça! Je l'ai édité et j'ai également réussi à supprimer quelques octets.

Gabriel Mills
la source
Vous pouvez --$dau lieu de ($d-1)sauver un couple à la fin.
AdmBorkBork
@AdmBorkBork Merci.
Gabriel Mills
Cela ne fonctionne malheureusement pas pour la saisie d'un seul caractère.
AdmBorkBork
5

PowerShell , 46 octets

($l=$args|% t*y|%{($s+=$_);++$i})+$l[$i..0]|gu

Essayez-le en ligne!


PowerShell , 42 octets (spécial YouTube, sale)

On sait que la longueur maximale d'un commentaire sur youtube est de 10 000 caractères. Ok, utilisez ceci comme limite supérieure.

($l=$args|% t*y|%{($s+=$_)})+$l[1e4..0]|gu

Essayez-le en ligne!

mazzy
la source
4

APL (Dyalog Unicode) , 9 octets SBCS de

Fonction de préfixe tacite anonyme. Renvoie la liste des chaînes.

(⊢,1↓⌽),\

Essayez-le en ligne!

,\ la liste des préfixes (lit, la concaténation cumulée)

() Appliquez la fonction suivante à cette liste:

 la liste inversée

1↓ déposer le premier article

, ajouter

 la liste non modifiée

Adam
la source
4

Ruby , 51 42 40 octets

f=->s,i=1{s[i]?[t=s[0,i],*f[s,i+1],t]:s}

Essayez-le en ligne!

Merci à Doorknob pour -2 octets.

Kirill L.
la source
1
Vous pouvez économiser 2 octets en les remplaçant ...par,
Doorknob
4

JavaScript (Node.js) , 90 octets

Cela peut probablement être joué beaucoup plus, Arnauld a déjà une façon plus courte mais je me suis amusé au moins!

s=>{a=[];for(c=s.length-1;c--;)a[c]=s.slice(0,c+1);return[...a,s,...a.reverse()].join`\n`}

Essayez-le en ligne!

T. Dirks
la source
4

SNOBOL4 (CSNOBOL4) , 118 octets

	N =INPUT
	L =1
1	X =LT(X,SIZE(N)) X + 1	:F(D)
O	N ARB . OUTPUT POS(X)	:($L)
D	X =GT(X) X - 1	:F(END)
	L ='D'	:(O)
END

Essayez-le en ligne!

Il semble y avoir un bogue dans cette implémentation de SNOBOL; tenter de remplacer l'étiquette Dpar l'étiquette 2provoque une erreur, bien que le manuel de Vanilla SNOBOL indique que (non souligné dans l'original)

Si une étiquette est présente, elle doit commencer par le premier caractère de la ligne. Les étiquettes fournissent un nom à l'instruction et servent de cible pour le transfert du contrôle à partir du champ GOTO de toute instruction. Les étiquettes doivent commencer par une lettre ou un chiffre, éventuellement suivies d'une chaîne de caractères arbitraire.Le champ d'étiquette se termine par le caractère blanc, une tabulation ou un point-virgule. Si le premier caractère d'une ligne est vide ou tabulé, le champ d'étiquette est absent.

Ma supposition est que l'interpréteur CSNOBOL ne prend en charge qu'une seule étiquette commençant par un entier.

Giuseppe
la source
4

APL + WIN, 31 octets

Invites pour l'entrée de chaîne:

 ⊃((⍳n),1↓⌽⍳n)↑¨(¯1+2×n←⍴s)⍴⊂s←⎕

Explication:

(¯1+2×n←⍴s)⍴⊂s create a nested vector of the string of length =1+2x length of string

((⍳n),1↓⌽⍳n)↑¨ progressively select elements from each element of the nested vector 
              following the pattern 1  2 ...to n to n-1 ... 1

⊃ convert nested vector into a 2d array.
Graham
la source
4

F # (.NET Core) , 67 à 61 octets

let l=s.Length
[1..l*2-1]|>Seq.map(fun i->s.[..l-abs(i-l)-1])

Essayez-le en ligne!

L'entrée est un stringet la sortie est unseq<string>

Une autre solution pourrait consister let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]en 80 octets ... Je ne suis pas sûr que cela vaille la peine d'être examiné.

aloisdg
la source
4

sed , 31 35 octets

:x
h
s/.\n.*\|.$//
/^$/{x;q}
H
G
bx

Essayez-le en ligne!

Explication

Au début de chaque itération de la boucle, l'espace de modèle est une "partie centrale" de la sortie souhaitée, et chaque boucle ajoute une copie abrégée en haut et en bas.

:x                 
h                  Copy the current chunk to hold space
s/.\n.*\|.$//      Remove the last letter of the first line, and all other lines (if there are any)
/^$/{x;q}          If pattern space is empty we're done; output hold space
H                  Add the shortened line to the end of hold space
G                  and add the new hold space to pattern space.
bx                 
Sophia Lechner
la source
1
Bien, mais la ligne du milieu (l’entrée complète originale) semble être sortie 3 fois. Au moins avec GNU sed. Même chose sur TIO. Quelle sedimplémentation utilisez-vous et comment vous passez l’entrée? (BTW, changer le remplacement pour le s/.\n.*\|.$//
réparer
2
Ah, tu as raison. Ce n'est pas un problème avec mon sedimplémentation (avec GNU version 4.2.1), je n'ai tout simplement pas remarqué le bogue. J'ai joué avec d'autres correctifs et je ne trouve rien qui ajoute moins de quatre octets. J'adopte donc votre correctif, merci.
Sophia Lechner
4

Python 2 , 131 100 84 octets

Ma première réponse sur Code Golf!

-47 octets au total grâce à @ SriotchilismO'Zaic

a,b=[],len(x)
for i in range(2*b-1):
 if i<b:a+=x[i]
 else:a=a[:-1]
 print''.join(a)

Essayez-le en ligne!

Yoni Matz
la source
1
Bienvenue chez PCG! Assurez-vous de lire la visite et le code de conduite . Bonne solution!
akozi
2
Pour python, vous pouvez utiliser ;s au lieu de nouvelles lignes pour éviter l'indentation. Aussi pas besoin d'espaces entre printet''
Wheat Wizard
Merci pour les conseils @ SriotchilismO'Zaic, vraiment aidé à réduire mon nombre d'octets!
Yoni Matz
2
Et une dernière chose, si vous faites aune chaîne plutôt qu'une liste, vous n’avez plus besoin de la joinet vous pouvez simplement print a.
Wheat Wizard
4
Non valide, il doit s'agir d'un programme complet ou d'une fonction, alors que vous supposez que l'entrée est en x.
ASCII uniquement
4

J , 12 octets

]\,[:}.@|.]\

Essayez-le en ligne!

Encore 1 octet de plus que celui d'Adam

K (oK) , 12 à 11 octets

-1 octet grâce à ngn

{x,1_|x}@,\

Essayez-le en ligne!

Galen Ivanov
la source
2
Est-ce que j'ai dominé le maître?
Adám
@ Adám je suis loin d'être un maître J :) Il y a beaucoup de codeurs J meilleurs que moi.
Galen Ivanov
1
-1 octet pour oK:{x,1_|x}@,\
ngn
@ ngn merci!
Galen Ivanov