不同的任务,相同的角色


36

在此挑战中,您需要使用同一组字符解决4个不同的任务。您可以重新排列字符,但是不能添加或删除字符。

获奖者将是使用最少的字符数解决所有任务的提交物。所有任务必须以相同的语言解决。

请注意,这是最少数量的字符,而不是最少数量的唯一字符。

任务1:

输出的第一N每第三数的合数。下面的代码块在第一行中显示前19个复合数字,在下面的行中显示每个第三个复合数字。

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

如果是N=5这样,则输出应为4, 9, 14, 18, 22。你必须支持1<=N<=50

合成数字是不是素数或1的正数。

结果为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

任务2:

输出一个N-by-N乘法表。你必须支持1<=N<=20

例:

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

输出格式是可选的,以下是可接受的输出[[1,2,3,4],[2,4,6,8],[3,6,9,12],[4,8,12,16]]

任务3:

确定数字是否为斐波那契数。您必须支持正数,N直到语言的默认整数限制。如果同时存在32位整数和64位整数,则可以选择使用需要最短代码的整数。例如,如果可以选择,请使用int代替long int。除非这是默认设置,否则您不能选择比32位小的整数(如果默认为32位,则不能使用8位整数)。

true/falsefalse/true1/01/-1a/b都是可以接受的输出,只要它是一致的。

任务4:

采取N作为输入和输出的结果1^1+2^2+3^3+...N^N。你必须支持1<=N<=10

10个不同的结果是:

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

这是,因此每种语言中提交时间最短的将获胜!

该堆栈片段将帮助您检查解决方案。它测量包括所有四个解决方案所需的最少字符集,并显示剩余的字符。


1
二进制:两个字符
coredump

@coredump是的,有两个独特的角色……
Stewie Griffin

Answers:


12

Python,88 87字节

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

共享角色或高尔夫本身并没有花费太多精力,这几乎肯定会被击败。


1
range(11*n)始终包含足够的复合材料吗?
FlipTack

1
@FlipTack是的,5*n足够了。
Martin Ender

12

果冻19 18 17个字符

任务1

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

在线尝试!

任务2

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

在线尝试!

任务3

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

在线尝试!

任务4

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

在线尝试!

怎么运行的

Jelly程序中的每一行都定义了一个单独的链接(函数)。最后一个是主链接,在执行程序时会自动调用它。除非该主链接以某种方式引用了其他链接,否则它们无效。请注意,即使未调用的链接也可能不包含解析器错误。

任务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.

任务2

这是微不足道的:×是乘法原子,而quick þ(表)适用×于left和right参数中的每个元素组合。如果参数是整数(它们在此处),则还将其强制转换为范围。

任务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.

任务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.

很高兴看到ÆḞ已经证明是有用的!
林恩

9

Mathematica,60个字符

任务1:复合材料

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

任务2:乘法表

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

任务3:斐波那契

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

任务4:权力总和

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

每个提交都是一组被忽略的表达式,后跟一个实现给定任务的未命名函数。

我编写了一个简单的CJam脚本,该脚本通过在注释前“优化”组合原始解决方案。然后,通过手动删除每个注释,我最后节省了三个字节(在每种情况下都需要重新排列以获取有效的语法)。该脚本使尝试解决方案的简单变体变得容易得多,以查看它们是否会降低总体得分。随意自己使用脚本。


我有一个评论,但它与您的代码本身无关:P。(很好的回答,顺便说一句)。您的CJam脚本忽略了一个简单的缺陷:如果我输入abba作为脚本,它将给我(**)ab(**)ba而不是abba
HyperNeutrino

@AlexL。是的,它也没有考虑(**)到如果在其他程序中使用了某些字符,它本身就可以用来覆盖某些字符的事实。
Martin Ender

9

MATL29 28 26个字符

任务1(第三个复合数字)

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

在线尝试!

任务2(乘法表)

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

在线尝试!

任务3(斐波那契检测器)

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

这分别显示1/ 0对于斐波那契/非斐波那契。

在线尝试!

任务4(权力总和)

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

在线尝试!

校验

该程序输入四个字符串并显示它们的排序顺序,以直观地检查它们是否使用相同的字符。

说明

%是注释符号。它右边的一切都将被忽略。

任务1(第三个复合数字)

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

任务2(乘法表)

:     % 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

任务3(斐波那契检测器)

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

任务4(权力总和)

