差別のないプログラミング


74

文字列の各文字が同じ回数、少なくとも2回現れる場合、文字列は非差別的であると言います。

  • "aa!1 1 !a !1"ある非識別文字の各ので !a13回表示されます。
  • "abbaabb"は、より頻繁に表示されるため、差別的ではありませんba
  • "abc"ない 非識別文字は、少なくとも2回表示されませんので。

仕事

書き込み非識別プログラムや関数戻りtruthy与えられた文字列である場合に値を非識別、およびfalsyそうでない場合、値を。

つまり、独自のソースコードで実行されるプログラムは、真の値を返す必要があります。

各送信は、印刷可能なASCIIを含む空でない文字列と、送信のソースコードに表示されるすべての文字を処理できる必要があります。

テストケース

真実:

<your program's source code>
"aaaa"
"aa!1 1 !a !1"
"aabbccddeeffgg"
"1Q!V_fSiA6Bri{|}tkDM]VjNJ=^_4(a&=?5oYa,1wh|R4YKU #9c!#Q T&f`:sm$@Xv-ugW<P)l}WP>F'jl3xmd'9Ie$MN;TrCBC/tZIL*G27byEn.g0kKhbR%>G-.5pHcL0)JZ`s:*[x2Sz68%v^Ho8+[e,{OAqn?3E<OFwX(;@yu]+z7/pdqUD"

偽物:

"a"
"abbaabb"
"abc"
"bQf6ScA5d:4_aJ)D]2*^Mv(E}Kb7o@]krevW?eT0FW;I|J:ix %9!3Fwm;*UZGH`8tV>gy1xX<S/OA7NtB'}c u'V$L,YlYp{#[..j&gTk8jp-6RlGUL#_<^0CCZKPQfD2%s)he-BMRu1n?qdi/!5q=wn$ora+X,POzzHNh=(4{m`39I|s[+E@&y>"

4
@Laikoniはコメントを悪用してこれを機能させることができますか?
魔法のタコ

6
補足として、他のエントリを使用してエントリの有効性をテストできるチャレンジが大好きです。
マジックタコ

3
@MagicOctopusUrn彼は許可されているサンドボックスで言ったと思います。それははっきりと判断できないからです。
エリックアウトゴルファー

11
まさに。なんとか客観的な方法でコメントを禁止できたとしても、未使用の文字列リテラルはどうですか?とにかく、採点はコメントを可能な限り避けるインセンティブを与えると思います。
ライコニ

4
私はそれがただのパズルだとは思いますが、「まったく同じ部分に存在するすべての識別可能なラベル付きメンバータイプ」と「非差別」の混同はやや気がかりです...不当にこれを行うとは、他のクラスの人々とは異なると見なすことに基づいて誰かを不当に扱い、判断することです。もちろん、楽しみながら続けてください!
エリック

回答:


37

Brachylog、10バイト

=ᵍbᵐbᵐlᵍ=l

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

説明

=ᵍ                Group all equal elements together
  bᵐbᵐ            Remove the first element of each group twice. This fails if
                  there are fewer than 2 elements
      lᵍ          Group elements together that have the same length
        =         Are all elements of that list equal? This only succeeds if the
                  list has one element
         l        Length. This will always succeed

25

Java 8、198 192 186 174 168 165 160バイト(char-count 6 5)

o->{byte x[]=new byte[+333-3|2],u=-0,i,fe,fi,w; s:w:no0r3sswwyyy:for(int s:o){{u=++x[s];}};for(int b:x){if(!!!(2>b||u==b)|2>u|2>2){x[0]++;}}return!!(0>--x[0]);}

オンラインでお試しください。
コードは、文字の出現を確認するために使用のための私の答えだった、この挑戦を

@OlivierGrégoireのおかげで、コメントを取り除いて混乱を招いた -5バイトのおかげです。;)

古い168バイト(char-count 6)の答え

o->{int w[]=new int[2222],u=0,f=0;for(int r:o)u=++w[r];for(int e:w)if(!(2>e|u==e)|2>u)f++;return!(f>0);}//[[[]]]  !!!!e(i)++,,,,-----oo////000tuww::::{{{{{;;||||}}}}}>>

オンラインでお試しください。
コードは、コメントを除く文字の出現を確認するために使用のための私の答えだった、この挑戦を

チェックをに交換して削除する@OliverGrégoireのおかげで-6バイト。<>

基本的なゴルフプログラムの説明(98バイト):
オンラインで試してください。

