<すべての言語>でのゴルフのヒント


81

この投稿の目的は<all languages>、特定のものではなく、簡単に適用できるすべてのゴルフのヒントを収集することです。

そのロジックを大半の言語に適用できるという回答のみを投稿する

回答ごとに1つのヒントをお願いします


5
「多数派」とは何ですか?
反時計回りに回るのをやめた

2
@leftaroundabout同じ単語のメトリックによって
-ajax333221

8
問題は、多くの言語が非常に典型的でないパラダイムを備えた(多くの場合短命の)実験的な言語であり、典型的なプログラミング表現はまったく意味をなさないことです。したがって、「すべての言語の大部分」を満たすことは事実上不可能です。たとえば、「codegolf.SEで定期的に使用される言語の大半」など、何らかの方法で制限する必要があります。現時点では、回答は「リモートのC派生言語の大部分」に非常によく似ていますが、記述されたコードの大部分はそれらで書かれていますが、大部分は言語ではありません。
counterclockwisオンに止まっ

3
leftroundabout、私たちは皆それらが大体意味することを知っていると思います。これは、ほとんどの場合、言語に依存しない最適化、つまりBrainfuckで役立つだけでなく、Python、C、Java、Fortranを一度に有効化することに関するものです。同様に機能する多くの言語に適用できる一般的なアイデア。ヒントやCWの質問でそのような正確で具体的な必要はないと思います。これは、他の人がゴルフをするのを助けることであり、彼らを怒らせることではありません。
ジョーイ

14
うまくいけば、誰も呼ばれる言語を作成しません<all languages>...
mbomb007

回答:


72

ループを結合

通常、2つの結果ループまたは2つのネストされたループを1つにマージできます。

前:

for (i=0; i<a; i++) foo();
for (i=0; i<b; i++) bar();

後:

for (i=0; i<a+b; i++) i<a?foo():bar();

ループはまだ同じではありません。@Gaffiは正しい。
kaoD

5
@kaoDは、どちらの場合にfoo呼び出されたa回数、barと呼ばれるb時代。これは、「後」では、ループがa+b最初のa呼び出しfoo、次の呼び出しの順に実行されるためbarです。
ウゴレン

私はこれをもう一度見ていますが(ずっと後で)、今は自分の質問を理解していません。私は以前に三項演算を理解していなかったのでしょうか?私が今見ている方法は、理にかなっています。
ガフィ

1
おっと、それは夜遅くに読んだ。あなたが正しい!
kaoD

3
よく似ています:for(y=0;y<Y;++y)for(x=0;x<X;++x)多くの場合、for(i=0;i<X*Y;++i)x置き換えられ、i%Xy置き換えられi/Xます。
リン

62

明白なことに言及するだけです:

アルゴリズムの選択に疑問を投げかけ、まったく新しいものを試してください。

ゴルフ(特にプログラムが長くなるより難しい問題)を頻繁に行う場合、他の基本的なオプションを試すことなく、最初に選択したパスに固執することがあります。もちろん、一度に1行または数行のマイクロゴルフ、または全体的なアイデアの一部をマイクロゴルフすることもできますが、多くの場合、まったく異なる解決策を試してはいけません。

これはHitting 495(Kaprekar)で特に顕著であり、実際のアルゴリズムから逸脱し、同じ結果を得るために適用できるパターンを探すことが多くの言語(Jではなく)で短縮されました。

欠点は、同じことをおそらく半ダース解決することです。ただし、HQ9 +以外の実際にはすべての言語で機能します(Hello Worldを出力する別の方法を見つけるのは少し無駄です)。


12
+1ゴルフに適していることに加えて、これは多くの現実世界の状況でどんなプログラマにとっても良い運動です!
ガフィ

52

テスト駆動開発を使用する

コードがさまざまな入力を処理する必要がある場合は、包括的なテストを作成し、それらをすべて非常に迅速に簡単に実行できるようにします。これにより、危険な変換を一度に1歩ずつ実行できます。ゴルフは、ひねくれた意図を持ったリファクタリングのようになります。


4
この方法のスピンオフを使用します。通常、問題自体はかなり単純なので、この仕事をするプログラムを作成します。通常、これは「読みやすいゴルフ」であるため、簡潔ですが、改行などがあります。このファイルを新しい場所にコピーしてゴルフし、選択した入力に対してプログラムが同じ値を返すことを時々チェックします。ミスを犯して、壊れたプログラムを残したり、変更内容を記憶したり、ゴルフのピースを理解したりしなかった場合、参照ソースとして「仕様」が保存されます。
塩奈

