Introdução:
Inspirado por este comentário de @MagicOctopusUrn em @Emigna resposta 05AB1E 's para o meu ' Foi apenas um erro ' desafio :
8F9ÝÀNð×ý}».∊
Eu fiz uma nave espacial! E fiquei empolgado ao sugerir uma edição de 12 bytes. # 1: Magic Octopus Urn Jul 17 '17 às 20:10
Que é um programa 05AB1E (legado), resultando neste:
1234567890
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1234567890
Desafio:
Entrada: uma sequência não vazia
Saída: de dentro para fora, adicione mais um espaço entre cada caractere a cada linha, semelhante ao feito na saída acima, igual a length - 1
. Então, para uma entrada1234567890
a saída seria realmente essa:
1234567890
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1234567890
Por quê? O comprimento do1234567890
é 10
. Então começamos produzindo 10 linhas: a primeira linha sem espaços; segundo com um delimitador de espaço; terceiro com dois; etc. E então (sem ter a linha do meio com length - 1
espaços duplicados), voltamos à entrada inicial enquanto diminuímos.
Regras do desafio:
- A entrada é garantida como não vazia (um comprimento
>= 1
). (Para entradas de caracteres simples, simplesmente produzimos esse caractere.) - Qualquer quantidade de espaços à direita / à esquerda / novas linhas é permitida, desde que a saída em si (onde quer que esteja na tela) esteja correta. (Linhas vazias entre as linhas de saída também não são permitidas.)
- A entrada conterá apenas caracteres ASCII imprimíveis, excluindo espaços em branco (intervalo de ponto de código
[33, 126]
) - A E / S é flexível. A entrada pode ser tomada como STDIN, argumento ou parâmetro de função. Pode ser uma lista / matriz / fluxo de caracteres em vez de sequência. A saída também pode ser uma lista / matriz / fluxo de caracteres em vez de cadeias; pode ser impresso em STDOUT; retornado como string delimitada por nova linha; etc.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - Aplicam-se regras padrão à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- Lacunas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Input: @
Output:
@
Input: test
Output:
test
t e s t
t e s t
t e s t
t e s t
t e s t
test
Input: ?!
Output:
?!
? !
?!
Input: Spaceship
Output:
Spaceship
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
Spaceship
Input: 05AB1E
Output:
05AB1E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
05AB1E
Input: )}/\
Output:
)}/\
) } / \
) } / \
) } / \
) } / \
) } / \
)}/\
ಠ_ಠ
e percebe que é porque você o acidentalmente o fez há um anoಠ⌣ಠ
.Respostas:
Japonês ,
86 bytesRecebe a entrada como uma matriz de caracteres, gera uma matriz de seqüências de caracteres.
Tente
Explicação
Original, 8 bytes
E / S é uma sequência. Usa a
-R
bandeira. Inclui espaços à direita em cada linha.Tente
Explicação
fonte
S.ç()
FTW mais uma vez :-)R ,
10599858479 bytes-6 graças a @Kevin Cruissen e @Giuseppe
-14 de mudar para um método baseado em regex
-1 graças a @Giuseppe
-5 graças a @digEmALl
Experimente online!
fonte
in(r<-
.s
uma vez para poder usá-lo como argumentowrite
diretamente; trazendo-lhe até 99 bytes1
em vez de um""
emwrite
? Estou gostando do seu usoMap
!collapse
argumentopaste
, mas ele simplesmente não está acontecendo ...JavaScript (ES6), 53 bytes
Recebe a entrada como uma matriz de caracteres.
Experimente online!
fonte
Carvão , 10 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
[
a]
- ou é que outro comando separado?Tela de pintura , 8 bytes
Experimente aqui!
A versão de 7 bytes era boa demais para esse desafio.
fonte
/
s em umX
?─
- palindromize vertical. A palindromização do Canvas faz coisas legais . A parte sobreposta também tem seu próprio caráter .Python 2 ,
7270686665 bytes-2 bytes graças a Kevin Cruijssen
-3 bytes graças a ovs
Experimente online!
fonte
c==len(w)-1
pode ser jogado por 1 byte comc+2>len(w)
. EDIT: Na sua nova versão de 70 bytes,0<c
pode serc
.05AB1E ,
109 bytesGuardado 1 bytes graças a Adnan
Experimente online!
Explicação
fonte
S
. A entrada é flexível, portanto, a entrada como lista é permitida.»
pode ser omitida.»
e alterar o loopv
para um mapaε
.εINð×ý}û»
também funcionam?Ruby ,
5449 bytesExperimente online!
Recebe entrada como uma matriz de caracteres, gera uma matriz de seqüências de caracteres.
fonte
Japt,
98 bytes-1 byte from @Shaggy
Try it online!
fonte
SpX
->Xî
for a 1 byte saving.PowerShell,
6654 bytes-12 bytes thanks to mazzy
Try it online!
Takes input via splatting, which on TIO manifests as separate command-line arguments for each character.
We first set
$a=$args
as the input argument. Then we set$x
equal to the.count
of that array-1
. We then need to loop through the letters to construct the spaceship. That's done by constructing a range from0
to$x
, then$x
back down to0
, then usingGet-Unique
to pull out just the appropriate range.Each iteration, we take our input arguments and
-join
them together with the corresponding number of spaces. Each of those strings is left on the pipeline, and an implicitWrite-Output
gives us newlines for free when the program completes.fonte
0..($x=($a=$args).count-1)+$x..0|gu|%{$a-join(' '*$_)}
Get-Unique
work like that on the range? That's crazy! Thanks!05AB1E (legacy), 9 bytes
Input as list of characters.
Try it online or verify all test cases.
Explanation:
fonte
[
,]
and(
,)
. May want to add those cases to catch charcoal too. (Moved the other comments to Emigna's answer, because he was the answer I originally commented on)û»
instead of.∊
.Haskell,
6059 bytesTry it online!
Explanation
For a string (eg.
"abc"
) we apply firstwhich is the same as
This repeatedly applies
(?)
(appends a space to each character in the range [33..]) to thestr
until there are that many strings asstr
has characters:["abc","a b c ", "a b c "]
Now we only need to concatenate the result (minus the last element) with its reversed counter part:
fonte
MATL,
252213 bytesTry it online!
Thanks to Luis Mendo for suggesting a 5 byte golf, which then inspired me to shave off 4 more bytes!
Explanation, with example input
'abc'
:fonte
Jelly, 9 bytes
Try it online!
Returns a list of lines; output prettified over TIO.
fonte
,€⁶$LСŒḄ
. Other, more similar, 9's:J’⁶ẋŒḄɓjⱮ
andJ’⁶ẋŒḄjⱮ@
(I was looking for shorter but no joy yet)LḶ⁶ẋ
orŒḄ
. However, if you manage to find a save, do ping me. :-),€⁶$LСŒḄ
may not be valid since it has crazy nesting so might need aY
and be a full program.['I', 'f', [[' '], 't', 'h', [['i']], 's'], ' ', 'i', ['s', ' '], 'a', [[' ', 's', 't'], 'r', ['i', 'n', 'g'], ' '], 'w', ['e', ' ', 'a', 'r', 'e'], ' ', 'd', 'o', ['o'], 'm', [[[[['e']]]]], [[[['d']]]], '!']
At least I've outgolfed 05AB1E...Pyth, 12 bytes
Just my mandatory Pyth submission. I am quite proud of this so an explanation will likely come soon.
Try it here!
Try it here!
fonte
Stax, 10 bytes
Run and debug it
Outputs with trailing whitespace on each line.
Explanation:
fonte
Java (JDK 10), 115 bytes
Try it online!
fonte
l-Math.abs(i)
can be golfed toi<0?l+i:l-i
for -2 bytes.l-i<0?-i:i
?l-(i<0?-i:i)
(12 bytes).K (oK),
2524 bytesSolution:
Try it online!
Explanation:
Port of my K4 solution:
Notes:
fonte
,:'
->+,
Pascal (FPC),
143135 bytesTry it online!
I will probably win only against Lenguage...
fonte
PHP,
8889 bytesrequires PHP 5 or later for
str_split
. Run as pipe with-nR
or try it online.fonte
K4, 23 bytes
Solution:
Example:
Explanation:
Has trailing whitespace on each line.
fonte
C#,
11310598 bytesTry it online!
fonte
s=>{
before and}
after to make it a lambda-function. In addition, one thing to golf is removing the brackets around the for-loop. Try it online.Scala, 82 bytes
Try it online
Scala has lot of shortcuts that are helping me here and that is quite readable! Try Scala
fonte
0
tolength
amount of spaces, instead of0
tolength-1
amount of spaces. I don't know Scala too well, but it seem you can fix both issues with +4 bytes (86 bytes in total) like this:for(i<-(0 to a.size-1)union(-a.size+2 to 0))println(a.map(_+" "*Math.abs(i)).mkString)
Again welcome, and enjoy your stay! :)Oracle SQL, 115 bytes
Not a golfing language but...
Assuming that the value is in column
v
of tablet
:SQL Fiddle
Oracle 11g R2 Schema Setup:
Query 1:
Results:
(SQLFiddle prints the values right-aligned in the column for some reason... there are no leading spaces)
fonte
(.)
be golfed to.
by using\0
instead of\1
like you could in Java for example? EDIT: Never mind, that is for$0
, not\0
.. (Java example of what I meant).8086 machine code,
5653 bytesAssembled from:
Test case:
fonte
length
amount of spaces and there are 9 lines in total, but the middle line should havelength-1
amount of spaces and there should be a total of 7 lines instead (for the 4-letter word 'test'`).. :( I hope it's not to expensive in terms of bytes to fix?Haskell,
646059 bytesTry it online!
fonte
Bash,
115,109,105,100,97,96,92,91, 90 bytes-5 & -3 thanks to Kevin Cruissen
Try it online!
Note that since the
\
is a shell escape char, the test case)}/\
should be entered with an extra\
like this:)}/\\
.fonte
in
andprintf
like in Python?bash
code only inputs a string, (i.e. just one line). The test cases all work however, though)}/\
must be single quoted like this<<< ')}/\' read s; ...etc.
. The spaces afterin
andprintf
are needed.for
anddo
can be removed.f=1
can be changed toc=f=1
. Andf=f+c
can bef+=c
.f!=0
tof
in the for-loop. Just like in JavaScript and Python,0
is falsey and every other positive/negative integer is apparently truthy in Bash.Perl 6, 43 bytes
Try it online!
Returns a list of lines.
Explanation:
fonte
C (gcc),
131129111 bytesTry it online!
-20 bytes thanks to ceilingcat!
Try it online!
Or, if length can be accepted as a parameter:
C (gcc),
105102 bytes-1 byte thanks to ceilingcat!
Try it online!
fonte
x
is shadowed and thus redundantly declared.PHP,
148146143141 BytesYou can test it like this:
Output
Sandbox
Expanded version
Attempt 2, 92 bytes
after seeing @Titus answer I reduced mine to this:
I was trying to think of a way to use 1 loop, instead of 2... Believe it or not, I almost never use the
for
loop in "real" code. It was the~
bitwise Not, that I was missing...It's sill a tiny bit longer at
92
so I don't feel so bad. But I will put it in as a second attempt anyway.$argn
is the input from the command lineSandbox
fonte
f
instead of assigning an anonymous one to$f
-function f(
saves 2 bytes over$f=function(
, and you save another byte every time you callf(...)
instead of$f(...)
. Alternatively, you could capture the$s
, saving 2 bytes -($i)use($s)
is 4 bytes longer than($i,$s)
, but you save 3 bytes for each call to$f($i)
instead of$f($s,$i)
; in languages with automatic capture, like JS, this is more often a viable saving, because you don't pay the penalty of theuse
statement.use
but it feels longer, to do that sense$i
is dynamic, it would have to be passed in by reference. So it has to beuse(&$i)
and the$i
has to be defined before passing it by reference to$f
. Which means setting it in the parent function, or before any other. For the function it could befunction s($s,$i)
and just know it has to be called withs($s,0)
but it seems ugly, and that is around11 bytes, use(&$i),$i
$s
though and change the\n
to a real line return. That gets it to143
2 from the line ending and 1 from usef
instead of a closure:function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))." ";}
Extra functions like this are allowed according to this meta post: codegolf.meta.stackexchange.com/questions/7614/…