タグ付けされた質問 「string」

文字列の使用と操作を通じて特定の問題を解決するための競争。

24
この番号はレーシアンですか?
正の整数kは、次の場合、レーシアン数です。 ki*i + j*j + i*jfor i、j整数として表現できます。 たとえば、最初の正のロジアン数は次のとおりです。1(i=1、j=0); 3(i=j=1); 4(i=2、j=0); 7(i=2、j=1); 9(i=-3、j=3); ... は、特定のに対して一意ではないことiに注意してください。例えば、も用いて生成することができます、。jk9i=3j=0 これらの数値の他の同等の特性は次のとおりです。 k表すことができるi*i + j*j + i*jためi、j負でない整数。(整数の各ペアについてi、j同じを与える非負整数のペアがありますk) k六角形のグリッド上でテッセレーションを形成する一連の連続した六角形があります(k = 4およびの図を参照k = 7)。(この特性のため、これらの数値はモバイルセルラー通信ネットワークに適用されます。) シーケンスのOEISページでその他の特性を参照してください。 チャレンジ 正の整数が与えられた場合、それがレーシアン数であれば真の結果を出力し、そうでなければ偽の結果を出力します。 プログラムまたは関数は1000、データ型の制限まで、または1分未満で入力を処理する必要があります。 コードゴルフ。最短勝。 テストケース 次の数値は、真の結果を出力するはずです。 1, 4, 7, 12, 13, 108, 109, 192, 516, 999 次の数値は偽の結果を出力するはずです。 2, 5, 10, 42, 101, 102, 128, …
33 code-golf  math  number  number-theory  decision-problem  code-golf  kolmogorov-complexity  code-golf  sequence  code-golf  path-finding  chess  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  math  arithmetic  code-golf  code-golf  number  code-golf  geometry  code-golf  math  code-golf  code-golf  kolmogorov-complexity  alphabet  code-golf  regular-expression  hexagonal-grid  king-of-the-hill  path-finding  java  code-golf  string  sorting  code-golf  string  grid  code-challenge  compression  code-golf  random  code-golf  sequence  arithmetic  code-golf  number  grid  tiling  code-golf  tips  code-golf  sequence  number-theory  recursion  code-golf  string  grid  code-golf  math  number  combinatorics  permutations  string  code-challenge  code-golf  sequence  number-theory  subsequence 

