एक-एक शब्द खोजो


12

is अतिरंजित ’एक ऐसे शब्द का उदाहरण है, जिसे बाएं हाथ पर टाइप किया जा सकता है, एक सामान्य qwerty कीबोर्ड मैप पर। 'एकाधिकार' दाहिने हाथ के लिए एक उदाहरण है।

wordsएक हाथ पर टाइप किए जा सकने वाले शब्दों के लिए यूनिक्स फाइल की खोज करना । आउटपुट दो पंक्तियों का होना चाहिए: बाएं हाथ के लिए ऐसे शब्दों की जगह अलग सूची, उसके बाद दाहिने हाथ के लिए सूची। जैसे

a abaft abase abased abases abate abated abates abbess abbesses ...
h hi hill hilly him hip hippo hippy ho hokum ...

बाएं हाथ के अक्षर हैं:

qwertasdfgzxcvb

दाहिने हाथ के अक्षर हैं:

yuiophjklnm'

अपरकेस अक्षर एक-हाथ के रूप में गिना जाता है; डायक्टिक्स के साथ पत्र दो-हाथ के रूप में गिने जाते हैं और इसलिए उन्हें युक्त शब्दों को अनदेखा किया जा सकता है।


2
क्या बड़े अक्षरों में दो हाथ या एक की आवश्यकता होती है? मुझे लगता है कि "é" जैसे अक्षर या तो हाथ से टाइप नहीं किए जा सकते हैं, है ना? अंत में, मुझे लगता है कि apostrophe एक वैध दाहिने हाथ की कुंजी है, सही है?
स्टीवन रंबलस्की

4
यह प्रश्न बाएँ हाथ और दाएँ हाथ के अक्षरों की परिभाषा के बिना स्व-निहित नहीं है।
पीटर टेलर

