더 작은 타우 토 그램 검사기가 있습니까? [닫은]


10

최근에 코드 골프에 참여하여 가장 작은 타우 토 그램 검사기를 작성하려고했습니다.

tautogram는 : 모든 단어 예를 들어, 같은 문자로 시작하는 문장입니다 꽃은 프랑스에서 번성 .

문장이 입력으로 주어지면, 그것이 타우 토 그램인지 확인하십시오.

테스트 사례

Flowers flourish from France
    True

This is not a Tautogram
    False

이 파이썬 코드를 생각해 냈습니다 (주 언어이기 때문에).

print(True if len(list(set([x.upper()[0] for x in __import__('sys').argv[1:]]))) == 1 else False)

용법:

python3 tautogram.py Flowers flourish from France
# True
python3 tautogram.py This is not a Tautogram
# False

문장에는 쉼표와 마침표가 포함될 수 있지만 다른 특수 문자는 사용할 수 없으며 대문자와 소문자 만 사용할 수 있습니다.

크기는 98 바이트입니다. 어떤 언어로 된 더 작은 솔루션이 있습니까?


1
A와는 것입니다 tips문제는 제한 Python? 그렇다면이 두 태그를 모두 추가해야합니다.
Arnauld

2
헤야 친구! 이 사이트는 일반적으로 명시 적으로 정의 된 문제를 위해 예약되어 있습니다. "입력에 구두점을 포함 할 수 있습니까?"와 같은 내용은 게시하기 전에 답변해야하지만, 그 외에는 일반적으로 볼 수있는 다른 새로운 사용자 질문과 비교할 때 가장 큰 첫 번째 질문입니다. 귀하의 예를 판단하면 입력의 유일한 문자는 "[A-Za-z]"이며 귀하의 질문은 순전히 객관적이라는 것을 분명히 밝힙니다. 이 주변에서 다른 질문을 찾아보십시오. 그렇지 않으면 오버플로에 더 잘 맞을 수 있습니다.
Magic Octopus Urn

1
문장 부호는 무엇을 의미합니까? 어떤 문자가 포함되어 있습니까?
무지의 실시

1
@MagicOctopusUrn 가끔 stackOverflow에서 짧은 솔루션을 요청할 때이 사이트를 참조하십시오 :)
Luis felipe De jesus Munoz

6
PPCG에 오신 것을 환영합니다! 구두점을 포함한 몇 가지 테스트 사례가이 과제에 크게 추가 될 것입니다.
AdmBorkBork

답변:




3

클로저 , 80 바이트

온라인으로 사용해보십시오! . TIO는 Clojure의 표준 문자열 라이브러리를 지원하지 않으므로 첫 번째 버전에서는 "소문자를 찾을 수 없습니다"오류가 발생합니다.

