長い列に立ち向かう


23

最近、誰かがPythonのデフォルトの行長により厳しい制限を提案しました:

明らかに、多くの理由から、プログラムは1行あたり80文字を超えて使用してはなりません。何よりもまず、読みやすさと保守性のために、堅実な標準を持つことが重要です。そのため、テキストエディターの幅を適切に調整できます。副次的な利点として、制限のあるメディアにコードを簡単に転送できます。また、会議でのレビュー用の印刷ページやパンチカードなど、改行の追加が邪魔になることがあります。

しかし、80文字は高すぎますか?80文字幅の端末を行番号専用の数列のコードに適合させるために、79、または75程度の低さを提案する人もいます。明らかに、最終的には、より低い制限のほうが、より多くの状況でコードを再フォーマットせずに使用できるようになるため、より良いです。

max6標準の紹介

あなたの目標は、任意の行の文字数が最も少ないFizzBu​​zzバリアントを作成して、お気に入りの言語に必要な最小行長を見つけて実証することです。

入力

任意の方法による整数n

出力

1から番号を印刷N、(N ≥1、N ∈ℤ)改行で区切られた、除きます。

  • 3の倍数の印刷「アップル」
  • 5の倍数の印刷「パイ」
  • 3と5の両方の倍数の「ApplePie」印刷用

得点

改行(Cr、CrLf、Lf、またはその他のシステム標準の区切り、必要に応じて指定)を含まない最大行長(バイト)、およびタイブレーカーとしての合計コード長(バイト)。

ルール

すべての改行は意味のあるものでなければなりません。出力に影響を与えずに削除できる改行および隣接する行を直接連結する場合は、削除する必要あります。


2
改行の制限について、特定のグループの改行を削除すると機能するが、単一の改行を削除すると失敗する場合、改行を削除する必要がありますか?構文的に重要なのは、それらの一部を削除するとその重要性が取り消されることです。
小麦ウィザード

3
「意味のある」改行規則についてどのように感じているかわかりません。正当な構文に関しては、大部分のプログラミング言語は改行を気にせず、プログラム全体を1行で記述できるようにします。ここでコードゴルフソリューションのほとんどを見てください:-P
nderscore

1
なぜ、標準の代わりにアップルパイのように変更
ロハンJhunjhunwala

5
@RohanJhunjhunwala組み込みのFizzBu​​zzコマンドを使用しないようにします。
Ørjanヨハンセン

2
+1これは、実際にはコードゴルフチャレンジにとって本当に良いアイデアです!私はまだかかわらず、それを愛する😅かかわら行あたりの文字数の小さな数は非現実的に見えるん
ジョージ・ウィルコックス

回答:


17

> <>、1行につき1バイト、243 161 135バイト

ジョーキングのおかげで-26バイト!

2D言語FTW!2D構造の代わりにgoto命令を使用してループとブランチを書くのは楽しいことではありませんが。

v
l
:
:
3
%
:
&
0
4
7
*
&
?
.
~
~
"
e
l
p
p
A
"
o
o
o
o
o
$
5
%
:
&
0
a
5
*
&
?
.
~
~
"
e
i
P
"
o
o
o
*
0
@
?
n
?
~
l
{
:
}
=
?
;
a
o
1

オンラインでお試しください!または、魚の遊び場でそれを見てください!

魚はコードに沿って下方向に泳ぎ、条件付きgotoを使用して、アキュムレータを分割するものに応じて物事をスキップします。

これは仕様を満たしていると思います:改行が削除されると、魚は常に最初のv(存在する唯一の方向転換命令)に当たるため、魚は常に最初の列で下向きに泳ぎます。したがって、改行を削除すると、魚のパスから次の文字を削除するだけの効果があり、出力を変更せずに文字を削除できるとは思いません。


それは何バイトですか?
L3viathan

1
@ L3viathan、それは243バイトです。(私はそれを編集します。)
木ではない

1
@ L3viathan:少し再配置しましたが、現在は161バイトです!
ツリーではない

