"こんにちは世界!" (強盗のスレッド)


11

これが強盗のスレッドです。警官のスレッドはこちらです。

あなたの課題は、警官のスレッドからひびのない提出物を取得し、どの入力または入力に対してプログラムが印刷Hello, World!するか、改行を見つけることです。大文字、スペース、句読点は正確でなければなりません。

コードを解読したら、警官の提出についてコメントしてください。

回答:


12

Sisyphusによるバッシュ

元のコード:

[[ ! "${1////x}" =~ [[:alnum:]] ]]&&[[ $# = 1 ]]&&bash -c "$1"

入力:

__=; (( __++, __-- ));
(( ___        = __,        ___++));
(( ____       = ___,       ____++));
(( _____      = ____,      _____++));
(( ______     = _____,     ______++));
(( _______    = ______,    _______++));
(( ________   = _______,   ________++));
(( _________  = ________,  _________++));

${!__##-} <<<\$\'\\$___$______$_______\\$___$______$_____\\$___$_______$__\\$___$_______$_________\'\ \$\'\\$___$___$__\\$___$______$_______\\$___$_______$______\\$___$_______$______\\$___$_______$_________,\ \\$___$____$_________\\$___$_______$_________\\$___$________$____\\$___$_______$______\\$___$______$______\\$__$______$___\'

説明:

これは「echo Hello、World!」をエンコードします 8進エスケープシーケンス(\ xxx)として。

数字も使用できないことを除いて、最初の部分では数字0〜7の変数を作成します。これらを使用して、実際のコマンドを提供するために評価される8進数のシーケンスで文字列を作成できます。

しかしeval、英数字でもあります。その代わり、これはその文字列をの別のインスタンスへの入力としてパイプしますbash$0Bashを起動するために使用されるコマンドの名前が含まれています。これは、通常(TIOを介して、または端末に貼り付けて)実行している場合は通常bash(または-bashログインシェル用)です。(これは、スクリプトに貼り付けて実行しようとすると、何度もフォークしようとするため、事態がひどく悪くなることを意味します。)

しかし、とにかく、$0直接言うことはできません。代わりに、( "0")$__名前が含まれ、$0間接展開を使用してそれにアクセスできます(${!__}のコンテンツを$0参照します)。

そして、それは最後に、あなたに必要なすべての部分を提供します。


プログラミングパズルとコードゴルフへようこそ!警官の答えにコメントを残しました。関心のあるTIOリンク:tio.run
デニス

いいね!私の解決策は異なって見えましたが、同じアイデアを使用しました-8進数の文字列を構築し、ドルの単一引用符構文を使用し、間接を使用します。よくやった=)
Sisyphus




3

ゼリー:EriktheOutgolfer

〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ〡㋄ⶐ✐сᑀ⟙ⶐⶐ〡ސЀᶑ

ゼリー、11バイト

sLƽ$Xṙ5O½Ọ

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

説明

元のコードは次のように説明できます。

sLƽ$Xṙ5O½Ọ  Main link; argument is z
s            Split z into n slices, where n is:
    $
  ƽ         The integer square root of
 L                                      the length of z
     X       Random of a list. Returns a random row of the input put into a square
      ṙ5     Rotate the list left 5 times
        O    Get codepoints
         ½   Floating-point square root
          Ọ  From codepoints

だから、「Hello、World!」コードポイントを取得し、それらを二乗し、コードポイントにキャストバックし、右に5回回転してから、結果を二乗して平坦化します。


3

オクターブby Stewie Griffin

これが正しい解決策であるかどうかはわかりません(TIOでは\00文字を出力します)が、私のoctave-cliシェルでは次のようになります。

オクターブシェル

また、元のチャレンジでは、何も印刷しない(またはヌル文字)と表示されるため、何も同じでない場合は\00これで問題ありません。

[72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33, 0]

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



しかし、それはチャレンジがどのように見えるかではありません。そうであれば、これは私にとってはるかに簡単です(最後0をに置き換え10ます)。
ბიმო

@BruceForteそれ課題の質問です。「あなたの課題は、特定の入力で正確な文字列Hello, World!と改行を出力するプログラムまたは関数を書くことです。」チャレンジからの正確な引用です。そして確かに、それは答えを些細なものにします。
hvd

@hvdええ、しかし、OPの画像を見ると、彼の解決策はそうではありません。それが主な混乱の原因です。
ბიმო

1
@HyperNeutrino FWIW これは、私が意図した解決策のスタイルだと思います。
ジョナサンアラン


3

JavaScript(ES6)By Ephellon Dantzler

{length:1, charCodeAt:()=>(e='Hello, World!', String.fromCharCode=()=>'')}

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

それはとても簡単でした。

Hello, World!内部のすべてString.fromCharCodeが4の倍数のみを返し!、33のcharコードを持っているため、文字列の入力は出力できないことに気付きました。したがって、プログラム全体をハックする必要があります。JavaScriptにビルトインをハッキングするのは、止めようとしないのであれば簡単です(たとえそうしても、多くの回避策があります...)。


3

JavaScript(ES6)、ボイル

呼び出された3回ごとに必要な文字のみを返す単純なプロキシ。

var i = 0;
var string = "Hello, World!";
var proxy = new Proxy([], {
  get: function(target, property) {
    if (!(++i%3)) {
      return string[property];
    }
    return [1];
  }
});

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


2
はい、これは意図されたソリューションです:)プロキシはより多くの愛を必要とします。
ボイル

3

ルビー、Histocrat

魔法の入力は次のとおりです。 1767707618171221 30191World!

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

説明:

  • 1767707618171221は素数であり、36進数で書かれてい"hello"ます。大文字にすると"Hello"、が生成されます。$><<
  • $><<", #$'"if/30191/30191入力で番号を探し、stdoutにコンマ、スペース、およびその後の入力に含まれる文字列で構成される文字列を書き込みます30191$POSTMATCHここでは、短いバリアントで参照されます$')。

3

Lua 5.1 by tehtmi

これを最初の引数として渡します:

C=("").char;_G[C(112,114,105,110,116)](C(72,101,108,108,111,44,32,87,111,114,108,100,33))

元のコードがfileにあると仮定してtehtmi.lua、実行します(bashまたは同様のシェルで):

lua tehtmi.lua 'C=("").char;_G[C(112,114,105,110,116)](C(72,101,108,108,111,44,32,87,111,114,108,100,33))'

TIOが使用するLua 5.3でも動作しますオンラインで試してみませんか?「PUC-RioのLua 5.1」コアを使用する実装でテストしたことはありません(実際には情報が見つからないため)が、おそらく私のソリューションもそこで機能します。

どうやって?

最初の引数をコードとして実行しますが、含まれる小文字が5文字未満の場合のみです。

トリックは実行することprint("Hello, World!")です。これを実行する別の方法は_G["print"]("Hello, World!")、文字列のみを使用するを使用することです。

しかし、小文字カウントの制限のために文字列を直接使用することはできませんが、一連のバイトから文字列に変換できる("").char関数を取得するために実行string.charできます。上記のように使用できる文字列printとの両方を構築するために使用できるように、大文字の変数に割り当てました(制限に達しないHello, World!ように)。


ああ、よくやった!next代わりにchar、反復順序のランダム化のためにLua 5.3では機能しないものを使用することを考えていました。
tehtmi

3

VoileによるJavaScript(ES6)

入力はこれを含む文字列でなければなりません:

e(
`\
_\
=\
>\
"\
H\
e\
l\
l\
o\
,\
 \
W\
o\
r\
l\
d\
!\
"\
+\
\`
\`
`)

これを使って試してください:

const e=eval,p=''.split,c=''.slice,v=[].every,f=s=>(t=c.call(s),typeof s=='string'&&t.length<81&&v.call(p.call(t,`\n`),l=>l.length<3)&&e(t)(t))

input='e(\n`\\\n_\\\n=\\\n>\\\n\"\\\nH\\\ne\\\nl\\\nl\\\no\\\n,\\\n \\\nW\\\no\\\nr\\\nl\\\nd\\\n!\\\n\"\\\n+\\\n\\`\n\\`\n`)'
console.log(f(input))

出力の末尾の改行の要件を気にしない場合は、代わりに最後の6行をこれで置き換えることができます。

!"
`)

どうやってやった

入力の制限は、文字列であり、各行の長さが2バイト以下であり、合計の長さが80バイト以下であることです。正しく理解した後の私の最初の試みはこれでした:

_
=>
`\
H\
e\
l\
l\
o\
,\
 \
W\
o\
r\
l\
d\
!
`

注:\sは、入力の文字列の改行を無視します。これは答えにとって非常に重要であり、偶然に私がつまずいたとは信じられません。(以前はそれを知っていましたが、それを忘れていました)

しかし、これは機能しませんでした、なぜなら=>引数は引数と同じ行になければならないからです。ありがたいことに、文字列で似たようなものをラップし、入力にevalを入れて1行に減らすというアイデアがあり、最終的な答えが得られました。入力でevalが発生すると、次の文字列として生成されます(関数にevalされてから実行されます)。

_=>"Hello, World!"+`
`

これをクラックするのは本当に大変でしたが、最終的には成功しました。

また、最初の亀裂!


3

立体的 MD XFによって、

これは常に危険だと思いますが、インタプリタにバグがあるという点で正しいと判断するまで、ひびが入っていると思います(今コンパイルしたばかりです)。

私の入力

0 1 0 1 0 1 0 1 1 0 1 0 0

出力はHello, World!\n\n\n\n\n\n\n\n\n\n.....、終わりのない改行で行われます。

しかし、コードの最後のセクションに気付きました。

:1/1+1$(@6)7

0x0A怖い方法でメモ帳を(改行)に設定し、面7(入力面)への入力を読み取り、7面がゼロになるまで6面(メモ帳の面)を繰り返し印刷します。面7をゼロに設定した場合、改行を1つだけ取得する必要があります。しかし、無限の改行があり、13番目の入力はゼロでした。ループに「7面からの印刷番号」を挿入することで、7面が常にゼロであることを確認できます。

:1/1+1$(@6%7)7

次に、終わりのない\n0ペアを出力します。

私は立方体のgithubページの仕様を見ていますが、この動作は非常にバグのように見えます。元のプログラムの最後の文字7をa からに変更する0と、予期される動作が発生します。TIOインタープリターは、同じ誤った動作を示します。


今すぐ修正する必要があります。デニスがCubicallyをプルするとすぐに、TIOで修正されます。
MD XF


2

C#(.NET Core)GrzegorzPuławski

私が見つけた解決策は、印刷できない文字を非常に多く使用するため、ここに貼り付けようとしてもうまくいきませんでした。入力のバイト値は次のとおりです。

109, 89, 4, 121, 3, 11, 8, 29, 37, 38, 27, 25, 72, 4, 4, 4, 3, 3, 3, 4, 4, 37, 3, 27, 4, 3

または、TIOリンクの入力フィールドで文字列バージョンを使用できます。

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

元のプログラムは、入力で個別の文字を使用し、入力を逆にして、2つのリストの要素を乗算します。したがって、最初の13文字が区別される26文字の文字列を作成し、最後の13文字もすべて最初の13文字に出現し、インデックスの各ペア[i, 26-i]にのi番目の文字のバイト値を乗算しましたHello, World!


よくやった!Take(a.First()-33)トラップを省略できました。また、Discrete on the Reverseを忘れてしまったことを実感しましたが、それでもいいと思います。また、%255があるため、印刷可能なASCIIでより大きな数値を使用できます。
グジェゴルツプルワスキ

2

LyLyricLy

n[>n]<[8+o<]

2 25 92100106103 79 24 36 103100100 93 64

ここで試してみてください(ただし、ページは改行をレンダリングしません)。

n入力を受け取り、スペースで分割してintにキャストしようとすると、これらはスタックに置かれます。o序数を印刷し、8+考えていることを行います。そのため、入力は、スペースで区切られた逆順のコードポイントよりも8少ない必要があります。


これは末尾の改行を出力しませんか?
LyricLy

おっと、簡単に修正できます!
ジョナサンアラン

...実際には?私は2うまくいくと思っていただろう-それだけでherokuappページがそれをレンダリングしていないのですか?
ジョナサンアラン

1
ええ、2つの作品を追加します。このページは、末尾の改行をレンダリングしません。
LyricLy

2

C(gcc)、Felix Palmen作

元のコード:

#define O(c)(((char**)v)+c)
#define W(c)*(O(c)-**O(2)+x)
main(x,v){puts(W(42));}

引数:

"Hello, World!" ","

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

説明:

W(c)引数リストから文字列のアドレスを計算して出力します。O(c)この場合の42番目の引数であるc番目の引数()のアドレスで始まり**O(2)、整数オフセットとして2番目の引数()の最初の文字を減算し、引数xの数であるを追加します。

W(c)2番目の引数を使用するため、少なくとも3つ(0、1、2)が必要であることがわかります。その後、「こんにちは、世界!」最初の引数に入ることができ、その引数に対応するには、ASCII値が式「42-x + 3 = 1」に適合する文字が必要です。それはたまたま「、」です。


素晴らしい説明です。PCに
アクセス

2

JavaScript:ThePirateBay

解析されたオブジェクトのメソッドvalueOf()toString()メソッドをオーバーライドして、強制がaで失敗するようにしますTypeError

{"valueOf": 7, "toString": 7}

12
うーん、理解できないようです。詳しく説明してください。特にdalksdjalkdjaSのdjalksdjalksdjaの部分では、多少混乱させられます。
エリックアウトゴルファー

@EriktheOutgolferスパムの部分を編集しましたが、なぜそこにあったのかわかりません。
NoOneIsHere

@EriktheOutgolferああ、笑 それは私の答えがコメントに自動変換されるのを止めるために過ぎていました。
マルティセン

1
@Maltysenさて、次回そこに役立つ編集ボタンがあります;)
エリックアウトゴルファー

2

6502アセンブリ(C64)-フェリックスパルメン

正解は、52768,23です

説明は少し複雑です。

00 c0                          ;load address
20 fd ae      jsr $aefd        ; checks for comma
20 eb b7      jsr $b7eb        ; reads arguments

コードは最初にコンマ(構文の必要性)をチェックし、次に2つの引数を読み込みます。最初の引数はWORDで、メモリ位置0014および0015にリトルエンディアンが格納され、後者はXレジスタに格納されます。

8a              TXA            ;Store second argument into A (default register)
0a              ASL            ; bitshifts the second argument left (doubles it)
45 14           EOR $14        ; XOR that with the low byte of first argument
8d 21 c0        STA $c021      ; Drop that later in the program

入力を使用してプログラムを書き換えるのは、かなり賢い方法です。最終的に、プログラムの最後に出力ループのカウンターを書き換えます。

45 15           EOR $15        ; XOR that with the high byte of the first argument
85 15           STA $15        ; Put the result in $15
49 e5           EOR #$e5       ; XOR that with the number $e5
85 14           STA $14        ; Put that in $14

不正な部分があります。

8e 18 d0        STX $d018      ; stores the original second argument in d018

C64では、d018は非常に重要なバイトです。画面の出力に関連するものの参照ポイントを保存します。詳細はこちらをご覧ください。これが間違った値を取得すると、C64がクラッシュします。必要な大文字と小文字を混ぜて印刷するには、17ドルである必要があります。

次に、出力ループを開始します。

a0 00               ldy #$00       ; zeroes out the Y register
b1 14               lda ($14),y    ; puts the memory referenced by the byte
                                   ;   starting at $14 (remember that byte?)
                                   ;   into the default register
20 d2 ff            jsr $ffd2      ; calls the kernal routine to print the char stored in A
c8                  iny            ; increment Y
c0 0e               cpy #$0e       ; test for equality with the constant $0e

その定数は、以前に上書きされたものです。ループの実行時間を明確に決定します。たまたま正しい値になっていますが、再び0eを付ける必要があります。

d0 f6                   bne *-8        ; jump back 8 bytes if y and that constant weren't equal
60                      rts            ; ends the program

残りは、メモリアドレスc025から始まる、印刷する必要がある情報のみです。

ですから、そこから数学に従っているだけです。


絶対に正しい、おめでとうございます。投稿を適切に編集するにはしばらく時間がかかる場合があります。今はモバイルです。
フェリックスパルメン

d018は非常に賢く、ヒントを密かに投稿するのが好きです。
ゴールドマン

d018は意図的なドアオープナーでした...ヒントは偶然でし$FFた。
フェリックスパルメン

2

6502マシンコード(C64) -フェリックスパルメン

正解は

8bitsareenough

コードはかなり複雑で、多くの自己修正を伴います。したがって、完全にリバースエンジニアリングする代わりに、自分自身をクラックするために使用できます。

何が起こったのかを理解するのを助けるために、コードの逆アセンブリをもう少し役立ちます。構文はKickAssembler用です。

*=$c000       // LOAD ADDRESS
jsr $aefd     //checks for a comma
jsr $ad9e     /*Reads in an argument. Stores length of it into
                $61, with the address of the stored arg in $62-3*/
jsr $b6a3     /*Evaluates the string, leaving the pointer on $22-3
                and the length on A*/ //I think

ldy #$00
loop: lda thedata,y   
cpy #$01
beq shuffle
cpy #$07
beq shuffle
cpy #$0b
beq shuffle
tricks: jsr output
iny
bne loop
output: eor ($22),y      //XOR's A with the y-eth letter of our input
jmp $ffd2               //good old CHROUT, returns to tricks above
thedata: .byte $f0,$48,$fa,$a2, $1c,$6d,$72,$30
.byte $06,$a9,$03,$48,$7c,$a3
shuffle: sta $c048      //drops A in mystery+4, over the constant
lda $c026,y
sta $c045               //overwrites the low byte of mystery
lda $c027,y
sta $c046               //overwrites the high byte of mystery
ldx #$00
mystery: lda $aefd,x              
eor #$23
jsr output
iny
inx
cpx #$03
bne mystery
cpy #$0e
bne loop
eor #$1a
sta $d018                
rts

このようにラベルを付けると、コードが必要なものを印刷するために隠されている一連の定数をXORすることがわかります。XORは可逆なので、目的の出力を入力すると、キーが何であるかがわかります。

だから私は最後の行を切り替えました

/*from sta $d018 
to*/ jsr $ffd2

したがって、間違った入力でクラッシュするのではなく、最後に必要な入力を出力します。

それだけです!

興味があれば、コードをさらにクラックします。


うわー、これは実際には大きなショートカットです。おそらく、処理の早い段階間違った入力でクラッシュを強制していたはずです。のデバッガーを使用して、可能なショートカットがもう1つありました。しかし、それは正しい解決策です。vice
フェリックスパルメン

副にはデバッガーがあることを知りませんでした。これは、答えをクラックするためだけに言語を学ぶために得られるものです。
ゴールドマン

いくつかの説明とともに、私の投稿を編集しました。もちろん、クラッシュしないようにプログラムを修正することは非常に明白な方法であり、私はこれを考えていませんでした。
フェリックスパルメン

Nitpick: " drops A in mystery+1, over the constant" <-それは実際mystery+4にあなたのラベルにあります。攻撃はバイト単位です:)およびFWIW、コードがRAMから実行される限り、深刻な 6502コードでも自己修正は非常に一般的です。
フェリックスパルメン

1

爆発ステップ編

@_?&4_-j>5&f^~c>&6\|4>7

Rh / qi?、Wcr + du

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

  • すべての「エクスプローラー」が実際に行っていることを解決しようとすると、頭が痛くなりすぎるので、リバースエンジニアリングしました(文字通り:p-右端の文字から開始し、印刷可能な文字範囲に沿って順番にオフセットします) 。

良い仕事:)私は私のPCに戻っているとき、数時間で説明を追加します
スティーブン

1

C(tcc)ジョシュア

int puts(const char *s)
{
    printf("Hello, World!%s", s);
}

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


くそー この正確なクラックがありましたが、TIOで動作させることができませんでした。+1
MD XF

ごめんなさい。すぐに修正されました。
デニス

問題が何であったか知っていますか?
MD XF

修正方法は知っています(tccはSELinuxサポートでビルドする必要がありました)が、そもそも何が必要なのか、なぜ必要なのかはわかりません。
デニス


1

ジョナサン・アランのゼリー

元のコード:

œ?“¥ĊɲṢŻ;^»œ?@€⁸ḊFmṪ⁷

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

入力:

1,2586391,2949273,3312154,3312154,1134001,362881,2223505,766081,1134001,1497601,3312154,1860601,140

説明:

主に、コードの機能を理解する必要があります。最初に行うことは、文字列を取得することです"!,Word Hel"(改行を除く必要なすべての文字を含む)、それらの順列の束を作成します。入力は順列番号を指定し、入力からの順列の各ペアは、最初の順列が最初に適用されるストリング除外ペアに適用されます。基本的に、P2(P1(S))、P2(P2(S)、P2(P3(S))、...、P2(PN(S))、P3(P1(S))、...、P3 (PN(S))、... ...、PN(P1(S))、...、PN(PN(S))これらはすべて連結され、最後の入力はすべてのPNthを取得するために再利用されます。この大きな文字列の文字です。PN= len(S)* N = 10 * Nを使用します。これは、P3(P1(S)の最初の文字であるP2(P1(S))の最初の文字を取得することを意味します))、PN(P1(S))の最初の文字までずっと。さらに単純化するために、P1 = 1を同一性の順列とします。その後、「H」を最初に置換するP2を選択するだけで十分です。ポジション、「e」を最初の位置に並べ替えるP3など。幸いなことに、PNにすでに選択されているような小さな順列番号は、文字列内の初期の文字に影響を与えないため、PNは「!」を残します。文字列の先頭。(これが当てはまらない場合でも、別のP1を選択することで解決できます。)


14個の順列のリストの14個の順列を使用し、フラット化、デキューし、140文字ごとに使用します。
ジョナサンアラン

1

C(TIO上のGCC)by MD XF

4195875

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

どうやって?

2番目の引数を文字列として出力しようとします。これは、入力で決定できるポインターです。ちょうどメモリ4195875"Hello, World!\n"文字列を開始することが起こります。

番号は、のprint("%p", "Hello, World!");前にprintf16進数を10進数に変換して追加することで決定され、元のTIOで試されました。ただし、printf書式文字列は表示されました。いくつかの数字を試してみると、文字列がフォーマット文字列の前にあることがわかりました。

したがって、メモリでは、次のようになります(C文字列として):

Hello, World!\n\0%2$s\0

これは、コンパイラの更新がソリューションを破壊する可能性があることも意味します。






1

JavaScript(ES6)、ボイル

81文字という制限を考えると、これはおそらく意図した解決策ではありません

global.g = ()=>"Hello, World!";
var str = "g";

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


素晴らしい。グローバル操作で1つの文字列を渡します。解決策は、それが意図されていることを、と思われる
ЕвгенийНовиков

それは意図した解決策ではありません:(
ボイル

私はそれを考えているので、関数の入力を渡す前にこのようなものをたくさん行うことは許可されていないと思います。チャレンジでは、完全なプログラムではなく、「Hello、World!」となる入力を行う必要があるためです。そうでなければ、ほとんど何も安全ではありません。だから私はこの亀裂が無効かもしれないと思う?
ボイル

@Voileそれは非常によくあるかもしれません。特に外部システムに変更を加えずに、入力が独立している必要があるかのようにタスクを読むのは公平だと思います-特にこれが意図した解決策でない場合:)
ビルジョラクセ

1
私はこれについて議論するメタ投稿をしました。気軽に議論を残してください。
ボイル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.