JavaはJavaScriptに対して、Carはカーペットに対して


36

JavaScriptとJavaの違いは何ですか?に対するGreg Hewgillの答えに触発されたタイトルの盗難

前書き

JavaとJavaScriptはプログラマーの間で一般的に使用される言語であり、現在Stack Overflowで最も人気のあるタグです。しかし、よく知られているように、似たような名前は別として、この2つに共通点はほとんどありません。

プログラミングの最も悪名高い討論の1つに敬意を表し、タグ検索の最近の不満に触発されて、次のことを提案します。

チャレンジ

入力として文字列を受け取るプログラムを作成します。car文字列が「Java」で始まり、「JavaScript」が含まれていない場合に返されます。そうでなければ、を返しcarpetます。

入力と出力の例

車:

java
javafx
javabeans
java-stream
java-script
java-8
java.util.scanner
java-avascript
JAVA-SCRIPTING
javacarpet

カーペット:

javascript
javascript-events
facebook-javascript-sdk
javajavascript
jquery
python
rx-java
java-api-for-javascript
not-java
JAVASCRIPTING

ノート

  • 入力マッチングでは大文字と小文字を区別しないでください
  • 出力の可能性のみcarまたはcarpet
  • 回答がJava、JavaScript、またはRegexを使用している場合の想像上のボーナスポイント
  • 別のタイトル:JavaとJavaScript、そしてハムとハムスター

2
新しいパターンマッチングタグにはwikiが必要です。できれば貢献してください
クリストファー

2
処理の順序によっては、javacarpet既存のテストケースでは検出できないバグが検出される場合があります。
レイ

17
を取得した場合imaginary bonus points if your answer uses Java, Javascript, or Regex、そのようなソリューションのバイトカウントは複雑になりますか?;)
Steadybox

Alternate Title: Java is to JavaScript as ham is to hamster実際、「ハムスター」の「ハム」は食べ物の「ハム」同じです。食物「ハム」は豚肉であり、「ハムスター」という用語は、モルモットという動物に由来します。モルモットは、船での飼育が容易だったため、長い航海で豚の肉に取って代わりました。
dotancohen

回答:


100

Java / JavaScriptポリグロット、108 107 106バイト

//\u000As->s.matches("(?i)(?!.*javascript)java.*"/*
a=>/(?!.*javascript)^java/i.test(a/**/)?"car":"carpet"

Javaとして実行

//\u000As->s.matches("(?i)(?!.*javascript)java.*"/*
a=>/(?!.*javascript)^java/i.test(a/**/)?"car":"carpet"

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

