내 이름은 공식인가요?


25

소개

ToonAlfrink가 말했듯이 " 저는 초보자가 시도 할 수있는 쉬운 질문이 충분하지 않다고 생각합니다." 따라서 작업은 매우 간단합니다. 문자열이 주어지면 이름이 공식인지 여부에 관계없이 진실하거나 허위 값을 출력합니다.

제목이 하나 인 제목 인 경우 이름은 "공식"입니다.

  • 경우 첫 번째 편지는 (공식 없습니다 : 대문자 adnan)
  • 다른 문자가 대문자가 아닌 경우 (공식 아님 AdNaN)
  • 이름에 알파벳이 아닌 문자가 포함되어 있지 않은 경우 (공식이 아님 : Adnan123, Adnan!)
  • 이름이 한 단어로만 구성된 경우 (공식이 아님 : Adn an, Adn An)
  • 이름보다 한 문자 이상이있는 경우 (공식 없습니다 : A)

규칙

  • 기능이나 프로그램을 제공 할 수 있습니다
  • 이것은 이므로 바이트 수가 가장 적은 제출이 승리합니다!
  • 참고 : 상황 을 단순화하기 위해 Mary-Ann과 같은 이름은 공식적인 문제가 아닙니다.
  • 이름에 선행 공백이 없다고 가정하십시오.
  • 32-126이름 에는 인쇄 가능한 ASCII 문자 ( ) 만 사용 한다고 가정합니다.

테스트 사례

Input: Adnan
Output: True

Input: adnan
Output: False

Input: AdnaN
Output: False

Input: Adnan123
Output: False

Input: Adnan Adnan
Output: False

Input: A
Output: False

Input: Mary-Ann
Output: False

리더 보드


5
내 이름은 공식적이지 않습니까? 나는 그때 그것을 바꾸는 것이 좋습니다.
ETHproductions

12
@ETHproductions이 논리를 사용 Lololololololololololol하는 경우 공식 이름은 다음과 같습니다.)
Adnan

1
그것은 실제로 질문에 대답하지 않습니다. 그것이 어떤 : "당신은 이름이 악센트 문자를 포함하지 않는 가정 할 수있다", 또는 "악센트 문자 이름은 양보해야 False"?
Lynn

1
약간 낙관적 인 캐나다의 침략으로, 내가 알고있는 교수는 당신의 "공식적인"기준에 만족하지 않을 것입니다 : Robert Smith? . 그의 이름은 실제로 그 물음표가 있습니다. 또한 Sahaiʔa .
Idonotexist Idonotexist

1
@FarhanAnam 예
Adnan

답변:


6

Pyth, 16 13 12 바이트

titlecase에 대해 알려주는 @Thomas Kwa에게 감사합니다.

&qzr@GrzZ3tz

테스트 스위트 .

&              Boolean and operator
 qz            Equality test on input
  r    3       Titlecase operator
   @G          Setwise intersection with the alphabet
    rzZ        Input to lowercase
 tz            All but the first character of the input

21

레티 나, 13 바이트

^[A-Z][a-z]+$

온라인으로 사용해보십시오 | 테스트 스위트 (출력 0은 일치하는 문자열이 없음을 의미합니다.)

Retina에 단 한 줄의 코드 만 제공되면 표현식이 입력 문자열과 일치하는 횟수를 출력 1하므로 일치하는 경우 (거짓) 출력 하고 공식 이름 인 경우 (거짓) 출력 0하지 않습니다.

고장

^       The beginning of the string
[A-Z]   One uppercase letter
[a-z]+  One or more lowercase letters
$       The end of the string

8
문자에 대한 문자 클래스가 필요한 것 같습니다. ;)
Martin Ender

10

티 스크립트, 12 바이트

xO`A-Z][a-z`

O기능을 남용합니다 .

온라인으로 해보십시오

테스트 스위트

설명

O기능이 있습니다 :

x O   `A-Z][a-z`
x.O(/^[A-Z][a-z]+$/)

그런 다음 O 함수는 정규식이 일치하는지 확인합니다 x.


또는 경쟁하지 않는 TeaScript 3가 7 바이트 에서 응답 합니다 .

xO/\A\a

아하하 하하하 하하하 Japt 인터프리터에서 작업하는 동안 언젠가 isChar추가 한 함수 와 함께이 트릭을 사용했습니다 . 그러나 모르는 사람들을 위해 더 자세히 설명하고 싶을 수도 있습니다.
ETHproductions

