Imprima uma grade de 10 por 10 de asteriscos


83

fundo

Este é um exemplo de livro padrão para demonstrar para loops.

Este é um dos primeiros programas que aprendi quando comecei a aprender programação ~ há 10 anos.

Tarefa

Você deve imprimir este texto exato:

**********
**********
**********
**********
**********
**********
**********
**********
**********
**********

Especificações

  • Você pode ter novas linhas extras à direita.
  • Você pode ter espaços extras à direita (U + 0020) no final de cada linha, incluindo as novas linhas extras à direita.

Pontuação

Isso é . A resposta mais curta em bytes vence.

Entre os melhores

Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.


2
@DylanMeeus "Você deve imprimir este texto exato :"
Freira

13
@DylanMeeus Já que isso tem a ver com as ferramentas de desenvolvimento que ocultam saídas repetidas do console, não é nativo dos consoles JavaScript como um todo e não está na especificação do JavaScript - assim como no fato de que o recurso pode ser desativado - acho que sim. deve ser aceitável. Nem todos os navegadores o recolherão assim.
precisa saber é o seguinte

6
Snippet @LeakyNun Leaderboard por favor!
Dkudriavtsev

2
Uma das coisas mais interessantes sobre esse desafio é que, dependendo do seu idioma, o ********** pode ser mais curto que um loop. Me faz pensar quando é melhor para um determinado idioma alternar entre 1 ou 2 loops.
Dwana

1
você diz que seguir novas linhas é aceitável. As novas linhas principais também são aceitáveis?
Albert Renshaw

Respostas:




65

Bash + coreutils, 19 bytes

Prefiro repetir coisas no Bash usando 'yes'.

yes **********|head

Eu salvei 2 bytes por sugestão de @ Neil. Mas quando o diretório em que você está executando este comando não contém apenas arquivos começando com um '.' dot você precisa colocar as estrelas *com ".

Bash + coreutils, 21 bytes

yes "**********"|head

2
Ótima idéia para usar yes. Normalmente, rotulamos soluções como "Bash + coreutils".
manatwork

8
É bom que, por coincidência, 10 linhas sejam o padrão head.
Digital Trauma

3
Você pode salvar dois bytes exigindo que qualquer arquivo no diretório atual comece com a .?
Neil

@ Neil, é o seu comentário para a minha resposta? Se assim for, eu não entendo :)
CousinCocaine

1
Você também pode escrever yes \**********|headsem a restrição de arquivos.
Florian F

50

Vim, 13 8 bytes

Guardado 5 bytes graças a @Lynn

qqi*␛9.o␛q9@q 

10i*␛Y9p

10i*␛insira 10 vezes *, Y9pcopie a linha e cole 9 vezes.


8
10i*♥Y9ptrabalho.
Lynn

1
Isso é insano vi.
Nbubis

Eu acho que você pode contar pressionamentos de teclas em vez de bytes para editores de texto, o que significa que <ESC> seria mais curto.
21416 addison

1
Por que ♥ e não ␛?
CL.

1
Eu teria yy9pme usado , mas bom trabalho usando letras maiúsculas para salvar um personagem!
Joe Z.

49

Pitão, 6 bytes

VT*T\*

Té 10 em Pyth, Vabexecuta b atempos de instrução , \*é a constante de caractere asterisco e multiplica ( *) uma string e um número inteiro repete essa string n vezes. A impressão implícita de Pyth com Vmeios 10 linhas é impressa.


40

Hexagony, 37. 35 34 31

