基数密码挑战


24

任务

您负责制作各种指南针。

想象一下您的源代码是指南针“针”,在不同方向上运行会产生不同的输出。

支持的源代码方向为北,东,南和西。

假设您有源代码:

ABCD
 J K
WXYZ

我们将其视为北方方向,顺时针旋转90度将我们指向东方:

W A
XJB
Y C
ZKD

再次向南旋转点:

ZYXW
K J 
DCBA

最后,最后一次向西旋转:

DKZ
C Y
BJX
A W

运行时,以上每个代码示例都应输出一个单独的,不同的可打印ASCII字符供您选择。

笔记

您的代码不得输入。

旋转时,空白空间或新行不会折叠/消失。

输出中的行首/尾行都可以。

答案可能是整个程序或函数,因此输出到STDOUT或返回函数结果。

适用标准规则;以字节为单位的最短答案胜出!


我们可以输出多个字符吗?
Xcoder先生17年

1
我们是否必须用空格填充代码,使其成为一个完美的矩形(并在分数中计算这些空格)?例如,将代码形状像这样是有效的,给出的第一个是提交?
Business Cat

2
除了输出规范外,我认为这是重复的内容
Digital Trauma

1
@BusinessCat您不必填充代码即可制成矩形-您提供的示例将是有效的。
CzarMatt

4
@ Mr.Xcoder Um,四个相同的程序如何打印四个不同的ASCII字符?
ETHproductions '17

Answers:


20

果冻,2 个字节

*2

在线尝试!

请注意,Jelly程序的主要条目是它的最后一个链接,其中任何换行符都会分割链接),两行程序实际上都没有访问其顶部链接。

四个完整程序(均隐式显示其结果)为:

*2   -> (implicit) zero raised to the power of 2 = 0

*
2    -> literal 2 = 2

2*   -> two raised to the power of (implicit) 2 = 4

西

2
*    -> (implicit) zero raised to the power of (implicit) zero = 1

1
这是最终答案。做得好。
暴民埃里克(Erik the Outgolfer)'17年

19

Japt3 2字节

gy

不知何故,我找到了一个非常hacky的2字节解决方案...


输出0

gy

由于没有隐式输入,因此默认为0g数字上的on返回数字的符号,而不考虑其参数("y"在这种情况下)。


东部产出2

g
y

在多行程序中,第一行将输入设置为其结果。由于gon 0是,因此基本上是空运0。然后y返回0and 的GCD 。由于缺少参数,因此默认为2(感谢@Oliver!)。这给出2作为输出。


南方产出g

yg

y与以前一样,是GCD。由于gcd(0,x)对于任何值都是x,因此yon 0只需返回其参数即可。在这种情况下,参数为"g",这是结果。


西部产出1

y
g

y与以前一样,在0上返回2。然后将g其传递给,(如前所述)是数字上的符号函数。因此,结果是1


8

Java(OpenJDK 8)7309 4421 855字节

-Leaky Nun
-2888字节,感谢Wheat Wizard -3566字节

//i/////////////////////////////////////////////////////////////
//n//////////////////////////////////////////////////////////////////
interface M{static void main(String[]a){System.out.println(0);}}/////
//e//}};)2(nltnirp.tuo.metsyS{)a][gnirtS(niam diov citats{M ecafretni
//r//////////////////////////////////////////////////////////////////
//f}/////////////////////////////////////////////////////////////////
//a}//
//c;//
//e)//
// 3//
//M(//
//{n//
//sl//
//tt//
//an//
//ti//
//ir//
//cp//
// .//
//vt//
//ou//
//io//
//d.//
// m//
//me//
//at//
//is//
//ny//
//(S//
//S{//
//t)//
//ra//
//i]//
//n[//
//gg//
//[n//
//]i//
//ar//
//)t//
//{S//
//S(//
//yn//
//si//
//ta//
//em//
//m //
//.d//
//oi//
//uo//
//tv//
//. //
//pc//
//ri//
//it//
//na//
//tt//
//ls//
//n{//
//(M//
//1 //
//)e//
//;c//
//}a//
//}f//
///r//
///e//
 //t//
 //n//
 //i//

在线尝试!

旧版

带有代码^ 2正方形的注释的直截了当的方法,几乎​​可以用任何一种语言来完成。
python中的一个示例(更具可读性)

##p#####
# r  2 #
print 1#
# n  t #
# t  n #
#4 tnirp
# 3  r #
#####p##

很棒的一般方法,现在我只需要弄清楚该怎么做!:)
瑕疵的

您可以改用interface M{static void main(String[]a){System.out.println(0);}}节省一些字节。
Leaky Nun


1
@MagicOctopusUrn并非用手c完成;
罗德

1
@MagicOctopusUrn不,我做出了这个答案来展示此算法,该语言是不相关的:3
Rod Rod

7

Brain-Flak,33个字节

##)(##))()()  ((
((  ))##    ()##

