Nesse desafio, você terá quatro tarefas diferentes, mas um tanto relacionadas, que devem ser resolvidas de uma maneira específica. Primeiro, explicarei as tarefas e, a seguir, uma explicação de como você deve resolvê-las.
Para todas as quatro tarefas, seu código deve receber dois números inteiros positivos como entrada:, n,m
onde n<m
. Todas as tarefas devem ser resolvidas no mesmo idioma. A orientação das matrizes é opcional (n por m pode ser interpretado como "n linhas, m colunas" ou "n colunas, m linhas").
Tarefa 1:
Criar (e de saída / impressão) um vetor / list composto pelos elementos: n, n+1 ... m-1, m
. Assim, para n=4, m=9
, você deve saída: 4,5,6,7,8,9
.
Tarefa 2:
Crie (e produza / imprima) uma matriz / matriz / lista de listas (ou equivalente) com esta aparência:
n, n+1, ... m-1, m
n+1, n+2, ... m-1, m+1
...
n+m, n+m+1, ... 2*m-1, 2*m
Para n=4, m=9
você deve produzir:
4, 5, 6, 7, 8, 9
5, 6, 7, 8, 9, 10
...
13, 14, 15, 16, 17, 18
Tarefa 3:
Crie (e produza / imprima) uma tabela de multiplicação n por m (em qualquer formato adequado). Exemplo para n=4, m=9
:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
5 10 15 20
6 12 18 24
7 14 21 28
8 16 24 32
9 18 27 36
Tarefa 4:
Saída / impressão de um vetor / lista que consiste nos elementos na tabela de multiplicação da tarefa 3, classificados em ordem crescente, mantendo valores duplicados. Para n=4, m=9
, você deve saída: 1, 2, 2, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9, 9, 10, 12, 12, 12, 14, 15, 16, 16, 18, 18, 20, 21, 24, 24, 27, 28, 32, 36
.
O desafio:
Agora, todas as tarefas acima são bastante triviais. O verdadeiro desafio aqui é que o código da tarefa 2 deve começar com o código da tarefa 1, o código da tarefa 3 deve começar com o código da tarefa 2 e o código da tarefa 4 deve começar com o código da tarefa 3.
Para deixar mais claro:
Suponha que o código da tarefa 1 seja (funciona na oitava):
@(n,m)(n:m)
Em seguida, seu código para a Tarefa 2 pode ser (funciona no Octave):
@(n,m)(n:m)+(0:m)'
O código da tarefa Tarefa 3 deve ser (não funciona no Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3"
E, finalmente, o código da Tarefa 4 deve ser (não funciona no Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3""Code_for_task_4"
Isso é código-golfe ; portanto, a submissão com o código mais curto da tarefa 4 em cada idioma vence. Como sempre: as explicações são altamente encorajadas.
>2;
para que o código da tarefa anterior seja essencialmente processado?0<n<m
ou0<=n<m
?Respostas:
Gelatina , 12 bytes
Tarefa 1
Experimente online!
Tarefa 2
Experimente online!
Tarefa 3
Experimente online!
Tarefa 4
Experimente online!
Como funciona
Tarefa 1
r
é o átomo do intervalo diádico e faz exatamente o que a tarefa pede.Tarefa 2
Uma cadeia diádica que começa com três elos diádicos é um garfo ; os links mais externos são avaliados primeiro e, em seguida, o link do meio é chamado com os resultados dos dois lados como argumentos.
r
comporta-se como antes, produzindo [n,…, m] .0r$}
é um link rápido (ou link rápido, se você desejar).A rápida
$
(cadeia monádica) consome os elos0
(rendimento 0 ) er
(faixa diádica) e os transforma em uma cadeia monádica. Quando chamado com o argumento k , isso produzirá [0,…, k] .O quick
}
(argumento correto) pega o link rápido criado por$
e o transforma em um link diádico que chama0r$
com0r$}
o argumento correto.0r$}
será chamado com o argumento esquerdo n e o argumento direito m , portanto,0r$
é aliado ao argumento m e produz [0,…, m] .+þ
é outro link rápido.þ
(tabela) chamará+
(adição) para cada elemento em seu argumento esquerdo e qualquer elemento em seu argumento direito, agrupando os resultados para cada argumento direito em uma única linha.+þ
será chamado com o argumento esquerdo [n,…, m] e o argumento direito [0,…, m] , produzindo a tabela desejada.Tarefa 3
Cada linha em um programa Jelly define um link diferente. O último é o link principal e, como a
main
função de C , é o único link executado por padrão. Os links restantes podem ser chamados no link principal, mas não faremos isso aqui.Como antes,
þ
(tabela) chamará×
(adição) para cada elemento em seu argumento esquerdo e qualquer elemento em seu argumento direito, agrupando os resultados para cada argumento direito em uma única linha.Como os dois argumentos
×þ
são inteiros, osþ
converte em intervalos, transformando os argumentos n e m em [1,…, n] e [1,…, m] .Tarefa 4
×þ
funciona como antes. Os links a seguir são monádicos, tornando-os no topo , ou seja, são aplicados sobre os anteriores.Após a execução
×þ
,F
nivela a matriz 2D resultante eṢ
classifica a matriz 1D resultante.fonte
05AB1E ,
1817 bytesTarefa 1
Experimente online
Tarefa 2
Experimente online
Tarefa 3
Experimente online
Tarefa 4
Experimente online
Explicações
Tarefa 1
Tarefa 2
Tarefa 3
Tarefa 4
fonte
MATL ,
1817 bytesTarefa 1
Experimente online!
Tarefa 2
Experimente online!
Tarefa 3
Experimente online!
Tarefa 4
Experimente online!
Explicação
Tarefa 1
Tarefa 2
Tarefa 3
Tarefa 4
fonte
Mathematica,
8477 bytesEdit: Obrigado a Martin Ender por salvar 7 bytes.
Tarefa 1:
Puro
Function
com argumentosn
em
quais saídasn~Range~m
, a forma infix deRange[n,m]
.Tarefa 2:
n~Range~m~Table~(m+1)
cria uma matriz 2D comm+1
linhas, onde cada linha é a saída da tarefa anterior. Em seguida,//0~Range~m+#&
é a aplicação postfix da função0~Range~m+#&
que efetivamente adiciona0
à primeira linha,1
à segunda linha e assim por diante atém
om+1
-a linha.Tarefa 3:
Isso apenas aplica a função constante
1##&~Array~{n,m}&
à saída da tarefa anterior.Tarefa 4:
Flatten
se esSort
a tabuada de multiplicação.fonte
Python, 183 bytes
Tarefa 1, 29 bytes
Experimente online!
Tarefa 2, 84 bytes
Experimente online!
Tarefa 3, 137 bytes
Experimente online!
Tarefa 4,
183167 bytesExperimente online!
Explicação:
Tarefa 1:
Bastante simples, ele gera um
n
am
lista usando Python built-inrange
função.Tarefa 2:
Para cada número
0
atém+1
, ele adiciona esse número a cada item de uma lista den
atém
.Tarefa 3:
Para cada número de
1
atém
, ele multiplica esse número por cada número em uma lista de1
atén
.Tarefa 4:
Isso usa a
sorted
função incorporada do Python, que classifica uma lista do menor para o maior. A compreensão da lista na função é usada para achatar a lista. Ele cria uma lista de todos os itens da lista fornecida pela tarefa 3.Salvei muitos bytes graças a @math_junkie.
fonte
def s(n,m):return [[w+i for w in r(n,m)] for i in a(0,m+1)]
, é uma função completa quando o código da tarefa 1 é definido.a=lambda n,m:...
para cada uma de suas definições de função. Função anônima são sempre mais curto em pythonPHP 7, 200 bytes
Usa o buffer de saída para limpar a saída anterior.
Tarefa 1
Salva o código
$s
para reutilizá-lo mais tarde. o$v
variável é para a última tarefa.Tarefa 2
Imprime as linhas restantes.
Tarefa 3
Limpa o buffer de saída e imprime a tabela de multiplicação, salvando os números em
$v
.Tarefa 4
Limpa o buffer de saída novamente e imprime
$v
.fonte
PowerShell , 126 bytes
Tarefa 1
Experimente online!
Usa o
..
operador de intervalo interno. O comportamento padrão para o implícitoWrite-Output
insere uma nova linha entre elementos; é por isso que a saída é exibida como nova linha separada.Tarefa 2
Experimente online!
Despeja a primeira tarefa para STDERR com e
>2;
, em seguida, executa um loop de0
para$m
cada auxiliar de configuração de iteração$i
antes de fazer um loop novamente de$n
para$m
e incrementar cada número por$i
. São-join
editadas com vírgulas; caso contrário, isso seria uma saída gigantesca e ambígua de um elemento por linha.Tarefa 3
Experimente online!
O mesmo tipo de coisa
>2;
para despejar a anterior para STDERR. Simplesmente fazemos um loop duplo de1
para$m
então1
para$n
, configurando o auxiliar$i
ao longo do caminho, multiplicando os valores e-join
com um espaço para torná-lo tabular. Observe os parênteses de encapsulamento - eles entrarão em jogo na próxima tarefa - mas aqui eles apenas garantem que a saída seja colocada no pipeline (o que já seria, então são redundantes).Tarefa 4
Experimente online!
Aha! Finalmente alguma redundância. Como a tarefa anterior tem parênteses, podemos prender o
-split
espaço em branco sem se preocupar, converter cada um em um número inteiro|%{+$_}
e depois|sort
. A saída é novamente separada por nova linha.Eu acho que existem algumas maneiras de alavancar melhor a redundância entre as tarefas - ainda jogando golfe.
fonte
ES2016-ish,
401384 caracteresAqui está uma primeira tentativa. Tenho certeza de que poderia ser um pouco condensado, mas é bem curto. A seta funciona FTW! (Adore essas instruções implícitas de retorno.) Novo e aprimorado com seqüências de caracteres de modelo!
Tarefa 1
Ligar
z(n,m)
para a saída do log. (Estou usando o nome console.log para jogar depois.)Tarefa 2
Segundo verso ... expande no primeiro.
Agora ligue
y(n,m)
. Bonita não?Tarefa 3
Tem que ignorar a maioria das funcionalidades existentes
<sadface />
.Agora, o nome do método é
v
. Chame da mesma maneira.Tarefa 4
E agora podemos reutilizar novamente.
Tive que pular
u
para o meu método, por isso ét
. Desapontado, eu tive que colocar nessa função de classificação, porque osString.match
valores retornados como ... strings.fonte
Ruby,
121103 bytesTudo em Ruby é truthy exceto
nil
efalse
, o que significa que as tarefas pode ser configurado para ignorar a entrada anterior com nada além de um bem-colocadoand
/&&
.Tarefa 1
Experimente online!
Tarefa 2
Experimente online!
Tarefa 3
Experimente online!
Tarefa 4
Experimente online!
fonte