Use qualquer linguagem de programação para exibir números entre 1 e 99 (incluindo os dois) de tal maneira que:
- os números são separados por espaço único,
- se um número é divisível por 3, deve estar entre parênteses,
- se um número é divisível por 4, deve estar entre colchetes,
- se um número é divisível por 3 e 4, deve estar entre parênteses e colchetes (com colchetes mais próximos do número).
Seu programa deve exibir exatamente:
1 2 (3) [4] 5 (6) 7 [8] (9) 10 11 ([12]) 13 14 (15) [16] 17 (18) 19 [20] (21) 22 23 ([24]) 25 26 (27) [28] 29 (30) 31 [32] (33) 34 35 ([36]) 37 38 (39) [40] 41 (42) 43 [44] (45) 46 47 ([48]) 49 50 (51) [52] 53 (54) 55 [56] (57) 58 59 ([60]) 61 62 (63) [64] 65 (66) 67 [68] (69) 70 71 ([72]) 73 74 (75) [76] 77 (78) 79 [80] (81) 82 83 ([84]) 85 86 (87) [88] 89 (90) 91 [92] (93) 94 95 ([96]) 97 98 (99)
code-golf
kolmogorov-complexity
Monolica
fonte
fonte
Respostas:
05AB1E , 23 bytes
-1 byte graças a Kevin Cruijssen
Experimente online!
fonte
}?ð?
para]ðý
(perto tanto o se e laço, e juntar-se toda a pilha por espaços)Å€
Python 2 ,
686560 bytesExperimente online!
fonte
R , 61 bytes
Experimente online!
fonte
Geléia ,
2120 bytesExperimente online!
Como funciona
fonte
D , 110 bytes
Experimente online!
Portado da resposta C ++ do @ HatsuPointerKun.
fonte
Carvão , 30 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
J ,
5453 bytes1 byte a menos, graças a @Jonah
Experimente online!
fonte
stdout
aqui ... Eu nunca vi isso antes. @FrownyFrog#
. Eu tinha introduzido um auxiliar verbo surround com()
e[]
:g=. {.@[ , ":@] , {:@[
. ugh a verbosidade!LF
vez de_
. o último parece funcionar também.C, C ++,
136133131129128124 bytes-5 bytes graças ao Zacharý e inspirado pela função write () na linguagem D (consulte a resposta do Zacharý)
-2 bytes graças a mriklojn
-12 bytes para a versão C, graças a mriklojn
-4 bytes graças ao ceilingcat
Otimização específica C: 115 bytes
fonte
inf f()
coisa? Desculpe 'bout apagar meus comentários, pensei que tinha algo mais curto (eu não)printf
era uma coisa. Você não poderia usar o C stdio então?int i
fora da função (no escopo global), seu valor será padronizado como 0 e o tipo de dados será padronizado comoint
. Isso resultaria em seu loop a partir de 0, e para corrigir isso, você pode mover o incremento na expressão condição em seu loop, fazendo com que pareçai;f(){for(;++i<=99;)
")\0"+i%3
vez dei%3?"":")"
. Além disso, acho que você precisa adicionari=0
no início do loop.PowerShell, 60 bytes
Explicação:
$_, "($_)", "[$_]", "([$_])"
[!($_%3)+2*!($_%4)]
Script de teste com menos golfe:
Saída:
fonte
MathGolf ,
41403429 bytesNOTA: Possui um espaço à direita
Apenas minha segunda resposta MathGolf ..
-5 bytes graças a @JoKing .
Experimente online.
Explicação:
fonte
q
poderia ser omitido e é feito implicitamente em loops. Além disso, não sabia que havia um built-in de 2/3/4 cordas. Pena que o truque de rotação não funciona com a matriz agrupada.Haskell , 77 bytes
Experimente online!
Gostaria de saber se
show[n]
pode ser usado para encurtar as coisas, até agora sem sucesso .fonte
Lua,
161123 bytesExperimente online!
Ungolfed:
fonte
Python 2 ,
1059788868584 bytesExperimente online!
fonte
C (gcc) , 84 bytes
Há um byte nulo no início de cada "string de colchete".
Experimente online!
fonte
PowerShell ,
6762 bytesExperimente online!
Basicamente, um FizzBuzz usando multiplicação de string vezes variáveis booleanas (convertidas implicitamente em 1 ou 0). Essas seqüências são deixadas no pipeline e reunidas em um bloco de script entre aspas. Como o padrão
$OutputFieldSeparator
para uma matriz é espaços, isso implicitamente nos fornece elementos de matriz delimitados por espaço.fonte
C #,
124117123 bytes-5 bytes graças a Kevin Cruijssen
Teste com:
fonte
x
vez dei
, portanto, não precisa se preocupar com oint
? (Você ainda teria que configurá-lo, é claro).i
e o fato de que eu posso inicializá-lo em 0 quando euInvoke
. Mas isso não significa que eu teria que incluir a declaração de t (Action<int>
) e a chamada (t.Invoke(0)
) no bytecount?x=>{for(x=0;x++<99;)Console.Write((x%3==0?"(":"")+(x%4==0?"[":"")+x+(x%4==0?"]":"")+(x%3==0?")":"")+(x%99==0?"":" "));};
funcionaria.==0
podem ser<1
.Vermelho ,
9997 bytesExperimente online!
fonte
Ruby ,
7266 bytesAgradecemos a @ jonathan-frech e @ conor-obrien por cortes adicionais.
fonte
a.join b
para uma matriza
e stringb
é equivalente aa*b
PowerShell,
988274676362 bytesUm enorme -31 bytes graças a @Veskah -5 bytes graças a @ ASCII-only
Experimente online!
Ainda não tenho muita certeza do que fiz aqui.
fonte
"$a"
ainda substituirá o valor. (Nota: aspas simples não substituem$foo
, apenas aspas duplas). Outro truque é ifs só se preocupam com 0 ou 1 para que você possa usar a lógica booleana para salvar um byteperl -E, 60 bytes
Alguns bytes podem ser salvos se pudermos usar novas linhas entre os números: nesse caso, podemos remover o
$,=$";
, alterar o loopmap
em umfor
loop, enquanto o movemossay
para o loop.fonte
/^1$|^(11+?)\1+$/
?Perl 6 ,
5148 bytesExperimente online!
fonte
Lote, 145 bytes
O código entra na sub-rotina, mas a string já foi impressa por este ponto, para que o código seja executado sem causar danos.
fonte
PHP 103
for(;$i<1e2;$i++)$a.=$i%12==0?"([$i]) ":($i%3==0?"($i) ":($i%4==0?"[$i] ":"$i "));echo substr($a,5,-1);
https://www.ideone.com/SBAuWp
fonte
Limpo , 100 bytes
Experimente online!
fonte
sfk , 225 bytes
Experimente online!
fonte
Bash, 61 bytes
-14 bytes, graças a Dennis
explicação
Bem direto:
seq
produz 1..99awk
com o separador de registro de saída (ORS
) definido como espaço, de forma que a saída seja uma única linha.Experimente online!
fonte
JavaScript (Node.js) , 57 bytes
Experimente online!
Mudou para a comunidade, porque a otimização depende muito dela
fonte
${n%4?n:`[${n}]`}
PHP, 65 bytes
ou
(requer PHP 5.5 ou posterior)
Corra com
-nr
ou experimente-os online .fonte
Python 2 , 78 bytes
Experimente online!
Eu imaginei essa abordagem legal de fatiar,
'([%0d])'
mas não consigo obter as expressões mais curtas.fonte
Java 8,
9291 bytes-1 byte graças a @Dana
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
Experimente online!
Solução alternativa, 82 bytes (com espaço à direita na saída - não tenho certeza se isso é permitido):
i->{for(;i++<99;)out.printf((i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)+" ",i);}
Explicação:
for(;i++<99;)
- um loop for que passa do valor dei
(reutilizado como entrada, considerado 0 neste caso) a 99out.printf(<part1>+<part2>,i);
- formata a string antes de imprimi-la imediatamente no stdout com o valor dei
where
<part1>
is(i>1?" ":"")
- imprime o espaço antes de imprimir o número, a menos que esse número seja 1; nesse caso, omite o espaçoe
<part2>
é(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)
- sei
é divisível por 3 e 4,i
tem colchetes quadrados e redondos ao seu redor; caso contrário, sei
divisível por 3,i
possui colchetes; caso contrário, sei
divisível por 4,i
possui colchetes; caso contrário,i
não tem colchetes.fonte
(i>1:" ":"")
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
?