Tarefas diferentes, mesmos caracteres

36

Neste desafio, você precisa resolver 4 tarefas diferentes usando o mesmo conjunto de caracteres. Você pode reorganizar os caracteres, mas não pode adicionar ou remover caracteres.

O vencedor será o envio que resolverá todas as tarefas usando o menor número de caracteres. Todas as tarefas devem ser resolvidas no mesmo idioma.

Observe que é o menor número de caracteres, não o menor número de caracteres únicos .

Tarefa 1:

Emita os primeiros Nnúmeros de cada terceiro número composto . O código de bloqueio abaixo mostra os 19 primeiros números compostos na primeira linha e cada terceiro número composto na linha abaixo.

4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30
4,       9,         14,         18,         22,         26,         30

Se N=5então a saída deve ser 4, 9, 14, 18, 22. Você deve apoiar 1<=N<=50.

Números compostos são números positivos que não são números primos ou 1.

O resultado para N=50é:

4, 9, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 57, 62, 65, 69, 74, 77, 81, 85, 88, 92, 95, 99, 104, 108, 112, 116, 119, 122, 125, 129, 133, 136, 141, 144, 147, 152, 155, 159, 162, 166, 170, 174, 177, 182, 185, 188, 192

Tarefa 2:

Saída de uma N-by-Ntabela de multiplicação. Você deve apoiar1<=N<=20

Exemplo:

N = 4
1   2   3   4
2   4   6   8
3   6   9  12
4   8  12  16

O formato de saída é opcional, a seguir é aceitável [[1,2,3,4],[2,4,6,8],[3,6,9,12],[4,8,12,16]].

Tarefa 3:

Determine se um número é um número de Fibonacci . Você deve oferecer suporte positivo Naté o limite inteiro padrão do seu idioma. Se houver números inteiros de 32 bits e números inteiros de 64 bits, você poderá optar por usar aquele que requer o código mais curto. Por exemplo, use em intvez de long intse tiver a opção. Você não pode escolher números inteiros menores que 32 bits, a menos que isso seja padrão (você não pode usar números inteiros de 8 bits se 32 bits for o padrão).

true/false, false/true, 1/0, 1/-1, a/bEstão todos de saída aceitável, desde que seja consistente.

Tarefa 4:

Tome Ncomo entrada e saída o resultado de 1^1+2^2+3^3+...N^N. Você deve apoiar 1<=N<=10.

Os 10 resultados diferentes são:

1, 5, 32, 288, 3413, 50069, 873612, 17650828, 405071317, 10405071317

Isso é , então a submissão mais curta em cada idioma vence!

Este snippet de pilha ajudará a verificar sua solução. Ele mede o conjunto mínimo de caracteres necessário para incluir todas as quatro soluções e mostra os caracteres restantes.

Stewie Griffin
fonte
1
Binário: dois caracteres
coredump
@coredump Sim, dois únicos personagens ...
Stewie Griffin

Respostas:

12

Python, 88 87 bytes

lambda n:[a for a in range(11*n)if any(a%b<1for b in range(2,a))][:3*n:3]#1,,,=====bd++
lambda n:[[a*b for b in range(1,n+1)]for a in range(1,n+1)]#,,::ybaaa(*i%n< =====2)d33f
f=lambda n,a=1,b=1:a<n and f(n,b,a+b)or n==a#2eerrrfo::((**iii11[[aannn+     ]]y))%33gg
f=lambda n,a=1:a<=n and a**a+f(n,a+1)#::ooeeiii]]      y))bbbgg,,rrrra((11[[nnnnf==2%33

Não se esforçou muito para compartilhar personagens ou os próprios campos de golfe, isso quase certamente será derrotado.

orlp
fonte
1
Vai range(11*n)sempre conter compósitos suficientes?
FlipTack
1
@FlipTack Sim, 5*né suficiente.
Martin Ender
12

Geléia , 19 18 17 caracteres

Tarefa 1

Ḟþe*S
×5µḊḟÆRm3ḣ³

Experimente online!

Tarefa 2

5µḊḟÆRm3ḣ³Ḟe*S
×þ

Experimente online!

Tarefa 3