:     % Implicitly input N. Push [1 2 ... N]
t     % Duplicate
^     % Power, element-wise
s     % Sum of array. Implicitly display

当我第一次看挑战时,我以为Hey MATL would be perfect for this!您击败了我。+1
DJMcMayhem

@DJMcMayhem抱歉,我倾向于回答很多。下次对我执行ping操作时,如果您正在进行此操作,我将避免:-)无论如何,为什么不继续呢?也许您可以胜过这个
Luis

3
@DJMcMayhem,即使您不想超越路易斯,也发布答案。我希望有更多的人以已经使用的语言发布答案,即使他们无法超越第一个。
Stewie Griffin

@stewiegriffin哈哈,好的。我还没有一个有效的答案,但是如果我得到一个答案(并且答案足够不同),我会发布它。
DJMcMayhem

7

Perl 6、61字节

{(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

((1,2,3,4),(2,4,6,8),(3,6,9,12),(4,8,12,16))给定第二个则返回4

Perl 6并没有真正的最大整数,但是第三个输入为可以立即工作15156039800290547036315704478931467953361427680642。唯一的限制因素是记忆力和时间。

否则,它们将全部“立即”运行以获取远远超出必需值的输入。

在线尝试


6

的JavaScript(ES6),101个 100 95 93 91字节

(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

编辑:不支持0斐波那契数,节省了1个字节。通过重命名变量,节省了5个字节加上另外2个字节(感谢@Arnauld 1个)。通过之间的切换保存2个字节+1+++=1


用替换所有出现的c变量A应节省一个字节。
Arnauld

(我正要建议你也可以替换d使用y,但d未定义在目前的版本,所以你可能要修复第一)
阿尔诺

@Arnauld感谢您指出这一点,但我设法将其修复并通过重命名a为来节省更多字节m
尼尔

4

MATL,30个字符

我使用的字符集是:

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

我无法超越其他MATL答案,但是提出这个解决方案很有趣。

任务1:

第三复合数字。

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

在线尝试!

任务2:

乘法表。由于MATL的工作方式,绝对是最简单的任务

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

在线尝试!

任务3:

斐波那契测试仪。对于真实输入,输出正整数(1或2),对于虚假输入,输出0。

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

在线尝试!

任务4:

权力总和

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

在线尝试!

稍后我将发布更详尽的解释,但就目前而言,您应该注意这%是注释字符,因此程序实际上是:

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

4

PowerShell95 94字节

TimmyD再次拯救了我的培根)

任务1:

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

在线尝试!


任务2:

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

在线尝试!


任务3:

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

在线尝试!


任务4:

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

在线尝试!


哦,这种分类"$args"而不是$args[0]出色。我将从现在开始使用它。
AdmBorkBork

@TimmyD是的,我一直在使用它来节省任何具有单个参数的字节。
briantist

@TimmyD好点!我必须重新编写所有内容以确保,但我可能会重新访问并应用它。完成所有4个步骤后,我便会进行优化。
briantist

好吧,我的意思是重新做TIO链接,等等,但是FINE @TimmyD我将不再懒惰,并使用您的慷慨建议,这根本不像我要证明的那样有效!(编辑):-p
briantist'1

您可以;通过运算("$args"..1|%{$s+="$_*"*$_+1|iex})-(-$s)来保存另一个总字节,从而消除任务4中的。
AdmBorkBork

3

Haskell77 76个字符

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*();

在线尝试!

--开始一行注释,因此所有四个程序均为形式<program>--<unused chars>

任务1:

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

最长的程序。[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]产生无限个复合数字列表以及一个1用于更正0索引的开始。用法:

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

任务2:

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

用法:

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]]

任务3:

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

返回[0]真相和[]虚假。用法:

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

任务4:

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

用法:

Prelude> o 5
3413

3

05AB1E,21个字节

任务1

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

在线尝试!

任务2

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

在线尝试!

任务3

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

在线尝试!

任务4

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

在线尝试!

说明

对于所有任务,都要q结束程序,因此永远不会执行后面的代码。

任务1

这是最大的字节猪。这里的一个小改进可能会大有帮助。

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

任务2

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

任务3

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

任务4

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

1

Ruby,83 82 80 78个字符

->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}

注意:斐波那契数检测器使用维基百科上描述的完美平方方法:https//zh.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers


如果您有要刻录的字符,为什么不在末尾使用注释而不是字符串呢?'';#
Alexis Andersen

谢谢,但是对我来说,这就像在作弊。
GB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.