उन स्तंभों को खोजें जहाँ सभी वर्ण समान हों


18

मुझे एसओ पर यह सवाल आया और उसने सोचा कि यह एक अच्छा गोल्फ चैलेंज बना देगा। तो यहाँ है:

चुनौती:

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

इनपुट और आउटपुट:

इनपुट में मुद्रण योग्य गैर-व्हाट्सएप ASCII वर्णों की एक या अधिक पंक्तियाँ होती हैं, प्रत्येक के बाद एक नई पंक्ति होती है। आप मान सकते हैं कि सभी इनपुट लाइनों की लंबाई समान है। न्यूलाइन को इनपुट का हिस्सा नहीं माना जाना चाहिए (यानी आपको इसे मैचिंग कैरेक्टर के रूप में आउटपुट नहीं करना चाहिए)।

उदाहरण इनपुट (बेशर्मी से SO प्रश्न से चुराया गया):

abcdefg
avcddeg
acbdeeg

इनपुट को पढ़ने के बाद, आपके प्रोग्राम को प्रत्येक मिलान कॉलम और उनमें मौजूद वर्णों की स्थिति को प्रिंट करना चाहिए। (आपका कार्यक्रम हो सकता है, लेकिन आवश्यकता नहीं है, आगे के इनपुट को पढ़ना बंद कर दें यदि यह जल्दी निर्धारित कर सकता है कि कोई मेल खाने वाले कॉलम नहीं हैं।) किसी भी उचित आउटपुट प्रारूप की अनुमति है; विशेष रूप से, आप स्थिति के लिए 0-आधारित या 1-आधारित अनुक्रमण का उपयोग कर सकते हैं।

उपरोक्त इनपुट के लिए उदाहरण आउटपुट (0-आधारित इंडेक्सिंग का उपयोग करके):

0: a
3: d
6: g

स्कोरिंग:

यह कोड गोल्फ है, इसलिए सबसे कम उत्तर जीतता है। एक टाई की स्थिति में, अतिरिक्त सुविधाओं के लिए आंशिक टाई ब्रेकर चार्ट से सम्मानित किया जा सकता है:

  • असमान लंबाई की इनपुट लाइनों को सही ढंग से संभालने के लिए −½ चार्ट। (आउटपुट में सबसे छोटी इनपुट लाइन के अंत में स्थितियाँ नहीं होनी चाहिए।)
  • यूटीएफ -8 को मनमाने ढंग से यूनिकोड वर्णों से मिलकर इनपुट को सही ढंग से संभालने के लिए चार्ट।

प्रेरणा के लिए, आपको SO प्रश्न (ऊपर देखें) में कुछ अपुष्ट समाधान मिल सकते हैं।

स्पष्टीकरण:

  • बस पदों और पात्रों को समेटते हुए, जैसा कि 0a3d6g, "उचित आउटपुट" के रूप में नहीं गिना जाता है। आपको आउटपुट के प्रत्येक तत्व के बीच किसी प्रकार का विभाजक (जैसे कि एक स्थान) प्रदान करना चाहिए, ताकि इसे अनजाने में पार्स किया जा सके।

  • इनपुट मानक इनपुट स्ट्रीम ( stdin) पर प्रदान किया जाएगा , या अपनी पसंद की भाषा के लिए जो भी टेक्स्ट फ़ाइल इनपुट तंत्र है, उसका उपयोग करना। (यदि आपकी चुनी हुई भाषा में फ़ाइल इनपुट के लिए एक प्राकृतिक तंत्र नहीं है , तो जो कुछ भी आत्मा में निकटतम लगता है, उसे करें।)

  • इनपुट तब समाप्त होता है जब पढ़ने के लिए अधिक डेटा नहीं होता है (यानी जब कोई फ़ाइल की स्थिति होती है)। यदि आप चाहें, तो आपको आवश्यकता हो सकती है कि इनपुट को एक रिक्त रेखा द्वारा समाप्त किया जाए (जो आपको तब इनपुट के भाग के रूप में नहीं गिनना चाहिए, जाहिर है)। यदि आप ऐसा करते हैं, तो कृपया अपने उत्तर में इसका उल्लेख करें ताकि अन्य लोग परीक्षण के लिए सही इनपुट प्रदान कर सकें।

  • हर इनपुट लाइन, जिसमें आखिरी भी शामिल है, एक नई लाइन वर्ण के साथ समाप्त होती है। आपके उत्तर को इस मेल को मेल खाते कॉलम के रूप में रिपोर्ट नहीं करना चाहिए। (यह ठीक है अगर आपका समाधान इनपुट को भी संभाल सकता है जहां अंतिम पंक्ति एक नई पंक्ति में समाप्त नहीं होती है, लेकिन इसकी आवश्यकता नहीं है।)