5µḊḟmḣþ*S
×3RÆḞ³e

Experimente online!

Tarefa 4

×5ḊḟÆm3ḣ³þe
Rµ*ḞS

Experimente online!

Como funciona

Cada linha em um programa Jelly define um link (função) separado . O último é o link principal e é chamado automaticamente quando o programa é executado. A menos que o link principal faça referência aos outros de alguma forma, eles não terão efeito. Observe que mesmo os links não chamados podem não conter erros do analisador.

Tarefa 1

×5µḊḟÆRm3ḣ³  Main link. Argument: n

×5           Yield 5n.
  µ          Begin a new chain, with argument 5n.
   Ḋ         Dequeue; yield [2, ..., 5n].
     ÆR      Prime range; yield all primes in [1, ..., 5n].
    ḟ        Filter; remove the elements to the right from the ones to the left.
       m3    Pick every third element.
         ḣ³  Keep the first n results.

Tarefa 2

Esse é trivial: ×é o átomo de multiplicação, e o rápido þ(tabela) se aplica ×a cada combinação de elementos no argumento esquerdo e no direito. Se os argumentos forem números inteiros (que estão aqui), também os converterá para o intervalo primeiro.

Tarefa 3

×3RÆḞ³e  Main link. Argument: n

×3       Yield 3n.
  R      Range; yield [1, ..., 3n].
   ÆḞ    Fibonacci; yield [F(1), ... F(3n)].
     ³e  Test if n exists in the result.

Tarefa 4

Rµ*ḞS  Main link. Argument: n

R      Range; yield [1, ..., n].
 µ     Begin a new chain with argument [1, ..., n].
   Ḟ   Floor; yield [1, ..., n].
  *    Yield [1**1, ..., n**n].
    S  Take the sum.
Dennis
fonte
Fico feliz em ver ÆḞjá está provando ser útil!
Lynn
9

Mathematica, 60 caracteres

Tarefa 1: Compósitos

#/AFF^abcinoruy{};Select[Range[2,9#],!PrimeQ@#&][[;;3#;;3]]&

Tarefa 2: Tabela de multiplicação

!29;F@FPQRS[];a^b;c[c[e]];eeegiilmnnotu;Array[3##&,{#,#}]/3&

Tarefa 3: Fibonacci

##&;239;A/PS[]^e[];lmrtuy;{,};!FreeQ[Fibonacci@Range[3#],#]&

Tarefa 4: Soma de poderes

!###&;23/39;A@F;F[P[Q[]]];Raabccegiilnnorrty;Sum[e^e,{e,#}]&

Cada envio é um conjunto de expressões que são ignoradas, seguidas por uma função sem nome que implementa a tarefa especificada.

Eu escrevi um script CJam simples que " otimiza " combina soluções brutas, acrescentando um comentário. Acabei economizando três bytes além disso, livrando-me manualmente de cada comentário (o que exigia alguma reorganização para obter sintaxe válida em cada caso). O script tornou muito mais fácil experimentar variações simples das soluções para ver se elas reduziriam a pontuação geral. Sinta-se livre para usar o script você mesmo.

Martin Ender
fonte
Eu tenho um comentário, mas não é sobre o seu próprio código: P. (Boa resposta, aliás). Seu script CJam ignora uma falha simples: se eu inserir abe bacomo os scripts, ele me dará (**)abe (**)ba, em vez de abe ba.
HyperNeutrino
@AlexL. Sim, também não considera o fato de que (**)ele próprio poderia ser usado para cobrir alguns caracteres se eles fossem usados ​​em qualquer outro programa.
Martin Ender
9

MATL , 29 28 26 caracteres

Tarefa 1 (todo terceiro número composto)

6*:tZp~)G:3*q)%G"$]vwm^sl+

Experimente online!

Tarefa 2 (tabuada)

:l$*%6*tZp~)G:3q)G"]vwm^s+

Experimente online!

Tarefa 3 (detector de Fibonacci)

l6Zp~G:"3q$t+]vGwm%):*)^s*

Isso exibe 1/ 0para Fibonacci / não Fibonacci, respectivamente.

Experimente online!

Tarefa 4 (soma de poderes)