Ooooooh, 나는 새로운 정규식 기능을 좋아합니다!
ETHproductions

7

자바 스크립트 (ES6), 26

n=>/^[A-Z][a-z]+$/.test(n)

게시자 : Edcsixtyfive

f=n=>/^[A-Z][a-z]+$/.test(n)

console.log=x=>O.textContent+=x+'\n'

;['Adnan','adnan','AdnaN','Adnan123','Adnan Adnan','A','Mary-Ann']
.forEach(t=>console.log(t+' '+f(t)))
<pre id=O></pre>


젠장, 넌 날 이겼어 또한 내 버전을 5 바이트 초과했습니다.
SuperJedi224

1
1 바이트 이하 :n=>n.match`^[A-Z][a-z]+$`
user81655

@ user81655 배열의 값이 너무
강합니다

@ edc65 그래도 유효합니다.
SuperJedi224

1
단 4 바이트 만 더 ES5를 준수합니다././.test.bind(/^[A-Z][a-z]+$/)
CR Drost

7

파이썬, 59 58 바이트

Retina 버전을 이길 수있는 실제 방법이 없다고 확신합니다. 이것은 기본적으로 Python 내에서만 가능하기 때문입니다. 그러나 나는 이것이 첫 번째 제출이라고 생각합니다.)

import re,sys;print(re.match('[A-Z][a-z]+$',sys.argv[1]))

매우 이상한 값입니다.

(test2)wayne@arglefraster ~/programming/inactive/golf/67554
⚘ python golf.py AdNan                                                                                                 $? 148  %# 3  10:06:36
None
(test2)wayne@arglefraster ~/programming/inactive/golf/67554
⚘ python golf.py Adnan                                                                                                         %# 3  10:06:40
<_sre.SRE_Match object at 0x7feefea7f440>
(test2)wayne@arglefraster ~/programming/inactive/golf/67554
⚘ python golf.py "Adnan Banana"                                                                                                %# 3  10:06:47
None

(그리고 ""쉘을 통해 전달되는 경우 공백이있는 문자열 주위에 필요합니다 )


1
^re.match()문자열의 시작 부분에서만 일치 하므로 필요하지 않습니다 .
manatwork

1
@manatwork 좋은! 다른 바이트 면도 :) Python2를 사용하여 닫는 paren으로 다른 바이트를 저장할 수 있습니다.
Wayne Werner

1
@ WayneWerner : 그래서 파이썬 버전을 제공 해야하는 이유는 무엇입니까? :) Python 2와 Python 3은 적어도 codegolf의 경우 다른 언어라고 생각합니다.
movatica

전체 프로그램 대신 익명의 람다를 사용하면 45 바이트가됩니다.lambda s:re.match('[A-Z][a-z]+$',s) import re
movatica

1
@movatica 아, 으악!
MilkyWay90


4

파이썬, 50 45 43 41 바이트

lambda s:s.isalpha()*s.istitle()*len(s)>1

True공식 이름인지 False아닌지 여부를 반환 합니다 .


codegolf 상태의 규칙으로 f=2 바이트를 절약 할 필요가 없습니다 . 또한 (len(s)>1)5 바이트 이상을 저장합니다 s[1:].islower(). :)
movatica

3

BotEngine , 203 180 29x6 = 174

v ABCDEFGHIJKLMNOPQRSTUVWXYZ
>ISSSSSSSSSSSSSSSSSSSSSSSSSSF
v <<<<<<<<<<<<<<<<<<<<<<<<<<
 Tabcdefghijklmnopqrstuvwxyz
> SSSSSSSSSSSSSSSSSSSSSSSSSSF
^E<<<<<<<<<<<<<<<<<<<<<<<<<<

대문자와 소문자를 식별하기 위해 내장을 추가해야합니다. 각 문자를 개별적으로 확인하는 것보다 훨씬 간결합니다.

거친 번역 :

for a of input enqueue a
if ABCDEFGHIJKLMNOPQRSTUVWXYZ contains first
 remove first
 while abcdefghijklmnopqrstuvwxyz contains first
  remove first
 if empty
  yield TRUE exit
 else
  yield FALSE exit
else
 yield FALSE exit

3

C, 129 122 121 111 바이트

