生成包含每个字母4个副本的字母


27

请注意,这与四次打印字母不同

此任务是编写一个程序以在标准输出上生成英文字母的每个字母的四个副本,每行一个字母:

A
A
A
A
B
B
B
B

等等

输出应在每个字母之后包含换行符。

最好使用无额外输出的大写字母;但是,如果大写/剥离会延长您的解决方案,则可以使用小写字母和/或多余的空格。

编辑添加:解决方案必须足够完整才能执行。我应该能够调用该语言的实现,从答案中粘贴代码并获得结果,而无需键入任何其他代码。

上面的完整性问题是在C解决方案的上下文中提出的。当然,在代码高尔夫网站上必须有一个常规的惯例或约定吗?如果是这样,我很乐意屈服于社区准则。但这是我的看法:

  1. 特别是对于C语言,您需要在代码周围包括(并计数)main(){... },因为它不会以其他方式编译。#include <stdio.h>只要没有问题,只要代码仍然可以编译,就发出警告。通常,编译语言需要可编译单元。

  2. 如果有一种直接执行表达式的方法,则可以产生期望结果的裸表达式是可以接受的。例如,如果该语言具有REPL。所以,你可以不用提交哈斯克尔main=只要它确实可以工作于书面,例如ghci提示。但是,由于这意味着let要声明,因此坚持使用runhaskell格式可能是一个净赢。

  3. 同样,由于我们不处理任何输入,因此awk脚本应位于BEGIN(或END假设stdin附加到/dev/null)块中。

等等


4
我有点困惑。这里的挑战是仅输出每个字母重复四次的字母,还是实际上还需要将输出存储在文件中?
Iszi 2013年

我是否需要输出字母?
贾斯汀

@MarkReed是否需要在它们之间使用换行符打印?为什么不只是打印它,而换行符是可选的呢?
贾斯汀

3
另外,我建议改写您的挑战,使它更像是一个挑战,而不是像讲述您如何发明答案的故事。
贾斯汀

最后一点使空白规则变得有点混乱。你能澄清一下吗?特别是,我是否正确地解释了多余的空格是可以的,但省略了换行符是正确的吗?
Iszi 2013年

Answers:


16

杀伤人员地雷(5)

⍪4/⎕A

字母()的4个复制(4/)的矩阵格式(⎕A)。


1
似乎不太可能被击败。:)
马克·里德


APL使用一个代码页将其使用的每个字符映射到一个字节。此代码页,可以发现在这里,在IBM的网站上。
史蒂文H.

@StevenH。链接死
斯坦乱弹

@StanStrum我认为该链接由于弃用而失效,但是出于代码打高尔夫球的目的,此元答案应该有效。
史蒂文H.

11

Python-37

for i in range(104):print chr(i/4+65)

i从0到104;将其除以四,然后添加到的ascii值中A,并打印结果字符。


我认为Python默认使用整数除法吗?如果PowerShell现在就做,那会很好。照原样,将其强制为整数除法所需的代码太长了,无法使用此技巧来帮助我在脚本中保存任何内容。
Iszi 2013年

@lszi-Python从操作数的类型中获取提示。 3/4为0,而3.0/4.0为0.75;range()生成整数。
马克·里德

1
这不适用于较新版本的python。首先,必须使用方括号调用print函数,并且/默认情况下不再对整数进行除法(即使两个数字都是整数),这也是// //的工作尝试:for i in range(104):print(chr(i//4+65))

3
@意识我知道。我故意选择使用旧版本,以便可以更好地打高尔夫球。如果要在Ideone.com上运行此程序,则选择“ Python”而不是“ Python 3”
Justin

3
@Consciousness-通过“ Python的较新版本”,您所指的是“ Python 3”,目前还没有被广泛采用。我通常会假设没有指定版本的任何声称为“ Python”的东西都是Python 2.x,除非另行证明;否则,将不再使用。Python 3代码倾向于如此明确地标记。
Mark Reed


7

C,59

我提交这个答案很漫长,只是因为我还没有看到C提交。这让我很难过。:-/

稍后:向@moala推荐使用此版本的“ / 4”整数版本,节省13个字符!

float i;main(){while(i<26)printf("%c\n",65+(int)i),i+=.25;}