:t^s%6*Zp~)G:3*q)G"$]vwml+

Experimente online!

Verifica

Este programa insere as quatro seqüências e as exibe ordenadas, para verificar visualmente se elas usam os mesmos caracteres.

Explicações

%é o símbolo do comentário. Tudo à sua direita é ignorado.

Tarefa 1 (todo terceiro número composto)

6*    % Input N. Multiply by 6
:     % Range [1 2 ... 6*N]. This is enough because every even number is composite,
      % so this contains at least 3*N composite numbers
t     % Duplicate
Zp    % Isprime
~     % Negate
)     % Use as index to select composite numbers, including 1, from [1 2 ... 6*N]
G:    % Push [1 2 ... N]
3*q   % Multiply by 3 and subtract 1: gives [2 5 ... 3*N-1]
)     % Pick those composite numbers. Implicitly display

Tarefa 2 (tabuada)

:     % Input N. Range [1 2 ... N]
l     % Push 1
$     % Specify that next function will take 1 input
*     % Product of array. With 1 input it produces all pair-wise products
      % Implicitly display

Tarefa 3 (detector de Fibonacci)

l     % Push 1
6     % Push 6
Zp    % Isprime. Gives false
~     % Negate. Gives true, or 1
G:    % Push [1 2 ... N], where N is the input
"     % For each
  3q  %   3, subtract 1
  $   %   Specify that next function will take 2 inputs
  t   %   Duplicate the top two elements of the stack
  +   %   Add
]     % End
v     % Vertically concatenate the entire stack. This produces a column vector
      % with a sufficient amount of Fibonacci numbers
G     % Push input N
w     % Swap
m     % Ismember. Gives true if input is in the vector of Fibonacci numbers
      % Implicitly display

Tarefa 4 (soma de poderes)

:     % Implicitly input N. Push [1 2 ... N]
t     % Duplicate
^     % Power, element-wise
s     % Sum of array. Implicitly display
Luis Mendo
fonte
Quando olhei pela primeira vez para o desafio, pensei que Hey MATL would be perfect for this!você me vencesse. +1
DJMcMayhem
@DJMcMayhem Desculpe, tendem a responder muito. Da próxima vez, faça um ping e eu evitarei se você estiver trabalhando nisso :-) De qualquer forma, por que não seguir em frente? Talvez você possa superar isso
Luis Mendo
3
@DJMcMayhem, por favor , poste uma resposta também, mesmo se você não conseguir superar Luis. Eu gostaria que mais pessoas publicassem respostas em idiomas que já são usados, mesmo que não consigam superar o primeiro.
Stewie Griffin
@stewiegriffin Haha, tudo bem. Ainda não tenho uma resposta válida, mas se eu receber uma (e ela é suficientemente diferente), postarei.
DJMcMayhem
7

Perl 6 , 61 bytes

{(4..*).grep(!*.is-prime)[0,3...^*>=$_*3]}#$$&+1==>X[]__oot{}
{[X*](1..$_,!0..$_).rotor($_)}#&***+-..334===>>[]^eegiimpps{}
{(1,&[+]...*>=$_)[*-!0]==$_}#$()**....334>X^_eegiimoopprrst{}
{[+]((1..$_)>>.&{$_**$_})}#!**,-....0334===X[]^eegiimoopprrst

O segundo retorna ((1,2,3,4),(2,4,6,8),(3,6,9,12),(4,8,12,16))quando dado4

O Perl 6 não tem realmente um número máximo máximo, mas o terceiro funciona instantaneamente com uma entrada de 15156039800290547036315704478931467953361427680642. Os únicos fatores limitantes seriam memória e tempo.

Caso contrário, todos serão executados "instantaneamente" para entradas muito além do necessário.

Experimente online

Brad Gilbert b2gills
fonte
6

JavaScript (ES6), 101 100 95 93 91 bytes