:(私はあまり答えをゴルフすることができないと思います
...-L3viathan

1
135バイト。そしてここにある水平方向のバージョンの参照用
ジョー・キングは、

18

Haskell、3バイト/行、494 471 470 463453453450 461バイト

編集:

  • -26バイト:冗長な改行と関連するコメントマーカーを削除し、に変更-1+xしましたx-1
  • +3バイト:エラー--が発生しましたx-
  • -1バイト:の代わりにf使用c 47:[][c 47&0]
  • -7バイト:改行処理をに移動しますw
  • -10バイト:インラインa="Apple"p="Pie"#して、15ケースのためのダミー再帰を使用します。
  • -3バイト:インラインwにおけるf。との--間の冗長を削除します。x15
  • +11バイト:もう一度 私のストリングギャップ理論には穴がありました。%機能を導入することで修正。最後に、自動化されたテストをいくつか行って、これ以上の驚きがないことを確認しました。

fを取り、Intを返しますString

{;f
n=
--
[--
1..
--
n--
]--
>>=
\
--
x->
--
gcd
x
15#
--
x++
--
c
47:
--
[--
]--
;1#
--
x=
--
n!!
--
(x-
--
1--
)--
;3#
--
_=
--
"A\
\p\
\p\
\l\
\e\
\"&
--
0--
;5#
--
_=
--
"P\
\i\
\e\
\"&
--
0--
;--
15#
--
_=
--
3#
--
0++
--
5#
--
0--
;n=
--
d++
--
[--
s++
--
t|
--
s<-
--
n--
,--
t<-
--
[c
9]:
--
d--
]--
;d=
--
(:
--
[--
]--
)--
<$>
--
[c
8..
--
c
0--
]--
;c
x=
--
[--
"9\
\"%
--
0--
,--
"8\
\"%
--
0..
--
]!!
--
x--
;--
[--
a]%
--
_=
--
a--
;x&
--
y=
--
x}

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

テストソースの制限!(改行を削除すると出力なしの無限ループが発生するため、行70はテストから除外されています。)

最も重要なスクイズトリックを削除したバージョン:

{;f n=[1..n]>>= \x->gcd x 15#x++c 47:[]
;1#x=n!!(x-1)
;3#_="Apple"
;5#_="Pie"
;15#_=3#0++5#0
;n=d++[s++t|s<-n,t<-[c 9]:d]
;d=(:[])<$>[c 8..c 0]
;c x=["9"%0,"8"%0..]!!x
;[a]%_=a
;x&y=x}

使い方

  • このコードは、まれに使用されるHaskellのインデントに依存しないモードで記述され、プログラム全体をで囲むなどによってトリガーされ{}ます。プログラム全体ではなく関数を実際に定義しているので、バイトのカウント方法がよくわかりません。Iは守備カウントするために選択した両方{}の余分な;宣言セパレータ(後者は通常、通常のHaskellモードで改行されています。)
  • 改行を「意味のある」ものにするための主なトリックは、--行コメントです。これは、次の改行を削除できないようにし、前の行が演算子文字で終了する場合の前の改行(行コメントの一部ではありません)です。
  • 2番目のトリックは、「文字列ギャップ」、\文字列リテラルのバックスラッシュ間の空白のシーケンスであり、インデントの可能性がある行継続のためにインデントされます。区切り文字を含む文字列ギャップは、解析された文字列から削除されます。
    • 文字列のギャップの改行が削除されると、文字列にバックスラッシュが追加されます。用"Apple""Pie"出力に直接このショーアップ。以下の場合"8""9"パターンマッチは文字列が複数の文字を持っている場合は、エラーを与えるために使用されます。
  • 3番目のトリックは&and %演算子です。これにより、最初のトリックの行を演算子文字で強制的に終了させることができます。\"幅が広すぎて追加できないため、文字列リテラルを終了するためにこれが必要--です。
    • &は、一般的なものであり、次のように定義されx&y=xます。
    • %[a]%y=a、のように定義され!!0、文字列引数の長さが1でなければならないことを置き換えると同時に強制することができます。
  • 改行文字には特別な問題\nがあります。行に3バイトしかない文字列リテラルには収まらないようです。
    • したがって、より簡単に定義されたものc x=["9"%0,"8"%0..]!!xを使用しIntて、数字から'9'下向きにカウントして、aから文字に変換します。
  • showは4文字なので、数字の出力は手作業で実装する必要があります。
    • dは数字列のリストです"1".."9"
    • nは、["1","2","3",...]を使用して再帰的に定義された数表現の無限リストですd
  • #15 Int xgcdof xである追加の最初の引数を指定して、ApplePie形式に変換します。

6

Haskell、7バイト/行、339バイト

改行を意味のあるものにするための要件により、これはHaskellにとって重要な課題です。削除できない改行を挿入する方法はほとんどないため、すべてを正当な小さな文で実行する必要があります。

c=cycle
h=head
i=tail
k=[1..]
s=do
 let
  _=0
  _=0
 putStr
t=take
p=print
u=fst
v=snd
z=zip
n=s"\n"
o 5=do
 s"Pie"
 n
o _=n
5%x=o 5
_%x=p x
3!x=do
 s"App"
 s"le"
 o$u x
_!x=do
 let
  y=u x
  z=v x
 y%z
q x=do
 let
  y=u x
  z=v x
 y!z
g[]=s""
g x=do
 q$h x
 g$i x
a=t 3 k
b=t 5 k
l=z$c a
m=z$c b
f n=do
 let
  x=t n
  y=x k
  z=m y
 g$l z

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


6

ゼリー3 2バイト/行、106 80 56バイト

“3
,e
5P
ḍ,
T⁾
ịi
⁾e
AF
ps
,5
⁾¤
pȯ
lµ
,€
⁾Y
”Ỵ
¢Z
¢F
¢v

文字列リテラルの行と列は転置されるため、改行を削除すると順序が乱れます。

残りの行は個別のリンク/関数であり、関数呼び出し(¢)が含まれているため、関数呼び出しが削除された場合にのみ連結できます。

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


6

TI-BASIC、1行あたり4バイト

目標は行の最大長を最小化することだけなので、一部の行は必要以上に長くなりますが、最も長い行を作成できる最小の長さは4バイトでした。したがって、4バイトを超えることなく結合できる行をマージすると、コードが読みやすくなると感じました。

"APP
Ans→Str1
"LE
Str1+Ans
Ans→Str1
"PIE
Ans→Str2
Input N
1→I
While I≤N
fPart(I/3
not(Ans→A
fPart(I/5
not(Ans→B
If A and B
Then
Str1
Ans+Str2
Disp Ans
Else
If A
Then
Disp Str1
Else
If B
Then
Disp Str2
Else
Disp I
End
End
End
I+1
Ans→I
End

非ゴルフ

"APPLE"→Str1
"PIE"→Str2
Input "N:",N
For(I,1,N)
remainder(I,3)=0→A
remainder(I,5)=0→B
If A and B:Then
Disp Str1+Str2
Else
If A:Then
Disp Str1
Else
If B:Then
Disp Str2
Else
Disp I
End
End
End
End

言語と制限について

TI-BASICはトークン化された言語であり、この場合、各トークンStrNは2バイトの変数を除いて1バイトです。また、ほとんどの場合、閉じ括弧を省略することができます。remainder(関数は、それが(引数の機能の一つ、二つ、およびコンマにするための1つを少なくとも5つのバイトを必要とするであろう使用して、2バイトですremainder(I,3)。代わりに、関数fPart(not(関数を使用して短くしました。どちらも1バイトのトークンです。また、Ans行で評価される式はそれ自体に自動的に保存されるため、組み込み変数を非常に多く使用したことがわかります。したがって、式と割り当てを分割することで、数バイトを節約できます。

別の戦略は、文字列の割り当てを明らかに最小限にすることでした。そのための私の方法は、残りのコードの最大行長に依存していました。4バイトであると判断した後、必要な割り当ての量を最小限に抑えるために、同じ行にできる限り多くの各文字列を詰め込むことができました。読みやすくするためにこれを行いました。

このコードの制限要因は、文字列変数への割り当てと文字列変数との連結です。行Ans→Str1Str1+Ans両方は合計4バイトです。コードの最大行長をさらに最小化するには、文字列変数を完全に削除する方法を見つける必要があります。それ以外はすべて、1行あたり最大3バイト以下に短縮できます。

問題は、などの数値変数への割り当てにあります1→I。行の長さが2バイトを超えない変数のないソリューションを何とか考え出すことなく、それ以上ゴルフをすることはできません。これはたまたまこのチャレンジでは不可能です。

のような二項演算子に+は、演算子記号と左右の引数が必要です。そのため、これがないと、文字列を連結できません。文字列の連結がなければ、このプログラムが行の長さが2バイトを超えないでチャレンジを完了するために必要な文字列を表示する方法はありません。したがって、この言語でのこのチャレンジの理論上の制限は1行あたり3バイトであり、これを達成することはできませんでした。


しかしgolfedバージョンの中で最も長い行は10バイトであるIf A and B
jmarkmurphyの

@jmarkmurphy TI-BASICはトークン化された言語であり、ほとんどのトークンは1バイトで表されます。私はソリューションの説明でそれを言及しました。詳細については、このwikiをご覧ください。
kamoroso94

しかし、前提は、編集者が1行あたりの最小文字数を許可することでした。エディタでトークンを入力しているとは思えません。そして、純粋に解釈されない他の言語は、コンパイルされたオブジェクトまたはトークン化されたバイトカウントを使用しているとは思いません。
-jmarkmurphy

@jmarkmurphyでは、実際にエディターでトークンを入力します。Ans3つの連続した文字は、一方のトークンは、1バイトであるAns1、2であり、2はそれはASCII文字列ではありません5の合計のために、それぞれバイトあなたは電卓でそれを入力すると、それは文字通りトークンです。
kamoroso94

これについては、すでにmetaでコンセンサスが得られています。
kamoroso94

6

C(gcc)、1行あたり2バイト、374 368 320 310 262バイト

もう少しゴルフができると思います。改行をエスケープするバックスラッシュは、ちょっとした些細なことです。

i\
;\
f\
(\
n\
)\
{\
f\
o\
r\
(\
i\
=\
0\
;\
i\
+\
+\
<\
n\
;\
p\
r\
i\
n\
t\
f\
(\
i\
%\
3\
&\
&\
i\
%\
5\
?\
"\
%\
d\
\\
n\
"\
:\
i\
%\
3\
?\
"\
P\
i\
e\
\\
n\
"\
:\
i\
%\
5\
?\
"\
A\
p\
p\
l\
e\
\\
n\
"\
:\
"\
A\
p\
p\
l\
e\
P\
i\
e\
\\
n\
"\
,\
i\
)\
)\
;\
}

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


@ØrjanJohansen Ah、まったくその通りです。
ガストロプナー

多くのバックスラッシュを削除して、タイブレークスコアを減らすことができます。また、などの2バイトトークンを分離する必要もありません&&
トビースパイト

5

Python 3、4バイト/行、113バイト

e=\
exec
def\
f(n\
):i\
=0;\
e('\
pri\
nt(\
i%3\
//2\
*"A\
ppl\
e"+\
i%5\
//4\
*"P\
ie"\
or-\
~i)\
;i+\
=1;\
'*n)

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


かっこ内の改行にはバックスラッシュが必要ないことを知っていますか?
破壊可能なレモン

ああ、役に立つ改行規則を読まなかったのを待ってください
破壊可能なレモン

@NickT:ルールの変更に対処しました。
アンデルスカセオルグ

5

PHP 7、1行あたり2バイト

(#
c#
.#
r#
.#
e#
.#
a#
.#
t#
.#
e#
.#
_#
.#
f#
.#
u#
.#
n#
.#
c#
.#
t#
.#
i#
.#
o#
.#
n#
)#
(#
'#
'#
,#
g#
.#
l#
.#
o#
.#
b#
.#
a#
.#
l#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
)#
.#
a#
.#
r#
.#
g#
.#
n#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
8#
+#
3#
)#
.#
w#
.#
h#
.#
i#
.#
l#
.#
e#
.#
(#
c#
.#
h#
.#
r#
)#
(#
5#
*#
8#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
)#
.#
i#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
7#
+#
1#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
7#
+#
1#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
8#
+#
4#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
)#
.#
a#
.#
r#
.#
g#
.#
n#
.#
(#
c#
.#
h#
.#
r#
)#
(#
5#
*#
8#
+#
1#
)#
.#
e#
.#
c#
.#
h#
.#
o#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
)#
.#
i#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
+#
1#
)#
.#
3#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
9#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
5#
*#
8#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
)#
.#
i#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
+#
1#
)#
.#
5#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
9#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
)#
.#
i#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
8#
+#
2#
)#
.#
P#
.#
i#
.#
e#
.#
(#
c#
.#
h#
.#
r#
)#
(#
5#
*#
8#
+#
1#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
8#
+#
2#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
5#
*#
8#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
)#
.#
i#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
6#
+#
1#
)#
.#
5#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
9#
)#
.#
A#
.#
p#
.#
p#
.#
l#
.#
e#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
8#
+#
2#
)#
.#
A#
.#
p#
.#
p#
.#
l#
.#
e#
.#
P#
.#
i#
.#
e#
.#
(#
c#
.#
h#
.#
r#
)#
(#
5#
*#
8#
+#
1#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
6#
*#
7#
+#
2#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
4#
*#
8#
+#
2#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
2#
*#
5#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
4#
*#
8#
+#
2#
)#
.#
(#
c#
.#
h#
.#
r#
)#
(#
7#
*#
8#
+#
3#
)#
)#
(#
)#
;#