main(c,b,d){b=d=0;while((c=getchar())>13)b|=b|=!b&&c>90|c<65?1:2&&d++&&c<97|c>122?4:2;printf("%d\n",b<3&&d>1);}

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

main(c,b,d)
{
    b=d=0;
    while((c=getchar())>13)
    {
        // Twiddle bits, 1<<0 for first character and 1<<3 for subsequent
        b|=!b&&c>90|c<65?1:2; // check first character is valid
        b|=d++&&c<97|c>122?4:2; // check later characters are valid
    }
    // If all OK b == 2, if either of above are wrong, b >= 3 due to 
    // extra bits. Also, d should be > 1 for name length to be valid.
    printf("%d\n",b<3&&d>1);
}

3

VB6, 48 바이트

Function f(i):f=i Like"[A-Z][a-z]+":End Function

2

MATL , 18 바이트

현재 언어 버전 ( 4.0.0 )이 사용됩니다.

이것은 NinjaBearMonkey의 대답 과 동일한 정규 표현식을 적용합니다 .

j'^[A-Z][a-z]+$'XX

출력은 공식 이름 인 경우 문자열 ( 정확한 문자열 )이고 그렇지 않은 경우 아무것도 아닙니다 ( 거짓 )입니다.

>> matl
 > j'^[A-Z][a-z]+$'XX
 > 
> December
December
>> 

>> matl
 > j'^[A-Z][a-z]+$'XX
 > 
> ASCII
>> 


2

17 자

\B<K1><J>\E=1
*=0

샘플 실행 :

bash-4.3$ echo -n 'Adnan' | gema '\B<K1><J>\E=1;*=0'
1

bash-4.3$ echo -n 'adnan' | gema '\B<K1><J>\E=1;*=0'
0

bash-4.3$ echo -n 'Adnan123' | gema '\B<K1><J>\E=1;*=0'
0


2

IA-32 기계 코드, 19 바이트

Null 종료 문자열에 대한 포인터를 수신하고 ecx0 또는 1을 반환 하는 함수입니다 eax( fastcall규칙 에 따라 ).

코드의 16 진 덤프 :

6a 20 58 32 01 74 0a 41 2c 61 3c 1a b0 00 72 f3 c3 40 c3

어셈블리 언어로 :

    push 32;
    pop eax;

myloop:
    xor al, [ecx];
    jz yes;
    inc ecx;
    sub al, 'a';
    cmp al, 26;
    mov al, 0;
    jb myloop;
    ret;

yes:
    inc eax;
    ret;

입력 이름의 첫 번째 바이트는 5 번째 비트를 뒤집어서 ( xor와 함께 32) 대문자에서 소문자로 변환합니다. eax3 바이트의 코드를 사용하여 32를로로드 합니다.

    push 32;
    pop eax;

바이트가 작은 문자인지 확인하려면

    sub al, 'a';
    cmp al, 26;
    jb myloop;

그렇지 않으면이 코드가 적용됩니다. 이 경우 0을 반환하려면 al조건부 점프를 수행하기 전에 0을 넣습니다 .

    sub al, 'a';
    cmp al, 26;
    mov al, 0;
    jb myloop;

0 in은 al또한 다음 바이트의 입력 이름에 대한 xor-mask (또는없는) 역할을합니다.

성공적인 종료는 0 바이트를 만나면 다음에 0이 유지됩니다 xor.

    xor al, [ecx];
    jz yes;

입력 이름이 비어 있지 않은 것으로 가정합니다. 이름 (임의의 문자열이 아님)에 대한 합리적인 가정이라고 생각합니다!


2

grep16 바이트

이것은 패턴입니다 :

[A-Z][a-z]+

-Eand -x-c스위치 를 사용하면 grep일치하는 입력 라인 수가 인쇄됩니다. 한 줄만 줄 경우 1 또는 0을 얻게됩니다. 이것이이 장소의 작동 방식이라고 생각합니다.

패턴은 11 자, 전체 명령 행은 23입니다. 사람들 sed이 명령없이 스크립트를 사용하는 것을 보았 으므로 무엇이 무엇인지 모르겠습니다. 그러나 stdin을 읽으므로 입력하면됩니다. 여기 있습니다 echo:

for a in Adnan adnan Ad\ nan
do  echo "$a" | grep -cxE \[A-Z]\[a-z]+
done

1
0
0