在线尝试!

Brain-Flak,33个字节

##)     ## #
(( ))#)())()
  # ( (

在线尝试!

Brain-Flak,36个字节

#)##     ## #
  (())#)())()
 #   ( (

在线尝试!

Brain-Flak,38个字节

######  (#
(()()())#))((
       #(  ##

在线尝试!

Brain-Flak,41个字节

##(#####(#
(()()())#
##))()((
####((#)#)#

在线尝试!


哇靠!我当时正在做一个,但是我什么也做不了。我认为找出问题至少需要30-40分钟的时间。这真太了不起了!
DJMcMayhem

1
这太酷了!
CzarMatt

尝试打高尔夫球:到目前为止,P中有3个正在工作
Christopher


5

Befunge, 17 13字节

我以为Befunge对于几何问题会很有趣。这里有一个类似于其他解决方案的琐碎的4x4解决方案(我需要3个命令),但是我管理起来要好一些。

编辑:忘记换行符

编辑2:意识到我可以创造一只猫

编辑3:猫死了

2v3
@.v
.  
1@.

RIP小猫:<

1.@ 2
^._.^
3 @.4

5

05AB1E5 3字节

Y'X

西


令人印象深刻,那太快了!
CzarMatt

我认为@MagicOctopusUrn Y'X可以使用,但是我仍然必须尝试一下。
莱利

@Riley确实有效,它也可以向前和向后工作Y'X。仍在寻找一个2字节;没有任何“点命令”适用于此,因此我怀疑它是否存在。
魔术八达通Ur

@MagicOctopusUrn我认为换行符的工作方式没有2字节的解决方案。虽然蛮力蛮力并不难。
莱利

10如果他们允许输出多个字符; P. *
Magic Octopus Urn'Aug

4

C(gcc)283 279 209字节

/////////)pm//
/////////;ua//
main(){//}ti//
puts("N"//sn//
);}///////((//
//////////")//
///"//////W{//
///E//////"///
//)"//////////
//((///////};)
//ns//"S"(stup
//it}//{)(niam
//au;/////////
//mp)/////////

在线尝试!

这里有同样的旧注释技巧,但至少在C语言中没有 带来麻烦 ;)


您是否需要间隙上方右边缘的四个斜线中的任何一个?
ETHproductions '17

嘿..嗯...我想,实际上...不。好的收获,谢谢:)
Felix Palmen '17

我认为您可以将它们移动);}到下面的行中,从而将它们打包得更加紧密,就像这样(尽管我尚未测试过旋转)
ETHproductions'Aug

哦,W您当前设置中的程序当前失败,因为sn实际代码后面还有其他内容。显然,您可以通过将正斜线前的斜杠更改pm为分号来解决此问题。
ETHproductions'Aug

呃...可能是时候删除它并重新开始:o(第一个版本是一个斜杠的正方形,但我认为我会做“ 聪明 ”的事情来节省一些字节...该死)
Felix Palmen

4

迷宫,9字节

!
2@2
 !)

印刷品0在线尝试!

 2)
 @!
!2

印刷品3在线尝试!

)!
2@2
  !

印刷品1在线尝试!

 2!
!@
)2

印刷品2在线尝试!

说明

每个程序从阅读顺序的第一个非空格处开始(即,左上角或顶部中心字符),向东移动。对于第一个程序:

!   Print an implicit zero.
    The IP can't move east, so it moves south instead.
2   Push a 2.
    The IP can't keep going south, so it turns east instead.
@   Terminate the program.

对于第二个程序:

2   Push a 2.
)   Increment it to 3.
    The IP can't keep going east, so it turns south instead.
!   Print the 3.
    The IP can't keep going south, so it turns west instead.
@   Terminate the program.

对于第三个程序:

)   Increment an implicit zero to 1.
!   Print the 1.
    The IP can't keep going east, so it turns south instead.
@   Terminate the program.

对于第四个程序:

2   Push a 2.
!   Print the 2.
    The IP can't keep going east, so it turns back around to move west.
2   Push another 2.
    The IP can't keep going west, so it turns south instead.
@   Terminate the program.

4

Wumpus,7个字节

O@$
)))

印刷品0在线尝试!

)O
)@
)$

印刷品1在线尝试!

)))
$@O

印刷品3在线尝试!

$)
@)
O)

印刷品2在线尝试!

说明

第一个程序很容易:O打印一个隐式零并@终止该程序。

从第二个程序开始,我们需要查看三角网格布局以了解控制流程:

enter image description here

)   Increment an implicit zero to 1.
O   Print the 1.
))  Two irrelevant increments.
@   Terminate the program.

对于第三个程序:

enter image description here

))) Increment an implicit zero to 3.
O   Print the 3.
@   Terminate the program.

第四个是真正时髦的地方。虚线表示未执行的单元格是因为它们被跳过了$

enter image description here