我已经编辑了答案,现在还节省了2个字符!
moala 2013年

还有一个!
moala 2013年

6

J:18 13

4#u:65+i.26 1

我对J仍然不太满意,因此可能可以改进


3
您可以使用复制(#),而不是分裂,像这样:4#u:65+i.26 1。另外,~交换函数的参数,因此,如果您发现自己在做(expression) F value,可以将其替换为value F~ expression以保存字符。
marinus 2013年

@marinus感谢您的提示。我仍在学习J,用这些技巧很难找到任何好的信息。
pswg

1
4#65{26,.\a.12个字节
FrownyFrog

5

红宝石,23岁

puts ([*?A..?Z]*4).sort

所有归功于@manatwork-支持他的评论,而不是这个。:)


巨大。@manatwork,我将进行编辑,但显然我不应该得到任何荣誉!
Darren Stone

5
最好使它成为puts [*?A..?Z].map{|i|[i]*4}puts ([*?A..?Z]*4).sort,以便字母如示例中那样得到排序。
manatwork 2013年

2
@manatwork:puts (?A..?Z).map{|i|[i]*4}是短字符。您可以map直接在Range上调用,因此在这种情况下不需要splat。
马克·里德

5

的PowerShell:32 23

高尔夫代码:

[char[]](65..90*4)|Sort

演练:

[char[]](... )接收对象数组并将其转换为ASCII字符。
65..90是AZ的ASCII码。
*4重复该系列4次。
|Sort对输出进行排序。

注意:

如果要将其写入文件,只需>在结尾处抛出throw ,后跟一个文件名。



5

Befunge 98-18

1+::'g`#@_4/'A+,a,

通过存储数字并在数字达到104时结束而起作用。输出数字除以4后跟换行符的字母的相应字符。但是,如果我不需要在每个字母后添加换行符,则为16个字符:

1+::'g`#@_4/'A+,

如果我可以打印更多字符(即全部打印四次)(7 6个字符,甚至可以在Befunge 93中工作),也可以减少:

1+:4/,

使用换行符:

1+:4/,a,


4

Perl 5,21

map{print"$_
"x4}A..Z

2
我从来没有想过要在Perl中将文字换行符放在双引号中。+1。
马克·里德

我应该注意,我也没有,但是@manatwork在我的另一个答案中提到了它,它卡住了!
2013年

4

C,46 44 43

46

i;main(){while(i<104)printf("%c\n",65+i++/4);}

44

i=260;main(j){for(;(j=i++>>2)<91;puts(&j));}

也有44个:

i=260;main(j){while(j=i++>>2,j<91)puts(&j);}

感谢@ marinus,43:

i=260;main(j){while(j=i++/4,j<91)puts(&j);}

我应该增加赏金达到42岁吗?:)


6
50代表 需要对任何内容发表评论,并且在发布此评论时您有101。
syb0rg 2013年

大!谢谢!答案已编辑!
moala 2013年

1
您可以替换>>2/4
marinus 2013年

4

爪哇:56

for(int i=0;i<104;)System.out.println((char)(i++/4+65));

编辑:从“打印”更改为“ println”


输出应在每个字母之后包含换行符。
皮埃尔·阿洛德

感谢您指出,它应该现在每次都打印新行
reblerebel 2013年

2
The solution must be complete enough to execute. I should be able to invoke an implementation of the language, paste the code from the answer, and get results, without typing any additional code. 我认为您的解决方案违反了这种条件
user902383 '16

2
@ user902383如果将其粘贴到JShell(Java 9中的Java REPL)中,它将起作用,甚至不需要最后的分号。
戴维·康拉德

@DavidConrad那么棒,我想我可能会开始使用REPL / JShell。
user902383 '16


4

其实是6个位元组

4ú*SÖi

在这里尝试!

说明

4ú*SÖi

4 *         Do 4 times
 ú          Create string of alphabet in lowercase
   S        Sort it
    Ö       Switch Case
     i      Push each character of string

4个字节,带有小写字母,没有换行符:

4ú*S

1
欢迎来到PPCG!
暴民埃里克

4

16位x86机器代码MS-DOS COM,25个字节

十六进制:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