@Doorknob-나에게 충분히 공평 해 보입니다. 매우 감사합니다. 당신은 어느 모자를 추측 했습니까?
mikeserv

1
헤어 보트의 복수를 알아 냈습니다. : P
Doorknob

(아마 가능성이 grep -Exc있기 때문에 ) 내가 틀렸다면 나를 멈추십시오. 그러나 사용할 수 있으므로 스위치의 바이트 수를 세지 않아도됩니다.
Neil

@ Neil-당신이 틀렸다면 나는 몰라. 나는 정말로 모른다-편집 기록을 살펴보십시오.
mikeserv

2

Mathematica 10.1, 46 바이트

LetterQ@#&&#==ToCamelCase@#&&StringLength@#>1&

표준 정규식 솔루션보다 1 바이트 적은 바이트를 사용합니다. 세 가지 검사를 수행합니다. LetterQ@#문자열이 완전히 문자로 구성되고 StringLength@#>1단일 문자 문자열을 무효화합니다. #==ToCamelCase@#그러나 말이되지 않습니다. ToCamelCase입력 문자열 AndOutputsItLikeThis를 취하는 문서화되지 않은 함수입니다. 단어가 하나뿐이므로 첫 글자를 대문자로 표시하므로 문자열이 같은지 확인합니다.


ToCamelCase10.3에 새로운? 10.2에서 작동하지 않는 것 같습니다.
murphy

@ murphy, 10.1에서 작동합니다. 당신은 무엇을 얻 ToCamelCase["foo bar baz"]습니까?
LegionMammal978

좋아, 10.1에서 작동하는지 확인할 수 있습니다. 그러나 8.0, 9.0, 10.0 및 10.2에서는 함수가 정의되어 있지 않습니다 (테스트 케이스는을 리턴 함 ToCamelCase[foo bar baz]). 이상한! 누군가 10.3을 확인할 수 있습니까?
murphy

2

bash / zsh / ksh, 25 바이트

[[ $1 =~ ^[A-Z][a-z]+$ ]]

실제로 이것을 사용하려면 파일을 유일한 줄로 사용하여 파일을 만들고 파일을 실행 가능하게 만드십시오. 알려진 이진 형식으로 인식되지 않는 실행 파일은 쉘 스크립트 ( /bin/sh특히) 로 처리됩니다 .

$ printf '[[ $1 =~ ^[A-Z][a-z]+$ ]]' >f
$ chmod +x f
$ wc -c f
25 f
$ for x in 'Adnan' 'adnan' 'AdnaN' 'Adnan123' 'Adnan Adnan' 'A' 'Mary-Ann'; do f "$x" && echo 1 || echo 0; done
1
0
0
0
0
0
0
$ 

2
이에서 잘 작동 bash, ksh그리고 zsh하지만, 표준 POSIX에서 일을 할 기회가없는 sh또는 호환 dashyash. 혼동을 피하기 위해 답변 제목을 변경하는 것이 좋습니다.
manatwork

3
사용 printf대신에 echo파일을 작성하고 당신은 25 바이트를 얻을 수 있습니다.
sam hocevar

둘 다 좋은 점입니다. 둘 다 적용됩니다.
Aaron Davies

2

C # 4, 89 바이트

Code Golf에서의 첫 시도. 여기에 온다 :

bool o(string i){return System.Text.RegularExpressions.Regex.IsMatch(i,"^[A-Z][a-z]+$");}

Dot Net Fiddle 에서 실제 작동하는 것을보십시오 .


C # 6을 사용하는 경우 조금 더 짧게 만들 수 있습니다.bool o(string i)=>System.Text.RegularExpressions.Regex.IsMatch(i,"^[A-Z][a-z]+$");
ProgramFOX

2

자바, 28 바이트

n->n.matches("[A-Z][a-z]+")

정규식을 사용하여 문자열이 대문자와 하나 이상의 소문자로 구성되어 있는지 확인하십시오.

Benjamin Urquhart 덕분에 -1 바이트


세미콜론을 떨어 뜨릴 수 있습니다
Benjamin Urquhart

@ BenjaminUrquhart 아, 감사합니다
HyperNeutrino

1

k4, 39 바이트

