コッツを送ってください!


8

モデレーターと編集者への注意:この投稿のタイトルは有効であり、変更しないでください。スペルミスは意図的なものであり、課題の一部です。

バックストーリー

(ステレオ)典型的な悪いSOの質問は、「plz send teh codez!」の流れに沿って何かを尋ねます。言い換えれば、それは誰かに依頼者のために仕事をして、一度きりの問題に対する完全な解決策を提供するように頼みます。Meta.SEでこの質問を引用します。

...特定のカテゴリーの質問についての調査であり、調査や努力は一切必要ありません。問題の完全な解決策を求めるだけです。これらのタイプの質問は、一般にStack Overflowが無料のコーディングサービスであると想定する傾向があります...

では、実際の課題は何ですか?それは簡単です:

プログラムまたは関数などは、入力を文字列(STDIN、パラメーターなどから)として受け取る必要があり、文字列にPlz send teh codez!出力が含まれている場合-1 flag comment(反対投票、オフトピックとしてフラグを付け、質問の悪さについてのコメント)。それ以外の場合は出力+1(あなたは賛成しています)。

しかし、待ってください…もっとあります!

プログラムに、以下の文字セットを5つ以上含めることはできません

  • すべての特殊文字(スペース、改行(0x0a)、大文字と小文字を区別しないアルファベット、数字以外)
  • 任意の数字(0-9)
  • いずれかpzcm(大文字と小文字を区別しない)
  • いずれかhten(大文字と小文字を区別しない)
  • のいずれか qwryuioasdfgjklxvb
  • のいずれか QWRYUIOASDFGJKLXVB

明確にするために、使用できる文字セットは4つまでです。

スペース、タブ、改行は一切制限されていませんが、バイト数には含まれています

最終的な制限

プログラムには、(スペース)から(〜)の範囲のUnicode のみ、および(LF改行)と(タブ)を含める必要があります。これは、コードゴルフ言語を除外し、伝統的な言語に変化を与えるか、少なくとも競技場を平準化するためです。0x200x7e0x0a0x09

ノート:

  • これはであり、バイト単位の最短の回答が勝ちます!
  • 入力は、STDIN、関数パラメーター、コマンドラインパラメーターなどから取得できますが、変数からは取得できません
  • 出力は、STDOUT、関数の戻り値、またはエラー/例外である可能性があります。末尾に改行を含めることができます。
  • この課題は、高度なUnicode文字を除外することにより、多くのゴルフ言語を禁止しているため、伝統的な言語の競争が奨励されています。Cは勝つチャンスさえ持っているかもしれません!
  • 質問は?以下のコメント!

難しすぎると…

回答の文字セットは無視できますが、その場合は競合しなくなります。

注:最大4つの文字セットを使用できるようになりました。どういたしまして。

このスニペットを使用して、コードが有効かどうかを確認できます。

回答:


3

CJam50 49 48バイト

q"Plz send teh codez!"#)"- flag comment""+"?(T)@

数字や大文字のセットは使用しません。

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

説明

q                       e# Push the input
"Plz send teh codez!"#  e# Find index of "Plz send teh codez!" in the input (-1 if not found)
)                       e# Increment the index
                        e# Check the truthiness of the index:
 "- flag comment"       e#   If truthy (i.e. it appeared in the input), push this string
 "+"                    e#   If falsy (it wasn't in the input), push this string
?                       e# 
(                       e# Uncons from left, removes the first character of the string and 
                        e#  pushes it on the stack
T)                      e# Push 0, and increment it to 1
@                       e# Bring third-from-top stack element to the top
                        e# Implicit output of stack contents

11

JavaScript(ES6)、60バイト

x=>/Plz send teh codez!/.test(x)?~x+' flag comment':'+'+-~[]

1どこでも使用しないようにする以外は、すべてが簡単でした。私が使用し~x得るために-1(場合以来x含まれPlz send teh codez!、それが有効な数値ではありませんので、~x与える-1)、および-~[]取得するために1(場合ので、x例えばある'7'-~xとなります8私たちが頼ることができないので、x)。

