Car는 Carpet과 마찬가지로 Java는 JavaScript


36

제목은 도난당한 영감 그렉 Hewgill의 대답자바 스크립트와 자바의 차이는 무엇?

소개

Java와 JavaScript는 프로그래머들 사이에서 일반적으로 사용되는 언어이며 현재 Stack Overflow 에서 가장 인기있는 태그입니다. 그러나 우리 모두 알다시피, 비슷한 이름을 제외하고는이 둘은 거의 공통점이 없습니다.

프로그래밍에서 가장 악명 높은 논쟁 중 하나를 기리고 태그 검색에 대한 최근의 좌절감에서 영감을 얻어 다음을 제안합니다.

도전

문자열을 입력으로받는 프로그램을 작성하십시오. 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
새로운 패턴 일치 태그에는 위키가 필요합니다. 가능하면 기부하십시오
Christopher

2
수행 된 순서에 따라 javacarpet기존 테스트 사례에서 찾을 수없는 버그가 발생할 수 있습니다.
Ray

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

자바 / 자바 수개, 108 (107) 106 바이트

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

자바로 실행

//\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 정보 감사합니다. 그러나 나는 이것을 폴리 글롯 항목으로 생각합니다. 폴리 글 로트 항목이 명시 적으로 요청되지 않은 경우에 대한 규칙이 있습니까? 나는 이것을 가능한 한 많이 골프화하려고 노력했다. 예를 들어, 두 정규식을 함께 모 으려고 시도했지만 비슷한 정규식과 그 구분 기호로 인해 두 가지 정규식을 얻을 수 없었습니다. 자바 스크립트 사이에 새로운 라인을 허용하지 않기 때문에이 같은 변수 정의를하는 것도 불가능 a=>. 나는 골프 정신을 유지하려고 노력했다. 내가 뭔가 잘못했다면 말해줘?
Olivier Grégoire

24
@Dennis IMHO "자바 / 자바 스크립트 폴리 글 로트"는 자체 언어로 간주되며이 경우 경쟁이 매우 치열합니다.
ETHproductions

1
@ OlivierGrégoire 나는 이것이 골퍼 폴리 글 로트 제출이 아니라고 말하지는 않지만, 비 폴리 글 로트 챌린지에 폴리 글 로트 제출이 있어야하는지에 대해서는 논란의 여지가있다. 그들은 도전자들이 요구하는 것보다 더 많은 진지한 경쟁자들이 할 수 있는가? 토론하지만이 특정 주제에 대한 명확한 합의가 없다고 생각합니다. 개인적으로 나는 호의적이지 않습니다.
Dennis

3
@Dennis 귀하의 통찰에 감사드립니다. 이제 귀하의 의미를 이해합니다. 귀하에 따르면이 답변이 "비경쟁"으로 태그되어야합니까? 다른 한편으로, 나는 모든 폴리 글 로트 답변에 대해 말하고 있지는 않지만 (이것이 나의 첫 번째 임), 이것은 자바와 자바 스크립트 모두에 대해 도전이 말하고 "가상 보너스 포인트"가 명시 적으로 수여되었다는 특별한 의미를 가지고 있습니다. 이 답변을 작성하기 전에 Java, JavaScript 및 정규식 답변이 필요합니다. Java와 정규식을 결합 할 수 있고 JavaScript와 정규식을 결합 할 수 있습니다. 어쨌든, 나는 이것을 비경쟁으로 표시하는 것을 신경 쓰지 않습니다.
Olivier Grégoire

17

자바 스크립트, 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));


나는 당신의 정규식을 훔칠 거라고하지만 더 이상 내 대답을 한 것입니다 : 좋은 대답하지만 오
HyperNeutrino

이제 우리는 자바 답변이 필요합니다.
DJMcMayhem

Java 답변이 있지만 ... 거의 같은 정규 표현식에 왔습니다.
Olivier Grégoire

다른 방법 :/^java(?!script)/i
안드레아

1
@ OlivierGrégoire 아, 젠장, 그 사람은 불공평 해 보인다
Andrea


11

C (호출 풋만), 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

파이썬 2 , 68 바이트

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

온라인으로 사용해보십시오!

notjagan 덕분에 -11 바이트 Dennis
에게 감사 -2 바이트




@Justin 저것도. 좋은.
HyperNeutrino

Python 2로 전환하면 전체 프로그램으로 2 바이트를 절약 할 수 있습니다.
Dennis

1
@LukeSawczak 오 : 나는 : PI가 그 전에 Java를 사용하고 있었고 Java ;에서 필요 하다는 것을 알지 못했습니다. 어쨌든 그것을 사용해야하기 때문에 줄 바꿈이 필요하지 않습니다.
HyperNeutrino

4

C #, 80 78 바이트

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

1
여기서 가장 읽기 쉬운 언어는 C # 인 것 같습니다
sepehr

2
@sepehr C #을 사용하면 선명하게 보입니다. (멍청한 댓글에 대한 보너스를
Ray

4

엑셀 Google 스프레드 시트, 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.