{((*x)in .Q.A)&(&/(1_,/x)in .Q.a)&1<#x}

첫 번째 문자는 상위이고 다른 모든 문자는 하위입니다.

예 :

  {((*x)in .Q.A)&(&/(1_,/x)in .Q.a)&1<#x}'("Adnan";"adnan";"AdnaN";"Adnan123";"Adnan Adnan";"A";"Mary-Ann")
1000000b

1

정말 16 바이트

ú4,nÿ=)l1<)ù-Y&&

육각 덤프 :

a3342c6e983d296c313c29972d592626

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

아직 정규 표현식을 지원하지 않기 때문에 최선을 다할 수 있습니다.

 4,n                               Push 4 copies of input
    ÿ=                             Check that it's equal to itself converted to titlecase
      )                            Put the boolean on the bottom
       l1<                         Check that it's longer than 1 character
          )                        Put the boolean on the bottom
           ù                       Convert it to lowercase.
ú           -Y                     Check that removing the lowercase alphabet empties it
              &&                   And all the booleans together

1

OCaml의, 231 216 197 166 바이트

let f n=let l=String.length n in if l=1 then 0 else let rec e=function 0->1|i->match n.[i] with('a'..'z')->e(i - 1)|_->0 in match n.[0]with('A'..'Z')->e(l - 1)|_->0;;

사용법 예 :

# f "Adnan";;
- : int = 1

# f "adnan";;
- : int = 0

# f "AdnaN";;
- : int = 0

# f "Adnan123";;
- : int = 0

# f "Adnan Adnan";;
- : int = 0

# f "A";;
- : int = 0

# f "Mary-Ann";;
- : int = 0

ungolfed (실제 함수 이름으로) :

let is_name name =
  let len = String.length name
  in if len = 1 then 0 else
  let rec explode_lower = function
    | 0 -> 1
    | i ->
      match name.[i] with
      | ('a'..'z') -> explode_lower (i - 1)
      | _ -> 0
  in match name.[0] with
  | ('A'..'Z') -> explode_lower (len - 1)
  | _ -> 0;;

정수 (bleh!) 대신 부울을 사용하고 부피를 if … then 0 else 로 대체하면 실제로 약 10 %를 절약 할 수 … ||있습니다. 그리고 그 문제 match와 범위 대신에 부울 연산자를 사용하여n.[0]>'@'&n.[0]<'['&e(l-1)
질 'SO-정지 존재 악마'

1

SpecBAS-39 바이트

SpecBAS는 MATCH명령을 통해 정규식을 처리합니다 . false의 경우 출력은 0이고 true의 경우 1입니다.

1 input n$:  ?MATCH("^[A-Z][a-z]+$",n$)

1

스위프트 2, 116 바이트

정규식은 스위프트에서 너무 장황 하므로이 작업을 수행하는 것이 훨씬 짧습니다.

func e(s:String)->Int{var c=0;for k in s.utf8{if(c==0 ?k<65||k>90:k<97||k>122){return 0};c++};return s.utf8.count-1}

이것은 돌아올 것이다 0 또는 -1비 공식적인 이름 (NO 입력의 경우), 및 숫자 > 0(문자열의 길이와 동일하다 - 1)의 이름은 공식이면

언 골프

func e(s: String) -> Int{
    var c = 0
    for k in s.utf8{
        if(c == 0 ? k < 65 || k > 90 : k < 97 || k > 122){
            return 0
        }
        c++
    }
    return s.utf8.count - 1
}

1

C #, 188 바이트

정규 표현식은 이것을 해결하는 올바른 방법 일 것입니다. 그러나 이것이없는 시도입니다.

bool O(string s){for(int i=1;i<s.Length;i++){if(char.IsUpper(s[i])){return false;}}if(char.IsUpper(s[0])&&s.All(Char.IsLetter)&&!s.Contains(" ")&& s.Length > 1){return true;}return false;}

보통 필기법

static bool O(string s)
{
    for (int i = 1; i < s.Length; i++)
    {
        if (char.IsUpper(s[i]) )
        {
            return false;
        }
    }
    if (char.IsUpper(s[0]) && s.All(Char.IsLetter) && !s.Contains(" ") && s.Length > 1)
    {
        return true;
    }
    return false;
}

루프없이 소문자 검사를 더 짧게 만드는 방법에 대한 조언을 원할 것입니다. 방금 언어를 배우기 시작했고 이것을 연습으로 사용하여 어쨌든 결과를 공유 할 것이라고 생각했습니다.





당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.