तो क्या एक रिक्त रेखा इनपुट को समाप्त करती है?
स्टीवन रंबलस्की

"आपको आउटपुट के प्रत्येक तत्व के बीच किसी प्रकार का विभाजक प्रदान करना चाहिए ताकि इसे बिना किसी बाधा के पार्स किया जा सके।" क्या एक स्थान एक सेपरेटर के रूप में गिना जाता है?
स्टीवन रंबलस्की

@StevenRumbalski: इनपुट तब समाप्त होता है जब पढ़ने के लिए अधिक डेटा नहीं होता है; मुझे लगता है कि यदि आपकी भाषा ईओएफ का पता लगाने में समस्या है तो मैं एक अनुगामी रिक्त रेखा की अनुमति दे सकता हूं। और हाँ, एक अंतरिक्ष पूरी तरह से अच्छा विभाजक है।
इल्मरी करोनें

क्या हमारे पास कुछ मनमाना यूटीएफ -8 इनकोडेड यूनिकोड वर्ण नमूना कोड हो सकता है?
उपयोगकर्ता अनजान

जवाबों:


12

एपीएल, 25 अक्षर

∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞

मैंने अपने इंटरप्रेटर के रूप में डायलाग एपीएल (संस्करण 13) का इस्तेमाल किया। यह असमान लंबाई और यूनिकोड (UTF-8) वर्णों के दोनों इनपुट को संभालता है।

उदाहरण:

      ∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞
abcdefg
avcddeg
acbdeeg

  1 a  4 d  7 g  

      ∩/{0=⍴⍵:⍬⋄(⊂⍵,⍨¨⍳⍴⍵),∇⍞}⍞
test日本
blat日本国foo

  4 t  5 日  6 本 

स्पष्टीकरण, कुछ हद तक बाएं से दाएं:

  • इस उत्तर का मुख्य हिस्सा प्रत्यक्ष फ़ंक्शन (मूल रूप से, अनाम फ़ंक्शन) है, जो घुंघराले ब्रेसिज़ के भीतर परिभाषित किया गया है। इसका सही तर्क द्वारा निर्दिष्ट किया गया है
    • 0=⍴⍵:⍬हमारी पहली अभिव्यक्ति है, और यह जाँचता है कि क्या हमने एक खाली लाइन प्राप्त की है (यानी, हम कर चुके हैं)। यह उपनिवेश के दाईं ओर अभिव्यक्ति को सशर्त रूप से निष्पादित करने के लिए एक गार्ड (कई कार्यात्मक प्रोग्रामर्स के लिए एक परिचित निर्माण) का उपयोग करता है। इस मामले में, यदि 0 सही तर्क के आकार / लंबाई ( ) के बराबर है, तो हम खाली सेट ( ) लौटाते हैं ।
    • फ़ंक्शन के भीतर दो भावों को अलग करता है। यदि पिछली अभिव्यक्ति का मूल्यांकन नहीं हुआ (और इस तरह कुछ भी वापस नहीं आया), तो हम अगली अभिव्यक्ति पर जाते हैं।
    • हम स्वयं-संदर्भ फ़ंक्शन ( ) का उपयोग करके फ़ंक्शन को पुन: कॉल करते हैं । फ़ंक्शन का तर्क गैर-मूल्यांकन उपयोगकर्ता इनपुट की एक पंक्ति है, जिसे क्वाड-क्वाड ( ) द्वारा दिया गया है ।
    • ⊂⍵,⍨¨⍳⍴⍵ स्ट्रिंग में प्रत्येक वर्ण के लिए जोड़े बनाता है, जहां प्रत्येक जोड़ी का पहला तत्व स्ट्रिंग में इसकी स्थिति है, और इसका दूसरा तत्व चरित्र है।
    • ⍳⍴⍵1 से एक वेक्टर देता है ⍴⍵, या इनपुट स्ट्रिंग की लंबाई।
    • ⍵,⍨¨,⍨प्रत्येक के लिए ( ¨) इस बाएँ ( , इस मामले में उपयोगकर्ता के इनपुट) तत्व और सही करने के लिए कमिटेड अवतरण समारोह ( ) लागू होता है । संघटन कार्य को व्यवस्थित करने से इसके बाएँ और दाएँ तर्क की अदला-बदली होती है।
    • अंत में, हम परिणाम का उपयोग करके संलग्न करते हैं , ताकि हम इनपुट की रेखाओं के बीच अंतर कर सकें।
  • हम शुरू में उपयोगकर्ता इनपुट ( ) के साथ अपने फ़ंक्शन को फ़ीड करते हैं ।
  • अंत में, हम /चौराहे फ़ंक्शन ( ) का उपयोग करके जोड़े के वैक्टर के हमारे परिणामस्वरूप वेक्टर को कम कर देते हैं ( ), जो जोड़े उप-वैक्टरों में पाए जाते हैं।