这是一个完整的MS-DOS .COM程序。将字节序列复制到扩展名为.com的文件中,然后从DOSBox运行它

拆卸:

00: B4 09        mov    ah,0x09         ;INT 21h "Write string to STDOUT" function
02: BA 16 01     mov    dx,0x116        ;Address of the string s ('$'-terminated)
05: 89 D7        mov    di,dx           ;Because there's no way to dereference address in DX
07: B9 68 00     mov    cx,104          ;CX=26*4
_0000000A:
0A: F6 C1 03     test   cl,0x03         ;When lower two bits are zero...
0D: 75 02        jne    _00000011       ;...do not skip the next instruction
0F: FE 05        inc    b,[di]          ;*s++
_00000011:
11: CD 21        int    21              ;Print the string
13: E2 F5        loop   _0000000A       ;Until --CX==0
15: C3           retn
16: 40           db     0x40            ;s[0], starts with 'A'-1
17: 0A           db     0x0A            ;'\n'
18: 24           db     '$'             ;Terminator required by the print function

3

脑F *79 60

+++++++++++++[->++>+>+++++<<<]>>---<[->>>++++[-<.<.>>]<+<<]

4
+++++++++++++[>+>+++++>++<<<-]>--->>[<.<.>.<.>.<.>.<.>+>-]
alephalpha

3

AWK,48岁

让我们尝试一下AWK ...

END{s=65;for(i=104;i--;s+=0==i%4)printf"%c\n",s}

根据manatwork的建议,我们可以摆脱2个字符

AWK,46(编辑)

END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}

AWK,40(编辑MarkReed的代码)

END{for(;i<104;){printf"%c\n",i++/4+65}}

通过删除变量s的初始化,您可以保留2个字符:END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}
manatwork 2013年

1
将代码放在END块中意味着它需要输入流(即使是/dev/null)也能正常工作。这会改变字符计数吗?无论如何,BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}要短5个字符。
马克·里德

@MarkReed您的代码无法正常工作。检查一下
Wasi

天啊 很近!:)但是我仍然不喜欢END输入流对模式的要求……
Mark Reed 2013年

3

PowerShell,21岁

65..90|%{,[char]$_*4}

与Iszi的方法稍有不同。和更短:-)


3

C#LINQ 115字节 110字节

Enumerable.Range(65, 26).SelectMany(i => Enumerable.Repeat(i,4))
.ToList().ForEach(i=> Console.WriteLine((char)i));

1
欢迎来到PPCG!不错的第一篇文章!
Rɪᴋᴇʀ

3

05AB1E,6个字节

A4×{S»

说明:

A       # Push 'abcdefghijklmnopqrstuvwxyz'
 4×     # Repeat four times
   {    # Sort
    S   # Split into list
     »  # Join by newlines
        # Implicit print

没有换行符,4个字节

A4×{

在线尝试!



3

Perl 6,32

.say for (('A'..'Z') »xx»4)[*;*]

我认为这是Perl 6首次成为我想到的第一个解决方案,但是超级操作员似乎很自然。
马克·里德

3

画布,5 个字节

Z41*⟳

在这里尝试!

说明:
Code        | Explanation                                  | Stack
------------+----------------------------------------------+------------------------------
Z          | The uppercase alphabet                       | "ABC..."
  41*     | Stretched by 4 horizontally and 1 vertically | "AAAABBBBCCCC..."
        ⟳  | Rotated clockwise                            | "A¶A¶A¶A¶B¶B¶B¶B¶C¶C¶C¶C¶..."
            | Print ToS (implicit)                         |

替换\n时打印。



3

疯子,48个字节

+++[[-<+>>++<]+>]<<<<<<+[->,++++[->.<<<.>>]>+<<]

在线尝试!

以小写字母打印,并用回车分隔。使用包装的8位单元格以及原点左侧的单元格,但您可以在前面加上a >来抵消后者。


我本来打算发布一个新书,但是您设法做到最好,我用++++++ [-> ++> ++++> ++++++++得到了71个字节++ <<<] ++++> +> ++> +++++ <[->。<<。>>。<<。>>。<<。>>。+ <<。>]
KrystosTheOverlord



2

斯卡拉,42岁

('A'to'Z')map(x=>List.fill(4)(println(x)))

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.