29
プレフィックスコードですか?
情報理論では、「プレフィックスコード」とは、どのキーも別のキーのプレフィックスではない辞書です。言い換えれば、これは、文字列が他の文字列で始まらないことを意味します。 たとえば、{"9", "55"}はプレフィックスコードですが、そうで{"5", "9", "55"}はありません。 これの最大の利点は、エンコードされたテキストを区切り文字なしで書き留めることができ、一意に解読できることです。これは、常に最適なプレフィックスコードを生成するHuffmanコーディングなどの圧縮アルゴリズムに現れます。 タスクは簡単です。文字列のリストが与えられたら、それが有効なプレフィックスコードかどうかを判断します。 あなたの入力: 妥当な形式の文字列のリストになります。 印刷可能なASCII文字列のみが含まれます。 空の文字列は含まれません。 出力は、真/偽の値になります。有効なプレフィックスコードの場合はTruthy、そうでない場合はfalseyです。 真のテストケースを次に示します。 ["Hello", "World"] ["Code", "Golf", "Is", "Cool"] ["1", "2", "3", "4", "5"] ["This", "test", "case", "is", "true"] ["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011", "0110", "11001", "00110", "10011", "11000", "00111", "10010"] いくつかの誤ったテストケースを次に示します。 ["4", "42"] ["1", "2", …

30
ボックスを開くのを手伝ってください
ASCIIアートボックスがあり、それを開くにはプログラムが必要です。 例 入力: ------- | | |_____| 出力: / / / / / / / | | |_____| 仕様 最初の行は-、少なくとも3 つのみで構成されます 中央の行は|スペースで始まり、次で終わります| すべての中央の行は同じになります 最後の行は|have _で始まり、aで終わる| すべての行は同じ長さになります ボックスを開く: それぞれ-を/昇順の行と位置に置き換えます。

30
これはn話ですか?
に触発されていますか?、私はより難しい挑戦を考案しました。文字列の場合、文字列を考えると、決定のn-話すいずれかのために、N ≥ 2n≥2n\geq 2。 N-speakは、各文字をnnn回繰り返すことで定義されます。でn = 4n=4n = 4、文字列がHelloに変換されますHHHHeeeelllllllloooo。あなたの目標は、入力がnピーク変換の有効な出力であるかどうかを把握することです。 n = 2 kn=2kn = 2k場合に有効なn話である文はすべて、k話でも有効であることに注意してください。したがって、解くのが難しい部分はnnn奇数値になります。 入力 少なくとも2文字で構成される文字列。入力には文字のリストも使用できます。入力では大文字と小文字が区別されます。 出力 Truthy文字列がn-speakのfalsey場合、そうでない場合。 例 真のケース HHeelllloo,, wwoorrlldd!! TTTrrriiipppllleee ssspppeeeaaakkk QQQQuuuuaaaaddddrrrruuuupppplllleeee ssssppppeeeeaaaakkkk 7777777-------ssssssspppppppeeeeeeeaaaaaaakkkkkkk 999999999 aaaabb aaaaaaaabbbbcc aaaaabbbbb @@@ 追加の真実ケースを生成する場合は、このMathGolfスクリプトを使用できます。文字列を引用符で囲み、入力としてnnnの値を配置します。 偽例 Hello, world! TTTrrriiipppllleee speak aaaaaaaaaaaaaaaab Ddoouubbllee ssppeeaakk aabbab aaaabbb a (does not need to be …

11
誰が選挙に勝ちますか?
これは、1人と2人の2人が出勤するという課題です。1と2の世界では、人々は特定の方法で決定論的に投票するため、候補者は選挙前に結果を把握できます。 注:これは、外部の選挙やその他の政治的出来事を指すものではありません。 2人がオフィスに走っています。これらの人々を1と2と呼びます。どちらも選挙に勝つかどうかを知りたがっているので、彼らは人々の知識といくつかのコードを使用して結果がどうなるかを判断します。政府の支出を最小限に抑えるため、コードはできるだけ短くする必要があります。 あなたの仕事:投票方法に基づいて一連の人々を与え、選挙で勝った人を出力します。 1と2の楽しくてエキサイティングな世界には5種類の人々がいます。 A:1に間違いなく投票する人 B:間違いなく2に投票する人。 X:左の人が投票する人に投票する人。左に人がいない場合は、右の人が投票する人に投票します。自分の権利のある人が誰に投票しているかが明確でない場合、彼らは投票しません。 Y:人々は左の人の反対に投票します。左側に人がいない場合は、右側にいる人の反対に投票します。自分の権利のある人が誰に投票しているかが明確でない場合、彼らは投票しません。 N:投票しない人。 これは左から右に評価されます。 例: 明確にするために、「評価」されている人はすべて小文字です。 Input: `XXAYAN` xX Votes for whoever their friend is voting for. Their friend has not decided yet, so it is unclear, so they do not vote. Xx Person to left is voting "none" so votes "none." a …

23
配電盤のブルートフォース
先日、私たちのチームは脱出室に行きました。パズルの1つには、6つの機械式スイッチのボードが含まれており、ボックスのロックを解除するには、次のような正しいオンとオフの組み合わせを見つける必要がありました。 -v-v-v- -v-v-v- 開発者である私たちは、実際にパズルを解くよりも2 ^ 6 = 64の組み合わせを1つずつ試す方が効率的だと判断しました。そこで、貧しい人にバイナリカウントを割り当てました。 -v-v-v- -v-v-v- -v-v-v- -v-v-^- -v-v-v- -v-^-v- -v-v-v- -v-^-^- 等々。 課題は 、上記のようにフォーマットされた文字列として位置オフのスイッチ全てが与えられると、そのプログラムを書いて、任意の順序でオンとオフのすべての組み合わせを生成します。 完全なプログラムまたは関数のいずれかを作成できます。したがって、プログラムは、stdin、ファイルを介して、または単一の文字列引数として入力を受け取り、出力を返すか印刷することができます。返される場合、出力はlist / array / etcにある可能性があります。単一の文字列ではなく。出力が単一の文字列の場合、ボードは改行で区切る必要があります(末尾の改行は許可されます)。 入力文字列は正規表現r'((-v)+-)(\n(-v)+-)*'と一致し、すべてのスイッチがオフになっている1つのボードを表します。これは、ゼロケースがないことを意味し、スイッチは左揃えです。各行には同じ数のスイッチがない場合があります。 各出力ボードは、入力とまったく同じ形式である必要がありますが、必要に応じてvを^に置き換えることができます。出力ボードは、任意の数の改行で区切ることができます。 ランタイムは当然、スイッチの数がO(2 ^ n)であるため、コードはどのような配置でも10を超えるスイッチではテストされません。 これはコードゴルフなので、バイト数の最も短いコードが優先されます。 サンプルの入力と出力 入力: -v- 可能な出力: -v- -^- 入力: -v- -v- 可能な出力: -^- -^- -^- -v- -v- -^- -v- -v- 多数のスイッチについて回答を確認するのは非常に面倒なので、ここでは健全性チェックツールとしてのPythonスクリプトを示します。(テストケースをさらに増やしたい場合に備えて、特定の入力ファイルから期待される出力を生成するために、現在コメントアウトされたスニペットを含めました。)入力文字列を「input」という名前のファイルに入れ、改行で区切られた出力(申し訳ありませんが、リストのフォーマットはありません)は同じディレクトリの「output」という名前のファイルに入れて実行しpython3 sanitycheck.pyます。

12
プレサノールトマンテウス
かばんの単語は、各単語の一部を取り、単一の新しい単語にそれらを作る二つの単語を組み合わせたものです。たとえば、lion + tiger => ligerです。 1組の入力語からportmanteausを生成するプログラムを作成しましょう。コンピューターは英語が上手ではないので、出力のマントマンが目と耳に心地よいものになるように、いくつかのルールを確立する必要があります。 (ここでの例は、わかりやすくするために接頭辞と接尾辞の間に区切り文字を付けて示していますli|ger。ただし、プログラムの実際の出力には区切り文字を使用しないでくださいliger。) 各portmanteauは、2番目の単語の空でない接尾辞に連結された最初の単語の空でない接頭辞で構成されます:yes to li|ger、no to |iger。 接頭辞が母音で終わる場合、接尾辞は子音で始まる必要があり、その逆も同様です:yes to lio|gerまたはl|erno to lio|igeror l|ger。母音と子音のどちらとして数えるかを決めることができyます。ただし、ソリューションでは1つのオプションを選択し、それに従う必要があります。 結果の単語には、元の単語のいずれか(yes to lio|ger、no to、lion|igerまたは)を完全に含めることはできませんli|tiger。 このルールは、問題の部分が両方の単語の一部で構成されている場合でも成立します。入力がtwo+のwords場合、出力にtw|ordsはsubstringが含まれているため、出力は依然として不正wordsです。(このペアの有効な出力はのみですt|ords。) プログラムまたは関数は2つの単語を取り、それらの単語からその順序で形成できるすべての快適な門脈のリストを出力または返す必要があります。 詳細 標準の入出力方法が適用されます。標準的な抜け穴は禁止されています。 単語は小文字のみで構成されます(または、必要に応じて大文字のみで構成されます)。 2つの入力語をリスト、タプル、2つの個別の入力、非文字区切り文字付きの単一の文字列などとして使用できます。 出力形式も同様に柔軟です。文字列を返すか出力する場合は、あるportmanteauの単語がどこで終わり、次の単語が始まるかが明確になるように区切る必要があります。 ポルトマントー語の中に区切り文字はありません。 出力リストに重複した結果が含まれていても問題ありません。重複を削除してもかまいません。 テストケース > lion, tiger < liger, ler, liger, lir, lioger, lior > tiger, lion < tion, ton, tin, tigion, …

3
OOP:指向プログラミングの重複
コードゴルフに適していると思われるあまり知られていないプログラミングパラダイムの1つは、オーバーラップ指向プログラミング(OOP) *です。部分的に同一のコードを記述する場合、同一の部分を単にオーバーラップし、2つの元のコード行の開始位置を何らかの方法で記憶することにより、多くのバイトを節約できます。あなたの仕事は2書くことです重複したプログラムまたは機能をcompressしてdecompress、以下の仕様で: *本番コードではおそらく使用しないでください。 compress compress任意の便利な形式の2つの文字列を取り、可能な限りそれらをオーバーラップします。これは、s両方の入力文字列がの部分文字列であるような最小長の文字列ですs。さらに、両方の文字列の開始インデックスと終了インデックスを識別する出力が返されます。 例:(正確なIOフォーマットはあなた次第です) compress("abcd", "deab") -> "deabcd" ((2,5),(0,3)) compress("abcd", "bc") -> "abcd" ((0,3),(1,2)) compress("abc", "def") -> "abcdef" ((0,2),(3,5)) or "defabc" ((3,5),(0,2)) decompress decompressの逆関数を計算しますcompress。これは、文字列と2つの開始インデックスと終了インデックス(によって返される形式で)が与えられcompress、2つの元の文字列を返します。有効な入力のみを処理する必要があります。以下の等式は、すべての文字列のために保持する必要がありs1、s2: (s1, s2) == decompress (compress (s1, s2)) 例:(例の逆compress) decompress "deabcd" ((2,5),(0,3)) -> "abcd" "deab" decompress "abcd" ((0,3),(1,2)) -> "abcd" "bc" decompress "abcdef" ((0,2),(3,5)) -> …

30
標準の数値を合計します
1行に1つの整数を持つストリーム/ファイルを考えます。例えば: 123 5 99 コードはこれらの数値の合計、つまりを出力する必要があり227ます。 入力形式は、1行に厳密に1つの整数です。たとえば、整数の配列として入力が1行にあると想定することはできません。 STDINからファイル名の形式で入力を取得するか、選択した名前のファイルを入力できます。あなたはどれを選ぶことができます。入力を取得する他の方法は許可されていません。 入力には少なくとも1つの整数が含まれます。すべての整数が非負であり、それらの合計が未満であると仮定できます。232

6
ターザンのオリンピックつるスイングル​​ーチンを記録する
オリンピックのツルを振る人は、標準の木でルーチンを実行します。特に、標準ツリーにnは、0アップスルーのn-1頂点aと、各非ゼロ頂点をそのn % a下の頂点にリンクするエッジがあります。したがって、たとえば、標準ツリー5は次のようになります。 3 | 2 4 \ / 1 | 0 5を3で割ったときの剰余は2であるため、5を2で割ったときまたは4で割ったときの剰余は1であり、5を1で割ったときの剰余は0です。 今年、ターザンは頂点から始まり、頂点へn - 1とスイングし、頂点へn - 2と続きn - 3、最終的に頂点に降りるまで、新しいルーチンで金を守ります0。 ルーチンのスコアは、各スイング(降車を含む)のスコアの合計であり、スイングのスコアは、ツリー内の開始点と終了点の間の距離です。したがって、標準ツリー5のターザンのルーチンのスコアは6です。 から4までのスイングが33点(ダウン、アップ、アップ)を獲得し、 から3にスイングして21ポイント(ダウン)を獲得し、 から2までのスイングが11ポイント(ダウン)を獲得し、 から降車し1て01ポイント(下)を獲得します。 正の整数nを指定すると、標準ツリー上のターザンのルーチンのスコアを計算するプログラムまたは関数を記述しnます。サンプルの入力と出力: 1 -> 0 2 -> 1 3 -> 2 4 -> 6 5 -> 6 6 -> 12 7 -> 12 8 -> 18 …
32 code-golf  math  number  number-theory  code-golf  code-golf  restricted-source  programming-puzzle  css  code-golf  parsing  code-golf  random  encryption  code-golf  ascii-art  fractal  code-golf  math  code-golf  sorting  graph-theory  path-finding  permutations  code-golf  tetris  code-golf  card-games  code-golf  math  sequence  rational-numbers  code-golf  chess  code-golf  string  geometry  grid  code-golf  ascii-art  grid  code-golf  sequence  integer  code-golf  math  number-theory  packing  polyomino  code-golf  math  code-golf  string  quine  permutations  code-golf  math  code-golf  image-processing  optical-char-recognition  code-golf  string  kolmogorov-complexity  sequence  integer  code-golf  number  permutations  palindrome  code-golf  kolmogorov-complexity  code-golf  number  sequence  string  fewest-operations  code-golf  string  kolmogorov-complexity  sequence  primes  code-golf  string  ascii-art  code-golf  string  number  alphabet  code-golf  counting  code-golf  number  sequence  number-theory  primes  code-golf  subsequence  word-search 

30
本当ですか?ゼリーに聞いて!
バックグラウンド Octave(および、拡張によりMATL)の非常に便利な真偽/偽の行列の解釈に触発され、JellyはȦ(Octaveスタイルのすべて)アトムを取得しました。 Ȧ入力として配列を受け取り、配列が空ではなく、ツリー構造のどこにも数字0(整数、浮動小数点、または複素数)を含まない場合は1を返します。それ以外の場合は0を返します。 たとえば、配列[[]]は空ではなくゼロを含まないため真理ですが、[[0]]は最も内側のレベルに0を含むため偽です。 仕事 選択したプログラミング言語で、完全なプログラムまたは関数を作成します。これは、入力として空の、場合によってはギザギザの整数配列を取り、Ȧがそれぞれ1または0を返すかどうかを示す真実または偽の値を出力または返します。 あなたの提出物は、以下の規則に従わなければなりません。 真偽値と偽の値は、すべての入力で一貫している必要があります。つまり、Ȧが1を返すすべての配列は同じ真偽値にマップし、Ȧが0を返すすべての配列は同じ偽値にマップする必要があります。 完全なプログラムは入力として配列の文字列表現しか受け取れないため、これは許可されています。ただし、返されるreprまたは同様の言語のカノカル表現を使用する必要があります。 特に、配列の最初の要素の前にスペースがあるとは想定できません。 ご使用の言語がジャグ配列をネイティブに表現できない場合(のみ)、既存のプログラミング言語の標準的な構文を使用して、入力の文字列表現を使用できます。 言語にギザギザの配列(リストやタプルなど)を表す方法がいくつかある場合は、そのうちの1つをサポートするだけで済みます。 あなたの言語自体がこのチャレンジへの有効な提出物であるビルトインを持っている場合、あなたはあなたの答えでそれを使うことはできません。他のすべてのビルトインは許可されます。 配列操作と文字列操作の両方を使用して回答を投稿することをお勧めします。一方が他方よりも著しく短い場合でも。 すべての標準コードゴルフ規則が適用されます。 バイト単位の最短コードが勝つように! 真実のテストケース [1] [10] [[]] [[[[1]]]] [[], [1], [1, 2]] [[1], [1, [2]], [1, [2, [3]]]] [[8], [8, [9]], [8, [9, [10]]]] 偽のテストケース [] [0] [0, -1] [-1, 0] [[[[0]]]] [[0], [1, 2], [3, 4, …

5
段落にパッチを適用
Patch the Imageの精神で、同様の課題がありますが、テキストがあります。 チャレンジ ビット腐敗はあなたの貴重なテキストを苦しめました!ASCII文字で構成され、どこかに長方形の穴がある段落が与えられた場合、プログラムは、段落が可能な限り最適になるように、適切なテキストで穴を埋めようとする必要があります。 さらなる定義 穴は常に長方形で、複数の線にまたがることがあります。 穴は1つしかありません。 穴は必ずしも単語の境界に収まるわけではないことに注意してください(実際、通常は収まりません)。 穴は入力段落の最大25%になりますが、「通常」テキストの「終了」を超えてオーバーラップまたは拡張する場合があります(以下のユークリッドまたはバジャーの例を参照)。 穴を見つけることはこの課題の主要なポイントではない#ため、簡単に識別できるようにハッシュマークのみで構成されます。 入力段落の他の場所にはハッシュマークがありません。 あなたのコードは、以下の例の「通常の」テキストを使用できません-穴のあるテキストのみを受け取り、処理します。 入力は、単一の複数行の文字列、文字列の配列(1行に1つの要素)、ファイルなどとして使用できます。言語に最も適したものを選択できます。 必要に応じて、穴の座標を詳述するオプションの追加入力を取得できます(たとえば、座標のタプルなど)。 提出物にアルゴリズムを記述してください。 投票 投票者は、アルゴリズムがテキストの穴をどの程度埋めているかに基づいて、エントリを判断するよう求められます。いくつかの提案には以下が含まれます: 記入された領域は、残りの段落としてのスペースと句読点のおおよその分布と一致しますか? 塗りつぶされた領域は構文に誤りがありますか?(たとえば、連続する2つのスペース、疑問符が続くピリオド, ,、などの誤ったシーケンスなど) 目を細めた場合(実際にテキストを読んでいない場合)、以前は穴があった場所を見ることができますか? 穴の外にキャメルケースの単語がない場合、穴には何かが含まれていますか?穴の外側に大文字が含まれていない場合、穴には何かが含まれていますか?穴の外に大文字がたくさんある場合、穴には比例した量が含まれていますか? 有効性基準 提出物が有効と見なされるためには、穴の外側の段落のテキスト(末尾のスペースを含む)を変更してはなりません。末尾の単一の末尾の改行はオプションです。 テストケース 形式は、コードブロック内の元の段落の後に、穴のある同じ段落が続きます。穴のある段落が入力に使用されます。 1(画像のパッチ) In a popular image editing software there is a feature, that patches (The term used in image processing is inpainting as @minxomat …

3
PPCGユーザー名をゴルフダウン
チャットで行ったコメントとそれに続く会話に触発されて、この挑戦​​をしました。 この辺りのイニシャルで言及されているのは私だけですか?私たちはすべてゴルフをすることについてです。MBとD-nobがあり、... O. 私が「CH」として知られているなら、他の誰もが同様に初期ベースのニックネームを持つべきだと思います。 以下は、プログラミングパズルとコードゴルフのトップ100ユーザーの評価リストです。 Martin Büttner Doorknob Peter Taylor Howard marinus Dennis DigitalTrauma David Carraher primo squeamish ossifrage Keith Randall Ilmari Karonen Quincunx Optimizer grc Calvin's Hobbies ugoren Mig gnibbler Sp3000 aditsu histocrat Ventero xnor mniip Geobits J B Joe Z. Gareth Jan Dvorak isaacg edc65 Victor steveverrill feersum …
32 code-golf  string 

29
分解された部分文字列
前書き stringを観察しましょうabc。これから作成できる部分文字列は次のとおりです。 a, ab, abc, b, bc, c 次のように、最初の文字列の下にそれらを配置する必要があります。 abc a b c ab bc abc 文字列の順序は重要ではないため、これも完全に有効です。 abc a ab abc b bc c したがって、サブストリングは、初期ストリングのサブストリングの位置の下に配置されます。したがってabcdef、substringのcde場合、次のようになります。 abcdef cde タスク タスクは、上記のように、すべての部分文字列を0より大きい長さに揃えることです。文字列自体にはアルファベット文字のみが含まれ、少なくとも1文字は含まれると想定できます。パディングには、スペースまたはその他のアルファベット以外の印刷可能なASCII文字(32 - 127)を使用できます。言及するかもしれない必要はありませんが、文字列自体はそうではないように、ユニークな文字が含まれていますabaから、a2回出現します。 テストケース 入力: abcde 可能な出力: a ab abc abcd abcde b bc bcd bcde c cd cde d de e …
32 code-golf  string 

30
言葉を伸ばす
単語内の文字を複製するプログラムまたは関数を作成して、単語内の左から右に配置されたすべての複製された文字が入力配列を形成するようにします。 例えば: input: chameleon, [c,a,l,n] output: cchaamelleonn 入力 最初の単語(例chameleon) 文字の配列([c,a,l,n])または配列を表す文字列(caln)、または同様のもの 入力は、関数パラメーター、STDIN、または同等の言語を介して行うことができます すべての入力は小文字(az)になります 出力 変更された言葉 複数のソリューションがある場合、いずれも印刷できます input: banana [n,a] possible outputs: bannaana, banannaa |-|---------|-|--->[n,a] 入力単語(必ずしも配列ではない)に配列内の文字が(順番に)あると仮定することができます。 また、入力に同じ文字が連続していないと仮定することもできます(リンゴ、オタク、緑、ガラス、ドアではありません...) 例 input: abcdefghij, [a,b,c] output: aabbccdefghij input: lizard, [i,a,r,d] output: liizaarrdd input: coconut, [c,o] ouput: ccooconut or coccoonut or ccocoonut input: onomatopoeia, [o,o,a,o,o] output: oonoomaatoopooeia …

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