4
एक चीज जो नियमित अभिव्यक्ति का उपयोग करने वाले लोगों की मदद कर सकती है: उपयोग करना [a-gq-tv-xz] बाएं हाथ के अक्षरों के ['h-puy]लिए और दाएं हाथ के अक्षरों के लिए उपयोग करना उन सभी को लिखने से थोड़ा कम है।
पॉल प्रेस्टिज

जवाबों:


7

सेड, 78 बाइट्स

1{x;s/^/! /;x};/^['h-puy]*$/IH;/^[a-gq-tv-xz]*$/I{G;x};${x;y/\n/ /;s/! */\n/p}

GNU sed की आवश्यकता होती है, साथ चलाएं sed -n -f words.sed < /usr/share/dict/words


7

बैश ( 100 89 वर्ण)

for x in a-gq-tvwxz h-puy\'
do grep -iE ^[$x]*$ /usr/share/dict/words|tr '
' \ 
echo
done

ध्यान दें कि 21 वर्ण शब्द फ़ाइल में पूर्ण पथ पर जाते हैं: यदि हमें यह मानने की अनुमति है कि pwd / usr / share / dict है तो उनमें से 16 को बचाया जा सकता है।

छोटी रेगीज़ के लिए क्रोन का श्रेय ।


1
"^ ^ ([$ x]) * $" regex होना चाहिए
Rob

4

बैश, 86

for x in a-gq-tvwxz h-pyu\'
do egrep ^[$x]*$ /usr/share/dict/words|tr '
' \ 
echo
done

टेलर for , मेरे egrep, chrons वर्ण का समूहीकरण।

परिभाषा के अनुसार, यदि आप दो हाथों से अंधे टाइप करते हैं, यदि आप एक बड़े अक्षर का उत्पादन करना पसंद करते हैं, तो आप हमेशा बाएं हाथ का उपयोग दाएं हाथ के अपरकेस चरित्र का उत्पादन करने के लिए करते हैं और इसके विपरीत।

बेशक आप Wकेवल बाएं हाथ से एक बड़े पैमाने पर उत्पादन कर सकते हैं , लेकिन आप चाहें junkतो बाएं हाथ से भी उत्पादन कर सकते हैं ।


मुझे पत्रों पर समूहीकरण के लिए मारो, अच्छी नौकरी!
रोब

यह पीटर टेलर और मेरे बीच की दौड़ की स्थिति है। उनका 100 (101?) चार्यू सॉल्यूशन सार्वजनिक था, जब मैंने अपनी पोस्ट और ऑप्टिमाइज़ेशन शुरू किया था, लेकिन उन्होंने मेरे सामने अपना सुधार पूरा किया, जिसे मैंने खुद पूरा करने के बाद देखा। मैंने एग्रेप और बिना -i के साथ एक ही भाषा में पोस्ट नहीं किया होगा, लेकिन अगर वह कुछ मिनट तेज होता, तो इसके बजाय एक टिप्पणी करता।
उपयोगकर्ता अज्ञात

मैंने इसके बारे में सही सोचा था जब मैंने टिप्पणी को regex को सही किया था, और काम करने से पहले मुझे छोड़ दिया था। घर पहुंचने के समय तक मैं इसके बारे में पूरी तरह भूल गया था।
रॉब

आपके अंतिम पैराग्राफ का कारण स्टीवन रुंबलस्की है और मैंने स्पष्टीकरण के लिए धक्का दिया, और यह स्पष्टीकरण कि अपरकेस के रूप में गिना जाता है, जिसे आपने इसे प्रकाशित करने से 24 घंटे पहले प्राप्त किया था, इसलिए यह वास्तव में कल्पना नहीं है।
पीटर टेलर

3

बॉर्न शेल, 55 वर्ण

(या किसी बॉर्न की तरह खोल लेकिन bash, zshया yash)

w=$1;f()echo `grep -ixe[$1]*<$w`;f a-gq-tvwxz;f h-puy\'

के रूप में पुकारा गया sh -f words.sh /usr/share/dict/words। (बेशक, सिस्टम जहां पर shवास्तव में है bashकुछ लिनक्स वितरण पर की तरह, का उपयोग एक और बॉर्न की तरह की तरह खोल ash, ksh, mksh, pdksh, posh...)


2

जावास्क्रिप्ट (नोड), 201 बाइट

f=require('fs');c=d='';r=(a=f.readFileSync('/dev/stdin')+c).split('\n');a.
replace(/[aqzxswcdevfrbgt]/ig,'').split('\n').map(function(k,i){k==r[i]&&(
d+=k+' ');!k.length&&(c+=r[i]+' ')});console.log(c,d)

यह शायद किसी अन्य भाषा में बहुत छोटे संस्करण में फिर से लिखा जा सकता है, लेकिन मैं सिर्फ नोड को आज़माना चाहता था।

साथ दौड़ो node words.js < /usr/share/dict/words


1

क्यू ( 121 140 बाइट्स)

आउटपुट सटीक नहीं है (रिक्त स्थान के बजाय बैकटिक्स) लेकिन यह इस बात का लक्षण है कि क्यू स्ट्रिंग प्रकार प्रदर्शित करता है।

i:read0`:/usr/share/dict/words;
0N!/:i:`$/:i where each (min each) each flip i in/:\:(x,upper x:"qwertasdfgzxcvb";y,upper y:"yuiophjklnm");

संपादित करें: मिश्रित मामले को संभालने के लिए था, +20 चार्ट


आप 111 के लिए यह काफी गोल्फ कर सकते हैं।`$'i(&:')(min'')(+)(i:read0`:/usr/share/dict/words)in/:\:(x,upper x:"qwertasdfgzxcvb";y,upper y:"yuiophjklnm'")
tmartin

1

रूबी, 112 92 अक्षर

संपादित करें: यह छोटा है, हालांकि लगभग उतना मज़ेदार नहीं है:

puts %w(a-gq-tv-xz 'h-puy).map{|r|File.read('/usr/share/dict/words').scan(/^[#{r}]+$/i)*' '}

मूल:

puts File.read('/usr/share/dict/words').scan(/(^[a-gq-tv-xz]+$)|(^['h-puy]+$)/i).transpose.map{|w|w.compact*' '}

बहुत सरल रीगेक्स-आधारित समाधान। दूसरों के साथ की तरह, यदि आप ARGV में फ़ाइल नाम को पास करने की अनुमति देते हैं या यदि यह आपकी वर्तमान निर्देशिका में माना जाता है, तो आप कुछ पात्रों को सहेज सकते हैं।


1

पायथन, 130 बाइट्स

a="\n"
b=""
try:
 while 1:v=raw_input();m=[x.lower()in"yuiophjklnm'"for x in v];v+=" ";a+=v*all(m);b+=0**any(m)*v
except:print b+a

साथ दौड़ो python one_handed_words.py < /usr/share/dict/words


क्या मैंने यहां पोस्ट किए गए समाधानों में से एक को लेने की अनुमति दी, इसे छोटा कर दिया और इसे अपनी पोस्ट में डाल दिया?
स्नूपुन्स

यदि यह सिर्फ छोटा सुधार है, तो टिप्पणियों को पोस्ट करना अधिक अनुकूल है। यदि आप एक महत्वपूर्ण बदलाव कर रहे हैं, तो एक नया उत्तर पोस्ट करना बेहतर है, लेकिन उस उत्तर को क्रेडिट देने के लिए अच्छा है जिसे आप इसे आधार बना रहे हैं।
gnibbler

1

हास्केल (191)

import Char
g x=all(`elem`x)
f m[]=m
f[x,y](w:ws)|g"quertasdfgzxcvb"w=f[w:x,y]ws|g"yuiophjklnm'"w=f[x,w:y]ws|1<2=f[x,y]ws
main=getContents>>=mapM(putStrLn.unwords).f[[],[]].lines.map toLower

1

पायथन 2.7 (139 अक्षर)

import os
a=set("yuiophjklnm'")
c=os.read(0,9**9).lower().split()
print'\n'.join([' '.join(filter(x,c))for x in a.isdisjoint,a.issuperset])

1

पर्ल, 72 बाइट्स

$a{/^['h-puy]+$/i-/^[a-gq-tv-xz]+$/i}.=y/\n/ /rfor<>;print@a{1,-1,$,=$/}

साथ दौड़ो perl words.pl /usr/share/dict/words


मुझे सिंटैक्स त्रुटि मिलती है: बेयरवर्ड मिला जहां ऑपरेटर शब्द पर अपेक्षित था। लाइन 1, "tr / \ n / / rfor" के पास
wim

1
यह मेरे लिए ५.१४.२ पर काम करता है, और इसके लिए r
५.५४

0

अजगर - १५२ १३th चरस (अप्रकाशित)

r,a,b=set("YUIOPHJKLNM'"),[],[]
try:
 while 1:
  w=raw_input()
  s=set(w.upper())
  if r|s==r:a+=w
  if s-r==s:b+=w
except:for x in a,b:print' '.join(x)

संपादित करें: ऊपरी मामले और एपोस्ट्रोफ को संभालें।


0

पायथन, 243 वर्ण

संपादित करें: यहाँ सवाल के अनुसार एक अधिक आज्ञाकारी कार्यक्रम है:

import sys
def o(w):
 r="yuiophjklnm'";f=2;w=w.lower()
 for l in w:
  if(f==1)&(l in r)|(f==0)&(l not in r):return 2
  f=l not in r
 return f
y=[[],[],[]]
for w in sys.stdin.read().split('\n'):y[o(w)].append(w)
for i in y[0:2]:print' '.join(i)

आह्वान: python onehanded.py > /usr/share/dict/words या कोई अन्य शब्द नई-अलग शब्दों के साथ फाइल करें

पुराना: 141 वर्ण, सिर्फ एक शब्द का कार्य

रिटर्न rightया leftअगर wएक हाथ में है, और bothअगर दोनों हाथों का उपयोग किया जाता है।

def o(w):
 r="yuiophjklnm'";f=2
 for l in w:
  if(f==1)&(l in r)|(f==0)&(l not in r):f=2;break
  f=[1,0][l in r]
 return'rlbieogfththt'[f::3]

क्या आप कृपया इसे कार्यशील कार्यक्रम में बदल देंगे या चरित्र गणना को हटा देंगे? अन्यथा, शीर्षक भ्रामक है।
स्टीवन रंबलस्की

0

क्यू, 95 (हार्डकोडेड पथ के साथ 111)

{`$'e[(w(&)l(w)in .Q.a except a)],(e:enlist)w(&)(l:all')(w:(_)read0 -1!`$x)in a:"yuiophjklnm'"}

प्रयोग

q){`$'e[(w(&)l(w)in .Q.a except a)],(e:enlist)w(&)(l:all')(w:(_)read0 -1!`$x)in a:"yuiophjklnm'"} "/usr/share/dict/words"
`a`a`aa`aa`aaa`aaa`aaaa`aaaaaa`aaas`aaberg`aae`aaee`aaf`aag`aar`aara`aarc`aas..
`h`h`hh`hi`hi`hi`hih`hiko`hikuli`hili`hill`hill`hillo`hilly`hilly`hilo`hilum`..

यदि आप इसे हार्डकोड करते हैं तो 14 और चार्ट

`$'e[(w(&)l(w)in .Q.a except a)],(e:enlist)w(&)(l:all')(w:(_)read0`:/usr/share/dict/words)in a:"yuiophjklnm'"

0

जे, 109

1!:2&2;:^:_1('qwertasdfgzxcvb';'yuiophjkl''nm')((#@[>[:>./i.)&>/#]);:1!:1<'/usr/share/dict/words'[9!:37]0,3$_

मुझे यकीन है कि यह बेहतर किया जा सकता है, मुझे नहीं पता कि स्ट्रिंग हेरफेर कैसे करें :-(


0

अजगर: 122

import os
S=set("yuiophjklnm'")
c=os.read(0,9**9).lower().split()
print"\n".join(w for w in c if set(w)<=S or set(w)^S>=S)

इसके साथ लॉन्च किया गया:

python name_of_program.py < /usr/share/dict/words

विचार ज्यादातर डिलन कॉवर का ही है, लेकिन मैं set(w)<=Sएक उपसमूह को इंगित करने के लिए उपयोग करता हूं जबकि set(w)^S>=Sएक असंतुष्ट सेट के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.