小さなtautogramチェッカーはありますか?[閉まっている]


10

最近コードゴルフを始めて、最小のオートグラムチェッカーを書こうとしました。

tautogramは、たとえば、すべての単語は、同じ文字で始まるした文である:花がフランスから頭角を現します

文を入力として、それがトートグラムかどうかを判別します。

テストケース

Flowers flourish from France
    True

This is not a Tautogram
    False

私はこのpythonコードを思いつきました(それが私の主な言語であるため):

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
tips質問に限定するつもりPythonですか?もしそうなら、これらの両方のタグを追加する必要があります。
アーノールド

2
へや友達!このサイトは通常、明示的に定義された問題のために予約されています。「入力に句読点を含めることができますか」などの質問は投稿する前に回答する必要がありますが、それ以外は、私たちが通常目にする他の新規ユーザーの質問に比べて、最初の質問としては素晴らしいものです。あなたの例から判断すると、入力の文字は「[A-Za-z]」のみであり、質問は純粋に客観的であることを明確にします。私はこの辺りで他のいくつかの質問を調べますが、そうでなければ、これは正直にオーバーフローにより適しているかもしれません。
マジックタコの壷

1
句読点とはどういう意味ですか?どのキャラクターが含まれていますか?
無知の

1
@MagicOctopusUrn場合によっては、stackOverflowで短い解決策を求めるときに、このサイトを参照してください。)
Luis felipe De jesus Munoz

6
PPCGへようこそ!さらにいくつかのテストケース(句読点を含む)は、この課題への大きな追加となるでしょう。
AdmBorkBork

回答:




3

Clojure、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))))
ガレン・イワノフ

PicoLispでははるかに短い:(de f(s)(apply =(mapcar car(split(chop(lowc s))" "))))
Galen Ivanov

3

PowerShell57 50 41バイト

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

オンラインでお試しください!

入力を取りsplit、空白でそれをsします。各単語をループし、最初の文字を取得します。これは、substrin gを位置から開始して、文字を取得01ます。次にsort-uniqueフラグを使用して文字(デフォルトでは大文字と小文字を区別しない)をsして、各文字のコピーを1つだけ引き出しcount、それらの名前がに-eq一致することを確認し1ます。出力は暗黙的です。

-9バイトはマジーのおかげです。




1
@mazzy が意図を理解しようとしていたのを修正
Nahuel Fouilleul

@mazzy質問が再開されたときに正規表現バージョンを投稿させていただきます。それはそれ自身の答えを保証するほど十分に異なっています。
AdmBorkBork

私は同意するよ。この質問は保留になっているので、新しい回答を作成することはできません。
マジー




2

Perl 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

JavaScript(Node.js)、54バイト

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

オンラインでお試しください!

または、各ワード(ただし最初のワード)の前にスペースが付いていることが保証されている場合は47バイト


または1つの正規表現またはスペースの代わりに\W
Nahuel Fouilleul

@ NahuelFouilleul、using testは別のバイトを節約します。
Shaggy

1
@NahuelFouilleulあなたはおそらく投稿する必要があります個別に。
Arnauld

すでにperlバージョンを投稿しているので、javascriptも習得していません。ヒントを教えてくれます
Nahuel Fouilleul




1

Java、(36バイト)

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

TIO


1
入力はスペースで始めることが許可されていると思いますが、これはそのような入力では機能しません
サラJ

実際、これはテストケースではありませんが、アトミックグループを使用して、最初のスペースを照合し、バックトラッキングをイベント化することで、これを追加して処理できます(?> *)。一致が失敗すると空の文字列に一致するように* *をバックトラックするため、 `*`だけでは機能しません
Nahuel Fouilleul

ただし、質問をもう一度読むと、例のように最初にスペースが発生する可能性があります。使用例は、単語を引数として渡すことであり、スペースはシェル引数の区切り文字です
Nahuel Fouilleul
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.