各文字の4つのコピーでアルファベットを生成します


27

これは、アルファベットを4回印刷するのと同じではないことに注意してください。

このタスクは、標準出力に英語のアルファベットの各文字の4つのコピーを1行に1つずつ生成するプログラムを作成することです。

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
私は少し混乱しています。ここでの課題は、各文字を4回繰り返してアルファベットを出力するだけですか、それとも実際に出力をファイルに保存する必要がありますか?
イスジ

そして、アルファベットのみを出力する必要がありますか?
ジャスティン

@MarkReed間に改行を入れて印刷する必要がありますか?なぜそれを印刷するだけでなく、改行はオプションですか?
ジャスティン

3
また、私はあなたの挑戦を言い換えて、あなたがあなたの答えをどのように発明したかの物語を語るのではなく、より挑戦のようにすることをお勧めします。
ジャスティン

最後のビットは、空白が少し規則を覆すだけです。明確にしていただけますか?特に、余分な空白は大丈夫ですが、改行を省略することはできないと解釈するためにそれを読んでいますか?
イスジ

回答:


16

APL(5)

⍪4/⎕A

アルファベットの4複製(4/)のマトリックス形式(⎕A)。


1
beatられそうもない。:)
マークリード


APLは、使用する各文字を1バイトにマップするコードページを使用します。このコードページは IBMのWebサイトのこちらにあります。
スティーブンH.16年

@stevenH。リンクが死んでいる
スタン・ストラム

@StanStrum非推奨のためリンクは死んでいると思いますが、コードゴルフのためにこのメタ答えは機能するはずです。
スティーブンH.

11

パイソン-37

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

i0から104になります。それは4で除算され、のASCII値に追加されA、結果の文字が出力されます。


Pythonはデフォルトで整数除算を使用していますか?PowerShellが今すぐやったらいいと思います。整数分割に強制するために必要なコードは、このトリックではスクリプトに何かを保存するには長すぎます。
イスジ

@lszi-Pythonは、オペランドのタイプからキューを取得します。 3/4は0であり、3.0/4.00.75です。range()整数を生成します。
マークリード

1
これは、Pythonの新しいバージョンでは機能しません。:まず、印刷機能は、ブラケットと呼ばれる必要があり、/もはや//の仕事のトライでデフォルト(両方の数値が整数である場合でも)、除算整数ないfor i in range(104):print(chr(i//4+65))

3
@意識私はそれを知っています。私は意図的に古いバージョンを使用することを選択しました。あなたはIdeone.comでこれを実行した場合、あなたは「パイソン」の代わりに「Pythonの3」を選択したい
ジャスティン・

3
@Consciousness-「新しいバージョンのpython」とは、「Python 3」を指します。これは、現時点で広く採用されているものとはほど遠いものです。私は通常、特定のバージョンなしで「Python」であると主張するものは、特に証明されない限りPython 2.xであると想定しています。Python 3コードは、明示的にそのようにラベル付けされる傾向があります。
マークリード14

8

R、30 28 27

write(rep(LETTERS,e=4),1,1)

30バイトの以前のバージョン:

cat(rep(LETTERS,e=4),sep="\n")

文字通りの改行は1バイト短いと思います:)
ジュゼッペ

@Giuseppeこのアイデアを指定できますか?
スベンホーエンシュタイン


@Giuseppe本当に良いアイデアです!指摘してくれてありがとう。
スベンホーエンシュタイン

1代わりに""を使用writeして、標準出力を指定することもできます。これにより、別のバイトが節約されます。
ジュゼッペ

7

C、59

私はこれを、競争力のない長い回答として提出しました。単にCの提出がまだ見られないからです。そしてそれは私を悲しくさせます。:-/

後:@moalaに「/ 4」intバージョンを実行して、13文字を節約できます!

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

回答を編集し、さらに2文字を保存しました!
モアラ

そしてもう一つ!
モアラ

6

J: 18 13

4#u:65+i.26 1

私はまだJがかなり不安定なので、これはおそらく改善されるでしょう


3
次の#ように、除算の代わりにreplicate()を使用できます4#u:65+i.26 1。また、~関数の引数を交換するので、自分がやっていることを見つけた場合は、文字を保存する(expression) F valueためにそれを置き換えることができますvalue F~ expression
マリヌス

@marinusヒントをありがとう。私はまだJを学んでおり、これらの種類のトリックで良い情報を見つけるのは難しいです。
pswg