s->{                     // Method with character-array parameter and boolean return-type
  int a[]=new int[256],  //  Occurrences integer-array containing 256 zeroes
      t=0,               //  Temp integer, starting at 0
      f=0;               //  Flag integer, starting at 0
  for(int c:s)           //  Loop over the input
    t=++a[c];            //   Increase the occurrence-counter of the current character
                         //   And set the temp integer to this value
  for(int i:a)           //  Loop over the integer-array
    if(i>1               //   If the value is filled (not 0) and at least 2,
       &i!=t             //   and it's not equal to the temp integer
       |t<2)             //   Or the temp integer is lower than 2
      f++;               //    Increase the flag-integer by 1
  return f<1;}           //  Return whether the flag integer is still 0

使用する文字数を減らすために私がしたこと:

  • 変数名owufr、とe我々はすでに持っていた再利用に目的の文字に選ばれた(ただし、6を超えない)されました。
  • 2222の代わりに使用されます256
  • if-check e>0&u!=e|u<2!(e<2|u==e)|u<26xを削除するように変更しました&
  • 2つの区切られた戻り値を削除してflagを使用fし、最後にまだ0であるかどうかを返します(これは、8の代わりに6回しか使用しないため、6x byを削除できることを意味しbyteます)。nint
  • e<2u<2変更し2>e2>u6xを削除し<ます。

char-countを6から5に減らすためにしたこと:

  • 2倍intbyteすると、n使用量は6ではなく4になります。
  • 使用x[0]代わりに新しい変数のf=0量ので、=使用は5ではなく6です。
  • 使用量が6ではなく2になるように変更さ2222れまし33332
  • 変数fを変更し、r再び6でもないようにしました。

@OlivierGrégoireがコメントを削除するためにしたこと、したがって5x /

  • 未使用の変数を追加します,i,fe,fi,w;
  • 未使用ラベルの追加:s:w:no0r3sswwyyy:
  • 未使用の追加 |2>2
  • 追加{}用のループとIFSの周りに、未使用の追加{}-ブロックを。
  • に変更!!!!ます。
  • に変更|||ます。
  • に変更333+333-3|2て、残りの算術演算子+-|2
  • に変更!(x[0]>0)!!(0>--x[0])ます。

1
180バイト:すべてが<に変更されました>
オリビエグレゴワール

@OlivierGrégoire申し訳ありませんが、私はすでに174です:)しかし、あなたのトリックがまだ適用できるかどうかを確認します。
ケビンクルーッセン

6バイトを節約するために変更を適用できます。
オリビエグレゴワール

一番近いのは162文字(161文字)です。コメントを削除しようとしていますが、まだどこかにコンマを入れる必要があります。場所が見つかりません。
オリビエグレゴワール

1
160バイト証拠)。ゴルファーになる可能性が非常に高い。
オリビエグレゴワール

15

ゼリー18 16 12 10バイト

Ġ¬zḊḊ¬zĠȦȦ

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

使い方

Ġ¬zḊḊ¬zĠȦȦ  Main link. Argument: s (string)