注:ハイライトは間違っているため、信用しないでください。正しく解釈された実際のJava \u000Aは、コンパイルの最初のステップでとして解釈されるため、以下のようになります。\n事実上、行コメント(//)で始まるコメントは終了しています。

//
s->s.matches("(?i)(?!.*javascript)java.*"/*
a=>/(?!.*javascript)^java/i.test(a/**/)?"car":"carpet"

JavaScriptとして実行

//\u000As->s.matches("(?i)(?!.*javascript)java.*"/*
a=>/(?!.*javascript)^java/i.test(a/**/)?"car":"carpet"

JSバージョンの@CowsQuakへのクレジット。

let f=

//\u000As->s.matches("(?i)(?!.*javascript)java.*"/*
a=>/(?!.*javascript)^java/i.test(a/**/)?"car":"carpet"

var a=["java","javafx","javabeans","java-stream","java-script","java-8","java.util.scanner","javascript","java-avascript","javascript-events","facebook-javascript-sdk","javajavascript","jquery","python","rx-java","java-api-for-javascript","not-java"];

for(var s of a) console.log(s.padStart(a.reduce((x,y)=>x.length>y.length?x:y).length) + "=>" + f(s));

この回答の架空のボーナスポイントはいくつですか?

Java回答の@Nevayのおかげで-1バイト。


1
これはJavaScriptやJavaで競争力がありません。私はそれがすべての提出の要件である深刻な競争相手だとさえ確信していません。
デニス

10
@Dennis情報ありがとうございます。ただし、これはポリグロットエントリと見なします。明示的に要求されていないポリグロットエントリに対するルールはありますか?これをできる限りゴルフしようとしました。たとえば、私は両方の正規表現をまとめようとしましたが、これより短いものは得られませんでした(似たような正規表現とその区切り文字にもかかわらず、2つの異なるため)。JavaScriptではaとの間の改行を許可していないため、同じ変数定義を持つこともできません=>。私はゴルフの精神を維持しようとしました。何か間違ったことをしたら、教えてください。
オリビエグレゴワール

24
@Dennis IMHO「Java / JavaScriptポリグロット」は独自の言語としてカウントされます。この場合、これは非常に競争力があります。
-ETHproductions

1
@OlivierGrégoire私はこれが多目的なポリグロット提出ではないと言っているわけではありませんが、そもそも非ポリグロットチャレンジへのポリグロット提出があるべきかどうかは議論の余地があります。彼らはチャレンジの要求以上に真剣な候補者ができることの一部として登場しましたか?議論しますが、この特定のトピックについて明確なコンセンサスがあるとは思いません。個人的には、私は賛成ではありません。
デニス

3
@デニスあなたの洞察力をありがとう、私は今あなたの意味を理解しています。あなたによると、この回答は「非競争的」としてタグ付けされるべきですか?一方、すべての多言語回答について話すわけではありませんが(これが初めてです)、これはチャレンジがJavaとJavaScriptの両方について語り、「架空のボーナスポイント」が明示的に与えられたという特別な意味がありますこの回答を書く前に、Java、JavaScript、および正規表現の回答について。Javaと正規表現を組み合わせることができ、JavaScriptと正規表現を組み合わせることができます。とにかく、私はこれを非競争的とマークしても構いません。
オリビエグレゴワール

17

JavaScript、50 49バイト

正規表現を再配置して@ValueInkのおかげで1バイト節約

a=>/javascript|^(?!java)/i.test(a)?"car":"carpet"

テストスニペット

let f=

a=>/javascript|^(?!java)/i.test(a)?"carpet":"car"

var a=["java","javafx","javabeans","java-stream","java-script","java-8","java.util.scanner","java-avascript","javascript","javascript-events","facebook-javascript-sdk","javajavascript","jquery","python","rx-java","java-api-for-javascript","not-java"];

for(var s of a) console.log(s.padStart(a.reduce((x,y)=>x.length>y.length?x:y).length) + "=>" + f(s));


私はあなたの正規表現を盗むつもりでしたが、それは私の答えをより長くしたでしょう:oいい答え
-HyperNeutrino

ここで、Javaの回答が必要です。
DJMcMayhem

私たちは...私はほぼ同じ正規表現に来た... Javaの答えを持っていますが、
オリヴィエ・グレゴワール

または:/^java(?!script)/i
アンドレア

1
@OlivierGrégoireああ、いまいましい、それは不公平だと思う
アンドレア


11

C(putsの呼び出しのみ)、131バイト

f(int*s){char r[]="carpet";~*s&'AVAJ'||(r[3]=0);for(;*s&255;*(int*)&s+=1)~*s&'AVAJ'||~s[1]&'IRCS'||~s[2]&'TP'||(r[3]='p');puts(r);}

問題はありますが、提供されているすべてのテストケースに合格します:)

g(int* s)
{
  char r[] = "carpet";
  ~*s&'AVAJ' || (r[3]=0);
  for(;*s & 255; *(int*)&s +=1)
    ~*s&'AVAJ' || ~s[1]&'IRCS' || ~s[2]&'TP' || (r[3]='p');
  puts(r);
}

回答がJava、Javascript、またはRegexを使用している場合の想像上のボーナスポイント

まあ...いいえ



8

Python 2、68バイト

k=input().lower();print'car'+'pet'*(k[:4]!='java'or'javascript'in k)

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

-11はおかげバイトnotjagan
-2おかげバイトデニスを




@ジャスティンそれも。いいね
ハイパーニュートリノ

Python 2に切り替えると、完全なプログラムで2バイトを節約できます。
デニス

1
@LukeSawczakああ、私は:PIがその直前にJava ;を使用していて、Java で必要であることに気づいていなかったので、とにかくそれを使用しなければならないので、改行は不要です:Pそれが私がそれを使用した理由です。
ハイパーニュートリノ

4

C#、80 78バイト

s=>(s=s.ToLower()).StartsWith("java")&!s.Contains("javascript")?"car":"carpet"

1
ここで最も読みやすい言語はC#
-Sepehr

2
@sepehr C#でシャープに見えるということです。(愚かなコメントにボーナスをもらえますか)
レイ