(n,r=[],a=(y,m)=>n?y%m?a(y,++m):a(y+1,2,y==m||n--%3||r.push(y)):r)=>a(4,2,n*=3)//>....p*A&&
n=>[...Array(n)].map((r,y,m)=>m.map((s,n)=>y*++n,y+=1))//22334(,,,,===ayy)??%%::||||--uh*&&
r=(n,y=1,a=2)=>n==y||n>y&&r(n,a,y+a)//2334((((,,,,r=[]ayymmmm))))>??%%++::||--.....ppush**A
r=y=>y&&y**y+r(y-1)//22334(((((nnnn,,,,,,,,r=====[]aaaaymmmm)))))>>??%%++::||||-.....ppushA

Edit: Salvo 1 byte, não suportando 0como um número de Fibonacci. Economizou 5 bytes mais 2 bytes (1 graças a @Arnauld) renomeando variáveis. Economizou 2 bytes alternando entre +1, ++e +=1.

Neil
fonte
Substituir todas as ocorrências da cvariável por Adeve salvar um byte.
precisa
(Eu estava prestes a sugerir que você também pode substituir dcom y, mas dé indefinido na versão atual, então você provavelmente vai querer corrigir isso primeiro)
Arnauld
@ Arnauld Obrigado por apontar isso, mas consegui consertar as coisas e salvar um byte adicional renomeando apara m.
Neil
4

MATL , 30 caracteres

O conjunto de caracteres com o qual eu fui é:

!%))*+001233::<=GGQZ\]^`pstvyy~

Não consegui superar a outra resposta do MATL, mas me diverti com essa solução.

Tarefa 1:

Terceiros números compostos.

4t^:QtZp~)G3*:3\1=)%!`yy+<]vGs

Experimente online!

Tarefa 2:

Tabela de multiplicação. Definitivamente a tarefa mais fácil, devido à maneira como o MATL funciona

:t!*%4QZp~)G3:3\1=)`yy+<]vGs^t

Experimente online!

Tarefa 3:

Testador de Fibonacci. Imprime um número inteiro positivo (1 ou 2) para entradas verdadeiras e 0 para entradas falsas.

1t`yy+tG<]vG=s%4:QZp~)3*:3\)!^

Experimente online!

Tarefa 4:

Soma de poderes

:t^s%1`yy+tG<]vG=4QZp~)3*:3\)!

Experimente online!

Postarei uma explicação mais completa mais tarde, mas, por enquanto, você deve observar que %é o caractere de comentário, portanto os programas são realmente:

4t^:QtZp~)G3*:3\1=)
:t!*
1t`yy+tG<]vG=s
:t^s
DJMcMayhem
fonte
4

PowerShell , 95 94 bytes

( TimmyD salvando meu bacon mais uma vez)

Tarefa 1:

(""..999|?{'1'*$_-match'^(?=(..+)\1+$)..'})[(0..("$args"-1)|%{$_*3})]#|$$$$===ss%``iiex!!nnnq;

Experimente online!


Tarefa 2:

($s=1.."$args")|%{"`$s|%{$_*`$_}"|iex}#0113999((((......??''''*$$$--match^===++))))\[]i!!nnnq;

Experimente online!


Tarefa 3:

!!(($i="$args")..($s=1)|?{($n=($s+=$n)-$n)-eq$i})#0113999......||?{''''**__match^+\}[""%%]``x;

Experimente online!


Tarefa 4:

"$args"..1|%{$s+="$_*"*$_+1|iex};$s#013999(((((......|??{''''$$$--match^===)))))\}[%]``i!!nnnq

Experimente online!

briantist
fonte
Ah, essa string em "$args"vez de $args[0]é brilhante. Eu vou usar isso daqui em diante.
AdmBorkBork
@ TimmyD Sim, eu tenho usado isso para economizar um único byte em qualquer coisa com um único parâmetro.
Briantist
@TimmyD good point! Eu teria que reescrever todos eles para ter certeza, eu poderia revisitá-lo e aplicá-lo. Depois que terminei os quatro, eu meio que me perdi em termos de otimização.
Brianista
Bem, eu quis dizer refazer os links do TIO e tal, mas FINE @TimmyD eu deixarei de ser preguiçoso e usarei sua sugestão generosa que não é tão trabalhosa quanto eu estou imaginando! (edit) :-p
briantist
Você pode eliminar o ;da Tarefa 4 manipulando o cálculo ("$args"..1|%{$s+="$_*"*$_+1|iex})-(-$s)para salvar outro byte geral.
AdmBorkBork
3

