Alguns esolangs bidimensionais, como Forked , e outros não-esolangs, como Python , às vezes podem exigir espaços antes das linhas de código. Isso não é muito golfe. Além disso, sou preguiçoso e escrevo uma linguagem 2D que precisa de muitos espaços antes do código.Sua tarefa é escrever uma ferramenta que torne esses idiomas mais eficientes.
Claro, isso não será perfeito; não pode ser usado, por exemplo, quando um número é o primeiro caractere em uma linha de origem. No entanto, geralmente será útil.
Desafio
Você escreverá um programa ou função que ...
- ... usa um argumento, um nome de arquivo ou uma string ou ...
- ... lê da entrada padrão.
Seu programa agirá como cat
, exceto:
- Se o primeiro caractere de qualquer linha for um número, seu código imprimirá x espaços, onde x é esse número.
- Caso contrário, será simplesmente impresso.
- Como qualquer outro caractere na entrada.
Casos de teste
Entrada:
foo bar foo bar
1foo bar foo bar foo bar
2foo bar foo bar foo bar foo bar
Resultado:
foo bar foo bar
foo bar foo bar foo bar
foo bar foo bar foo bar foo bar
Entrada:
--------v
8|
8|
80
8,
7&
Resultado:
--------v
|
|
0
,
&
Entrada:
foo bar
bar foo
foo bar
Resultado:
foo bar
bar foo
foo bar
Entrada:
0123456789
1234567890
2345678901
3456789012
4567890123
Resultado:
123456789
234567890
345678901
456789012
567890123
Regras
- A saída deve ser exatamente como a entrada, exceto para as linhas em que o primeiro caractere é um número.
- Seu programa não pode acrescentar / acrescentar nada ao arquivo, exceto uma nova linha à direita, se desejar.
- Seu programa pode não fazer suposições sobre a entrada. Pode conter linhas vazias, sem números, caracteres Unicode, qualquer que seja.
- Se um número com mais de um dígito inicia uma linha (por exemplo
523abcdefg
), apenas o primeiro dígito (no exemplo, 5) deve se transformar em espaços.
Vencedora
O código mais curto em cada idioma vence. Divirta-se e boa sorte!
code-golf
number
whitespace
MD XF
fonte
fonte
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.
Não é verdade, basta fazer o primeiro caractere a 0 (ahem, seu caso de teste última)Respostas:
Retina , 9 bytes
Experimente online! Nota: Espaço à direita na última linha.
fonte
Cubicamente , 69 bytes
Experimente online!
Explicação:
Primeiro, fazemos esta inicialização:
Para configurar este cubo:
O mais importante sobre esse cubo é que a face
5
é igual a 32, que é o valor necessário para imprimir espaços. Coincidentemente, também é bastante curto para todos os outros cálculos. Depois que isso for feito:fonte
Casca ,
1513 bytes-2 bytes graças a @Zgarb
Experimente online!
Usa a mesma técnica que @Jonathan Allan
Explicação
fonte
Γ
.JavaScript (ES8),
3837 bytesNão acho que possa ser melhorado muito mais.Economizou 1 byte graças aos recursos Shaggy - Use ES8.
fonte
padEnd
assim:s=>s.replace(/^\d/gm,m=>"".padEnd(m))
Python 2 ,
98746765 bytes-24 bytes graças a Jonathan Allan. -7 bytes graças ao Sr. Xcoder.
Experimente online!
Recebe entrada no arquivo nomeado
f
.fonte
open
; código está esperando um arquivo chamado 'f'. Eu acho que está tudo bem?' '*0
é falsey. O uso[:1]
ainda é salvo. Não há necessidade deread
acreditar (e seriareadlines
), já que o comportamento padrão deopen
é iterar através das linhas. Também não há necessidade do modo, pois'r'
é o padrão. Se eu estiver certo, isso é 73 !Ruby ,
2421 + 1 =2522 bytesUsa a
-p
bandeira. -3 bytes de GB.Experimente online!
fonte
%p
no final em vez de%""
. Obrigado pela ajuda!05AB1E , 10 bytes
Experimente online!
fonte
|vy¬dićú},
funciona para 10 bytes.|
funciona. É supostopush the rest of input as an array with strings
, mas para em linhas vazias ( TIO ). Eu trouxe isso à tona na sala de bate-papo 05AB1E, se você quiser saber mais.Python 3 , 95 bytes
Experimente online!
-4 bytes roubando a ideia de regex de ThePirateBay
fonte
Geléia , 19 bytes
Um link monádico que recebe e retorna listas de caracteres ou um programa completo que imprime o resultado.
Experimente online!
Quão?
fonte
beheaded line
Esse é o termo atual? xDPerl 5, 13 + 1 (-p) = 14 bytes
Try it online!
fonte
Haskell, 63 bytes
Try it online! The first line is an anonymous function which splits a given string into lines, applies the function
g
to each line and joins the resulting lines with newlines. Ing
it is checked whether the first characterx
of a line is a digit. If this is the case, then['1'..x]
yields a string with length equal to the value of the digitx
and' '<$
converts the string into as many spaces. Finally the rest of the liner
is appended. Ifx
is not a digit we are in the second equationg s=s
and return the line unmodified.fonte
Python 2,
76 7268 bytes-4 bytes thanks to @ovs!
@DeadPossum suggested switching to Python 2, which saved 4 bytes too.
Just thought it's nice to have a competitive full program in Python 2 that does not explicitly check if the first character is a digit. This reads the input from a file,
f
.Try it online! (courtesy of @ovs)
fonte
print
will give you 68 bytesJava 8,
105999793 bytesSaved few more bytes thanks to Nevay's suggestion,
fonte
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 bytes).R,
138128 bytes-9 bytes thanks to CriminallyVulgar
This is pretty bad, but it's a bit better now... R is, once again, terrible at strings.
Try it online!
fonte
Japt (v2.0a0),
1110 bytesJapt beating Jelly and 05AB1E? That doesn't seem right!
Test it
Explanation
Implicit input of string
U
Use Regex replace (
r
) all occurrences of a digit at the beginning of a line (m
is the multiline flag - theg
flag is enabled by default in Japt).Pass each match through a function, where
Z
is the current element.The postfix increment operator (
++
). This convertsZ
to an integer without increasing it for the following operation.Repeat a space character
Z
times.Implicitly output the resulting string.
fonte
m@
be shortened?m
here is the multi-line flag for the regex, not the map method.r/^\d/m_î
(orr/^\d/m_ç
) would be 2 bytes shorter butZ
is a string so, unfortunately, it wouldn't work.r/^\d/m_°ç
, for a 1 byte saving, does work, though :)°ç
is an amazing trick :-) I'd have suggested just\d
for the regex, but that leaves out the flag... perhaps I should add support for flags on single-class regexes, like\dm
(oh yeah, and that leaves out the^
too...)/
optional in RegExes?Jelly, 19 bytes
Try it online!
-5 bytes total thanks to Jonathan Allan's comments and by looking at his post
Explanation
fonte
Ḣ⁶ẋ;
;0Ḣ
would work for one byte, maybe there is a single atom, I also tried¹
, no joy thereḣ1ẇØD
works for the same bytecount \o/ṚṪ
will work :)Pyth,
1615 bytesTry it online!
Explanation
Let's take an example that should be easier to process. Say our input is:
The program above will do the following:
.z
- Reads it all and splits it by newlines, so we get['foo bar foo bar', '1foo bar foo bar foo bar', '2foo bar foo bar foo bar foo bar']
.We get the first character of each:
['f', '1', '2']
.If it is convertible to an integer, we repeat a space that integer times and add the rest of the String. Else, we just place the whole String. Hence, we have
['foo bar foo bar', ' foo bar foo bar foo bar', ' foo bar foo bar foo bar foo bar']
.Finally, we join by newlines, so our result is:
fonte
Cubically, 82 bytes
Note: This will not work on TIO. To test this, use the Lua interpreter with the experimental flag set to true (to enable conditionals). There's currently a bug with conditional blocks on the TIO interpreter. When using the TIO interpreter, you should replace
?6!
with!6
and&6
with?6&
, which keeps the byte count the same.This isn't as short as the other Cubically answer, but I thought I'd give this a try anyway :D
fonte
)
jumps to the most recent(
rather than the matching one I believe. EDIT: I'm in the chat.><>, 60 bytes
Try it online!
How It Works:
fonte
V, 9 bytes
Try it online!
Explanation
fonte
Gema, 21 characters
Sample run:
fonte
PHP, 83 chars
fonte
$s
arg or populate it with the input. And it doesn't print anythingargv
acceptable?argv
is the command line args, then yes.