Certains esolangs bidimensionnels, tels que Forked , et certains non-esolangs, tels que Python , peuvent parfois nécessiter des espaces avant les lignes de code. Ce n'est pas très golfique. De plus, je suis paresseux et j'écris un langage 2D qui a besoin de beaucoup d'espace avant le code. Votre tâche est d'écrire un outil qui rend ces langues plus golfiques.
Bien sûr, ce ne sera pas parfait; il ne peut pas être utilisé, par exemple, lorsqu'un nombre est le premier caractère d'une ligne de source. Cependant, cela sera généralement utile.
Défi
Vous écrirez un programme ou une fonction qui soit ...
- ... prend un argument, un nom de fichier ou une chaîne, ou ...
- ... lit à partir de l'entrée standard.
Votre programme agira comme cat
, sauf:
- Si le premier caractère d'une ligne est un nombre, votre code affichera x espaces, où x est ce nombre.
- Sinon, il sera simplement imprimé.
- Comme tous les autres caractères de l'entrée.
Cas de test
Contribution:
foo bar foo bar
1foo bar foo bar foo bar
2foo bar foo bar foo bar foo bar
Production:
foo bar foo bar
foo bar foo bar foo bar
foo bar foo bar foo bar foo bar
Contribution:
--------v
8|
8|
80
8,
7&
Production:
--------v
|
|
0
,
&
Contribution:
foo bar
bar foo
foo bar
Production:
foo bar
bar foo
foo bar
Contribution:
0123456789
1234567890
2345678901
3456789012
4567890123
Production:
123456789
234567890
345678901
456789012
567890123
Règles
- La sortie doit être exactement comme l'entrée, sauf pour les lignes où le premier caractère est un nombre.
- Votre programme ne peut rien ajouter / ajouter au début du fichier, sauf un saut de ligne si vous le souhaitez.
- Votre programme peut ne faire aucune hypothèse sur l'entrée. Il peut contenir des lignes vides, pas de chiffres, des caractères Unicode, peu importe.
- Si un nombre avec plus d'un chiffre commence une ligne (par exemple
523abcdefg
), seul le premier chiffre (dans l'exemple, 5) doit se transformer en espaces.
Gagnant
Le code le plus court dans chaque langue gagne. Amuse-toi bien et bonne chance!
la source
Of course, this will not be perfect; it cannot be used, for instance, when a number is the first character on a line of source.
Ce n'est pas vrai, il suffit de mettre le premier caractère à 0 (ahem, votre dernier cas de test)Réponses:
Rétine , 9 octets
Essayez-le en ligne! Remarque: Espace de fin sur la dernière ligne.
la source
Cubiquement , 69 octets
Essayez-le en ligne!
Explication:
Nous faisons d'abord cette initialisation:
Pour configurer ce cube:
La chose la plus importante à propos de ce cube est que la
5
somme des faces est de 32, qui est la valeur requise pour imprimer les espaces. Par coïncidence, il se trouve également être assez court pour tous les autres calculs. Après cela est fait:la source
Husk ,
1513 octets-2 octets grâce à @Zgarb
Essayez-le en ligne!
Utilise la même technique que @Jonathan Allan
Explication
la source
Γ
.JavaScript (ES8),
3837 octetsJe ne pense pas que cela puisse être amélioré beaucoup plus.1 octet enregistré grâce à Shaggy - Utilisez les fonctionnalités ES8.
la source
padEnd
comme ceci:s=>s.replace(/^\d/gm,m=>"".padEnd(m))
Python 2 ,
98746765 octets-24 octets grâce à Jonathan Allan. -7 octets grâce à M. Xcoder.
Essayez-le en ligne!
Prend l'entrée dans le fichier nommé
f
.la source
open
; le code attend un fichier nommé «f». Je pense que ça va?' '*0
c'est falsey. L'utilisation[:1]
reste cependant une sauvegarde. Inutile de leread
croire (et ce le seraitreadlines
) puisque le comportement par défaut deopen
est de parcourir les lignes. Il n'y a pas non plus besoin du mode car'r'
c'est le mode par défaut. Si j'ai raison, c'est 73 !Rubis ,
2421 + 1 =2522 octetsUtilise le
-p
drapeau. -3 octets de Go.Essayez-le en ligne!
la source
%p
à la fin au lieu de%""
. Merci de votre aide!05AB1E , 10 octets
Essayez-le en ligne!
la source
|vy¬dićú},
fonctionne pour 10 octets.|
fonctionnement. Il est censé le fairepush the rest of input as an array with strings
, mais il s'arrête aux lignes vides ( TIO ). J'ai soulevé cette question dans le salon de discussion 05AB1E si vous voulez en savoir plus.Python 3 , 95 octets
Essayez-le en ligne!
-4 octets en volant l'idée regex de ThePirateBay
la source
Gelée , 19 octets
Un lien monadique prenant et renvoyant des listes de personnages, ou un programme complet imprimant le résultat.
Essayez-le en ligne!
Comment?
la source
beheaded line
Est-ce le terme réel? xDPerl 5 , 13 + 1 (-p) = 14 octets
Essayez-le en ligne!
la source
Haskell , 63 octets
Essayez-le en ligne! La première ligne est une fonction anonyme qui divise une chaîne donnée en lignes, applique la fonction
g
à chaque ligne et joint les lignes résultantes avec des retours à la ligne. Ilg
est vérifié si le premier caractèrex
d'une ligne est un chiffre. Si tel est le cas,['1'..x]
renvoie alors une chaîne de longueur égale à la valeur du chiffrex
et' '<$
convertit la chaîne en autant d'espaces. Enfin, le reste de la ligner
est ajouté. Six
n'est pas un chiffre, nous sommes dans la deuxième équationg s=s
et renvoyons la ligne non modifiée.la source
Python 2 ,
76 7268 octets-4 octets grâce à @ovs !
@DeadPossum a suggéré de passer à Python 2, ce qui a également permis d'économiser 4 octets.
Je pensais juste que c'était agréable d'avoir un programme complet compétitif en Python 2 qui ne vérifie pas explicitement si le premier caractère est un chiffre. Ce lit l'entrée d'un fichier,
f
.Essayez-le en ligne! (avec l'aimable autorisation de @ovs )
la source
print
vous donnera 68 octetsJava 8 ,
105999793 octetsEnregistré quelques octets supplémentaires grâce à la suggestion de Nevay,
la source
s->{int i=s.charAt(0);if(i>47&i<58)for(s=s.substring(1);i-->48;s=" "+s);System.out.print(s);}
(93 octets).R ,
138128 octets-9 octets grâce à CriminallyVulgar
C'est assez mauvais, mais c'est un peu mieux maintenant ... R est, encore une fois, terrible aux cordes.
Essayez-le en ligne!
la source
Japt (v2.0a0),
1110 octetsJapt bat Jelly et 05AB1E? Cela ne semble pas correct!
Essaye-le
Explication
Saisie implicite de chaîne
U
Utilisez Regex replace (
r
) toutes les occurrences d'un chiffre au début d'une ligne (m
est l'indicateur multiligne - l'g
indicateur est activé par défaut dans Japt).Passez chaque correspondance à travers une fonction, où
Z
est l'élément actuel.L'opérateur d'incrémentation postfix (
++
). Cela se convertitZ
en un entier sans l'augmenter pour l'opération suivante.Répétez un caractère espace
Z
fois.Sortie implicite de la chaîne résultante.
la source
m@
être raccourci?m
est ici le drapeau à plusieurs lignes pour la regex, pas la méthode de la carte.r/^\d/m_î
(our/^\d/m_ç
) serait de 2 octets plus court maisZ
est une chaîne donc, malheureusement, cela ne fonctionnerait pas.r/^\d/m_°ç
, pour une économie de 1 octet, ça marche quand même :)°ç
est une astuce incroyable :-) J'aurais suggéré juste\d
pour l'expression régulière, mais cela laisse de côté le drapeau ... peut-être que je devrais ajouter un support pour les drapeaux sur les expressions régulières de classe unique, comme\dm
(oh oui, et cela laisse de côté le^
trop ...)/
facultative dans RegExes?Gelée , 19 octets
Essayez-le en ligne!
-5 octets au total grâce aux commentaires de Jonathan Allan et en regardant son post
Explication
la source
Ḣ⁶ẋ;
;0Ḣ
fonctionnerait pour un octet, peut-être qu'il y a un seul atome, j'ai également essayé¹
, pas de joie làḣ1ẇØD
fonctionne pour le même bytecount \ o /ṚṪ
fonctionnera :)Pyth ,
1615 octetsEssayez-le en ligne!
Explication
Prenons un exemple qui devrait être plus facile à traiter. Disons que notre contribution est:
Le programme ci-dessus fera ce qui suit:
.z
- Lit tout et le divise par des nouvelles lignes, donc nous obtenons['foo bar foo bar', '1foo bar foo bar foo bar', '2foo bar foo bar foo bar foo bar']
.Nous obtenons le premier caractère de chaque:
['f', '1', '2']
.S'il est convertible en un entier, nous répétons un espace qui multiplie les temps et ajoutons le reste de la chaîne. Sinon, nous plaçons simplement la chaîne entière. Par conséquent, nous avons
['foo bar foo bar', ' foo bar foo bar foo bar', ' foo bar foo bar foo bar foo bar']
.Enfin, nous nous joignons par des nouvelles lignes, donc notre résultat est:
la source
Cubiquement , 82 octets
Remarque: cela ne fonctionnera pas sur TIO . Pour tester cela, utilisez l' interpréteur Lua avec l'indicateur expérimental défini sur true (pour activer les conditions). Il y a actuellement un bogue avec des blocs conditionnels sur l'interpréteur TIO. Lorsque vous utilisez l'interpréteur TIO, vous devez remplacer
?6!
par!6
et&6
par?6&
, ce qui maintient le nombre d'octets le même.Ce n'est pas aussi court que l'autre réponse cubique, mais j'ai pensé essayer de toute façon: D
la source
)
passe à la plus récente(
plutôt qu'à celle qui me correspond. EDIT: je suis dans le chat.> <> , 60 octets
Essayez-le en ligne!
Comment ça fonctionne:
la source
V , 9 octets
Essayez-le en ligne!
Explication
la source
Gema, 21 personnages
Exemple d'exécution:
la source
PHP, 83 caractères
la source
$s
argument ou le remplir avec l'entrée. Et il n'imprime rienargv
acceptable?argv
sont les arguments de la ligne de commande, alors oui.