それはドットでどのように機能しますか?
L3viathan

@ L3viathanドットは連結を示します。単一の文字から長い文字列を作成するために使用されます。
user63956

私はそれを知っていますが、PHPは割り当てられていない変数名から文字列を作成するだけですか、それはどのように機能しますか?引用文字が表示されません。
L3viathan

2
@ L3viathanこれらの文字は定数です。定数が定義されていない場合、PHPはその名前を値として使用します。
user63956

5

Aceto、1行につき1バイト、230バイト

まあ、それは書くのが面白くありませんでした。Fungoidとして、Acetoの制御構造はその2Dの性質に大きく依存していますが、多くの条件付きエスケープ(`)でそれを回避できます。それらの唯一の問題は、コマンドの存在に関係なく次のコマンドに影響することです(すべてのAcetoプログラムは内部的に正方形です)。

文字列リテラルは実際には使用できませんが、charリテラルは使用できます(場所によっては、再度調整する必要があります)。

&
p
$
L
Q
`
L
p
`
L
d
`
L
Q
`
L
Q
`
L
x
`

L
M
!
%
5
d
$
L
Q
`
L
Q
`
L
p
`
L
d
`
L
Q
`
L
x
`
L
M
!
%
3
d
$
L
p
`
L
d
`
L
x
`

L
M
!
%
*
5
3
d
[
X
`

n
=
0
l
)
@
(
z
i
r
{
J
s
]
d
s
}
d
[
~
£
A
'
d
p
'

l
'

e
'

{
~
£
P
'

i
'
e
'

で呼び出され20、次のように出力されます:

1
2
Apple
4
Pie
Apple
7
8
Apple
Pie
11
Apple
13
14
ApplePie
16
17
Apple
19
Pie

すべての改行は意味のあるものでなければなりません。出力に影響を与えずに削除でき、隣接する行を連結できる改行は削除する必要があります。

これは、下から上に実行されるため、ここでは決してありません。

そこ私たちは(置き換えることで2つのバイトを保存することができ、少なくとも一つの場所だ`X|かは#)、それが原因で比較的大きなヒルベルト曲線を走るに関連付けられている実行時のコストであるように私はそれを保ちました。

また、OPによる意図しない間違いだと思うので、使用\rまたは\r\n改行の暗黙的な要件も無視しました。この要件を強化する編集またはコメントがある場合は、CR改行を代わりに使用することで問題なく変更できます。

バイトカウントは、Acetoのcodegolfingエンコーディングに基づいています。Latin-7 £。シングルバイトです。


スタック上の3つの文字列を想定すると、[...]そしてこの置換は、読者への課題として残されています。:手元のタスクを解決するために必要な完全なコードを提供してください。現状では、ソリューションは不完全です。また、バイトカウントもありません。これは、スコア1のソリューションのタイブレーカーです
デニス

@Dennisこれで答えを編集して、完全に機能するコードを提供しました。
L3viathan

5

Perl 5、1行あたり2バイト、182バイト

&
#
{'
Er
0h
|R
hR
o
'#
^#
'I
 O
Ro
3f
+~
'#
.#
(#
p#
|#
Y#
)#
}#
(#
'z
;d
y"
"z
7#
vU
aW
zZ
7#
vU
gW
..
~.
4e
r;
|6
'#
^#
('
xR
~R
KR
fR
QR
/R
$R
cR
QR
/R
vR
UR
%R
xR
$R
'#
.#
4#
))

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

Perlの構文は非常に寛容なので、コードとコメントに多くのギャップを追加することができます。これにより、コアアイデアはかなり簡単になります。このコードの主な目的は、実行するコードとevalそれを含む文字列を作成することです。Perlでは、&{...}表記法で文字列または変数を使用して関数を呼び出すことは可能ですが、残念ながらevalこの形式では呼び出しできませんがevalbytesCORE::名前空間を介して呼び出す限り呼び出し可能です。この文字列の構築は非常に簡単で、プログラムはこの呼び出しに直接渡されます。文字列は、XORの一部として改行を使用して構築され、これら構築するために、このスクリプトを使用しました。これを有効に保つには、いくつかの場所でコメントを配置する必要があったため、改行を削除するとコードが機能しなくなります。

FizzBu​​zzルーチンは、primoの優れた回答から取られました。


Perl 5、1行あたり1バイト、172バイト

だから、私は(現在)これが無効であることを知っています。なぜなら、多数の改行を削除できるからですが、これが問題に対する私の元のアプローチであったため、私はそれを追加しています。Perlの構文をどれだけプッシュできるか、楽しみでした!この問題は、それが無効であるにもかかわらず、それ自体でメリットを享受しました。

&
{
(
I
.
'
X
0
o
k
h
~
'
.
(
p
|
Y
)
)
^
'
E
O
0
|
f
s
o
'
}
(
'
x
d
!
K
z
o
Q
U
9
$
Z
o
Q
U
?
v
.
&
%
e
*
$
6
'
^
'

c
~
"
z
f
#
.
/
W
"
c
#
.
/
W
v
U
.
l
x
;
$
4
'
^
p
)

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


これは、「すべての改行は意味のあるものでなければならない」という規則に違反していませんか?
12Me21

@ 12Me21ええ、私はそれを見てきました。したがって、最初のものは削除すると壊れますが、他のいくつかは実際に削除でき、これを2の長さにすると、1行につき1文字で動作するアプローチを得るために何年も費やしました!
ドムヘイスティングス

@ 12Me21私今2のために働く解決策を持っていると思います、私はそれを作るのに時間を費やして以来、1バイトの長さのゴルフバージョンを追加しました!:)
ドムヘイスティングス

5

SmileBASIC、1行あたり9 7バイト、159 155 154 152バイト

これは本当に楽しいチャレンジでした。残念ながら、不要な改行に対するルールは(幸いにも、それはここで最大の行の長さには影響しませんが。)、いくつかの問題が発生する私のような線の間、コメントを追加しなければならなかったA%=I/3としA=A%*3ているため、A%=I/3A=A%*3SBで正しく解析されます。で置き換えるAEその行が無効になるため、いくつかのコメントを省くためにトリックを使用することができました(E表記を使用して書かれ3Eた数字と関係があり、数字と変数名ではなく無効な数字と見なされます)。

A$="App
B$="le
P$="Pie
INPUT N
R=N
WHILE R
INC I
R=I<N
A%=I/3'
A=A%*3'
A=A==I
B%=I/5
E=B%*5
E=E==I'
?A$*A;
?B$*E;
?P$*E;
C=A+E
WHILE!C
C=1?I;
WEND?
WEND

ここでの最大の制限は、入力を取得することです。INPUT xは、許可されている最も簡単な方法です。代わりに、入力値で関数を定義しますが、DEF F xそれでも7文字です。条件付きステートメントを作成することも困難です。より短いものは考えられませんWHILE x


1
場合はA%=I/3A=A%*3構文的に有効ですが、論理的に壊れている、あなたはコメント文字は必要ありません。
ニックT

A%=I/3and として正しく解析されるA=A%*3ため、コメントが必要です。
12Me21

3

JavaScript(ES6)、1行あたり3バイト

グローバル変数topを使用してwindowオブジェクトにアクセスし、そこからeval次のコードを取得します。

n=prompt('')
i=0
for(;++i<=n;console.log(i%5?f||i:f+'Pie'))f=i%3?'':'Apple'

topサンドボックススタックスニペットからはアクセスできないため、コンソールで実行する必要があります。


t//
=//
top
t//
[`\
ev\
al\
`//
]//
(`\
n=\
pr\
om\
pt\
('\
')
i=0
fo\
r(\
;+\
+i\
<=\
n;\
co\
ns\
ol\
e.\
lo\
g(\
i%\
5?\
f|\
|i\
:f\
+'\
Pi\
e'\
))\
f=\
i%\
3?\
''\
:'\
Ap\
pl\
e'\
`)

3

C#、1行あたり9バイト、248 242 230バイト

C#は改行を気にしないので、ルールに準拠するために、ほぼすべての行の最後に1行のコメントが必要です(ØrjanJohansenに感謝)。このプログラムでは、コマンドライン引数としてnが必要です。削除できない改行を可能な限り多く使用しています。

class
A//
{//
static
void
Main//
(//
string//
[//
]//
a//
)//
{//
for//
(//
var
i//
=//
0//
;//
i++//
<//
int//
.Parse//
(//
a//
[//
0//
]//
)//
;//
)//
{//
var
s//
=//
""//
;//
if//
(//
i//
%//
3//
==//
0//
)//
s//
+=//
"A"+//
"p"+//
"p"+//
"l"+//
"e"//
;//
if//
(//
i//
%//
5//
==//
0//
)//
s//
+=//
"P"+//
"i"+//
"e"//
;//
if//
(//
s//
==//
""//
)//
s//
=//
$"{i}"//
;//
System//
.//
Console//
.//
Write//
(//
s//
+//
@"
"//
)//
;//
}//
}//
}

しかし、最も長い行は9バイトであるため、他の行も同様に長くなり、いくつかのバイトが削られます。

class
A{static
void
Main(//
string[//
]a){//
for(var
i=0;i++//
<int.//
Parse(a//
[0]);){//
var 
s="";if//
(i%3==0//
)s+=//
"Apple"//
;if(i%5//
==0)s+=//
"Pie";//
if(s==//
"")s=//
$"{i}";//
System.//
Console//
.Write(//
s+@"
");}}}

あなたはので、私は、「隙間なく」として連結を解釈していません必要がある//ように、互いに融合うトークンの間staticvoid
Ørjanヨハンセン

@ØrjanJohansenありがとう!6バイト保存
アーサーランプ

に並べ替えることで、より多くのバイトを節約できると思いますvar s="";if// (i%3==0// )s+=// "Apple"// ;if(i%5//
Ørjanヨハンセン

またA、1行目から2行目に移動する同様の機会があります。
Ørjanヨハンセン

また、 "\ n"を@ ""に変更することで3バイトを節約し、2番目の引用符を新しい行に追加して、その改行も必要にした
アーサーランプ


2

JavaScript、最大6バイト/行、528バイト

ここからアイデアが引き裂かれ

ここからコードをリッピングしました

Anders Kaseorgのおかげでg=eval、1行あたり1バイト節約できます。

a="n"
a+="="
a+="p"
a+="r"
a+="o"
a+="m"
a+="p"
a+="t"
a+="("
a+="'"
a+="'"
a+=")"
a+=";"
a+="f"
a+="o"
a+="r"
a+="("
a+="i"
a+="="
a+="0"
a+=";"
a+="+"
a+="+"
a+="i"
a+="<"
a+="="
a+="n"
a+=";"
a+="c"
a+="o"
a+="n"
a+="s"
a+="o"
a+="l"
a+="e"
a+="."
a+="l"
a+="o"
a+="g"
a+="("
a+="i"
a+="%"
a+="5"
a+="?"
a+="f"
a+="|"
a+="|"
a+="i"
a+=":"
a+="f"
a+="+"
a+="'"
a+="P"
a+="i"
a+="e"
a+="'"
a+=")"
a+=")"
a+="f"
a+="="
a+="i"
a+="%"
a+="3"
a+="?"
a+="'"
a+="'"
a+=":"
a+="'"
a+="A"
a+="p"
a+="p"
a+="l"
a+="e"
a+="'"
g=eval
g(a)

分離されていない:

n=prompt('');for(i=0;++i<=n;console.log(i%5?f||i:f+'Pie'))f=i%3?'':'Apple'

a=""+\n"f"+\n"o"+ ...終わることはeval(\na)少し短いです
バリューインク

ルールはわずかに変更されました(ApplePie、入力を受け取ります)が、スキームはまだ有効なはずです。
ニックT

ValueInkの提案@ルールの変更は無効化、あなたはまだで終わる可能性f=evalf(a)
アンデルスカセオルグ

@AndersKaseorgありがとう:)それを考えていなかった
スティーブン

1
最初の行の文字列に2文字を入力すると、1バイトを節約できます。
12Me21

2

PHP、4バイト/行

for#
(#
$z=#
${#
ar.#
gn#
};#
$k#
++<#
$z#
;){#
(#
pr.#
in.#
t_.#
r)#
([#
A.#
p.p#
.le#
][#
$k#
%3#
].[#
Pie#
][#
$k#
%5#
]?:#
$k)#
;(#
pr.#
in.#
t_.#
r)#
("
");}

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


すべての改行は意味のあるものでなければなりません。出力に影響を与えずに削除でき、隣接する行を連結できる改行は削除する必要があります。
ジュリアンウルフ

@JulianWolf私はそれを変更しました
ヨルクヒュルザーマン


2

網膜、4バイト/行

.+
$*      Convert the input number to unary.
1
$`1¶    Count from 1 to the input number.
111
A       Divide by 3.
+`A1
1111    If there was a remainder, restore the original number.
A{5}
AP      If the number is divisible by 3, try to divide by 5. 
.*A     The result ends in `AP` if the number is divisible by 15,
Appl    or in `A` if it is only divisible by 3. Replace everything
l       up to the `A` with `Apple`; multiples of 15 become `AppleP`.
le
1{5}    If the number did not divide by 3, try dividing it by 5 anyway.
P
+`P1    If there was a remainder, restore the original number.
6$*1    Otherwise replace the result with `Pie`,
P+      which also fixes multiples of 15.
Pie     If the number was divisible by neither 3 nor 5,
1+      convert it back to decimal.
$.&

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


2

R、1行あたり10バイト、800バイト

「意味のある改行」ルールはこれを困難にしました。現在、これは単にfizzbuzzコードを文字列に綴ってから実行します。

a="x"
a[2]="="
a[3]="y"
a[4]="="
a[5]="1"
a[6]=":"
a[7]="s"
a[8]="c"
a[9]="a"
a[10]="n"
a[11]="("
a[12]=")"
a[13]=";"
a[14]="y"
a[15]="["
a[16]="3"
a[17]="*"
a[18]="x"
a[19]="]"
a[20]="="
a[21]="'"
a[22]="A"
a[23]="p"
a[24]="p"
a[25]="l"
a[26]="e"
a[27]="'"
a[28]=";"
a[29]="y"
a[30]="["
a[31]="5"
a[32]="*"
a[33]="x"
a[34]="]"
a[35]="="
a[36]="'"
a[37]="P"
a[38]="i"
a[39]="e"
a[40]="'"
a[41]=";"
a[42]="y"
a[43]="["
a[44]="1"
a[45]="5"
a[46]="*"
a[47]="x"
a[48]="]"
a[49]="="
a[50]="'"
a[51]="A"
a[52]="p"
a[53]="p"
a[54]="l"
a[55]="e"
a[56]="P"
a[57]="i"
a[58]="e"
a[59]="'"
a[60]=";"
a[61]="w"
a[62]="r"
a[63]="i"
a[64]="t"
a[65]="e"
a[66]="("
a[67]="y"
a[68]="["
a[69]="x"
a[70]="]"
a[71]=","
a[72]="'"
a[73]="'"
a[74]=")"
t=toString
g=gsub
o=", "
l=""
f=t(a)
r=g(o,l,f)
P=parse
p=P(t=r)
eval(p)

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

これが、連結されたApplePieコードです(こちらのMickyTのゴルフから適応)。

x=y=1:scan()
y[3*x]='Apple'
y[5*x]='Pie'
y[15*x]='ApplePie'
write(y[x],'')

そして、解析コードの未使用バージョン:

eval(t=parse(gsub(", ", "", toString(a))))

ここではtoString、シンボルのリストをa単一の文字列に連結するために使用します。ただし、デフォルトの動作では各シンボルがで区切られているため、それらをnullに置き換える,ために呼び出しますgsub。その後、我々はそれを渡すparseeval汚い仕事をします。

それはfizzbuzzこの文字列の解析方法とちょうどまっすぐ実装までを使用しないアプローチがあることも可能だが、使用していることに私には思われるforか、whileまたは定義するfunctionニーズに現在のアプローチよりも長い行を。


2

Ruby、10 5バイト/行、354 214バイト

@NieDzejkobの生のスコアから-140バイト。

eval\
"pu"\
"ts"\
" ("\
"1."\
".g"\
"et"\
"s."\
"to"\
"_i"\
")."\
"ma"\
"p{"\
"|i"\
"|i"\
"%1"\
"5<"\
"1?"\
":A"\
"pp"\
"le"\
"Pi"\
"e:"\
"i%"\
"5<"\
"1?"\
":P"\
"ie"\
":i"\
"%3"\
"<1"\
"?:"\
"Ap"\
"pl"\
"e:"\
"i}"

使い方

Rubyは?a、同じステートメントで文字列リテラルのシーケンスを自動的に連結します(などの単一文字リテラルを除く)。つまり、x = "a" 'b' "c" %q{d}と同等x = "abcd"です。これを使用して、呼び出しのためにFizzBu​​zzのようなコードをはるかに小さい文字列に分割します。これevalは、+改行を削除する規則によりプログラムが無効に\なるためです。


私はちょうど似たようなものを提出しようとしていた
-dkudriavtsev

ルールはわずかに変更されました( 'ApplePie、入力を取得)が、スキームはまだ有効なはずです。
ニックT

各行の文字列に2文字を追加することで、多くのバイトを節約できます。
-NieDzejkob

@NieDzejkobここでの主要なスコアリングメカニズムは、1行あたりのバイト数です。つまり、合計バイト数を犠牲にして行の長さを短くすることを意味します。
バリューインク

@NieDzejkob nvm私はあなたの今の意味がわかります、最初のeval行が他の行より長いからですよね?
バリューインク

1

Julia 0.6、1行あたり5バイト、合計168バイト

f=#
n->#
((i,#
a=#
"A"*#
"p"*#
"p"*#
"l"*#
"e",#
p=#
"P"*#
"i"*#
"e"#
)->#
["$i
","$a
","$p
",a*#
p*"
"][#
1+(i#
%3<1#
)+2(#
i%5<#
1)]#
|>[#
print
sin#
][1]#
).(#
1:n)

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

printライン領土につき5バイトに、この不可避(afaict)をもたらします。

ゴルフをしていない:

function f_ungolfed(n)
  inner = (i,
           a="Apple",
           p="Pie") -> ["$i\n",
                        "$a\n",
                        "$p\n",
                        a*p*"\n"][
                                    1 + (i%3 < 1) + 2(i%5 < 1)
                                   ] |> [print; sin][1]
  inner.(1:n)
end

*は文字列連結演算子なので、a*p*"\n"「ApplePie \ n」を形成します。|>は関数チェーン(/ piping)演算子であるため、選択された文字列はへの引数として送信されますprintsinので、それだけあります、使用されていないprintニーズが(使用した後、重大な空白を持つように配列にする#ことが6に行ごとの最大バイト数をもたらす後にトリックを)。


単純に出力を配列として返すことが許可されている場合、1行あたり最大4バイトで実行できます。

Julia 0.6、1行あたり4バイト、合計152バイト

f=#
n->#
((i#
,a=#
"A"#
*#
"p"#
*#
"p"#
*#
"l"#
*#
"e"#
,p=#
"P"#
*#
"i"#
*#
"e"#
)->#
[i,#
a,p#
,a*#
p][#
1+(#
i%3#
<1#
)+#
2(i#
%5<#
1)]#
).(#
1:n#
)

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

nを取り、期待される出力を含む配列を返す関数。ここでの最大行の長さは制約されていますn->-ジュリアは、1行でラムダの開始として適切に解析する必要があります。


1

パスカル(FPC) -Sew、1行あたり6バイト、348 320バイト

var
n,i://
word//
;begin
read//
(n);//
for
i:=1to
n do
if 0=i
mod
15then
write{
$}(//
'A',//
'p',//
'p',//
'l',//
'e',//
'P',//
'i',//
'e',//
#10)//
else
if 0=i
mod
3then
write{
$}(//
'A',//
'p',//
'p',//
'l',//
'e',//
#10)//
else
if 0=i
mod
5then
write{
$}(//
'P',//
'i',//
'e',//
#10)//
else
write{
$}(i//
,#10//
)end.

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

FPCを使用して、1行あたり6バイトを取得します。それなしでは、結果ははるかに悪くなります。after write;or ((または不必要な空白)でなければならないため、これは可能な限り最小の行幅です。したがって、これを避けるために特別なコメントが挿入されます。この答えに影響を与えたFPCの機能は次のとおりです。

  1. // -1行のコメントを開始します。
  2. フォーム内のブロックコメント{$<something>...}はコンパイラディレクティブです。ディレクティブが存在しない場合、FPCは警告を発行します({$ ...}同様に)。このプログラムでは、{および$削除された場合に警告を発行します改行で区切られています。
  3. -Sew-コンパイラーも警告後に停止するため{$結合するとコンパイルが停止します。


1

LOLCODE18 1行あたり8バイト、合計303バイト

HAI 1.2
I HAS A…
B ITZ 0
IM IN…
YR L
B R SUM…
OF B AN…
1
MOD OF…
B AN 15
WTF?
OMG 0
VISIBLE…
"Apple"…
"Pie"
OMGWTF
MOD OF…
B AN 5
WTF?
OMG 0
VISIBLE…
"Pie"
OMGWTF
MOD OF…
B AN 3
WTF?
OMG 0
VISIBLE…
"Apple"
OMGWTF
VISIBLE…
B
OIC
OIC
OIC
BOTH…
SAEM B…
AN 100
O RLY?
YA RLY
GTFO
OIC
IM…
OUTTA…
YR L
KTHXBYE

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

ØrjanJohansenのおかげで、行継続文字を使用して1行あたり-10バイト!


…行継続文字を使用すると、8まで減らすことができます。オンラインでお試しください!
Ørjanヨハンセン

私は毎日これらのエソランについて何か新しいことを学んでいます。ありがとう、エルジャン!
-JosiahRyanW

0

Python 2、5バイト/行

exec\
'f\
o\
r\
 \
x\
 \
i\
n\
 \
x\
r\
a\
n\
g\
e\
(\
1\
,\
i\
n\
p\
u\
t\
(\
)\
+\
1\
)\
:\
\n\
 \
i\
f\
 \
x\
%\
1\
5\
=\
=\
0\
:\
s\
="\
A\
p\
p\
l\
e\
P\
i\
e"\
\n\
 \
e\
l\
i\
f\
 \
x\
%\
5\
=\
=\
0\
:\
s\
="\
P\
i\
e"\
\n\
 \
e\
l\
i\
f\
 \
x\
%\
3\
=\
=\
0\
:\
s\
="\
A\
p\
p\
l\
e"\
\n\
 \
e\
l\
s\
e\
:\
s\
=\
x\
\n\
 \
p\
r\
i\
n\
t\
(\
s\
)'

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


気をつけて!'z\"'手段と同じこと'z\"'あなたが持つ文字列内の継続行を開始するために許可されていない冗長改行ルール手段ので、"
アンデルスカセオルグ

@AndersKaseorgはr'...'今それを作りました
Martmists

これはをスローしSyntaxErrorます。
エリックアウトゴルファー

TIOは1つの番号を早く停止します。また、ルールは使用から変更されましたFizzBuzzApplePie
Ørjanヨハンセン

0

JavaScript(ECMAScript6)、1行あたり2バイト

'\
'[
'\
b\
i\
g'
][
'\
c\
o\
n\
s\
t\
r\
u\
c\
t\
o\
r'
][
'\
c\
a\
l\
l'
](
0,
`\
n\
=\
p\
r\
o\
m\
p\
t\
(\
'\
'\
)\
;\
i\
=\
0\
;\
f\
o\
r\
(\
;\
+\
+\
i\
<\
=\
n\
;\
c\
o\
n\
s\
o\
l\
e\
.\
l\
o\
g\
(\
i\
%\
5\
?\
f\
|\
|\
i\
:\
f\
+\
'\
P\
i\
e\
'\
)\
)\
f\
=\
i\
%\
3\
?\
'\
'\
:\
'\
A\
p\
p\
l\
e\
'\
`)
()


長い説明

行を短くする方法は、コードを文字列に変換し、行の終わりをエスケープすることです。これにより、行ごとに2バイトの制限が課されます。

そうalert(1)なる

"\
a\
l\
e\
r\
(\
1\
)"

しかし、今あなたのコードは文字列なので、文字列をコードとして実行する必要があります。文字列をコードとして実行できる少なくとも4つの方法を知っています。

  1. eval(code)。呼び出しには少なくとも5バイトかかりますeval(
  2. setTimeout(code、timeout)。関数を非同期に実行しますが、オプションで文字列を渡すと、内部でevalが呼び出されます。
  3. DOMを利用してコードをonclick=""属性内に配置することはできますが、要素作成部分を短くすることはできませんでした。
  4. Functionコンストラクターnew Function()を呼び出すと、コードを解析して、後で呼び出すことができる匿名関数にします(これを使用しました)。

内部のすべてのネイティブ関数の命ウィンドウオブジェクトとJavaScriptであなたが使用してオブジェクトのプロパティにアクセスすることができ、ドット表記そうeval()になりwindow.eval()、または使用してプロパティにアクセスすることができブラケット表記を window['eval']()。これをeval利用して、前述の方法を使用して複数行に分割できます。ただし、ウィンドウを入力する必要があります。1つの秘isは、フレーム内にいない場合、があります。1つの秘isは top変数もwindowなので、window.evalがtop.eval(3バイト少ない)になることです。

w=top
w['eval']

You can shorten the assignment using parenthesis
w=(
top
)
w[
'e\
av\
al'
](
/*string*/
)

したがって、これによりコードは最小で3バイトになります。コードを2バイトにするには、new Function(/*string*/);コンストラクターを使用しましたが、入力せずにアクセスするには創造的でなければなりませんでした。

まず、Functionコンストラクターを使用すると、新しいキーワードを省略した関数として呼び出すことができます。これにより4バイトが削減されますが、別の理由でも重要です。コンストラクターを関数として呼び出すと、インスタンスが返されます。これによりnew Function(code)Function(code)。もう1つの重要なことは、Functionコンストラクターにはcall、this参照をオーバーライドするが、任意の関数を呼び出すことができるメソッドがあり、Functionコンストラクター自体は、自分自身のようにメソッドを呼び出すことができる関数であるということですFunction.call(null, code)

すべてのネイティブ関数はFunctionコンストラクターのインスタンスであり、javascriptのすべてのオブジェクトにはコンストラクタープロパティがあります。そのためalert.constructor、などのネイティブ関数のFunctionコンストラクターにアクセスでき、callメソッドを使用して、コンストラクターを関数として実行できます。これで、alert.constructor.call(null、code)が関数を返します。

以前のテーマを組み合わせて、それを alert['constructor']['call'](null, code)

ここで、短い名前の関数またはメソッドを見つける必要があるため、Stringコンストラクター内でbig()メソッドを選択します。空の文字列から直接アクセスできます"".big

"".big.constructor.call(null, "code")();
''['big']['constructor']['call'](0,'/* code */')() 

それから私はちょうど2バイトですべてのものを壊しました

ショートERの説明(TLDR)

新しいFunction(code)コンストラクターにアクセスして、eval(code)の代わりに文字列を解析しています。このコンストラクターは、anyFunctionを実行することにより、すべてのネイティブ関数で使用できます。ようなコンストラクタalert.constructor===Function。私はString.prototype.big 内で関数/メソッドを使用していますString.prototype.big.constructor.call(null, /*string*/) が、文字列リテラルから直接アクセス"".bigし、ブラケット表記に変えました 。""['big']['constructor']['call'](0, CODE)を使用してそれを破ることができ\ます。


1
残念ながら、これは無効だと思います。たとえば、改行']削除が可能で、プログラムは引き続き正常に実行されるためです。
-darrylyeo

幅が2の場合、これを回避する方法は考えられません。しかし、ほぼ同じアプローチがあるので、説明に適合バージョンを追加して、すべてが失われるわけではないでしょうか。
-darrylyeo

0

ピップ、1行あたり3バイト、合計72バイト

V@Y
YUW
Y"L
a
P
S
T
[
`
A
p
p
l
e
`
`
P
i
e
`
]
X
!
*
+
+
i
%
^
3
5
|
i"

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

Pipは空白に関して非常に柔軟であるため、実行可能と思われる唯一の戦略は、文字列を作成し、改行を邪魔しないように変更して評価することです。

他のすべての文字が改行である文字列を作成し、UW(unweave)およびunary @(最初の要素を取得)を使用して、そのすべての文字を取得します。

UW"abcdef"  => ["ace" "bdf"]
@UW"abcdef" => "ace"

結果は@UWここのFizzBu​​zzソリューションから適応したApplePieコードであるはずです。文字列内の改行が削除された場合、完全なコードにはならず、構文エラーまたは不正な出力が発生します。

文字列の外側にはまだ2つの改行があります。Y(yank)演算子を使用することでこれらを必須にしました-ここではノーオペレーションとして機能します-一緒にPipが大文字の実行を解析する方法と:

YUW   => Y UW
YUW Y => Y UW Y
YUWY  => YU WY

したがって、これらの改行が削除された場合、プログラムは異なる方法で解析され、想定されていることは実行されません。


0

Java 8、1行あたり7バイト、171バイト

を取得するvoidラムダint。これは改行に関する要件に準拠していると思われますが、それを証明することはできません。また、ブルートフォースで検証するには、コンピューターで約1か月かかります。だからそうなるのです。

a->{//
System
s=//
null;//
for(int
i=0;i//
<a;)s//
.out.//
print//
((++i//
%3*(i//
%5)<1//
?(i%3//
<1?//
"App"//
+"le"//
:"")+//
(i%5<//
1?//
"Pie"//
:"")://
i)+//
"\n");}

オンラインで試す

行コメントのためにかなり退屈です。ここで唯一興味深いのは、null System参照の使用です。これは、1行あたり8バイト未満で標準出力に出力するために必要と思われます。printメソッド呼び出しがボトルネックであることにも注意してください。

コメントなしでゴルフなし:

a -> {
    System s = null;
    for (int i = 0; i < a; )
        s.out.print(
            (++i % 3 * (i % 5) < 1 ?
                (i % 3 < 1 ? "App"+"le" : "")
                    + (i % 5 < 1 ? "Pie" : "")
                : i
            ) + "\n"
        );
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.