Ġ           Group the indices of s by their corresponding elements.
            "abcba" -> [[1, 5], [2, 4], [3]]

 ¬          Take the logical NOT of each 1-based(!) index.
            [[1, 5], [2, 4], [3]] -> [[0, 0], [0, 0], [0]]

   Ḋ        Dequeue; yield s without its fist element.
            "abcba" -> "bcba"

  z         Zip-longest; zip the elements of the array to the left, using the
            string to the right as filler.
            ([[0, 0], [0, 0], [0]], "bcba") -> [[0, 0, 0], [0, 0, "bcba"]]

    Ḋ       Dequeue; remove the first array of the result.
            This yields an empty array if s does not contain duplicates.
            [[0, 0, 0], [0, 0, "bcba"]] -> [[0, 0, "bcba"]]

    ¬       Take the logical NOT of all zeros and characters.
            [[0, 0, "bcba"]] -> [[1, 1, [0, 0, 0, 0]]]

      Ġ     Group.

     z      Zip-longest. Since all arrays in the result to the left have the same
            number of elements, this is just a regular zip.
            [[1, 1, [0, 0, 0, 0]]] -> [[1], [1], [[0, 0, 0, 0]]

       Ȧ    Any and all; test if the result is non-empty and contains no zeroes,
            at any depth. Yield 1 if so, 0 if not.
            [[1], [1], [[0, 0, 0, 0]] -> 0

        Ȧ   Any and all.
            0 -> 0

13

Brachylog14 12バイト

ọtᵐℕ₂ᵐ==tℕ₂ọ

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

説明

ọ   Occurrences. Gives a list of [char, count] pairs for the entire input.
tᵐ  Map "tail" over this list, giving each character count.
ℕ₂ᵐ Make sure that each count is at least 2.
=   Make sure that all counts are equal.
    At this point we're done with the actual code, but we need another copy
    of each character (except ᵐ). We can just put them after this, as long as
    we make sure that they can never cause the predicate to fail.
=   Make sure that all counts are equal, again...
t   Extract the last count.
ℕ₂  Make sure that it's at least 2, again...
ọ   Get the digit occurrences in that count, this can't fail.

t代わりに再利用する代替の12バイトソリューション

ọtᵐ==tℕ₂ℕ₂ọᵐ

13

T-SQL、320バイト(32文字x各10)

入力は、既存のテーブルを介しているFILLvarchar型のフィールドでSTEW私たちのIO規格ごと

WITH BUMPF AS(SeLeCT GYP=1
UNION ALL
SeLeCT GYP+1FROM BUMPF
WHeRe GYP<=1000)SeLeCT
IIF(MIN(WAXBY)<MAX(WAXBY)OR
MAX(WAXBY)<=1,+0,+1)FROM(SeLeCT
WAXBY=COUNT(1),WHICH=+1+0,HEXCHANGE=+01,HUNG=+0+1,CHLUB=+0,GEFF=+0FROM
BUMPF,FILL WHERE
GYP<=LEN(STEW)GROUP BY
SUBSTRING(STEW,GYP,1))CHEXX
OPTION(MAXRECURSION 0)----------<<<<<<

私はこれまでコードの一部にこれほど満足したことはありませんでしたが、恐ろしくなりました。

大文字と小文字を区別する照合に設定されたサーバーまたはデータベースで実行する必要があります。大文字と小文字E(SQLコマンドは大文字と小文字を区別しないため、必要に応じていくつか反転します)、スペースとタブ(読みやすくするために、上記のコードではタブを改行として示しています)を含む32の異なる文字がそれぞれ10個あります。

+ = ,コードに他の各シンボルを10個含める方法を見つけましたが、残念ながらそれを行う方法を見つけることができなかったため<、コメント文字を追加する必要がありました-

すべての追加のフィラーを詰め込む前のフォーマットされたコードは次のとおりです。

WITH b AS (SELECT g=1 UNION ALL SELECT g+1 FROM b WHERE g<1000)
SELECT IIF(MIN(w)<MAX(w) OR MAX(w)<1+1,0,1)
FROM(
    SELECT w=COUNT(1), --extra constant fields here are ignored
    FROM b, fill
    WHERE g < 1+LEN(stew)
    GROUP BY SUBSTRING(stew,g,1)
)a OPTION(MAXRECURSION 0)

一番上の行は数値Cを生成する再帰CTEでb、これをソース文字列に結合して文字で区切ります。これらの文字はグループ化されてカウントされ、IIFステートメントは、入力文字列が無差別かどうかに応じて0または1を返します。


11

C(gcc) 333  168バイト

9バイトを節約してくれた@Kevin Cruijssenと45バイトを節約してくれた@Laikoniに感謝します!

f(r,h,a){char*o=r,c[222]={!o};for(a=!o;*o;)++c[*o++];for(h=!o;222/++h;c[h]&&c[h]!=a&&(a=!*c))!a&&c[h]&&(a=c[h]);r=!(2/2/a);}/////!(())****++,,,,,[[]]fffffrr{{{{{{}}}}}}

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

C、333バイト

i,v;f(S){char*s=S,L[128]={0};for(v=0;*s;)++L[*s++];for(i=-1;++i<128;L[i]&&L[i]-v?v=-1:0)!v&&L[i]?v=L[i]:0;return-v<-1;}/////////!!!!!!!!&&&&&(((((())))))******+++,,,,,,,----00000111122222228888888:::::::<<<<<<<===???????LLLSSSSSSS[[[]]]aaaaaaaacccccccceeeeeeeeffffffhhhhhhhhiinnnnnnnnooooooorrrrssssssttttttttuuuuuuuuvv{{{{{{{}}}}}}}

バイトカウントでさえ差別的ではありません!

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


ああ...最初のコメント乱用者になりたかった。良いことですが、コメントの文字を並べ替える方法が好きです^ _ ^
マジックタコ

1
両方のtoを変更してドロップできるように、324バイトに下げることができます。1282228
ケビンクルーッセン

1
名前を変更することにより279バイトivSsおよびLすでにキーワードで表示された文字にcharforそしてreturnオンラインそれをお試しください!
ライコニ

@ライコニありがとう!昨日これをきちんとゴルフする時間がなかった。
Steadybox

@MagicOctopusUrnそれらは私が手で追加するのが面倒だったのでソートされています。
Steadybox

9

05AB1E20 18 16 14バイト

S¢Z≠sË*sZ¢≠SË*

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

プログラムは基本的に2つの部分に分かれており、最初の部分の目標は実際のタスクを実行することであり、2番目の部分の目標は結果を変更せずに最初の部分と同じ機能を使用することです。

説明(前編)

S          # push input split into list of chars
 ¢         # count the occurrence of each char in input
  Z≠       # check that the max count is not 1
    sË     # check if all counts are equal
      *    # multiply

説明(2番目の部分)

s          # swap input to top of stack
 Z¢        # count the number of occurrences of the largest element
   ≠       # check that the count isn't 1
    SË     # split into list and check that each element are equal (always true)
      *    # multiply (as it is with 1, the original result is left unchanged)

{γ€gDË*P≠qq{γ€gDË*P≠20の別の;)。
魔法のタコ

1
@MagicOctopusUrn:いいね!私も20歳で数人いた。私も18歳になりました:)
エミグナ

2
魔術!他の説明はありません!
魔法のタコ

1
¢...良いアイデアの人、また、私はそれが母かもしれないと思ったのと同じくらい便利だったことを見てうれしいです!
魔法のタコ

9

、14バイト

§<ε#εu§m#u
m
<

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

説明

メイン関数はそれらを呼び出さないため、2つの短い行はノーオペレーションです。

§<ε#εu§m#u  Implicit input, say S = "asasdd"
         u  Remove duplicates: "asd"
      §m#   For each, get number of occurrences in S: [2,2,2]
     u      Remove duplicates: L = [2]
   #ε       Number of elements in L that are at most 1: 0
  ε         1 if L is a singleton, 0 otherwise: 1
§<          Is the former value smaller than the latter?

しかし、これは「m」よりも「u」が多いため、要件を満たしていません。
WGroleau

@WGroleau mも2回発生します。最初の行と2番目の行です。説明には、プログラムの動作に影響を与えないため、2つの短い行は含まれていません。
ズガルブ

OPは、プログラムの説明をプログラムと共にスキャンできるかどうかを明確にする必要があると思いますが、実際には、それを含めると4つの「u」と2つの「m」があります
-WGroleau

気にしないで; これは、別の答えと同じように私を混乱させました。
WGroleau

9

パイソン275の 69バイト

def f(s):len({2<<s.count(c)-2for c,in s})<2or{{e.dil:-tu,r.dil:-tu,}}

出力は、エラーの有無によって行われます。エラーは、ValueError(1つ以上の文字が1回だけ発生する)またはNameError(文字カウントが等しくない)のいずれかです。

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


負のシフトエラートリックはすてきです!シフト演算子の優先順位が低いことを活用する方法が気に入っています。
ビンセント

1
{{e.dil:-tu,r.dil:-tu,}} それは何ですか?
アダムバーンズ

1
@AdamBarnes 評価された場合にNameErrorをスローする構文的に有効な意味不明な。
デニス

わかりません。私はそれを交換しようとしましたがa、すべてが壊れました。さらに説明してください。
アダムバーンズ

@AdamBarnesこれは、or。コンピューターにいるときに説明を追加します。
デニス

9

Brachylog v2、8バイト(Brachylogの文字セット内)

oḅ\k\koḅ

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

Brachylogでこの質問にゴルフ戦争が起こっているように見えるので、私は参加して、次のベストアンサーよりも数バイト節約したいと思いました。

これは、文字コードのリストとして入力を受け取る完全なプログラムです。(これは、一部にはBrachylogに文字列のバックスラッシュに関連する非常に奇妙なバグがあるように見えることと、一部\は文字列のリストに対してコマンドが機能しないためです。)

説明

oḅ\k\koḅ
o          Sort {standard input}
 ḅ         Group identical adjacent values
  \        Assert rectangular; if it is, swap rows and columns
   k       Delete last element
    \      Assert rectangular; (rest of the program is irrelevant)

koḅ終了時には無関係です。kいつもに作用する要素を持ち、oかつ入力としてリスト与えられた場合に失敗することはできません。

開始の理由はoḅ明確でなければなりません。入力リストを値で分割します。たとえば[1,2,1,2,4,1]になり[[1,1,1],[2,2],[4]]ます。各文字が同じ回数表示されるためには、これらのリストはそれぞれ同じ長さでなければなりません。つまり、結果のリストは長方形になります。を使用してこの長方形性をアサートでき\ます。これは、副作用として行と列を転置します。

これで、入力が[4,2,1,2,4,1]現在の値だった場合など、文字セットの複数のコピーで構成される現在の値ができました[[1,2,4],[1,2,4]]。コピーを削除しても、結果のマトリックスは長方形のままなので、を使用して元に戻すことができます\。ただし、マトリックスが長方形である理由が、すべての入力文字が別個であるためである場合、結果のマトリックスには要素が残って\おら、「0×0」マトリックスを長方形として扱いませ(むしろ失敗します)。したがってoḅ\k\、入力に現れる各文字が同じ回数出現し、その回数が1ではないことを効果的にアサートします。

これがプログラムの機能全体です(完全なプログラムとして、trueアサーションエラーが発生しfalseなかった場合は発生します)。我々は、しかし、元のレイアウト制限に従わなければならないのですので、私は追加の追加koḅなし目的を持っていませんが(とは違って失敗することはできませんもの\oそして空のリストに作用させていただきますが)。




7

JavaScript(Node.js)144 ... 100 96バイト

o=>!(a=o.split``.map(i=>o.split(i||aeehhhlmmnnnpst)[`length`]-1)).some(g=>![g>1][-!1]||a[-!1]-g)

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

24種類の文字*各6回

28種類の文字*各5回

27種類の文字*各5回

27種類の文字*各4回

26種類の文字*各4回

25種類の文字*各4回

24種類の文字*各4回

説明

o=>!(
 a=o.split``.map(                            // Split the input into character array and
  i=>o.split(i||aeehhhlmmnnnpst)[`length`]-1 // count the occurrences of each character.
 )
).some(                                      // Then check
 g=>![g>1][-!1]                              // If each character appears at least twice
 ||a[-!1]-g                                  // and the counts are all the same number.
)                                            

More to add:
1. Using {s.split``} instead of {[...s]} is to reduce the number of {.} that dominates
   the count.
2. Using {!c.some} instead of {c.every} to reduce the number of inefficient characters 
   (v,r,y in every)
3. Still one unavoidable inefficient character left ({h}).

Update:
1. Got rid of one {.} by replacing {.length} by {["length"]}.
2. Got rid of one {=} by replacing {c[-!1]!=g} by {c[-!1]-g}.
3. Got rid of one {()} by replacing {!(g>1)} by {![g>1][-!1]}.
4. Finally, because count per character is now 4, the backslashes can be taken out.

Update:
1. Got rid of all {"} by replacing {"length"} by {`length`} and exploiting shortcut
   evaluation. 
   {aaaeehhhlmmnnnpst} is not defined but is not evaluated either because of {c} which
   must be evaluated to true.

Update:
1. Got rid of all {c} by shortcutting the undefined variable at {split(i)} and replacing 
   all {c} by {a}.
   Since {i} is never an empty string, it is always evaluated true (except compared 
   directly to true).

Update:
1. Got rid of all {,} by moving the assignment after the argument list. The {()} at the
   front can therefore be moved to the assignment, retaining same number of {()}s.

6

PowerShell、104バイト

($qe=$args[0]| group |sort count|% count)[0]-eq$qe[-1]-and$qe[0]-gt1####((()))%%%pppddd===aaccss11nu|0gr

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

これはゴルフにとても楽しかったです。制限は$であり、少なくとも4つ(入力$args用、計算結果の割り当て$qe用、最後の文字の$qe[-1]チェック用、最初の文字のチェック用に1つ$qe[0])が必要でした。

そこから、4で割り切れるプログラムを取得することは、ゴルフの問題(2文字の変数名を持つようなゴルフではない)でした。#不足している要素を説明するために小さなコメント(に続くすべて)があることに注意してください。ただし、コメントはできるだけ小さくするようにしました。


6

Haskell、90 75 72バイト

a[i]|d:n<-[[i|n<-i,n==a]|a<-i]=and[[i]<d,[d|i<-n]==n]--aadd,,,,:::::<=||

各文字は6回表示されます。入力文字列はシングルトンリストとして取得されます

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

参考のために、古いバージョン:

75バイト、各文字5回

n(l)|d<-[[0|n<-l,n==a]|a<-l]=and[[0]<d!!0,all(==d!!0)d]--an!((())),,,0<[]||

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

90バイト、各文字3回:

a x|h:u<-[sum[1|d<-x,not(d/=c)]|c<-x],"  \"\\&,../1::>acdlmmnosst">[]=h>1&&all(not.(/=h))u

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


6

パイソン2108の 104 92 88バイト

Rodのおかげで-12バイトKevin Cruijssenの
おかげで-4バイト

s=input();c=s.count;print[all(c(s[[]>[1]])==c(o)>1. for o in s)];aaafffillpprrtuu>1.>1.;

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


1
あなたのプログラムは無差別でなければなりません。
user202729

1
プログラム自体は無差別でなければなりません。
ハイパーニュートリノ

@ user202729教えてくれてありがとう、答えを更新しました。
ovs



6

MATL、12バイト

q&=sqt&=tsvv

入力は、単一引用符で囲まれた文字列です。文字列内の単一引用符は、複製によってエスケープされます。

出力され、空でない行列であるtruthyそれはゼロを含まない場合、及びあるfalsy、少なくともゼロを含む場合。

オンラインでお試しください!または、便宜上、標準の真偽/偽造テストを含むすべてのテストケースを検証します。

使い方

でマークされたステートメント(*)は、必要でも有害でもなく、ソースコードを差別しないようにするためだけに含まれています。

q     % Implicit input. Convert chars to code points and subtract 1 from each (*)
&=    % Square matrix of all pairwise equality comparisons
s     % Sum of each column. Gives a row vector
q     % Subtract 1 from each value. An entry equal to 0 indicates the input string
      % is discriminating because some character appears only once
t     % Duplicate
&=    % Square matrix of all pairwise equality comparisons. An entry equal to 0
      % indicates the input string is discriminating because some character is
      % more repeated than some other
t     % Duplicate (*)
s     % Sum of each column (*) (all those sums will be positive if the previous
      % matrix doesn't contain zeros)
v     % Vertically concatenate the matrix and the vector of its column sums
v     % Vertically concatenate the resulting matrix with nothing (*)
      % Implicit display


5

R、90バイト

"?"=`u\164f8ToI\x6Et`;'!'=prod;!{y<-xtabs(~?readLines())}%in%{z<-y[1]}&z>T##&[]>~48bEfILpu

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

TRUE非識別文字列および識別文字列の出力FALSE。私はこのサイトでチャレンジのために多くのいコードを書きましたが、これはこれまでで最もuいものだと思います。

45文字、それぞれ2回使用(コメント内の一部を含む)。以前のベストR回答は116バイトで、29文字がそれぞれ4回使用されていました。これは実質的に異なるため、個別に投稿しています。

コードは次と同等です

y = table(utf8ToInt(readLines()))
z = y[1]
all(y == z) & (z > 1)

入力を整数のベクトルに変換し、値の分割表yを計算してから、その表のすべてのカウントが最初のカウントと等しく、最初のカウントが1より大きいことを確認します。

最初の問題は、2組のブラケットのみを使用することでした。これは単項関数を再定義することによって達成される!?するutf8ToIntprod、それぞれ。(私はがall必要なので使用できませんa)。4つの割り当てがあります。2つのwith =と2つのwith <-です。これは、それとの間の平等のテストを意味yしてz使用することはできませんy==zy-zy%in%z救助に来ます。

これらの関数を定義すると、可能なすべての引用符が使用されます。2つの二重引用符、2つの単一引用符、および次の段落で2つの逆引用符が必要になるため、のreadLines()代わりに使用する必要がありましたscan(,"")。(scan(,letters)またはその他scan(,month.abb)すべてのオプションは、t 私がaしみない貴重なものを使用しました。)

この時点で、私は、ビルディングブロックのほとんどを持っていました:utf8ToIntprodtablereadLines%in%。これらの名前には3つの文字が3回出現しますent。最初に、table(foo)がに相当することを発見しましxtabs(~foo)e。16進数/ 8進数のコードトリックを使用して、nおよびをレスキューできます。最もゴルファーの解決策は、(バックティックで)を使用することです。tu\164f8ToI\x6Etutf8ToInt


90バイトで2つのケースを区別することができます(そしてヘルプ演算子のいい悪用)ことができますが、悲しいかなNA、真実の値とはみなされません(Rでは、if(NA)x else yはエラーを引き起こすのでNA、真実でも偽でもありません)
JDL

1
@JDLありがとう、あなたは正しい。最新の編集でこの問題は修正されています。
ロビンライダー

1
@JDLのコメントは、一貫性のある明確な答えが真実であり、虚偽であっても問題ないことを示唆しています。
ジュゼッペ

@Giuseppe実際、私は数秒前にこの問題を解決しました(まったく異なるが同じバイト数の新しいバージョンを参照してください)。TRUEとFALSEを出力するようになりました。
ロビンライダー

4

Brachylog、18バイト

oḅlᵐ=h≥2
oḅlᵐ=h≥2

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

残念ながら、数字で失敗をトリガーするため、改行を削除できません。


改行を必要としないより短いものを実行することは間違いなく可能です(ただし、いくつかの変更が必要な場合があります);)
18年

@Fatalize現在のところ時間はありません。はい、その議論を読みました。:)
エリック・ザ・アウトゴルファー


3

R、132 116バイト

crudcardounenforceableuploads<-function(b){{pi&&pi[[1-!1]];;;"";{1<{f<<-table(strsplit(b,"",,,)[[1]])}}&&!!!sd(-f)}}

コメントや余分な文字列も含まれていませんが、おそらくこれが関数を呼び出すコードゴルフでの唯一の時間になるでしょうcrudcardounenforceableuploadsおそらく、関数名のどこかに素晴らしいアナグラムがあります!名前に使用した素敵なアナグラムソルバーを指摘してくれたJohn Dvorakに感謝します。

キャラクターテーブル:

- , ; ! " ( ) [ ] { } & < 1 a b c d e f i l n o p r s t u 
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

例:

> crudcardounenforceableuploads("aaabbbccc")
[1] TRUE
> crudcardounenforceableuploads("aaabbbcc")
[1] FALSE
> crudcardounenforceableuploads("abc")
[1] FALSE
> crudcardounenforceableuploads("crudcardounenforceableuploads<-function(b){{pi&&pi[[1-!1]];;;\"\";{1<{f<<-table(strsplit(b,\"\",,,)[[1]])}}&&!!!sd(-f)}}")
[1] TRUE

バイトカウントが重要であるかどうかはわかりませんが>、との比較を切り替えることで、おそらく2とsを削除できfます。の=代わりに使用することもできます<<-strsplitただし、他のほとんどのキャラクターのソースである、おそらく避けられないでしょう。
JDL

スペースが必要ですか?のutf8ToInt代わりに試すこともできますがstrsplit、それが役立つかどうかはわかりません。また、TIOへのリンクを含めることもできますか?
ジュゼッペ

また、すべて.が余計なようです。
ジュゼッペ

これはcode-golfなので、コメントごとにバイト数が重要です。
ジュゼッペ

2
可能性のあるアナグラム:pip-bonded食器棚の官僚主義なし; RIP炭質バーベキューポンドディップ。使用して見つかったwordplays.com/anagrammer
ジョン・ドヴォルザーク

2

BASH 144バイト

grep -o .|sort|uniq -c|awk '{s=$1}{e[s]=1}END{print((s>1)*(length(e)==1))}##>>>#|'#wwwuuutrqqqppooNNNnlllkkkiihhhggEEEDDDcccaaa1***{}[[[]]]...--''

このコード行は、入力としてstdin文字列を取ります。「grep -o」各文字を新しい行に配置します。「uniq -c」は、各キャラクターの使用状況をカウントします。awkスクリプトは、各使用法を異なる要素として配列を作成し、配列インデックスが1つのみで値が2以上の場合にtrueを出力します。各文字は4回使用されるため、このソースはtrueを返します


2

スタックス26 24 18バイト

:u{m*_{y#m:u_hy#h*

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

これまでの最短のソリューションは、MATLにBeatられた印刷可能なASCIIのみを使用します。

間違った方法で問題に近づいていたと思います。作業ブロックを繰り返すことは、ゴルフ好きでも面白くもない。今、少なくともそれは良く見えます...

説明

:u{m* 出力に影響しないごみを生成します。

_{y#m:u_hy#h*
_{y#m           map each character to its number of occurences in the string
     :u         all counts are equal (result 1)
       _hy#     get the count of appearance for the first character
           h    halve it and take the floor, so that 1 becomes 0(result 2)
            *   multiply the two results

@WGroleauどの文字が一度表示されますか?私の答えを十分に注意深く読みましたか?
ウェイジュン周

「#」は「:」よりも頻繁に表示されます(1つの例)。おっと、誤読(他のコメントを参照)
WGroleau

ちょうど二つあります@WGroleau #年代と2つの:sは、あなたは、2行目私の答えを読みましたか?「説明」の最初の段落をスキップしましたか?
ウェイジュン周

申し訳ありませんが、説明の上の行がすべてだと思いました。
WGroleau

1

ピップ、22バイト

I1&MY$=_Y_NaMa$=y&1NIy

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

説明

各文字は2回出現します。

                        a is first command-line argument
I1&MY$=_                No-ops to make the program non-discriminating
            Ma          Map this function to the characters of a:
         _Na             Count occurrences of each character in a
        Y               Yank the result into y
              $=y       Fold y on equals: truthy if all elements are equal
                 &      Logical and
                  1NIy  1 is not in y
                        Autoprint the result of the last expression

ノーオペレーションの少ない代替22バイトバージョン:

$&MY_Y_NaMa$=y&--1=1Ny

1

SmileBASIC、164 152 148 140バイト

DeF M(X)DIM W[#R]WHILE""<X
INC w[ASC(x)]X[n]=""wEND
FOR F=e#TO--nOT-LEN(W)U=w[F]H=H||U&&U<MAx(W)neXT-!!!AASSS#&&Oxx||CCLL<<wIM#
RETURN!H
enD

35種類のキャラクター、それぞれ4回繰り返されます。

コメントは使用されませんでした(ただし、後の式neXTは実際には評価されません)

回答を確認するスクリプト:


1

網膜0.8.2168の 90バイト

falseの場合、出力は空になり、trueの場合、空ではありません。

***???;;;;```!!$$$$MMMMOOOO..1111ssss222{{{{\^^^^

s;{O`.
M!*\`^((.)\2(?!\2))*$
(.)(?!\1)

オンラインで試す

コアプログラム(39バイト)

s;{O`.
M!*\`^((.)\2(?!\2))*$
(.)(?!\1)

説明

コアプログラム全体がサイレントループになっています。最初の段階では、入力をソートします。2番目のステージは、異なる文字の連続したペアで構成される場合、現在の文字列を印刷します。3番目の段階では、すべての文字の最後の出現を削除します(文字列内の各文字の1つを削除します)。

上部のジャンクについて:順序は重要です。構文的に有効である必要があることに加えて、セミコロン*は、構成文字列内にある限り、アスタリスクの後、バックティックの前にある必要があります。


いいですね、私の答えは短くなりますが、出力として0/1に固定されるかどうかよくわからないので、役立つ場合はここに追加します:tio.run
-FryAmTheEggman

@FryAmTheEggman同じ長さの文字グループをすべて連続して一致させるための純粋な正規表現ソリューションを探していましたが、それを理解できませんでした。
mbomb007

@FryAmTheEggman大幅に改善されました!私はあなたが持っていたものを実際には使用しませんでしたが、より良い方法を考えようとゼロから始めました。
mbomb007

うまくできました!そして、私は私のプログラムについて十分に考えていなかったようですが、少なくともあなたはより良いものを見つけました:)
FryAmTheEggman


1

Pyth、30バイト

  "&8<MQSlqr{"&q1lJ{hMrSz8<1hJ

先行スペースが必要です。

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

実際のプログラムはただ&q1lJ{hMrSz8<1hJです。文字列"&8<MQSlqr{"を先頭に追加して、区別しないようにしました。しかし、文字列自体を印刷しないようにするには、スペースを追加する必要があったため、2つのスペースを追加しました。

&q1lJ{hMrSz8<1hJ

 q1l                (1 == len(
    J{                  J = deduplicate(
      hM                  map(lambda a: a[0],
        r  8                length_encode(
         Sz                   sorted(input())
                            )
                          )
                        )
                    )
&                     and
            <1hJ    (1 < J[0])

length_encodeここで(r <any> 8)はシーケンスを取り、同じ文字の各実行の長さを出力します。"aaabbcc"になり[[3, "a"], [2, "b"], [2, "c"]]ます。

そのため、これは入力を受け取り、それをソートして長さエンコードを行い、結果リストの各リストの最初の要素を取ります(たとえば、前の例はになります[3, 2, 2])。これにより、文字の出現回数がカウントされます。その後、重複排除され(前の例はになります[3, 2])、Jはそれに設定されます。

次に、長さが1であるかどうか、つまり、文字が発生する一意の回数が1回だけであるかどうか、および1より大きい場合、つまり2以上であるかどうかをチェックします。

そこ置き換えるために、内蔵のかもしれませんrSz8か、hMrSz8しかし、私は1つを見つけることができません。


1

C(gcc)、153バイト

f(h,a,c,f){{{{{{{char*o=f=h,*r;for(a=!h;*o;o++){for(c=!h,r=h;*r;c+=!(*r++^*o)){}f*=!!(c^!!h)*(!a+!(a^c));a=c;}(a^c^c^f^f^h)+o,a+r,o,o,+h^*r;(a=f);}}}}}}}

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

文字列のアドレスを真実の値として返し、ゼロを偽として返します。

f(
h,                              Address of string.
a,                              # instances of previous character
c,                              # instances of current character
f                               Return value
){{{{{{{                        
char*o=f=h,*r;                  Point o to string, while giving f a non-zero value.
for(a=!h;*o;o++){               Set previous char count to 0, and then traverse the string.
for(c=!h,r=h;*r;                Set current char count to 0 and r to string,
                                and start counting instances of current character.
c+=!(*r++^*o))                  Add to counter if current character matches.
{}                              Lower the amount of semi-colons
f*=                             Multiply (AND) return value with:
   !!(c^!!h)                    Is current count not 1? (Must be 2 or above.)
            *(!a+!(a^c));       AND, is previous count valid (meaning this is not the first
                                character counted), and matches current count?
a=c;}                           Previous count = current count.
(a^c^c^f^f^h)+o,a+r,o,o,+h^*r;  Spend surplus characters to make source code valid.
(a=f);}}}}}}}                   Return value.

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