行,列,对角线,块


13

为某个正整数N编写一个正方形的代码块,该代码块的宽度为N个字符,高度为N个字符。

例如,您的N可能为5,该块如下所示:

ThisI
sMy5B
y5Cod
eBloc
kOkay

该块的行为如下:

  1. 提取第一行并作为程序运行时,row需要将准确的文本打印到stdout。

    例如,ThisI将打印row

  2. 提取左列并作为程序运行时,col需要将准确的文本打印到stdout。

    例如,Tsyek将打印col

  3. 从左上角到右下角的主要对角线被提取并作为程序运行时,dia需要将准确的文本打印到stdout。

    例如,TMCoy将打印dia

  4. 当整个块作为程序运行时,包括换行符(带有可选的尾随换行符),blk需要将确切的文本打印到stdout。

    例如,

    ThisI
    sMy5B
    y5Cod
    eBloc
    kOkay
    

    将打印blk

细节

  • 所有四个程序都以相同的编程语言运行。
  • 原始块中的N 2个字符可能不是行终止符
  • 如果您的语言没有标准输出,则可以使用另一种常见的输出方法。所有四个程序的方法都必须相同。

提交的原始块包含最少的不同字符(不包括换行符),则获胜。决胜局以较小的N进入提交。


鉴于肯定有两种符号深奥的语言的解决方案,我认为这将成为将其压缩为最小N的解决方案
。– xnor

@xnor可能是。尽管Lenguage答案是1,但并非不可能。不过,这种计分方法比首先拥有最小的N胜率更有趣。
加尔文的爱好2015年

如果行程序和列程序的长度相同,Lenguage如何工作?
xnor 2015年

@xnor啊,你是对的。这行不通。
加尔文的兴趣爱好

非阻塞程序也可以以尾随换行符结尾吗?
jimmy23013 2015年

Answers:


6

> <>(Fish),3个唯一字符(N = 2000)

该代码使用1-将任意数字放在堆栈上,并p基于堆栈上的前3个数字(自)修改代码。例如,将a !放置在正常的> <>中0 0看起来像是003b*p,并p1-变成111-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1--11-11-p

修改后,指令指针(IP)环绕代码并运行修改后的部分。在“阻止”情况下,IP被重定向以进行进一步修改(然后被重定向回),以不同于“行”情况。在“行”情况下,会发生相同的两个重定向,但是它们之间没有代码,因此它们无效。

最终为4种情况生成的代码(省略未更改的p1-部分):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

代码大小为4 MB,可在此处访问代码。(运行它没有困难。)

生成器python3程序可在此处访问。


14

CJam,13个12个唯一字符,N = 5

"row"
cd;"a
oaiaa
l"aa;
"blk"

尽可能直接

更新:将空间转换a为Runner112指出的(在这种情况下为无操作)

在这里在线尝试


2
每个空格都可以变成一个字符,就像a将唯一字符数减少到12,对吗?
2015年

@ Runer112该死!谢谢你的提示!
Optimizer

8

重击,19个唯一字符,N = 19

trap echo\ row exit
t=t trap exit      
t=t echo blk       
exit               
=                  
t    e             
      c            
e      h           
c       o          
h                  
o         d        
           i       
c           a      
o                  
l                  
  • 第一行是trap echo\ row exit。这导致echo row脚本退出时执行(仅第一行)
  • 第一列是 ttt=t echo col
  • 对角线是 t=tt echo dia
  • 完整块的工作原理是取消第一行中设置的EXIT处理程序,echo blk然后退出。

1
您可以使用小写字母exit将唯一字符减少4。您还可以将exit命令移至下一行,并用空格替换所有分号。
jimmy23013 2015年

6

> <>,14个唯一字符,N = 10

"wor"\ooo;
     "    
l a  k    
o  i l    
c   db    
"    "    
o    oo   
o    o o  
o    o  o 
;    ;   ;

使用2D语言非常简单。唯一棘手的部分是我们需要\区分rowblk


randomra指出这p1-将提供三个字符的解决方案,但是生成它确实很烦人(可能不会赢)。
Sp3000

3

Brainfuck,2个唯一字符,N = 378

可能会略微弯曲规则。

该程序有点大,所以这是Pastebin上的链接

rowcol并且dia程序非常简单。它们只是增加字节单元,直到达到正确的ASCII码,然后输出。如果字母已经过去,它将递增直到单元格溢出,因此它可以再次从0开始。

blk程序是发生轻微的规则弯曲的地方。为了打印blk挑战中要求的“精确文本”,使用了退格键(ASCII码8),这需要显示控制台/终端支持。每当打印来自row/ col/ dia程序的错误值时,我都会通过输出一些退格控制代码来确保将其删除。为简化起见,我确保一点输出的所有错误值都是可打印ASCII范围的一部分。


2

C(gcc),26个唯一字符,N = 29

*w;main(){printf(w?w:"row");}
ww;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;/*;;;;;;;;;;;;;;;;;;;;;;;;
m;;m;;;;;;;;;;;;;;;;;;;;;;;;;
a;;;a;;;;;;;;;;;;;;;;;;;;;;;;
i;;;;i;;;;;;;;;;;;;;;;;;;;;;;
n;;;;;n;;;;;;;;;;;;;;;;;;;;;;
(;;;;;;(;;;;;;;;;;;;;;;;;;;;;
);;;;;;;);;;;;;;;;;;;;;;;;;;;
{;;;;;;;;{;;;;;;;;;;;;;;;;;;;
p;;;;;;;;;p;;;;;;;;;;;;;;;;;;
r;;;;;;;;;;r;;;;;;;;;;;;;;;;;
i;;;;;;;;;;;i;;;;;;;;;;;;;;;;
n;;;;;;;;;;;;n;;;;;;;;;;;;;;;
t;;;;;;;;;;;;;t;;;;;;;;;;;;;;
f;;;;;;;;;;;;;;f;;;;;;;;;;;;;
(;;;;;;;;;;;;;;;(;;;;;;;;;;;;
";;;;;;;;;;;;;;;;";;;;;;;;;;;
c;;;;;;;;;;;;;;;;;d;;;;;;;;;;
o;;;;;;;;;;;;;;;;;;i;;;;;;;;;
l;;;;;;;;;;;;;;;;;;;a;;;;;;;;
";;;;;;;;;;;;;;;;;;;;";;;;;;;
);;;;;;;;;;;;;;;;;;;;;);;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;};;*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;*w="blk";

在线尝试!


1

Ruby,24个唯一字符,N = 17

trap(0){$><<:row}
rr=a=:blk;%;00000
a0a00000000000000
p00p0000000000000
(000(000000000000
00000000000000000
)00000)0000000000
{000000{000000000
$0000000$00000000
>00000000>0000000
<000000000<000000
<0000000000<00000
:00000000000:0000
c000000000000d000
o0000000000000i00
l;;trap(0){$><<a;
};000000000000;{}

在线尝试!

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.