Có một kiểm tra tautogram nhỏ hơn? [đóng cửa]


10

Gần đây tôi đã tham gia chơi golf mã và cố gắng viết trình kiểm tra tautogram nhỏ nhất.

Một tautogram là một câu trong đó tất cả các từ bắt đầu bằng cùng một chữ cái, ví dụ: Hoa nở rộ từ Pháp .

Đưa ra một câu làm đầu vào, xác định xem đó là một tautogram.

Các trường hợp thử nghiệm

Flowers flourish from France
    True

This is not a Tautogram
    False

Tôi đã đưa ra mã python này (vì đó là ngôn ngữ chính của tôi):

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

Sử dụng:

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

Câu có thể chứa dấu phẩy và dấu chấm, nhưng không có ký tự đặc biệt nào khác, chỉ có chữ và chữ in hoa và chữ thường.

Kích thước của nó là 98 byte. Có một giải pháp nhỏ hơn trong bất kỳ ngôn ngữ?


1
Có phải nó được dự định là một tipscâu hỏi giới hạn Python? Nếu vậy, cả hai thẻ nên được thêm vào.
Arnauld

2
Bạn ơi! Trang web này thường được dành riêng cho các vấn đề được xác định rõ ràng. Những câu như "đầu vào có thể có dấu câu" nên được trả lời trước khi đăng, nhưng ngoài ra đây là câu hỏi đầu tiên tuyệt vời so với các câu hỏi của người dùng mới khác mà chúng ta thường thấy. Đánh giá bằng các ví dụ của bạn Tôi chỉ cần làm rõ rằng các ký tự duy nhất trong đầu vào sẽ là "[A-Za-z]" và câu hỏi của bạn sẽ hoàn toàn khách quan. Tôi muốn tìm ra một số câu hỏi khác ở đây, điều này có thể phù hợp hơn với tràn.
Bạch tuộc ma thuật Urn

1
Bạn có ý nghĩa gì bởi dấu câu? Những nhân vật được bao gồm?
Hiện thân của sự thiếu hiểu biết

1
@MagicOctopusUrn Đôi khi khi bạn yêu cầu một giải pháp ngắn trong stackOverflow, hãy tham khảo trang web này :)
Luis felipe De jesus Munoz

6
Chào mừng đến với PPCG! Một vài trường hợp kiểm tra nữa (bao gồm cả dấu câu) sẽ là một bổ sung tuyệt vời cho thử thách này.
admBorkBork

Câu trả lời:




3

Clojure , 80 byte

Hãy thử trực tuyến! . TIO không hỗ trợ thư viện Chuỗi tiêu chuẩn của Clojure, vì vậy phiên bản đầu tiên sẽ đưa ra lỗi "Không thể tìm thấy chữ thường".

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

Ung dung:

(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

Tôi đã tạo một phiên bản để tránh việc nhập:

(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

Nhưng đó là 112 Byte .


Đây là giải pháp vợt của tôi:(define(f s)(apply char=?(map(λ(x)(char-upcase(car(string->list x))))(string-split s))))
Galen Ivanov

Ngắn hơn nhiều trong PicoLisp:(de f(s)(apply =(mapcar car(split(chop(lowc s))" "))))
Galen Ivanov

3

PowerShell , 57 50 41 byte

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

Hãy thử trực tuyến!

Đưa đầu vào và splits vào khoảng trắng. Vòng lặp qua từng từ và lấy chữ cái đầu tiên bằng cách lấy substrin gbắt đầu từ vị trí 0và tìm 1ký tự. Sau đó sort, các chữ cái (không phân biệt chữ hoa chữ thường theo mặc định) với -ucờ nique để chỉ lấy ra một bản sao của mỗi chữ cái và xác minh tên countcủa các tên đó là -equal 1. Đầu ra là ẩn.

-9 byte nhờ mazzy.




1
@mazzy cố định tìm hiểu ý định
Nahuel Fouilleul 26/03/19

@mazzy Tôi sẽ cho phép bạn đăng phiên bản regex khi câu hỏi được mở lại. Nó đủ khác nhau để đảm bảo câu trả lời của riêng mình.
admBorkBork

Tôi đồng ý. nhưng câu hỏi này được giữ lại, vì vậy tôi không thể tạo ra một câu trả lời mới.
mê mẩn


2

Brachylog , 5 byte

ḷṇ₁hᵛ

Hãy thử trực tuyến!

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

Bây giờ tôi mới nhận thấy rằng điều này phải có khả năng xử lý dấu câu, nhưng không có bất kỳ trường hợp kiểm tra dấu chấm câu nào, tôi không thể biết liệu điều này có hay không vẫn hoạt động ...
Chuỗi không liên quan


2

Perl 5 ( -p), 20 byte

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

TIO

Nhận xét sau trong trường hợp dấu câu xấu (31 byte)

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

31 byte

mặt khác, có một cách tiếp cận khác, với 31 byte:

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

31 byte khác


những gì về dấu câu? những gì về khoảng trắng hoặc dấu chấm câu ở chuỗi của chuỗi?
mê mẩn

câu trả lời này hoạt động cho các trường hợp thử nghiệm nhất định, có thể được cải thiện tùy thuộc vào các yêu cầu có thể$_=!/^\W*+(.).*(?=\b\w)(?!\1)/i
Nahuel Fouilleul 26/03/19

nhưng đọc cẩn thận câu hỏi và giải pháp đã cho, các khoảng trắng lúc đầu không thể xảy ra do các khoảng trắng được sử dụng bởi shell để phân tách các đối số. Chương trình chỉ kiểm tra rằng tất cả các đối số bắt đầu với cùng một nhân vật
Nahuel Fouilleul 26/03/19

1

JavaScript (Node.js) , 54 byte

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

Hãy thử trực tuyến!

Hoặc 47 byte nếu mỗi từ (nhưng từ đầu tiên) được đảm bảo đứng trước khoảng trắng.


hoặc trong một regex hoặc với một khoảng \W
trắng

@NahuelFouilleul, sử dụng testlưu một byte khác.
Shaggy

1
@NahuelFouilleul Có lẽ bạn nên đăng riêng.
Arnauld

đã đăng phiên bản perl, tôi cũng không thành
thạo

1

Japt , 5 byte

¸mÎro

Thử nó

¸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

Java, (36 byte)

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

TIO


1
Tôi nghĩ rằng đầu vào được phép bắt đầu bằng một khoảng trắng và điều này không hoạt động đối với đầu vào như thế .
Sara J

thực sự đó không phải là một trường hợp thử nghiệm, nhưng điều này có thể được xử lý thêm (?> *), sử dụng nhóm nguyên tử để khớp với không gian lúc ban đầu và để bactracking. chỉ `*` không hoạt động vì sau khi thất bại các trận đấu sẽ quay lại `*` để khớp chuỗi trống
Nahuel Fouilleul

tuy nhiên việc đọc lại câu hỏi không gian có thể xảy ra ở đầu beause trong ví dụ, cách sử dụng là để chuyển các từ làm đối số và khoảng trắng là dấu phân cách đối số shell
Nahuel Fouilleul 26/03/19
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.