क्या एक छोटा टॉटोग्राम परीक्षक है? [बन्द है]


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
क्या यह एक tipsप्रश्न के रूप में सीमित है Python? यदि हां, तो इन दोनों टैगों को जोड़ा जाना चाहिए।
अरनौलड

2
अरे दोस्त! यह साइट आमतौर पर स्पष्ट रूप से परिभाषित समस्याओं के लिए आरक्षित है। पोस्ट करने से पहले "क्या इनपुट में विराम चिह्न हो सकता है" जैसी बातों का जवाब दिया जाना चाहिए, लेकिन इसके अलावा यह एक बड़ा पहला प्रश्न है, जो आमतौर पर हमारे द्वारा देखे जाने वाले अन्य नए उपयोगकर्ता के सवालों से तुलनात्मक रूप से है। आपके उदाहरणों को देखते हुए मैं केवल यह स्पष्ट करूँगा कि इनपुट में एकमात्र वर्ण "[A-Za-z]" होगा और आपका प्रश्न विशुद्ध रूप से वस्तुनिष्ठ होगा। मैं यहाँ कुछ अन्य प्रश्नों की गुंजाइश रखता हूँ, अन्यथा यह ईमानदारी से अतिप्रवाह पर एक बेहतर फिट हो सकता है।
मैजिक ऑक्टोपस Urn

1
विराम चिह्न से आपका क्या अभिप्राय है? कौन से पात्र शामिल हैं?
अज्ञानता

1
@MagicOctopusUrn कभी-कभी जब आप स्टैकऑवरफ्लो में एक छोटे से समाधान के लिए पूछते हैं तो इस साइट का संदर्भ लें :)
लुइस फेलिप डी जीसस मुनोज

6
PPCG में आपका स्वागत है! कुछ और परीक्षण मामले (विराम चिह्न सहित) इस चुनौती के लिए एक महान अतिरिक्त होंगे।
AdmBorkBork

जवाबों:




3

क्लोजर , 80 बाइट्स

इसे ऑनलाइन आज़माएं! । टीआईओ क्लूजुर के मानक स्ट्रिंग लाइब्रेरी का समर्थन नहीं करता है, इसलिए पहला संस्करण "कम-केस नहीं ढूंढ सकता" त्रुटि को फेंक देगा।

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

Ungolfed:

(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))" "))))
गेलन इवानोव

3

पॉवरशेल , 57 50 41 बाइट्स

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

इसे ऑनलाइन आज़माएं!

इनपुट लेता है और splitइसे व्हाट्सएप पर भेज देता है। प्रत्येक शब्द के माध्यम से लूप्स, और sऑबस्ट्रिन gको स्थिति में शुरू करने 0और 1चरित्र के लिए जाने से पहला अक्षर पकड़ लेता है । फिर प्रत्येक पत्र की केवल एक प्रति को बाहर निकालने के लिए निक फ्लैग के sortसाथ अक्षरों (डिफ़ॉल्ट रूप से असंवेदनशील) -u, और countउन नामों के सत्यापन के लिए -equal हैं 1। आउटपुट निहित है।

-9 बाइट्स mazzy के लिए धन्यवाद।




1
@mazzy तय इरादा समझने की कोशिश कर
Nahuel Fouilleul

@mazzy मैं आपको regex संस्करण पोस्ट करने दूंगा जब प्रश्न फिर से खोल दिया जाएगा। यह अपने स्वयं के उत्तर को वारंट करने के लिए पर्याप्त है।
AdmBorkBork

मैं सहमत हूँ। लेकिन यह सवाल ताक पर है, इसलिए मैं कोई नया जवाब नहीं दे सकता।
माज़ी


2

ब्रेकीलॉग , 5 बाइट्स

ḷṇ₁hᵛ

इसे ऑनलाइन आज़माएं!

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

मैंने अभी देखा कि यह विराम चिह्न को संभालने में सक्षम है, लेकिन किसी भी विवादास्पद परीक्षण मामलों के बिना मैं यह नहीं बता सकता कि क्या यह काम करता है या नहीं करता है ...
असंबंधित स्ट्रिंग

2

हास्केल , 71 बाइट्स

f s|c<-fromEnum.head<$>words s=all(`elem`[-32,0,32]).zipWith(-)c$tail c

इसे ऑनलाइन आज़माएं!


हास्केल , 61 58 बाइट्स (उपयोग करके Data.Char.toLower)

  • तीन बाइट्स को नमि के लिए सहेजा गया ।
import Data.Char
(all=<<(==).head).(toLower.head<$>).words

इसे ऑनलाइन आज़माएं!


@ नमि धन्यवाद।
जोनाथन फ्रीच

2

पर्ल 5 ( -p), 20 बाइट्स

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

TIO

खराब विराम चिह्न (31 बाइट्स) में निम्नलिखित टिप्पणियाँ

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

31 बाइट्स

अन्यथा 31 बाइट्स के साथ एक और दृष्टिकोण भी है:

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

31 बाइट्स अन्य


विराम चिह्नों के बारे में क्या? स्ट्रिंग के तल पर रिक्त स्थान या विराम चिह्न के बारे में क्या?
माज़ी

यह उत्तर दिए गए परीक्षण मामलों के लिए काम करता है, आवश्यकताओं के आधार पर इसमें सुधार किया जा सकता है$_=!/^\W*+(.).*(?=\b\w)(?!\1)/i
नाहुले फौइउल

लेकिन सवाल और दिए गए समाधान को ध्यान से पढ़ते हुए, शुरुआत में रिक्त स्थान नहीं हो सकते क्योंकि रिक्त स्थान को तर्क विभाजित करने के लिए शेल द्वारा उपयोग किया जाता है। कार्यक्रम केवल यह देखता है कि सभी तर्क एक ही चरित्र से शुरू होते हैं
नहुएल फौलीउल

1

जावास्क्रिप्ट (Node.js) , 54 बाइट्स

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

इसे ऑनलाइन आज़माएं!

या 47 बाइट्स यदि प्रत्येक शब्द (लेकिन पहला) एक स्थान से पहले होने की गारंटी है।


या एक रेगेक्स में या एक जगह के साथ\W
नहुएल फॉइलुल

@NahuelFouilleul, का उपयोग testकरके एक और बाइट बचाता है।
शैगी

1
@NahuelFouilleul आपको शायद अलग से पोस्ट करना चाहिए।
अरनौलद

पहले से ही पर्ल संस्करण पोस्ट किया है, मैं जावास्क्रिप्ट के रूप में अच्छी तरह से मास्टर नहीं करता, मैं आपको एक संकेत देने के लिए खुश हूं
नाहुएल फौइउलुल




1

जावा, (36 बाइट्स)

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

TIO


1
मुझे लगता है कि इनपुट को एक स्थान से शुरू करने की अनुमति है, और यह उस तरह के इनपुट के लिए काम नहीं करता है
सारा जे

वास्तव में यह एक परीक्षण का मामला नहीं है, लेकिन यह किया जा सकता है संभाला जोड़ने (?> *)परमाणु समूह का उपयोग कर शुरुआत में और pevent bactracking को अंतरिक्ष मिलान करने के लिए,। सिर्फ `*` काम नहीं करता है क्योंकि
फेल

लेकिन फिर सवाल पढ़ने रिक्त स्थान उदाहरण में शुरुआत beause उपयोग तर्क के रूप में पारित करने के लिए शब्द और रिक्त स्थान खोल तर्क सीमांकक हैं पर हो सकता है
Nahuel Fouilleul
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.