テストスニペット


JSFuckロジックの悪用がいい!
Matthew Roh

9

JS(JSFuck)、37959バイト

PPCGは長いコードを嫌うので、ここに要点があります。

特殊文字のみを使用します。:P

元のコードは以下のとおりです。

alert(prompt().includes("Plz send teh codez!")?"-1 flag comment":"+1")

Pを大文字にしていませんでした;)
darrylyeo

@darryleoあるはずです。
Matthew Roh

PはPlz send teh codez!、という意味です。
darrylyeo

ああ待って今zは間違っています。facepalm
Matthew Roh


4

網膜、56バイト

(?!.*Plz send teh codez).+

.+
-$#+ flag comment
^$
+$#+

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

特殊文字、大文字と小文字を区別しない2つの文字セット、およびその他の小文字を使用します。

まず、が含まれていない場合は、入力全体を削除しますPlz send teh codez。入力が残っている場合は、で置き換えることにより-1 flag comment、数字を避け$#+ます。$+キャプチャグループ$0がないため、最後のキャプチャグループ(完全一致)を指します。$#+次に、キャプチャの数を示し1ます。これは常にです。

最後に、文字列がまだ空の場合(つまり、最初の段階でそれをクリアした場合)に置き換えます+1(ここでもに使用$#+します1)。


2

C#、77バイト

x=>x.Contains("Plz send teh codes!")?$"{'x'-'y'} flag comment":$"+{'x'/'x'}";

数字を使用できないのは、大変なことです。


2

Python 2 95 94 87バイト

特殊文字とすべての小文字の小文字(3つの文字セット、および大文字と小文字を区別しない "p"を除く)を使用して、合計4つの文字セットを使用します。

b=ord('b')-ord('a')
print["+"+`b`,`-b`+" flag comment"][input()=="Plz send teh codez!"]

オンラインでお試しください!8バイトを節約してくれた@math_junkieに感謝!2バイトを節約してくれた@officialaimmに感謝します。


a=ord     

組み込み関数aとしましょうord()

b=str(a('b')-a('a'))

これは本当にb=1

print["+"+b, "-"+b+" flag comment"][input()=="Plz send teh codez!"]

大括弧の2番目のペアのステートメントがtrueの場合、大括弧の最初のペアの2番目のストリングを印刷します。それ以外の場合は、最初のものを印刷します。


あなたは回避することにより、5つのバイトを保存することができますstr後にスペースを削除することによって、あなたを、そしてprintREPL
数学中毒

@math_junkie整数と文字列を連結するというエラーが発生する
Anthony Pham

上記の私のコメントのリンクを参照してください
数学のジャンキー

a = ordを削除して実際にordを使用することで2バイトを節約できます...節約のように見えますが、そうではありません...同じでした:D
officialaimm

:あなたは、ラムダ2つ以上保存することができますlambda n,b=ord('b')-ord('a'):["+"+`b`,`-b`+" flag comment"][n=="Plz send teh codez!"]
数学中毒

2

Python 2 / 3、81 76 68バイト

lambda x:["+%s","-%s flag comment"]["Plz send teh codez!"in x]%+True

用途:

  • すべての特殊文字(スペース、改行(0x0a)、大文字と小文字を区別しないアルファベット、または数字以外のもの)
  • いずれかpzcm(大文字と小文字を区別しない)
  • いずれかhten(大文字と小文字を区別しない)
  • のいずれか qwryuioasdfgjklxvb

使用しない:

  • のいずれか QWRYUIOASDFGJKLXVB
  • 任意の数字(0-9)

math_junkieのおかげで-8バイト


1
配列ルックアップで4バイトを節約:TIO
数学中毒

1
+代わりにを使用してさらに4を節約intTIO
数学中毒

@math_junkie素晴らしいアイデア!
L3viathan 2017

2

Python 3、115バイト

if"p".upper()+"lz send teh codez!"in input():print("-"+str(len('a'))+" flag comment")
else:print("+"+str(len('a')))

数字や大文字は使用しません。

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


あなたは間のように、いくつかのスペースを削除することができif "p"codez!" inなど
mbomb007

変数に割り当てるstr(len('a'))と、さらにいくつかを節約できます。呼び出すのでstrはなく、文字列に直接数値をつなぐことも有利かもしれません。
ジュリアンウルフ

1

Common Lisp、81バイト

特別+小文字+ 2大文字小文字混合= 4文字セット

(format t"~:[+~s~;-~s flag comment~]"(search"Plz send teh codez!"(read-line))(*))

未ゴルフ

(format t "~:[+~s~;-~s flag comment~]"
        (search "Plz send teh codez!" (read-line))
        (*))

説明

(read-line)

からの入力行を受け入れ*standard-input*ます(デフォルトではSTDIN)。

(search "Plz send teh codez!" ...)

2番目の引数(行の読み取り)をスキャンして、最初の引数が始まるインデックスを探します。このインデックス、またはnil見つからなかった場合は(false)を返します。

(*)

lispでの乗算は、引数を含まない任意の数を取るように定義されています。引数がない場合は、常に1を返します。

(format t "~:[+~s~;-~s flag comment~]" ...)

#'format似ているfprintfsprintf、C.それの最初の引数ではt、などの出力を指定*standard-output*(デフォルトではSTDOUT)。次の引数はフォーマット文字列です。"〜"は "%"のように使用されますprintf-それに続く文字はフォーマット操作を指定します。

"~:[<a>~;<b>~]"条件付きフォーマット操作です。引数を取り、引数<a>nil(false)の場合は続行します。t(true)や数値(たとえば)などの他の値は、で継続し<b>ます。formatの3番目の引数(最初、後t、およびフォーマット文字列)は検索なので<a>、検索が失敗した場合(および<b>それ以外の場合)に選択されます。

この場合、<a>nil/ false)ブランチは「+〜s」を出力します。"〜s"は、フォーマット引数を文字列に変換し、その文字を出力します。formatの4番目の引数(2番目、その後t、およびフォーマット文字列)は(*)or 1なので、「+ 1」が出力されます。