2
私はこの方法が大好きです。これが、私が書くすべての問題に対して包括的なテストスイートを含める傾向がある理由の1つです。
ジョーイ

@RubberDuck「自分自身を繰り返さない」という原則は、しばしば厳密に守られます。
ジョナサンフレッチ

48

論理ステートメントを減らすようにしてください

例えば、場合ABブールとあなたの言語ですが、ある程度の数字のようなブール値を扱い、A and (not B)A>B等価です。Pythonの例

if A and not B:
    foo()

次と同じです:

if A>B:
    foo()

3
私はそのことを考えたことがなかったでしょう。
cjfaure

27
B>A or foo()これは、これを表現するさらに短い方法であり、ブール式の遅延評価を利用して、必要なときにのみ計算するようにします。
scragar 14

5
@scragar:正しいですが、これはこのヒントのポイントではありません。(ただし、貴重な独立したヒントです。)
Wrzlprmft 14

3
@scragar、B>A or foo評価されますfoo場合はB==Aこれが私たちが望むものではありません。(そう?)
msh210

2
また、(たとえば、5/6パラメーターを使用した)長い混合条件がある場合、真理値表と
カルノー

33

既に持っている値を使用して変数を初期化します。

代わりにx=1、既に1に等しいものを探してみてください。
たとえば、関数の戻り値:printf("..");x=0;-> x=!printf("..");。常に否定できるため、または必要なのは正しい真理値だけであるため(そして、それが1か19かは気にしない)、0で最も簡単です。


4
Cでは、mainのargcを1として使用できます。codegolf.stackexchange.com
questions

1
@ std''OrgnlDave、True。ただし、この質問はすべての言語に共通するものに関するものです。
-ugoren

33

単項使用~のためにx+1x-1

このトリックは、単項のビットごとの否定演算子~と単項の通常の否定演算子を持つ言語に適用されます-

プログラムに式が含まれている場合-x-1~xバイトを節約するために式を置き換えることができます。これはあまり頻繁には発生しませんが、-両方の式を否定()した場合に何が起こるかを見てください:x+1等しい-~x!同様に、x-1等しいです~-x。(チルダが指す方向を考えてください:右が+、左が-。)

これは便利です。なぜなら、これらの演算子があると考えることができるすべての言語で、ほとんどの演算子よりも優先順位が高いからです。これにより、括弧を節約できます。ここで4バイトを保存する方法をご覧ください。

(x+1)*(y-1)     ==>    -~x*~-y

30

空白を絞る

あなたの言語の空白の規則を知ってください。一部の句読点またはその他の文字は、周囲の空白を必要としない場合があります。次のBourneシェル関数を検討してください。

f () { echo a; echo b; }