1
4#65{26,.\a.12バイトの場合。
FrownyFrog

5

ルビー、23

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

@manatworkの功績はすべて、これではなく、彼のコメントに賛成です。:)


巨大。@manatwork、私は編集を行いますが、明らかに私は信用に値しません!
ダレンストーン

5
puts [*?A..?Z].map{|i|[i]*4}またはputs ([*?A..?Z]*4).sortにした方が良いので、例のように文字を並べます。
マナトワーク

2
@manatwork:puts (?A..?Z).map{|i|[i]*4}は短い文字です。mapRangeで直接呼び出すことができるため、この場合は感嘆符は必要ありません。
マークリード

5

PowerShell:32 23

ゴルフコード:

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

チュートリアル:

[char[]](... )オブジェクトの配列を受け取り、それらをASCII文字に変換します。
65..90AZのASCIIコードです。
*4シリーズを4回繰り返します。
|Sort出力をソートします。

注意:

これをファイルに書き込む場合>は、最後にthrowを実行し、その後にファイル名を続けます。


5

ハスケル、46

x a=a++a
main=putStr$['A'..'Z']>>=x.x.(:"\n")

1
putStr$['A'..'Z']>>=("golf">>).(:"\n")8ビットを節約します
-Angs

5

Befunge 98-18

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

数値を格納し、104に達したときに終了することで機能します。4で割った数値に対応するアルファベットの文字を出力し、その後に改行を続けます。しかし、各文字の後に改行を追加する必要がない場合は、16文字です。

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

より多くの文字を印刷できる場合(つまり、それらすべてを4回)削減できます(7 6文字、Befunge 93でも動作します):

1+:4/,

改行あり:

1+:4/,a,


4

Perl 5、21

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

2
Perlで二重引用符で囲まれた文字列内にリテラルの改行を挿入することは、私には一度もありませんでした。+1。
マークリード

私はどちらもしなかったことに注意する必要がありますが、@ manatworkは私の別の答えでそれを言及しましたが、それは立ち往生しています!
ドムヘイスティングス

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

43 @marinusに感謝します。

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

42に到達するための賞金を追加すべきですか?:)


6
50人 何かにコメントするために必要であり、このコメントを投稿する時点で101を持っています。
syb0rg

すばらしいです!ありがとう!回答を編集しました!
モアラ

1
あなたは置き換えることができます>>2によって/4
マリヌス

4

Java:56

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

編集:「print」から「println」に変更


出力には、各文字の後に改行が含まれている必要があります。
ピエールアラード

そのアウトを指し示すためのおかげで、それは今、新たなラインを毎回印刷する必要があります
reblerebel

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

2
@ user902383これをJShell(Java 9のJava REPL)に貼り付けると機能し、最後のセミコロンさえ必要ありません。
デビッドコンラッド

@DavidConradその素晴らしい、REPL / JShellを使い始めるかもしれないと思います。
user902383



4

16ビットx86マシンコードMS-DOS COM、25バイト

16進数で:

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

BrainF *79 60

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

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

3

AWK、48

AWKで試してみましょう...

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

マナトワークが示唆するようにに、2文字を取り除くことができます

AWK、46(編集)

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

AWK、40MarkReedのコードの編集)

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}
マナトワーク

1
コードをENDブロックに/dev/null入れると、機能するために入力ストリームが必要になります(たとえそうであっても)。それは文字数を変更しますか?とにかく、BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}5文字短くなります。
マークリード

@MarkReedコードが機能していません。これを
ワシ

ああ 近い!:)しかし、私はまだEND入力ストリームのパターンの要件が好きではありません...
マーク・リード

3

PowerShell、21

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

Isziに対する少し異なるアプローチ。そしてより短い:-)





3

Perl 6、32

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

Perl 6が私が考えた最初のソリューションであったのはこれが初めてだと思いますが、ハイパーオペレータは自然にフィットしているように見えました。
マークリード

3

Canvas、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

brainfuck、48バイト

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

オンラインでお試しください!

キャリッジリターンで区切られた小文字で印刷します。折り返しの8ビットセルと起点の左側のセルを使用しますが>、後者に対抗するためにa を先頭に追加できます。


私は新しいものを投稿しようとしましたが、あなたは完全に最善を尽くすことができました、++++++ [-> ++> ++++> ++++++++で71バイトを得ました++ <<<] ++++> +> ++> +++++ <[->。<<。>>。<<。>>。<<。>>。+ <<。>]
クリストス




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.