$   Skip the ).
$   Skip the @.
))  Increment an implicit zero to 2.
O   Print the 2.
))  Two irrelevant increments.
@   Terminate the program.

超级酷,很棒的图表。
CzarMatt

3

的PowerShell20 11字节

#4#
1#3
#2#

滥用注释(#)就像疯了一样,并且放在管道上的单个数字会按原样输出。上面的照片1在线尝试!

从这里,您可以轻松地看到每个旋转仅产生一个数字,位于注释的“左侧”,因此每个旋转仅输出一个数字。

感谢Wheat Wizard节省了9个字节!


不知道PowerShell中,但不会这个工作?
小麦巫师

@WheatWizard是的,的确如此。谢谢!
AdmBorkBork

3

星空,34字节

  zz  
  +   
   .  
    + 
      

或将空格显示为连字符,以便您可以看到它们:

--zz--
--+---
---.--
----+-
------

在线尝试!

Starry中的命令是+.以及其他一些东西,它们的作用取决于它们前面有多少个空格:+带有n个空格的a将n -5压入堆栈,而.带有偶数个空格的则将其打印。在zS和换行完全忽略。

第一个空格前有6个空格,+因此它推6−5 = 1,然后.打印出来。

和旋转:

-----
-----
---+z
--.-z
-+---
-----

在线尝试!打印“ 8”。

------
-+----
--.---
---+--
--zz--

在线尝试!打印“ 2”。

-----
---+-
z-.--
z+---
-----
-----

在线尝试!并显示“ 3”。


多么整洁的语言。另外,我从没说过必须用空格填充才能形成矩形。但是,如果您的消息来源依赖空格,那么我想您必须对它们进行计数。
CzarMatt

@CzarMatt,感谢您的澄清!我更新了帖子。
不是树


2

批处理,90字节

 :: :::@:
:&s ohce@
:e   : c:
      :h:
:o     o:
:h:
:c :   w:
@echo n&:
:@::: ::

批处理实际上没有注释字符。对于整行注释,:由于引入了标签,所以可以使用,但是我仍然需要一些东西来终止echo命令,而在反转时为空操作。&:似乎可以正常工作,这是我在这里所需要的,但是它确实使Batch感到困惑,如果我不将A放在:前面,则会出错。@在下一行,并且还以某种方式忘记打印换行符。


2

MATLAB, 29 17 5 11字节

意识到问题不仅要求单独的ASCII字符输出,这是一种MATLAB方法,可以做到这一点:

%4%
1%3
%2%

这将根据旋转隐式打印1、2、3或4。


想一想,这在MATL中同样适用。与我的字节数相同。
桑奇斯



1

JS,17 B

//1//
2///4
//3//

输出:
北:2,
东:3,
南:4,
西:0.33333333333…。
(例如:2、3 / 1、4、1 / 3)


欢迎来到PPCG!我认为这无效,因为在非REPL环境中,该数字将不会显示。(我可能是错在那里)
扎卡里

(只需添加REPL JS之后,我认为这是很好)
扎卡里

1
输出应该是一个可打印的ASCII字符,因此就像我的MATLAB一样,这是无效的。
汤姆·卡彭特

1

抱歉,我的意思是:

//0//
////
 1/2
/////
//3//

和28B。并输出为0.5、3、2、0。


欢迎来到PPCG!您应该在标题中放入语言名称和字节数。这是一个片段,不是完整的程序或函数,这是无效的。(我可能是错的)
扎卡里


无论哪种方式,他们都应指定它是JS REPL。
扎卡里

2
输出应该是一个可打印的ASCII字符,因此就像我的MATLAB一样,这是无效的。
汤姆·卡彭特

1

JavaScript(ES6),86个字节

输出0代表北方,1代表东方,2代表南方,3代表西方。

////  _//
////  =//
_=>0//>//
  ////1//
  // //
//3////
//>//2>=_
//=  ////
//_  ////


1

MATL,11个字节

HxI
xFx
TxK

在线尝试!

让我们从MATL开始。主要挑战在于,如果堆栈为空,则函数需要输入时,MATL就会失败。也许一些聪明与像修饰XYZ&可以使东西短,但我无法找到一个合适的组合。

说明:所有字符都将单个整数压入堆栈,并x删除除最后一个以外的所有字符。


1

Perl,49个字节

48个字节的代码+ 1 for -p

假定TIO不支持空输入,因此在其位置添加了一个换行符,并且不使用换行符。打印NESW

# ####
#S= _$
#; W#
 $_=N#
#_ _#
#= $#
#E#
 ## #

在线尝试!


1

C(gcc),120个字节

我曾希望变体之间能有更多的协同作用。

//}=)f8 ///
// c{(7 ///
   ;rr; //}
        ;c=
78; /// r{)
f(r /// r(f
){r /// ;38
=c;
}// ;rr;
/// 9({c //
/// 6f)=}//

西方

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.