<b>ブランチは似ています「 - 〜の旗コメント」。また、4番目(2番目)の引数を使用して「〜s」を埋めるため、「-1フラグコメント」を出力します。


1

sh + sed、72バイト

文字セットを使用:1、3、4、5。

let ""
sed "s/.*Plz send teh codez!.*/-$? flag comment/
tz
s/.*/+$?/
:z"

最初は純粋なsedを使いたかったのですが、数字の使用を避ける方法がわかりませんでした。だから私はそのためだけにshを使いました。算術式として評価できないためlet ""、の終了ステータスは1です。

z は単なるラベルであり、他の文字に置き換えることができます。


1

Mathematica、265バイト

これは大変でした。

t[s_,n_]:=ToString@s~StringTake~{n};If[StringFreeQ[#,t[Head[a^b],i=-I I]<>"l"<>(s=t[RSolve[f[a+i]==f@a-i/Sqrt@a,f@a,a],(i+i+i+i)^(e=i+i+i)+i+e])<>" send teh "<>(k=t[i/Sin@x,e])<>"ode"<>s<>"!"],"+"<>t[i,i],"-"<>t[i,i]<>" flag "<>k<>"o"<>(n=Head[a b]~t~e)<>n<>"ent"]&

読みやすいバージョン:

t[s_, n_] := ToString@s~StringTake~{n}; 
If[StringFreeQ[#, 
   t[Head[a^b], i = -I I] <> 
    "l" <> (s = 
      t[RSolve[f[a + i] == f@a - i/Sqrt@a, f@a, 
        a], (i + i + i + i)^(e = i + i + i) + i + e]) <> 
    " send teh " <> (k = t[i/Sin@x, e]) <> "ode" <> s <> "!"], 
  "+" <> t[i, i], 
  "-" <> t[i, i] <> " flag " <> k <> "o" <> (n = Head[a b]~t~e) <> n <>
    "ent"] &

特殊文字を使用しますhtenqwryuioasdfgjklxvbQWRYUIOASDFGJKLXVB。Mathematicaに特殊文字がないと基本的に不可能であり、ほとんどすべての文字列関連の関数Stringがその名前に含まれるので、ここでの選択は本当に制限されます…

他の文字セットを取得するには、いくつかのトリックが必要です。最初に、1虚数の2乗の負の値を取得しIますi = -I I。後で、3によっても定義しe = i+i+iます。

その手紙Pはかなり単純明快でした:Mathematicaはa^b内部的にとして扱うPower[a,b]ので、私たちがする必要があるのはこれ(Power)の頭を取り、それを文字列に変えてそして最初の(別名ith)文字を取ることだけです。(私たちは、文字列に物事を回すことだろうと取っnは我々が定義するので、目の手紙をたくさんt[s_,n_]:=ToString@s~StringTake~{n}。)文字はm類似している:のヘッド取るa bあり、Times及び第三の取得(別名e番目)の文字。

文字cは少し難しいです。三角関数のアイデンティティを使用し1/Sin[x] == Csc[x](またはを使用i/Sin[x]できないため1)、3番目の文字を使用しCsc[x]ます。

本当に難しいのはzです。を作成するzには、HurwitzZeta関数を使用します(はい、本当に)。RSolve[f[a + i] == f@a - i/Sqrt@a, f@a, a]文字列を返す再帰関係を解くことでそれが得られます

"                             1            1
 {{f[a] -> C[1] + HurwitzZeta[-, a] - Zeta[-]}}
                              2            2"

68番目の文字はzです。68をとして取得し4^3 + 4ます。

これはおそらくさらにゴルフになる可能性があります。HurwitzのゼータのものはMathematicaのドキュメントからかなりコピーされており、68を取得するためのより短い方法があるでしょうz。助言がありますか?


1

Python 3.5(137 102 98 87 85 94バイト)

小文字(3文字セット)+特殊文字(1文字セット)= 4文字セットを使用

私も空白文字を避けることをほぼ計画していましたが、pythonのインデントにより、改行を1つ保持するように強制されたため、空白文字をそのままにしました。

i=str(ord('b')-ord('a'))
print(['+'+i,'-'+i+' flag comment']['Plz send teh codez!'in input()])

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

  • 35バイトを節約しました!!!!:以前、upper()関数の存在を忘れていたようです(愚かな私!!)
  • 4バイトを節約:i = input()をinput()に削減
  • 11バイト節約!!!:Anthony-Phamに感謝(charsetで有効であるため「P」を使用)
  • 2バイトを節約:(a = ordを削除。関数を短くすることは必ずしも良い考えではないことを学んだ!:D)
  • 追加された9バイト:'Plz send teh codez!'がない文字列の+1を表示していないことを指摘してくれたmath-junkieに感謝します。前。

1
まあ、あなたはすでにpを使用しているので(大文字と小文字を区別しないと定義されています)、必要はありません.upper()
Anthony Pham

1
+1含まれていない入力に対して出力する必要がありますPlz send teh codez!
数学のジャンキー

それを指摘してくれてありがとう、私は今までそれを知らなかった...:D
officialaimm

0

Groovy、78バイト

{a="a".length();it.contains("Plz send teh codez!")?-a+" flag comment":"+"+a}

数字や大文字のセットは使用しません。

三項演算子の単純な使い方。"a".length()取得するための回避策です1


0

Swift(非競合)-64バイト

print(x.contains("Plz send teh codez!") ?"-1 flag comment":"+1")

残念ながら5つの文字セットを使用しましたが、それらなしでは作成できませんでした...提案は大歓迎です!

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