Google은 "google"이라는 단어를 Google에서 사용하면 인터넷이 손상 될 수 있음을 알고 있습니다.
당신의 임무는 가능한 한 가장 적은 유니 코드 문자로 하나의 문자열을 허용하고 길이를 반환하는 함수를 만드는 것입니다.
그러나 주어진 문자열이 google(소문자)이면 오류가 발생합니다.
예를 들어, g('bing')반환 4되지만 g('google')오류가 발생합니다.
사용 예와 가능한 경우 오류를 알려주십시오.
Google은 "google"이라는 단어를 Google에서 사용하면 인터넷이 손상 될 수 있음을 알고 있습니다.
당신의 임무는 가능한 한 가장 적은 유니 코드 문자로 하나의 문자열을 허용하고 길이를 반환하는 함수를 만드는 것입니다.
그러나 주어진 문자열이 google(소문자)이면 오류가 발생합니다.
예를 들어, g('bing')반환 4되지만 g('google')오류가 발생합니다.
사용 예와 가능한 경우 오류를 알려주십시오.
답변:
lambda x:len(x)/(x!='google')
ZeroDivisionErroron을 "google", 그렇지 않으면 길이를 제공합니다 . 이것은 파이썬의 부울 이등분 0과를 활용 1합니다.
g당신을 lambda생각, 또는 입력을 익명으로 호출합니다.
Infinity에 대한이 ... 대신 오류를 던지는 "구글"
return사용 했다면 필요합니다def
L/lbnb"google, 13 바이트.
살라 알라 미의 답변에 대한 개선. "google"제공시 스택 오버 플로우 예외 발생
int g(string s)=>s!="google"?s.Length:g(s);
StackOverflowException. 실제로는 반환되지 않습니다 (으로 작동 while(true){}).
L/lbnb"google
명명 된 함수를 정의합니다 y.
문자열이 Google 이 아닌 경우 길이를 1로 나누고 그렇지 않으면 0 으로 나눕니다 . 이 아이디어는 참신하지 않지만 독립적으로 생각해 냈습니다.
L Define y(b):
lb Compute len(b).
nb"google Compute (b != "google").
/ Set _ = len(b) / (b != "google").
Return _. (implicit)
;있지만 분명히 당신은 여기에 없습니다 ...
y. "그러나 y코드 에는 없습니다 !?
L재정의합니다 y.
@(x)nnz(x(+~strcmp('google',x):end))
다른 더 우아한 솔루션과 달리 MATLAB에서 0으로 나누기 연산을 수행하면 오류가 아니라 오히려 발생 Inf합니다. 이 솔루션은로 문자열의 길이를 찾습니다 nnz. 생성되는 문자열은 문자열의 시작 부분에서 끝 부분까지 색인을 생성하는 방식으로, 이는 본질적으로 문자열의 복사본입니다. 그러나 중요한 것은 입력이와 같은지 여부를 확인하여 문자열에 액세스 할 수있는 시작 부분이 생성된다는 것 'google'입니다. 그렇지 않은 경우 시작 인덱스 1이 생성되고 MATLAB이 1에서 인덱스를 시작하기 때문에 문자열에 정상적으로 인덱스합니다. 같으면 생성 된 인덱스는 0이고 MATLAB은 인덱스 오류를 발생시킵니다. 인덱스는 양의 정수 여야합니다. 여분의+동등성 검사의 출력이 Boolean /이 아닌 숫자인지 확인하는 것 logical입니다. 를 생략하면 +경고가 표시되지만이 챌린지 사양에서는 경고가 허용되지 않으므로 +코드를 완성해야합니다.
>> f=@(x)nnz(x(+~strcmp('google',x):end)) %// Declare anonymous function
f =
@(x)nnz(x(+~strcmp('google',x):end))
>> f('bing')
ans =
4
>> f('google')
Subscript indices must either be real positive integers or logicals.
Error in @(x)nnz(x(+~strcmp('google',x):end))
@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');
위의 내용은 공식 제출물이 아니지만 실행하기가 좀 더 재미 있습니다. 남용 eval익명 함수 내에서, 어떤 코드가하는 것은 입력 문자열이 동일한 경우를 확인한다는 것입니다 'google'...하고 있는지,이 MATLAB에 내장 된 웹 브라우저를 열고되고 액세스를 시도하는 구글의 404 오류 페이지를 보여줍니다 i존재하지 않는 곳에 위치한 서브 페이지 . 그렇지 않으면 문자열의 길이를 정상적으로 표시합니다.
>> f=@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end'); %// Declare anonymous function
>> f('bing')
ans =
4
>> f('google')
>>
마지막 사용 전화 'google'는 다음 화면 을 제공합니다.
strcmp대신을 사용하여 바이트를 저장할 수 isequal있습니다.
strcmp했지만 isequal어떤 이유로 든 결국 사용 했습니다 .... 감사합니다!
nnz보다 2 바이트 짧습니다 numel. 몇 년 전에 내 투표를했다 :-)
f=>f=='google'?Δ:f.length
ΔGoogle 에 대해 ReferenceError를 발생 시킵니다.
#JS afaik에서 오류를 사용할 수 있습니다 .
도대체 우리가 여기있는 동안 TI-BASIC 답변을 얻을 수도 있습니다.
입력 형식은 "string":prgmNAME입니다. 에 신용 토마스 콰 먼저 찾는!
length(Ans)+log(Ans≠"GOOGLE
(가이드 : 대문자 1 개를 대체하여 각 소문자 1 바이트를 추가하십시오 s/GOOGLE/google/g => +6 bytes.)
"GOGGLE":prgmG
6
"BING":prgmG
4
"GOOGLE":prgmG
Error
length(Ans)/(Ans≠"google. 당신은 또한 사건이 잘못되었습니다; 대문자가 허용되면 14 바이트입니다. 그건 그렇고, Ans를 통해 인수를 전달하는 것이 유효합니다.
AGOOGLE7, 맞아야합니까? 그리고 코드 크기에서 프로그램 헤더를 계산해서는 안되므로 10 바이트를 빼십시오.
length(는 2 바이트이므로 숫자는 21 바이트와 15 바이트입니다.
(⍴÷'google'∘≢)
설명:
⍴: 길이÷: 로 나눈'google∘≢: 인수가 'google'와 같지 않습니다 .⍴문자열의 길이를 제공합니다. 문자열이 같지 않으면 google(길이가 변경되지 않은 경우) 1로, 문자열 이 같으면 google(오류 제공) 0 으로 나눕니다 .
⍴하여 수정하십시오 ≢. 또한의 피연산자를 교체하여 더 멋지게 만들 수 있습니다 ∘. 오, 파 렌스를 제거하는 것을 잊지 마십시오. 올인원 :≢÷≢∘'google'
lambda u:[len][u=='google'](u)
술어가 (= 1) 인 IndexError경우 1 요소 기능 목록을 인덱싱합니다 . 그런 기능.u=='google'True
많은 변종. 와:
lambda u:[len(u)][u=='google']
lambda u:len([u][u=='google'])
도전이 거꾸로 된 경우 ( 'google'이 아닌 모든 항목에 오류가 있음 ) 문자를 저장할 수 있습니다.
lambda u:{'google':len}[u](u)그러나 이미 길이를 알고 있으므로 하드 코딩하십시오.
{_,\"google"=!/}
문자열이 Google 이 아닌 경우 길이를 1로 나누고 그렇지 않으면 0 으로 나눕니다 . 이 아이디어는 참신하지 않지만 독립적으로 생각해 냈습니다.
_ Push a copy of the string on the stack.
, Compute the length of the copy.
\ Swap the length and the original string.
"google"= Push 1 if the string is "google", 0 otherwise.
! Apply logical NOT. Maps 1 to 0 and 0 to 1.
/ Divide the length by the Boolean.
q_,\"google"=!/. 이 게시물을보기 전에 개발했습니다. 이것은 전체 입력을 취합니다 (어쨌든 함수 인수로 생각됩니다). 불행히도 함수를 요청하기 때문에 사용할 수 없습니다 :(
나는 그것이 Octlab에서도 작동하는 Matlab 솔루션보다 길다는 것을 알고 있지만 특히 악합니다. 인수를 통해 전달 해야하는 콜백 함수 (자체적으로 재귀 적, 악의적 인)에 의존하는 함수 핸들을 포함하는 셀 배열 (이블) 리터럴 (이블)을 사용하여 익명 함수 (이블)를 만들고 있습니다. 그런 다음 기본적으로 함수를 문자열 인수로 줄이고 두 번째 인수 f를 f(매우 악한) 수정하는 다른 익명을 만듭니다 . 제정신의 인간은 Perl이나 regex (또는 cjam / pyth / 다른 esolang)처럼 거의 읽을 수 없기 때문에이 작업을 수행하지 않습니다.
따라서 문자열이 'google'이 아닌 경우 셀 길이의 두 번째 인수가 호출되어 문자열의 길이를 출력합니다. 그렇지 않으면 첫 번째 함수가 호출되며,이 함수는 나중에 함수 자체 인 콜백으로 전달됩니다. 오류는 기본적으로 최대 재귀 깊이 오류입니다.
f=@(s,f){@()f(s,f),numel(s)}{2-strcmp(s,'google')}();@(s)f(s,f)
eval여기가 진짜로 악 :-) 만들기 위해
{⍵≡'google':⍟⋄≢⍵}
입력이 인 경우 구문 오류를 발생시키는 명명되지 않은 monadic 함수입니다 google. 이것은 자연의 대수를 취하려고 시도함으로써 달성됩니다.
{
⍵≡'google': ⍝ If the right argument is "google"...
⍟⋄ ⍝ Compute log(<nothing>), which brings only sadness
≢⍵ ⍝ Otherwise compute the length
}
Dennis 덕분에 2 바이트를 절약했습니다!
⍟비공식적으로 "스 플랫"으로 알려져 있습니다. 이 사용법에 매우 적합한 이름입니다.
g=function(x)ifelse(x!="google",nchar(x),)
내가 잘못 읽지 않는 한 원래 게시물은 코드가 올바른 구문이어야한다고 지정하지 않았습니다.
예:
> g("bing")
[1] 4
> g("google")
Error in ifelse(x != "google", nchar(x), ) :
argument "no" is missing, with no default
ifelse 문의 "no"매개 변수에 대해서는 아무것도 추가하지 않았으므로이 매개 변수가 호출되면 오류가 리턴됩니다.
g=function(x)nchar(x)[[x!="google"]]
sub{$_=pop;y///c/!/^google$/}
manatwork 덕분에 -2b
용법:
sub{$_=pop;y///c/!/^google$/}->("google")
함수가 아닌 프로그램으로 도망 갈 수 있다면 다음은 20 바이트 (+ 1 바이트 명령 줄)에서만 유효합니다.
$_=y///c/!/^google$/
오류는 0으로 나누기입니다.
설명:
y///c길이를 반환 한 다음 !/^google$/입력이 'google'과 일치하면 0을 반환합니다.
용법:
perl -p entry.pl input.txt
sub{…}있습니다.. (그러면 당신은 그것을 그렇게 부르십시오 sub{…}->("google").)
$_!=google하는 대신!/^google$/
!=문자열을 비교하기 위해 작동하지 않습니다 ...
g"google"=error"!";g s=length s
>g "google"
*Exception: !
>g "str"
3
x=x;g"google"=x;g s=length s싶지만 어떤 이유로 든 << loop >> 예외가 ghci에 발생하지 않습니다.
g s|s/="google"=length s필요를 피한다error
lambda n:len(n)if n!='google'else d
(lambda n:len(n)*(n!='google')or d)('')
int g(String _){return"google"==_?0/0:_.length();}
위의 코드는 ArithmeticException0으로 나누지 않고 String이외의 다른 경우 에는 throw 됩니다 google. 참고로 ==참조 를 비교하면 String객체에서 작동하지 않습니다 .
(아래 의견에 제시된 제안에 근거)
s->s=="google"?0/0:s.length()
s->(s.equals("google")?null:s).length();
==Java에서 문자열을 비교하는 것은 일반적으로 작동하지 않습니다 (문자열 인턴에 의존하지 않는 한). 아마도 당신은 JavaScript와 혼동했을까요?
글쎄, 0으로 나누는 것은 정의되지 않은 행동이며, 나는 오류를 부르지 않을 것입니다. 그래서 내 접근 방식.
#include<ios>
[](std::string s){return s!="google"?s.size():throw;};
용법
[](std::string s){return s!="google"?s.size():throw;}("google");
size()2 바이트를 절약하기 위해 호출 할 수 있습니다 . C ++ 14에서는, 당신은 또한 일반적인 람다를 사용하여 대체 할 수 std::string로 auto. std::string대신 실제 값을 전달해야 합니다 const char*.
std::string있다 size(), 그것에 대해 감사 방법. C ++ 14의 일반적인 람다에 대해 알고 있지만 "string"is const char*및 not 때문에 어떻게 도움이되는지 모르겠습니다 std::string.
std::string가지고 size()와 length()그것 때문에 용기와 문자열 모두 . 에 관해서는 대신에 auto람다를 호출합니다 . 질문은 "문자열"이 무엇인지 지정하지 않고 "1 문자열 만 허용"이라고 말합니다. (std::string("google"))("google")
"google"s을 생성해야합니다.std::string
throw;하게 트리거 할 수 있습니다 std::terminate().
g(s) q $S(s'="google":$L(s))
용법:
>w $$g^MYROUTINE("bing")
4
>w $$g^MYROUTINE("google")
<SELECT>g^MYROUTINE
왜? 글쎄, $S[ELECT]기본적으로 간단한 다중 절 if-else 문입니다-Haskell 또는 Rust와 같은 언어의 패턴 일치와 거의 같습니다. Haskell이나 Rust와는 달리, "컴파일 타임 안전"이라는 개념은 MUMPS와 완전히 별개이기 때문에 패턴이 철저하지 않은지 검사하지 않습니다. 따라서 입력이 설명하지 않은 패턴 인 경우라는 멋진 런타임 오류가 발생합니다 <SELECT>.
좋고 간단합니다.
편집하다: 이제 규칙을 준수합니다
function f(g){if(g=="google")a;return g.length}
function f(g){if(g=="google")a;return g.length}
alert(f("Hello"))
alert(f("google"))
alert(f("hi"))
function f(g){if(g=="google")a;return g.length}
alert(f("Hello"))
alert(f("bing"))
alert(f("hi"))
undefined.
C, 66 48
기발한:
int l(long*s){return strlen(s)/((*s&~(-1L<<56))!=0x656c676f6f67);}
OSX의 GCC를 사용하여,
l("duck");반환 4,
l("google");발생합니다 Floating point exception: 8.
다른 플랫폼에서는 엔디안을 위해 상수를 조정해야 할 수도 있습니다.
더 짧은 :
덜 까다 로움, 동일한 결과.
l(int*s){return strlen(s)/!!strcmp(s,"Google");}
0x656c676f6f67= elgoog). 이 답변에는 이런 저급한 것들을 좋아하는 사람들에게 설명이 필요하다고 생각합니다.
int 4 문자 인을 제거하여 줄일 수 있다고 생각합니다 .
char *의 단위로, 8-bits로 주조되는 long *단위와, 64-bits올바르게 재 할당되지 않고, 힙 공간 그 8 바이트의 데이터가 손상되고, 단일 숫자로서 취급 ( 8*8 = 64). 그래서 처음 6 자 + NUL + 쓰레기를 얻습니다. 그것은 매우 영리합니다. 위험합니다. 왜 segfault가 아닌지 궁금합니다. 그 8 번째 쓰레기 바이트가 한계를 벗어났습니다.
나는 @Borsunho의 첫 번째 시도와 매우 비슷한 것을 처음으로 생각해 보았지만 내 것이 약간 길어졌고 그는 내가 끝나기 전에 게시했습니다. 그의 30 바이트 전에이 문제를 해결했습니다. :)
->s{s[/^(?!google$).*/].size}
사용 예 :
$ irb
2.2.1 :001 > f = ->s{s[/^(?!google$).*/].size}
=> #<Proc:0x007fa0ea03eb60@(irb):1 (lambda)>
2.2.1 :002 > f[""]
=> 0
2.2.1 :003 > f["bing"]
=> 4
2.2.1 :004 > f["google"]
NoMethodError: undefined method `size' for nil:NilClass
from (irb):1:in `block in irb_binding'
from (irb):4:in `[]'
from (irb):4
from /Users/daniel/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>'
->s{+s[/^(?!google$).*/]}
String#size새로운 단항 플러스 로 대체 되었습니다. 온라인으로 사용해보십시오!
^성냥 그룹 을 떠나는 것을 생각해 내지 못했습니다).
.*해야한다.
/\A(?!google\Z).*/m그것을 고친다 고 생각 한다 (3 바이트의 비용으로). ^그리고 $시작과 라인의 끝과 일치, 동안 \A과 \Z전체 문자열의 시작과 끝을 일치합니다.
i:0(?v
31&l~<v0"google"~~.?%2l
$v?(2l<S?*=2l=6:+={
&<;n
그래도 최선의 골프 시도 나 알고리즘이 아니라, 갈 것입니다. 기능 자체는 아니지만 이것이 여전히 자격이 있다고 생각합니다. 더 나은 버전으로 편집 할 수 있는지 살펴 보겠습니다.
길이를 인쇄 한 다음 오류를 허용하면 46 바이트 솔루션이 있습니다.
i:0(?v
2lnl~<v0"google";?%
$;?(2l<S?*=2l=6:+={
이 특성의 49 바이트 이전 솔루션 :
i:0(?v
l0nl~<v;!?=7
:;?(2l<S?*=2l=6:+=@@g3
elgoog
관심이 있으시면 설명을 드리겠습니다. 제 답변에 문제가 있거나 골프 제안이 있으면 알려주세요.
안녕하세요, 저는 골프를 처음 코딩하므로 골프를 훨씬 더 많이 할 수는 있지만 여기에 있습니다.
_=>_=="google"?a:_.length
g=_=>_=="google"?a:_.length
g=_=>{if("google"==_)throw Error();return _.length}
그리고 몇 가지 테스트 :
(_=>_=="google"?a:_.length)("bing")//4
(_=>_=="google"?a:_.length)("google")// Error: a is not defined
g("bing")// returns 4
g("google")// Error: a is not defined
편집 : 추가? if를 바꾸고 Error를 정의되지 않은 객체로 바꿉니다.
편집 2 : 바이트 수가 잘못되었다는 것을 알고 g =
{.,\'google'=!/}
다른 많은 것들과 마찬가지로 간단히 입력을 비교 'google'하고 결과의 역수로 길이를 나눕니다.
예제 프로그램 :
IF /I "%string%"=="google" exit
echo %string%> string.txt
for %%? in (string.txt) do ( SET /A stringlength=%%~z? - 2 )
출력은 % stringlength %입니다.
전체 코드 :
@echo off
del string.txt
cls
echo Type your string
echo.
set /p string=String:
IF /I "%string%"=="google" goto err
echo %string%> string.txt
for %%? in (string.txt) do ( SET /A stringlength=%%~z? - 2 )
cls
echo %stringlength%
pause
del string.txt
:err
color c
echo There seems to be an error with your input...
pause>nul
여호수아 호니의 대답에서 수정 여기 .