나는 당신이 Searches Find를 -2 바이트에 대해 s로 대체 할 수 있다고 믿습니다. 그리고 마지막 세 개의 괄호를 닫지 않으면 서 -3 바이트에 대한 구글 시트 공식으로 더 변환 될 수 있다고 생각합니다
Taylor Scott

1
찾기는 대소 문자를 구분하고 검색은 대소 문자를 구분하지 않습니다. 그러나 마지막 3 바이트는 좋은 생각입니다!
Mark

Excel에서 Google 스프레드 시트로 교체해야하는 이유
Stevoisiak

2
마지막 3 개의 parens를 제거하면 3 바이트가 절약됩니다. Excel은 오류를 발생시켜 어쨌든 넣을 수 있습니다.
Mark





3

공통 리스프, 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

엑셀, 84 바이트

="car"&IF(AND(ISERR(SEARCH("javascript",A1)),IFERROR(SEARCH("java",A1),2)=1),,"pet")

1

Excel VBA, 76 바이트

범위 [A1]및 출력 에서 입력을받는 익명 VBE 즉시 창 기능 은 VBE 즉시 창에 대한 car/ carpet상태입니다

RegExp를 사용하지 않습니다

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

1
VBA의 좋은 사용! 나는 매크로가 더 짧을 것이라고 생각했다. 이제 증거가 있습니다.
Mark

1

파이썬 3 , 95 바이트

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

온라인으로 사용해보십시오!

예, 더 짧을 수 있지만 중첩 된 람다를 사용하고 싶었습니다!


항상 실험하는 것이 좋습니다 :) and,, or등의 연산자 주위에 바이트를 절약 할 수 있습니다 if.else
Luke Sawczak

1

, 42 바이트

나는 stevieb의 대답이 잘못된 출력을 가지고 있다고 생각합니다 (자신이 시도했지만 'javajavascript'에 대한 자동차를 반환합니다). 이것은 작동해야합니다 :

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

0

수학, 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은 골프 언어를 디자인하는 첫 번째 시도였습니다. 그래서 다소 기발합니다 ... 일치하거나 포함하지 않거나, 정규 표현식 또는 기타가 없으므로 결과 배열 길이를 분할하고 확인해야합니다 ... JISBaL에는 분할 기준이 있기 때문에 -정규식 ...하지만 다른 정규식 지원은 없습니다 ... 이유 때문에.

Regex 는 @Cows Quack의 답변 에서 도난당했습니다 .



0

, 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에서 입력을받습니다. 배치에는 대소 문자를 구분하지 않는 비교 연산자가 없지만 대소 문자를 구분하지 않는 문자열 대체가 있으므로 처음 네 문자에 임시를 할당 한 다음 대소 문자를 구분하지 않고 java를 대체하면 빈 문자열이됩니다. 한편 필자는 원래 문자열에서 javascript를 둔감하게 대치하므로 변경하지 않아야합니다.



0

펄, 98 84 62 바이트

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

온라인으로 사용해보십시오!

바이트 푸셔 덕분에


사이트에 오신 것을 환영합니다! 나는 펄을 모른다. 그러나 제거 할 수있는 많은 공백이있는 것처럼 보인다. 또한 더 짧은 방법을 찾고 있다면 여기에 많은 팁이 있습니다 .
DJMcMayhem

@DJMcMayhem 감사합니다. 전체 논리를 더 짧게 변경하도록 만들 수 있다고 생각하지만 이해하지 못했습니다
Burgan

1
그냥 (너무 많은 솔루션을 변경하지 않고) 몇 가지 힌트 : 당신은 교체 할 수 있습니다 return $b;단지와 함께 $b;. Perl은 항상 마지막으로 평가 된 명령문을 리턴합니다. 우리는 경고에 신경 쓰지 않기 때문에 ';' 에 $b}. if 주위에 대괄호가 필요하지 않습니다. ||대신에 를 사용 or하면 정규식 뒤에 공백을 저장할 수 있습니다.
bytepusher

1
첫 번째 lc 주위의 ()를 제거 할 수도 있지만 그 후에 공백이 필요합니다. !~대신 ! =~두 번째 조건 을 사용하면 됩니다 lc$_[0]!~. `-> sub a{$b="car";$b.="pet"if lc$_[0]=~/javascript/||lc$_[0]!~/^java/;$b}. 삼항 연산을 사용하면 하나 더 다운됩니다sub a{$b="car";$b.="pet"if lc$_[0]=~/javascript/||lc$_[0]!~/^java/;$b}
bytepusher

1
잊지 말고-정규 표현식 무시 케이스 스위치가있을 때 lc가 필요하지 않습니다 $_[0] =~//i||$_[0]!~//i. 그리고 마지막으로 왜 변수입니까? sub a{"car".($_[0]=~/javascript/i||$_[0]!~/^java/i?'pet':'');}잘해야합니다 :). 그리고 지금 : 펄은 좋을 것이고 그것을 지정하지 않고 $ _ [0]을 사용할 수있게 해줄 것입니다 !~: sub a{"car".(/javascript/i||!/^java/i?'pet':'')}-> 48 :)
bytepusher

0

다트 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.