Google은 "google"이라는 단어를 Google에서 사용하면 인터넷이 손상 될 수 있음을 알고 있습니다.
당신의 임무는 가능한 한 가장 적은 유니 코드 문자로 하나의 문자열을 허용하고 길이를 반환하는 함수를 만드는 것입니다.
그러나 주어진 문자열이 google
(소문자)이면 오류가 발생합니다.
예를 들어, g('bing')
반환 4
되지만 g('google')
오류가 발생합니다.
사용 예와 가능한 경우 오류를 알려주십시오.
Google은 "google"이라는 단어를 Google에서 사용하면 인터넷이 손상 될 수 있음을 알고 있습니다.
당신의 임무는 가능한 한 가장 적은 유니 코드 문자로 하나의 문자열을 허용하고 길이를 반환하는 함수를 만드는 것입니다.
그러나 주어진 문자열이 google
(소문자)이면 오류가 발생합니다.
예를 들어, g('bing')
반환 4
되지만 g('google')
오류가 발생합니다.
사용 예와 가능한 경우 오류를 알려주십시오.
답변:
lambda x:len(x)/(x!='google')
ZeroDivisionError
on을 "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를 통해 인수를 전달하는 것이 유효합니다.
AGOOGLE
7, 맞아야합니까? 그리고 코드 크기에서 프로그램 헤더를 계산해서는 안되므로 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();}
위의 코드는 ArithmeticException
0으로 나누지 않고 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
여호수아 호니의 대답에서 수정 여기 .