(fn[s](use '[clojure.string])(apply =(map first(map lower-case(split s #" ")))))

언 골프 드 :

(defn tautogram? [s]
  (use '[clojure.string])
  (->> (split s #" ") ; Get words
       (map lower-case)
       (map first) ; Get first letter of each word
       (apply =))) ; And make sure they're all the same

가져 오기를 피하는 버전을 만들었습니다.

(fn [s](apply =(map #(if(<(-(int %)32)65)(int %)(-(int %) 32))(map first(take-nth 2(partition-by #(= %\ )s))))))

 ; -----

(defn tautogram? [s]
  (->> s
       (partition-by #(= % \ )) ; Split into words
       (take-nth 2) ; Remove spaces
       (map first) ; Get first letter
       ; Convert to uppercased letter code
       (map #(if (< (- (int %) 32) 65) ; If attempting to uppercase puts the letter out of range,
               (int %) ; Go with the current code
               (- (int %) 32))) ; Else go with the uppercased  code
       (apply =))) ; And check if they're all equal

그러나 112 바이트 입니다.


내 라켓 솔루션은 다음과 같습니다.(define(f s)(apply char=?(map(λ(x)(char-upcase(car(string->list x))))(string-split s))))
Galen Ivanov

PicoLisp에서 훨씬 더 짧은 :(de f(s)(apply =(mapcar car(split(chop(lowc s))" "))))
Galen Ivanov

3

PowerShell , 57 50 41 바이트

(-split$args|% s*g 0 1|sort -u).count-eq1

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

입력을 받아서 split공백에 넣습니다. 각 단어를 통해 루프,과를 취함으로써 첫 글자 잡고 substrin g위치에서 시작 0하고가는 1캐릭터. 그런 다음 sort와 문자 (기본적으로 대소 문자 구분)이야 -unique 플래그가 하나 개의 각 문자의 사본과를 검증 꺼내 count그 이름은 -eq에 연간를 1. 출력은 암시 적입니다.

mazzy 덕분에 -9 바이트.




1
@mazzy는 고정 의도를 이해하려고 노력
나우 Fouilleul

@mazzy 질문을 다시 열면 정규식 버전을 게시 할 수 있습니다. 자체 답변을 보증하기에 충분히 다릅니다.
AdmBorkBork 12

나는 동의 해요. 그러나이 질문은 보류되어 새 답변을 만들 수 없습니다.
mazzy 2015 년


2

Brachylog , 5 바이트

ḷṇ₁hᵛ

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

         The input
ḷ        lowercased
 ṇ₁      and split on spaces
   hᵛ    is a list of elements which all start with the same thing.

방금 이것이 구두점을 처리 할 수 ​​있어야한다는 것을 알았지 만, 구두점이있는 테스트 사례가 없으면 이것이 제대로 작동하는지 여전히 작동하지 않는지를 알 수 없습니다 ...
Unrelated String


2

펄 5 ( -p), 20 바이트

$_=!/^(.).* (?!\1)/i

TIO

문장 부호가 잘못된 경우 주석 처리 (31 바이트)

$_=!/^\W*+(.).*(?=\b\w)(?!\1)/i

31 바이트

그렇지 않으면 31 바이트의 또 다른 접근법이 있습니다.

$h{ord()%32}++for/\w+/g;$_=2>%h

31 바이트 기타


문장 부호는 어떻습니까? 줄거리에서 공백이나 문장 부호는 어떻습니까?
mazzy

이 답변은 주어진 테스트 케이스에서 작동하며, 요구 사항에 따라 개선 될 수 있습니다.$_=!/^\W*+(.).*(?=\b\w)(?!\1)/i
Nahuel Fouilleul

그러나 질문과 주어진 해결책을주의 깊게 읽으면 공백이 쉘에서 인수를 나누기 위해 사용되기 때문에 처음에는 공백이 발생할 수 없습니다. 이 프로그램은 모든 인수가 동일한 문자로 시작하는지 확인합니다
Nahuel Fouilleul

1

자바 스크립트 (Node.js) , 54 바이트

s=>!s.match(/\b\w+/g).some(p=s=>p-(p=Buffer(s)[0]&31))

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

또는 각 단어 (그러나 첫 번째) 앞에 공백이 있으면 47 바이트 입니다.


또는 하나의 정규 표현식 또는 공백 대신\W
Nahuel Fouilleul

@NahuelFouilleul을 사용 test하면 다른 바이트가 저장됩니다.
얽히고 설킨

1
@NahuelFouilleul 당신은 아마 별도로 게시해야합니다.
Arnauld

이미 펄 버전을 게시했습니다. 자바 스크립트도 잘하지 않습니다. 힌트를 드리겠습니다
Nahuel Fouilleul

1

Japt , 5 바이트

¸mÎro

시도 해봐

¸mÎro     :Implicit input of string
¸         :Split on spaces
 m        :Map
  Î       :  Get first character
   r      :Reduce by
    o     :  Keeping the characters that appear in both, case-insensitive
          :Implicit output as boolean



1

자바 (36 바이트)

s->!s.matches("(?i)(.).* (?!\\1).*")

TIO


1
입력이 공백으로 시작할 수 있다고 생각하며 입력과 같은 경우 에는 작동하지 않습니다 .
사라 J

실제로 테스트 사례는 아니지만 원자 그룹을 사용하여 시작시 공간을 일치시키고 pevent bactracking을 추가 하여 처리 할 수 있습니다 (?> *). 실패한 후 빈 문자열과 일치하도록`*`을 역 추적하기 때문에`*`가 작동하지 않습니다
Nahuel Fouilleul

그러나 질문을 다시 읽으면 시작 부분에서 공백이 발생할 수 있습니다. 예에서 사용은 인수로 단어를 전달하고 공백은 쉘 인수 구분 기호입니다.
Nahuel Fouilleul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.