4

EXCEL Google Sheets、89 86バイト

Taylor Scottのおかげで3バイト節約

=LEFT("carpet",6-3*ISERR(SEARCH("javascript",A1))+3*ISERR(IF(SEARCH("java",A1)=1,1,1/0

A1で入力を受け取ります

説明

=LEFT("carpet",6-3*ISERR(SEARCH("javascript",A1))+3*ISERR(IF(SEARCH("java",A1)=1,1,1/0)))

 SEARCH("javascript",A1)        #Case-Insensitive Find, returns error if not found  
 ISERR(                         #Returns string true if error, False if not
 3*ISERR(                       #Forces TRUE/False as integer, multiplies by 3
 IF(SEARCH("java",A1)=1,1,1/0)  #If java found, returns integer. if 1, java begins string
                                #so returns 1, which will be turned into 0 by iserr.
                                #Else returns 1/0, which will be turned into 1 by iserr.
 LEFT(                          #Returns digits from the left, based upon count.

-2バイトのSearchesをFindsに置き換えることができ、最後の3つの括弧を閉じないことで-3バイトのgoogleシート式にさらに変換できると信じています
テイラースコット

1
検索では大文字と小文字が区別され、検索では大文字と小文字が区別されません。しかし、最後の3バイトは良い考えです!
マーク

ExcelからGoogleスプレッドシートに切り替える理由
-Stevoisiak

2
最後の3つの括弧を削除すると、3バイト節約されます。Excelはエラーをスローし、とにかくそれらを挿入します。
マーク





3

Common Lisp、131125バイト

(lambda(s)(format()"car~@[pet~]"(or(<(length s)4)(not(#1=string-equal"java"(subseq s 0 4)))(search"javascript"s :test'#1#))))

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

Common Lispの#n = “トリック”のおかげでサイズが小さくなりました。

説明

(lambda (s)                 ; anonymous function
  (format                   ; use of format string to produce the result
    ()                      ; the result is a string
    "car~@[pet~]"           ; print "car", then print "pet" when:
    (or (< (length s) 4)    ; the string is less then 4 characters or
        (not (string-equal "java" (subseq s 0 4)))     ; does not start with java or
        (search "javascript" s :test 'string-equal)))) ; contains javascript

2

C(tcc)、144 136バイト

a;f(s){char*t=s;for(;*t;a=!strncmp(s,"java",4))*t=tolower(*t++);for(t=s;*t;)s=strncmp(t++,"javascript",10)&&s;puts(a*s?"car":"carpet");}

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

展開:

a;
f(s)
{
    char *t = s;
    for (; *t; a = !strncmp(s, "java", 4))
        *t = tolower(*t++);
    for (t=s; *t;)
        s = strncmp(t++, "javascript", 10) && s;
    puts(a*s ? "car"  :"carpet");
}


1

Excel VBA、76バイト

範囲からの入力を受け取り、匿名VBE即時窓関数[A1]出力はcar/ carpetVBEイミディエイトウィンドウにステータス

RegExpを使用しません

?"car"IIf(InStr(1,[A1],"Java",1)*(InStr(1,[A1],"JavaScript",1)=0),"","pet")

1
VBAの素晴らしい使用!マクロはもっと短いと思った。今、私は証拠を持っています。
マーク

1

Python 3、95バイト

g=lambda s:(lambda r:'car' if r[:4]=='java' and 'javascript' not in r else 'carpet')(s.lower())

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

ええ、もっと短くすることもできますが、ネストされたラムダを使用してみました!


実験には、必ず良い:)あなたのような周りのオペレーターバイト節約できることに注意してくださいandorifelse
ルークSawczak

1

Perl42バイト

steviebの答えには間違った出力があると思います(自分で試してみました-'javajavascript'に対してcarを返します)。これは動作するはずです:

say/^java/i&&!/javascript/i?'car':'carpet'

0

Mathematica、82バイト

正規表現

If[#~StringMatchQ~RegularExpression@"(?i)(?!.*javascript)^java.*","Car","Carpet"]&

0

JAISBaL、36 バイト

℠℘(?!.*javascript)^java.*}͵Ucar½Upet

詳細/説明:

# \# enable verbose parsing #\
tolower                           \# [0] convert the top value of the stack to lowercase #\
split (?!.*javascript)^java.*}    \# [1] split the top value of the stack by (?!.*javascript)^java.*} #\
arraylength                       \# [2] push the length of the array onto the stack #\
print3 car                        \# [3] print car #\
!if                               \# [4] if the top value on the stack is falsy, skip the next statement #\
print3 pet                        \# [5] print pet #\

JAISBaLはゴルフ言語を設計する最初の試みでしたので、かなり風変わりです...正規表現などの一致または包含はないため、代わりに結果の配列の長さを分割して確認する必要があります... JAISBaLには分割-regex ...しかし、他の正規表現のサポートはありません。

正規表現は、盗まから借り@Cowsクワックの答え



0

Perl、36バイト

say/^java(?!script)/i?"car":"carpet"

そのように実行します:

perl -nE 'say/^java(?!script)/i?"car":"carpet"' java.txt

0

バッチ、91バイト

@set/ps=
@set t=%s:~0,4%
@if "%t:java=%%s:javascript=%"=="%s%" (echo car)else echo carpet

STDINで入力を受け取ります。バッチには大文字と小文字を区別しない比較演算子はありませんが、大文字と小文字を区別しない文字列置換があるため、一時文字列を最初の4文字に割り当て、大文字と小文字を区別せずにjavaを置換できます。一方、大文字と小文字を区別せずに元の文字列のjavascriptを置き換えます。



0

Perl、98 84 62バイト

sub a{"car".($_[0]=~/javascript/i||$_[0]!~/^java/i?'pet':'');}

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

bytepusherに感謝


サイトへようこそ!perlはわかりませんが、削除できる空白がたくさんあるようです。また、もっと短くする方法を探しているなら、ここにたくさんのヒントがあります
DJMcMayhem

@DJMcMayhemありがとう、全体のロジックをもっと短くするために変更できると思うが、私はそれを理解していない
バーガン

1
ほんのいくつかのヒント(ソリューションをあまり変更せずに):return $b;を単にに置き換えることができ$b;ます。Perlは常に最後に評価されたステートメントを返します。警告は気にしないので、「;」をドロップすることもできます へ$b}。ifの前後に括弧は必要ありません。の||代わりに使用する場合or、正規表現の後に空白を保存できます。
バイトプッシャー

1
最初のlcの周りの()を削除することもできますが、ifの後にスペースが必要です。2番目の条件の!~代わりに使用する場合! =~はになりますlc$_[0]!~。`-> sub a{$b="car";$b.="pet"if lc$_[0]=~/javascript/||lc$_[0]!~/^java/;$b}。三元OPSを使用すると、1より多くのそれをダウンさせますsub a{$b="car";$b.="pet"if lc$_[0]=~/javascript/||lc$_[0]!~/^java/;$b}
bytepusher

1
忘れてはいけない-正規表現で大文字小文字を区別しないスイッチを使用している場合、lcは不要です2 :) $_[0] =~//i||$_[0]!~//i。そして最後に、なぜ変数なのか?sub a{"car".($_[0]=~/javascript/i||$_[0]!~/^java/i?'pet':'');}うまくいくはずです:)。そして今:perlが素敵になり、それを指定せずに$ _ [0]を使用できるようになります(ただし!~)はありません)sub a{"car".(/javascript/i||!/^java/i?'pet':'')}-> 48 :)
bytepusher

0

Dart VM、104バイト 102バイト

main(p){p=p[0].toLowerCase();print("car${p.indexOf('java')==0&&p.indexOf('javascript')<0?'':'pet'}");}

説明

デゴルフド:

main(p)
{
    p = p[0].toLowerCase();
    print("car${p.indexOf('java') == 0 && p.indexOf('javascript') < 0 ? '' : 'pet'}");
}

通常のメイン機能があります

私たちは、交換するpp[0].toLowerCase();、我々は新しい変数を宣言する必要がないように(varプラススペースは4余分なバイトになります)

その後、実際の印刷を行います

私たちは、印刷car無条件に、我々は印刷するかどうかをチェックするためのインライン文を使用しpetて後かではありません。インデックス0に文字列「java」があり、「javascript」が含まれていない場合は、何もしません(実際には空の文字列を追加しますが、効果はありません)pet


0

錆、97バイト

let s=if Regex::new(r"^javascript|^!java$").unwrap().is_match("javascript"){"carpet"}else{"car"};

私はもっ​​と短い解決策があると確信していますが、それは私の最初の試みです:)


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