बिना किसी अच्छे कारण के जब भी मैं एपीएल देखता हूं कि मेरे पास जे या गोल्फस्क्रिप्ट के लिए नहीं है, तो मेरे पास एक नकारात्मक नकारात्मक प्रतिक्रिया है। लेकिन एक उत्कृष्ट समाधान के लिए वैसे भी +1।
स्टीवन रंबलस्की

मैं वास्तव में जे पर स्विच करने के बारे में सोच रहा था ... मैं कारणों की अपनी सूची से निपटूंगा। :)
डिलन कॉवर

12

गोल्फस्क्रिप्ट (28 वर्ण)

n/zip:^,,{.^=.&.,1>{;;}*}%n*

यूनिकोड के माध्यम से पाइपिंग करते समय चरित्र सेट मुद्दे होते हैं, इसलिए कोई क्वार्टर-पॉइंट बोनस नहीं है।


1
+1। यह मेरे उत्तर से कम उत्थान नहीं होना चाहिए।
स्टीवन रंबलस्की

9

जम्मू, 57 51 44 40 अक्षर

,.&.>y;y{{.z[y=.I.*/2=/\]z=.];._2]1!:1]3

मैं धीरे-धीरे लेकिन निश्चित रूप से वहां पहुंच रहा हूं। मुझे लगता है कि यह अभी भी आदर्श से बहुत दूर है।

मुझे लगा कि हुक का उपयोग करना उत्तर होगा लेकिन दुर्भाग्य से नहीं (44 वर्ण):

,.&.>((];({{.)~)([:I.[:*/2=/\]))];._2]1!:1]3

किसी भी छोटे को प्राप्त करने के लिए मुझे पूरी तरह से अलग विधि की आवश्यकता हो सकती है।


1
+1। लेकिन हां, मैं जे से बेहतर उम्मीद करता हूं
स्टीवन रूंबल्स्की

यह मेरे उत्तर से कम उत्थान नहीं होना चाहिए।
स्टीवन रंबलस्की

1
@StevenRumbalski upvotes हमेशा कोड के सापेक्ष आकार को प्रतिबिंबित नहीं करते हैं। यह कभी-कभी एक भाषा लोकप्रियता प्रतियोगिता बन जाती है। मैं इस बात से सहमत हूं कि गोल्फस्क्रिप्ट उत्तर को एपीएल के साथ होना चाहिए, दुर्भाग्य से मैंने पहले ही इसे अपना उत्थान दे दिया है और इसे आगे बढ़ाने में मदद नहीं कर सकता।
गारेथ

8

हास्केल, 64 वर्ण

main=interact$show.foldl1(filter.flip elem).map(zip[0..]).lines

असमान लंबाई की रेखाओं को संभालता है। यूनिकोड समर्थन वर्तमान स्थानीय सेटिंग्स पर निर्भर करता है।

उदाहरण आउटपुट:

[(0,'a'),(3,'d'),(6,'g')]

+1। यह मेरे उत्तर से कम उत्थान नहीं होना चाहिए।
स्टीवन रंबलस्की

7

पायथन 2, स्कोर 81.5 ( 116 94 86 83 82 बाइट्स माइनस बोनस)

import sys
i=0
for x in zip(*sys.stdin)[:-1]:
 i+=1
 if len(set(x))<2:print i,x[0]

एक अच्छा पायथन गोल्फ के लिए +1 लेकिन आप एक पूरे चार अक्षर खो सकते हैं: [:-1]यह तब तक आवश्यक नहीं है जब तक कि इनपुट के अंत में एक बाहरी नई लाइन को बंद न करें (जो कि प्रश्न में भी नहीं लगता है)।
क्रिस्टोफ़ेड