10"+}(=${";<$<1}42/.0@_=<>\;>(_

Expandido:

   1 0 " +
  } ( = $ {
 " ; < $ < 1
} 4 2 / . 0 @
 _ = < > \ ;
  > ( _ . .
   . . . .

Experimente online

Basicamente, existem apenas dois para loops, contando de dez a zero, imprimindo um asterisco no loop interno e uma nova linha no loop externo.

Explicação:

Este programa consiste em três partes principais: inicialização da memória, um loop que imprime dez asteriscos e um loop que imprime uma nova linha. O loop que imprime uma nova linha também contém o loop que imprime os asteriscos.

Primeiro, o código executa a inicialização da memória totalmente linear. O código trabalha-se: 10"+}42. Isso define a memória das bordas próximas para se parecer com:

10 \ / 10
    |
   42

42 é o código ASCII para o caractere asterisco e as duas dezenas serão usadas como nossos contadores de loop. É digno de nota que o ponteiro da memória está atualmente apontando para fora das duas dezenas, portanto, retroceder nos colocará em uma das dezenas.

Em seguida, iniciamos o ciclo de impressão astersisk. Linearmente, o código se parece com: ;".._(. Isso imprime um asterisco, move o ponteiro da memória para trás e para a esquerda e, finalmente, diminui o valor lá. Após uma iteração, a memória seria semelhante a:

10 \ / 9
    |
   42

Então atingimos a condição do loop: o canto inferior esquerdo >. Se a borda que acabamos de decrescer ainda é positiva, pulamos e executamos a {para nos mover de volta para a 42. Em seguida, pressionamos a $e retornamos ao início do ciclo de impressão ;, pulando o <. Se o valor for zero, vamos para o outro loop.

O loop externo começa redefinindo a borda da memória recentemente zerada para dez (este é 10o código, indo para sudoeste). Em seguida, imprimimos esses dez como um caractere ASCII, que é uma nova linha. Em seguida, vamos passar para a outra margem memória e diminui-lo com {(e, em seguida, executar o que equivale a um monte de noops: =${_=. Agora, após uma iteração desse loop, a memória seria semelhante a:

 9 \ / 10
    |
   42

Desta vez, a memória está voltada para fora a partir da borda, armazenando nove no diagrama acima. Em seguida, executamos o <que atua como condição do loop externo. Se o valor for diferente de zero, saltaremos de alguns espelhos e começaremos a executar instruções significativas novamente depois de entrar no topo do hexágono no "sudoeste em movimento. Isso nos leva a recuar e a esquerda para os 42 novamente, mas voltados para dentro. Então ele =vira em nossa direção, redefinindo o estado adequadamente para iniciar o loop interno novamente. Se a borda foi ajustada para zero, o ponteiro de instruções inicia uma pequena aventura que não faz nada até sair do programa.

A aventura começa com o ponteiro de instruções que se dirige para o nordeste, desconsiderando perigosamente a segurança das direções cardeais. Corajosamente ignora um espelho que está alinhado com sua direção ( /) e heroicamente salta de um trampolim ($) escapando inteiramente da armadilha mortal de outro trampolim totalmente idêntico. Observando o vazio das arestas hexagonais não inicializadas, o ponteiro, sem hesitar por um momento, adiciona as duas arestas em branco que enfrenta, definindo a aresta atual em sua soma: 0 (a aresta era realmente zero antes, mas o ponteiro gosta de acredite que isso foi muito importante). Como a margem é zero, o ponteiro faz uma curva à esquerda na bifurcação da estrada, entrando em uma floresta misteriosa (de hexágonos). Lá, ele se vê desorientado, movendo-se para frente e para trás e para frente, até acabar no mesmo lugar na memória que começou. Pensando que o problema deve ser que a borda atual foi zerada da última vez, o ponteiro bravamente planta um1na borda atual. Então, o apontador nobre investiga outro caminho, um colocado com ... uma armadilha! A aresta atual é decrementada e volta a zero! O ponteiro, atordoado pela reviravolta chocante dos eventos, volta a tropeçar na armadilha, colocando a borda atual em negativa. Enfurecido, o ponteiro tenta retornar à floresta relativamente agradável, apenas para perceber que, como a borda atual não é positiva, os caminhos mudaram novamente e o ponteiro se vê entrando em uma caverna. E por uma caverna, quero dizer a boca de um verme hexagonal gigante. Desamparado, o ponteiro amaldiçoa a sexualidade com seu hálito moribundo. Além disso, o programa termina.


Golly, espero que o worm esteja bem ao engolir um ponteiro. Essas coisas podem doer .
Joffan

3
+1 por escrever a explicação mais interessante, a única, sobre hexagonia que já li. Eu me senti tão tenso quando a borda foi diminuída!
Joe

37

Emacs, 10 8 pressionamentos de tecla

F3 C-1 0 * ENTER F4 C-9 F4

Explicação

F3             Starts a macro recording
C-1 0 *        Apply 10 times command '*': prints 10 asterix'
ENTER          Insert new line
F4             Stops the macro record
C-9 F4         Apply 9 times the macro

Agradecemos a Sean por salvar duas teclas pressionadas, sugerindo a substituição C-udigitpor C-digit.


9
+1, eu sempre texto upvote respostas editor (mesmo que eu sou um cara mais vim eu) :)
DJMcMayhem

1
Se C-uconta apenas como um toque de tecla, você pode cortar dois traços digitando C-1 C-0(ou M-1 M-0) em vez de C-u 1 0e em C-9vez de C-u 9.
Sean

15
+1 porque você teve que usar o emacs para escrever isso.
Addison

1
Alternativamente (poupa nada) a repetição linha pode ser feito dentro da macro:F3 C-1 0 * ENTER C-1 0 F4
Jonathan Carroll

@JonathanCarroll sim ele iria salvar bytes se fôssemos para imprimir mais de 10 linhas;)
YSC

29

Geléia , 7 bytes

”*x⁵Ṅ9¡

O que está acontecendo?

”*x⁵Ṅ9¡  - No arguments
”*       - character literal, *
  x      - multiply (dyadic operation)
   ⁵     - integer literal, 10 (we have now constructed the string '**********')
    Ṅ    - Print & linefeed (monadic operation)
     9   - integer literal, 9
      ¡  - Repeat n times (n is 9 as the first Ṅ is not a repeat)

Teste em tryitonline


9
Eu realmente gosto do Ṅ9¡.
Dennis

Versão lista: ”*ẋ⁵Wẋ⁵.
Erik the Outgolfer

@EriktheGolfer você precisaria de um Yno final para "imprimir este texto exato"
Jonathan Allan

@ JonathanAllan É uma lista por si só, no entanto. Não é para "imprimir esse texto exato", mas, se você quiser trabalhar nele, você o usará.
Erik the Outgolfer

26

PowerShell, 14 12 bytes

,('*'*10)*10

Constrói uma cadeia de asteriscos de comprimento 10usando a multiplicação de cadeias. Encapsula isso em parens e alimenta isso no operador de vírgula para construir uma matriz. Usamos multiplicação de array para construir um array de 10 elementos que consiste nesse elemento (ou seja, um array de 10 elementos de seqüências de caracteres de asterisco). Isso é deixado no pipeline e a saída é implícita (como o padrão Write-Outputpara uma matriz é separado por nova linha, obtemos isso de graça - graças a @Joey pelo esclarecimento).

Mais antigo, 14 bytes

0..9|%{'*'*10}

Programa completo. Loops de 0para 9através de um ForEach-Objectloop |%{...}. A cada iteração, usamos a multiplicação de cadeias para criar uma 10cadeia de comprimento de *. Essas seqüências resultantes são deixadas no pipeline e a saída no final é implícita (como o padrão Write-Outputpara uma matriz é separado por nova linha, obtemos isso de graça - graças a @Joey pelo esclarecimento).


5
Eu gosto, porque o PowerShell pode ficar muito detalhado. No entanto, isso é elegante e curto.
Dwana

Bem, tecnicamente, o array nunca é passado através de um ToString, é desenrolado e passado elemento a elemento para Write-Output. Nos contextos em que a matriz é convertida em uma sequência, você obtém seus elementos separados por espaço.
Joey

@ Joey Ah, justo, essa é a melhor maneira de dizer. Vou editar o texto (e meu modelo de resposta ;-)).
AdmBorkBork

1
I pode ser tendenciosa aqui, porque eu estou envolvido com uma implementação PowerShell então eu tive que aprender muito sobre o que realmente se passa dentro do intérprete;)
Joey

25

V , 7 bytes

10é*10Ä

Experimente online!

Tão simples quanto uma resposta pode ser.

Explicação:

10      "10 times:
  é*    "insert an asterisk
    10Ä "make 10 copies of the current line

Versão não concorrente (5 bytes):

10O±*

Explicação:

10O     " Insert the following on the next ten lines:
   ±    "   10 copies of
    *   "   an asterisk

Isso não funcionou quando o desafio foi lançado devido a um bug.


Ponto de ordem: é e Ä são caracteres multibyte (pelo menos em utf-8, como você os possui aqui), portanto, este programa tem 9 bytes de comprimento.
rob

6
@rob Eles são codificados em utf-8 aqui, porque é assim que o navegador funciona. V usa a codificação "Latin1", onde estão E9e C4respectivamente.
DJMcMayhem

21

Água-viva , 12 10 bytes

Obrigado ao Zgarb por salvar 2 bytes.

P$'*
 &;10

Experimente online!

Explicação

Usando notação mais convencional, este programa representa a seguinte expressão:

P( $( &;(10), '* ) )

&;pega um único valor e cria um par com duas vezes esse valor, o que &;(10)nos dá [10 10]. Em seguida, $é remodelado, o que forma uma grade de 10x10 de asteriscos. Por fim, Pimprime a matriz em "formato de matriz", que imprime cada sequência em sua própria linha.


20

HTML e CSS, 104 60 bytes

p::after{content:"**********"
<p><p><p><p><p><p><p><p><p><p>

Não tenho certeza se a contagem de bytes está correta (como não estou contando as <style>tags para CSS. O HTML também pode ser reduzido se eu usar um pré-processador HTML, mas não tenho certeza se isso está violando as regras

Graças a manatwork e Business Cat.

Veja minha entrada Jade de 36 bytes


Você pode deixar de fora o auto-fechamento se /escrever todas as tags na mesma linha. Mas é melhor alterar as tags para <p>que sejam mais curtas, mesmo que você precise adicionar p{margin:0}.
Manatwork

2
Este CSS não é válido. Você precisa do suporte de fechamento!
Richard Hamilton

25
@RichardHamilton css válido e css de trabalho não são a mesma coisa
undergroundmonorail

1
@ClementNerma Por que alguém deveria colocar código depois disso?
Erik the Outgolfer

2
você pode deixar de fora o último que >eu acredito
12Me21 6/17

16

Python 2, 22 21 bytes

print('*'*10+'\n')*10

print(("*"*10+'\n')*10)trabalhou para mim.
piepi

6
@piepi É por isso que você costuma jogar melhor no Python 2 - você não precisa de parênteses ao ligar print.
Shooqie

@shooqie Você não pode vencer uma solução Python3 usando Python2. Python2 e Python3 são linguagens diferentes. Você também não compararia a solução Python2 com uma linguagem de golfe especializada como Pyth.
Alfe 14/10

16

MATLAB, 14 bytes

repmat('*',10)

Eu não tenho o MATLAB para testar isso, então não tenho certeza se isso tem espaços entre os *s.
Erik the Outgolfer

@EriktheGolfer claramente não :)
PieCot

matsugere uma matriz, foi por isso que perguntei.
Erik the Outgolfer

2
@EriktheGolfer com licença, eu fui rude. Mat, de fato, refere-se a uma matriz, mas, neste caso, é uma matriz de char, que é uma matriz de strings (cada linha é como uma string). Portanto, a matriz de saída é impressa uma linha por linha, sem espaços entre os elementos da mesma linha.
PieCot

16

APL , 9 bytes

Funciona em todos os APLs já feitos.

10 10'*'

10 10 dez linhas e dez colunas

 ciclicamente r epeating

'*' uma estrela

TryAPL online!


Vale a pena notar que esta solução não é específica do Dyalog; também funciona com o GNU APL.
Arc676

3
@ Arc676 True. De fato, ele funciona em todos os APLs já criados.
Adám 15/06/19

argh, eu preciso de apenas mais um byte ... Eu quase bateu-lhe com o truque "format":∘.⊢⍨⍕⍨,⍨5
NGN

@ngn Isso é maravilhosamente horrível!
Adám

14

Java 7, 63 bytes

void f(){for(int i=0;i++<10;)System.out.println("**********");}

Apenas por diversão. Não consigo encontrar nenhum truque para tornar isso mais curto. Tentar adicionar lógica para um loop de 100 ou retornar uma String em vez de imprimir apenas acaba pior.


1
Você pode reduzi-lo em um byte se declarar icomo uma variável de classe (o padrão é 0)::int i;void f(){for(;i++<10;)System.out.println("**********");}
shooqie

1
Isso interromperia a reutilização, a menos que eu fizesse parte i=0da função, negando a economia.
Geobits

3
+1 Parece que você é de fato certo que este é o mais curto .. recursiva é de 65 bytes: int i=10;void f(){System.out.println("**********");if(i-->0)g();}; Um por um recursiva é de 67 bytes: int i=99;void f(){System.out.print(i%10<1?"*\n":"*");if(i-->0)g();}; Usando String-construtor com carbonizar-matriz é de 82 bytes: void g(){System.out.print(new String(new char[10]).replace("\0","**********\n"));}; e um String.format é de 81 bytes: void g(){System.out.print(String.format("%010d",0).replace("0","**********\n"));}. Ah, bem, nós tentamos. ;)
Kevin Cruijssen

2
Mas isso conta sem ter que adicionar a própria declaração de classe? Qual é o programa completo java7 mais curto que pode fazer isso?
Jsbueno

1
Você precisa contar a declaração de importação, para que não funcione aqui.
Geobits

14

Ruby, 15 caracteres

puts [?**10]*10

Exemplo de execução:

bash-4.3$ ruby -e 'puts [?**10]*10'
**********
**********
**********
**********
**********
**********
**********
**********
**********
**********

Você pode explicar ?**10? É, de fato, criar uma série de dez asteriscos, mas tenho claro como ...
erich2k8

3
A ?notação literal é o caractere, então ?* == '*'. O segundo *é o String.*método , então ?**10 == '*'.*(10).
Manatwork

Com medo de ainda não entender por que ?está a notação literal de alguma coisa, mas talvez seja melhor deixar algumas perguntas sem resposta. ;)
erich2k8

Desculpe, não consigo encontrar nenhuma referência sobre isso. É simplesmente a sintaxe Ruby, que permite várias notações literais de cadeias, mais uma, caso a cadeia tenha 1 caractere: uma ?marca seguida pelo caractere, sem a necessidade de um par de fechamento da ?marca.
manatwork

1
Eu encontrei-o na referência aqui: ruby-doc.org/core-2.3.0/doc/syntax/literals_rdoc.html There is also a character literal notation to represent single character strings, which syntax is a question mark (?) followed by a single character or escape sequence that corresponds to a single codepoint in the script encoding:
erich2k8

13

Bloco de notas, 34 31 pressionamentos de tecla

**********
^A^C↓^V^A^C↓^V^V^V^V

^ indica Ctrl- <caractere seguinte> pressionamento de tecla, ↑ ↓ são teclas para cima e para baixo, respectivamente.

Adota o Crypto por 3 pressionamentos de tecla salvos.


2
Você deve pressionar as teclas para contar isso.
Leaky Nun

1
Isso é Shift + Up. Ctrl + Up é outra coisa.
Neil

1
31 teclas pressionadas**********↵^A^C↓^V^A^C↓^V^V^V^V
Crypto

1
26 teclas digitadas*****^A^C^V^V↵^A^C^V^A^C^V^V^V^V^V
Andy

5
23 teclas digitadas**^A^C^V^V^V^V^V↵^A^C^V^V^A^C^V^V^V^V^V
Andy

13

Emojicode , 54 bytes

🏁🍇🔂i⏩0 10🍇😀🔤**********🔤🍉🍉

Explicação:

🏁🍇                        👴 The beginning of program.
    🔂 i ⏩ 0 10 🍇          👵 This is called a "range".
                          It basically starts with i=0 and increments until i=10, then exits. 👵
        😀 🔤**********🔤    👵 😀 is printing class.
                          The 🔤s make the characters they surround string literals. 👵
    🍉                     👴 End of range
🍉                         👴 End of program

2
Eu conto 54 utf-8 bytes.
Conor O'Brien

Esta linguagem odeia o Windows 7 ... #
3111 John Dvorak


10

R, 27 29 bytes

cat(rep('\r**********\n',10))

Uma resposta alternativa (34 bytes) é: cat(rep('**********',10),sep='\n')


Isso adiciona um espaço extra no início de todas as linhas, exceto a primeira (veja aqui ).
Plannapus

Obrigado, ele funciona adicionando \r.
Mamie

1
Outra alternativa, muitos (37) bytes: cat(matrix('*',10,10),fill=10,sep='') r-fiddle
Jonathan Carroll

Outra alternativa, também com 29 bytes:write(rep("*",100),"",10,,"")
Giuseppe

1
E write(rep("**",50),1,5,,"")tem 27 bytes e evita o primeiro retorno de carro.
precisa saber é

9

PHP, 32 bytes

for(;$i++<10;)echo"**********
";

(variante 32 bytes - foi escrita com echo)

<?=str_repeat("**********
",10);

(variante 33 bytes)

<?=str_pad("",110,"**********
");

(variante 33 bytes)

for(;$i++<110;)echo$i%11?"*":"
";

(variante 35 bytes)

for(;$i++<10;)printf("%'*10s
",'');

(variante 38 bytes)

<?=($a=str_repeat)($a("*",10)."
",10);

3
O segundo pode ser golfed a 32 bytes , bem como:<?=str_repeat("**********↵",10);
insertusernamehere

1
Como você já tem uma boa coleção de alternativas, eis outra para se divertir: echo chunk_split(str_repeat("*",100),10);a mais longa até agora, apenas na minha visão, essa é a maneira do PHP fazer isso.
manatwork

Pode ser um byte mais curto com a codificação WIN-1252: for(;++$i<111;)echo$i%11?~Õ:~õ;oufor(;++$i<11;)echo~ÕÕÕÕÕÕÕÕÕÕõ;
aross

Outra variante módulo para 33 bytes: for(;$i++<110;)echo"*↵"[$i%11<1];. E para adicionar uma solução de 37 bytes a essa coleção: for(;$i++<110;)echo chr($i%11?42:10);.
Titus


8

Brainfuck, 46 43 bytes

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

Experimente online! Requer um intérprete com uma fita aberta à esquerda e com células de 8 bits.

A primeira parte deste programa +[[---<]+[-->]<]configura a fita da seguinte forma:

[255, 250, 245, ... 15, 10, 5, 0, 250, 240, 230, ..., 40, 30, 20, 10, 0]
                                                                      ^

Isso fornece 40 para a saída de asteriscos ( *ASCII 42), 20 para usar como contador de loop e 10 para a saída de novas linhas.


7

JavaScript (ES6), 37 bytes

console.log(`**********
`.repeat(10))

Uma resposta direta.


5
Você não pode salvar 6 usando alert?
Kevin L

1
É possível que você possa salvar 13 bytes removendo console.log()e especificando REPLno título.
Patrick Roberts


6

Haskell, 29 bytes

putStr$[0..9]>>"**********\n"

<list1> >> <list2>faz (length <list1>)cópias de <list2>.


6

R, 35 33 32 bytes

Ô R, às vezes você é tão detalhado .

for(i in 1:10)cat(rep("*",10),"\n")

Curiosamente, a catfunção não tem valor (fornece NULLSTDOUT), então você não pode fazer algo parecido rep(cat(rep))), o que seria mais engraçado!

EDIT:
Nova solução proposta por @LeakyNun, -2 bytes.

for(i in 1:10)cat("**********\n")

EDIT: Encurtando-o apenas por -1 byte, por @ user5957401

for(i in 0:9)cat("**********\n")

3
for(i in 1:10)"**********\n"
Leaky Nun

1
@LeakyNun: Simplicidade é a chave! Eu tinha cat, no entanto, caso contrário, não produz nada.
Frédéric

cat(rep("**********\n",10))
Freira vazada

@LeakyNun Não produziria a saída desejada: veja aqui . O separador padrão em caté um espaço, portanto, esta saída.
plannapus

5

Retina , 12 bytes

A contagem de bytes assume a codificação ISO 8859-1. O avanço de linha principal é significativo.


10$**
.
$_¶

O primeiro estágio grava uma sequência de dez asteriscos, o segundo estágio substitui cada asterisco pela sequência inteira e um avanço de linha. Isso imprime dois feeds de linha à direita.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.