Haskell , 77 76 caracteres

m n=[[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]!!y|y<-[1,4..3*n]]--2 n===y();^
s n=[(*y)<$>[1..n]|y<-[1..n]]--0112234mmm  ====[[[xxxx||<<--..]]],,/uod!!y;^
n x|x<2=1|1<3=sum(n<$>[x-1,x-2]);d y=[0|m<-[1..y],y==n m]--4[[[....]]]/o!!*^
o n=sum[x^x|x<-[1..n]]--01112234mm  n====[[[[x||<<<--....]]]],,/d$>!!yyy*();

Experimente online!

--inicia uma linha de comentário, para que todos os quatro programas são da forma <program>--<unused chars>.

Tarefa 1:

m n=[[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]!!y|y<-[1,4..3*n]]

O programa mais longo. [x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]produz uma lista infinita de números compostos mais uma partida 1que corrige a indexação 0. Uso:

Prelude> m 5
[4,9,14,18,22]

Tarefa 2:

s n=[(*y)<$>[1..n]|y<-[1..n]]

Uso:

Prelude> s 5
[[1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15],[4,8,12,16,20],[5,10,15,20,25]]

Tarefa 3:

n x|x<2=1|1<3=sum(n<$>[x-1,x-2]);d y=[0|m<-[1..y],y==n m]

Retorna [0]para verdade e []para falsidade. Uso:

Prelude> d 5
[0]
Prelude> d 6
[]

Tarefa 4:

o n=sum[x^x|x<-[1..n]]

Uso:

Prelude> o 5
3413
Laikoni
fonte
3

05AB1E , 21 bytes

Tarefa 1

3ÅFOL¦DâPÙï{3ôø¬¹£qåm

Experimente online!

Tarefa 2

LDâP¹ôq3m¦Ùï{3ø¬£ÅFåO

Experimente online!

Tarefa 3

3mÅF¹åqL¦DâPÙï{3ôø¬£O

Experimente online!

Tarefa 4

LDmOq3¦âPÙï{3ôø¬¹£ÅFå

Experimente online!

Explicações

Para todas as tarefas, qtermina o programa para que o código a seguir nunca seja executado.

Tarefa 1

Este é o maior byte-hog. Uma pequena melhoria aqui pode percorrer um longo caminho.

3ÅFO                 # sum the first 4 fibonacci numbers
    L¦               # range [2 ... above]
      Dâ             # cartesian product with itself
        P            # product
         Ù           # remove duplicates
          ï{         # sort
            3ô       # split in pieces of size 3
              ø      # transpose
               ¬     # get the first lits
                ¹£   # get the first input-nr elements of the list

Tarefa 2

L       # range [1 ... input]
 D      # duplicate
  â     # cartesian product
   P    # product
    ¹ô  # split in pieces of input size

Tarefa 3

3m      # input**3
  ÅF    # get a list of that many (+1) fibonacci numbers
    ¹å  # check if input is in that list

Tarefa 4

L     # range [1 ... input]
 D    # duplicate
  m   # elementwise power of ranges
   O  # sum
Emigna
fonte
1

Ruby, 83 82 80 78 caracteres

->m{'*+-=';[*0..m-1].map{|b|(4..516).select{|p|(2...p).any?{|n|p%n==0}}[3*b]}}
->n{'()%**+--......00123456==?[[]]clmnsty{||}';(b=1..n).map{|e|b.map{|p|e*p}}}
->m{'%+-......001236bclnnpt[[]]{{||||}}';(1..e=m*m).any?{|p|(p*p-5*e).abs==4}}
->n{'%*.......023456=?[]abbceelnsty{{||||}}';((m=0)..n).map{|p|m+=p**p}[-1]-1}

Nota: Detector de números de Fibonacci usando o método do quadrado perfeito descrito na Wikipedia: https://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers

GB
fonte
se você tem caracteres para gravar, por que não usar um comentário no final em vez de uma string? Economiza 2 caracteres por linha '';vs#
Alexis Andersen
Obrigado, mas para mim parece trapaça.
GB