@ChristopheD: वास्तव में, का परिणाम zip(*sys.stdin)है [('a', 'a', 'a'), ('b', 'v', 'c'), ('c', 'c', 'b'), ('d', 'd', 'd'), ('e', 'd', 'e'), ('f', 'e', 'e'), ('g', 'g', 'g'), ('\n', '\n', '\n')]। मैं एक तरह से चारों ओर जाने से बचने के लिए नहीं देख रहा हूँ कि नई सुर्खियों के अंतिम टपल। कृपया मुझे सही करें अगर मैंने गलत समझा है। उत्थान के लिए धन्यवाद।
स्टीवन रूमालस्की

यदि आप अपने डेटा में अंतिम न्यूलाइन को हटाते हैं, तो उस लाइन के लिए टपल पूरी नहीं होती है (एक '\ n' याद आती है, इसलिए ज़िप केवल उस डेटा पर विचार करता है और वापस लौटाता है जिसे हम ढूंढ रहे हैं, हटाने की अनुमति देता है [:-1]। उदा।zip([1,2,3,4],[1,2,3])=> [(1, 1), (2, 2), (3, 3)]
ChristopheD

@ChristopheD: प्रति युक्ति, "इनपुट में [...] रेखाएँ [...] हैं, प्रत्येक के बाद एक नई रेखा है।"
इल्मरी करोनें

1
क्या इस उत्तर को अस्वीकार करने वाला व्यक्ति इसकी व्याख्या करेगा कि क्यों?
स्टीवन रंबलस्की

5

(बैश) शेल स्क्रिप्टिंग, 105 अक्षर

अगर किसी के पास इसके लिए कुछ और ट्रिक्स हैं, तो कृपया टिप्पणी करने के लिए स्वतंत्र भरें!

for((i=1;i<`tail -1 $1|wc -c`;i++))do
x="cut -c$i $1";y=`$x`;[ `$x|uniq|wc -l` = 1 ]&& echo $i ${y:3};done

परिणाम:

1 ए
4 डी
7 जी

मुझे काम करने में परेशानी हो रही है; नमूना इनपुट पर इसे चलाने से त्रुटियों की एक श्रृंखला प्रिंट होती है जैसे /tmp/cols.sh: line 2: [1: command not foundऔर कुछ नहीं।
इल्मरी करोनें

@ इल्मारी करोनेन: यह एक मैक (हिम तेंदुआ, 10.6.2) पर परीक्षण किया गया था, लेकिन कहीं और काम करना चाहिए। मैं इसे लिनक्स पर कल (एक छोटा फिक्स होना चाहिए) तय कर रहा हूँ
क्रिस्टोफ़ेड

2
ormaaj में प्रतिनिधि की कमी थी, लेकिन टिप्पणी करना चाहता था: यह इल्मरी के लिए टूट जाता है क्योंकि एक लापता स्थान के बाद [; और $ {y: 3} यह केवल इनपुट की 3 लाइनों के साथ काम करने का कारण होगा। पैदावार को ठीक करने और अनुकूलन (100 वर्ण) while((++i%`tail -1 $1|wc -c`));do x=`cut -c$i $1`;((`uniq|wc -l`==1))<<<"$x"&&echo $i ${x: -1};doneऔर डिफ़ॉल्ट मानों का उपयोग करने के साथ एक और बचत करने की अनुमति देनी चाहिए, for((;++i<`tail -1 $1|wc -c`;))doलेकिन बैश में एक अधूरा बग है।
पीटर टेलर

4

पर्ल, 87 अक्षर (tie चार टाई-ब्रेक बोनस)

यहाँ SO थ्रेड से मेरे अपने समाधान का एक गोल्फ संस्करण है :

chomp($a=$b=<>);$a&=$_,$b|=$_ for<>;@$_=$$_=~/./sgfor a,b;$b[$i++]eq$_&&say"$i:$_"for@a

एसओ संस्करण के विपरीत, यह आउटपुट के लिए 1-आधारित इंडेक्स का उपयोग करता है। यह पर्ल 5.10 sayसुविधा का उपयोग करता है , इसलिए इसे perl -M5.010(या साथ perl -E) चलाने की आवश्यकता है ।

SO संस्करण की तरह, यह कोड वैरिएबल-लेंथ लाइन्स को हैंडल करता है, और यदि मानक इनपुट और आउटपुट UTF-8 मोड में होते हैं, तो मनमाना यूनिकोड इनपुट को हैंडल करेगा । काश, डिफ़ॉल्ट रूप से वे नहीं होते, जब तक कि कोई गैर-मुक्त -CS कमांड लाइन स्विच को निर्दिष्ट नहीं करता । इस प्रकार, यह bonus चार बोनस कमाता है, लेकिन the एक नहीं।

संपादित करें: बग को ठीक करने के लिए +1 वर्ण: सिर्फ इसलिए कि इनपुट स्ट्रिंग्स में पंक्ति फ़ीड शामिल नहीं हैं, इसका मतलब यह नहीं है कि वे $a(जैसे "+" & "J" eq "\n") अंत नहीं कर सकते हैं ।


1
के chopबजाय का उपयोग करके आप 1 char बचा सकते हैं chomp
टोटो

@ M42: अच्छी बात है, हालाँकि मुझे वर्तमान संस्करण की मजबूती पसंद है। मुझे लगता है कि मैं mअभी के लिए रखूँगा , ऐसा नहीं है कि फिलहाल रैंकिंग पर कोई फर्क नहीं पड़ता। :)
इल्मरी करोनें

3

T-SQL

SELECT N.number, letter = MIN(SUBSTRING(L.line, N.number, 1))
FROM Lines AS L
INNER JOIN master.dbo.spt_values AS N ON N.type = 'P'
WHERE N.number BETWEEN 1 AND (SELECT MAX(LEN(L2.line)) FROM Lines AS L2)
GROUP BY N.number
HAVING COUNT(DISTINCT SUBSTRING(L.line, N.number, 1)) = 1
ORDER BY N.number

2

स्केल 115 107: (यूटीएफ -8 को संभालने के लिए ()

io.Source.stdin.getLines.map(_.zipWithIndex).toList.flatten.groupBy(_._2).map(_._2.toSet).filter(_.size==1)

अधमरी, और बेहतर परीक्षण क्षमता के Source.fromFile ("f")बजाय stdin:

io.Source.fromFile ("f").
  getLines.map (_.zipWithIndex).
    toList.flatten.groupBy (_._2). 
      map (_._2.toSet).
        filter (_.size==1)

परिणाम:

List(Set((a,0)), Set((g,6)), Set((d,3)))

उपयोग करने के लिए आकार 8 की कमी के लिए गैरेथ का धन्यवाद stdin


आप 8 वर्णों को सहेजने के stdinबजाय उपयोग नहीं कर सकते fromFile("f")?
गैरेथ

2

VBA ( 307.25 284 - 0.75 बोनस = 283.25)

मुझे पता है कि यह पहले ही जीत लिया गया है, लेकिन यहां मेरा शॉट (फ़ाइल नहीं पढ़ना, बस एक स्ट्रिंग - io जोड़ा जाना चाहिए)। मुझे वह पसंद है जो मुझे इस्तेमाल करने के लिए मिलाl() पुनरावर्ती । मुझे आमतौर पर अपने वास्तविक जीवन की प्रोग्रामिंग की पुनरावृत्ति की आवश्यकता नहीं है। मैंने केवल इतना ही परीक्षण किया था, लेकिन मेरा मानना ​​है कि यह यूनिकोड बोनस पॉइंट स्टिपुलेशन को कवर करता है। यह भी vbCrमाना जाता है कि लाइन टर्मिनेटर है। इस वजह से सभी प्रणालियों में अनुवाद नहीं हो सकता है।

कोड:

Function a(i)
b=Split(Left(i,Len(i)-1),vbCr):c=UBound(b):For q=1 To Len(b(c)):d=Mid(b(c),q,1):If l(b,c,q,d) Then a=a & q & ": " & d & vbCr:Next
End Function
Function l(m, n, o, p)
If n+1 Then l=IIf(o<=Len(m(n)),Mid(m(n),o,1)=p,0) And l(m,n-1,o,p) Else l=Mid(m(n+1),o,1)=p
End Function

उदाहरण इनपुट / आउटपुट:

Debug.Print a("abcdefghijklmnop" & vbCr & "abcdefg" & vbCr & "abcabcghijkl" & vbCr)

1: a
2: b
3: c
7: g

2

क्यू, ३२

{a!((*:)x)a:(&)1=(#:')(?:')(+)x}

प्रयोग

q){a!((*:)x)a:(&)1=(#:')(?:')(+)x}[("abcdefg";"avcddeg";"acbdeeg")]
0| a
3| d
6| g

के, २२

उपरोक्त समाधान को 22 से घटाकर K में पूरी तरह से K लिखने के बजाय Q इंटरप्रेटर के लिए किया जा सकता है, जिससे आवश्यक कोष्ठक की संख्या कम हो जाती है।

{a!@[*x]a:&1=#:'?:'+x}

1

PHP, 123 127 :(

मैं इससे खुश नहीं हूँ (इसमें सुधार होना तय है), लेकिन यहाँ जाता है:

<?$a=$b=trim(fgets(STDIN));while($l=fgets(STDIN)){$a&=$l;$b|=$l;}$n=-1;while(@$a[++$n]){echo$a[$n]!=$b[$n]?'':"$n:{$a[$n]}\n";}

प्रमाण यह काम करता है।

यदि कोई $ a और $ b को शुरू करने के अधिक चतुर तरीके के बारे में सोच सकता है, तो कृपया मुझे बताएं। मूल रूप से मेरे पास $a=$b=$n=''और $ b अंततः सही था, लेकिन [empty] & [anything] == [empty], इसलिए $ में कभी सामग्री नहीं थी।


संपादित करें: न्यूलाइन हैंडलिंग (+6) को ठीक करना था लेकिन समापन टैग (-2) को छोड़ दिया।


मैं उत्सुक हूं, आप अपने अधिकांश उत्तरों को सामुदायिक विकि क्यों बनाते हैं?
गारेथ

मुझे इस पर कोई मतलब नहीं था। बहुत समय पहले जब मैं पहली बार कोडगॉल्फ में शामिल हुआ तो किसी ने मुझसे कहा कि यह मानक है। आदत को तोड़ना होगा। हालांकि इसे अभी अन-विकि कर सकते हैं। codegolf.stackexchange.com/a/2249/1419 (टिप्पणियां देखें)
श्री लामा

मुझे लगता है कि यह कोड गोल्फ सवालों के लिए SO पर चीजों को करने का मानक तरीका था, लेकिन यहाँ नहीं तो किसी की भी कोई प्रतिष्ठा नहीं होगी। :-)
गारेथ

आप संभवत: उन्हें ध्वजांकित कर सकते हैं और संयुक्त राष्ट्र के सीडब्ल्यू को एक मॉडरेटर से पूछ सकते हैं । बस यह समझाएं कि यह एक गलती थी।
इल्मरी करोनें

आप बाहर निकलने से दो चार्ट बचा सकते हैं ?>। हालाँकि, मैंने अभी देखा कि आपके कोड में एक बग है: यह एक अतिरिक्त मैच प्रिंट करता है यदि सभी लाइनों में निर्दिष्ट नई अनुगामी होती है।
इल्मरी करोनें

1

जावास्क्रिप्ट (125 134 140 )

for(i=s=[];I=s[++i]=prompt(o='');S=I);for(c=-1;w=r=++c<S.length;o+=r?c+':'+C+'\n':'')for(C=S[c];w<i;)r&=s[w++][c]==C;alert(o)

डेमो: http://jsfiddle.net/Fv7kY/4/

संपादित करें 1 : ब्रेसिज़ से बचने के लिए छोरों को फिर से व्यवस्थित करें। के साथ []गठबंधन करने के लिए मैं प्रारंभिक के साथ swवृद्धि को अभिव्यक्ति में स्थानांतरित करें ।

2 संपादित करें : S=Iअंतिम दर्ज शब्द पर कब्जा करने और उपयोग करने को बचाने के लिए सेट करें s[1]। मिलाना r=1और ++c<S.lengthC=s[c]आंतरिक लूप में सेट करें और Cपिछले और अगले शब्दों के बजाय अभिव्यक्ति s[w][c]==s[w++][c]को छोटा करने के लिए तुलना करें s[w++][c]==C। कुल 9 वर्ण सहेजे। w=r=...सच होने पर भी सेट करेंw=1 जो कि हमें इसके wसाथ आरंभ करने की आवश्यकता है ।


1

रूबी (71)

a,*s=*$<.lines
(a.size-1).times{|i|s.all?{|t|t[i]==a[i]}&&p([i,a[i]])}

उत्पादन:

[0, "a"]
[3, "d"]
[6, "g"]

नोट: रूबी 1.9 की आवश्यकता प्रतीत होती है; रूबी 1.8 संगतता के लिए, के t[i]साथ बदलें t[i,1]
इल्मरी करोनें

1

कॉमन लिस्प, 183 165 अक्षर

(let((l(loop for m =(read-line)until(equal m "")collect m)))(loop for c across(car l)for i from 0 if(null(remove c(mapcar(lambda(y)(char y i))l)))collect(list i c)))

पठनीय प्रारूप:

(let ((l (loop for m = (read-line) until (equal m "") collect m)))
  (loop for c across (car l)
        for i from 0 
        if (null (remove c 
                         (mapcar (lambda(y) (char y i))l)))
        collect(list i c)))

इसे सीधे REPL में दर्ज करें और एक खाली लाइन के साथ समाप्त करते हुए लाइनें डालें।


1

C, 126 वर्ण

char a[999],b[999];main(i){for(gets(a);gets(b);)for(i=0;b[i];++i)a[i]^b[i]?a[i]=0:0;
while(i--)a[i]&&printf("%d:%c\n",i,a[i]);}

मैं इसे घूर रहा हूं लेकिन मैं इसे छोटा नहीं कर सकता। नए दृष्टिकोण की आवश्यकता हो सकती है।

(कोई बोनस अंक नहीं; यह केवल अलग-अलग आकार की रेखाओं को संभालता है यदि पहली पंक्ति छोटी हो।)


0

.NET 4 के साथ C # (280)

using c=System.Console;class P{static void Main(){char[]a=c.ReadLine().ToCharArray();int r,i,l=a.Length;m:i=0;n:r=c.Read();if(r>0&&r!=10&&r!=13){if((int)a[i]!=r)a[i]='\0';i++;goto n;}for(;i>0&&i<l;)a[i++]='\0';if(r>0)goto m;for(i=0;i<l;i++)if(a[i]!='\0')c.WriteLine(i+":"+a[i]);}}
  • 1 पंक्ति, 280 वर्ण
  • बयान और मुख्य विधि का उपयोग करके सभी आवश्यक शामिल हैं।
  • कार्यक्रम को अंत में एक खाली लाइन की आवश्यकता नहीं है , लेकिन इसे स्वीकार करेंगे
  • खाली लाइनों को नजरअंदाज कर दिया जाता है
  • किसी भी लम्बाई के इनपुट स्ट्रिंग्स को संभालता है।
  • उत्पादन को अंत तक सुरक्षित रखता है (जबकि मूल उत्तर वृद्धिशील आउटपुट प्रदान करता है)

पठनीय संस्करण

    char[]a=c.ReadLine().ToCharArray();
    int r,i,l=a.Length;
    m:
    i=0;
    n:
    r=c.Read();
    if(r>0&&r!=10&&r!=13){
        if((int)a[i]!=r)
            a[i]='\0';
        i++;
        goto n;
    }
    for(;i>0&&i<l;)
        a[i++]='\0';
    if(r>0)
        goto m;
    for(i=0;i<l;i++)
        if(a[i]!='\0')
            c.WriteLine(i+":"+a[i]);

मूल उत्तर

c = System.Console; class P {static void Main () {char [] a; var b = c.ReadLine (); a = b.ToCharArray (); जबकि (b! = "") "{(int मैं 0 =; मैं

  • 1 पंक्ति
  • 207 अक्षर
  • बयान और मुख्य विधि का उपयोग करके सभी आवश्यक शामिल हैं।
  • जब कोई खाली लाइन डाली जाती है तो प्रोग्राम समाप्त होता है।
  • पहले से छोटे इनपुट स्ट्रिंग्स को हैंडल नहीं करता है।


पठनीय संस्करण:

    static void Readable()
    {
        char[]a;
        string b=System.Console.ReadLine();
        a=b.ToCharArray();
        while(b.Length>0)
        {
            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] != b[i])
                {
                    a[i] = '\0';
                }
                else
                {
                    System.Console.WriteLine(i+": "+a[i]);
                }
            }
            b=System.Console.ReadLine();
        }
    }


जब मैं इसे चुनौती में परीक्षण इनपुट पर चलाता हूं, तो मुझे मिलता है 0: a 1: b 2: c 3: d 4: e 5: f 6: g 0: a 2: c 3: d 6: g 0: a 3: d 6: g। अपेक्षित आउटपुट होगा 0: a 3: d 6: g
इल्मरी करोनें

@ इल्मरी ओके, लेकिन यह उन कॉलम / अक्षरों को आउटपुट करता है जो प्रत्येक इनपुट लाइन के बाद समान होते हैं। यदि आप मानक इनपुट के रूप में एक फ़ाइल में फीड कर रहे हैं, तो आउटपुट अजीब लग सकता है, लेकिन यदि आप मैन्युअल रूप से इनपुट करते हैं, तो मुझे लगता है कि यह समझ में आता है। मैं विचार करूंगा कि कैसे रिफ्लेक्टर किया जाता है, हालांकि।
डॉ। विली के अपरेंटिस

यदि कोई लाइन पहली पंक्ति से अधिक लंबी है तो आपका समाधान क्रैश हो जाता है।
टिमवी

@ टिमिमा आह ... इस ओर इशारा करने के लिए धन्यवाद!
डॉ। विली का अपरेंटिस

0

अजगर 122 वर्ण :

print("\n".join([str(i)+':'+str(x[0]) for i,x in enumerate(zip(*[tuple(x) for x in input().split()])) if len(set(x))<2]))

आपको )और के बीच की जगह की आवश्यकता नहीं है for। तो इसके बजाय …str(x[0]) for i,x…, आप कर सकते हैं …str(x[0])for i,x…। यह भी पर आता है tuple(x) forऔर.split()])) if
Cyoce

-1

रूबी (242)

s = %w{ abcdefg avcddeg acbdeeg aejdjeggd }
cols = []
s.sort{ |a, b| b.size <=> a.size }[0].size.times do |i|
  uneq=true
  l = s[0][i]
  s.each { |w| uneq = false if l != w[i] }
  cols << [l, i] if uneq
end
cols.each { |c| puts c.join('|') }

चुनौती का इरादा मानक इनपुट से लाइनों को पढ़ना था। मैं भाषाओं (जैसे-ब्राउज़र जावास्क्रिप्ट) के लिए कुछ सुस्ती में कटौती करने को तैयार हूं, जहां वह अवधारणा वास्तव में मौजूद नहीं है, लेकिन रूबी के पास STDIN( ARGFया सिर्फ या सादे gets) है।
इल्मरी करोनें

आह ठीक है। लेकिन अगर एसटीडीआईएन एक लाइन को स्वीकार करता है, तो क्या यह मान लेना चाहिए: "दूसरी पंक्ति में दर्ज करें, या 'एन' को रोकें"? इसलिए एक सरणी बनाने के लिए एक लूप बनाएं।
अगमोदोद

मैंने प्रश्न में कुछ स्पष्टीकरण जोड़े हैं। मूल रूप से, आपको अपनी फ़ाइल के अंत तक फ़ाइल इनपुट लाइनें पढ़ते रहना चाहिए।
इल्मरी करोनें

आपके पास अनावश्यक व्हाट्सएप का एक टन है।
साइओस

-1

सी#

List<string> strings = new List<string> { "abcdefg", "avcddeg", "acbdeeg", "aejdjeggd" };
var transposes = from index in Enumerable.Range(0, strings.First().Length)
                 select new string((from s in strings select s[index]).ToArray());
int i = 0;
foreach(string transpose in transposes)
{
   if (transpose.Distinct().Count() == 1)
     Console.WriteLine("{0}: {1}", i , transpose[0]);
   i++;
}

1
नमस्ते, Arjang, और codegolf.SE में आपका स्वागत है! आपके उत्तर पर कुछ टिप्पणियां: पहला, चूंकि यह एक कोड-गोल्फ चुनौती है, इसलिए आपसे अपेक्षा की जाती है कि आप अपने समाधान को यथासंभव कम करने की कोशिश करें; बस शुरू करने के लिए, आपके पास कुछ लंबे चर नाम हैं जिन्हें आप आसानी से एकल वर्णों में छोटा कर सकते हैं, और कुछ अतिरिक्त व्हाट्सएप जिन्हें आप हटा सकते हैं। (यह "गोल्फ वाले" के साथ अपने कोड के एक पठनीय संस्करण को पोस्ट करना ठीक है, लेकिन आपको वास्तव में एक गोल्फ समाधान भी पोस्ट करना चाहिए।) दूसरा, यदि आप प्रश्न को ध्यान से पढ़ते हैं, तो मैंने निर्दिष्ट किया कि आपको मानक इनपुट से तार पढ़ना चाहिए। , उन्हें हार्डकोड नहीं।
इल्मरी करोनें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.