Bourneシェルで();は、メタキャラクターであり、空白を囲む必要はありません。ただし、{}単語であり、メタ文字の隣にない限り空白が必要です。隣の4つのスペースでゴルフをすることができます();が、{との間のスペースを維持する必要がありechoます。

f(){ echo a;echo b;}

Common LispPicoLisp()メタ文字です。次のコードを検討して、2つの数値の平均を見つけます。

(/ (+ a b) 2)

2つのスペースでゴルフを楽しめます。

(/(+ a b)2)

一部の言語には、空白に関する奇妙で微妙な規則があります。整数の行の合計と積を出力するこのRubyプログラムを検討してください。

#!ruby -an
i=$F.map &:to_i
puts"#{i.reduce &:+} #{i.reduce &:*}"

それぞれの&前にスペースが必要です。Rubyでは、ブロックパラメータを渡す場所をi=$F.map &:to_i意味します。しかし、意味どこバイナリ演算子です。i=$F.map(&:to_i)&i=$F.map&:to_ii=$F.map.&(:to_i)&

この奇妙さは、あいまいな句読点を使用するPerlやRubyなどの言語で発生します。疑わしい場合は、REPLを使用するか、短いプログラムを作成して空白ルールをテストしてください。


1
「;」と「{」の間ではなく、「{」と「echo」の間にスペースが必要なのはなぜですか。と「エコー」?
ライアン

3
OpenBSD sh(1)のマニュアルにある用語を使用しました。「{」は予約語であり、「;」です。はメタ文字です。このため、「{echo」は1語ですが、「; echo」は2語です。他のマニュアルでは、これについて異なる説明があります。また、Zシェルzshには異なるルールがあります。
カーニグ14

28

複数回使用する場合、関数に新しい名前を割り当てます

x = SomeLongFunctionName
x(somedata)
x(somemoredata)
etc

に十分な呼び出しを使用する場合のみx
エリプシロン

28

単一文字の変数名

52個あります。それらをすべて使用してください!異なるアプローチを試して、長さを比較することを恐れないでください。言語と利用可能な特定のショートカット/ライブラリ機能を知ってください。


8
大文字と小文字を区別しない言語の場合は26。:
ガフィ

12
多くの場合$_識別子として使用できます。
グリフィン

4
@Gaffi:タスクがASCIIに制限するか、文字ではなくバイトをカウントしない限り、Unicode識別子を許可する言語には十分です。
ハンマー

あなたの代わりにユニコードのバイトをカウントしている場合は、拡張ASCIIを使用すると、あなたがそれらを必要とする場合は、別〜120個の識別子を絞るための方法(ゴルフスクリプトのためにあなたは、とにかく26以上を必要とすべきではないこと)であるかもしれない
scragar

2
@T-SQLの有効な変数名です@a。代わりに使用します。
BradC

25

条件演算子を使用します。

条件演算子

bool ? condition_true : condition_false

IF よりも、文字的に賢明です。

if(a>b){r=a;}else{r=b;}

として書くことができます

r=a>b?a:b;

25
三項を持たない言語はa&&b||c代わりに使用できます。少し長くなりますが、それでも短いですif
マイケルコール

この場合も、一部のユーザーはどちらのオプションも使用できません(VBAが思い浮かびます)が、両方ともまだ良い提案です。:
ガフィ

1
Gaffi:VBAにはがIffありますが、それは関数ですが、すべての引数の評価の対象となります。
ジョーイ

三元を使用してステートメントも非常に役立つことができるかどうかif(a ? b : c)
Jojodmo

4
@MichaelKohl はtrueの場合にa&&b||c返すことができることcに注意してください。falseのa場合bは少しエッジケースですが、それを忘れないでください^^
Katenkyo

24

コードの説明を書く

説明を書くと、コードの各部分をもう一度徹底的に調べ、特定のパッセージを書く際の考えと選択を明確にする必要があります。そうすることで、いくつかのバイトを節約する可能性のあるさまざまなアプローチが可能であること、または必ずしも当てはまらない仮定を無意識に行ったことに気付くかもしれません。

このヒントは、アルゴリズムの選択疑問投げかけ、まったく新しいものを試すことに似ています。しかし、各部分がどのように機能するかを実際に書き留めるステップは、代替案を認識するために時々非常に重要であることがわかりました。

ボーナスとして、説明を含む回答は他のユーザーにとってより興味深いものであるため、支持される可能性が高くなります。


23

文字数を再確認してください

簡単なように聞こえますが、注意することで、実際に何もしないことでいくつかのキャラクターを「保存」できる場合があります。

Windowsを使用している場合は、入力することができる\r\nだけではなく\r、または\nあなたがリターンを打つとき-行あたりの余分なバイトを追加します!制御文字を回して、これを行っていないことを再確認してください。

メモ帳で++あなたはすべて変換することができます\r\nだけで行末までを\rに行くことによってEdit > EOL Conversion > UNIX/OSX Format

また、文字カウントに末尾の空白を含めないでください!コードの一番下の行の改行も重要ではないため、カウントする必要もありません。


私はこれが実際に数えられたケースを見たことがないと思います
ジェイコブ

4
私は自分でこの問題を抱えていました(そのため、なぜ追加するのですか)。
ショーンレイサム

21

質問を注意深く読んでください

コードゴルフは、質問(他の設定で暗示されている場合でも、質問されるものとされないもの)を理解することと同じくらい、質問されるものだけを満たせるコードを生成することと同じです。

明示的に要求されたもの以外の入力を処理する必要はありません。いくつかのテストケースがあり、一般的な要件がない場合、コードはそれらのケースでのみ機能します。等。


15
ここでのより良い見出しは、「不要なエッジケースを処理しないこと」だと思います。「抜け穴を見つけよう」というフレーズは、ルールの巧妙な再解釈によって指定されていることを回避する方法を思い起こさせますが、あなたが提供しているのは、ソリューションを過度に実装しないための良いアドバイスです。
ジョナサンヴァンマトレ14年

1
はい、しかしルールの巧みな再解釈もコードゴルフの一部です!(0文字ソリューションなど)
トビア14年

8
しかし、それは別の答えになるでしょう。たとえば、OPはフロートサポートを必要としないため、intでのみ機能するソリューションの実装と、「100より大きい任意の素数」というテキストを出力する回答との間には根本的な違いがあります。実際の素数であること」。
ジョナサンヴァンマトレ14年

一部のOPには「変更の対象となるテストケース。変更後もコードが機能する必要があります」という通知があり、テストケースをハードコーディングする回答が1つだけ表示される場合は、実際に変更します。
エリックアウトゴルファー

20

0から2 n -1 までの数値をチェックするためにビット演算を使用します

ちょっとしたケースかもしれませんが、時には役に立つかもしれません。これは、m = 2 n -1が適用されるすべての数値の右端nビットが1に設定されているという事実に依存しています。

だから、7 10 == 00000111 2、15 10 == 00001111 2、31 10 == 00011111 2など。

トリックですx&~m。これは、いつでもtrueを返しますxされていない 0との間m(両端を含む)、およびそれ以外の場合はfalse。次の最短の等価式:から6バイトを節約しますx>=0&&x<=mが、明らかにm2 n -1を満たす場合にのみ機能します。


18

新しい変数の代わりに関数パラメーターを再利用する


1
たとえば、Cでは、メイン関数には常にプログラムに提供された引数の数(1-プログラム名-「デフォルト」)が渡されるため、main(i){...変数1割り当てを行います。2文字が保存され
グリフィン

6
これはC固有のものだと思います。スクリプト言語は宣言を必要とせず、ほとんどのコンパイル済み言語では変数を定義するのはパラメーターを定義するより長くありません。
ウゴレン

javaでは、1つのパラメータと同じ型の関数内に配列が必要な場合、そのパラメータを最後に配置してvarargパラメータにすることで数バイト節約できます。(文章の中で最も長い単語を見つけるために、機能上のいくつかのバイトを削り取るためにそれを使用する)
masterX244

18

数字を保存するよりも大きい/小さい:

//use:
if(n>9){A}else{B}
//instead of:
if(n<10){B}else{A}

ちょうどからコードを交換することを忘れないでくださいifelse、彼らはまったく同じことを行う(あるいは不平等の側面を切り替える)されます!

注:これは、10の累乗とその負数で適用できます。...-100, -10, 10, 100...

(ソースリンク)


この点を理解しているかどうかはわかりません。これにより何が減りますか?
ガフィ

@Gaffiあなたは1つのキャラクターを保存し、彼らはまったく同じことを行う
-ajax333221

vs. ごめんなさい、頑固になろうとしないで、私はそれを手に入れません。(newb、ここでは、どうやら...)
ガフィ

1
ああ、分かった。9から10、99から100などの整数遷移で動作します。申し訳ありませんでした。(n = 9.5の問題を見ることができるため、整数のみを言います...)
ガフィ

8
また、一部の言語(サポートされている場合)で数値が十分に大きい/小さい場合、科学表記法は実際に代わりにいくつかの文字を保存する場合があります:if(n>99999)vsif(n<1e5)
scragar 14

16

> =および<=の代わりに>および<を使用します

ハードコードされた整数値に対してチェックするときは、可能であれば代わりにandを使用>します。たとえば、<>=<=

if(x>24&&x<51)

使用するより2バイト短い

if(x>=25&&x<=50)

3
関連:あなたは結果が負にすることはできません確信している場合は、使用できる<1の代わりに==0ゼロチェック(またはとして>0の代わりに、!=0ミラーリングされたチェックのため)。
ケビンCruijssen

1
x整数であることに関するメモを追加してはいけませんか?
ザカリー

15

早すぎるループブレークを回避する

ループを実行してブールチェックの1つまたは複数のインスタンスをチェックする場合、最初の真の値でループを終了するより効率的なプログラムになる可能性があります。ただし、ブレークを削除し、すべての繰り返しをループ処理することで、コードを短くすることができます。

int main() {
bool m = false;
int n = 1000;
for (int i = 0; i < n; i++) {
if (i >= 100) {
m = true;
break; // remove this line
}
} 
return 0;
}

5
if次の場合でも、ステートメントを簡略化できますm|=i>=100。(また、この場合にi>=100to i>99を単純化することもできますが、ここではあまり関係ありません)
マリナス

15

-代わりに使用する!=

数値比較の場合:

Bに等しい場合は、a-bその結果0falsyです。0真実以外の何か。
ブールコンテキストで使用する場合、a-b<=>a!=b

if/else三項演算子と一緒に、または三項演算子と一緒に使用すると、平等のために1バイト節約できます:
a==b?c:d<=>a-b?d:c


12

長い配列の文字列を分割する

ほとんどの言語には、ある種のトークンの周りで文字列を文字列の配列に分割する方法があります。これは、文字列ごとの余分なオーバーヘッドが(少なくとも)2つの文字列区切り文字ではなく、1文字のトークンの1つのコピーになるため、長さが言語依存のしきい値に達すると、必然的に配列リテラルよりも短くなります。

例:GolfScript

["Foo""Bar""Baz""Quux"]  # 23 chars

になる

"Foo
Bar
Baz
Quux"n/  # 20 chars

一部の言語では、しきい値は1つのストリングと同じくらい低くなっています。たとえば、Javaで、

new String[]{"Foo"}  // 19 chars

になる

"Foo".split("~")  // 16 chars

6
注目すべき例外はRubyです。Rubyは、2バイトのコストでスペースで自動的に分割する文字列の配列リテラルを提供します%w{Foo Bar Baz Quux}
マーティンエンダー14

1
Perlは同様のものを提供しqw(Foo Bar Baz Quux)ます。文字列のリストになります。
ベンゴールドバーグ

12

他の人が何をしたかを理解する

楽しいことに加えて、他の人のコードを調べると、思いもよらなかった良いアルゴリズムや、見落としがちなトリック(時には明白なアルゴリズム)を発見することがあります。

他の言語に翻訳して、他の言語の利点を活用できる既存の回答がある場合があります。


10

オペレーターの優先順位を知る

複数の式を組み合わせる場合は、言語の演算子優先順位表を確認して、括弧を保存するために順序を変更できるかどうかを確認してください。

例:

  • 私が知っているすべての言語では、ビット演算子はブール演算子よりも優先順位が高く (a&b)&&c、括弧を必要a&b&&c(a*b)+cしません。そうではありません。
  • a+(b<<c)として書き換えることができますa+b*2**c
    この例では何も保存されませんcが、小さな整数リテラル(<14)の場合は保存されます。
  • ビットごとの演算は、ほとんどの算術演算よりも低い優先順位を持っているので、あなたの言語が暗黙的にintにブール値をキャストした場合、あなたは上のバイトを保存することができますa<b&&c<da<b&c<d(あなたは短絡評価を必要としない場合)

7

短いforループ

forループ内にXステートメントがある場合、2番目のセミコロンの後にforループ内でステートメントを移動して、3バイトを節約できます。(コンマを使用してステートメントを分離します){}X-1()for(blah;blah;HERE),

の代わりに

for(int i=0;i<9;){s+=s.length();println(i++);}

ステートメントの一方をforループの(中括弧に)移動し、他方を除外することができます

for(int i=0;i<9;println(i++))s+=s.length();

そして3バイト節約します(@ETHProductionsのおかげでもう1バイト節約されました)


簡単に言えば、

の代わりに

for(blah;blah;){blah 1;blah 2;...;blah X}

あなたはこれで終わるので、文を移動します

for(blah;blah;blah 2,...,blah X)blah 1;

そして3バイト節約


@ETHproductionsゴルフのヒントをありがとう:)
Kritixi Lithos

forが最後のステートメントである場合は、;オプションになります
elipszilon

7

単項使用~のためにa-b-1a+b+1

→ に関する@Lynnの提案に加えて、そして→x+1-~xx-1~-x、ゴルフa-b-1やゴルフもできますa+b+1

a-b-1    // 5 bytes
a+~b     // 4 bytes

a+b+1    // 5 bytes
a-~b     // 4 bytes

それほど頻繁に使用しないヒントのように見えるかもしれませんが、使用する~x代わりに使用する-x-1ことはあまりありませんが、ここでは有用なヒントとして十分に使用しています。特に配列のインデックス付けでは、場合によっては上記を使用できます。


6

圧縮または/および縞

ands(またはors、この場合は単に 'all'を 'any'に置き換えてください)によって連鎖された条件の長い連なりを絞ろうとするときに思いついた簡単なトリック。

例えば:

if a>0 and a<10 and a+b==4 and a+3<1:

になる

if all([a>0,a<10,a+b==4,a+3<1]):

それはクールなものです、私はそれを試してみる必要があります!
確率論的14

4
どの言語にall(array-of-Booleans)組み込まれていますか?
ピーターテイラー14

3
Rubyにあります。[a>0,a<10,a+b==4,a+3<1].all?
カーニグ14年

4
これは、Pythonであれば、あなたのような何か使用していると思いますがif 10>a>0 and a+b==4>1>a+3:
SP3000

@PeterTaylor Haskellも
誇りに思っているhaskeller 14年

6

コンパイラに依存して、必要なパフォーマンスを提供します。

どの最適化がコンパイラによって保証され、どの最適化レベルで行われるかを確認し、それらを自由に使用してください。また、パフォーマンスが懸念事項ではない場合でも、最適化を有効にしてテストし、コンパイラフラグがなくてもコードは技術的に有効であるため、1文字のみを割引できます。

次のHaskell関数を考慮して2 ^ nを計算します(Haskellには既に1つまたは3つのべき乗演算子が組み込まれているという事実を無視します)(23文字):

p 0=1;p x=p(x-1)+p(x-1)

問題は-ものすごく遅い、指数関数的な時間で実行されることです。これにより、コードがテスト不能になったり、質問で指定されたパフォーマンスの制約が満たされないことがあります。関数の繰り返し呼び出し(25文字)を避けるために、一時変数またはすぐに呼び出される関数リテラルを使用したくなるかもしれません。

p 0=1;p x=(\y->y+y)$p$x-1

しかし、コンパイラは既にあなたのためにそれを行うことができます、あなたはただ-Oコンパイラフラグとして設定する必要があります!サイトごとに少数の余分な文字を費やして共通の部分式を手動で削除する代わりに、プログラム全体で合計1文字または2文字の基本的な最適化を行うようコンパイラーに指示します。


@ETHproductionsうん、すみません、そうしました
ジョン・ドヴォルザーク

最初の例だけではいけませんp(x-1)*2か?
チョイス

5

たぶん多少明らかですが...

演算子の戻り値を利用する

代入演算子は値を返すことに注意してください!

たとえば、yをxに追加し、xが何かより大きいかどうかを確認する場合は、次のようにします。

if(25<x+=y)

の代わりに

x+=y;if(x>25)

または、文字列をトリミングした後、文字列の長さを検索することもできます。

strlen(s=trim(s))

のではなく

s=trim(s);strlen(s)

通話内でどの言語で割り当てを行えますか?それともキーワード引数ですか?

2
割り当ては、少なくともC、C ++、C#、およびJavaの式(割り当てられた変数の新しい値を式の値とする)であると思います。a = (b=c)+1;に設定bc、次にに設定ab+1ます。
リン

試してみてください@Lynn a=1+b=c。また、PHPとJavaScriptをリストに追加できます。
タイタス

2
Rubyはこれを最大限に活用します。それは与えます=ので、オペレータに右よりも左に高い優先順位を1+x=2有効であると評価3
Cyoce

@Cyoce afaikそれは、割り当てが表現であるすべての言語でそうです。
タイタス

5

言語バージョン/コンパイラ/環境の癖/新機能を利用する

これは特に役立ちますが、他の課題にも適用できます。場合によっては、コンパイラのバグがバイトをたたき飛ばしたり、実装のバグがいくつかの文字を保存したり、本当に最先端の機能がスコアを改善したりすることがあります。


4

可能であれば、And / Orを使用して複数/ネストされたチェックを結合します。

すなわち:

if (a && (b || c)) {

}

の代わりに:

if (a) {
    if (b) {
        //Do Stuff
    } elseif (c) {
        //Do same stuff
    }
}

5
また、&より多くの文字を削除するには、bitty条件(、 `|)を使用します。
FUZxxl

2
場合によってはビット単位を使用して1文字&&&削除しますが、演算子の優先順位が台無しになり、機能させるために括弧を付ける必要があります。賢明に使用してください。
ドルAkshay

4

変数を初期化するより良い方法を見つける

他のいくつかの回答はすでにこれに言及していましたが、多くの(厳密に型付けされた?)言語では、次のxような空の文字列として初期化する方が短いです:

x:=""

または次のxような空のルーン(char)として:

x:=''

より

var x string

そして

var x rune

既存の値を使用することは明らかに推奨されますが、それほど簡単ではありません。

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